From dc277ea9d4310332f1c10cbce56f65ea207649aa Mon Sep 17 00:00:00 2001 From: luukee Date: Mon, 29 Jun 2020 18:28:08 -0700 Subject: [PATCH 1/2] update with the prod tree --- .gitignore | 1 + _wpeprivate/config.json | 1 + apple-touch-icon-precomposed.png | 0 apple-touch-icon.png | 0 data/citizen2.json | 286 + data/citizen2.min.json | 1 + data/citizen3.json | 675 + data/citizen3.min.json | 1 + data/how-to-register-to-vote-in-texas.json | 472 + .../how-to-register-to-vote-in-texas.min.json | 1 + data/test-five.json | 71 + data/test-five.min.json | 1 + data/test-four.json | 94 + data/test-four.min.json | 1 + data/test-six.json | 56 + data/test-six.min.json | 1 + data/test-two.json | 76 + data/test-two.min.json | 442 + data/testing-another.json | 101 + data/testing-another.min.json | 1 + data/testing-command.json | 35 + data/testing-command.min.json | 1 + data/vote.json | 49 + data/vote.min.json | 1 + dist/js/cme-tree.min.js | 4857 ++++++- favicon.ico | 0 license.txt | 385 + readme.html | 98 + tests/src/APITest.php | 856 -- tests/src/DBTest.php | 182 - tests/src/UtilitiesTest.php | 125 - tests/src/ValidateTest.php | 351 - vendor/composer/ClassLoader.php | 445 - vendor/composer/autoload_classmap.php | 9 - vendor/composer/autoload_files.php | 13 - vendor/composer/autoload_namespaces.php | 10 - vendor/composer/autoload_psr4.php | 17 - vendor/composer/autoload_real.php | 70 - vendor/composer/autoload_static.php | 99 - vendor/composer/installed.json | 413 - wp-activate.php | 163 + wp-admin/about.php | 479 + wp-admin/admin-ajax.php | 117 + wp-admin/admin-footer.php | 112 + wp-admin/admin-functions.php | 15 + wp-admin/admin-header.php | 266 + wp-admin/admin-post.php | 71 + wp-admin/admin.php | 363 + wp-admin/async-upload.php | 108 + wp-admin/comment.php | 333 + wp-admin/credits.php | 128 + wp-admin/css/about-rtl.css | 643 + wp-admin/css/about-rtl.min.css | 2 + wp-admin/css/about.css | 643 + wp-admin/css/about.min.css | 2 + wp-admin/css/admin-menu-rtl.css | 924 ++ wp-admin/css/admin-menu-rtl.min.css | 2 + wp-admin/css/admin-menu.css | 924 ++ wp-admin/css/admin-menu.min.css | 2 + wp-admin/css/code-editor-rtl.css | 72 + wp-admin/css/code-editor-rtl.min.css | 2 + wp-admin/css/code-editor.css | 72 + wp-admin/css/code-editor.min.css | 2 + wp-admin/css/color-picker-rtl.css | 173 + wp-admin/css/color-picker-rtl.min.css | 2 + wp-admin/css/color-picker.css | 173 + wp-admin/css/color-picker.min.css | 2 + wp-admin/css/colors/_admin.scss | 493 + wp-admin/css/colors/_mixins.scss | 54 + wp-admin/css/colors/_variables.scss | 58 + wp-admin/css/colors/blue/colors-rtl.css | 502 + wp-admin/css/colors/blue/colors-rtl.min.css | 2 + wp-admin/css/colors/blue/colors.css | 502 + wp-admin/css/colors/blue/colors.min.css | 2 + wp-admin/css/colors/blue/colors.scss | 11 + wp-admin/css/colors/coffee/colors-rtl.css | 502 + wp-admin/css/colors/coffee/colors-rtl.min.css | 2 + wp-admin/css/colors/coffee/colors.css | 502 + wp-admin/css/colors/coffee/colors.min.css | 2 + wp-admin/css/colors/coffee/colors.scss | 7 + wp-admin/css/colors/ectoplasm/colors-rtl.css | 502 + .../css/colors/ectoplasm/colors-rtl.min.css | 2 + wp-admin/css/colors/ectoplasm/colors.css | 502 + wp-admin/css/colors/ectoplasm/colors.min.css | 2 + wp-admin/css/colors/ectoplasm/colors.scss | 8 + wp-admin/css/colors/light/colors-rtl.css | 520 + wp-admin/css/colors/light/colors-rtl.min.css | 2 + wp-admin/css/colors/light/colors.css | 520 + wp-admin/css/colors/light/colors.min.css | 2 + wp-admin/css/colors/light/colors.scss | 38 + wp-admin/css/colors/midnight/colors-rtl.css | 502 + .../css/colors/midnight/colors-rtl.min.css | 2 + wp-admin/css/colors/midnight/colors.css | 502 + wp-admin/css/colors/midnight/colors.min.css | 2 + wp-admin/css/colors/midnight/colors.scss | 5 + wp-admin/css/colors/ocean/colors-rtl.css | 502 + wp-admin/css/colors/ocean/colors-rtl.min.css | 2 + wp-admin/css/colors/ocean/colors.css | 502 + wp-admin/css/colors/ocean/colors.min.css | 2 + wp-admin/css/colors/ocean/colors.scss | 8 + wp-admin/css/colors/sunrise/colors-rtl.css | 502 + .../css/colors/sunrise/colors-rtl.min.css | 2 + wp-admin/css/colors/sunrise/colors.css | 502 + wp-admin/css/colors/sunrise/colors.min.css | 2 + wp-admin/css/colors/sunrise/colors.scss | 6 + wp-admin/css/common-rtl.css | 3955 ++++++ wp-admin/css/common-rtl.min.css | 9 + wp-admin/css/common.css | 3955 ++++++ wp-admin/css/common.min.css | 9 + wp-admin/css/customize-controls-rtl.css | 3032 +++++ wp-admin/css/customize-controls-rtl.min.css | 2 + wp-admin/css/customize-controls.css | 3032 +++++ wp-admin/css/customize-controls.min.css | 2 + wp-admin/css/customize-nav-menus-rtl.css | 887 ++ wp-admin/css/customize-nav-menus-rtl.min.css | 2 + wp-admin/css/customize-nav-menus.css | 887 ++ wp-admin/css/customize-nav-menus.min.css | 2 + wp-admin/css/customize-widgets-rtl.css | 478 + wp-admin/css/customize-widgets-rtl.min.css | 2 + wp-admin/css/customize-widgets.css | 478 + wp-admin/css/customize-widgets.min.css | 2 + wp-admin/css/dashboard-rtl.css | 1313 ++ wp-admin/css/dashboard-rtl.min.css | 2 + wp-admin/css/dashboard.css | 1313 ++ wp-admin/css/dashboard.min.css | 2 + wp-admin/css/deprecated-media-rtl.css | 413 + wp-admin/css/deprecated-media-rtl.min.css | 2 + wp-admin/css/deprecated-media.css | 413 + wp-admin/css/deprecated-media.min.css | 2 + wp-admin/css/edit-rtl.css | 1675 +++ wp-admin/css/edit-rtl.min.css | 2 + wp-admin/css/edit.css | 1675 +++ wp-admin/css/edit.min.css | 2 + wp-admin/css/farbtastic-rtl.css | 41 + wp-admin/css/farbtastic-rtl.min.css | 2 + wp-admin/css/farbtastic.css | 41 + wp-admin/css/farbtastic.min.css | 2 + wp-admin/css/forms-rtl.css | 1592 +++ wp-admin/css/forms-rtl.min.css | 2 + wp-admin/css/forms.css | 1592 +++ wp-admin/css/forms.min.css | 2 + wp-admin/css/ie-rtl.css | 770 ++ wp-admin/css/ie-rtl.min.css | 2 + wp-admin/css/ie.css | 770 ++ wp-admin/css/ie.min.css | 2 + wp-admin/css/install-rtl.css | 451 + wp-admin/css/install-rtl.min.css | 2 + wp-admin/css/install.css | 451 + wp-admin/css/install.min.css | 2 + wp-admin/css/l10n-rtl.css | 120 + wp-admin/css/l10n-rtl.min.css | 2 + wp-admin/css/l10n.css | 120 + wp-admin/css/l10n.min.css | 2 + wp-admin/css/list-tables-rtl.css | 2145 +++ wp-admin/css/list-tables-rtl.min.css | 2 + wp-admin/css/list-tables.css | 2145 +++ wp-admin/css/list-tables.min.css | 2 + wp-admin/css/login-rtl.css | 283 + wp-admin/css/login-rtl.min.css | 2 + wp-admin/css/login.css | 283 + wp-admin/css/login.min.css | 2 + wp-admin/css/media-rtl.css | 1270 ++ wp-admin/css/media-rtl.min.css | 2 + wp-admin/css/media.css | 1270 ++ wp-admin/css/media.min.css | 2 + wp-admin/css/nav-menus-rtl.css | 901 ++ wp-admin/css/nav-menus-rtl.min.css | 2 + wp-admin/css/nav-menus.css | 901 ++ wp-admin/css/nav-menus.min.css | 2 + wp-admin/css/revisions-rtl.css | 578 + wp-admin/css/revisions-rtl.min.css | 2 + wp-admin/css/revisions.css | 578 + wp-admin/css/revisions.min.css | 2 + wp-admin/css/site-icon-rtl.css | 54 + wp-admin/css/site-icon-rtl.min.css | 2 + wp-admin/css/site-icon.css | 54 + wp-admin/css/site-icon.min.css | 2 + wp-admin/css/themes-rtl.css | 1929 +++ wp-admin/css/themes-rtl.min.css | 2 + wp-admin/css/themes.css | 1929 +++ wp-admin/css/themes.min.css | 2 + wp-admin/css/widgets-rtl.css | 834 ++ wp-admin/css/widgets-rtl.min.css | 2 + wp-admin/css/widgets.css | 834 ++ wp-admin/css/widgets.min.css | 2 + wp-admin/css/wp-admin-rtl.css | 14 + wp-admin/css/wp-admin-rtl.min.css | 15 + wp-admin/css/wp-admin.css | 14 + wp-admin/css/wp-admin.min.css | 15 + wp-admin/custom-background.php | 559 + wp-admin/custom-header.php | 1445 ++ wp-admin/customize.php | 262 + wp-admin/edit-comments.php | 334 + wp-admin/edit-form-advanced.php | 768 ++ wp-admin/edit-form-comment.php | 209 + wp-admin/edit-link-form.php | 156 + wp-admin/edit-tag-form.php | 277 + wp-admin/edit-tags.php | 591 + wp-admin/edit.php | 376 + wp-admin/export.php | 294 + wp-admin/freedoms.php | 71 + 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/browser-rtl.png | Bin 0 -> 40170 bytes wp-admin/images/browser.png | Bin 0 -> 40626 bytes wp-admin/images/bubble_bg-2x.gif | Bin 0 -> 507 bytes wp-admin/images/bubble_bg.gif | Bin 0 -> 398 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 -> 996 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 -> 21770 bytes wp-admin/images/icons32-vs-2x.png | Bin 0 -> 21396 bytes wp-admin/images/icons32-vs.png | Bin 0 -> 8007 bytes wp-admin/images/icons32.png | Bin 0 -> 8023 bytes wp-admin/images/imgedit-icons-2x.png | Bin 0 -> 7664 bytes wp-admin/images/imgedit-icons.png | Bin 0 -> 4055 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 -> 2254 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 -> 200 bytes wp-admin/images/media-button-music.gif | Bin 0 -> 206 bytes wp-admin/images/media-button-other.gif | Bin 0 -> 248 bytes wp-admin/images/media-button-video.gif | Bin 0 -> 133 bytes wp-admin/images/media-button.png | Bin 0 -> 323 bytes wp-admin/images/menu-2x.png | Bin 0 -> 12672 bytes wp-admin/images/menu-vs-2x.png | Bin 0 -> 12453 bytes wp-admin/images/menu-vs.png | Bin 0 -> 5086 bytes wp-admin/images/menu.png | Bin 0 -> 5039 bytes wp-admin/images/no.png | Bin 0 -> 755 bytes wp-admin/images/post-formats-vs.png | Bin 0 -> 2450 bytes wp-admin/images/post-formats.png | Bin 0 -> 2157 bytes wp-admin/images/post-formats32-vs.png | Bin 0 -> 5111 bytes wp-admin/images/post-formats32.png | Bin 0 -> 5142 bytes wp-admin/images/resize-2x.gif | Bin 0 -> 234 bytes wp-admin/images/resize-rtl-2x.gif | Bin 0 -> 233 bytes wp-admin/images/resize-rtl.gif | Bin 0 -> 149 bytes wp-admin/images/resize.gif | Bin 0 -> 70 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 -> 55 bytes wp-admin/images/spinner-2x.gif | Bin 0 -> 8536 bytes wp-admin/images/spinner.gif | Bin 0 -> 4162 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 -> 5395 bytes wp-admin/images/wheel.png | Bin 0 -> 6047 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 -> 9133 bytes wp-admin/images/wpspin_light.gif | Bin 0 -> 2209 bytes wp-admin/images/xit-2x.gif | Bin 0 -> 825 bytes wp-admin/images/xit.gif | Bin 0 -> 181 bytes wp-admin/images/yes.png | Bin 0 -> 539 bytes wp-admin/import.php | 206 + wp-admin/includes/admin-filters.php | 152 + wp-admin/includes/admin.php | 87 + wp-admin/includes/ajax-actions.php | 4418 +++++++ wp-admin/includes/bookmark.php | 316 + .../class-automatic-upgrader-skin.php | 113 + .../class-bulk-plugin-upgrader-skin.php | 67 + .../class-bulk-theme-upgrader-skin.php | 67 + .../includes/class-bulk-upgrader-skin.php | 175 + wp-admin/includes/class-core-upgrader.php | 362 + .../includes/class-file-upload-upgrader.php | 124 + wp-admin/includes/class-ftp-pure.php | 186 + wp-admin/includes/class-ftp-sockets.php | 246 + wp-admin/includes/class-ftp.php | 912 ++ .../class-language-pack-upgrader-skin.php | 84 + .../includes/class-language-pack-upgrader.php | 370 + wp-admin/includes/class-pclzip.php | 5692 ++++++++ .../includes/class-plugin-installer-skin.php | 98 + .../includes/class-plugin-upgrader-skin.php | 70 + wp-admin/includes/class-plugin-upgrader.php | 459 + .../includes/class-theme-installer-skin.php | 103 + .../includes/class-theme-upgrader-skin.php | 89 + wp-admin/includes/class-theme-upgrader.php | 593 + .../class-walker-category-checklist.php | 125 + .../class-walker-nav-menu-checklist.php | 117 + .../includes/class-walker-nav-menu-edit.php | 241 + .../includes/class-wp-ajax-upgrader-skin.php | 126 + .../includes/class-wp-automatic-updater.php | 913 ++ .../includes/class-wp-comments-list-table.php | 796 ++ .../includes/class-wp-community-events.php | 442 + .../includes/class-wp-filesystem-base.php | 801 ++ .../includes/class-wp-filesystem-direct.php | 489 + .../includes/class-wp-filesystem-ftpext.php | 581 + .../class-wp-filesystem-ftpsockets.php | 517 + .../includes/class-wp-filesystem-ssh2.php | 599 + wp-admin/includes/class-wp-importer.php | 323 + .../includes/class-wp-internal-pointers.php | 203 + .../includes/class-wp-links-list-table.php | 321 + .../includes/class-wp-list-table-compat.php | 51 + wp-admin/includes/class-wp-list-table.php | 1323 ++ .../includes/class-wp-media-list-table.php | 777 ++ .../includes/class-wp-ms-sites-list-table.php | 559 + .../class-wp-ms-themes-list-table.php | 726 ++ .../includes/class-wp-ms-users-list-table.php | 457 + .../class-wp-plugin-install-list-table.php | 634 + .../includes/class-wp-plugins-list-table.php | 872 ++ .../class-wp-post-comments-list-table.php | 77 + .../includes/class-wp-posts-list-table.php | 1772 +++ wp-admin/includes/class-wp-screen.php | 1242 ++ wp-admin/includes/class-wp-site-icon.php | 233 + .../includes/class-wp-terms-list-table.php | 635 + .../class-wp-theme-install-list-table.php | 469 + .../includes/class-wp-themes-list-table.php | 302 + wp-admin/includes/class-wp-upgrader-skin.php | 203 + wp-admin/includes/class-wp-upgrader-skins.php | 43 + wp-admin/includes/class-wp-upgrader.php | 906 ++ .../includes/class-wp-users-list-table.php | 584 + wp-admin/includes/comment.php | 196 + wp-admin/includes/continents-cities.php | 549 + wp-admin/includes/credits.php | 76 + wp-admin/includes/dashboard.php | 1621 +++ wp-admin/includes/deprecated.php | 1516 +++ wp-admin/includes/edit-tag-messages.php | 58 + wp-admin/includes/export.php | 621 + wp-admin/includes/file.php | 2246 ++++ wp-admin/includes/image-edit.php | 913 ++ wp-admin/includes/image.php | 699 + wp-admin/includes/import.php | 217 + wp-admin/includes/list-table.php | 84 + wp-admin/includes/media.php | 3266 +++++ wp-admin/includes/menu.php | 345 + wp-admin/includes/meta-boxes.php | 1284 ++ wp-admin/includes/misc.php | 1793 +++ wp-admin/includes/ms-admin-filters.php | 44 + wp-admin/includes/ms-deprecated.php | 105 + wp-admin/includes/ms.php | 998 ++ wp-admin/includes/nav-menu.php | 1137 ++ wp-admin/includes/network.php | 606 + wp-admin/includes/noop.php | 113 + wp-admin/includes/options.php | 124 + wp-admin/includes/plugin-install.php | 726 ++ wp-admin/includes/plugin.php | 1925 +++ wp-admin/includes/post.php | 1876 +++ wp-admin/includes/revision.php | 403 + wp-admin/includes/schema.php | 1103 ++ wp-admin/includes/screen.php | 233 + wp-admin/includes/taxonomy.php | 290 + wp-admin/includes/template.php | 2184 ++++ wp-admin/includes/theme-install.php | 212 + wp-admin/includes/theme.php | 706 + wp-admin/includes/translation-install.php | 264 + wp-admin/includes/update-core.php | 1393 ++ wp-admin/includes/update.php | 764 ++ wp-admin/includes/upgrade.php | 2968 +++++ wp-admin/includes/user.php | 1568 +++ wp-admin/includes/widgets.php | 290 + wp-admin/index.php | 142 + wp-admin/install-helper.php | 200 + wp-admin/install.php | 417 + wp-admin/js/accordion.js | 93 + wp-admin/js/accordion.min.js | 1 + wp-admin/js/code-editor.js | 329 + wp-admin/js/code-editor.min.js | 1 + wp-admin/js/color-picker.js | 363 + wp-admin/js/color-picker.min.js | 1 + wp-admin/js/comment.js | 97 + wp-admin/js/comment.min.js | 1 + wp-admin/js/common.js | 1152 ++ wp-admin/js/common.min.js | 1 + wp-admin/js/custom-background.js | 141 + wp-admin/js/custom-background.min.js | 1 + wp-admin/js/custom-header.js | 61 + wp-admin/js/customize-controls.js | 9297 +++++++++++++ wp-admin/js/customize-controls.min.js | 4 + wp-admin/js/customize-nav-menus.js | 3449 +++++ wp-admin/js/customize-nav-menus.min.js | 2 + wp-admin/js/customize-widgets.js | 2338 ++++ wp-admin/js/customize-widgets.min.js | 1 + wp-admin/js/dashboard.js | 499 + wp-admin/js/dashboard.min.js | 1 + wp-admin/js/edit-comments.js | 976 ++ wp-admin/js/edit-comments.min.js | 1 + wp-admin/js/editor-expand.js | 1604 +++ wp-admin/js/editor-expand.min.js | 1 + wp-admin/js/editor.js | 1409 ++ 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 | 1092 ++ wp-admin/js/image-edit.min.js | 1 + wp-admin/js/inline-edit-post.js | 553 + wp-admin/js/inline-edit-post.min.js | 1 + wp-admin/js/inline-edit-tax.js | 290 + wp-admin/js/inline-edit-tax.min.js | 1 + wp-admin/js/iris.min.js | 4 + wp-admin/js/language-chooser.js | 26 + wp-admin/js/language-chooser.min.js | 1 + wp-admin/js/link.js | 69 + wp-admin/js/link.min.js | 1 + wp-admin/js/media-gallery.js | 39 + 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 | 204 + wp-admin/js/media.min.js | 1 + wp-admin/js/nav-menu.js | 1294 ++ wp-admin/js/nav-menu.min.js | 1 + wp-admin/js/password-strength-meter.js | 80 + wp-admin/js/password-strength-meter.min.js | 1 + wp-admin/js/plugin-install.js | 220 + wp-admin/js/plugin-install.min.js | 1 + wp-admin/js/post.js | 1268 ++ wp-admin/js/post.min.js | 1 + wp-admin/js/postbox.js | 443 + wp-admin/js/postbox.min.js | 1 + wp-admin/js/revisions.js | 1169 ++ 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-box.js | 263 + wp-admin/js/tags-box.min.js | 1 + wp-admin/js/tags-suggest.js | 185 + wp-admin/js/tags-suggest.min.js | 1 + wp-admin/js/tags.js | 146 + wp-admin/js/tags.min.js | 1 + wp-admin/js/theme-plugin-editor.js | 991 ++ wp-admin/js/theme-plugin-editor.min.js | 1 + wp-admin/js/theme.js | 2065 +++ wp-admin/js/theme.min.js | 1 + wp-admin/js/updates.js | 2473 ++++ wp-admin/js/updates.min.js | 2 + wp-admin/js/user-profile.js | 470 + 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 | 740 ++ wp-admin/js/widgets.min.js | 1 + wp-admin/js/widgets/custom-html-widgets.js | 429 + .../js/widgets/custom-html-widgets.min.js | 1 + wp-admin/js/widgets/media-audio-widget.js | 150 + wp-admin/js/widgets/media-audio-widget.min.js | 1 + wp-admin/js/widgets/media-gallery-widget.js | 340 + .../js/widgets/media-gallery-widget.min.js | 1 + wp-admin/js/widgets/media-image-widget.js | 166 + wp-admin/js/widgets/media-image-widget.min.js | 1 + wp-admin/js/widgets/media-video-widget.js | 250 + wp-admin/js/widgets/media-video-widget.min.js | 1 + wp-admin/js/widgets/media-widgets.js | 1306 ++ wp-admin/js/widgets/media-widgets.min.js | 1 + wp-admin/js/widgets/text-widgets.js | 535 + wp-admin/js/widgets/text-widgets.min.js | 1 + wp-admin/js/word-count.js | 220 + wp-admin/js/word-count.min.js | 1 + wp-admin/js/wp-fullscreen-stub.js | 39 + wp-admin/js/wp-fullscreen-stub.min.js | 1 + wp-admin/js/xfn.js | 273 + wp-admin/js/xfn.min.js | 1 + wp-admin/link-add.php | 29 + wp-admin/link-manager.php | 119 + wp-admin/link-parse-opml.php | 95 + wp-admin/link.php | 117 + wp-admin/load-scripts.php | 73 + wp-admin/load-styles.php | 95 + wp-admin/maint/repair.php | 171 + wp-admin/media-new.php | 84 + wp-admin/media-upload.php | 112 + wp-admin/media.php | 149 + wp-admin/menu-header.php | 275 + wp-admin/menu.php | 294 + wp-admin/moderation.php | 12 + wp-admin/ms-admin.php | 13 + wp-admin/ms-delete-site.php | 107 + 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 | 151 + wp-admin/nav-menus.php | 855 ++ wp-admin/network.php | 118 + wp-admin/network/about.php | 13 + wp-admin/network/admin.php | 34 + wp-admin/network/credits.php | 13 + wp-admin/network/edit.php | 39 + wp-admin/network/freedoms.php | 13 + wp-admin/network/index.php | 78 + wp-admin/network/menu.php | 74 + wp-admin/network/plugin-editor.php | 13 + wp-admin/network/plugin-install.php | 16 + wp-admin/network/plugins.php | 13 + wp-admin/network/privacy.php | 13 + wp-admin/network/profile.php | 13 + wp-admin/network/settings.php | 443 + wp-admin/network/setup.php | 13 + wp-admin/network/site-info.php | 197 + wp-admin/network/site-new.php | 269 + wp-admin/network/site-settings.php | 157 + wp-admin/network/site-themes.php | 207 + wp-admin/network/site-users.php | 355 + wp-admin/network/sites.php | 361 + wp-admin/network/theme-editor.php | 13 + wp-admin/network/theme-install.php | 16 + wp-admin/network/themes.php | 323 + wp-admin/network/update-core.php | 13 + wp-admin/network/update.php | 16 + wp-admin/network/upgrade.php | 144 + wp-admin/network/user-edit.php | 13 + wp-admin/network/user-new.php | 134 + wp-admin/network/users.php | 244 + wp-admin/options-discussion.php | 285 + wp-admin/options-general.php | 389 + wp-admin/options-head.php | 18 + wp-admin/options-media.php | 150 + wp-admin/options-permalink.php | 372 + wp-admin/options-reading.php | 151 + wp-admin/options-writing.php | 201 + wp-admin/options.php | 302 + wp-admin/plugin-editor.php | 314 + wp-admin/plugin-install.php | 170 + wp-admin/plugins.php | 576 + wp-admin/post-new.php | 79 + wp-admin/post.php | 293 + wp-admin/press-this.php | 75 + wp-admin/privacy.php | 230 + wp-admin/profile.php | 18 + wp-admin/revision.php | 136 + wp-admin/setup-config.php | 422 + wp-admin/term.php | 68 + wp-admin/theme-editor.php | 342 + wp-admin/theme-install.php | 360 + wp-admin/themes.php | 514 + wp-admin/tools.php | 76 + wp-admin/update-core.php | 779 ++ wp-admin/update.php | 285 + wp-admin/upgrade-functions.php | 12 + wp-admin/upgrade.php | 127 + wp-admin/upload.php | 331 + wp-admin/user-edit.php | 725 ++ wp-admin/user-new.php | 520 + 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 | 13 + wp-admin/user/menu.php | 22 + wp-admin/user/privacy.php | 13 + wp-admin/user/profile.php | 13 + wp-admin/user/user-edit.php | 13 + wp-admin/users.php | 526 + wp-admin/widgets.php | 524 + wp-blog-header.php | 21 + wp-comments-post.php | 63 + wp-config-sample.php | 89 + wp-config.php | 135 + wp-content/advanced-cache.php | 0 wp-content/index.php | 2 + .../force-strong-passwords/force-zxcvbn.js | 20 + .../force-zxcvbn.min.js | 1 + .../force-strong-passwords/js-admin.js | 16 + .../force-strong-passwords/js-admin.min.js | 1 + .../slt-force-strong-passwords-de_DE.mo | Bin 0 -> 1076 bytes .../slt-force-strong-passwords-de_DE.po | 28 + .../slt-force-strong-passwords-en_US.po | 32 + .../slt-force-strong-passwords-fr_FR.mo | Bin 0 -> 895 bytes .../slt-force-strong-passwords-fr_FR.po | 32 + .../slt-force-strong-passwords-ja.mo | Bin 0 -> 995 bytes .../slt-force-strong-passwords-ja.po | 29 + .../slt-force-strong-passwords-pt_BR.mo | Bin 0 -> 1036 bytes .../slt-force-strong-passwords-pt_BR.po | Bin 0 -> 1036 bytes .../slt-force-strong-passwords-sr_RS.mo | Bin 0 -> 967 bytes .../slt-force-strong-passwords-sr_RS.po | 30 + .../slt-force-strong-passwords-zh_CN.mo | Bin 0 -> 577 bytes .../slt-force-strong-passwords-zh_CN.po | 37 + .../force-strong-passwords/readme.md | 140 + .../force-strong-passwords/readme.txt | 136 + .../slt-force-strong-passwords.php | 255 + wp-content/mu-plugins/mu-plugin.php | 197 + .../mu-plugins/slt-force-strong-passwords.php | 15 + .../mu-plugins/wpe-wp-sign-on-plugin.php | 409 + .../inc/custom-exceptions.php | 27 + .../wpe-wp-sign-on-plugin/inc/logger.php | 43 + .../inc/security-checks.php | 11 + .../inc/sign-on-user-provider.php | 136 + .../inc/user-nonce-helper.php | 134 + .../inc/user-request-id-helper.php | 70 + .../mu-plugins/wpengine-common/admin-ui.php | 594 + .../mu-plugins/wpengine-common/ajax.php | 79 + .../mu-plugins/wpengine-common/changelog.txt | 284 + .../wpengine-common/class-cookies.php | 46 + .../wpengine-common/class-filterplugin.php | 79 + .../class-monitor_admin_ajax.php | 86 + .../class-wpe-heartbeat-throttle.php | 41 + .../wpengine-common/class-wpeapi.php | 185 + .../wpengine-common/class-wpedeployment.php | 130 + .../wpengine-common/class.notices.php | 174 + .../class.powered-by-widget.php | 97 + .../wpengine-common/class.sessionsanity.php | 36 + .../wpengine-common/class.site-preview.php | 102 + .../wpengine-common/common-common.php | 269 + .../wpengine-common/css/bootstrap.css | 1279 ++ .../css/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../css/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../wpengine-common/css/glyphicons-white.png | Bin 0 -> 147941 bytes .../wpengine-common/css/glyphicons.png | Bin 0 -> 173275 bytes .../wpengine-common/css/wpe-common.css | 327 + .../wpengine-common/dify-partial.php | 27 + .../wpengine-common/dify-widget.php | 55 + .../images/ajax-loader-transparent.gif | Bin 0 -> 673 bytes .../wpengine-common/images/ajax-loader.gif | Bin 0 -> 9427 bytes .../wpengine-common/images/favicon.ico | Bin 0 -> 1150 bytes .../wpengine-common/images/window-close.png | Bin 0 -> 218 bytes .../wpengine-common/images/wpe-16x16.jpg | Bin 0 -> 477 bytes .../wpengine-common/images/wpe-curated.png | Bin 0 -> 1156 bytes .../images/wpe-identity-square-dark-16.png | Bin 0 -> 697 bytes .../images/wpengine_small_dark.png | Bin 0 -> 30600 bytes .../images/wpengine_small_light.png | Bin 0 -> 30600 bytes .../wpengine-common/js/bootstrap-modal.js | 247 + .../js/bootstrap-transition.js | 60 + .../wpengine-common/js/bootstrap.js | 2266 ++++ .../wpengine-common/js/dify-blog.js | 86 + .../wpengine-common/js/wpe-common.js | 451 + .../wpengine-common/js/wpe-rewrite.js | 23 + .../wpengine-common/monitor-admin-ajax.php | 27 + .../mu-plugins/wpengine-common/network.php | 88 + .../mu-plugins/wpengine-common/patterns.php | 254 + .../mu-plugins/wpengine-common/plugin.php | 2346 ++++ .../wpengine-common/views/admin-footer.php | 20 + .../views/admin/notice-sticky.php | 13 + .../wpengine-common/views/admin/notice.php | 14 + .../views/general/powered-by.php | 9 + .../wpengine-common/views/modal.php | 23 + .../wpengine-common/views/staging-modal.php | 23 + .../views/wpe-migration-preview-template.php | 88 + .../mu-plugins/wpengine-common/wpe-sec.php | 72 + .../mu-plugins/wpengine-common/wpe_wpdb.php | 53 + .../mu-plugins/wpengine-security-auditor.php | 484 + wp-content/mysql.sql | 2104 +++ wp-content/plugins/akismet/LICENSE.txt | 339 + wp-content/plugins/akismet/_inc/akismet.css | 586 + wp-content/plugins/akismet/_inc/akismet.js | 276 + wp-content/plugins/akismet/_inc/form.js | 30 + .../plugins/akismet/_inc/img/logo-full-2x.png | Bin 0 -> 5052 bytes wp-content/plugins/akismet/akismet.php | 66 + .../plugins/akismet/class.akismet-admin.php | 1131 ++ .../plugins/akismet/class.akismet-cli.php | 91 + .../akismet/class.akismet-rest-api.php | 271 + .../plugins/akismet/class.akismet-widget.php | 114 + wp-content/plugins/akismet/class.akismet.php | 1391 ++ wp-content/plugins/akismet/index.php | 2 + wp-content/plugins/akismet/readme.txt | 411 + wp-content/plugins/akismet/views/config.php | 231 + wp-content/plugins/akismet/views/get.php | 6 + wp-content/plugins/akismet/views/notice.php | 135 + wp-content/plugins/akismet/views/start.php | 102 + wp-content/plugins/akismet/views/stats.php | 11 + wp-content/plugins/akismet/wrapper.php | 213 + wp-content/plugins/hyperdb-1-1/db-config.php | 389 + wp-content/plugins/hyperdb-1-1/db.php | 1044 ++ wp-content/plugins/hyperdb-1-1/readme.txt | 99 + wp-content/plugins/hyperdb/db-config.php | 292 + wp-content/plugins/hyperdb/db.php | 864 ++ wp-content/plugins/hyperdb/readme.txt | 90 + wp-content/plugins/index.php | 2 + wp-content/themes/index.php | 2 + wp-content/themes/twentyfifteen/404.php | 30 + wp-content/themes/twentyfifteen/archive.php | 64 + .../themes/twentyfifteen/author-bio.php | 39 + wp-content/themes/twentyfifteen/comments.php | 74 + .../themes/twentyfifteen/content-link.php | 60 + .../themes/twentyfifteen/content-none.php | 37 + .../themes/twentyfifteen/content-page.php | 37 + .../themes/twentyfifteen/content-search.php | 37 + wp-content/themes/twentyfifteen/content.php | 60 + .../themes/twentyfifteen/css/editor-style.css | 482 + wp-content/themes/twentyfifteen/css/ie.css | 948 ++ wp-content/themes/twentyfifteen/css/ie7.css | 89 + wp-content/themes/twentyfifteen/footer.php | 41 + wp-content/themes/twentyfifteen/functions.php | 427 + .../twentyfifteen/genericons/COPYING.txt | 9 + .../twentyfifteen/genericons/Genericons.eot | Bin 0 -> 22760 bytes .../twentyfifteen/genericons/Genericons.svg | 543 + .../twentyfifteen/genericons/Genericons.ttf | Bin 0 -> 22576 bytes .../twentyfifteen/genericons/Genericons.woff | Bin 0 -> 14360 bytes .../twentyfifteen/genericons/LICENSE.txt | 339 + .../themes/twentyfifteen/genericons/README.md | 152 + .../twentyfifteen/genericons/genericons.css | 209 + wp-content/themes/twentyfifteen/header.php | 52 + wp-content/themes/twentyfifteen/image.php | 94 + .../themes/twentyfifteen/inc/back-compat.php | 63 + .../twentyfifteen/inc/custom-header.php | 370 + .../themes/twentyfifteen/inc/customizer.php | 773 ++ .../twentyfifteen/inc/template-tags.php | 258 + wp-content/themes/twentyfifteen/index.php | 61 + .../twentyfifteen/js/color-scheme-control.js | 78 + .../twentyfifteen/js/customize-preview.js | 35 + .../themes/twentyfifteen/js/functions.js | 178 + wp-content/themes/twentyfifteen/js/html5.js | 9 + .../js/keyboard-image-navigation.js | 22 + .../twentyfifteen/js/skip-link-focus-fix.js | 26 + wp-content/themes/twentyfifteen/page.php | 38 + wp-content/themes/twentyfifteen/readme.txt | 111 + wp-content/themes/twentyfifteen/rtl.css | 848 ++ .../themes/twentyfifteen/screenshot.png | Bin 0 -> 576231 bytes wp-content/themes/twentyfifteen/search.php | 53 + wp-content/themes/twentyfifteen/sidebar.php | 47 + wp-content/themes/twentyfifteen/single.php | 48 + wp-content/themes/twentyfifteen/style.css | 6087 +++++++++ wp-content/themes/twentyseventeen/404.php | 34 + wp-content/themes/twentyseventeen/README.txt | 96 + wp-content/themes/twentyseventeen/archive.php | 61 + .../assets/css/colors-dark.css | 566 + .../assets/css/editor-style.css | 600 + .../themes/twentyseventeen/assets/css/ie8.css | 225 + .../themes/twentyseventeen/assets/css/ie9.css | 43 + .../twentyseventeen/assets/images/coffee.jpg | Bin 0 -> 117713 bytes .../assets/images/espresso.jpg | Bin 0 -> 93540 bytes .../twentyseventeen/assets/images/header.jpg | Bin 0 -> 114854 bytes .../assets/images/sandwich.jpg | Bin 0 -> 171858 bytes .../assets/images/svg-icons.svg | 155 + .../assets/js/customize-controls.js | 36 + .../assets/js/customize-preview.js | 150 + .../twentyseventeen/assets/js/global.js | 249 + .../themes/twentyseventeen/assets/js/html5.js | 326 + .../assets/js/jquery.scrollTo.js | 209 + .../twentyseventeen/assets/js/navigation.js | 109 + .../assets/js/skip-link-focus-fix.js | 31 + .../themes/twentyseventeen/comments.php | 82 + wp-content/themes/twentyseventeen/footer.php | 47 + .../themes/twentyseventeen/front-page.php | 54 + .../themes/twentyseventeen/functions.php | 586 + wp-content/themes/twentyseventeen/header.php | 57 + .../twentyseventeen/inc/back-compat.php | 69 + .../twentyseventeen/inc/color-patterns.php | 580 + .../twentyseventeen/inc/custom-header.php | 123 + .../themes/twentyseventeen/inc/customizer.php | 210 + .../twentyseventeen/inc/icon-functions.php | 220 + .../inc/template-functions.php | 102 + .../twentyseventeen/inc/template-tags.php | 197 + wp-content/themes/twentyseventeen/index.php | 67 + wp-content/themes/twentyseventeen/page.php | 41 + wp-content/themes/twentyseventeen/rtl.css | 556 + .../themes/twentyseventeen/screenshot.png | Bin 0 -> 363833 bytes wp-content/themes/twentyseventeen/search.php | 62 + .../themes/twentyseventeen/searchform.php | 21 + wp-content/themes/twentyseventeen/sidebar.php | 20 + wp-content/themes/twentyseventeen/single.php | 43 + wp-content/themes/twentyseventeen/style.css | 4327 ++++++ .../template-parts/footer/footer-widgets.php | 32 + .../template-parts/footer/site-info.php | 21 + .../template-parts/header/header-image.php | 20 + .../template-parts/header/site-branding.php | 38 + .../navigation/navigation-top.php | 29 + .../page/content-front-page-panels.php | 79 + .../page/content-front-page.php | 49 + .../template-parts/page/content-page.php | 30 + .../template-parts/post/content-audio.php | 105 + .../template-parts/post/content-excerpt.php | 46 + .../template-parts/post/content-gallery.php | 92 + .../template-parts/post/content-image.php | 81 + .../template-parts/post/content-none.php | 33 + .../template-parts/post/content-video.php | 103 + .../template-parts/post/content.php | 75 + wp-content/themes/twentysixteen/404.php | 34 + wp-content/themes/twentysixteen/archive.php | 65 + wp-content/themes/twentysixteen/comments.php | 79 + .../themes/twentysixteen/css/editor-style.css | 547 + wp-content/themes/twentysixteen/css/ie.css | 48 + wp-content/themes/twentysixteen/css/ie7.css | 176 + wp-content/themes/twentysixteen/css/ie8.css | 222 + wp-content/themes/twentysixteen/footer.php | 66 + wp-content/themes/twentysixteen/functions.php | 434 + .../twentysixteen/genericons/COPYING.txt | 9 + .../twentysixteen/genericons/Genericons.eot | Bin 0 -> 22374 bytes .../twentysixteen/genericons/Genericons.svg | 537 + .../twentysixteen/genericons/Genericons.ttf | Bin 0 -> 22188 bytes .../twentysixteen/genericons/Genericons.woff | Bin 0 -> 13988 bytes .../twentysixteen/genericons/LICENSE.txt | 339 + .../themes/twentysixteen/genericons/README.md | 218 + .../twentysixteen/genericons/genericons.css | 263 + wp-content/themes/twentysixteen/header.php | 99 + wp-content/themes/twentysixteen/image.php | 112 + .../themes/twentysixteen/inc/back-compat.php | 71 + .../themes/twentysixteen/inc/customizer.php | 1193 ++ .../twentysixteen/inc/template-tags.php | 254 + wp-content/themes/twentysixteen/index.php | 62 + .../twentysixteen/js/color-scheme-control.js | 96 + .../twentysixteen/js/customize-preview.js | 41 + .../themes/twentysixteen/js/functions.js | 200 + wp-content/themes/twentysixteen/js/html5.js | 326 + .../js/keyboard-image-navigation.js | 26 + .../twentysixteen/js/skip-link-focus-fix.js | 36 + wp-content/themes/twentysixteen/page.php | 41 + wp-content/themes/twentysixteen/readme.txt | 91 + wp-content/themes/twentysixteen/rtl.css | 756 ++ .../themes/twentysixteen/screenshot.png | Bin 0 -> 463555 bytes wp-content/themes/twentysixteen/search.php | 53 + .../themes/twentysixteen/searchform.php | 17 + .../twentysixteen/sidebar-content-bottom.php | 28 + wp-content/themes/twentysixteen/sidebar.php | 15 + wp-content/themes/twentysixteen/single.php | 54 + wp-content/themes/twentysixteen/style.css | 4008 ++++++ .../template-parts/biography.php | 37 + .../template-parts/content-none.php | 33 + .../template-parts/content-page.php | 45 + .../template-parts/content-search.php | 53 + .../template-parts/content-single.php | 53 + .../twentysixteen/template-parts/content.php | 57 + wp-cron.php | 138 + wp-includes/ID3/getid3.lib.php | 1436 ++ wp-includes/ID3/getid3.php | 1844 +++ wp-includes/ID3/license.commercial.txt | 27 + wp-includes/ID3/license.txt | 29 + wp-includes/ID3/module.audio-video.asf.php | 2013 +++ wp-includes/ID3/module.audio-video.flv.php | 745 ++ .../ID3/module.audio-video.matroska.php | 1790 +++ .../ID3/module.audio-video.quicktime.php | 2666 ++++ wp-includes/ID3/module.audio-video.riff.php | 2638 ++++ wp-includes/ID3/module.audio.ac3.php | 733 ++ wp-includes/ID3/module.audio.dts.php | 291 + wp-includes/ID3/module.audio.flac.php | 453 + wp-includes/ID3/module.audio.mp3.php | 2023 +++ wp-includes/ID3/module.audio.ogg.php | 840 ++ wp-includes/ID3/module.tag.apetag.php | 416 + wp-includes/ID3/module.tag.id3v1.php | 381 + wp-includes/ID3/module.tag.id3v2.php | 3741 ++++++ wp-includes/ID3/module.tag.lyrics3.php | 298 + wp-includes/ID3/readme.txt | 604 + wp-includes/IXR/class-IXR-base64.php | 32 + wp-includes/IXR/class-IXR-client.php | 166 + wp-includes/IXR/class-IXR-clientmulticall.php | 44 + wp-includes/IXR/class-IXR-date.php | 74 + wp-includes/IXR/class-IXR-error.php | 53 + .../IXR/class-IXR-introspectionserver.php | 174 + wp-includes/IXR/class-IXR-message.php | 234 + wp-includes/IXR/class-IXR-request.php | 54 + wp-includes/IXR/class-IXR-server.php | 225 + wp-includes/IXR/class-IXR-value.php | 138 + wp-includes/Requests/Auth.php | 33 + wp-includes/Requests/Auth/Basic.php | 88 + wp-includes/Requests/Cookie.php | 500 + wp-includes/Requests/Cookie/Jar.php | 175 + wp-includes/Requests/Exception.php | 62 + wp-includes/Requests/Exception/HTTP.php | 71 + wp-includes/Requests/Exception/HTTP/304.php | 27 + wp-includes/Requests/Exception/HTTP/305.php | 27 + wp-includes/Requests/Exception/HTTP/306.php | 27 + wp-includes/Requests/Exception/HTTP/400.php | 27 + wp-includes/Requests/Exception/HTTP/401.php | 27 + wp-includes/Requests/Exception/HTTP/402.php | 27 + wp-includes/Requests/Exception/HTTP/403.php | 27 + wp-includes/Requests/Exception/HTTP/404.php | 27 + wp-includes/Requests/Exception/HTTP/405.php | 27 + wp-includes/Requests/Exception/HTTP/406.php | 27 + wp-includes/Requests/Exception/HTTP/407.php | 27 + wp-includes/Requests/Exception/HTTP/408.php | 27 + wp-includes/Requests/Exception/HTTP/409.php | 27 + wp-includes/Requests/Exception/HTTP/410.php | 27 + wp-includes/Requests/Exception/HTTP/411.php | 27 + wp-includes/Requests/Exception/HTTP/412.php | 27 + wp-includes/Requests/Exception/HTTP/413.php | 27 + wp-includes/Requests/Exception/HTTP/414.php | 27 + wp-includes/Requests/Exception/HTTP/415.php | 27 + wp-includes/Requests/Exception/HTTP/416.php | 27 + wp-includes/Requests/Exception/HTTP/417.php | 27 + wp-includes/Requests/Exception/HTTP/418.php | 29 + wp-includes/Requests/Exception/HTTP/428.php | 29 + wp-includes/Requests/Exception/HTTP/429.php | 29 + wp-includes/Requests/Exception/HTTP/431.php | 29 + wp-includes/Requests/Exception/HTTP/500.php | 27 + wp-includes/Requests/Exception/HTTP/501.php | 27 + wp-includes/Requests/Exception/HTTP/502.php | 27 + wp-includes/Requests/Exception/HTTP/503.php | 27 + wp-includes/Requests/Exception/HTTP/504.php | 27 + wp-includes/Requests/Exception/HTTP/505.php | 27 + wp-includes/Requests/Exception/HTTP/511.php | 29 + .../Requests/Exception/HTTP/Unknown.php | 44 + wp-includes/Requests/Exception/Transport.php | 5 + .../Requests/Exception/Transport/cURL.php | 56 + wp-includes/Requests/Hooker.php | 33 + wp-includes/Requests/Hooks.php | 68 + wp-includes/Requests/IDNAEncoder.php | 388 + wp-includes/Requests/IPv6.php | 190 + wp-includes/Requests/IRI.php | 1084 ++ wp-includes/Requests/Proxy.php | 35 + wp-includes/Requests/Proxy/HTTP.php | 151 + wp-includes/Requests/Response.php | 121 + wp-includes/Requests/Response/Headers.php | 98 + wp-includes/Requests/SSL.php | 152 + wp-includes/Requests/Session.php | 266 + wp-includes/Requests/Transport.php | 41 + wp-includes/Requests/Transport/cURL.php | 542 + wp-includes/Requests/Transport/fsockopen.php | 444 + .../Utility/CaseInsensitiveDictionary.php | 103 + .../Requests/Utility/FilteredIterator.php | 45 + 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 | 984 ++ 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 | 506 + wp-includes/Text/Diff/Engine/native.php | 438 + 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 | 242 + wp-includes/Text/Diff/Renderer/inline.php | 206 + wp-includes/admin-bar.php | 1052 ++ wp-includes/atomlib.php | 394 + wp-includes/author-template.php | 543 + wp-includes/bookmark-template.php | 304 + wp-includes/bookmark.php | 421 + wp-includes/cache.php | 732 ++ wp-includes/canonical.php | 678 + wp-includes/capabilities.php | 921 ++ wp-includes/category-template.php | 1415 ++ wp-includes/category.php | 360 + wp-includes/certificates/ca-bundle.crt | 4327 ++++++ wp-includes/class-IXR.php | 60 + wp-includes/class-feed.php | 18 + wp-includes/class-http.php | 1023 ++ wp-includes/class-json.php | 960 ++ wp-includes/class-oembed.php | 728 ++ wp-includes/class-phpass.php | 276 + wp-includes/class-phpmailer.php | 4040 ++++++ wp-includes/class-pop3.php | 662 + wp-includes/class-requests.php | 980 ++ wp-includes/class-simplepie.php | 3094 +++++ wp-includes/class-smtp.php | 1186 ++ wp-includes/class-snoopy.php | 1259 ++ .../class-walker-category-dropdown.php | 77 + wp-includes/class-walker-category.php | 229 + wp-includes/class-walker-comment.php | 364 + wp-includes/class-walker-nav-menu.php | 264 + wp-includes/class-walker-page-dropdown.php | 87 + wp-includes/class-walker-page.php | 231 + wp-includes/class-wp-admin-bar.php | 603 + wp-includes/class-wp-ajax-response.php | 156 + wp-includes/class-wp-comment-query.php | 1146 ++ wp-includes/class-wp-comment.php | 369 + wp-includes/class-wp-customize-control.php | 794 ++ wp-includes/class-wp-customize-manager.php | 5701 ++++++++ wp-includes/class-wp-customize-nav-menus.php | 1440 ++ wp-includes/class-wp-customize-panel.php | 382 + wp-includes/class-wp-customize-section.php | 398 + wp-includes/class-wp-customize-setting.php | 958 ++ wp-includes/class-wp-customize-widgets.php | 2029 +++ wp-includes/class-wp-dependency.php | 97 + wp-includes/class-wp-editor.php | 1759 +++ wp-includes/class-wp-embed.php | 479 + wp-includes/class-wp-error.php | 200 + wp-includes/class-wp-feed-cache-transient.php | 132 + wp-includes/class-wp-feed-cache.php | 32 + wp-includes/class-wp-hook.php | 510 + wp-includes/class-wp-http-cookie.php | 236 + wp-includes/class-wp-http-curl.php | 383 + wp-includes/class-wp-http-encoding.php | 228 + wp-includes/class-wp-http-ixr-client.php | 124 + wp-includes/class-wp-http-proxy.php | 219 + wp-includes/class-wp-http-requests-hooks.php | 76 + .../class-wp-http-requests-response.php | 196 + wp-includes/class-wp-http-response.php | 153 + wp-includes/class-wp-http-streams.php | 432 + wp-includes/class-wp-image-editor-gd.php | 467 + wp-includes/class-wp-image-editor-imagick.php | 752 ++ wp-includes/class-wp-image-editor.php | 470 + wp-includes/class-wp-list-util.php | 261 + wp-includes/class-wp-locale-switcher.php | 235 + wp-includes/class-wp-locale.php | 394 + wp-includes/class-wp-matchesmapregex.php | 91 + wp-includes/class-wp-meta-query.php | 730 ++ wp-includes/class-wp-metadata-lazyloader.php | 170 + wp-includes/class-wp-network-query.php | 552 + wp-includes/class-wp-network.php | 465 + wp-includes/class-wp-oembed-controller.php | 200 + wp-includes/class-wp-post-type.php | 679 + wp-includes/class-wp-post.php | 374 + wp-includes/class-wp-query.php | 4094 ++++++ wp-includes/class-wp-rewrite.php | 1891 +++ wp-includes/class-wp-role.php | 109 + wp-includes/class-wp-roles.php | 361 + wp-includes/class-wp-session-tokens.php | 300 + wp-includes/class-wp-simplepie-file.php | 71 + .../class-wp-simplepie-sanitize-kses.php | 58 + wp-includes/class-wp-site-query.php | 701 + wp-includes/class-wp-site.php | 347 + wp-includes/class-wp-tax-query.php | 649 + wp-includes/class-wp-taxonomy.php | 424 + wp-includes/class-wp-term-query.php | 969 ++ wp-includes/class-wp-term.php | 245 + .../class-wp-text-diff-renderer-inline.php | 33 + .../class-wp-text-diff-renderer-table.php | 510 + wp-includes/class-wp-theme.php | 1489 +++ .../class-wp-user-meta-session-tokens.php | 132 + wp-includes/class-wp-user-query.php | 860 ++ wp-includes/class-wp-user.php | 841 ++ wp-includes/class-wp-walker.php | 425 + wp-includes/class-wp-widget-factory.php | 144 + wp-includes/class-wp-widget.php | 588 + wp-includes/class-wp-xmlrpc-server.php | 6573 ++++++++++ wp-includes/class-wp.php | 728 ++ wp-includes/class.wp-dependencies.php | 396 + wp-includes/class.wp-scripts.php | 560 + wp-includes/class.wp-styles.php | 388 + wp-includes/comment-template.php | 2469 ++++ wp-includes/comment.php | 3388 +++++ wp-includes/compat.php | 539 + wp-includes/cron.php | 530 + wp-includes/css/admin-bar-rtl.css | 1141 ++ wp-includes/css/admin-bar-rtl.min.css | 2 + wp-includes/css/admin-bar.css | 1141 ++ wp-includes/css/admin-bar.min.css | 2 + wp-includes/css/buttons-rtl.css | 396 + wp-includes/css/buttons-rtl.min.css | 2 + wp-includes/css/buttons.css | 396 + wp-includes/css/buttons.min.css | 2 + wp-includes/css/customize-preview-rtl.css | 251 + wp-includes/css/customize-preview-rtl.min.css | 2 + wp-includes/css/customize-preview.css | 251 + wp-includes/css/customize-preview.min.css | 2 + wp-includes/css/dashicons.css | 1026 ++ wp-includes/css/dashicons.min.css | 2 + wp-includes/css/editor-rtl.css | 1851 +++ wp-includes/css/editor-rtl.min.css | 2 + wp-includes/css/editor.css | 1851 +++ wp-includes/css/editor.min.css | 2 + wp-includes/css/jquery-ui-dialog-rtl.css | 351 + wp-includes/css/jquery-ui-dialog-rtl.min.css | 18 + wp-includes/css/jquery-ui-dialog.css | 351 + wp-includes/css/jquery-ui-dialog.min.css | 18 + wp-includes/css/media-views-rtl.css | 2633 ++++ wp-includes/css/media-views-rtl.min.css | 9 + wp-includes/css/media-views.css | 2633 ++++ wp-includes/css/media-views.min.css | 9 + wp-includes/css/wp-auth-check-rtl.css | 124 + wp-includes/css/wp-auth-check-rtl.min.css | 2 + wp-includes/css/wp-auth-check.css | 124 + wp-includes/css/wp-auth-check.min.css | 2 + wp-includes/css/wp-embed-template-ie.css | 19 + wp-includes/css/wp-embed-template-ie.min.css | 2 + wp-includes/css/wp-embed-template.css | 361 + wp-includes/css/wp-embed-template.min.css | 2 + wp-includes/css/wp-pointer-rtl.css | 224 + wp-includes/css/wp-pointer-rtl.min.css | 2 + wp-includes/css/wp-pointer.css | 224 + wp-includes/css/wp-pointer.min.css | 2 + ...-wp-customize-background-image-control.php | 51 + ...-wp-customize-background-image-setting.php | 28 + ...-customize-background-position-control.php | 84 + ...class-wp-customize-code-editor-control.php | 108 + .../class-wp-customize-color-control.php | 119 + ...ass-wp-customize-cropped-image-control.php | 86 + .../class-wp-customize-custom-css-setting.php | 199 + .../class-wp-customize-date-time-control.php | 271 + .../class-wp-customize-filter-setting.php | 29 + ...lass-wp-customize-header-image-control.php | 227 + ...lass-wp-customize-header-image-setting.php | 51 + .../class-wp-customize-image-control.php | 59 + .../class-wp-customize-media-control.php | 263 + ...wp-customize-nav-menu-auto-add-control.php | 51 + .../class-wp-customize-nav-menu-control.php | 75 + ...ass-wp-customize-nav-menu-item-control.php | 162 + ...ass-wp-customize-nav-menu-item-setting.php | 889 ++ ...wp-customize-nav-menu-location-control.php | 81 + ...p-customize-nav-menu-locations-control.php | 90 + ...ass-wp-customize-nav-menu-name-control.php | 56 + .../class-wp-customize-nav-menu-section.php | 41 + .../class-wp-customize-nav-menu-setting.php | 640 + .../class-wp-customize-nav-menus-panel.php | 101 + .../class-wp-customize-new-menu-control.php | 54 + .../class-wp-customize-new-menu-section.php | 60 + .../customize/class-wp-customize-partial.php | 311 + .../class-wp-customize-selective-refresh.php | 456 + .../class-wp-customize-sidebar-section.php | 58 + .../class-wp-customize-site-icon-control.php | 98 + .../class-wp-customize-theme-control.php | 133 + .../class-wp-customize-themes-panel.php | 101 + .../class-wp-customize-themes-section.php | 175 + .../class-wp-customize-upload-control.php | 44 + ...class-wp-widget-area-customize-control.php | 66 + ...class-wp-widget-form-customize-control.php | 80 + wp-includes/date.php | 1001 ++ wp-includes/default-constants.php | 363 + wp-includes/default-filters.php | 537 + wp-includes/default-widgets.php | 65 + wp-includes/deprecated.php | 3946 ++++++ wp-includes/embed-template.php | 13 + wp-includes/embed.php | 1130 ++ wp-includes/feed-atom-comments.php | 124 + wp-includes/feed-atom.php | 93 + wp-includes/feed-rdf.php | 88 + wp-includes/feed-rss.php | 49 + wp-includes/feed-rss2-comments.php | 110 + wp-includes/feed-rss2.php | 124 + wp-includes/feed.php | 710 + wp-includes/fonts/dashicons.eot | Bin 0 -> 22449 bytes wp-includes/fonts/dashicons.svg | 269 + wp-includes/fonts/dashicons.ttf | Bin 0 -> 41728 bytes wp-includes/fonts/dashicons.woff | Bin 0 -> 26124 bytes wp-includes/formatting.php | 5410 ++++++++ wp-includes/functions.php | 6036 +++++++++ wp-includes/functions.wp-scripts.php | 336 + wp-includes/functions.wp-styles.php | 231 + wp-includes/general-template.php | 4261 ++++++ wp-includes/http.php | 747 ++ wp-includes/images/admin-bar-sprite-2x.png | Bin 0 -> 3999 bytes wp-includes/images/admin-bar-sprite.png | Bin 0 -> 2467 bytes wp-includes/images/arrow-pointer-blue-2x.png | Bin 0 -> 1666 bytes wp-includes/images/arrow-pointer-blue.png | Bin 0 -> 793 bytes wp-includes/images/blank.gif | Bin 0 -> 43 bytes wp-includes/images/crystal/archive.png | Bin 0 -> 2454 bytes wp-includes/images/crystal/audio.png | Bin 0 -> 2184 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 -> 2063 bytes wp-includes/images/crystal/interactive.png | Bin 0 -> 2217 bytes wp-includes/images/crystal/license.txt | 9 + wp-includes/images/crystal/spreadsheet.png | Bin 0 -> 2408 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 -> 84 bytes wp-includes/images/down_arrow.gif | Bin 0 -> 59 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/frownie.png | Bin 0 -> 1007 bytes wp-includes/images/smilies/icon_arrow.gif | Bin 0 -> 169 bytes wp-includes/images/smilies/icon_biggrin.gif | Bin 0 -> 173 bytes wp-includes/images/smilies/icon_confused.gif | Bin 0 -> 170 bytes wp-includes/images/smilies/icon_cool.gif | Bin 0 -> 172 bytes wp-includes/images/smilies/icon_cry.gif | Bin 0 -> 490 bytes wp-includes/images/smilies/icon_eek.gif | Bin 0 -> 170 bytes wp-includes/images/smilies/icon_evil.gif | Bin 0 -> 241 bytes wp-includes/images/smilies/icon_exclaim.gif | Bin 0 -> 236 bytes wp-includes/images/smilies/icon_idea.gif | Bin 0 -> 174 bytes wp-includes/images/smilies/icon_lol.gif | Bin 0 -> 333 bytes wp-includes/images/smilies/icon_mad.gif | Bin 0 -> 172 bytes wp-includes/images/smilies/icon_mrgreen.gif | Bin 0 -> 348 bytes wp-includes/images/smilies/icon_neutral.gif | Bin 0 -> 167 bytes wp-includes/images/smilies/icon_question.gif | Bin 0 -> 247 bytes wp-includes/images/smilies/icon_razz.gif | Bin 0 -> 175 bytes wp-includes/images/smilies/icon_redface.gif | Bin 0 -> 650 bytes wp-includes/images/smilies/icon_rolleyes.gif | Bin 0 -> 489 bytes wp-includes/images/smilies/icon_sad.gif | Bin 0 -> 167 bytes wp-includes/images/smilies/icon_smile.gif | Bin 0 -> 173 bytes wp-includes/images/smilies/icon_surprised.gif | Bin 0 -> 174 bytes wp-includes/images/smilies/icon_twisted.gif | Bin 0 -> 241 bytes wp-includes/images/smilies/icon_wink.gif | Bin 0 -> 168 bytes wp-includes/images/smilies/mrgreen.png | Bin 0 -> 1486 bytes wp-includes/images/smilies/rolleyes.png | Bin 0 -> 1233 bytes wp-includes/images/smilies/simple-smile.png | Bin 0 -> 1008 bytes wp-includes/images/spinner-2x.gif | Bin 0 -> 8536 bytes wp-includes/images/spinner.gif | Bin 0 -> 4162 bytes wp-includes/images/toggle-arrow-2x.png | Bin 0 -> 354 bytes wp-includes/images/toggle-arrow.png | Bin 0 -> 289 bytes wp-includes/images/uploader-icons-2x.png | Bin 0 -> 3542 bytes wp-includes/images/uploader-icons.png | Bin 0 -> 1556 bytes wp-includes/images/w-logo-blue.png | Bin 0 -> 3113 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 -> 2376 bytes wp-includes/images/wpicons-2x.png | Bin 0 -> 14931 bytes wp-includes/images/wpicons.png | Bin 0 -> 7086 bytes wp-includes/images/wpspin-2x.gif | Bin 0 -> 9133 bytes wp-includes/images/wpspin.gif | Bin 0 -> 2209 bytes wp-includes/images/xit-2x.gif | Bin 0 -> 825 bytes wp-includes/images/xit.gif | Bin 0 -> 181 bytes wp-includes/js/admin-bar.js | 387 + wp-includes/js/admin-bar.min.js | 1 + wp-includes/js/api-request.js | 87 + wp-includes/js/api-request.min.js | 1 + wp-includes/js/autosave.js | 857 ++ wp-includes/js/autosave.min.js | 1 + wp-includes/js/backbone.min.js | 1 + wp-includes/js/codemirror/codemirror.min.css | 11 + wp-includes/js/codemirror/codemirror.min.js | 29 + wp-includes/js/codemirror/csslint.js | 10859 ++++++++++++++++ wp-includes/js/codemirror/htmlhint-kses.js | 30 + wp-includes/js/codemirror/htmlhint.js | 8 + wp-includes/js/codemirror/jshint.js | 6744 ++++++++++ wp-includes/js/codemirror/jsonlint.js | 432 + wp-includes/js/colorpicker.js | 707 + wp-includes/js/colorpicker.min.js | 1 + wp-includes/js/comment-reply.js | 127 + 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 | 968 ++ wp-includes/js/customize-base.min.js | 1 + wp-includes/js/customize-loader.js | 286 + wp-includes/js/customize-loader.min.js | 1 + wp-includes/js/customize-models.js | 277 + wp-includes/js/customize-models.min.js | 1 + wp-includes/js/customize-preview-nav-menus.js | 442 + .../js/customize-preview-nav-menus.min.js | 1 + wp-includes/js/customize-preview-widgets.js | 713 + .../js/customize-preview-widgets.min.js | 1 + wp-includes/js/customize-preview.js | 897 ++ wp-includes/js/customize-preview.min.js | 1 + wp-includes/js/customize-selective-refresh.js | 1062 ++ .../js/customize-selective-refresh.min.js | 1 + wp-includes/js/customize-views.js | 198 + wp-includes/js/customize-views.min.js | 1 + wp-includes/js/heartbeat.js | 757 ++ wp-includes/js/heartbeat.min.js | 1 + wp-includes/js/hoverIntent.js | 115 + wp-includes/js/hoverIntent.min.js | 1 + wp-includes/js/imagesloaded.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 | 1232 ++ .../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 | 752 ++ 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 | 1520 +++ wp-includes/js/jquery/jquery.form.min.js | 12 + wp-includes/js/jquery/jquery.hotkeys.js | 134 + wp-includes/js/jquery/jquery.hotkeys.min.js | 1 + wp-includes/js/jquery/jquery.js | 6 + 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 + wp-includes/js/jquery/ui/accordion.min.js | 11 + wp-includes/js/jquery/ui/autocomplete.min.js | 11 + wp-includes/js/jquery/ui/button.min.js | 11 + wp-includes/js/jquery/ui/core.min.js | 11 + wp-includes/js/jquery/ui/datepicker.min.js | 12 + wp-includes/js/jquery/ui/dialog.min.js | 11 + wp-includes/js/jquery/ui/draggable.min.js | 11 + wp-includes/js/jquery/ui/droppable.min.js | 11 + wp-includes/js/jquery/ui/effect-blind.min.js | 11 + wp-includes/js/jquery/ui/effect-bounce.min.js | 11 + wp-includes/js/jquery/ui/effect-clip.min.js | 11 + wp-includes/js/jquery/ui/effect-drop.min.js | 11 + .../js/jquery/ui/effect-explode.min.js | 11 + wp-includes/js/jquery/ui/effect-fade.min.js | 11 + wp-includes/js/jquery/ui/effect-fold.min.js | 11 + .../js/jquery/ui/effect-highlight.min.js | 11 + wp-includes/js/jquery/ui/effect-puff.min.js | 11 + .../js/jquery/ui/effect-pulsate.min.js | 11 + wp-includes/js/jquery/ui/effect-scale.min.js | 11 + wp-includes/js/jquery/ui/effect-shake.min.js | 11 + wp-includes/js/jquery/ui/effect-size.min.js | 11 + wp-includes/js/jquery/ui/effect-slide.min.js | 11 + .../js/jquery/ui/effect-transfer.min.js | 11 + wp-includes/js/jquery/ui/effect.min.js | 21 + wp-includes/js/jquery/ui/menu.min.js | 11 + wp-includes/js/jquery/ui/mouse.min.js | 11 + wp-includes/js/jquery/ui/position.min.js | 11 + wp-includes/js/jquery/ui/progressbar.min.js | 11 + wp-includes/js/jquery/ui/resizable.min.js | 11 + wp-includes/js/jquery/ui/selectable.min.js | 11 + wp-includes/js/jquery/ui/selectmenu.min.js | 11 + wp-includes/js/jquery/ui/slider.min.js | 11 + wp-includes/js/jquery/ui/sortable.min.js | 11 + wp-includes/js/jquery/ui/spinner.min.js | 11 + wp-includes/js/jquery/ui/tabs.min.js | 11 + wp-includes/js/jquery/ui/tooltip.min.js | 11 + wp-includes/js/jquery/ui/widget.min.js | 11 + wp-includes/js/json2.js | 519 + wp-includes/js/json2.min.js | 1 + wp-includes/js/masonry.min.js | 9 + wp-includes/js/mce-view.js | 974 ++ wp-includes/js/mce-view.min.js | 1 + wp-includes/js/media-audiovideo.js | 1105 ++ wp-includes/js/media-audiovideo.min.js | 1 + wp-includes/js/media-editor.js | 1058 ++ wp-includes/js/media-editor.min.js | 1 + wp-includes/js/media-grid.js | 1049 ++ wp-includes/js/media-grid.min.js | 1 + wp-includes/js/media-models.js | 1628 +++ wp-includes/js/media-models.min.js | 1 + wp-includes/js/media-views.js | 9218 +++++++++++++ wp-includes/js/media-views.min.js | 4 + .../mediaelement/mediaelement-and-player.js | 8474 ++++++++++++ .../mediaelement-and-player.min.js | 12 + .../js/mediaelement/mediaelement-migrate.js | 84 + .../mediaelement/mediaelement-migrate.min.js | 1 + wp-includes/js/mediaelement/mediaelement.js | 3942 ++++++ .../js/mediaelement/mediaelement.min.js | 12 + .../mediaelementplayer-legacy.css | 772 ++ .../mediaelementplayer-legacy.min.css | 1 + .../js/mediaelement/mediaelementplayer.css | 772 ++ .../mediaelement/mediaelementplayer.min.css | 1 + wp-includes/js/mediaelement/mejs-controls.png | Bin 0 -> 2883 bytes wp-includes/js/mediaelement/mejs-controls.svg | 1 + .../js/mediaelement/renderers/vimeo.js | 416 + .../js/mediaelement/renderers/vimeo.min.js | 12 + .../js/mediaelement/wp-mediaelement.css | 293 + .../js/mediaelement/wp-mediaelement.js | 82 + .../js/mediaelement/wp-mediaelement.min.css | 1 + .../js/mediaelement/wp-mediaelement.min.js | 1 + wp-includes/js/mediaelement/wp-playlist.js | 199 + .../js/mediaelement/wp-playlist.min.js | 1 + wp-includes/js/plupload/handlers.js | 506 + wp-includes/js/plupload/handlers.min.js | 1 + wp-includes/js/plupload/license.txt | 339 + wp-includes/js/plupload/moxie.js | 9901 ++++++++++++++ wp-includes/js/plupload/moxie.min.js | 3 + wp-includes/js/plupload/plupload.js | 2379 ++++ wp-includes/js/plupload/plupload.min.js | 1 + wp-includes/js/plupload/wp-plupload.js | 425 + wp-includes/js/plupload/wp-plupload.min.js | 1 + wp-includes/js/quicktags.js | 747 ++ wp-includes/js/quicktags.min.js | 1 + wp-includes/js/shortcode.js | 358 + wp-includes/js/shortcode.min.js | 1 + wp-includes/js/swfobject.js | 4 + wp-includes/js/swfupload/handlers.js | 54 + wp-includes/js/swfupload/handlers.min.js | 1 + .../js/swfupload/license.txt | 25 +- wp-includes/js/swfupload/swfupload.js | 140 + 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 | 156 + wp-includes/js/thickbox/thickbox.js | 338 + wp-includes/js/tinymce/langs/wp-langs-en.js | 519 + wp-includes/js/tinymce/license.txt | 504 + .../js/tinymce/plugins/charmap/plugin.js | 1275 ++ .../js/tinymce/plugins/charmap/plugin.min.js | 1 + .../js/tinymce/plugins/colorpicker/plugin.js | 126 + .../tinymce/plugins/colorpicker/plugin.min.js | 1 + .../tinymce/plugins/compat3x/css/dialog.css | 210 + .../js/tinymce/plugins/compat3x/plugin.js | 322 + .../js/tinymce/plugins/compat3x/plugin.min.js | 1 + .../tinymce/plugins/directionality/plugin.js | 66 + .../plugins/directionality/plugin.min.js | 1 + .../js/tinymce/plugins/fullscreen/plugin.js | 177 + .../tinymce/plugins/fullscreen/plugin.min.js | 1 + wp-includes/js/tinymce/plugins/hr/plugin.js | 39 + .../js/tinymce/plugins/hr/plugin.min.js | 1 + .../js/tinymce/plugins/image/plugin.js | 1337 ++ .../js/tinymce/plugins/image/plugin.min.js | 1 + wp-includes/js/tinymce/plugins/link/plugin.js | 713 + .../js/tinymce/plugins/link/plugin.min.js | 1 + .../js/tinymce/plugins/lists/plugin.js | 1114 ++ .../js/tinymce/plugins/lists/plugin.min.js | 1 + .../js/tinymce/plugins/media/plugin.js | 1166 ++ .../js/tinymce/plugins/media/plugin.min.js | 1 + .../js/tinymce/plugins/paste/plugin.js | 1609 +++ .../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 | 346 + .../tinymce/plugins/textcolor/plugin.min.js | 1 + .../js/tinymce/plugins/wordpress/plugin.js | 1060 ++ .../tinymce/plugins/wordpress/plugin.min.js | 1 + .../js/tinymce/plugins/wpautoresize/plugin.js | 207 + .../plugins/wpautoresize/plugin.min.js | 1 + .../js/tinymce/plugins/wpdialogs/plugin.js | 92 + .../tinymce/plugins/wpdialogs/plugin.min.js | 1 + .../js/tinymce/plugins/wpeditimage/plugin.js | 877 ++ .../tinymce/plugins/wpeditimage/plugin.min.js | 1 + .../js/tinymce/plugins/wpemoji/plugin.js | 128 + .../js/tinymce/plugins/wpemoji/plugin.min.js | 1 + .../js/tinymce/plugins/wpgallery/plugin.js | 112 + .../tinymce/plugins/wpgallery/plugin.min.js | 1 + .../js/tinymce/plugins/wplink/plugin.js | 623 + .../js/tinymce/plugins/wplink/plugin.min.js | 1 + .../tinymce/plugins/wptextpattern/plugin.js | 348 + .../plugins/wptextpattern/plugin.min.js | 1 + .../js/tinymce/plugins/wpview/plugin.js | 202 + .../js/tinymce/plugins/wpview/plugin.min.js | 1 + .../skins/lightgray/content.inline.min.css | 1 + .../tinymce/skins/lightgray/content.min.css | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 9492 bytes .../skins/lightgray/fonts/tinymce-small.svg | 63 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 9304 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 9380 bytes .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 18808 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 131 + .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 18644 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 18720 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 .../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 -> 368 bytes .../skins/wordpress/images/dashicon-no.png | Bin 0 -> 339 bytes .../skins/wordpress/images/embedded.png | Bin 0 -> 8177 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 -> 603 bytes .../tinymce/skins/wordpress/images/more.png | Bin 0 -> 414 bytes .../skins/wordpress/images/pagebreak-2x.png | Bin 0 -> 835 bytes .../skins/wordpress/images/pagebreak.png | Bin 0 -> 1140 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 | 500 + wp-includes/js/tinymce/themes/inlite/theme.js | 10644 +++++++++++++++ .../js/tinymce/themes/inlite/theme.min.js | 1 + wp-includes/js/tinymce/themes/modern/theme.js | 10450 +++++++++++++++ .../js/tinymce/themes/modern/theme.min.js | 1 + wp-includes/js/tinymce/tiny_mce_popup.js | 542 + wp-includes/js/tinymce/tinymce.min.js | 2 + .../js/tinymce/utils/editable_selects.js | 72 + wp-includes/js/tinymce/utils/form_utils.js | 222 + wp-includes/js/tinymce/utils/mctabs.js | 168 + wp-includes/js/tinymce/utils/validate.js | 267 + wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 0 -> 209550 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/twemoji.js | 568 + wp-includes/js/twemoji.min.js | 1 + wp-includes/js/underscore.min.js | 5 + wp-includes/js/utils.js | 198 + wp-includes/js/utils.min.js | 1 + wp-includes/js/wp-a11y.js | 103 + wp-includes/js/wp-a11y.min.js | 1 + wp-includes/js/wp-ajax-response.js | 64 + wp-includes/js/wp-ajax-response.min.js | 1 + wp-includes/js/wp-api.js | 1541 +++ wp-includes/js/wp-api.min.js | 1 + wp-includes/js/wp-auth-check.js | 117 + wp-includes/js/wp-auth-check.min.js | 1 + wp-includes/js/wp-backbone.js | 391 + wp-includes/js/wp-backbone.min.js | 1 + wp-includes/js/wp-custom-header.js | 461 + wp-includes/js/wp-custom-header.min.js | 1 + wp-includes/js/wp-embed-template.js | 212 + wp-includes/js/wp-embed-template.min.js | 1 + wp-includes/js/wp-embed.js | 122 + wp-includes/js/wp-embed.min.js | 1 + wp-includes/js/wp-emoji-loader.js | 166 + wp-includes/js/wp-emoji-loader.min.js | 1 + wp-includes/js/wp-emoji-release.min.js | 4 + wp-includes/js/wp-emoji.js | 229 + wp-includes/js/wp-emoji.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 | 854 ++ wp-includes/js/wp-lists.min.js | 1 + wp-includes/js/wp-pointer.js | 285 + wp-includes/js/wp-pointer.min.js | 1 + wp-includes/js/wp-sanitize.js | 47 + wp-includes/js/wp-sanitize.min.js | 1 + wp-includes/js/wp-util.js | 126 + 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 | 794 ++ 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 | 31 + wp-includes/kses.php | 1832 +++ wp-includes/l10n.php | 1334 ++ wp-includes/link-template.php | 4187 ++++++ wp-includes/load.php | 1159 ++ wp-includes/locale.php | 10 + wp-includes/media-template.php | 1272 ++ wp-includes/media.php | 4035 ++++++ wp-includes/meta.php | 1211 ++ wp-includes/ms-blogs.php | 1331 ++ wp-includes/ms-default-constants.php | 162 + wp-includes/ms-default-filters.php | 100 + wp-includes/ms-deprecated.php | 548 + wp-includes/ms-files.php | 83 + wp-includes/ms-functions.php | 2744 ++++ wp-includes/ms-load.php | 551 + wp-includes/ms-settings.php | 123 + wp-includes/nav-menu-template.php | 552 + wp-includes/nav-menu.php | 1176 ++ wp-includes/option.php | 2136 +++ wp-includes/pluggable-deprecated.php | 208 + wp-includes/pluggable.php | 2637 ++++ wp-includes/plugin.php | 919 ++ wp-includes/pomo/entry.php | 93 + wp-includes/pomo/mo.php | 323 + wp-includes/pomo/plural-forms.php | 343 + wp-includes/pomo/po.php | 469 + wp-includes/pomo/streams.php | 315 + wp-includes/pomo/translations.php | 361 + wp-includes/post-formats.php | 254 + wp-includes/post-template.php | 1826 +++ wp-includes/post-thumbnail-template.php | 255 + wp-includes/post.php | 6407 +++++++++ wp-includes/query.php | 1011 ++ .../random_compat/byte_safe_strings.php | 173 + wp-includes/random_compat/cast_to_int.php | 71 + wp-includes/random_compat/error_polyfill.php | 42 + wp-includes/random_compat/random.php | 217 + .../random_compat/random_bytes_com_dotnet.php | 83 + .../random_bytes_dev_urandom.php | 150 + .../random_compat/random_bytes_libsodium.php | 88 + .../random_bytes_libsodium_legacy.php | 88 + .../random_compat/random_bytes_mcrypt.php | 78 + .../random_compat/random_bytes_openssl.php | 85 + wp-includes/random_compat/random_int.php | 193 + wp-includes/registration-functions.php | 7 + wp-includes/registration.php | 7 + wp-includes/rest-api.php | 1295 ++ .../rest-api/class-wp-rest-request.php | 983 ++ .../rest-api/class-wp-rest-response.php | 290 + wp-includes/rest-api/class-wp-rest-server.php | 1334 ++ .../class-wp-rest-attachments-controller.php | 743 ++ .../class-wp-rest-comments-controller.php | 1619 +++ .../endpoints/class-wp-rest-controller.php | 588 + ...class-wp-rest-post-statuses-controller.php | 308 + .../class-wp-rest-post-types-controller.php | 290 + .../class-wp-rest-posts-controller.php | 2298 ++++ .../class-wp-rest-revisions-controller.php | 566 + .../class-wp-rest-settings-controller.php | 334 + .../class-wp-rest-taxonomies-controller.php | 314 + .../class-wp-rest-terms-controller.php | 1012 ++ .../class-wp-rest-users-controller.php | 1402 ++ .../class-wp-rest-comment-meta-fields.php | 40 + .../fields/class-wp-rest-meta-fields.php | 457 + .../fields/class-wp-rest-post-meta-fields.php | 61 + .../fields/class-wp-rest-term-meta-fields.php | 59 + .../fields/class-wp-rest-user-meta-fields.php | 40 + wp-includes/revision.php | 727 ++ wp-includes/rewrite.php | 607 + wp-includes/rss-functions.php | 9 + wp-includes/rss.php | 954 ++ wp-includes/script-loader.php | 1588 +++ wp-includes/session.php | 11 + wp-includes/shortcodes.php | 630 + wp-includes/spl-autoload-compat.php | 100 + wp-includes/taxonomy.php | 4310 ++++++ wp-includes/template-loader.php | 82 + wp-includes/template.php | 692 + wp-includes/theme-compat/comments.php | 71 + wp-includes/theme-compat/embed-404.php | 36 + wp-includes/theme-compat/embed-content.php | 126 + wp-includes/theme-compat/embed.php | 23 + wp-includes/theme-compat/footer-embed.php | 21 + wp-includes/theme-compat/footer.php | 40 + wp-includes/theme-compat/header-embed.php | 32 + wp-includes/theme-compat/header.php | 57 + wp-includes/theme-compat/sidebar.php | 114 + wp-includes/theme.php | 3144 +++++ wp-includes/update.php | 762 ++ wp-includes/user.php | 3565 +++++ wp-includes/vars.php | 150 + wp-includes/version.php | 35 + wp-includes/widgets.php | 1649 +++ .../widgets/class-wp-nav-menu-widget.php | 159 + .../widgets/class-wp-widget-archives.php | 168 + .../widgets/class-wp-widget-calendar.php | 105 + .../widgets/class-wp-widget-categories.php | 182 + .../widgets/class-wp-widget-custom-html.php | 323 + wp-includes/widgets/class-wp-widget-links.php | 162 + .../widgets/class-wp-widget-media-audio.php | 200 + .../widgets/class-wp-widget-media-gallery.php | 229 + .../widgets/class-wp-widget-media-image.php | 349 + .../widgets/class-wp-widget-media-video.php | 251 + wp-includes/widgets/class-wp-widget-media.php | 444 + wp-includes/widgets/class-wp-widget-meta.php | 116 + wp-includes/widgets/class-wp-widget-pages.php | 150 + .../class-wp-widget-recent-comments.php | 174 + .../widgets/class-wp-widget-recent-posts.php | 145 + wp-includes/widgets/class-wp-widget-rss.php | 125 + .../widgets/class-wp-widget-search.php | 91 + .../widgets/class-wp-widget-tag-cloud.php | 196 + wp-includes/widgets/class-wp-widget-text.php | 552 + wp-includes/wlwmanifest.xml | 43 + wp-includes/wp-db.php | 3430 +++++ wp-includes/wp-diff.php | 21 + wp-links-opml.php | 83 + wp-load.php | 93 + wp-login.php | 1126 ++ wp-mail.php | 253 + wp-settings.php | 471 + wp-signup.php | 924 ++ wp-trackback.php | 146 + xmlrpc.php | 101 + 1632 files changed, 639175 insertions(+), 2598 deletions(-) create mode 100644 _wpeprivate/config.json create mode 100644 apple-touch-icon-precomposed.png create mode 100644 apple-touch-icon.png create mode 100644 data/citizen2.json create mode 100644 data/citizen2.min.json create mode 100644 data/citizen3.json create mode 100644 data/citizen3.min.json create mode 100644 data/how-to-register-to-vote-in-texas.json create mode 100644 data/how-to-register-to-vote-in-texas.min.json create mode 100644 data/test-five.json create mode 100644 data/test-five.min.json create mode 100644 data/test-four.json create mode 100644 data/test-four.min.json create mode 100644 data/test-six.json create mode 100644 data/test-six.min.json create mode 100644 data/test-two.json create mode 100644 data/test-two.min.json create mode 100644 data/testing-another.json create mode 100644 data/testing-another.min.json create mode 100644 data/testing-command.json create mode 100644 data/testing-command.min.json create mode 100644 data/vote.json create mode 100644 data/vote.min.json create mode 100644 favicon.ico create mode 100644 license.txt create mode 100644 readme.html delete mode 100644 tests/src/APITest.php delete mode 100644 tests/src/DBTest.php delete mode 100644 tests/src/UtilitiesTest.php delete mode 100644 tests/src/ValidateTest.php delete mode 100644 vendor/composer/ClassLoader.php delete mode 100644 vendor/composer/autoload_classmap.php delete mode 100644 vendor/composer/autoload_files.php delete mode 100644 vendor/composer/autoload_namespaces.php delete mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/composer/autoload_real.php delete mode 100644 vendor/composer/autoload_static.php delete mode 100644 vendor/composer/installed.json 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-rtl.min.css create mode 100644 wp-admin/css/about.css create mode 100644 wp-admin/css/about.min.css create mode 100644 wp-admin/css/admin-menu-rtl.css create mode 100644 wp-admin/css/admin-menu-rtl.min.css create mode 100644 wp-admin/css/admin-menu.css create mode 100644 wp-admin/css/admin-menu.min.css create mode 100644 wp-admin/css/code-editor-rtl.css create mode 100644 wp-admin/css/code-editor-rtl.min.css create mode 100644 wp-admin/css/code-editor.css create mode 100644 wp-admin/css/code-editor.min.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-rtl.min.css create mode 100644 wp-admin/css/common.css create mode 100644 wp-admin/css/common.min.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-nav-menus-rtl.css create mode 100644 wp-admin/css/customize-nav-menus-rtl.min.css create mode 100644 wp-admin/css/customize-nav-menus.css create mode 100644 wp-admin/css/customize-nav-menus.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-rtl.min.css create mode 100644 wp-admin/css/dashboard.css create mode 100644 wp-admin/css/dashboard.min.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-rtl.min.css create mode 100644 wp-admin/css/edit.css create mode 100644 wp-admin/css/edit.min.css create mode 100644 wp-admin/css/farbtastic-rtl.css create mode 100644 wp-admin/css/farbtastic-rtl.min.css create mode 100644 wp-admin/css/farbtastic.css create mode 100644 wp-admin/css/farbtastic.min.css create mode 100644 wp-admin/css/forms-rtl.css create mode 100644 wp-admin/css/forms-rtl.min.css create mode 100644 wp-admin/css/forms.css create mode 100644 wp-admin/css/forms.min.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-rtl.min.css create mode 100644 wp-admin/css/l10n.css create mode 100644 wp-admin/css/l10n.min.css create mode 100644 wp-admin/css/list-tables-rtl.css create mode 100644 wp-admin/css/list-tables-rtl.min.css create mode 100644 wp-admin/css/list-tables.css create mode 100644 wp-admin/css/list-tables.min.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-rtl.min.css create mode 100644 wp-admin/css/media.css create mode 100644 wp-admin/css/media.min.css create mode 100644 wp-admin/css/nav-menus-rtl.css create mode 100644 wp-admin/css/nav-menus-rtl.min.css create mode 100644 wp-admin/css/nav-menus.css create mode 100644 wp-admin/css/nav-menus.min.css create mode 100644 wp-admin/css/revisions-rtl.css create mode 100644 wp-admin/css/revisions-rtl.min.css create mode 100644 wp-admin/css/revisions.css create mode 100644 wp-admin/css/revisions.min.css create mode 100644 wp-admin/css/site-icon-rtl.css create mode 100644 wp-admin/css/site-icon-rtl.min.css create mode 100644 wp-admin/css/site-icon.css create mode 100644 wp-admin/css/site-icon.min.css create mode 100644 wp-admin/css/themes-rtl.css create mode 100644 wp-admin/css/themes-rtl.min.css create mode 100644 wp-admin/css/themes.css create mode 100644 wp-admin/css/themes.min.css create mode 100644 wp-admin/css/widgets-rtl.css create mode 100644 wp-admin/css/widgets-rtl.min.css create mode 100644 wp-admin/css/widgets.css create mode 100644 wp-admin/css/widgets.min.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/browser-rtl.png create mode 100644 wp-admin/images/browser.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-filters.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-automatic-upgrader-skin.php create mode 100644 wp-admin/includes/class-bulk-plugin-upgrader-skin.php create mode 100644 wp-admin/includes/class-bulk-theme-upgrader-skin.php create mode 100644 wp-admin/includes/class-bulk-upgrader-skin.php create mode 100644 wp-admin/includes/class-core-upgrader.php create mode 100644 wp-admin/includes/class-file-upload-upgrader.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-language-pack-upgrader-skin.php create mode 100644 wp-admin/includes/class-language-pack-upgrader.php create mode 100644 wp-admin/includes/class-pclzip.php create mode 100644 wp-admin/includes/class-plugin-installer-skin.php create mode 100644 wp-admin/includes/class-plugin-upgrader-skin.php create mode 100644 wp-admin/includes/class-plugin-upgrader.php create mode 100644 wp-admin/includes/class-theme-installer-skin.php create mode 100644 wp-admin/includes/class-theme-upgrader-skin.php create mode 100644 wp-admin/includes/class-theme-upgrader.php create mode 100644 wp-admin/includes/class-walker-category-checklist.php create mode 100644 wp-admin/includes/class-walker-nav-menu-checklist.php create mode 100644 wp-admin/includes/class-walker-nav-menu-edit.php create mode 100644 wp-admin/includes/class-wp-ajax-upgrader-skin.php create mode 100644 wp-admin/includes/class-wp-automatic-updater.php create mode 100644 wp-admin/includes/class-wp-comments-list-table.php create mode 100644 wp-admin/includes/class-wp-community-events.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-internal-pointers.php create mode 100644 wp-admin/includes/class-wp-links-list-table.php create mode 100644 wp-admin/includes/class-wp-list-table-compat.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-post-comments-list-table.php create mode 100644 wp-admin/includes/class-wp-posts-list-table.php create mode 100644 wp-admin/includes/class-wp-screen.php create mode 100644 wp-admin/includes/class-wp-site-icon.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-skin.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/credits.php create mode 100644 wp-admin/includes/dashboard.php create mode 100644 wp-admin/includes/deprecated.php create mode 100644 wp-admin/includes/edit-tag-messages.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-admin-filters.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/network.php create mode 100644 wp-admin/includes/noop.php create mode 100644 wp-admin/includes/options.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/translation-install.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/code-editor.js create mode 100644 wp-admin/js/code-editor.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-nav-menus.js create mode 100644 wp-admin/js/customize-nav-menus.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-expand.js create mode 100644 wp-admin/js/editor-expand.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/language-chooser.js create mode 100644 wp-admin/js/language-chooser.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-box.js create mode 100644 wp-admin/js/tags-box.min.js create mode 100644 wp-admin/js/tags-suggest.js create mode 100644 wp-admin/js/tags-suggest.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-plugin-editor.js create mode 100644 wp-admin/js/theme-plugin-editor.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/widgets/custom-html-widgets.js create mode 100644 wp-admin/js/widgets/custom-html-widgets.min.js create mode 100644 wp-admin/js/widgets/media-audio-widget.js create mode 100644 wp-admin/js/widgets/media-audio-widget.min.js create mode 100644 wp-admin/js/widgets/media-gallery-widget.js create mode 100644 wp-admin/js/widgets/media-gallery-widget.min.js create mode 100644 wp-admin/js/widgets/media-image-widget.js create mode 100644 wp-admin/js/widgets/media-image-widget.min.js create mode 100644 wp-admin/js/widgets/media-video-widget.js create mode 100644 wp-admin/js/widgets/media-video-widget.min.js create mode 100644 wp-admin/js/widgets/media-widgets.js create mode 100644 wp-admin/js/widgets/media-widgets.min.js create mode 100644 wp-admin/js/widgets/text-widgets.js create mode 100644 wp-admin/js/widgets/text-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-stub.js create mode 100644 wp-admin/js/wp-fullscreen-stub.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/privacy.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/privacy.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/term.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/privacy.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/advanced-cache.php create mode 100644 wp-content/index.php create mode 100644 wp-content/mu-plugins/force-strong-passwords/force-zxcvbn.js create mode 100644 wp-content/mu-plugins/force-strong-passwords/force-zxcvbn.min.js create mode 100644 wp-content/mu-plugins/force-strong-passwords/js-admin.js create mode 100644 wp-content/mu-plugins/force-strong-passwords/js-admin.min.js create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-de_DE.mo create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-de_DE.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-en_US.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-fr_FR.mo create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-fr_FR.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-ja.mo create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-ja.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-pt_BR.mo create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-pt_BR.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-sr_RS.mo create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-sr_RS.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-zh_CN.mo create mode 100644 wp-content/mu-plugins/force-strong-passwords/languages/slt-force-strong-passwords-zh_CN.po create mode 100644 wp-content/mu-plugins/force-strong-passwords/readme.md create mode 100644 wp-content/mu-plugins/force-strong-passwords/readme.txt create mode 100644 wp-content/mu-plugins/force-strong-passwords/slt-force-strong-passwords.php create mode 100644 wp-content/mu-plugins/mu-plugin.php create mode 100644 wp-content/mu-plugins/slt-force-strong-passwords.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin/inc/custom-exceptions.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin/inc/logger.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin/inc/security-checks.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin/inc/sign-on-user-provider.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin/inc/user-nonce-helper.php create mode 100644 wp-content/mu-plugins/wpe-wp-sign-on-plugin/inc/user-request-id-helper.php create mode 100644 wp-content/mu-plugins/wpengine-common/admin-ui.php create mode 100644 wp-content/mu-plugins/wpengine-common/ajax.php create mode 100644 wp-content/mu-plugins/wpengine-common/changelog.txt create mode 100644 wp-content/mu-plugins/wpengine-common/class-cookies.php create mode 100644 wp-content/mu-plugins/wpengine-common/class-filterplugin.php create mode 100644 wp-content/mu-plugins/wpengine-common/class-monitor_admin_ajax.php create mode 100644 wp-content/mu-plugins/wpengine-common/class-wpe-heartbeat-throttle.php create mode 100644 wp-content/mu-plugins/wpengine-common/class-wpeapi.php create mode 100644 wp-content/mu-plugins/wpengine-common/class-wpedeployment.php create mode 100644 wp-content/mu-plugins/wpengine-common/class.notices.php create mode 100644 wp-content/mu-plugins/wpengine-common/class.powered-by-widget.php create mode 100644 wp-content/mu-plugins/wpengine-common/class.sessionsanity.php create mode 100644 wp-content/mu-plugins/wpengine-common/class.site-preview.php create mode 100644 wp-content/mu-plugins/wpengine-common/common-common.php create mode 100644 wp-content/mu-plugins/wpengine-common/css/bootstrap.css create mode 100644 wp-content/mu-plugins/wpengine-common/css/glyphicons-halflings-white.png create mode 100644 wp-content/mu-plugins/wpengine-common/css/glyphicons-halflings.png create mode 100644 wp-content/mu-plugins/wpengine-common/css/glyphicons-white.png create mode 100644 wp-content/mu-plugins/wpengine-common/css/glyphicons.png create mode 100644 wp-content/mu-plugins/wpengine-common/css/wpe-common.css create mode 100644 wp-content/mu-plugins/wpengine-common/dify-partial.php create mode 100644 wp-content/mu-plugins/wpengine-common/dify-widget.php create mode 100644 wp-content/mu-plugins/wpengine-common/images/ajax-loader-transparent.gif create mode 100644 wp-content/mu-plugins/wpengine-common/images/ajax-loader.gif create mode 100644 wp-content/mu-plugins/wpengine-common/images/favicon.ico create mode 100644 wp-content/mu-plugins/wpengine-common/images/window-close.png create mode 100644 wp-content/mu-plugins/wpengine-common/images/wpe-16x16.jpg create mode 100644 wp-content/mu-plugins/wpengine-common/images/wpe-curated.png create mode 100644 wp-content/mu-plugins/wpengine-common/images/wpe-identity-square-dark-16.png create mode 100644 wp-content/mu-plugins/wpengine-common/images/wpengine_small_dark.png create mode 100644 wp-content/mu-plugins/wpengine-common/images/wpengine_small_light.png create mode 100644 wp-content/mu-plugins/wpengine-common/js/bootstrap-modal.js create mode 100644 wp-content/mu-plugins/wpengine-common/js/bootstrap-transition.js create mode 100644 wp-content/mu-plugins/wpengine-common/js/bootstrap.js create mode 100644 wp-content/mu-plugins/wpengine-common/js/dify-blog.js create mode 100644 wp-content/mu-plugins/wpengine-common/js/wpe-common.js create mode 100644 wp-content/mu-plugins/wpengine-common/js/wpe-rewrite.js create mode 100644 wp-content/mu-plugins/wpengine-common/monitor-admin-ajax.php create mode 100644 wp-content/mu-plugins/wpengine-common/network.php create mode 100644 wp-content/mu-plugins/wpengine-common/patterns.php create mode 100644 wp-content/mu-plugins/wpengine-common/plugin.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/admin-footer.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/admin/notice-sticky.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/admin/notice.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/general/powered-by.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/modal.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/staging-modal.php create mode 100644 wp-content/mu-plugins/wpengine-common/views/wpe-migration-preview-template.php create mode 100644 wp-content/mu-plugins/wpengine-common/wpe-sec.php create mode 100644 wp-content/mu-plugins/wpengine-common/wpe_wpdb.php create mode 100644 wp-content/mu-plugins/wpengine-security-auditor.php create mode 100644 wp-content/mysql.sql create mode 100644 wp-content/plugins/akismet/LICENSE.txt 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-cli.php create mode 100644 wp-content/plugins/akismet/class.akismet-rest-api.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/wrapper.php create mode 100644 wp-content/plugins/hyperdb-1-1/db-config.php create mode 100644 wp-content/plugins/hyperdb-1-1/db.php create mode 100644 wp-content/plugins/hyperdb-1-1/readme.txt create mode 100644 wp-content/plugins/hyperdb/db-config.php create mode 100644 wp-content/plugins/hyperdb/db.php create mode 100644 wp-content/plugins/hyperdb/readme.txt create mode 100644 wp-content/plugins/index.php create mode 100644 wp-content/themes/index.php create mode 100644 wp-content/themes/twentyfifteen/404.php create mode 100644 wp-content/themes/twentyfifteen/archive.php create mode 100644 wp-content/themes/twentyfifteen/author-bio.php create mode 100644 wp-content/themes/twentyfifteen/comments.php create mode 100644 wp-content/themes/twentyfifteen/content-link.php create mode 100644 wp-content/themes/twentyfifteen/content-none.php create mode 100644 wp-content/themes/twentyfifteen/content-page.php create mode 100644 wp-content/themes/twentyfifteen/content-search.php create mode 100644 wp-content/themes/twentyfifteen/content.php create mode 100644 wp-content/themes/twentyfifteen/css/editor-style.css create mode 100644 wp-content/themes/twentyfifteen/css/ie.css create mode 100644 wp-content/themes/twentyfifteen/css/ie7.css create mode 100644 wp-content/themes/twentyfifteen/footer.php create mode 100644 wp-content/themes/twentyfifteen/functions.php create mode 100644 wp-content/themes/twentyfifteen/genericons/COPYING.txt create mode 100644 wp-content/themes/twentyfifteen/genericons/Genericons.eot create mode 100644 wp-content/themes/twentyfifteen/genericons/Genericons.svg create mode 100644 wp-content/themes/twentyfifteen/genericons/Genericons.ttf create mode 100644 wp-content/themes/twentyfifteen/genericons/Genericons.woff create mode 100644 wp-content/themes/twentyfifteen/genericons/LICENSE.txt create mode 100644 wp-content/themes/twentyfifteen/genericons/README.md create mode 100644 wp-content/themes/twentyfifteen/genericons/genericons.css create mode 100644 wp-content/themes/twentyfifteen/header.php create mode 100644 wp-content/themes/twentyfifteen/image.php create mode 100644 wp-content/themes/twentyfifteen/inc/back-compat.php create mode 100644 wp-content/themes/twentyfifteen/inc/custom-header.php create mode 100644 wp-content/themes/twentyfifteen/inc/customizer.php create mode 100644 wp-content/themes/twentyfifteen/inc/template-tags.php create mode 100644 wp-content/themes/twentyfifteen/index.php create mode 100644 wp-content/themes/twentyfifteen/js/color-scheme-control.js create mode 100644 wp-content/themes/twentyfifteen/js/customize-preview.js create mode 100644 wp-content/themes/twentyfifteen/js/functions.js create mode 100644 wp-content/themes/twentyfifteen/js/html5.js create mode 100644 wp-content/themes/twentyfifteen/js/keyboard-image-navigation.js create mode 100644 wp-content/themes/twentyfifteen/js/skip-link-focus-fix.js create mode 100644 wp-content/themes/twentyfifteen/page.php create mode 100644 wp-content/themes/twentyfifteen/readme.txt create mode 100644 wp-content/themes/twentyfifteen/rtl.css create mode 100644 wp-content/themes/twentyfifteen/screenshot.png create mode 100644 wp-content/themes/twentyfifteen/search.php create mode 100644 wp-content/themes/twentyfifteen/sidebar.php create mode 100644 wp-content/themes/twentyfifteen/single.php create mode 100644 wp-content/themes/twentyfifteen/style.css create mode 100644 wp-content/themes/twentyseventeen/404.php create mode 100644 wp-content/themes/twentyseventeen/README.txt create mode 100644 wp-content/themes/twentyseventeen/archive.php create mode 100644 wp-content/themes/twentyseventeen/assets/css/colors-dark.css create mode 100644 wp-content/themes/twentyseventeen/assets/css/editor-style.css create mode 100644 wp-content/themes/twentyseventeen/assets/css/ie8.css create mode 100644 wp-content/themes/twentyseventeen/assets/css/ie9.css create mode 100644 wp-content/themes/twentyseventeen/assets/images/coffee.jpg create mode 100644 wp-content/themes/twentyseventeen/assets/images/espresso.jpg create mode 100644 wp-content/themes/twentyseventeen/assets/images/header.jpg create mode 100644 wp-content/themes/twentyseventeen/assets/images/sandwich.jpg create mode 100644 wp-content/themes/twentyseventeen/assets/images/svg-icons.svg create mode 100644 wp-content/themes/twentyseventeen/assets/js/customize-controls.js create mode 100644 wp-content/themes/twentyseventeen/assets/js/customize-preview.js create mode 100644 wp-content/themes/twentyseventeen/assets/js/global.js create mode 100644 wp-content/themes/twentyseventeen/assets/js/html5.js create mode 100644 wp-content/themes/twentyseventeen/assets/js/jquery.scrollTo.js create mode 100644 wp-content/themes/twentyseventeen/assets/js/navigation.js create mode 100644 wp-content/themes/twentyseventeen/assets/js/skip-link-focus-fix.js create mode 100644 wp-content/themes/twentyseventeen/comments.php create mode 100644 wp-content/themes/twentyseventeen/footer.php create mode 100644 wp-content/themes/twentyseventeen/front-page.php create mode 100644 wp-content/themes/twentyseventeen/functions.php create mode 100644 wp-content/themes/twentyseventeen/header.php create mode 100644 wp-content/themes/twentyseventeen/inc/back-compat.php create mode 100644 wp-content/themes/twentyseventeen/inc/color-patterns.php create mode 100644 wp-content/themes/twentyseventeen/inc/custom-header.php create mode 100644 wp-content/themes/twentyseventeen/inc/customizer.php create mode 100644 wp-content/themes/twentyseventeen/inc/icon-functions.php create mode 100644 wp-content/themes/twentyseventeen/inc/template-functions.php create mode 100644 wp-content/themes/twentyseventeen/inc/template-tags.php create mode 100644 wp-content/themes/twentyseventeen/index.php create mode 100644 wp-content/themes/twentyseventeen/page.php create mode 100644 wp-content/themes/twentyseventeen/rtl.css create mode 100644 wp-content/themes/twentyseventeen/screenshot.png create mode 100644 wp-content/themes/twentyseventeen/search.php create mode 100644 wp-content/themes/twentyseventeen/searchform.php create mode 100644 wp-content/themes/twentyseventeen/sidebar.php create mode 100644 wp-content/themes/twentyseventeen/single.php create mode 100644 wp-content/themes/twentyseventeen/style.css create mode 100644 wp-content/themes/twentyseventeen/template-parts/footer/footer-widgets.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/footer/site-info.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/header/header-image.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/header/site-branding.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/navigation/navigation-top.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/page/content-front-page-panels.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/page/content-front-page.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/page/content-page.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content-audio.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content-excerpt.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content-gallery.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content-image.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content-none.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content-video.php create mode 100644 wp-content/themes/twentyseventeen/template-parts/post/content.php create mode 100644 wp-content/themes/twentysixteen/404.php create mode 100644 wp-content/themes/twentysixteen/archive.php create mode 100644 wp-content/themes/twentysixteen/comments.php create mode 100644 wp-content/themes/twentysixteen/css/editor-style.css create mode 100644 wp-content/themes/twentysixteen/css/ie.css create mode 100644 wp-content/themes/twentysixteen/css/ie7.css create mode 100644 wp-content/themes/twentysixteen/css/ie8.css create mode 100644 wp-content/themes/twentysixteen/footer.php create mode 100644 wp-content/themes/twentysixteen/functions.php create mode 100644 wp-content/themes/twentysixteen/genericons/COPYING.txt create mode 100644 wp-content/themes/twentysixteen/genericons/Genericons.eot create mode 100644 wp-content/themes/twentysixteen/genericons/Genericons.svg create mode 100644 wp-content/themes/twentysixteen/genericons/Genericons.ttf create mode 100644 wp-content/themes/twentysixteen/genericons/Genericons.woff create mode 100644 wp-content/themes/twentysixteen/genericons/LICENSE.txt create mode 100644 wp-content/themes/twentysixteen/genericons/README.md create mode 100644 wp-content/themes/twentysixteen/genericons/genericons.css create mode 100644 wp-content/themes/twentysixteen/header.php create mode 100644 wp-content/themes/twentysixteen/image.php create mode 100644 wp-content/themes/twentysixteen/inc/back-compat.php create mode 100644 wp-content/themes/twentysixteen/inc/customizer.php create mode 100644 wp-content/themes/twentysixteen/inc/template-tags.php create mode 100644 wp-content/themes/twentysixteen/index.php create mode 100644 wp-content/themes/twentysixteen/js/color-scheme-control.js create mode 100644 wp-content/themes/twentysixteen/js/customize-preview.js create mode 100644 wp-content/themes/twentysixteen/js/functions.js create mode 100644 wp-content/themes/twentysixteen/js/html5.js create mode 100644 wp-content/themes/twentysixteen/js/keyboard-image-navigation.js create mode 100644 wp-content/themes/twentysixteen/js/skip-link-focus-fix.js create mode 100644 wp-content/themes/twentysixteen/page.php create mode 100644 wp-content/themes/twentysixteen/readme.txt create mode 100644 wp-content/themes/twentysixteen/rtl.css create mode 100644 wp-content/themes/twentysixteen/screenshot.png create mode 100644 wp-content/themes/twentysixteen/search.php create mode 100644 wp-content/themes/twentysixteen/searchform.php create mode 100644 wp-content/themes/twentysixteen/sidebar-content-bottom.php create mode 100644 wp-content/themes/twentysixteen/sidebar.php create mode 100644 wp-content/themes/twentysixteen/single.php create mode 100644 wp-content/themes/twentysixteen/style.css create mode 100644 wp-content/themes/twentysixteen/template-parts/biography.php create mode 100644 wp-content/themes/twentysixteen/template-parts/content-none.php create mode 100644 wp-content/themes/twentysixteen/template-parts/content-page.php create mode 100644 wp-content/themes/twentysixteen/template-parts/content-search.php create mode 100644 wp-content/themes/twentysixteen/template-parts/content-single.php create mode 100644 wp-content/themes/twentysixteen/template-parts/content.php 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/IXR/class-IXR-base64.php create mode 100644 wp-includes/IXR/class-IXR-client.php create mode 100644 wp-includes/IXR/class-IXR-clientmulticall.php create mode 100644 wp-includes/IXR/class-IXR-date.php create mode 100644 wp-includes/IXR/class-IXR-error.php create mode 100644 wp-includes/IXR/class-IXR-introspectionserver.php create mode 100644 wp-includes/IXR/class-IXR-message.php create mode 100644 wp-includes/IXR/class-IXR-request.php create mode 100644 wp-includes/IXR/class-IXR-server.php create mode 100644 wp-includes/IXR/class-IXR-value.php create mode 100644 wp-includes/Requests/Auth.php create mode 100644 wp-includes/Requests/Auth/Basic.php create mode 100644 wp-includes/Requests/Cookie.php create mode 100644 wp-includes/Requests/Cookie/Jar.php create mode 100644 wp-includes/Requests/Exception.php create mode 100644 wp-includes/Requests/Exception/HTTP.php create mode 100644 wp-includes/Requests/Exception/HTTP/304.php create mode 100644 wp-includes/Requests/Exception/HTTP/305.php create mode 100644 wp-includes/Requests/Exception/HTTP/306.php create mode 100644 wp-includes/Requests/Exception/HTTP/400.php create mode 100644 wp-includes/Requests/Exception/HTTP/401.php create mode 100644 wp-includes/Requests/Exception/HTTP/402.php create mode 100644 wp-includes/Requests/Exception/HTTP/403.php create mode 100644 wp-includes/Requests/Exception/HTTP/404.php create mode 100644 wp-includes/Requests/Exception/HTTP/405.php create mode 100644 wp-includes/Requests/Exception/HTTP/406.php create mode 100644 wp-includes/Requests/Exception/HTTP/407.php create mode 100644 wp-includes/Requests/Exception/HTTP/408.php create mode 100644 wp-includes/Requests/Exception/HTTP/409.php create mode 100644 wp-includes/Requests/Exception/HTTP/410.php create mode 100644 wp-includes/Requests/Exception/HTTP/411.php create mode 100644 wp-includes/Requests/Exception/HTTP/412.php create mode 100644 wp-includes/Requests/Exception/HTTP/413.php create mode 100644 wp-includes/Requests/Exception/HTTP/414.php create mode 100644 wp-includes/Requests/Exception/HTTP/415.php create mode 100644 wp-includes/Requests/Exception/HTTP/416.php create mode 100644 wp-includes/Requests/Exception/HTTP/417.php create mode 100644 wp-includes/Requests/Exception/HTTP/418.php create mode 100644 wp-includes/Requests/Exception/HTTP/428.php create mode 100644 wp-includes/Requests/Exception/HTTP/429.php create mode 100644 wp-includes/Requests/Exception/HTTP/431.php create mode 100644 wp-includes/Requests/Exception/HTTP/500.php create mode 100644 wp-includes/Requests/Exception/HTTP/501.php create mode 100644 wp-includes/Requests/Exception/HTTP/502.php create mode 100644 wp-includes/Requests/Exception/HTTP/503.php create mode 100644 wp-includes/Requests/Exception/HTTP/504.php create mode 100644 wp-includes/Requests/Exception/HTTP/505.php create mode 100644 wp-includes/Requests/Exception/HTTP/511.php create mode 100644 wp-includes/Requests/Exception/HTTP/Unknown.php create mode 100644 wp-includes/Requests/Exception/Transport.php create mode 100644 wp-includes/Requests/Exception/Transport/cURL.php create mode 100644 wp-includes/Requests/Hooker.php create mode 100644 wp-includes/Requests/Hooks.php create mode 100644 wp-includes/Requests/IDNAEncoder.php create mode 100644 wp-includes/Requests/IPv6.php create mode 100644 wp-includes/Requests/IRI.php create mode 100644 wp-includes/Requests/Proxy.php create mode 100644 wp-includes/Requests/Proxy/HTTP.php create mode 100644 wp-includes/Requests/Response.php create mode 100644 wp-includes/Requests/Response/Headers.php create mode 100644 wp-includes/Requests/SSL.php create mode 100644 wp-includes/Requests/Session.php create mode 100644 wp-includes/Requests/Transport.php create mode 100644 wp-includes/Requests/Transport/cURL.php create mode 100644 wp-includes/Requests/Transport/fsockopen.php create mode 100644 wp-includes/Requests/Utility/CaseInsensitiveDictionary.php create mode 100644 wp-includes/Requests/Utility/FilteredIterator.php 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-requests.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-walker-category-dropdown.php create mode 100644 wp-includes/class-walker-category.php create mode 100644 wp-includes/class-walker-comment.php create mode 100644 wp-includes/class-walker-nav-menu.php create mode 100644 wp-includes/class-walker-page-dropdown.php create mode 100644 wp-includes/class-walker-page.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-comment-query.php create mode 100644 wp-includes/class-wp-comment.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-nav-menus.php create mode 100644 wp-includes/class-wp-customize-panel.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-dependency.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-feed-cache-transient.php create mode 100644 wp-includes/class-wp-feed-cache.php create mode 100644 wp-includes/class-wp-hook.php create mode 100644 wp-includes/class-wp-http-cookie.php create mode 100644 wp-includes/class-wp-http-curl.php create mode 100644 wp-includes/class-wp-http-encoding.php create mode 100644 wp-includes/class-wp-http-ixr-client.php create mode 100644 wp-includes/class-wp-http-proxy.php create mode 100644 wp-includes/class-wp-http-requests-hooks.php create mode 100644 wp-includes/class-wp-http-requests-response.php create mode 100644 wp-includes/class-wp-http-response.php create mode 100644 wp-includes/class-wp-http-streams.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-list-util.php create mode 100644 wp-includes/class-wp-locale-switcher.php create mode 100644 wp-includes/class-wp-locale.php create mode 100644 wp-includes/class-wp-matchesmapregex.php create mode 100644 wp-includes/class-wp-meta-query.php create mode 100644 wp-includes/class-wp-metadata-lazyloader.php create mode 100644 wp-includes/class-wp-network-query.php create mode 100644 wp-includes/class-wp-network.php create mode 100644 wp-includes/class-wp-oembed-controller.php create mode 100644 wp-includes/class-wp-post-type.php create mode 100644 wp-includes/class-wp-post.php create mode 100644 wp-includes/class-wp-query.php create mode 100644 wp-includes/class-wp-rewrite.php create mode 100644 wp-includes/class-wp-role.php create mode 100644 wp-includes/class-wp-roles.php create mode 100644 wp-includes/class-wp-session-tokens.php create mode 100644 wp-includes/class-wp-simplepie-file.php create mode 100644 wp-includes/class-wp-simplepie-sanitize-kses.php create mode 100644 wp-includes/class-wp-site-query.php create mode 100644 wp-includes/class-wp-site.php create mode 100644 wp-includes/class-wp-tax-query.php create mode 100644 wp-includes/class-wp-taxonomy.php create mode 100644 wp-includes/class-wp-term-query.php create mode 100644 wp-includes/class-wp-term.php create mode 100644 wp-includes/class-wp-text-diff-renderer-inline.php create mode 100644 wp-includes/class-wp-text-diff-renderer-table.php create mode 100644 wp-includes/class-wp-theme.php create mode 100644 wp-includes/class-wp-user-meta-session-tokens.php create mode 100644 wp-includes/class-wp-user-query.php create mode 100644 wp-includes/class-wp-user.php create mode 100644 wp-includes/class-wp-walker.php create mode 100644 wp-includes/class-wp-widget-factory.php create mode 100644 wp-includes/class-wp-widget.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/customize-preview-rtl.css create mode 100644 wp-includes/css/customize-preview-rtl.min.css create mode 100644 wp-includes/css/customize-preview.css create mode 100644 wp-includes/css/customize-preview.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-embed-template-ie.css create mode 100644 wp-includes/css/wp-embed-template-ie.min.css create mode 100644 wp-includes/css/wp-embed-template.css create mode 100644 wp-includes/css/wp-embed-template.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/customize/class-wp-customize-background-image-control.php create mode 100644 wp-includes/customize/class-wp-customize-background-image-setting.php create mode 100644 wp-includes/customize/class-wp-customize-background-position-control.php create mode 100644 wp-includes/customize/class-wp-customize-code-editor-control.php create mode 100644 wp-includes/customize/class-wp-customize-color-control.php create mode 100644 wp-includes/customize/class-wp-customize-cropped-image-control.php create mode 100644 wp-includes/customize/class-wp-customize-custom-css-setting.php create mode 100644 wp-includes/customize/class-wp-customize-date-time-control.php create mode 100644 wp-includes/customize/class-wp-customize-filter-setting.php create mode 100644 wp-includes/customize/class-wp-customize-header-image-control.php create mode 100644 wp-includes/customize/class-wp-customize-header-image-setting.php create mode 100644 wp-includes/customize/class-wp-customize-image-control.php create mode 100644 wp-includes/customize/class-wp-customize-media-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-item-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-item-setting.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-location-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-locations-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-name-control.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-section.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menu-setting.php create mode 100644 wp-includes/customize/class-wp-customize-nav-menus-panel.php create mode 100644 wp-includes/customize/class-wp-customize-new-menu-control.php create mode 100644 wp-includes/customize/class-wp-customize-new-menu-section.php create mode 100644 wp-includes/customize/class-wp-customize-partial.php create mode 100644 wp-includes/customize/class-wp-customize-selective-refresh.php create mode 100644 wp-includes/customize/class-wp-customize-sidebar-section.php create mode 100644 wp-includes/customize/class-wp-customize-site-icon-control.php create mode 100644 wp-includes/customize/class-wp-customize-theme-control.php create mode 100644 wp-includes/customize/class-wp-customize-themes-panel.php create mode 100644 wp-includes/customize/class-wp-customize-themes-section.php create mode 100644 wp-includes/customize/class-wp-customize-upload-control.php create mode 100644 wp-includes/customize/class-wp-widget-area-customize-control.php create mode 100644 wp-includes/customize/class-wp-widget-form-customize-control.php 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/embed-template.php create mode 100644 wp-includes/embed.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/frownie.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/smilies/mrgreen.png create mode 100644 wp-includes/images/smilies/rolleyes.png create mode 100644 wp-includes/images/smilies/simple-smile.png 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/w-logo-blue.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/api-request.js create mode 100644 wp-includes/js/api-request.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/codemirror/codemirror.min.css create mode 100644 wp-includes/js/codemirror/codemirror.min.js create mode 100644 wp-includes/js/codemirror/csslint.js create mode 100644 wp-includes/js/codemirror/htmlhint-kses.js create mode 100644 wp-includes/js/codemirror/htmlhint.js create mode 100644 wp-includes/js/codemirror/jshint.js create mode 100644 wp-includes/js/codemirror/jsonlint.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-nav-menus.js create mode 100644 wp-includes/js/customize-preview-nav-menus.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-selective-refresh.js create mode 100644 wp-includes/js/customize-selective-refresh.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/imagesloaded.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/accordion.min.js create mode 100644 wp-includes/js/jquery/ui/autocomplete.min.js create mode 100644 wp-includes/js/jquery/ui/button.min.js create mode 100644 wp-includes/js/jquery/ui/core.min.js create mode 100644 wp-includes/js/jquery/ui/datepicker.min.js create mode 100644 wp-includes/js/jquery/ui/dialog.min.js create mode 100644 wp-includes/js/jquery/ui/draggable.min.js create mode 100644 wp-includes/js/jquery/ui/droppable.min.js create mode 100644 wp-includes/js/jquery/ui/effect-blind.min.js create mode 100644 wp-includes/js/jquery/ui/effect-bounce.min.js create mode 100644 wp-includes/js/jquery/ui/effect-clip.min.js create mode 100644 wp-includes/js/jquery/ui/effect-drop.min.js create mode 100644 wp-includes/js/jquery/ui/effect-explode.min.js create mode 100644 wp-includes/js/jquery/ui/effect-fade.min.js create mode 100644 wp-includes/js/jquery/ui/effect-fold.min.js create mode 100644 wp-includes/js/jquery/ui/effect-highlight.min.js create mode 100644 wp-includes/js/jquery/ui/effect-puff.min.js create mode 100644 wp-includes/js/jquery/ui/effect-pulsate.min.js create mode 100644 wp-includes/js/jquery/ui/effect-scale.min.js create mode 100644 wp-includes/js/jquery/ui/effect-shake.min.js create mode 100644 wp-includes/js/jquery/ui/effect-size.min.js create mode 100644 wp-includes/js/jquery/ui/effect-slide.min.js create mode 100644 wp-includes/js/jquery/ui/effect-transfer.min.js create mode 100644 wp-includes/js/jquery/ui/effect.min.js create mode 100644 wp-includes/js/jquery/ui/menu.min.js create mode 100644 wp-includes/js/jquery/ui/mouse.min.js create mode 100644 wp-includes/js/jquery/ui/position.min.js create mode 100644 wp-includes/js/jquery/ui/progressbar.min.js create mode 100644 wp-includes/js/jquery/ui/resizable.min.js create mode 100644 wp-includes/js/jquery/ui/selectable.min.js create mode 100644 wp-includes/js/jquery/ui/selectmenu.min.js create mode 100644 wp-includes/js/jquery/ui/slider.min.js create mode 100644 wp-includes/js/jquery/ui/sortable.min.js create mode 100644 wp-includes/js/jquery/ui/spinner.min.js create mode 100644 wp-includes/js/jquery/ui/tabs.min.js create mode 100644 wp-includes/js/jquery/ui/tooltip.min.js create mode 100644 wp-includes/js/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-grid.js create mode 100644 wp-includes/js/media-grid.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/mediaelement-and-player.js create mode 100644 wp-includes/js/mediaelement/mediaelement-and-player.min.js create mode 100644 wp-includes/js/mediaelement/mediaelement-migrate.js create mode 100644 wp-includes/js/mediaelement/mediaelement-migrate.min.js create mode 100644 wp-includes/js/mediaelement/mediaelement.js create mode 100644 wp-includes/js/mediaelement/mediaelement.min.js create mode 100644 wp-includes/js/mediaelement/mediaelementplayer-legacy.css create mode 100644 wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css create mode 100644 wp-includes/js/mediaelement/mediaelementplayer.css create mode 100644 wp-includes/js/mediaelement/mediaelementplayer.min.css create mode 100644 wp-includes/js/mediaelement/mejs-controls.png create mode 100644 wp-includes/js/mediaelement/mejs-controls.svg create mode 100644 wp-includes/js/mediaelement/renderers/vimeo.js create mode 100644 wp-includes/js/mediaelement/renderers/vimeo.min.js 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-mediaelement.min.css create mode 100644 wp-includes/js/mediaelement/wp-mediaelement.min.js create mode 100644 wp-includes/js/mediaelement/wp-playlist.js create mode 100644 wp-includes/js/mediaelement/wp-playlist.min.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/moxie.js create mode 100644 wp-includes/js/plupload/moxie.min.js create mode 100644 wp-includes/js/plupload/plupload.js create mode 100644 wp-includes/js/plupload/plupload.min.js 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 rename vendor/composer/LICENSE => wp-includes/js/swfupload/license.txt (57%) create mode 100644 wp-includes/js/swfupload/swfupload.js 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/colorpicker/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/colorpicker/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/link/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/link/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/lists/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/lists/plugin.min.js 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/wpautoresize/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpautoresize/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/wpemoji/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpemoji/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/wptextpattern/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wptextpattern/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/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.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.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/inlite/theme.js create mode 100644 wp-includes/js/tinymce/themes/inlite/theme.min.js 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-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/twemoji.js create mode 100644 wp-includes/js/twemoji.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-a11y.js create mode 100644 wp-includes/js/wp-a11y.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-api.js create mode 100644 wp-includes/js/wp-api.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-custom-header.js create mode 100644 wp-includes/js/wp-custom-header.min.js create mode 100644 wp-includes/js/wp-embed-template.js create mode 100644 wp-includes/js/wp-embed-template.min.js create mode 100644 wp-includes/js/wp-embed.js create mode 100644 wp-includes/js/wp-embed.min.js create mode 100644 wp-includes/js/wp-emoji-loader.js create mode 100644 wp-includes/js/wp-emoji-loader.min.js create mode 100644 wp-includes/js/wp-emoji-release.min.js create mode 100644 wp-includes/js/wp-emoji.js create mode 100644 wp-includes/js/wp-emoji.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-sanitize.js create mode 100644 wp-includes/js/wp-sanitize.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/plural-forms.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/random_compat/byte_safe_strings.php create mode 100644 wp-includes/random_compat/cast_to_int.php create mode 100644 wp-includes/random_compat/error_polyfill.php create mode 100644 wp-includes/random_compat/random.php create mode 100644 wp-includes/random_compat/random_bytes_com_dotnet.php create mode 100644 wp-includes/random_compat/random_bytes_dev_urandom.php create mode 100644 wp-includes/random_compat/random_bytes_libsodium.php create mode 100644 wp-includes/random_compat/random_bytes_libsodium_legacy.php create mode 100644 wp-includes/random_compat/random_bytes_mcrypt.php create mode 100644 wp-includes/random_compat/random_bytes_openssl.php create mode 100644 wp-includes/random_compat/random_int.php create mode 100644 wp-includes/registration-functions.php create mode 100644 wp-includes/registration.php create mode 100644 wp-includes/rest-api.php create mode 100644 wp-includes/rest-api/class-wp-rest-request.php create mode 100644 wp-includes/rest-api/class-wp-rest-response.php create mode 100644 wp-includes/rest-api/class-wp-rest-server.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php create mode 100644 wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php create mode 100644 wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php create mode 100644 wp-includes/rest-api/fields/class-wp-rest-meta-fields.php create mode 100644 wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php create mode 100644 wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php create mode 100644 wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.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/session.php create mode 100644 wp-includes/shortcodes.php create mode 100644 wp-includes/spl-autoload-compat.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.php create mode 100644 wp-includes/theme-compat/embed-404.php create mode 100644 wp-includes/theme-compat/embed-content.php create mode 100644 wp-includes/theme-compat/embed.php create mode 100644 wp-includes/theme-compat/footer-embed.php create mode 100644 wp-includes/theme-compat/footer.php create mode 100644 wp-includes/theme-compat/header-embed.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/widgets/class-wp-nav-menu-widget.php create mode 100644 wp-includes/widgets/class-wp-widget-archives.php create mode 100644 wp-includes/widgets/class-wp-widget-calendar.php create mode 100644 wp-includes/widgets/class-wp-widget-categories.php create mode 100644 wp-includes/widgets/class-wp-widget-custom-html.php create mode 100644 wp-includes/widgets/class-wp-widget-links.php create mode 100644 wp-includes/widgets/class-wp-widget-media-audio.php create mode 100644 wp-includes/widgets/class-wp-widget-media-gallery.php create mode 100644 wp-includes/widgets/class-wp-widget-media-image.php create mode 100644 wp-includes/widgets/class-wp-widget-media-video.php create mode 100644 wp-includes/widgets/class-wp-widget-media.php create mode 100644 wp-includes/widgets/class-wp-widget-meta.php create mode 100644 wp-includes/widgets/class-wp-widget-pages.php create mode 100644 wp-includes/widgets/class-wp-widget-recent-comments.php create mode 100644 wp-includes/widgets/class-wp-widget-recent-posts.php create mode 100644 wp-includes/widgets/class-wp-widget-rss.php create mode 100644 wp-includes/widgets/class-wp-widget-search.php create mode 100644 wp-includes/widgets/class-wp-widget-tag-cloud.php create mode 100644 wp-includes/widgets/class-wp-widget-text.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/.gitignore b/.gitignore index 995f89d..408adf2 100755 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ vendor/* !vendor/composer tree-config.php tree-db.php +config.codekit3 diff --git a/_wpeprivate/config.json b/_wpeprivate/config.json new file mode 100644 index 0000000..99430af --- /dev/null +++ b/_wpeprivate/config.json @@ -0,0 +1 @@ +{"env":{"WPENGINE_ACCOUNT":"cmetree","WPENGINE_PHPSESSIONS":"on","WPENGINE_DB_SESSIONS":"off","WPENGINE_ALLOW_FLOCK":"off","WPENGINE_MAIL_HOOK":"on"},"constants":{"WPENGINE_ACCOUNT":"cmetree","WPENGINE_SESSION_DB_HOST":"127.0.0.1","WPENGINE_SESSION_DB_USERNAME":"cmetree","WPENGINE_SESSION_DB_PASSWORD":"mqV4UipEW7jmHckKcNNe","WPENGINE_SESSION_DB_SCHEMA":"wp_cmetree","WPENGINE_SESSION_LOCKING":"on","WPENGINE_SITES_ENVIRONMENT":"unspecified"},"globals":{"wpengine_platform_config":{"content_regexs":[],"no_cdn_uris":[],"all_domains":["cmetree.wpengine.com","tree.mediaengagement.org"],"netdna_push_domains":[],"domain_mappings":[],"limit_heartbeat":true,"wpengine_apikey":"94e7eaabb19c5e485f7bddbf6152406390263f2d","locations":{"domain_base":"wpengine.com","api1":"https:\/\/api.wpengine.com\/1.2","api2":"https:\/\/api2.wpengine.com"},"wpe_php":{"7.2":"1e4d830a16ca7904f2a94cd966c2ce6b513aabe8","7.3":"b9962f060138db59f310176de7f878d0a9e94e23","7.4":"c99fb3ec2da850bc976a891f8ce448c26e946e40"}},"wpe_largefs_paths":[],"wpe_largefs_bucket":"largefs.wpengine","wpe_largefs_region":"us-east-1"},"defines":{"WPE_VENDOR":false,"WP_CACHE_KEY_SALT":"cf981144450ff6f1"}} \ No newline at end of file diff --git a/apple-touch-icon-precomposed.png b/apple-touch-icon-precomposed.png new file mode 100644 index 0000000..e69de29 diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000..e69de29 diff --git a/data/citizen2.json b/data/citizen2.json new file mode 100644 index 0000000..1faa39b --- /dev/null +++ b/data/citizen2.json @@ -0,0 +1,286 @@ +{ + "ID": "16", + "slug": "citizen2", + "title": "Citizen2", + "owner": "172", + "starts": [ + { + "ID": "348", + "title": "Start", + "destinationID": "343", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "349", + "title": "Attachment A", + "content": "I have been a Permanent Resident for three to five years", + "order": "0", + "questions": [ + "343" + ] + } + ], + "questions": [ + { + "ID": "343", + "title": "I am at least 18 years old.", + "order": "0", + "options": [ + { + "ID": "344", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "345", + "title": "True", + "order": "1", + "destinationID": "346", + "destinationType": "end" + } + ] + }, + { + "ID": "350", + "title": "I am a Permanent Resident of the United States.", + "order": "1", + "options": [ + { + "ID": "351", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "352", + "title": "True", + "order": "1", + "destinationID": "353", + "destinationType": "question" + } + ] + }, + { + "ID": "353", + "title": "I have been issued a Permanent Resident Card (formerly called Alien Registration Card).", + "order": "2", + "options": [ + { + "ID": "354", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "355", + "title": "True", + "order": "1", + "destinationID": "346", + "destinationType": "end" + } + ] + }, + { + "ID": "356", + "title": "I have been a permanent resident for", + "order": "3", + "options": [ + { + "ID": "357", + "title": "Less than three years", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "358", + "title": "Three or more years", + "order": "1", + "destinationID": "360", + "destinationType": "question" + }, + { + "ID": "359", + "title": "Five or more years", + "order": "2", + "destinationID": "346", + "destinationType": "end" + } + ] + }, + { + "ID": "360", + "title": "I am married to and living with a US Citizen.", + "order": "4", + "options": [ + { + "ID": "361", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "362", + "title": "True", + "order": "1", + "destinationID": "363", + "destinationType": "question" + } + ] + }, + { + "ID": "363", + "title": "I have been married to that US Citizen for at least the past three years.", + "order": "5", + "options": [ + { + "ID": "364", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "365", + "title": "True", + "order": "1", + "destinationID": "366", + "destinationType": "question" + } + ] + }, + { + "ID": "366", + "title": "My spouse has been a US Citizen for at least the past three years.", + "order": "6", + "options": [ + { + "ID": "367", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "368", + "title": "True", + "order": "1", + "destinationID": "369", + "destinationType": "question" + } + ] + }, + { + "ID": "369", + "title": "During the past three years, I have not been out of the country for 18 months or more.", + "order": "7", + "options": [ + { + "ID": "370", + "title": "False", + "order": "0", + "destinationID": "347", + "destinationType": "end" + }, + { + "ID": "371", + "title": "True", + "order": "1", + "destinationID": "346", + "destinationType": "end" + } + ] + }, + { + "ID": "372", + "title": "During the last five years, I have not been out of the US for 30 months or more.", + "order": "8", + "options": [ + { + "ID": "373", + "title": "False", + "order": "0", + "destinationID": "375", + "destinationType": "question" + }, + { + "ID": "374", + "title": "True", + "order": "1", + "destinationID": "346", + "destinationType": "end" + } + ] + }, + { + "ID": "375", + "title": "I am:", + "order": "9", + "options": [ + { + "ID": "376", + "title": "A person who has served on board a vessel operated by or registered in the United States", + "order": "0", + "destinationID": "346", + "destinationType": "end" + }, + { + "ID": "377", + "title": "An employee or an individual under contract to the U.S. Government.", + "order": "1", + "destinationID": "346", + "destinationType": "end" + }, + { + "ID": "378", + "title": "A person who performs ministerial or priestly functions for a religious denomination or an interdenominational organization with a valid presence in the United States.", + "order": "2", + "destinationID": "346", + "destinationType": "end" + }, + { + "ID": "379", + "title": "None of the above.", + "order": "3", + "destinationID": "347", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "346", + "title": "Eligible", + "content": "You can apply for US Citizenship if you want to." + }, + { + "ID": "347", + "title": "May Not Be Eligible", + "content": "You will get rejected from US Citizenship if you apply right now." + } + ], + "stats": { + "total_paths": 2, + "longest_path": 2, + "path_ends": { + "346": { + "title": "Eligible", + "count": 1, + "percentage": 50 + }, + "347": { + "title": "May Not Be Eligible", + "count": 1, + "percentage": 50 + } + } + } +} \ No newline at end of file diff --git a/data/citizen2.min.json b/data/citizen2.min.json new file mode 100644 index 0000000..46a6489 --- /dev/null +++ b/data/citizen2.min.json @@ -0,0 +1 @@ +{"ID":"16","slug":"citizen2","title":"Citizen2","owner":"172","starts":[{"ID":"348","title":"Start","destinationID":"343","destinationType":"question"}],"groups":[{"ID":"349","title":"Attachment A","content":"I have been a Permanent Resident for three to five years","order":"0","questions":["343"]}],"questions":[{"ID":"343","title":"I am at least 18 years old.","order":"0","options":[{"ID":"344","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"345","title":"True","order":"1","destinationID":"346","destinationType":"end"}]},{"ID":"350","title":"I am a Permanent Resident of the United States.","order":"1","options":[{"ID":"351","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"352","title":"True","order":"1","destinationID":"353","destinationType":"question"}]},{"ID":"353","title":"I have been issued a Permanent Resident Card (formerly called Alien Registration Card).","order":"2","options":[{"ID":"354","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"355","title":"True","order":"1","destinationID":"346","destinationType":"end"}]},{"ID":"356","title":"I have been a permanent resident for","order":"3","options":[{"ID":"357","title":"Less than three years","order":"0","destinationID":"347","destinationType":"end"},{"ID":"358","title":"Three or more years","order":"1","destinationID":"360","destinationType":"question"},{"ID":"359","title":"Five or more years","order":"2","destinationID":"346","destinationType":"end"}]},{"ID":"360","title":"I am married to and living with a US Citizen.","order":"4","options":[{"ID":"361","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"362","title":"True","order":"1","destinationID":"363","destinationType":"question"}]},{"ID":"363","title":"I have been married to that US Citizen for at least the past three years.","order":"5","options":[{"ID":"364","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"365","title":"True","order":"1","destinationID":"366","destinationType":"question"}]},{"ID":"366","title":"My spouse has been a US Citizen for at least the past three years.","order":"6","options":[{"ID":"367","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"368","title":"True","order":"1","destinationID":"369","destinationType":"question"}]},{"ID":"369","title":"During the past three years, I have not been out of the country for 18 months or more.","order":"7","options":[{"ID":"370","title":"False","order":"0","destinationID":"347","destinationType":"end"},{"ID":"371","title":"True","order":"1","destinationID":"346","destinationType":"end"}]},{"ID":"372","title":"During the last five years, I have not been out of the US for 30 months or more.","order":"8","options":[{"ID":"373","title":"False","order":"0","destinationID":"375","destinationType":"question"},{"ID":"374","title":"True","order":"1","destinationID":"346","destinationType":"end"}]},{"ID":"375","title":"I am:","order":"9","options":[{"ID":"376","title":"A person who has served on board a vessel operated by or registered in the United States","order":"0","destinationID":"346","destinationType":"end"},{"ID":"377","title":"An employee or an individual under contract to the U.S. Government.","order":"1","destinationID":"346","destinationType":"end"},{"ID":"378","title":"A person who performs ministerial or priestly functions for a religious denomination or an interdenominational organization with a valid presence in the United States.","order":"2","destinationID":"346","destinationType":"end"},{"ID":"379","title":"None of the above.","order":"3","destinationID":"347","destinationType":"end"}]}],"ends":[{"ID":"346","title":"Eligible","content":"You can apply for US Citizenship if you want to."},{"ID":"347","title":"May Not Be Eligible","content":"You will get rejected from US Citizenship if you apply right now."}],"stats":{"total_paths":2,"longest_path":2,"path_ends":{"346":{"title":"Eligible","count":1,"percentage":50},"347":{"title":"May Not Be Eligible","count":1,"percentage":50}}}} \ No newline at end of file diff --git a/data/citizen3.json b/data/citizen3.json new file mode 100644 index 0000000..19e7eed --- /dev/null +++ b/data/citizen3.json @@ -0,0 +1,675 @@ +{ + "ID": "17", + "slug": "citizen3", + "title": "Citizen3", + "owner": "172", + "starts": [ + { + "ID": "387", + "title": "Start", + "destinationID": "381", + "destinationType": "question" + } + ], + "groups": [], + "questions": [ + { + "ID": "381", + "title": "I am at least 18 years old.", + "order": "0", + "options": [ + { + "ID": "382", + "title": "False", + "order": "0", + "destinationID": "384", + "destinationType": "end" + }, + { + "ID": "383", + "title": "True", + "order": "1", + "destinationID": "388", + "destinationType": "question" + } + ] + }, + { + "ID": "388", + "title": "I am a Permanent Resident of the United States.", + "order": "1", + "options": [ + { + "ID": "389", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "390", + "title": "True", + "order": "1", + "destinationID": "391", + "destinationType": "question" + } + ] + }, + { + "ID": "391", + "title": "I have been issued a Permanent Resident Card (formerly called Alien Registration Card).", + "order": "2", + "options": [ + { + "ID": "392", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "393", + "title": "True", + "order": "1", + "destinationID": "394", + "destinationType": "question" + } + ] + }, + { + "ID": "394", + "title": "I have been a permanent resident for", + "order": "3", + "options": [ + { + "ID": "395", + "title": "Less than three years", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "396", + "title": "Three or more years", + "order": "1", + "destinationID": "398", + "destinationType": "question" + }, + { + "ID": "397", + "title": "Five or more years", + "order": "2", + "destinationID": "410", + "destinationType": "question" + } + ] + }, + { + "ID": "398", + "title": "I am married to and living with a US Citizen.", + "order": "4", + "options": [ + { + "ID": "399", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "400", + "title": "True", + "order": "1", + "destinationID": "401", + "destinationType": "question" + } + ] + }, + { + "ID": "401", + "title": "I have been married to that US Citizen for at least the past three years.", + "order": "5", + "options": [ + { + "ID": "402", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "403", + "title": "True", + "order": "1", + "destinationID": "404", + "destinationType": "question" + } + ] + }, + { + "ID": "404", + "title": "My spouse has been a US Citizen for at least the past three years.", + "order": "6", + "options": [ + { + "ID": "405", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "406", + "title": "True", + "order": "1", + "destinationID": "407", + "destinationType": "question" + } + ] + }, + { + "ID": "407", + "title": "During the past three years, I have not been out of the country for 18 months or more.", + "order": "7", + "options": [ + { + "ID": "408", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "409", + "title": "True", + "order": "1", + "destinationID": "410", + "destinationType": "question" + } + ] + }, + { + "ID": "410", + "title": "During the last five years, I have not been out of the US for 30 months or more.", + "order": "8", + "options": [ + { + "ID": "411", + "title": "False", + "order": "0", + "destinationID": "413", + "destinationType": "question" + }, + { + "ID": "412", + "title": "True", + "order": "1", + "destinationID": "418", + "destinationType": "question" + } + ] + }, + { + "ID": "413", + "title": "I am:", + "order": "9", + "options": [ + { + "ID": "414", + "title": "A person who has served on board a vessel operated by or registered in the United States", + "order": "0", + "destinationID": "418", + "destinationType": "question" + }, + { + "ID": "415", + "title": "An employee or an individual under contract to the U.S. Government.", + "order": "1", + "destinationID": "418", + "destinationType": "question" + }, + { + "ID": "416", + "title": "A person who performs ministerial or priestly functions for a religious denomination or an interdenominational organization with a valid presence in the United States.", + "order": "2", + "destinationID": "418", + "destinationType": "question" + }, + { + "ID": "417", + "title": "None of the above.", + "order": "3", + "destinationID": "385", + "destinationType": "end" + } + ] + }, + { + "ID": "418", + "title": "During the last three to five years, I have not taken a trip out of the United States that lasted one year or more.", + "order": "10", + "options": [ + { + "ID": "419", + "title": "False", + "order": "0", + "destinationID": "421", + "destinationType": "question" + }, + { + "ID": "420", + "title": "True", + "order": "1", + "destinationID": "424", + "destinationType": "question" + } + ] + }, + { + "ID": "421", + "title": "Since becoming a Permanent Resident, I have not taken a trip out of the United States that lasted for one year or more without an approved \"Application to Preserve Residence for Naturalization Purposes\" (Form N-470).", + "order": "11", + "options": [ + { + "ID": "422", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "423", + "title": "True", + "order": "1", + "destinationID": "424", + "destinationType": "question" + } + ] + }, + { + "ID": "424", + "title": "I have resided in the district or state in which I am applying for citizenship for the last three months.", + "order": "12", + "options": [ + { + "ID": "425", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "426", + "title": "True", + "order": "1", + "destinationID": "427", + "destinationType": "question" + } + ] + }, + { + "ID": "427", + "title": "I can read, write and speak basic English.", + "order": "13", + "options": [ + { + "ID": "429", + "title": "False", + "order": "0", + "destinationID": "428", + "destinationType": "question" + }, + { + "ID": "430", + "title": "True", + "order": "1", + "destinationID": "439", + "destinationType": "question" + } + ] + }, + { + "ID": "428", + "title": "I am over 50 years old and have lived in the United States for at least 20 years since I became a Permanent Resident.", + "order": "14", + "options": [ + { + "ID": "431", + "title": "False", + "order": "0", + "destinationID": "433", + "destinationType": "question" + }, + { + "ID": "432", + "title": "True", + "order": "1", + "destinationID": "439", + "destinationType": "question" + } + ] + }, + { + "ID": "433", + "title": "I am over 55 years old and have lived in the United States for at least 15 years since I became a Permanent Resident.", + "order": "15", + "options": [ + { + "ID": "434", + "title": "False", + "order": "0", + "destinationID": "442", + "destinationType": "question" + }, + { + "ID": "435", + "title": "True", + "order": "1", + "destinationID": "439", + "destinationType": "question" + } + ] + }, + { + "ID": "436", + "title": "I have a disability that prevents me from fulfilling this requirement and will be filing a \"Medical Certification for Disability Exceptions\" (Form N-648) completed and signed by a doctor with my application.", + "order": "16", + "options": [ + { + "ID": "437", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "438", + "title": "True", + "order": "1", + "destinationID": "439", + "destinationType": "question" + } + ] + }, + { + "ID": "439", + "title": "I know the fundamentals of U.S. history and the form and principles of the U.S. government.", + "order": "17", + "options": [ + { + "ID": "440", + "title": "False", + "order": "0", + "destinationID": "442", + "destinationType": "question" + }, + { + "ID": "441", + "title": "True", + "order": "1", + "destinationID": "445", + "destinationType": "question" + } + ] + }, + { + "ID": "442", + "title": "I have a disability that prevents me from fulfilling the civics requirement, and I will be filing \"Medical Certification for Disability Exceptions\" (Form N-648) completed and signed by a doctor with my application.", + "order": "18", + "options": [ + { + "ID": "443", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "444", + "title": "True", + "order": "1", + "destinationID": "445", + "destinationType": "question" + } + ] + }, + { + "ID": "445", + "title": "I am a person of good moral character.", + "order": "19", + "options": [ + { + "ID": "446", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "447", + "title": "True", + "order": "1", + "destinationID": "448", + "destinationType": "question" + } + ] + }, + { + "ID": "448", + "title": "I am female.", + "order": "20", + "options": [ + { + "ID": "449", + "title": "False", + "order": "0", + "destinationID": "451", + "destinationType": "question" + }, + { + "ID": "450", + "title": "True", + "order": "1", + "destinationID": "460", + "destinationType": "question" + } + ] + }, + { + "ID": "451", + "title": "I am a male registered with the Selective Service.", + "order": "21", + "options": [ + { + "ID": "452", + "title": "False", + "order": "0", + "destinationID": "454", + "destinationType": "question" + }, + { + "ID": "453", + "title": "True", + "order": "1", + "destinationID": "460", + "destinationType": "question" + } + ] + }, + { + "ID": "454", + "title": "I am a male who did not enter the United States under any status until after my 26th birthday.", + "order": "22", + "options": [ + { + "ID": "455", + "title": "False", + "order": "0", + "destinationID": "457", + "destinationType": "question" + }, + { + "ID": "456", + "title": "True", + "order": "1", + "destinationID": "460", + "destinationType": "question" + } + ] + }, + { + "ID": "457", + "title": "I am a male who was in the United States between the ages of 18 and 26 but who did not register with the Selective Service, and I will send a \"Status Information Letter\" from the Selective Service explaining why I did not register with my application.", + "order": "23", + "options": [ + { + "ID": "458", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "459", + "title": "True", + "order": "1", + "destinationID": "460", + "destinationType": "question" + } + ] + }, + { + "ID": "460", + "title": "I have never deserted from the U.S. Armed Forces.", + "order": "24", + "options": [ + { + "ID": "461", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "462", + "title": "True", + "order": "1", + "destinationID": "463", + "destinationType": "question" + } + ] + }, + { + "ID": "463", + "title": "I have never received an exemption or discharge from the U.S. Armed Forces on the grounds that I am an alien.", + "order": "25", + "options": [ + { + "ID": "464", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "465", + "title": "True", + "order": "1", + "destinationID": "466", + "destinationType": "question" + } + ] + }, + { + "ID": "466", + "title": "I am willing to perform either military or civilian service for the United States if required by law. (NOTE: If your religious teachings OR beliefs prohibit you from performing military service, you must be willing to perform non-military service.)", + "order": "26", + "options": [ + { + "ID": "467", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "468", + "title": "True", + "order": "1", + "destinationID": "469", + "destinationType": "question" + } + ] + }, + { + "ID": "469", + "title": "I will support the Constitution of the United States.", + "order": "27", + "options": [ + { + "ID": "470", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "471", + "title": "True", + "order": "1", + "destinationID": "472", + "destinationType": "question" + } + ] + }, + { + "ID": "472", + "title": "I understand and am willing to take an oath of allegiance to the United States.", + "order": "28", + "options": [ + { + "ID": "473", + "title": "False", + "order": "0", + "destinationID": "385", + "destinationType": "end" + }, + { + "ID": "474", + "title": "True", + "order": "1", + "destinationID": "384", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "384", + "title": "Eligible", + "content": "You can apply for US Citizenship if you want to." + }, + { + "ID": "385", + "title": "May Not Be Eligible", + "content": "You will get rejected from US Citizenship if you apply right now." + } + ], + "stats": { + "total_paths": 3010, + "longest_path": 29, + "path_ends": { + "384": { + "title": "Eligible", + "count": 449, + "percentage": 14.92 + }, + "385": { + "title": "May Not Be Eligible", + "count": 2561, + "percentage": 85.08 + } + } + } +} \ No newline at end of file diff --git a/data/citizen3.min.json b/data/citizen3.min.json new file mode 100644 index 0000000..11a3958 --- /dev/null +++ b/data/citizen3.min.json @@ -0,0 +1 @@ +{"ID":"17","slug":"citizen3","title":"Citizen3","owner":"172","starts":[{"ID":"387","title":"Start","destinationID":"381","destinationType":"question"}],"groups":[],"questions":[{"ID":"381","title":"I am at least 18 years old.","order":"0","options":[{"ID":"382","title":"False","order":"0","destinationID":"384","destinationType":"end"},{"ID":"383","title":"True","order":"1","destinationID":"388","destinationType":"question"}]},{"ID":"388","title":"I am a Permanent Resident of the United States.","order":"1","options":[{"ID":"389","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"390","title":"True","order":"1","destinationID":"391","destinationType":"question"}]},{"ID":"391","title":"I have been issued a Permanent Resident Card (formerly called Alien Registration Card).","order":"2","options":[{"ID":"392","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"393","title":"True","order":"1","destinationID":"394","destinationType":"question"}]},{"ID":"394","title":"I have been a permanent resident for","order":"3","options":[{"ID":"395","title":"Less than three years","order":"0","destinationID":"385","destinationType":"end"},{"ID":"396","title":"Three or more years","order":"1","destinationID":"398","destinationType":"question"},{"ID":"397","title":"Five or more years","order":"2","destinationID":"410","destinationType":"question"}]},{"ID":"398","title":"I am married to and living with a US Citizen.","order":"4","options":[{"ID":"399","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"400","title":"True","order":"1","destinationID":"401","destinationType":"question"}]},{"ID":"401","title":"I have been married to that US Citizen for at least the past three years.","order":"5","options":[{"ID":"402","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"403","title":"True","order":"1","destinationID":"404","destinationType":"question"}]},{"ID":"404","title":"My spouse has been a US Citizen for at least the past three years.","order":"6","options":[{"ID":"405","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"406","title":"True","order":"1","destinationID":"407","destinationType":"question"}]},{"ID":"407","title":"During the past three years, I have not been out of the country for 18 months or more.","order":"7","options":[{"ID":"408","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"409","title":"True","order":"1","destinationID":"410","destinationType":"question"}]},{"ID":"410","title":"During the last five years, I have not been out of the US for 30 months or more.","order":"8","options":[{"ID":"411","title":"False","order":"0","destinationID":"413","destinationType":"question"},{"ID":"412","title":"True","order":"1","destinationID":"418","destinationType":"question"}]},{"ID":"413","title":"I am:","order":"9","options":[{"ID":"414","title":"A person who has served on board a vessel operated by or registered in the United States","order":"0","destinationID":"418","destinationType":"question"},{"ID":"415","title":"An employee or an individual under contract to the U.S. Government.","order":"1","destinationID":"418","destinationType":"question"},{"ID":"416","title":"A person who performs ministerial or priestly functions for a religious denomination or an interdenominational organization with a valid presence in the United States.","order":"2","destinationID":"418","destinationType":"question"},{"ID":"417","title":"None of the above.","order":"3","destinationID":"385","destinationType":"end"}]},{"ID":"418","title":"During the last three to five years, I have not taken a trip out of the United States that lasted one year or more.","order":"10","options":[{"ID":"419","title":"False","order":"0","destinationID":"421","destinationType":"question"},{"ID":"420","title":"True","order":"1","destinationID":"424","destinationType":"question"}]},{"ID":"421","title":"Since becoming a Permanent Resident, I have not taken a trip out of the United States that lasted for one year or more without an approved \"Application to Preserve Residence for Naturalization Purposes\" (Form N-470).","order":"11","options":[{"ID":"422","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"423","title":"True","order":"1","destinationID":"424","destinationType":"question"}]},{"ID":"424","title":"I have resided in the district or state in which I am applying for citizenship for the last three months.","order":"12","options":[{"ID":"425","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"426","title":"True","order":"1","destinationID":"427","destinationType":"question"}]},{"ID":"427","title":"I can read, write and speak basic English.","order":"13","options":[{"ID":"429","title":"False","order":"0","destinationID":"428","destinationType":"question"},{"ID":"430","title":"True","order":"1","destinationID":"439","destinationType":"question"}]},{"ID":"428","title":"I am over 50 years old and have lived in the United States for at least 20 years since I became a Permanent Resident.","order":"14","options":[{"ID":"431","title":"False","order":"0","destinationID":"433","destinationType":"question"},{"ID":"432","title":"True","order":"1","destinationID":"439","destinationType":"question"}]},{"ID":"433","title":"I am over 55 years old and have lived in the United States for at least 15 years since I became a Permanent Resident.","order":"15","options":[{"ID":"434","title":"False","order":"0","destinationID":"442","destinationType":"question"},{"ID":"435","title":"True","order":"1","destinationID":"439","destinationType":"question"}]},{"ID":"436","title":"I have a disability that prevents me from fulfilling this requirement and will be filing a \"Medical Certification for Disability Exceptions\" (Form N-648) completed and signed by a doctor with my application.","order":"16","options":[{"ID":"437","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"438","title":"True","order":"1","destinationID":"439","destinationType":"question"}]},{"ID":"439","title":"I know the fundamentals of U.S. history and the form and principles of the U.S. government.","order":"17","options":[{"ID":"440","title":"False","order":"0","destinationID":"442","destinationType":"question"},{"ID":"441","title":"True","order":"1","destinationID":"445","destinationType":"question"}]},{"ID":"442","title":"I have a disability that prevents me from fulfilling the civics requirement, and I will be filing \"Medical Certification for Disability Exceptions\" (Form N-648) completed and signed by a doctor with my application.","order":"18","options":[{"ID":"443","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"444","title":"True","order":"1","destinationID":"445","destinationType":"question"}]},{"ID":"445","title":"I am a person of good moral character.","order":"19","options":[{"ID":"446","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"447","title":"True","order":"1","destinationID":"448","destinationType":"question"}]},{"ID":"448","title":"I am female.","order":"20","options":[{"ID":"449","title":"False","order":"0","destinationID":"451","destinationType":"question"},{"ID":"450","title":"True","order":"1","destinationID":"460","destinationType":"question"}]},{"ID":"451","title":"I am a male registered with the Selective Service.","order":"21","options":[{"ID":"452","title":"False","order":"0","destinationID":"454","destinationType":"question"},{"ID":"453","title":"True","order":"1","destinationID":"460","destinationType":"question"}]},{"ID":"454","title":"I am a male who did not enter the United States under any status until after my 26th birthday.","order":"22","options":[{"ID":"455","title":"False","order":"0","destinationID":"457","destinationType":"question"},{"ID":"456","title":"True","order":"1","destinationID":"460","destinationType":"question"}]},{"ID":"457","title":"I am a male who was in the United States between the ages of 18 and 26 but who did not register with the Selective Service, and I will send a \"Status Information Letter\" from the Selective Service explaining why I did not register with my application.","order":"23","options":[{"ID":"458","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"459","title":"True","order":"1","destinationID":"460","destinationType":"question"}]},{"ID":"460","title":"I have never deserted from the U.S. Armed Forces.","order":"24","options":[{"ID":"461","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"462","title":"True","order":"1","destinationID":"463","destinationType":"question"}]},{"ID":"463","title":"I have never received an exemption or discharge from the U.S. Armed Forces on the grounds that I am an alien.","order":"25","options":[{"ID":"464","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"465","title":"True","order":"1","destinationID":"466","destinationType":"question"}]},{"ID":"466","title":"I am willing to perform either military or civilian service for the United States if required by law. (NOTE: If your religious teachings OR beliefs prohibit you from performing military service, you must be willing to perform non-military service.)","order":"26","options":[{"ID":"467","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"468","title":"True","order":"1","destinationID":"469","destinationType":"question"}]},{"ID":"469","title":"I will support the Constitution of the United States.","order":"27","options":[{"ID":"470","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"471","title":"True","order":"1","destinationID":"472","destinationType":"question"}]},{"ID":"472","title":"I understand and am willing to take an oath of allegiance to the United States.","order":"28","options":[{"ID":"473","title":"False","order":"0","destinationID":"385","destinationType":"end"},{"ID":"474","title":"True","order":"1","destinationID":"384","destinationType":"end"}]}],"ends":[{"ID":"384","title":"Eligible","content":"You can apply for US Citizenship if you want to."},{"ID":"385","title":"May Not Be Eligible","content":"You will get rejected from US Citizenship if you apply right now."}],"stats":{"total_paths":3010,"longest_path":29,"path_ends":{"384":{"title":"Eligible","count":449,"percentage":14.92},"385":{"title":"May Not Be Eligible","count":2561,"percentage":85.08}}}} \ No newline at end of file diff --git a/data/how-to-register-to-vote-in-texas.json b/data/how-to-register-to-vote-in-texas.json new file mode 100644 index 0000000..d694e3d --- /dev/null +++ b/data/how-to-register-to-vote-in-texas.json @@ -0,0 +1,472 @@ +{ + "ID": "7", + "slug": "how-to-register-to-vote-in-texas", + "title": "How to Register to Vote in Texas", + "owner": "172", + "starts": [ + { + "ID": "227", + "title": "start", + "destinationID": "235", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "475", + "title": "Group", + "content": "", + "order": "0", + "questions": [ + "298", + "301", + "304", + "311", + "308", + "314", + "317", + "323" + ] + } + ], + "questions": [ + { + "ID": "235", + "title": "Are you registered to vote at your current address?", + "order": "0", + "options": [ + { + "ID": "256", + "title": "Yes", + "order": "0", + "destinationID": "233", + "destinationType": "end" + }, + { + "ID": "257", + "title": "No", + "order": "1", + "destinationID": "266", + "destinationType": "question" + }, + { + "ID": "258", + "title": "I don't know.", + "order": "2", + "destinationID": "263", + "destinationType": "question" + } + ] + }, + { + "ID": "263", + "title": "You can check if you are registered to vote in Texas at https:\/\/teamrv-mvp.sos.texas.gov\/MVP\/mvp.do.\n\nDo you want to continue to find out how to register to vote in Texas?", + "order": "1", + "options": [ + { + "ID": "264", + "title": "Yes", + "order": "0", + "destinationID": "283", + "destinationType": "question" + }, + { + "ID": "265", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "283", + "title": "Are you registered to vote at your current address?", + "order": "2", + "options": [ + { + "ID": "284", + "title": "Yes", + "order": "0", + "destinationID": "233", + "destinationType": "end" + }, + { + "ID": "285", + "title": "No", + "order": "1", + "destinationID": "266", + "destinationType": "question" + } + ] + }, + { + "ID": "266", + "title": "Are you a U.S. citizen?", + "order": "3", + "options": [ + { + "ID": "267", + "title": "Yes", + "order": "0", + "destinationID": "274", + "destinationType": "question" + }, + { + "ID": "268", + "title": "No", + "order": "1", + "destinationID": "262", + "destinationType": "end" + } + ] + }, + { + "ID": "274", + "title": "Are you a Texas resident?", + "order": "4", + "options": [ + { + "ID": "275", + "title": "Yes", + "order": "0", + "destinationID": "291", + "destinationType": "question" + }, + { + "ID": "276", + "title": "No", + "order": "1", + "destinationID": "287", + "destinationType": "end" + }, + { + "ID": "277", + "title": "I don't know.", + "order": "2", + "destinationID": "288", + "destinationType": "question" + } + ] + }, + { + "ID": "288", + "title": "A Texas resident is anyone who lives in the state of Texas. College students who are from Texas are considered Texas residents even if they attend college outside the state. \nDo you want to continue to find out how to register to vote in Texas?", + "order": "5", + "options": [ + { + "ID": "289", + "title": "Yes", + "order": "0", + "destinationID": "291", + "destinationType": "question" + }, + { + "ID": "290", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "291", + "title": "Are you at least 18 years old or older?", + "order": "6", + "options": [ + { + "ID": "292", + "title": "Yes", + "order": "0", + "destinationID": "298", + "destinationType": "question" + }, + { + "ID": "293", + "title": "No", + "order": "1", + "destinationID": "294", + "destinationType": "question" + } + ] + }, + { + "ID": "294", + "title": "Are you currently at least 17 years and 10 months old and will you be age 18 by the Election Day you want to vote in? To check when the next upcoming election is, visit https:\/\/www.votetexas.gov\/.", + "order": "7", + "options": [ + { + "ID": "295", + "title": "Yes", + "order": "0", + "destinationID": "298", + "destinationType": "question" + }, + { + "ID": "296", + "title": "No", + "order": "1", + "destinationID": "297", + "destinationType": "end" + } + ] + }, + { + "ID": "298", + "title": "Have you ever been convicted of a felony?", + "order": "8", + "options": [ + { + "ID": "299", + "title": "Yes", + "order": "0", + "destinationID": "301", + "destinationType": "question" + }, + { + "ID": "300", + "title": "No", + "order": "1", + "destinationID": "311", + "destinationType": "question" + } + ] + }, + { + "ID": "301", + "title": "Have you completed your sentence, probation, and parole? In other words, \u201cAre you off paper?\u201d", + "order": "9", + "options": [ + { + "ID": "302", + "title": "Yes", + "order": "0", + "destinationID": "304", + "destinationType": "question" + }, + { + "ID": "303", + "title": "No", + "order": "1", + "destinationID": "327", + "destinationType": "end" + } + ] + }, + { + "ID": "304", + "title": "You are eligible to register to vote! \n\nHave you ever been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated without the right to vote?", + "order": "10", + "options": [ + { + "ID": "305", + "title": "Yes", + "order": "0", + "destinationID": "307", + "destinationType": "end" + }, + { + "ID": "306", + "title": "No", + "order": "1", + "destinationID": "308", + "destinationType": "question" + } + ] + }, + { + "ID": "311", + "title": "Have you ever been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated without the right to vote?", + "order": "11", + "options": [ + { + "ID": "312", + "title": "Yes", + "order": "0", + "destinationID": "307", + "destinationType": "end" + }, + { + "ID": "313", + "title": "No", + "order": "1", + "destinationID": "308", + "destinationType": "question" + } + ] + }, + { + "ID": "308", + "title": "Are you a college student whose home address is in Texas?", + "order": "12", + "options": [ + { + "ID": "309", + "title": "Yes", + "order": "0", + "destinationID": "314", + "destinationType": "question" + }, + { + "ID": "310", + "title": "No", + "order": "1", + "destinationID": "322", + "destinationType": "end" + } + ] + }, + { + "ID": "314", + "title": "Do you attend college in Texas?", + "order": "13", + "options": [ + { + "ID": "315", + "title": "Yes", + "order": "0", + "destinationID": "317", + "destinationType": "question" + }, + { + "ID": "316", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "317", + "title": "You can choose to register either at your home address or at your university address. Where you choose to register will determine where you can vote and what\u2019s on your ballot.\n\nDo you want to continue to find out how to register to vote in Texas?\n", + "order": "14", + "options": [ + { + "ID": "319", + "title": "Yes", + "order": "0", + "destinationID": "322", + "destinationType": "end" + }, + { + "ID": "320", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "323", + "title": "Do you want to continue to find out how to register to vote in Texas?", + "order": "15", + "options": [ + { + "ID": "324", + "title": "Yes", + "order": "0", + "destinationID": "322", + "destinationType": "end" + }, + { + "ID": "325", + "title": "No", + "order": "1", + "destinationID": "326", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "233", + "title": "Thats great.", + "content": "Be sure to vote in the next election." + }, + { + "ID": "262", + "title": "You must be a U.S. citizen to vote in the state of Texas.", + "content": "" + }, + { + "ID": "287", + "title": "You must be a Texas resident to vote in the state of Texas.", + "content": "To register in your state of residency, visit turbovote.org for more information." + }, + { + "ID": "297", + "title": "Unfortunately you must be at least 17 years and 10 months old, as well as 18 years old by Election Day, to register to vote in the state of Texas.", + "content": "" + }, + { + "ID": "307", + "title": "You must not have been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated to vote in the state of Texas.", + "content": "" + }, + { + "ID": "322", + "title": "You should be able to register to vote in Texas. Visit https:\/\/www.votetexas.gov\/register-to-vote\/.", + "content": "Be sure to register by the deadline listed on the website, approximately 30 days before Election Day. There is no online voter registration in Texas, so print out the form this website provides and mail it to your local county Voter Registrar. You can find out the address of your local county Voter Registrar here: https:\/\/www.sos.state.tx.us\/elections\/voter\/votregduties.shtml" + }, + { + "ID": "326", + "title": "If you choose to register at your university address, please follow the guidelines for registration and voting found at campusvoteproject.org.", + "content": "" + }, + { + "ID": "327", + "title": "You must have completed your sentence, probation, and parole to be eligible to vote in the state of Texas.", + "content": "" + } + ], + "stats": { + "total_paths": 101, + "longest_path": 15, + "path_ends": { + "233": { + "title": "Thats great.", + "count": 37, + "percentage": 36.63 + }, + "262": { + "title": "You must be a U.S. citizen to vote in the state of Texas.", + "count": 2, + "percentage": 1.98 + }, + "287": { + "title": "You must be a Texas resident to vote in the state of Texas.", + "count": 2, + "percentage": 1.98 + }, + "297": { + "title": "Unfortunately you must be at least 17 years and 10 months old, as well as 18 years old by Election Day, to register to vote in the state of Texas.", + "count": 4, + "percentage": 3.96 + }, + "307": { + "title": "You must not have been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated to vote in the state of Texas.", + "count": 16, + "percentage": 15.84 + }, + "322": { + "title": "You should be able to register to vote in Texas. Visit https:\/\/www.votetexas.gov\/register-to-vote\/.", + "count": 32, + "percentage": 31.68 + }, + "326": { + "title": "If you choose to register at your university address, please follow the guidelines for registration and voting found at campusvoteproject.org.", + "count": 0, + "percentage": 0 + }, + "327": { + "title": "You must have completed your sentence, probation, and parole to be eligible to vote in the state of Texas.", + "count": 8, + "percentage": 7.92 + } + } + } +} \ No newline at end of file diff --git a/data/how-to-register-to-vote-in-texas.min.json b/data/how-to-register-to-vote-in-texas.min.json new file mode 100644 index 0000000..f7e9e04 --- /dev/null +++ b/data/how-to-register-to-vote-in-texas.min.json @@ -0,0 +1 @@ +{"ID":"7","slug":"how-to-register-to-vote-in-texas","title":"How to Register to Vote in Texas","owner":"172","starts":[{"ID":"227","title":"start","destinationID":"235","destinationType":"question"}],"groups":[{"ID":"475","title":"Group","content":"","order":"0","questions":["298","301","304","311","308","314","317","323"]}],"questions":[{"ID":"235","title":"Are you registered to vote at your current address?","order":"0","options":[{"ID":"256","title":"Yes","order":"0","destinationID":"233","destinationType":"end"},{"ID":"257","title":"No","order":"1","destinationID":"266","destinationType":"question"},{"ID":"258","title":"I don't know.","order":"2","destinationID":"263","destinationType":"question"}]},{"ID":"263","title":"You can check if you are registered to vote in Texas at https:\/\/teamrv-mvp.sos.texas.gov\/MVP\/mvp.do.\n\nDo you want to continue to find out how to register to vote in Texas?","order":"1","options":[{"ID":"264","title":"Yes","order":"0","destinationID":"283","destinationType":"question"},{"ID":"265","title":"No","order":"1","destinationID":"233","destinationType":"end"}]},{"ID":"283","title":"Are you registered to vote at your current address?","order":"2","options":[{"ID":"284","title":"Yes","order":"0","destinationID":"233","destinationType":"end"},{"ID":"285","title":"No","order":"1","destinationID":"266","destinationType":"question"}]},{"ID":"266","title":"Are you a U.S. citizen?","order":"3","options":[{"ID":"267","title":"Yes","order":"0","destinationID":"274","destinationType":"question"},{"ID":"268","title":"No","order":"1","destinationID":"262","destinationType":"end"}]},{"ID":"274","title":"Are you a Texas resident?","order":"4","options":[{"ID":"275","title":"Yes","order":"0","destinationID":"291","destinationType":"question"},{"ID":"276","title":"No","order":"1","destinationID":"287","destinationType":"end"},{"ID":"277","title":"I don't know.","order":"2","destinationID":"288","destinationType":"question"}]},{"ID":"288","title":"A Texas resident is anyone who lives in the state of Texas. College students who are from Texas are considered Texas residents even if they attend college outside the state. \nDo you want to continue to find out how to register to vote in Texas?","order":"5","options":[{"ID":"289","title":"Yes","order":"0","destinationID":"291","destinationType":"question"},{"ID":"290","title":"No","order":"1","destinationID":"233","destinationType":"end"}]},{"ID":"291","title":"Are you at least 18 years old or older?","order":"6","options":[{"ID":"292","title":"Yes","order":"0","destinationID":"298","destinationType":"question"},{"ID":"293","title":"No","order":"1","destinationID":"294","destinationType":"question"}]},{"ID":"294","title":"Are you currently at least 17 years and 10 months old and will you be age 18 by the Election Day you want to vote in? To check when the next upcoming election is, visit https:\/\/www.votetexas.gov\/.","order":"7","options":[{"ID":"295","title":"Yes","order":"0","destinationID":"298","destinationType":"question"},{"ID":"296","title":"No","order":"1","destinationID":"297","destinationType":"end"}]},{"ID":"298","title":"Have you ever been convicted of a felony?","order":"8","options":[{"ID":"299","title":"Yes","order":"0","destinationID":"301","destinationType":"question"},{"ID":"300","title":"No","order":"1","destinationID":"311","destinationType":"question"}]},{"ID":"301","title":"Have you completed your sentence, probation, and parole? In other words, \u201cAre you off paper?\u201d","order":"9","options":[{"ID":"302","title":"Yes","order":"0","destinationID":"304","destinationType":"question"},{"ID":"303","title":"No","order":"1","destinationID":"327","destinationType":"end"}]},{"ID":"304","title":"You are eligible to register to vote! \n\nHave you ever been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated without the right to vote?","order":"10","options":[{"ID":"305","title":"Yes","order":"0","destinationID":"307","destinationType":"end"},{"ID":"306","title":"No","order":"1","destinationID":"308","destinationType":"question"}]},{"ID":"311","title":"Have you ever been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated without the right to vote?","order":"11","options":[{"ID":"312","title":"Yes","order":"0","destinationID":"307","destinationType":"end"},{"ID":"313","title":"No","order":"1","destinationID":"308","destinationType":"question"}]},{"ID":"308","title":"Are you a college student whose home address is in Texas?","order":"12","options":[{"ID":"309","title":"Yes","order":"0","destinationID":"314","destinationType":"question"},{"ID":"310","title":"No","order":"1","destinationID":"322","destinationType":"end"}]},{"ID":"314","title":"Do you attend college in Texas?","order":"13","options":[{"ID":"315","title":"Yes","order":"0","destinationID":"317","destinationType":"question"},{"ID":"316","title":"No","order":"1","destinationID":"233","destinationType":"end"}]},{"ID":"317","title":"You can choose to register either at your home address or at your university address. Where you choose to register will determine where you can vote and what\u2019s on your ballot.\n\nDo you want to continue to find out how to register to vote in Texas?\n","order":"14","options":[{"ID":"319","title":"Yes","order":"0","destinationID":"322","destinationType":"end"},{"ID":"320","title":"No","order":"1","destinationID":"233","destinationType":"end"}]},{"ID":"323","title":"Do you want to continue to find out how to register to vote in Texas?","order":"15","options":[{"ID":"324","title":"Yes","order":"0","destinationID":"322","destinationType":"end"},{"ID":"325","title":"No","order":"1","destinationID":"326","destinationType":"end"}]}],"ends":[{"ID":"233","title":"Thats great.","content":"Be sure to vote in the next election."},{"ID":"262","title":"You must be a U.S. citizen to vote in the state of Texas.","content":""},{"ID":"287","title":"You must be a Texas resident to vote in the state of Texas.","content":"To register in your state of residency, visit turbovote.org for more information."},{"ID":"297","title":"Unfortunately you must be at least 17 years and 10 months old, as well as 18 years old by Election Day, to register to vote in the state of Texas.","content":""},{"ID":"307","title":"You must not have been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated to vote in the state of Texas.","content":""},{"ID":"322","title":"You should be able to register to vote in Texas. Visit https:\/\/www.votetexas.gov\/register-to-vote\/.","content":"Be sure to register by the deadline listed on the website, approximately 30 days before Election Day. There is no online voter registration in Texas, so print out the form this website provides and mail it to your local county Voter Registrar. You can find out the address of your local county Voter Registrar here: https:\/\/www.sos.state.tx.us\/elections\/voter\/votregduties.shtml"},{"ID":"326","title":"If you choose to register at your university address, please follow the guidelines for registration and voting found at campusvoteproject.org.","content":""},{"ID":"327","title":"You must have completed your sentence, probation, and parole to be eligible to vote in the state of Texas.","content":""}],"stats":{"total_paths":101,"longest_path":15,"path_ends":{"233":{"title":"Thats great.","count":37,"percentage":36.63},"262":{"title":"You must be a U.S. citizen to vote in the state of Texas.","count":2,"percentage":1.98},"287":{"title":"You must be a Texas resident to vote in the state of Texas.","count":2,"percentage":1.98},"297":{"title":"Unfortunately you must be at least 17 years and 10 months old, as well as 18 years old by Election Day, to register to vote in the state of Texas.","count":4,"percentage":3.96},"307":{"title":"You must not have been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated to vote in the state of Texas.","count":16,"percentage":15.84},"322":{"title":"You should be able to register to vote in Texas. Visit https:\/\/www.votetexas.gov\/register-to-vote\/.","count":32,"percentage":31.68},"326":{"title":"If you choose to register at your university address, please follow the guidelines for registration and voting found at campusvoteproject.org.","count":0,"percentage":0},"327":{"title":"You must have completed your sentence, probation, and parole to be eligible to vote in the state of Texas.","count":8,"percentage":7.92}}}} \ No newline at end of file diff --git a/data/test-five.json b/data/test-five.json new file mode 100644 index 0000000..75602f3 --- /dev/null +++ b/data/test-five.json @@ -0,0 +1,71 @@ +{ + "ID": "12", + "slug": "test-five", + "title": "test five", + "owner": "172", + "starts": [ + { + "ID": "248", + "title": "start", + "destinationID": "243", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "249", + "title": "group", + "content": "title", + "order": "0", + "questions": [] + } + ], + "questions": [ + { + "ID": "243", + "title": "Registered?", + "order": "0", + "options": [ + { + "ID": "244", + "title": "Yes", + "order": "0", + "destinationID": "247", + "destinationType": "end" + }, + { + "ID": "245", + "title": "No", + "order": "1", + "destinationID": "247", + "destinationType": "end" + }, + { + "ID": "246", + "title": "Dont know", + "order": "2", + "destinationID": "247", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "247", + "title": "End 01", + "content": "01 content" + } + ], + "stats": { + "total_paths": 3, + "longest_path": 2, + "path_ends": { + "247": { + "title": "End 01", + "count": 3, + "percentage": 100 + } + } + } +} \ No newline at end of file diff --git a/data/test-five.min.json b/data/test-five.min.json new file mode 100644 index 0000000..b681583 --- /dev/null +++ b/data/test-five.min.json @@ -0,0 +1 @@ +{"ID":"12","slug":"test-five","title":"test five","owner":"172","starts":[{"ID":"248","title":"start","destinationID":"243","destinationType":"question"}],"groups":[{"ID":"249","title":"group","content":"title","order":"0","questions":[]}],"questions":[{"ID":"243","title":"Registered?","order":"0","options":[{"ID":"244","title":"Yes","order":"0","destinationID":"247","destinationType":"end"},{"ID":"245","title":"No","order":"1","destinationID":"247","destinationType":"end"},{"ID":"246","title":"Dont know","order":"2","destinationID":"247","destinationType":"end"}]}],"ends":[{"ID":"247","title":"End 01","content":"01 content"}],"stats":{"total_paths":3,"longest_path":2,"path_ends":{"247":{"title":"End 01","count":3,"percentage":100}}}} \ No newline at end of file diff --git a/data/test-four.json b/data/test-four.json new file mode 100644 index 0000000..4acfcab --- /dev/null +++ b/data/test-four.json @@ -0,0 +1,94 @@ +{ + "ID": "11", + "slug": "test-four", + "title": "test four", + "owner": "172", + "starts": [ + { + "ID": "241", + "title": "start", + "destinationID": "236", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "242", + "title": "group title", + "content": "content", + "order": "0", + "questions": [ + "329" + ] + } + ], + "questions": [ + { + "ID": "236", + "title": "Are you registered?", + "order": "0", + "options": [ + { + "ID": "237", + "title": "Yes", + "order": "0", + "destinationID": "240", + "destinationType": "end" + }, + { + "ID": "238", + "title": "No", + "order": "1", + "destinationID": "240", + "destinationType": "end" + }, + { + "ID": "239", + "title": "I dont know.", + "order": "2", + "destinationID": "240", + "destinationType": "end" + } + ] + }, + { + "ID": "329", + "title": "Test Question", + "order": "1", + "options": [ + { + "ID": "330", + "title": "option 1", + "order": "0", + "destinationID": "236", + "destinationType": "question" + }, + { + "ID": "331", + "title": "optino 2", + "order": "1", + "destinationID": "240", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "240", + "title": "End title", + "content": "end content" + } + ], + "stats": { + "total_paths": 3, + "longest_path": 2, + "path_ends": { + "240": { + "title": "End title", + "count": 3, + "percentage": 100 + } + } + } +} \ No newline at end of file diff --git a/data/test-four.min.json b/data/test-four.min.json new file mode 100644 index 0000000..fd1678b --- /dev/null +++ b/data/test-four.min.json @@ -0,0 +1 @@ +{"ID":"11","slug":"test-four","title":"test four","owner":"172","starts":[{"ID":"241","title":"start","destinationID":"236","destinationType":"question"}],"groups":[{"ID":"242","title":"group title","content":"content","order":"0","questions":["329"]}],"questions":[{"ID":"236","title":"Are you registered?","order":"0","options":[{"ID":"237","title":"Yes","order":"0","destinationID":"240","destinationType":"end"},{"ID":"238","title":"No","order":"1","destinationID":"240","destinationType":"end"},{"ID":"239","title":"I dont know.","order":"2","destinationID":"240","destinationType":"end"}]},{"ID":"329","title":"Test Question","order":"1","options":[{"ID":"330","title":"option 1","order":"0","destinationID":"236","destinationType":"question"},{"ID":"331","title":"optino 2","order":"1","destinationID":"240","destinationType":"end"}]}],"ends":[{"ID":"240","title":"End title","content":"end content"}],"stats":{"total_paths":3,"longest_path":2,"path_ends":{"240":{"title":"End title","count":3,"percentage":100}}}} \ No newline at end of file diff --git a/data/test-six.json b/data/test-six.json new file mode 100644 index 0000000..0109116 --- /dev/null +++ b/data/test-six.json @@ -0,0 +1,56 @@ +{ + "ID": "13", + "slug": "test-six", + "title": "test six", + "owner": "172", + "starts": [ + { + "ID": "250", + "title": "start", + "destinationID": "251", + "destinationType": "question" + } + ], + "groups": [], + "questions": [ + { + "ID": "251", + "title": "Registered?", + "order": "0", + "options": [ + { + "ID": "252", + "title": "Yes", + "order": "0", + "destinationID": "254", + "destinationType": "end" + }, + { + "ID": "253", + "title": "No", + "order": "1", + "destinationID": "254", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "254", + "title": "End 02", + "content": "End 02 content" + } + ], + "stats": { + "total_paths": 2, + "longest_path": 2, + "path_ends": { + "254": { + "title": "End 02", + "count": 2, + "percentage": 100 + } + } + } +} \ No newline at end of file diff --git a/data/test-six.min.json b/data/test-six.min.json new file mode 100644 index 0000000..748f1a1 --- /dev/null +++ b/data/test-six.min.json @@ -0,0 +1 @@ +{"ID":"13","slug":"test-six","title":"test six","owner":"172","starts":[{"ID":"250","title":"start","destinationID":"251","destinationType":"question"}],"groups":[],"questions":[{"ID":"251","title":"Registered?","order":"0","options":[{"ID":"252","title":"Yes","order":"0","destinationID":"254","destinationType":"end"},{"ID":"253","title":"No","order":"1","destinationID":"254","destinationType":"end"}]}],"ends":[{"ID":"254","title":"End 02","content":"End 02 content"}],"stats":{"total_paths":2,"longest_path":2,"path_ends":{"254":{"title":"End 02","count":2,"percentage":100}}}} \ No newline at end of file diff --git a/data/test-two.json b/data/test-two.json new file mode 100644 index 0000000..e317312 --- /dev/null +++ b/data/test-two.json @@ -0,0 +1,76 @@ +{ + "ID": "1", + "slug": "citizen", + "title": "Are You Eligible to be a US Citizen?", + "owner": "172", + "starts": [ + { + "ID": "36", + "title": "Start", + "destinationID": "2", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "1", + "title": "Attachment A", + "content": "I have been a Permanent Resident for three to five years", + "order": "0", + "questions": [ + "2" + ] + } + ], + "questions": [ + { + "ID": "2", + "title": "I am at least 18 years old.", + "order": "0", + "options": [ + { + "ID": "4", + "title": "False", + "order": "0", + "destinationID": "5", + "destinationType": "end" + }, + { + "ID": "3", + "title": "True", + "order": "1", + "destinationID": "6", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "5", + "title": "Eligible", + "content": "You can apply for US Citizenship if you want to." + }, + { + "ID": "6", + "title": "May Not Be Eligible", + "content": "You will get rejected from US Citizenship if you apply right now." + } + ], + "stats": { + "total_paths": 3442, + "longest_path": 30, + "path_ends": { + "5": { + "title": "Eligible", + "count": 512, + "percentage": 14.88 + }, + "6": { + "title": "May Not Be Eligible", + "count": 2930, + "percentage": 85.12 + } + } + } +} \ No newline at end of file diff --git a/data/test-two.min.json b/data/test-two.min.json new file mode 100644 index 0000000..a3a8b65 --- /dev/null +++ b/data/test-two.min.json @@ -0,0 +1,442 @@ +{ + "ID": "7", + "slug": "how-to-register-to-vote-in-texas", + "title": "How to Register to Vote in Texas", + "owner": "172", + "starts": [ + { + "ID": "227", + "title": "start", + "destinationID": "235", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "475", + "title": "Group", + "content": "", + "order": "0", + "questions": [ + "298", + "301", + "304", + "311", + "308", + "314", + "317", + "323" + ] + } + ], + "questions": [ + { + "ID": "235", + "title": "Are you registered to vote at your current address?", + "order": "0", + "options": [ + { + "ID": "256", + "title": "Yes", + "order": "0", + "destinationID": "233", + "destinationType": "end" + }, + { + "ID": "257", + "title": "No", + "order": "1", + "destinationID": "266", + "destinationType": "question" + }, + { + "ID": "258", + "title": "I don't know.", + "order": "2", + "destinationID": "263", + "destinationType": "question" + } + ] + }, + { + "ID": "263", + "title": "You can check if you are registered to vote in Texas at https:\/\/teamrv-mvp.sos.texas.gov\/MVP\/mvp.do.\n\nDo you want to continue to find out how to register to vote in Texas?", + "order": "1", + "options": [ + { + "ID": "264", + "title": "Yes", + "order": "0", + "destinationID": "283", + "destinationType": "question" + }, + { + "ID": "265", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "283", + "title": "Are you registered to vote at your current address?", + "order": "2", + "options": [ + { + "ID": "284", + "title": "Yes", + "order": "0", + "destinationID": "233", + "destinationType": "end" + }, + { + "ID": "285", + "title": "No", + "order": "1", + "destinationID": "266", + "destinationType": "question" + } + ] + }, + { + "ID": "266", + "title": "Are you a U.S. citizen?", + "order": "3", + "options": [ + { + "ID": "267", + "title": "Yes", + "order": "0", + "destinationID": "274", + "destinationType": "question" + }, + { + "ID": "268", + "title": "No", + "order": "1", + "destinationID": "262", + "destinationType": "end" + } + ] + }, + { + "ID": "274", + "title": "Are you a Texas resident?", + "order": "4", + "options": [ + { + "ID": "275", + "title": "Yes", + "order": "0", + "destinationID": "291", + "destinationType": "question" + }, + { + "ID": "276", + "title": "No", + "order": "1", + "destinationID": "287", + "destinationType": "end" + }, + { + "ID": "277", + "title": "I don't know.", + "order": "2", + "destinationID": "288", + "destinationType": "question" + } + ] + }, + { + "ID": "288", + "title": "A Texas resident is anyone who lives in the state of Texas. College students who are from Texas are considered Texas residents even if they attend college outside the state. \nDo you want to continue to find out how to register to vote in Texas?", + "order": "5", + "options": [ + { + "ID": "289", + "title": "Yes", + "order": "0", + "destinationID": "291", + "destinationType": "question" + }, + { + "ID": "290", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "291", + "title": "Are you at least 18 years old or older?", + "order": "6", + "options": [ + { + "ID": "292", + "title": "Yes", + "order": "0", + "destinationID": "298", + "destinationType": "question" + }, + { + "ID": "293", + "title": "No", + "order": "1", + "destinationID": "294", + "destinationType": "question" + } + ] + }, + { + "ID": "294", + "title": "Are you currently at least 17 years and 10 months old and will you be age 18 by the Election Day you want to vote in? To check when the next upcoming election is, visit https:\/\/www.votetexas.gov\/.", + "order": "7", + "options": [ + { + "ID": "295", + "title": "Yes", + "order": "0", + "destinationID": "298", + "destinationType": "question" + }, + { + "ID": "296", + "title": "No", + "order": "1", + "destinationID": "297", + "destinationType": "end" + } + ] + }, + { + "ID": "298", + "title": "Have you ever been convicted of a felony?", + "order": "8", + "options": [ + { + "ID": "299", + "title": "Yes", + "order": "0", + "destinationID": "301", + "destinationType": "question" + }, + { + "ID": "300", + "title": "No", + "order": "1", + "destinationID": "311", + "destinationType": "question" + } + ] + }, + { + "ID": "301", + "title": "Have you completed your sentence, probation, and parole? In other words, \u201cAre you off paper?\u201d", + "order": "9", + "options": [ + { + "ID": "302", + "title": "Yes", + "order": "0", + "destinationID": "304", + "destinationType": "question" + }, + { + "ID": "303", + "title": "No", + "order": "1", + "destinationID": "327", + "destinationType": "end" + } + ] + }, + { + "ID": "304", + "title": "You are eligible to register to vote! \n\nHave you ever been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated without the right to vote?", + "order": "10", + "options": [ + { + "ID": "305", + "title": "Yes", + "order": "0", + "destinationID": "307", + "destinationType": "end" + }, + { + "ID": "306", + "title": "No", + "order": "1", + "destinationID": "308", + "destinationType": "question" + } + ] + }, + { + "ID": "311", + "title": "Have you ever been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated without the right to vote?", + "order": "11", + "options": [ + { + "ID": "312", + "title": "Yes", + "order": "0", + "destinationID": "307", + "destinationType": "end" + }, + { + "ID": "313", + "title": "No", + "order": "1", + "destinationID": "308", + "destinationType": "question" + } + ] + }, + { + "ID": "308", + "title": "Are you a college student whose home address is in Texas?", + "order": "12", + "options": [ + { + "ID": "309", + "title": "Yes", + "order": "0", + "destinationID": "314", + "destinationType": "question" + }, + { + "ID": "310", + "title": "No", + "order": "1", + "destinationID": "322", + "destinationType": "end" + } + ] + }, + { + "ID": "314", + "title": "Do you attend college in Texas?", + "order": "13", + "options": [ + { + "ID": "315", + "title": "Yes", + "order": "0", + "destinationID": "317", + "destinationType": "question" + }, + { + "ID": "316", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "317", + "title": "You can choose to register either at your home address or at your university address. Where you choose to register will determine where you can vote and what\u2019s on your ballot.\n\nDo you want to continue to find out how to register to vote in Texas?\n", + "order": "14", + "options": [ + { + "ID": "319", + "title": "Yes", + "order": "0", + "destinationID": "322", + "destinationType": "end" + }, + { + "ID": "320", + "title": "No", + "order": "1", + "destinationID": "233", + "destinationType": "end" + } + ] + }, + { + "ID": "323", + "title": "Do you want to continue to find out how to register to vote in Texas?", + "order": "15", + "options": [ + { + "ID": "324", + "title": "Yes", + "order": "0", + "destinationID": "322", + "destinationType": "end" + }, + { + "ID": "325", + "title": "No", + "order": "1", + "destinationID": "326", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "233", + "title": "Thats great.", + "content": "Be sure to vote in the next election." + }, + { + "ID": "262", + "title": "You must be a U.S. citizen to vote in the state of Texas.", + "content": "" + }, + { + "ID": "287", + "title": "You must be a Texas resident to vote in the state of Texas.", + "content": "To register in your state of residency, visit turbovote.org for more information." + }, + { + "ID": "297", + "title": "Unfortunately you must be at least 17 years and 10 months old, as well as 18 years old by Election Day, to register to vote in the state of Texas.", + "content": "" + }, + { + "ID": "307", + "title": "You must not have been declared by a court exercising probate jurisdiction to be either totally mentally incapacitated or partially mentally incapacitated to vote in the state of Texas.", + "content": "" + }, + { + "ID": "322", + "title": "You should be able to register to vote in Texas. Visit https:\/\/www.votetexas.gov\/register-to-vote\/.", + "content": "Be sure to register by the deadline listed on the website, approximately 30 days before Election Day. There is no online voter registration in Texas, so print out the form this website provides and mail it to your local county Voter Registrar. You can find out the address of your local county Voter Registrar here: https:\/\/www.sos.state.tx.us\/elections\/voter\/votregduties.shtml" + }, + { + "ID": "326", + "title": "If you choose to register at your university address, please follow the guidelines for registration and voting found at campusvoteproject.org.", + "content": "" + }, + { + "ID": "327", + "title": "You must have completed your sentence, probation, and parole to be eligible to vote in the state of Texas.", + "content": "" + } + ], + "stats": { + "total_paths": 101, + "longest_path": 15, + "path_ends": { + "233": { + "title": "Yes", + "count": 37, + "percentage": 36.63 + }, + "262": { + "title": "No", + "count": 2, + "percentage": 1.98 + } + } + } +} \ No newline at end of file diff --git a/data/testing-another.json b/data/testing-another.json new file mode 100644 index 0000000..63df167 --- /dev/null +++ b/data/testing-another.json @@ -0,0 +1,101 @@ +{ + "ID": "6", + "slug": "testing-another", + "title": "Testing Another", + "owner": "17", + "starts": [ + { + "ID": "125", + "title": "Start Test", + "destinationID": "126", + "destinationType": "question" + } + ], + "groups": [ + { + "ID": "131", + "title": "New Group", + "content": "This is the group content", + "order": "0", + "questions": [ + "132" + ] + } + ], + "questions": [ + { + "ID": "126", + "title": "Test Question 1", + "order": "0", + "options": [ + { + "ID": "127", + "title": "Go to Question 2", + "order": "0", + "destinationID": "128", + "destinationType": "question" + }, + { + "ID": "129", + "title": "Go to End", + "order": "1", + "destinationID": "124", + "destinationType": "end" + } + ] + }, + { + "ID": "128", + "title": "Testing Question 2", + "order": "1", + "options": [ + { + "ID": "130", + "title": "Go to End", + "order": "0", + "destinationID": "124", + "destinationType": "end" + }, + { + "ID": "135", + "title": "Question 3", + "order": "1", + "destinationID": "132", + "destinationType": "question" + } + ] + }, + { + "ID": "132", + "title": "Question 3 is in the Group", + "order": "2", + "options": [ + { + "ID": "133", + "title": "Go to end", + "order": "0", + "destinationID": "124", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "124", + "title": "End Test", + "content": "This is the end." + } + ], + "stats": { + "total_paths": 3, + "longest_path": 4, + "path_ends": { + "124": { + "title": "End Test", + "count": 3, + "percentage": 100 + } + } + } +} \ No newline at end of file diff --git a/data/testing-another.min.json b/data/testing-another.min.json new file mode 100644 index 0000000..f2ea8d9 --- /dev/null +++ b/data/testing-another.min.json @@ -0,0 +1 @@ +{"ID":"6","slug":"testing-another","title":"Testing Another","owner":"17","starts":[{"ID":"125","title":"Start Test","destinationID":"126","destinationType":"question"}],"groups":[{"ID":"131","title":"New Group","content":"This is the group content","order":"0","questions":["132"]}],"questions":[{"ID":"126","title":"Test Question 1","order":"0","options":[{"ID":"127","title":"Go to Question 2","order":"0","destinationID":"128","destinationType":"question"},{"ID":"129","title":"Go to End","order":"1","destinationID":"124","destinationType":"end"}]},{"ID":"128","title":"Testing Question 2","order":"1","options":[{"ID":"130","title":"Go to End","order":"0","destinationID":"124","destinationType":"end"},{"ID":"135","title":"Question 3","order":"1","destinationID":"132","destinationType":"question"}]},{"ID":"132","title":"Question 3 is in the Group","order":"2","options":[{"ID":"133","title":"Go to end","order":"0","destinationID":"124","destinationType":"end"}]}],"ends":[{"ID":"124","title":"End Test","content":"This is the end."}],"stats":{"total_paths":3,"longest_path":4,"path_ends":{"124":{"title":"End Test","count":3,"percentage":100}}}} \ No newline at end of file diff --git a/data/testing-command.json b/data/testing-command.json new file mode 100644 index 0000000..15dd094 --- /dev/null +++ b/data/testing-command.json @@ -0,0 +1,35 @@ +{ + "ID": "5", + "slug": "testing-command", + "title": "Testing Command", + "owner": "17", + "starts": [], + "groups": [], + "questions": [ + { + "ID": "120", + "title": "My Question", + "order": "0", + "options": [ + { + "ID": "122", + "title": "Option 2", + "order": "0", + "destinationID": null, + "destinationType": null + } + ] + } + ], + "ends": [], + "errors": { + "option": { + "122": "No destination" + } + }, + "stats": { + "total_paths": 1, + "longest_path": 2, + "path_ends": [] + } +} \ No newline at end of file diff --git a/data/testing-command.min.json b/data/testing-command.min.json new file mode 100644 index 0000000..1aa9b7d --- /dev/null +++ b/data/testing-command.min.json @@ -0,0 +1 @@ +{"ID":"5","slug":"testing-command","title":"Testing Command","owner":"17","starts":[],"groups":[],"questions":[{"ID":"120","title":"My Question","order":"0","options":[{"ID":"122","title":"Option 2","order":"0","destinationID":null,"destinationType":null}]}],"ends":[],"errors":{"option":{"122":"No destination"}},"stats":{"total_paths":1,"longest_path":2,"path_ends":[]}} \ No newline at end of file diff --git a/data/vote.json b/data/vote.json new file mode 100644 index 0000000..6e8571d --- /dev/null +++ b/data/vote.json @@ -0,0 +1,49 @@ +{ + "ID": "15", + "slug": "vote", + "title": "Vote", + "owner": "172", + "starts": [ + { + "ID": "332", + "title": "Start", + "destinationID": "333", + "destinationType": "question" + } + ], + "groups": [], + "questions": [ + { + "ID": "333", + "title": "Question 1", + "order": "0", + "options": [ + { + "ID": "334", + "title": "Test option", + "order": "0", + "destinationID": "335", + "destinationType": "end" + } + ] + } + ], + "ends": [ + { + "ID": "335", + "title": "End", + "content": "test" + } + ], + "stats": { + "total_paths": 1, + "longest_path": 2, + "path_ends": { + "335": { + "title": "End", + "count": 1, + "percentage": 100 + } + } + } +} \ No newline at end of file diff --git a/data/vote.min.json b/data/vote.min.json new file mode 100644 index 0000000..a0a25ff --- /dev/null +++ b/data/vote.min.json @@ -0,0 +1 @@ +{"ID":"15","slug":"vote","title":"Vote","owner":"172","starts":[{"ID":"332","title":"Start","destinationID":"333","destinationType":"question"}],"groups":[],"questions":[{"ID":"333","title":"Question 1","order":"0","options":[{"ID":"334","title":"Test option","order":"0","destinationID":"335","destinationType":"end"}]}],"ends":[{"ID":"335","title":"End","content":"test"}],"stats":{"total_paths":1,"longest_path":2,"path_ends":{"335":{"title":"End","count":1,"percentage":100}}}} \ No newline at end of file diff --git a/dist/js/cme-tree.min.js b/dist/js/cme-tree.min.js index 32bae89..94ac544 100644 --- a/dist/js/cme-tree.min.js +++ b/dist/js/cme-tree.min.js @@ -1 +1,4856 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Handlebars=t():e.Handlebars=t()}(this,function(){return function(n){var i={};function r(e){if(i[e])return i[e].exports;var t=i[e]={exports:{},id:e,loaded:!1};return n[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}return r.m=n,r.c=i,r.p="",r(0)}([function(e,t,n){"use strict";var i=n(1).default,r=n(2).default;t.__esModule=!0;var o=i(n(3)),s=r(n(20)),a=r(n(5)),l=i(n(4)),c=i(n(21)),u=r(n(33));function d(){var t=new o.HandlebarsEnvironment;return l.extend(t,o),t.SafeString=s.default,t.Exception=a.default,t.Utils=l,t.escapeExpression=l.escapeExpression,t.VM=c,t.template=function(e){return c.template(e,t)},t}var h=d();h.create=d,u.default(h),h.default=h,t.default=h,e.exports=t.default},function(e,t){"use strict";t.default=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t},t.__esModule=!0},function(e,t){"use strict";t.default=function(e){return e&&e.__esModule?e:{default:e}},t.__esModule=!0},function(e,t,n){"use strict";var i=n(2).default;t.__esModule=!0,t.HandlebarsEnvironment=u;var r=n(4),o=i(n(5)),s=n(9),a=n(17),l=i(n(19));t.VERSION="4.0.10";t.COMPILER_REVISION=7;t.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};var c="[object Object]";function u(e,t,n){this.helpers=e||{},this.partials=t||{},this.decorators=n||{},s.registerDefaultHelpers(this),a.registerDefaultDecorators(this)}u.prototype={constructor:u,logger:l.default,log:l.default.log,registerHelper:function(e,t){if(r.toString.call(e)===c){if(t)throw new o.default("Arg not supported with multiple helpers");r.extend(this.helpers,e)}else this.helpers[e]=t},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,t){if(r.toString.call(e)===c)r.extend(this.partials,e);else{if(void 0===t)throw new o.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=t}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,t){if(r.toString.call(e)===c){if(t)throw new o.default("Arg not supported with multiple decorators");r.extend(this.decorators,e)}else this.decorators[e]=t},unregisterDecorator:function(e){delete this.decorators[e]}};var d=l.default.log;t.log=d,t.createFrame=r.createFrame,t.logger=l.default},function(e,t){"use strict";t.__esModule=!0,t.extend=s,t.indexOf=function(e,t){for(var n=0,i=e.length;n":">",'"':""","'":"'","`":"`","=":"="},i=/[&<>"'`=]/g,r=/[&<>"'`=]/;function o(e){return n[e]}function s(e){for(var t=1;t\n

'+(null!=(o=typeof(s=null!=(s=n.title||(null!=t?t.title:t))?s:l)===c?s.call(a,{name:"title",hash:{},data:r}):s)?o:"")+' Paths

\n
'+(null!=(o=typeof(s=null!=(s=n.percentage||(null!=t?t.percentage:t))?s:l)===c?s.call(a,{name:"percentage",hash:{},data:r}):s)?o:"")+"%
\n \n"},3:function(e,t,n,i,r){var o;return'
\n'+(null!=(o=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.starts:t,{name:"each",hash:{},fn:e.program(4,r,0),inverse:e.noop,data:r}))?o:"")+"
\n"},4:function(e,t,n,i,r){var o,s,a=null!=t?t:e.nullContext||{},l=n.helperMissing,c="function";return'

'+(null!=(o=typeof(s=null!=(s=n.title||(null!=t?t.title:t))?s:l)===c?s.call(a,{name:"title",hash:{},data:r}):s)?o:"")+"

\n"+(null!=(o=n.if.call(a,null!=t?t.content:t,{name:"if",hash:{},fn:e.program(5,r,0),inverse:e.noop,data:r}))?o:"")},5:function(e,t,n,i,r){var o;return'
\n '+e.escapeExpression("function"==typeof(o=null!=(o=n.content||(null!=t?t.content:t))?o:n.helperMissing)?o.call(null!=t?t:e.nullContext||{},{name:"content",hash:{},data:r}):o)+"\n
\n"},7:function(e,t,n,i,r,o,s){var a;return'
\n'+(null!=(a=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.questions:t,{name:"each",hash:{},fn:e.program(8,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
\n"},8:function(e,t,n,i,r,o,s){var a,l,c=null!=t?t:e.nullContext||{},u=n.helperMissing,d="function",h=e.escapeExpression;return(null!=(a=(n.groupStart||t&&t.groupStart||u).call(c,null!=t?t.ID:t,null!=s[1]?s[1].groups:s[1],{name:"groupStart",hash:{},fn:e.program(9,r,0,o,s),inverse:e.noop,data:r}))?a:"")+'
\n '+h((n.elNumber||t&&t.elNumber||u).call(c,null!=t?t.order:t,{name:"elNumber",hash:{},data:r}))+'\n

'+h(typeof(l=null!=(l=n.title||(null!=t?t.title:t))?l:u)===d?l.call(c,{name:"title",hash:{},data:r}):l)+"

\n"+(null!=(a=n.if.call(c,null!=t?t.content:t,{name:"if",hash:{},fn:e.program(11,r,0,o,s),inverse:e.noop,data:r}))?a:"")+(null!=(a=n.if.call(c,null!=t?t.options:t,{name:"if",hash:{},fn:e.program(13,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
\n\n"+(null!=(a=(n.groupEnd||t&&t.groupEnd||u).call(c,null!=t?t.ID:t,null!=s[1]?s[1].groups:s[1],{name:"groupEnd",hash:{},fn:e.program(18,r,0,o,s),inverse:e.noop,data:r}))?a:"")},9:function(e,t,n,i,r){var o,s,a=null!=t?t:e.nullContext||{},l=n.helperMissing,c="function";return'
\n

'+e.escapeExpression(typeof(s=null!=(s=n.groupTitle||(null!=t?t.groupTitle:t))?s:l)===c?s.call(a,{name:"groupTitle",hash:{},data:r}):s)+"

\n"},11:function(e,t,n,i,r){var o;return'
'+e.escapeExpression("function"==typeof(o=null!=(o=n.content||(null!=t?t.content:t))?o:n.helperMissing)?o.call(null!=t?t:e.nullContext||{},{name:"content",hash:{},data:r}):o)+"
\n"},13:function(e,t,n,i,r,o,s){var a;return'
    \n'+(null!=(a=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.options:t,{name:"each",hash:{},fn:e.program(14,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
\n"},14:function(e,t,n,i,r,o,s){var a,l,c=null!=t?t:e.nullContext||{},u=n.helperMissing,d="function";return'
  • \n '+e.escapeExpression(typeof(l=null!=(l=n.title||(null!=t?t.title:t))?l:u)===d?l.call(c,{name:"title",hash:{},data:r}):l)+'\n \n'+(null!=(a=(n.destination||t&&t.destination||u).call(c,null!=t?t.destinationID:t,null!=t?t.destinationType:t,null!=t?t.ID:t,e.data(r,1)&&e.data(r,1).index,{name:"destination",hash:{},fn:e.program(15,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
  • \n"},15:function(e,t,n,i,r){var o,s,a=null!=t?t:e.nullContext||{};return' '+(null!=(o="function"==typeof(s=null!=(s=n.destinationTitle||(null!=t?t.destinationTitle:t))?s:n.helperMissing)?s.call(a,{name:"destinationTitle",hash:{},data:r}):s)?o:"")+"\n"+(null!=(o=n.if.call(a,null!=t?t.destinationIcon:t,{name:"if",hash:{},fn:e.program(16,r,0),inverse:e.noop,data:r}))?o:"")},16:function(e,t,n,i,r){var o,s,a=null!=t?t:e.nullContext||{},l=n.helperMissing,c="function";return' \n'},18:function(e,t,n,i,r){return"
    \n"},20:function(e,t,n,i,r,o,s){var a;return'
    \n'+(null!=(a=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.ends:t,{name:"each",hash:{},fn:e.program(21,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
    \n"},21:function(e,t,n,i,r,o,s){var a,l,c=null!=t?t:e.nullContext||{},u=n.helperMissing,d="function",h=e.escapeExpression,f=e.lambda;return'\n
    \n

    '+(null!=(a=typeof(l=null!=(l=n.title||(null!=t?t.title:t))?l:u)===d?l.call(c,{name:"title",hash:{},data:r}):l)?a:"")+"

    \n"+(null!=(a=n.if.call(c,null!=t?t.content:t,{name:"if",hash:{},fn:e.program(22,r,0,o,s),inverse:e.noop,data:r}))?a:"")+'\n \n
    \n'},22:function(e,t,n,i,r){var o;return'
    '+e.escapeExpression("function"==typeof(o=null!=(o=n.content||(null!=t?t.content:t))?o:n.helperMissing)?o.call(null!=t?t:e.nullContext||{},{name:"content",hash:{},data:r}):o)+"
    \n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,i,r,o,s){var a,l,c=null!=t?t:e.nullContext||{},u=n.helperMissing,d="function",h=e.lambda;return'
    \n arrowarrow\n
    \n
    \n

    '+(null!=(a=typeof(l=null!=(l=n.title||(null!=t?t.title:t))?l:u)===d?l.call(c,{name:"title",hash:{},data:r}):l)?a:"")+'

    \n
    \n
      \n
    • \n

      Possible Paths

      \n
      '+(null!=(a=h(null!=(a=null!=t?t.stats:t)?a.total_paths:a,t))?a:"")+'
      \n
    • \n
    • \n

      Longest Path

      \n
      '+(null!=(a=h(null!=(a=null!=t?t.stats:t)?a.longest_path:a,t))?a:"")+"
      \n
    • \n\n"+(null!=(a=n.each.call(c,null!=(a=null!=t?t.stats:t)?a.path_ends:a,{name:"each",hash:{},fn:e.program(1,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
    \n
    \n"+(null!=(a=n.if.call(c,null!=t?t.starts:t,{name:"if",hash:{},fn:e.program(3,r,0,o,s),inverse:e.noop,data:r}))?a:"")+'
    \n
    \n
    \n
    \n
    \n'+(null!=(a=n.if.call(c,null!=t?t.questions:t,{name:"if",hash:{},fn:e.program(7,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"\n"+(null!=(a=n.if.call(c,null!=t?t.ends:t,{name:"if",hash:{},fn:e.program(20,r,0,o,s),inverse:e.noop,data:r}))?a:"")+"
    \n
    \n\n
    \n"},useData:!0,useDepths:!0}),function(){function l(e,t){var n,s;this.observers=[];this.getData=function(){return n},this.getState=function(){return s},this.validateState=function(e,t){var n=void 0,i=void 0;return(n=["intro","overview","question","end"]).includes(e)?null===t||""===t||void 0===t?(console.error("StateID is empty: "+t),!1):("overview"===e?i=t===this.getTreeID():"intro"===e?i=!0:void 0!==this.getDataByType(e,t)&&(i=!0),!1!==i&&void 0!==i||(console.error(t+" is invalid for the current state of '"+e+"'"),this.emitError("invalidState",{stateType:e,stateID:t}),i=!1),i):(console.error(e+" is not an allowed state. Allowed states are "+n.toString()),this.emitError("invalidStateType",{stateType:e,stateID:t}),!1)},this.setState=function(e,t,n){var i,r,o;return(s.type!==e||s.id!==t)&&(!0!==(i=this.validateState(e,t))?(console.log(i),!1):(r={type:s.type,id:s.id},s.type=e,s.id=t,o={type:s.type,id:s.id},void this.emit("update",{newState:o,oldState:r,data:n})))},this.setObservers(t),s={id:(n=e).ID,type:"intro"},this.emit("ready",this)}function t(e){console.error(e)}l.prototype={constructor:l,emit:function(t,n){for(var i=this,e=function(e){setTimeout(function(){i.observers[e].on(t,n)},0)},r=0;r= 2.0.0-beta.1', + 7: '>= 4.0.0' + }; + + exports.REVISION_CHANGES = REVISION_CHANGES; + var objectType = '[object Object]'; + + function HandlebarsEnvironment(helpers, partials, decorators) { + this.helpers = helpers || {}; + this.partials = partials || {}; + this.decorators = decorators || {}; + + _helpers.registerDefaultHelpers(this); + _decorators.registerDefaultDecorators(this); + } + + HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: _logger2['default'], + log: _logger2['default'].log, + + registerHelper: function registerHelper(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple helpers'); + } + _utils.extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function unregisterHelper(name) { + delete this.helpers[name]; + }, + + registerPartial: function registerPartial(name, partial) { + if (_utils.toString.call(name) === objectType) { + _utils.extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function unregisterPartial(name) { + delete this.partials[name]; + }, + + registerDecorator: function registerDecorator(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple decorators'); + } + _utils.extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function unregisterDecorator(name) { + delete this.decorators[name]; + } + }; + + var log = _logger2['default'].log; + + exports.log = log; + exports.createFrame = _utils.createFrame; + exports.logger = _logger2['default']; + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.createFrame = createFrame; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' + }; + + var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /* eslint-disable func-style */ + var isFunction = function isFunction(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + exports.isFunction = isFunction; + + /* eslint-enable func-style */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$defineProperty = __webpack_require__(6)['default']; + + exports.__esModule = true; + + var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + column = undefined; + if (loc) { + line = loc.start.line; + column = loc.start.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (_Object$defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + } else { + this.column = column; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } + } + + Exception.prototype = new Error(); + + exports['default'] = Exception; + module.exports = exports['default']; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(7), __esModule: true }; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(8); + module.exports = function defineProperty(it, key, desc){ + return $.setDesc(it, key, desc); + }; + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + var $Object = Object; + module.exports = { + create: $Object.create, + getProto: $Object.getPrototypeOf, + isEnum: {}.propertyIsEnumerable, + getDesc: $Object.getOwnPropertyDescriptor, + setDesc: $Object.defineProperty, + setDescs: $Object.defineProperties, + getKeys: $Object.keys, + getNames: $Object.getOwnPropertyNames, + getSymbols: $Object.getOwnPropertySymbols, + each: [].forEach + }; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.registerDefaultHelpers = registerDefaultHelpers; + + var _helpersBlockHelperMissing = __webpack_require__(10); + + var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); + + var _helpersEach = __webpack_require__(11); + + var _helpersEach2 = _interopRequireDefault(_helpersEach); + + var _helpersHelperMissing = __webpack_require__(12); + + var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); + + var _helpersIf = __webpack_require__(13); + + var _helpersIf2 = _interopRequireDefault(_helpersIf); + + var _helpersLog = __webpack_require__(14); + + var _helpersLog2 = _interopRequireDefault(_helpersLog); + + var _helpersLookup = __webpack_require__(15); + + var _helpersLookup2 = _interopRequireDefault(_helpersLookup); + + var _helpersWith = __webpack_require__(16); + + var _helpersWith2 = _interopRequireDefault(_helpersWith); + + function registerDefaultHelpers(instance) { + _helpersBlockHelperMissing2['default'](instance); + _helpersEach2['default'](instance); + _helpersHelperMissing2['default'](instance); + _helpersIf2['default'](instance); + _helpersLog2['default'](instance); + _helpersLookup2['default'](instance); + _helpersWith2['default'](instance); + } + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + exports['default'] = function (instance) { + instance.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse, + fn = options.fn; + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (_utils.isArray(context)) { + if (context.length > 0) { + if (options.ids) { + options.ids = [options.name]; + } + + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + if (options.data && options.ids) { + var data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); + options = { data: data }; + } + + return fn(context, options); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('each', function (context, options) { + if (!options) { + throw new _exception2['default']('Must pass iterator to #each'); + } + + var fn = options.fn, + inverse = options.inverse, + i = 0, + ret = '', + data = undefined, + contextPath = undefined; + + if (options.data && options.ids) { + contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; + } + + if (_utils.isFunction(context)) { + context = context.call(this); + } + + if (options.data) { + data = _utils.createFrame(options.data); + } + + function execIteration(field, index, last) { + if (data) { + data.key = field; + data.index = index; + data.first = index === 0; + data.last = !!last; + + if (contextPath) { + data.contextPath = contextPath + field; + } + } + + ret = ret + fn(context[field], { + data: data, + blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) + }); + } + + if (context && typeof context === 'object') { + if (_utils.isArray(context)) { + for (var j = context.length; i < j; i++) { + if (i in context) { + execIteration(i, i, i === context.length - 1); + } + } + } else { + var priorKey = undefined; + + for (var key in context) { + if (context.hasOwnProperty(key)) { + // We're running the iterations one step out of sync so we can detect + // the last iteration without have to scan the object twice and create + // an itermediate keys array. + if (priorKey !== undefined) { + execIteration(priorKey, i - 1); + } + priorKey = key; + i++; + } + } + if (priorKey !== undefined) { + execIteration(priorKey, i - 1, true); + } + } + } + + if (i === 0) { + ret = inverse(this); + } + + return ret; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + exports['default'] = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 15 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('lookup', function (obj, field) { + return obj && obj[field]; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + exports['default'] = function (instance) { + instance.registerHelper('with', function (context, options) { + if (_utils.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!_utils.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: _utils.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.registerDefaultDecorators = registerDefaultDecorators; + + var _decoratorsInline = __webpack_require__(18); + + var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); + + function registerDefaultDecorators(instance) { + _decoratorsInline2['default'](instance); + } + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + exports['default'] = function (instance) { + instance.registerDecorator('inline', function (fn, props, container, options) { + var ret = fn; + if (!props.partials) { + props.partials = {}; + ret = function (context, options) { + // Create a new partials stack frame prior to exec. + var original = container.partials; + container.partials = _utils.extend({}, original, props.partials); + var ret = fn(context, options); + container.partials = original; + return ret; + }; + } + + props.partials[options.args[0]] = options.fn; + + return ret; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + if (!console[method]) { + // eslint-disable-line no-console + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } + }; + + exports['default'] = logger; + module.exports = exports['default']; + +/***/ }), +/* 20 */ +/***/ (function(module, exports) { + + // Build out our basic SafeString type + 'use strict'; + + exports.__esModule = true; + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + exports['default'] = SafeString; + module.exports = exports['default']; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$seal = __webpack_require__(22)['default']; + + var _interopRequireWildcard = __webpack_require__(1)['default']; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.checkRevision = checkRevision; + exports.template = template; + exports.wrapProgram = wrapProgram; + exports.resolvePartial = resolvePartial; + exports.invokePartial = invokePartial; + exports.noop = noop; + + var _utils = __webpack_require__(4); + + var Utils = _interopRequireWildcard(_utils); + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + var _base = __webpack_require__(3); + + function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = _base.COMPILER_REVISION; + + if (compilerRevision !== currentRevision) { + if (compilerRevision < currentRevision) { + var runtimeVersions = _base.REVISION_CHANGES[currentRevision], + compilerVersions = _base.REVISION_CHANGES[compilerRevision]; + throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } + } + } + + function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _exception2['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as psuedo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = Utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + + partial = env.VM.resolvePartial.call(this, partial, context, options); + var result = env.VM.invokePartial.call(this, partial, context, options); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, options); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name) { + if (!(name in obj)) { + throw new _exception2['default']('"' + name + '" not defined in ' + obj); + } + return obj[name]; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + if (depths[i] && depths[i][name] != null) { + return depths[i][name]; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: Utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + merge: function merge(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = Utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: _Object$seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + container.helpers = container.merge(options.helpers, env.helpers); + + if (templateSpec.usePartial) { + container.partials = container.merge(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = container.merge(options.decorators, env.decorators); + } + } else { + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _exception2['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _exception2['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; + } + + function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; + } + + function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = options.data['partial-block']; + } else { + partial = options.partials[options.name]; + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = options.partials[partial]; + } + return partial; + } + + function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = options.data && options.data['partial-block']; + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = _base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = _base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = Utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _exception2['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } + } + + function noop() { + return ''; + } + + function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? _base.createFrame(data) : {}; + data.root = context; + } + return data; + } + + function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + Utils.extend(prog, props); + } + return prog; + } + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(23), __esModule: true }; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(24); + module.exports = __webpack_require__(29).Object.seal; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + + // 19.1.2.17 Object.seal(O) + var isObject = __webpack_require__(25); + + __webpack_require__(26)('seal', function($seal){ + return function seal(it){ + return $seal && isObject(it) ? $seal(it) : it; + }; + }); + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + // most Object methods by ES6 should accept primitives + var $export = __webpack_require__(27) + , core = __webpack_require__(29) + , fails = __webpack_require__(32); + module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); + }; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__(28) + , core = __webpack_require__(29) + , ctx = __webpack_require__(30) + , PROTOTYPE = 'prototype'; + + var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && key in target; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(param){ + return this instanceof C ? new C(param) : C(param); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; + } + }; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + module.exports = $export; + +/***/ }), +/* 28 */ +/***/ (function(module, exports) { + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); + if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }), +/* 29 */ +/***/ (function(module, exports) { + + var core = module.exports = {version: '1.2.6'}; + if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + // optional / simple context binding + var aFunction = __webpack_require__(31); + module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; + }; + +/***/ }), +/* 31 */ +/***/ (function(module, exports) { + + module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; + }; + +/***/ }), +/* 32 */ +/***/ (function(module, exports) { + + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; + +/***/ }), +/* 33 */ +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/* global window */ + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (Handlebars) { + /* istanbul ignore next */ + var root = typeof global !== 'undefined' ? global : window, + $Handlebars = root.Handlebars; + /* istanbul ignore next */ + Handlebars.noConflict = function () { + if (root.Handlebars === Handlebars) { + root.Handlebars = $Handlebars; + } + return Handlebars; + }; + }; + + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }) +/******/ ]) +}); +; + +this["TreeTemplates"] = this["TreeTemplates"] || {}; +this["TreeTemplates"]["tree"] = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function"; + + return "
  • \n

    " + + ((stack1 = ((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) != null ? stack1 : "") + + " Paths

    \n
    " + + ((stack1 = ((helper = (helper = helpers.percentage || (depth0 != null ? depth0.percentage : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"percentage","hash":{},"data":data}) : helper))) != null ? stack1 : "") + + "%
    \n
  • \n"; +},"3":function(container,depth0,helpers,partials,data) { + var stack1; + + return "
    \n" + + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.starts : depth0),{"name":"each","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n"; +},"4":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function"; + + return "

    " + + ((stack1 = ((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) != null ? stack1 : "") + + "

    \n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.content : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); +},"5":function(container,depth0,helpers,partials,data) { + var helper; + + return "
    \n " + + container.escapeExpression(((helper = (helper = helpers.content || (depth0 != null ? depth0.content : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"content","hash":{},"data":data}) : helper))) + + "\n
    \n"; +},"7":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1; + + return "
    \n" + + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.questions : depth0),{"name":"each","hash":{},"fn":container.program(8, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n"; +},"8":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; + + return ((stack1 = (helpers.groupStart || (depth0 && depth0.groupStart) || alias2).call(alias1,(depth0 != null ? depth0.ID : depth0),(depths[1] != null ? depths[1].groups : depths[1]),{"name":"groupStart","hash":{},"fn":container.program(9, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n " + + alias4((helpers.elNumber || (depth0 && depth0.elNumber) || alias2).call(alias1,(depth0 != null ? depth0.order : depth0),{"name":"elNumber","hash":{},"data":data})) + + "\n

    " + + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) + + "

    \n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.content : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.options : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n\n" + + ((stack1 = (helpers.groupEnd || (depth0 && depth0.groupEnd) || alias2).call(alias1,(depth0 != null ? depth0.ID : depth0),(depths[1] != null ? depths[1].groups : depths[1]),{"name":"groupEnd","hash":{},"fn":container.program(18, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : ""); +},"9":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function"; + + return "
    \n

    " + + container.escapeExpression(((helper = (helper = helpers.groupTitle || (depth0 != null ? depth0.groupTitle : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"groupTitle","hash":{},"data":data}) : helper))) + + "

    \n"; +},"11":function(container,depth0,helpers,partials,data) { + var helper; + + return "
    " + + container.escapeExpression(((helper = (helper = helpers.content || (depth0 != null ? depth0.content : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"content","hash":{},"data":data}) : helper))) + + "
    \n"; +},"13":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1; + + return "
      \n" + + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.options : depth0),{"name":"each","hash":{},"fn":container.program(14, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n"; +},"14":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function"; + + return "
  • \n " + + container.escapeExpression(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) + + "\n \n" + + ((stack1 = (helpers.destination || (depth0 && depth0.destination) || alias2).call(alias1,(depth0 != null ? depth0.destinationID : depth0),(depth0 != null ? depth0.destinationType : depth0),(depth0 != null ? depth0.ID : depth0),(container.data(data, 1) && container.data(data, 1).index),{"name":"destination","hash":{},"fn":container.program(15, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
  • \n"; +},"15":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}); + + return " " + + ((stack1 = ((helper = (helper = helpers.destinationTitle || (depth0 != null ? depth0.destinationTitle : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"destinationTitle","hash":{},"data":data}) : helper))) != null ? stack1 : "") + + "\n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.destinationIcon : depth0),{"name":"if","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); +},"16":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function"; + + return " \n"; +},"18":function(container,depth0,helpers,partials,data) { + return "
    \n"; +},"20":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1; + + return "
    \n" + + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.ends : depth0),{"name":"each","hash":{},"fn":container.program(21, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n"; +},"21":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda; + + return "\n
    \n

    " + + ((stack1 = ((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) != null ? stack1 : "") + + "

    \n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.content : depth0),{"name":"if","hash":{},"fn":container.program(22, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "\n \n
    \n"; +},"22":function(container,depth0,helpers,partials,data) { + var helper; + + return "
    " + + container.escapeExpression(((helper = (helper = helpers.content || (depth0 != null ? depth0.content : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"content","hash":{},"data":data}) : helper))) + + "
    \n"; +},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.lambda; + + return "
    \n arrowarrow\n
    \n
    \n

    " + + ((stack1 = ((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) != null ? stack1 : "") + + "

    \n
    \n
      \n
    • \n

      Possible Paths

      \n
      " + + ((stack1 = alias4(((stack1 = (depth0 != null ? depth0.stats : depth0)) != null ? stack1.total_paths : stack1), depth0)) != null ? stack1 : "") + + "
      \n
    • \n
    • \n

      Longest Path

      \n
      " + + ((stack1 = alias4(((stack1 = (depth0 != null ? depth0.stats : depth0)) != null ? stack1.longest_path : stack1), depth0)) != null ? stack1 : "") + + "
      \n
    • \n\n" + + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.stats : depth0)) != null ? stack1.path_ends : stack1),{"name":"each","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n
    \n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.starts : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n
    \n
    \n
    \n
    \n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.questions : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "\n" + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.ends : depth0),{"name":"if","hash":{},"fn":container.program(20, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "
    \n
    \n\n
    \n"; +},"useData":true,"useDepths":true}); +'use strict'; + +/** +* Must have one view to initialize +*/ +(function () { + + function Tree(data, observers) { + var _data, _state; + + // keep an array of observers + this.observers = []; + + /** + * Private functions + */ + var _validateData = function _validateData(data) { + // TODO: make sure the data is valid + return true; + }; + + /* + * Private function to set Data and State on Init + */ + var _setData = function _setData(data) { + _data = data; + _state = { + id: data.ID, + type: 'intro' + }; + }; + + /** + ** Public functinos + **/ + + // getters + this.getData = function () { + return _data; + }; + this.getState = function () { + return _state; + }; + + // Function to check if a state is valid or not + this.validateState = function (stateType, stateID) { + var whitelist = void 0, + validState = void 0; + + whitelist = ['intro', 'overview', 'question', 'end']; + + // TODO: Check that start can't go straight to end? + // TODO: Check that the next state is valid from the question's options? + + // check allowed states + if (!whitelist.includes(stateType)) { + console.error(stateType + " is not an allowed state. Allowed states are " + whitelist.toString()); + this.emitError('invalidStateType', { + stateType: stateType, + stateID: stateID + }); + return false; + } + // check if stateID is valid + if (stateID === null || stateID === '' || stateID === undefined) { + console.error('StateID is empty: ' + stateID); + return false; + } + + // check if the stateID is a valid ID for this state + if (stateType === 'overview') { + if (stateID === this.getTreeID()) { + validState = true; + } else { + validState = false; + } + } else if (stateType === 'intro') { + // it's always fine + validState = true; + } else if (this.getDataByType(stateType, stateID) !== undefined) { + validState = true; + } + + if (validState === false || validState === undefined) { + console.error(stateID + " is invalid for the current state of '" + stateType + "'"); + this.emitError('invalidState', { + stateType: stateType, + stateID: stateID + }); + validState = false; + } + + return validState; + }; + + // setters + // @param data is simply the data that was originally passed to the function + this.setState = function (stateType, stateID, data) { + var whitelist = void 0, + validState = void 0, + oldState = void 0, + newState = void 0; + + // check to make sure we're not trying to set the same state again + if (_state.type === stateType && _state.id === stateID) { + return false; + } + + validState = this.validateState(stateType, stateID); + + if (validState !== true) { + console.log(validState); + return false; + } + + // looks valid! Set the state + // store the old state + oldState = { + type: _state.type, + id: _state.id + + // set the state + };_state.type = stateType; + _state.id = stateID; + + // build a new state + newState = { + type: _state.type, + id: _state.id + // emit that we've changed it + };this.emit('update', { newState: newState, oldState: oldState, data: data }); + }; + + /*********************** + ******** INIT ********* + ***********************/ + // set the data + if (_validateData(data)) { + // start with one observer so we can + // alert them on ready + this.setObservers(observers); + // set the data + _setData(data); + // emit that we're ready for other code to utilize this tree + this.emit('ready', this); + } else { + console.error('Tree data is invalid.'); + return false; + } + } + + Tree.prototype = { + constructor: Tree, + + /** + * Let Observers know about different actions + * 'ready', 'update', 'error' + */ + emit: function emit(action, data) { + var _this = this; + + var _loop = function _loop(i) { + // make the alert process async + setTimeout(function () { + _this.observers[i].on(action, data); + }, 0); + }; + + for (var i = 0; i < this.observers.length; i++) { + _loop(i); + } + }, + + /** + * Let our observers know about the error + */ + emitError: function emitError(action, data) { + this.emit('error', { + action: action, + data: data + }); + }, + + /** + * Request to update the tree + */ + update: function update(action, data) { + switch (action) { + // data will be the element clicked + case 'state': + this.updateState(data); + break; + } + }, + + /** + * How observers message the parent and each other + */ + message: function message(action, data) { + this.emit(action, data); + }, + + /** + * Attempt to update a sate + * Validation and emitting happens with setState + */ + updateState: function updateState(data) { + var id = void 0, + type = void 0; + switch (data.type) { + case 'intro': + this.setState('intro', this.getTreeID(), data); + break; + case 'start': + // emit a start + this.emit('start', this); + + // go to first question + var question = this.getQuestions()[0]; + this.setState('question', question.ID, data); + break; + + case 'question': + if (data.questionID === undefined) { + id = data.id; + } else { + id = data.questionID; + } + // find the destination + this.setState(data.type, id, data); + break; + + case 'option': + // find the destination + this.setState(data.destinationType, data.destinationID, data); + break; + + case 'end': + // find the destination + if (data.destinationType === undefined) { + type = data.type; + } else { + type = data.destinationType; + } + if (data.destinationID === undefined) { + id = data.id; + } else { + type = data.destinationID; + } + this.setState(type, id, data); + break; + + case 'overview': + // go to tree overview + this.setState('overview', this.getTreeID(), data); + break; + case 'restart': + // emit a restart + this.emit('restart', this); + // go to first question + this.setState('question', this.getQuestions()[0].ID, data); + break; + } + }, + + /** + * Allowed types, 'question', 'group', 'end', 'start' + */ + getDataByType: function getDataByType(type, id) { + var typeIndex = void 0, + whitelist = void 0, + data = void 0; + // check allowed types + whitelist = ['question', 'group', 'end', 'start']; + + if (!whitelist.includes(type)) { + console.error("Allowed getDataByType types are " + whitelist.toString()); + return false; + } + // get the data of this type + data = this.getData(); + // append 's' to get the right array + // 'question' becomes 'questions' + data = data[type + 's']; + + // if there's an ID, let's get the specific one they're after + if (id !== undefined) { + // get the individual item + typeIndex = this.getIndexBy(data, 'ID', id); + if (typeIndex !== undefined) { + // found one! + data = data[typeIndex]; + } else { + data = undefined; + } + } + + return data; + }, + + getTreeID: function getTreeID() { + return this.getData().ID; + }, + + getQuestions: function getQuestions(id) { + var question = void 0; + if (id !== undefined) { + // get the individual item + question = this.getDataByType('question', id); + } else { + question = this.getDataByType('question'); + } + return question; + }, + + getStarts: function getStarts(id) { + var start = void 0; + if (id !== undefined) { + // get the individual item + start = this.getDataByType('start', id); + } else { + start = this.getDataByType('start'); + } + return start; + }, + + getEnds: function getEnds(id) { + var end = void 0; + if (id !== undefined) { + // get the individual item + end = this.getDataByType('end', id); + } else { + end = this.getDataByType('end'); + } + return end; + }, + + getGroups: function getGroups(id) { + var group = void 0; + if (id !== undefined) { + // get the individual item + group = this.getDataByType('group', id); + } else { + group = this.getDataByType('group'); + } + return group; + }, + + getGroupIDByQuestion: function getGroupIDByQuestion(questionID) { + var groups = void 0; + + groups = this.getGroups(); + for (var i = 0; i < groups.length; i++) { + if (-1 < groups[i].questions.indexOf(questionID)) { + // found the group! + return groups[i].ID; + } + } + // question isn't in a group + return undefined; + }, + + getOptions: function getOptions(questionID, optionID) { + var option = void 0, + optionIndex = void 0, + question = void 0; + + // get the individual item + question = this.getQuestions(questionID); + + if (optionID !== undefined) { + optionIndex = this.getIndexBy(question.options, 'ID', optionID); + option = question.options[optionIndex]; + } else { + option = question.options; + } + + return option; + }, + + setObservers: function setObservers(observers) { + for (var i = 0; i < observers.length; i++) { + this.addObserver(observers[i]); + } + return this.observers; + }, + + addObserver: function addObserver(observer) { + // no need to validate. anyone can listen + // we do need to check to make sure the observer hasn't already + // been added + this.observers.push(observer); + }, + + getObservers: function getObservers() { + return this.observers; + }, + + /** + * Powers most all of the retrieval of data from the tree + * Searches an array for a key that equals a certain value + * + * @param objArray (ARRAY of OBJECTS) + * @param name (STRING) of the key you're wanting to find the matching value of + * @param value (MIXED) the value you want to find a match for + * @return INT of the index that matches or UNDEFINED if not found + */ + getIndexBy: function getIndexBy(objArray, name, value) { + for (var i = 0; i < objArray.length; i++) { + if (objArray[i][name] == value) { + return i; + } + } + return undefined; + } + }; + + function createTree(options) { + // required options + if (typeof options.slug !== 'string') { + console.error('Tree slug must be a string.'); + return false; + } + // INIT + // Request our Tree Data + // create the tree + return getTreeData(options.slug).then(buildTree.bind(options)).catch(handleTreeDataError); + } + + function getTreeData(slug) { + + return new Promise(function (resolve, reject) { + var baseUrl = void 0; + if (/https?:\/\/(?:localhost:3000|decision-tree.test)\//.test(window.location.href)) { + baseUrl = 'https://decision-tree.test'; + } else { + baseUrl = 'https://tree.mediaengagement.org'; + } + + var request = new XMLHttpRequest(); + request.overrideMimeType("application/json"); + request.open('GET', baseUrl + '/api/v1/trees/' + slug + '/compiled?minified=true', true); + //request.responseType = 'json'; + // When the request loads, check whether it was successful + request.onload = function () { + if (request.status === 200) { + // If successful, resolve the promise by passing back the request response + resolve(request); + } else { + // If it fails, reject the promise with a error message + reject(Error('Tree could not be loaded:' + request.statusText)); + } + }; + request.onerror = function () { + // Also deal with the case when the entire request fails to begin with + // This is probably a network error, so reject the promise with an appropriate message + reject(Error('There was a network error.')); + }; + // Send the request + request.send(); + }); + } + + function buildTree(request) { + + // check our response URL to make sure it's from a trusted source + if (!/https?:\/\/(?:decision-tree\.test|tree\.mediaengagement\.org|(?:enptree|cmetree)(\.staging)?\.wpengine\.com)\/api\//.test(request.responseURL)) { + console.error('responseURL from an invalidated source.'); + return false; + } + + var data = JSON.parse(request.response); + console.log(data); + + var cssPriority = ''; + if (this.cssPriority) { + cssPriority = this.cssPriority; + } + + // the TreeView needs a container to display into + var treeView = new TreeView({ + container: this.container, + cssPriority: cssPriority + }); + // Manages TreeHistory feature and TreeHistoryView + var treeHistory = new TreeHistory({}); + // Manages passes usage Data to CME so we can continue to get funding to continue developing this tool and create new ones + var treeInteraction = new TreeInteraction({}); + // Small postmessage package for iframe loads. Doesn't do anything if not an iframe load. + + // add the observers + // bind history first so it will load the correct state and + // not cause layout to have to be repainted twice (if different states) + var observers = [treeHistory, treeView, treeInteraction]; + // if we're in an iframe, add the postMessage listener + if (window.self.location !== window.top.location) { + observers.push(new TreePostMessage({})); + } + // build the tree + var tree = new Tree(data, observers); + // send it to our trees array for access + trees.push(tree); + // return the tree we just created + return tree; + } + + function handleTreeDataError(err) { + console.error(err); + } + + var trees = []; + window.Tree = Tree; + window.createTree = createTree; + window.trees = trees; +})(window); +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +/** +* Manages localStorage of current question state +* and previous states of the current decision tree path +* (so people can go back to previous questions) +*/ +function TreeHistory(options) { + var _Tree, _history, _historyStorageName, _currentIndex, // where in the history we're at (current state) + _currentIndexStorageName; + + // keep an array of observers + this.observers = []; + + /** + * Private functions + */ + // save the passed history to localStorage and set the global _history to make sure everything is in sync + var _saveHistory = function _saveHistory(history) { + _history = history; + localStorage.setItem(_historyStorageName, JSON.stringify(_history)); + }; + + var _saveCurrentIndex = function _saveCurrentIndex(currentIndex) { + _currentIndex = currentIndex; + localStorage.setItem(_currentIndexStorageName, JSON.stringify(_currentIndex)); + }; + + // getters + this.getTree = function () { + return _Tree; + }; + this.getHistory = function () { + return _history; + }; + this.getCurrentIndex = function () { + return _currentIndex; + }; + + // setters + /** + * Clears the history and currentIndex to an empty state + */ + this.clearHistory = function () { + var treeID = void 0; + treeID = this.getTree().getTreeID(); + // create as the Tree intro state with overview and index at start. + var history = [{ type: 'intro', id: treeID }, { type: 'overview', id: treeID }]; + var currentIndex = 0; + + _saveHistory(history); + _saveCurrentIndex(currentIndex); + }; + + /** + * Sets the parent Tree + */ + this.setTree = function (Tree) { + // only let it be set once + if (_Tree === undefined) { + _Tree = Tree; + } + return _Tree; + }; + + /** + * Sets variables and decides what state we'll init to + */ + this.init = function () { + var treeID = void 0, + checkState = void 0; + + // get the tree id + treeID = this.getTree().getTreeID(); + + // set global storage string + _historyStorageName = 'treeHistory__' + treeID; + _currentIndexStorageName = 'treeHistoryIndex__' + treeID; + + // if localStorage is empty, create it + if (localStorage.getItem(_historyStorageName) === null) { + // sets a blank history and index + this.clearHistory(); + this.emit('historyCreate', 'historyCreate', {}); + } else { + // the history has been created before, so emit a reload + this.emit('historyReload', 'historyReload', {}); + } + + // set from localStorage + this.setHistory(JSON.parse(localStorage.getItem(_historyStorageName))); + // set currentIndex from localStorage + this.setCurrentIndex(JSON.parse(localStorage.getItem(_currentIndexStorageName))); + }; + + this.setHistory = function (history) { + // TODO: different checks to make sure it's legit, like + // don't add the same state twice. + _saveHistory(history); + // notify observers + this.notifyObservers('historyUpdate', history); + return; + }; + + this.setCurrentIndex = function (index) { + var history = this.getHistory(); + // Check that the index exists + if (index !== null && history[index] === undefined) { + console.error('Index not found in History.'); + // Should we set the current index to null here? + return false; + } + + // don't worry about matching that the state exists. Maybe someone wants to set the current index to the last one in the series. Who knows? + _saveCurrentIndex(index); + this.notifyObservers('historyIndexUpdate', index); + return; + }; + + this.setView = function (container) {}; + + // if a Tree was passed, build the History now + if (options.Tree) { + this.build(options.Tree); + } +} + +TreeHistory.prototype = { + constructor: TreeHistory, + + build: function build(Tree) { + var history = void 0; + this.setTree(Tree); + this.init(); + // check the validity of the history, if it's not cool, clear history and run again + history = this.getHistory(); + // if the first and second items aren't valid, reset it + if (history[0].type !== 'intro' || history[1].type !== 'overview') { + this.clearHistory(); + } + this.forceCurrentState(); + // let everyone know the treeHistory is ready + // emit that we've finished building the History + this.emit('ready', 'historyReady', this); + }, + + addHistory: function addHistory(state) { + // TODO: Validate state. Should be a function on the Tree + // check whitelist for state? + + var history = this.getHistory(); + // add the state to the history + history.push(state); + // save it + this.setHistory(history); + }, + + deleteHistoryAfter: function deleteHistoryAfter(index) { + var history = void 0; + // Don't let them delete the current state + if (index === this.getCurrentIndex()) { + console.error('Cannot delete current state.'); + return false; + } + + // don't allow them to delete history before the current index + if (index < this.getCurrentIndex) { + console.error('Cannot delete states before the current state.'); + return false; + } + + history = this.getHistory(); + // ok, delete away! + // delete all history after the passed index + // splice returns the delete array elements + history.splice(index); + this.setHistory(history); + }, + + getCurrentHistoryState: function getCurrentHistoryState() { + var history = void 0, + currentIndex = void 0; + + history = this.getHistory(); + currentIndex = this.getCurrentIndex(); + + return history[currentIndex]; + }, + + /** + * Let our Tree know about the state we want to change to. + */ + emit: function emit(action, item, data) { + var Tree = this.getTree(); + switch (action) { + case 'ready': + Tree.message(item, data); + break; + case 'update': + Tree.update(item, data); + break; + case 'historyCreate': + Tree.message(item, data); + break; + case 'historyReload': + Tree.message(item, data); + break; + } + }, + + /** + * Get messages from observers + */ + message: function message(action, item, data) { + this.emit(action, item, data); + }, + + // tell the parent tree to update to our current state + forceCurrentState: function forceCurrentState() { + var currentIndex = void 0, + history = void 0, + data = void 0; + + currentIndex = this.getCurrentIndex(); + history = this.getHistory(); + + if (this.currentIndex !== null && history[currentIndex] !== undefined) { + data = Object.assign(history[currentIndex], { updatedBy: 'forceCurrentState', observer: 'TreeHistory' }); + this.emit('update', 'state', data); + } + }, + + /** + * Listen to parent Tree's emitted actions and handle accordingly + */ + on: function on(action, data) { + switch (action) { + case 'ready': + // data will be the tree itself + this.build(data); + break; + case 'update': + this.update(data); + break; + case 'viewReady': + // build the view + // this.setView(data) + // get the container + var treeView = data; + var cWindow = treeView.getContentWindow(); + var historyView = new TreeHistoryView({ + TreeHistory: this, + contentWindow: cWindow, + cssPriority: treeView.getCSSPriority() + }); + // add this to the observers + this.addObserver(historyView); + break; + case 'restart': + // delete the history + this.clearHistory(); + break; + case 'start': + // delete the history + this.clearHistory(); + break; + } + + // notify observers of these changes + this.notifyObservers(action, data); + }, + + // updates the history state + update: function update(states) { + var newState = void 0, + oldState = void 0, + history = void 0, + findNewStateIndex = void 0, + findOldStateIndex = void 0, + stateToAdd = void 0, + Tree = void 0, + currentHistoryState = void 0; + + // data contains old state and new state + newState = states.newState; + oldState = states.oldState; + history = this.getHistory(); + currentHistoryState = this.getCurrentHistoryState(); + + // check if we're resuming where we left off. ie, the updated state will match where we're at in the state history + if (currentHistoryState !== undefined && newState.type === currentHistoryState.type && newState.id === currentHistoryState.id) { + // do nothing! we're good + return; + } + + Tree = this.getTree(); + // try to find the new state in our history + findNewStateIndex = this.getHistoryItemIndex(newState); + + // try to find the old state in our history + findOldStateIndex = this.getHistoryItemIndex(oldState); + // this.getIndexBy(history, 'id', oldState.id) + + // If we can find the new state index in our history, + // then we don't want to ADD it to the history, we just want to + // change our currentIndex to match where they are. + // EX. Someone clicked the "back" or "forward" buttons. + // They're not adding history, they're just changing where they are + if (findNewStateIndex !== undefined) { + // set the currentIndex accordingly + this.setCurrentIndex(findNewStateIndex); + } + + // try to find the previous state. is it the last one in the + // current state tree? + // if not, delete any history after the previous state. + // They've gone rogue by going back in history and + // then chose a new path + // unless we're going from Start to the First Question. We want to keep the overview in there. + else if (findOldStateIndex !== undefined && findOldStateIndex !== history.length - 1) { + // delete anything after this point, because they've changed their state history + // we don't want to delete one by one because: + // 1. we won't allow them to do that + // 2. it'll be a lot slower to delete one by one + // make sure we're not trying to delete the intro or tree states from the history + if (oldState.type !== 'intro' && oldState.type !== 'overview') { + this.deleteHistoryAfter(findOldStateIndex + 1); + } + + // add our new history + // set it as our var to add + stateToAdd = newState; + } else { + // welp, they're just going forwards. + // Nothing to do but add the state! + stateToAdd = newState; + } + + // see if there's anything to add + if ((typeof stateToAdd === 'undefined' ? 'undefined' : _typeof(stateToAdd)) === 'object' && stateToAdd !== undefined) { + this.addHistory(stateToAdd); + // set the new current index + this.setCurrentIndex(this.getHistory().length - 1); + } + }, + + setObservers: function setObservers(observers) { + for (var i = 0; i < observers.length; i++) { + this.addObserver(observers[i]); + } + return this.observers; + }, + + addObserver: function addObserver(observer) { + // no need to validate. anyone can listen + // we do need to check to make sure the observer hasn't already + // been added + this.observers.push(observer); + }, + + getObservers: function getObservers() { + return this.observers; + }, + + notifyObservers: function notifyObservers(action, data) { + var _this = this; + + var _loop = function _loop(i) { + // async emit + setTimeout(function () { + _this.observers[i].on(action, data); + }, 0); + }; + + for (var i = 0; i < this.observers.length; i++) { + _loop(i); + } + }, + + // finds an item in the history object. + getHistoryItemIndex: function getHistoryItemIndex(state) { + var history = void 0, + index = void 0; + + history = this.getHistory(); + // check for tree or intro here because there will only ever be one in the history + // and their ID is set as the treeID which matches each other + if (state.type === 'overview' || state.type === 'intro') { + index = this.getIndexBy(history, 'type', state.type); + } else { + index = this.getIndexBy(history, 'id', state.id); + } + + return index; + }, + + + /** + * Powers most all of the retrieval of data from the tree + * Searches an array for a key that equals a certain value + * + * @param objArray (ARRAY of OBJECTS) + * @param name (STRING) of the key you're wanting to find the matching value of + * @param value (MIXED) the value you want to find a match for + * @return INT of the index that matches or UNDEFINED if not found + */ + getIndexBy: function getIndexBy(objArray, name, value) { + for (var i = 0; i < objArray.length; i++) { + if (objArray[i][name] == value) { + return i; + } + } + return undefined; + } +}; +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function TreeHistoryView(options) { + var _TreeHistory, _contentWindow, _container, _list, _resumeBtn, _progressbar, _indicator, _cssPriority; + + if (_typeof(options.contentWindow) !== 'object') { + console.error('Tree History View container must be a valid object. Try `container: document.getElementById(your-id)`.'); + return false; + } + + if (_typeof(options.TreeHistory) !== 'object') { + console.error('Tree History must be a valid object.'); + return false; + } + + // getters + this.getContentWindow = function () { + return _contentWindow; + }; + this.getContainer = function () { + return _container; + }; + this.getList = function () { + return _list; + }; + this.getResumeBtn = function () { + return _resumeBtn; + }; + this.getProgressbar = function () { + return _progressbar; + }; + this.getIndicator = function () { + return _indicator; + }; + this.getTreeHistory = function () { + return _TreeHistory; + }; + this.getCSSPriority = function () { + return _cssPriority; + }; + + // setters + this.setContentWindow = function (contentWindow) { + // only let it get set once + if (_contentWindow === undefined) { + // set our built div as the contentWindow + _contentWindow = contentWindow; + } + return _contentWindow; + }; + + this.setContainer = function () { + // only let it get set once + if (_container === undefined) { + var historyView = this.createView(); + var cWindow = this.getContentWindow(); + // place it in the passed container + cWindow.insertBefore(historyView, cWindow.firstElementChild); + // set our built div as the container + _container = cWindow.firstElementChild; + } + return _container; + }; + + this.setList = function (list) { + // only let it get set once + if (_list === undefined) { + // set our built div as the list + _list = list; + } + return _list; + }; + + this.setResumeBtn = function (resumeBtn) { + // only let it get set once + if (_resumeBtn === undefined) { + // set our built div as the resume + _resumeBtn = resumeBtn; + } + return _resumeBtn; + }; + + this.setProgressbar = function (progre) { + // only let it get set once + if (_progressbar === undefined) { + // set our built div as the resume + _progressbar = progre; + } + return _progressbar; + }; + + this.setIndicator = function (indicator) { + // only let it get set once + if (_indicator === undefined) { + // set our built div as the resume + _indicator = indicator; + } + return _indicator; + }; + + this.setCSSPriority = function (cssPriority) { + // only let it be set once + if (_cssPriority === undefined && (cssPriority === 'important' || cssPriority === '!important')) { + _cssPriority = cssPriority; + } else { + _cssPriority = ''; + } + return _cssPriority; + }; + + var _setTreeHistory = function _setTreeHistory(TreeHistory) { + _TreeHistory = TreeHistory; + }; + + _setTreeHistory(options.TreeHistory); + this.setContentWindow(options.contentWindow); + this.setCSSPriority(options.cssPriority); + this.setContainer(); + this.templateRender(this.getTreeHistory().getHistory(), this.getTreeHistory().getCurrentIndex()); + // add click listener on container + _container.addEventListener("click", this.click.bind(this)); +} + +TreeHistoryView.prototype = { + constructor: TreeHistoryView, + + on: function on(action, data) { + switch (action) { + case 'historyUpdate': + // data will be the tree itself + this.updateHistory(data); + break; + case 'historyIndexUpdate': + this.updateHistoryIndex(data); + break; + case 'viewHeightUpdate': + // we need to wait until the viewHeights have been calculated and set so + // we can set the heights appropriately + var currentIndex = this.getCurrentIndex(); + this.templateUpdateProgressbar(currentIndex); + break; + } + }, + + /** + * Let our Tree History know about whatever + */ + message: function message(action, item, data) { + var TreeHistory = this.getTreeHistory(); + // this is usually Tree.update('state', dataAboutNewState) + TreeHistory.message(action, item, data); + }, + + click: function click(event) { + var el = void 0, + extraData = void 0; + + el = event.target; + + extraData = { updatedBy: 'click', observer: 'TreeHistoryView' + + // check if it's a click on the parent tree (which we don't care about) + };if (el !== event.currentTarget) { + // also check for parent, as the + if (el.nodeName === 'BUTTON' || el.parentNode.nodeName === 'BUTTON') { + event.preventDefault(); + // if our parent is the A, then set that as el, bc that's the one with the data set on it. This is for the overviewBtn + if (el.parentNode.nodeName === 'BUTTON') { + el = el.parentNode; + } + // see if we want to go to overview or new question/end + if (!el.classList.contains('is-active') || el.data.type === 'overview') { + this.message('update', 'state', Object.assign(el.data, extraData)); + } + } + } + event.stopPropagation(); + }, + + keydown: function keydown() {}, + + createView: function createView() { + var nav = void 0, + navTitle = void 0; + + nav = document.createElement('nav'); + nav.classList.add('cme-tree__history'); + nav.id = 'cme-tree__history--' + this.getTreeHistory().getTree().getTreeID(); + nav.tabIndex = -1; + + navTitle = document.createElement('h3'); + navTitle.innerHTML = 'History Navigation: Go to Overview and Previously Answered Questions'; + navTitle.classList.add('cme-tree__title--history-nav', 'cme-tree__visually-hidden'); + nav.appendChild(navTitle); + + return nav; + }, + + getCurrentNav: function getCurrentNav() { + var currentIndex = void 0, + historyNav = void 0; + + currentIndex = this.getCurrentIndex(); + historyNav = this.getHistoryNavItems(); + + return historyNav[currentIndex]; + }, + getCurrentIndex: function getCurrentIndex() { + var currentIndex = void 0, + TreeHistory = void 0; + + TreeHistory = this.getTreeHistory(); + currentIndex = TreeHistory.getCurrentIndex(); + return currentIndex; + }, + + + // Gets current state of the tree + getCurrentState: function getCurrentState() { + var state = void 0; + + state = this.getTreeHistory().getTree().getState(); + return state; + }, + + + // just the history question/end items. Not the overview btn. + getHistoryNavItems: function getHistoryNavItems() { + var list = this.getList(); + return list.getElementsByClassName('cme-tree__history-list-item--nav'); + }, + + + // All items, including overview button + getHistoryItems: function getHistoryItems() { + var list = this.getList(); + return list.children; + }, + + + updateHistory: function updateHistory(history) { + this.templateUpdateHistory(history); + }, + + updateHistoryIndex: function updateHistoryIndex(index) { + this.templateUpdateIndex(index); + }, + + // TODO: Elements are being added/removed. Check each element to see if its element.data matches the history data in order. If one doesn't match, rerender from that point on. + templateRender: function templateRender(history, currentIndex) { + var container = void 0, + list = void 0, + indicator = void 0, + current = void 0, + item = void 0, + goToHistoryNav = void 0; + + container = this.getContainer(); + container.appendChild(this.templateUl()); + // set the list as the _list var + this.setList(container.children[1]); + list = this.getList(); + + // create the progressbar + container.appendChild(this.templateProgressbar()); + this.setProgressbar(container.children[2]); + + // create the current position indicator + indicator = document.createElement('div'); + indicator.classList.add('cme-tree__history-current-indicator'); + container.appendChild(indicator); + this.setIndicator(container.children[3]); + + // create a visually hidden "go to history navigation" button + goToHistoryNav = document.createElement('a'); + goToHistoryNav.href = '#' + container.id; + goToHistoryNav.classList.add('cme-tree__visually-hidden', 'cme-tree__go-to-history-nav', 'cme-tree__btn'); + goToHistoryNav.innerHTML = 'Go to History Navigation'; + this.getContentWindow().appendChild(goToHistoryNav); + + // create the buttons + for (var i = 0; i < history.length; i++) { + if (i === 0) { + if (history[i].type !== 'intro') { + console.error('First history item should be of type "intro"'); + } + item = this.templateStartBtn(history[i]); + } else if (i === 1) { + if (history[i].type !== 'overview') { + console.error('Second history item should be of type "tree"'); + } + item = this.templateOverviewBtn(history[i]); + } else { + // generate list data and append to item + item = this.templateHistoryItem(history[i], i, currentIndex); + } + list.appendChild(item); + } + + // set the progressbarHeight + this.templateUpdateProgressbar(currentIndex); + + // set the active element + this.templateUpdateIndex(currentIndex); + }, + + templateUpdateHistory: function templateUpdateHistory(history) { + var list = void 0, + li = void 0, + button = void 0, + deleteLi = void 0, + iterator = void 0; + + // go through and compare + list = this.getList(); + li = this.getHistoryItems(); + // the first one is the overview button, so don't include it + deleteLi = []; + iterator = li.length; + + // if there's no history, delete all lis + if (!history.length) { + for (var i = 0; i < li.length; i++) { + list.removeChild(li[i]); + } + return; + } + + // if we don't have any li's, then create them all + if (!li.length) { + // create the elements + for (var _i = 0; _i < history.length; _i++) { + list.appendChild(this.templateHistoryItem(history[_i], _i)); + } + return; + } + + // decide which is longer and set that as our iterator + if (li.length <= history.length) { + iterator = history.length; + } + // if we have lis and history, let's check out which ones we need to delete or add + for (var _i2 = 0; _i2 < iterator; _i2++) { + + if (li[_i2] !== undefined) { + button = li[_i2].firstElementChild; + } + if (deleteLi.length !== 0 || history[_i2] === undefined) { + // add these to the ones to delete + deleteLi.push(li[_i2]); + } else if (li[_i2] === undefined) { + // create it + list.appendChild(this.templateHistoryItem(history[_i2], _i2)); + } + // if both exist, compare values + else if (button.data !== undefined && button.data.id !== history[_i2].id) { + // add these to the ones to delete + deleteLi.push(li[_i2]); + } else { + // nothing to do - they're the same! + } + } + // delete children if we need to + for (var _i3 = 0; _i3 < deleteLi.length; _i3++) { + list.removeChild(deleteLi[_i3]); + } + }, + + templateUpdateIndex: function templateUpdateIndex(currentIndex) { + var li = void 0, + button = void 0; + + li = this.getHistoryItems(); + // first check that we need to update anything + for (var i = 0; i < li.length; i++) { + button = li[i].firstElementChild; + if (button.classList.contains('is-active') && i !== currentIndex) { + button.classList.remove('is-active'); + li[i].classList.remove('is-active'); + } + } + button = li[currentIndex].firstElementChild; + if (!button.classList.contains('is-active')) { + button.classList.add('is-active'); + li[currentIndex].classList.add('is-active'); + } + }, + + + templateUpdateProgressbar: function templateUpdateProgressbar(currentIndex) { + var progressbar = void 0, + progressbarHeight = void 0, + indicator = void 0, + indicatorHeight = void 0, + historyItems = void 0, + list = void 0, + listHeight = void 0, + container = void 0, + containerMoveUp = void 0, + cWindow = void 0, + cWindowHeight = void 0; + + container = this.getContainer(); + progressbar = this.getProgressbar(); + historyItems = this.getHistoryItems(); + progressbarHeight = historyItems[currentIndex].offsetTop; + // update height + progressbar.style.height = progressbarHeight + 'px'; + + indicator = this.getIndicator(); + this.setTransform(indicator, 'translate3d(0,' + progressbarHeight + 'px, 0)'); + indicator.classList.add('cme-tree__history-current-indicator--gooify'); + setTimeout(function () { + indicator.classList.remove('cme-tree__history-current-indicator--gooify'); + }, 500); + + cWindow = this.getContentWindow(); + list = this.getList(); + listHeight = list.getBoundingClientRect().height; + cWindowHeight = parseFloat(cWindow.style.height); + // default to the top + containerMoveUp = 0; + + // OMG just don't. This was way harder on a Friday afternoon than it + // should have been. + // We're checking to see if the contentWindow is less than the listHeight AND if the progressbarHeight is tall enough that we need to address it. + // IE. We don't want to move the list all the way down if they have 10 items, but they've moved back to the second. + if (cWindowHeight < listHeight && cWindowHeight / 2 < progressbarHeight) { + + if (listHeight - progressbarHeight < cWindowHeight / 2) { + // the bottom element can be in the bottom half of the view, so stack it to the bottom. + containerMoveUp = cWindowHeight - listHeight; + } else { + // Center it in the window because we're not near the top or bottom + containerMoveUp = -(progressbarHeight - cWindowHeight / 2 + historyItems[currentIndex].getBoundingClientRect().height / 2); + } + } + + this.setTransform(container, 'translate3d(0,' + containerMoveUp + 'px,0)'); + }, + + templateUl: function templateUl() { + var ul = document.createElement('ul'); + ul.classList.add('cme-tree__history-list'); + return ul; + }, + + templateProgressbar: function templateProgressbar() { + var progressbar = document.createElement('div'); + progressbar.classList.add('cme-tree__history-progress'); + return progressbar; + }, + + // a button so we can display all the buttons in the html without having to show the start button + templateStartBtn: function templateStartBtn(data) { + var li = void 0, + button = void 0; + + li = document.createElement('li'); + button = document.createElement('button'); + li.appendChild(button); + + li.classList.add('cme-tree__history-list-item', 'cme-tree__history-list-item--start'); + + button.classList.add('cme-tree__history-list-link', 'cme-tree__history-list-link--start'); + button.data = data; + + return li; + }, + + // The data needs to be formatted to send a message that + // we want to go to the overview mode + templateOverviewBtn: function templateOverviewBtn(data) { + var li = void 0, + button = void 0; + + li = document.createElement('li'); + button = document.createElement('button'); + li.appendChild(button); + + li.classList.add('cme-tree__history-list-item', 'cme-tree__history-list-item--overview'); + button.setAttribute('aria-label', 'Go to Overview'); + button.classList.add('cme-tree__history-list-link', 'cme-tree__history-list-link--overview'); + button.innerHTML = '
    '; + button.data = data; + + return li; + }, + + templateHistoryItem: function templateHistoryItem(data, index) { + var li = void 0, + button = void 0; + + li = document.createElement('li'); + button = document.createElement('button'); + li.appendChild(button); + button.setAttribute('aria-label', 'Question ' + (index - 1)); + li.classList.add('cme-tree__history-list-item', 'cme-tree__history-list-item--nav'); + + button.classList.add('cme-tree__history-list-link', 'cme-tree__history-list-link--nav'); + // because of the start button (hidden) and overview button before it + // we need to subtract 1 from the index + button.innerHTML = index - 1; + button.data = data; + + return li; + }, + + setTransform: function setTransform(element, transform) { + element.setAttribute('style', 'transform: ' + transform + this.getCSSPriority() + ';'); + } +}; +'use strict'; + +/** +* Manages localStorage of current question state +* and previous states of the current decision tree path +* (so people can go back to previous questions) +*/ +function TreeInteraction(options) { + var _Tree, _rootURL, _postURL, _siteName, _host, _path, _isIframe, _userID; + /** + * Private functions + */ + var _setRootURL = function _setRootURL() { + var scripts = void 0, + currentScript = void 0, + regex = void 0, + rootURL = void 0; + // get the current script being processed (this one) + scripts = document.querySelectorAll('script[src]'); + currentScript = scripts[scripts.length - 1].src; + + // regex it to see if it's one of our DEV urls + regex = /https?:\/\/(?:(?:localhost:3000|decision-tree.test)|(?:enptree|cmetree)\.(?:staging\.)?wpengine\.com)\b/; + _rootURL = regex.exec(currentScript); + + if (_rootURL === null) { + // we're not on DEV, so pass the rootURL as our PROD url + _rootURL = 'https://tree.mediaengagement.org'; + } + + return _rootURL; + }; + + var _setUserID = function _setUserID() { + var userIDStorageName = 'treeUserID'; + var userID = localStorage.getItem(userIDStorageName); + if (userID === null) { + userID = ''; + for (var i = 0; i < 8; i++) { + userID = userID + Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + } + localStorage.setItem(userIDStorageName, userID); + } + + _userID = userID; + + return _userID; + }; + + // getters + this.getTree = function () { + return _Tree; + }; + this.getIsIframe = function () { + return _isIframe; + }; + this.getRootURL = function () { + return _rootURL; + }; + this.getPostURL = function () { + return _postURL; + }; + this.getSiteName = function () { + return _siteName; + }; + this.getHost = function () { + return _host; + }; + this.getPath = function () { + return _path; + }; + this.getUserID = function () { + return _userID; + }; + this.getUserIDStorageName = function () { + return _userIDStorageName; + }; + + // setters + /** + * Sets the parent Tree + */ + this.setTree = function (Tree) { + // only let it be set once + if (_Tree === undefined) { + _Tree = Tree; + } + return _Tree; + }; + + this.setPostURL = function () { + _postURL = this.getRootURL() + '/api/v1/interactions'; + return _postURL; + }; + + this.setSiteName = function (siteName) { + if (_siteName === undefined) { + if (this.getIsIframe() === false) { + var fbOG = document.querySelector('meta[property="og:site_name"]'); + if (fbOG) { + _siteName = fbOG.content; + } else { + _siteName = document.title; + } + } + // if no siteName was passed, ask for it + else if (siteName === undefined) { + this.emit('getParentSiteName', 'getParentSiteName', {}); + } else { + // + _siteName = siteName; + console.log('recieved siteName', _siteName); + } + } + }; + + this.setPath = function (path) { + // only let it get set once + if (_path === undefined) { + if (this.getIsIframe() === false) { + _path = window.self.location.pathname; + } + // if no path was passed, ask for it + else if (path === undefined) { + this.emit('getParentPath', 'getParentPath', {}); + } else { + // should get set from a postmessage + _path = path; + console.log('recieved path', _path); + } + } + }; + + this.setHost = function (host) { + // only let it get set once + if (_host === undefined) { + if (this.getIsIframe() === false) { + _host = window.self.location.host; + } + // if no siteName was passed, ask for it + else if (host === undefined) { + this.emit('getParentHost', 'getParentHost', {}); + } else { + // should get set from a postmessage + _host = host; + console.log('recieved host', _host); + } + } + }; + + var _setIsIframe = function _setIsIframe() { + _isIframe = false; + + // if we're in an iframe, set _isIframe to true + if (window.self.location !== window.top.location) { + _isIframe = true; + } + return _isIframe; + }; + + this.init = function () { + // set the userID + _setUserID(); + // set if it's an iframe or not + _setIsIframe(); + // set the path + this.setPath(); + // set the host + this.setHost(); + // set the site Name + this.setSiteName(); + // set the post URL + this.setPostURL(); + }; + + // passes the data to the server + this.saveInteraction = function (data) { + var _this = this; + + var whitelist = void 0, + validState = void 0, + Tree = void 0, + postURL = void 0, + treeID = void 0; + + Tree = this.getTree(); + // Validate that it's a legit state + validState = Tree.validateState(data.destination.type, data.destination.id); + + if (validState !== true) { + console.error('Invalid Tree State'); + return new Promise(function (resolve, reject) {}); + } + + // validate interaction type + whitelist = ['load', 'reload', 'start', 'restart', 'overview', 'option', 'history']; + + // check allowed interaction types + if (!whitelist.includes(data.interaction.type)) { + console.error(data.interaction.type + " is not an allowed interaction. Allowed interactions are " + whitelist.toString()); + } + + postURL = this.getPostURL(); + treeID = Tree.getTreeID(); + + // combine data and our userID + data = Object.assign(data, { + userID: this.getUserID(), + treeID: Tree.getTreeID(), + site: { + name: this.getSiteName(), + host: this.getHost(), + path: this.getPath(), + isIframe: this.getIsIframe() + } + }); + + if (data.site.name === undefined || data.site.host === undefined || data.site.path === undefined) { + // chill for a sec and see if we can get it in a bit + console.log('waiting for something...'); + setTimeout(function () { + _this.saveInteraction(data).then(_this.response); + }, 100); + return new Promise(function (resolve, reject) {}); + } + + console.log('SaveInteraction sending', data); + + return new Promise(function (resolve, reject) { + + var request = new XMLHttpRequest(); + // request.overrideMimeType("application/json"); + request.open('POST', postURL); + request.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); + + // When the request loads, check whether it was successful + request.onload = function () { + if (request.status === 200) { + // If successful, resolve the promise by passing back the request response + resolve(request); + } else { + // If it fails, reject the promise with a error message + reject(Error('Tree data could not be saved:' + request.statusText)); + } + }; + request.onerror = function () { + // Also deal with the case when the entire request fails to begin with + // This is probably a network error, so reject the promise with an appropriate message + reject(Error('There was a network error.')); + }; + + // Send the request + request.send(JSON.stringify(data)); + }); + }; + + this.response = function (request) { + // response from the server + var data = JSON.parse(request.response); + console.log(data); + }; + + // set the rootURL + _setRootURL(); + + // if a Tree was passed, Do whatever you need to do + if (options.Tree) { + this.build(options.Tree); + } +} + +TreeInteraction.prototype = { + constructor: TreeInteraction, + + build: function build(Tree) { + this.setTree(Tree); + this.init(); + }, + + /** + * Listen to parent Tree's emitted actions and handle accordingly + */ + on: function on(action, data) { + var interaction = void 0; + switch (action) { + case 'ready': + // data will be the tree itself + this.build(data); + break; + case 'setParentSiteName': + console.log('SiteName', this.getSiteName()); + // set the parent site name + this.setSiteName(data.siteName); + console.log('After Set SiteName', this.getSiteName()); + break; + case 'setParentHost': + console.log('Host', this.getHost()); + // set the parent host + this.setHost(data.host); + console.log('After Set Host', this.getHost()); + break; + case 'setParentPath': + console.log('Site Path', this.getPath()); + // set the parent path + this.setPath(data.path); + console.log('After Set Site Path', this.getPath()); + break; + case 'historyCreate': + // history loaded for the first time, so it's our first load + this.saveLoad('load'); + break; + case 'historyReload': + // save the reload + this.saveLoad('reload'); + break; + case 'update': + // if the update is from the TreeHistory, + // ignore it, BC we're already saving their update (forceCurrentState) from the reload/load + if (data.data.observer === 'TreeHistory') { + break; + } + interaction = this.convertUpdateToInteraction(data); + this.saveInteraction(interaction).then(this.response); + break; + case 'overviewOptionInteraction': + interaction = this.convertOverviewOptionToInteraction(data); + this.saveInteraction(interaction).then(this.response); + break; + } + }, + + /** + * Let our Tree know about what actions we did + */ + emit: function emit(action, item, data) { + var Tree = this.getTree(); + switch (action) { + case 'ready': + // tell the Tree to let all the other observers know that the TreeInteraction class is ready + Tree.message(item, data); + break; + case 'saveInteraction': + // tell the Tree to let all the other observers know that we saved data + Tree.message(item, data); + break; + case 'getParentSiteName': + // ask for the parent site name + Tree.message(item, data); + break; + case 'getParentHost': + // ask for the parent host + Tree.message(item, data); + break; + case 'getParentPath': + // ask for the parent path + Tree.message(item, data); + break; + } + }, + + /** + * Saves load or reload from the TreeHistory + * @param loadType (STRING) 'load' or 'reload' + */ + saveLoad: function saveLoad(loadType) { + var Tree = void 0, + data = void 0; + + Tree = this.getTree(); + // build our data + data = {}; + + // set the interaction + data.interaction = { + type: loadType, + id: this.getTree().getTreeID() + + // set the destination (whatever we loaded to) + };data.destination = this.getTree().getState(); + + // save the interaction + this.saveInteraction(data).then(this.response); + }, + + /** + * Takes the data structure from an update state response + * and convertes it into the data structure we need to + * save it on the server. + */ + convertUpdateToInteraction: function convertUpdateToInteraction(update) { + var data = void 0, + interactionType = void 0, + interactionID = void 0, + observer = void 0; + console.log('update', update); + data = {}; + interactionType = update.data.type; + interactionID = false; + observer = update.data.observer; + + data.interaction = {}; + + if (update.data.ID) { + // pass the element ID + interactionID = update.data.ID; + } + // check if it's a history click + else if (observer === 'TreeHistoryView') { + interactionType = 'history'; + } + + data.interaction.type = interactionType; + data.interaction.id = interactionID; + data.destination = update.newState; + + return data; + }, + + /** + * Takes the data structure from the option.data of an + * overviewOptionInteraction and convertes it into the + * data structure we need to save it on the server. + * @param data should be the option_el.data + */ + convertOverviewOptionToInteraction: function convertOverviewOptionToInteraction(data) { + var interactionData = void 0; + + // build data + interactionData = { + interaction: { + id: data.ID, + type: data.type // 'option' + } + + // add the destination (NOT THE QUESTION DESTINATION CUZ WE'RE STILL IN THE OVERVIEW STATE) + // the current tree state will be type: 'overview', id: treeID + };interactionData.destination = this.getTree().getState(); + + return interactionData; + } + +}; +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +/** +* Sends postmessages to the parent iframe if there is one +*/ +function TreePostMessage(options) { + var _Tree; + + // getters + this.getTree = function () { + return _Tree; + }; + + // setters + /** + * Sets the parent Tree + */ + this.setTree = function (Tree) { + // only let it be set once + if (_Tree === undefined) { + _Tree = Tree; + } + return _Tree; + }; + + this.init = function () { + // add our event listener for postmessages + window.addEventListener("message", this.recieveMessage.bind(this), false); + }; + + // if a Tree was passed, Do whatever you need to do + if (options.Tree) { + this.build(options.Tree); + } +} + +TreePostMessage.prototype = { + constructor: TreePostMessage, + + build: function build(Tree) { + this.setTree(Tree); + this.init(); + }, + + /** + * Listen to parent Tree's emitted actions and handle accordingly + */ + on: function on(action, data) { + var _this = this; + + console.log('data', data); + switch (action) { + case 'ready': + // data will be the tree itself + this.build(data); + break; + case 'viewHeightUpdate': + // make a request to get the full treeHeight + // wait til the height animation is finished before we set the finished height + setTimeout(function () { + _this.getTree().message('getTreeHeight', {}); + }, 500); + break; + + } + // pass the message on to the parent + // add the action to our data to pass + data.action = action; + this.postIt(data); + }, + + // send the postmessage + postIt: function postIt(data) { + if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object') { + console.error('PostMessage data is not an object'); + return false; + } + data.treeID = this.getTree().getTreeID(); + console.log('postIt send', data); + + // allow all domains to access this info (*) + parent.postMessage(JSON.stringify(data), "*"); + // if you want to see what was sent + return data; + }, + + recieveMessage: function recieveMessage(event) { + var data = void 0; + // check to make sure we received a string + if (typeof event.data !== 'string') { + return false; + } + // get the data + data = JSON.parse(event.data); + + // send the data out to all the observers + if (data.action !== undefined) { + this.getTree().message(data.action, data); + } + + // see what they want to do + console.log('Iframe Recieved Message', data); + } +}; +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function TreeView(options) { + var _Tree, _container, _treeEl, _contentWindow, _contentPane, _activeEl, _cssPriority; + + if (_typeof(options.container) !== 'object') { + console.error('Tree container must be a valid object. Try `container: document.getElementById(your-id)`.'); + return false; + } + + // getters + this.getContainer = function () { + return _container; + }; + this.getTree = function () { + return _Tree; + }; + this.getTreeEl = function () { + return _treeEl; + }; + this.getActiveEl = function () { + return _activeEl; + }; + this.getContentWindow = function () { + return _contentWindow; + }; + this.getContentPane = function () { + return _contentPane; + }; + this.getCSSPriority = function () { + return _cssPriority; + }; + + // setters + this.setTree = function (Tree) { + // only let it be set once + if (_Tree === undefined) { + _Tree = Tree; + } + return _Tree; + }; + + // setters + this.setTreeEl = function () { + // only let it be set once + if (_treeEl === undefined) { + // this will be the tree rendered by handlebars + _treeEl = _container.firstElementChild; + } + return _treeEl; + }; + + this.setContentWindow = function () { + // only let it be set once + if (_contentWindow === undefined) { + _contentWindow = document.getElementById('cme-tree__content-window--' + _Tree.getTreeID()); + } + return _contentWindow; + }; + + this.setContentPane = function () { + // only let it be set once + if (_contentPane === undefined) { + _contentPane = _contentWindow.firstElementChild; + } + return _contentPane; + }; + + this.setCSSPriority = function (cssPriority) { + // only let it be set once + if (_cssPriority === undefined && (cssPriority === 'important' || cssPriority === '!important')) { + _cssPriority = '!important'; + } else { + _cssPriority = ''; + } + return _cssPriority; + }; + + // Pass a state for it to set to be active + this.setActiveEl = function (state) { + var el = void 0, + elId = void 0; + + console.log(state); + + if (state.type === 'overview' || state.type === 'intro') { + elId = 'cme-tree--' + state.id; + } else { + elId = 'cme-tree__el--' + state.id; + } + // check if classname matches, if we're even going to change anything + if (_activeEl !== undefined && _activeEl.id === elId) { + // do nothing + return _activeEl; + } + // they're trying to set a new state, so let's see if we can + el = document.getElementById(elId); + + console.log(elId, el); + + if ((typeof el === 'undefined' ? 'undefined' : _typeof(el)) !== 'object') { + console.error('Could not set active element for state type ' + state.type + ' with state id ' + state.id); + return false; + } + + // valid (could be more checks, but this is good enough) + // set it + _activeEl = el; + return _activeEl; + }; + + /*********************** + ******** INIT ********* + ***********************/ + // set an active className + this.activeClassName = 'is-active'; + // how long animation classes are applied for until removed + this.animationLength = 500; + // not ideal to pass this, but it's SOOO much faster performance wise + this.scaledSize = 0.65; + // create a stylesheet we can add rules to + this.stylesheet = this.createStylesheet(); + // get the window width for resize checks + this.windowWidth = window.innerWidth; + // set the el + _container = options.container; + // set the priority + this.setCSSPriority(options.cssPriority); + + // attach event listeners to the tree element with + // bound `this` so we get our reference to this element + _container.addEventListener("click", this.click.bind(this)); + _container.addEventListener("keydown", this.keydown.bind(this)); + // add a resize timeout so we know if one is already firing + this.resizeTimeout = null; + window.addEventListener("resize", this.resize.bind(this)); + + // if a Tree was passed, build the view now + if (options.Tree) { + this.build(options.Tree); + } +} + +TreeView.prototype = { + constructor: TreeView, + + /** + * Listen to parent Tree's emitted actions and handle accordingly + */ + on: function on(action, data) { + switch (action) { + case 'ready': + // data will be the tree itself + this.build(data); + break; + case 'update': + this.updateState(data); + break; + // used by PostMessage to get the tree height to pass to the iframe + case 'getTreeHeight': + this.emit('treeHeight', 'treeHeight', { treeHeight: this.getTreeHeight() }); + } + }, + + build: function build(Tree) { + + this.setTree(Tree); + this.render(Tree.getData()); + + // set the tree wrap + this.setContentWindow(); + // set the questions wrap + this.setContentPane(); + // let everyone know the tree view is ready + // emit that we've finished render + this.emit('ready', 'viewReady', this); + // set the current state in the view + var init = true; + // calculate size + this.setState(Tree.getState(), init); + this.updateViewHeight(Tree.getState()); + + // if we don't have any groups calculated, go ahead and calculate to store the values + this.checkForGroupsCalc(); + }, + + render: function render(data) { + // render the tree + var template = window.TreeTemplates.tree; + var treeHTML = template(data); + // set the HTML into the passed container + this.getContainer().innerHTML = treeHTML; + // set the Tree El + this.setTreeEl(); + // bind question data + this.bindAllData(); + }, + + getGroups: function getGroups() { + var treeEl = void 0, + groups = void 0; + + treeEl = this.getTreeEl(); + return treeEl.getElementsByClassName('cme-tree__group'); + }, + + getQuestions: function getQuestions() { + var treeEl = void 0; + + treeEl = this.getTreeEl(); + return treeEl.getElementsByClassName('cme-tree__question'); + }, + + getQuestion: function getQuestion(id) { + return this.getDestination(id); + }, + + getEnds: function getEnds() { + var treeEl = void 0; + + treeEl = this.getTreeEl(); + return treeEl.getElementsByClassName('cme-tree__end'); + }, + + getEnd: function getEnd(id) { + return this.getDestination(id); + }, + + getDestination: function getDestination(destinationID) { + return document.getElementById('cme-tree__el--' + destinationID); + }, + + getOptions: function getOptions(question) { + return question.getElementsByClassName('cme-tree__option-link'); + }, + + getDestinationIcon: function getDestinationIcon(optionID) { + return document.getElementById('cme-tree__destination-icon--' + optionID); + }, + + getStylesheet: function getStylesheet() { + return this.stylesheet; + }, + + // from https://davidwalsh.name/add-rules-stylesheets + createStylesheet: function createStylesheet() { + var style = void 0; + + style = document.createElement('style'); + + // WebKit hack :( + style.appendChild(document.createTextNode("")); + + // Add the + + +
    +
    + + +

    +
    +

    + +
    +

    +

    + +

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

    + '; + if ( $signup->domain . $signup->path == '' ) { + printf( + /* translators: 1: login URL, 2: username, 3: user email, 4: lost password URL */ + __( '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( + /* translators: 1: site URL, 2: username, 3: user email, 4: lost password URL */ + __( 'Your site at %1$s is active. You may now log in to your 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.' ), + sprintf( '%1$s', $signup->domain ), + $signup->user_login, + $signup->user_email, + wp_lostpassword_url() + ); + } + echo '

    '; + } else { + ?> +

    +

    get_error_message(); ?>

    + +

    + +
    +

    user_login ?>

    +

    +
    + + +

    View your site or Log in' ), $url, esc_url( $login_url ) ); + ?>

    + +

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

    + +
    +
    + + +
    +

    + +

    +
    + + + +
    +

    +

    + Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', + 18 + ), + '4.9.6', + number_format_i18n( 18 ) + ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.6' ); + ?> +

    +

    + Version %1$s addressed some security issues and fixed %2$s bug.', + 'Version %1$s addressed some security issues and fixed %2$s bugs.', + 28 + ), + '4.9.5', + number_format_i18n( 28 ) + ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.5' ); + ?> +

    +

    + Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', + 1 + ), + '4.9.4', + number_format_i18n( 1 ) + ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.4' ); + ?> +

    +

    + Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', + 34 + ), + '4.9.3', + number_format_i18n( 34 ) + ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.3' ); + ?> +

    +

    + Version %1$s addressed some security issues and fixed %2$s bug.', + 'Version %1$s addressed some security issues and fixed %2$s bugs.', + 22 + ), + '4.9.2', + number_format_i18n( 22 ) + ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.2' ); + ?> +

    +

    + Version %1$s addressed some security issues and fixed %2$s bug.', + 'Version %1$s addressed some security issues and fixed %2$s bugs.', + 11 + ), + '4.9.1', + number_format_i18n( 11 ) + ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.1' ); + ?> +

    +
    + +
    +
    +

    + +

    +

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

    +
    + +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +
    +

    +
    + +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +
    +

    +
    + +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +
    +

    +
    + +
    +
    +
    + +
    +

    +

    +
    +
    +
    + +
    +

    +

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

    + +

    +

    early tester or getting involved with the Gutenberg project? Contribute on GitHub.' ), + __( 'https://wordpress.org/plugins/gutenberg/' ), + 'https://github.com/WordPress/gutenberg' ); ?>

    +
    + +
    + +
    +

    + +
    +
    +

    +

    Check out the full list.' ), + 'https://make.wordpress.org/core/2017/11/01/improvements-to-the-customize-js-api-in-4-9/' + ); + ?>

    +
    +
    +

    +

    +
    +
    +

    +

    +
    +
    +

    +

    +
    +
    +
    + +
    + +
    + + + + | + + +
    +
    + + + +Version %s addressed one security issue.' ); +/* translators: %s: WordPress version number */ +__( 'Version %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.' ); + +/* translators: %s: Codex URL */ +__( '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..cbef078 --- /dev/null +++ b/wp-admin/admin-ajax.php @@ -0,0 +1,117 @@ + + +
    +
    +
    + + + + +
    + + + diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php new file mode 100644 index 0000000..abbb079 --- /dev/null +++ b/wp-admin/admin-functions.php @@ -0,0 +1,15 @@ +site_name ) ); +} elseif ( is_user_admin() ) { + /* translators: User dashboard screen title. 1: Network name */ + $admin_title = sprintf( __( 'User Dashboard: %s' ), esc_html( get_network()->site_name ) ); +} else { + $admin_title = get_bloginfo( 'name' ); +} + +if ( $admin_title == $title ) { + /* translators: Admin screen title. 1: Admin screen name */ + $admin_title = sprintf( __( '%1$s — WordPress' ), $title ); +} else { + /* translators: Admin screen title. 1: Admin screen name, 2: Network or site name */ + $admin_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $admin_title ); +} + +/** + * Filters the title tag 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(); +?> +<?php echo $admin_title; ?> + + + +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( get_bloginfo( 'version' ) ) ); +$admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', get_bloginfo( '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_user_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'; + +?> + + + + + + + +
    + +
    + + + +
    +set_parentage( $parent_file ); + +?> + +
    +render_screen_meta(); + +if ( is_network_admin() ) { + /** + * Prints network admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'network_admin_notices' ); +} elseif ( is_user_admin() ) { + /** + * Prints user admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'user_admin_notices' ); +} else { + /** + * Prints admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'admin_notices' ); +} + +/** + * Prints 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..d3135f2 --- /dev/null +++ b/wp-admin/admin-post.php @@ -0,0 +1,71 @@ + 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' ) && ! wp_installing() ) + wp_schedule_event(time(), 'daily', 'wp_scheduled_delete'); + +// Schedule Transient cleanup. +if ( ! wp_next_scheduled( 'delete_expired_transients' ) && ! wp_installing() ) { + wp_schedule_event( time(), 'daily', 'delete_expired_transients' ); +} + +set_screen_options(); + +$date_format = __( 'F j, Y' ); +$time_format = __( 'g:i a' ); + +wp_enqueue_script( 'common' ); + +/** + * $pagenow is set in vars.php + * $wp_importers is sometimes set in wp-admin/includes/import.php + * The remaining variables are imported as globals elsewhere, declared as globals here + * + * @global string $pagenow + * @global array $wp_importers + * @global string $hook_suffix + * @global string $plugin_page + * @global string $typenow + * @global string $taxnow + */ +global $pagenow, $wp_importers, $hook_suffix, $plugin_page, $typenow, $taxnow; + +$page_hook = null; + +$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' ) ) { + wp_raise_memory_limit( 'admin' ); +} + +/** + * 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 analogous to the more general {@see '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); + + // Back-compat 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; +} elseif ( isset( $plugin_page ) ) { + $hook_suffix = $plugin_page; +} elseif ( 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. + * + * @ignore + * @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(); +} elseif ( isset( $_GET['import'] ) ) { + + $importer = $_GET['import']; + + if ( ! current_user_can( 'import' ) ) { + wp_die( __( 'Sorry, you are not allowed to import content.' ) ); + } + + 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 $force 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}" ); + + /* + * The following hooks are fired to ensure backward compatibility. + * In all other cases, 'load-' . $pagenow should be used instead. + */ + 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' ); + } elseif( 'term.php' === $pagenow ) { + do_action( 'load-edit-tags.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..2293fde --- /dev/null +++ b/wp-admin/async-upload.php @@ -0,0 +1,108 @@ +post_type ) + wp_die( __( 'Invalid post type.' ) ); + if ( ! current_user_can( 'edit_post', $id ) ) + wp_die( __( 'Sorry, 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 shouldn't ever be empty, but use filename just in case. + $file = get_attached_file( $post->ID ); + $title = $post->post_title ? $post->post_title : wp_basename( $file ); + 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.'), 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']; + + /** + * Filters 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..c2eca11 --- /dev/null +++ b/wp-admin/comment.php @@ -0,0 +1,333 @@ +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( __( 'Invalid comment ID.' ) . sprintf(' ' . __('Go back') . '.', 'javascript:history.go(-1)') ); + + if ( !current_user_can( 'edit_comment', $comment_id ) ) + comment_footer_die( __('Sorry, 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( $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_post_ID; + if ( current_user_can( 'edit_post', $post_id ) ) { + $post_link = ""; + $post_link .= esc_html( get_the_title( $post_id ) ) . ''; + } else { + $post_link = esc_html( get_the_title( $post_id ) ); + } + echo $post_link; + + if ( $comment->comment_parent ) { + $parent = get_comment( $comment->comment_parent ); + $parent_link = esc_url( get_comment_link( $parent ) ); + $name = get_comment_author( $parent ); + printf( + /* translators: %s: comment link */ + ' | ' . __( 'In reply to %s.' ), + '' . $name . '' + ); + } + ?> +
    + comment_post_ID ) ) { + echo '' . $submitted . ''; + } else { + echo $submitted; + } + ?> +
    + +

    comment_ID}" ); ?>">

    +
    + +
    + +

    + + +

    + + + + + +
    + +
    +' . __('Go back') . '.', 'edit-comments.php') ); + if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) + comment_footer_die( __('Sorry, 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 ); + $redir = add_query_arg( array('deleted' => '1'), $redir ); + break; + case 'trashcomment' : + wp_trash_comment( $comment ); + $redir = add_query_arg( array('trashed' => '1', 'ids' => $comment_id), $redir ); + break; + case 'untrashcomment' : + wp_untrash_comment( $comment ); + $redir = add_query_arg( array('untrashed' => '1'), $redir ); + break; + case 'spamcomment' : + wp_spam_comment( $comment ); + $redir = add_query_arg( array('spammed' => '1', 'ids' => $comment_id), $redir ); + break; + case 'unspamcomment' : + wp_unspam_comment( $comment ); + $redir = add_query_arg( array('unspammed' => '1'), $redir ); + break; + case 'approvecomment' : + wp_set_comment_status( $comment, 'approve' ); + $redir = add_query_arg( array( 'approved' => 1 ), $redir ); + break; + case 'unapprovecomment' : + wp_set_comment_status( $comment, 'hold' ); + $redir = add_query_arg( array( 'unapproved' => 1 ), $redir ); + break; + } + + wp_redirect( $redir ); + die; + +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; + + /** + * Filters 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(); + +default: + wp_die( __('Unknown action.') ); + +} // 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..1ec2d67 --- /dev/null +++ b/wp-admin/credits.php @@ -0,0 +1,128 @@ + +
    + +

    + +

    + +
    + + + +
    +'; + /* translators: 1: https://wordpress.org/about/, 2: https://make.wordpress.org/ */ + printf( __( 'WordPress is created by a worldwide team of passionate individuals. Get involved in WordPress.' ), + 'https://wordpress.org/about/', + __( 'https://make.wordpress.org/' ) + ); + echo '

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

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

    \n"; + +echo '

    ' . sprintf( + /* translators: %s: https://make.wordpress.org/ */ + __( 'Want to see your name in lights on this page? Get involved in WordPress.' ), + __( 'https://make.wordpress.org/' ) +) . '

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

    ' . esc_html( $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; + } +} + +?> +
    +
    + a:focus, +#adminmenu .wp-submenu a:hover, +#adminmenu .wp-submenu a:focus { + color: #00b9eb; +} + +#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: #32373c; + 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; + box-shadow: none; + background-color: #32373c; +} + +/* 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: #191e23; + color: #00b9eb; +} + +.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: #0073aa; + 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: 18px; + margin: 0; + padding: 5px 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; + transition: all .1s ease-in-out; +} + +#adminmenu .wp-has-current-submenu ul > li > a, +.folded #adminmenu li.menu-top .wp-submenu > li > a { + padding: 5px 12px; +} + +#adminmenu a.menu-top, +#adminmenu .wp-submenu-head { + font-size: 14px; + font-weight: 400; + line-height: 18px; + padding: 0; +} + +#adminmenu .wp-submenu-head { + display: none; +} + +.folded #adminmenu .wp-menu-name { + position: absolute; + right: -999px; +} + +.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; + background-size: 20px auto; +} + +div.wp-menu-image:before { + color: #a0a5aa; + color: rgba(240,245,250,0.6); + padding: 7px 0; + transition: all .1s ease-in-out; +} + +#adminmenu div.wp-menu-image:before { + color: #a0a5aa; + color: rgba(240,245,250,0.6); +} + +#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, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before { + color: #fff; +} + +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before { + color: #00b9eb; +} + +/* IE8 doesn't redraw the pseudo elements unless you make a change to the content, this restore the initial color after hover */ +.ie8 #adminmenu li.opensub div.wp-menu-image:before { + color: #a0a5aa; +} + +.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; +} + +/* 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: #32373c; +} + +#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; +} + +/* @todo: consider to use a single rule for these counters and the list table comments counters. */ +#adminmenu .awaiting-mod, +#adminmenu .update-plugins { + display: inline-block; + vertical-align: top; + margin: 1px 2px 0 0; + padding: 0 5px; + min-width: 7px; + height: 17px; + border-radius: 11px; + background-color: #ca4a1f; + color: #fff; + font-size: 9px; + line-height: 17px; + text-align: center; + z-index: 26; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #00b9eb; + color: #fff; +} + +#adminmenu li span.count-0 { + display: none; +} + +#collapse-button { + display: block; + width: 100%; + height: 34px; + margin: 0; + border: none; + padding: 0; + position: relative; + overflow: visible; + line-height: 34px; + background: none; + color: #aaa; + cursor: pointer; + outline: 0; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #00b9eb; +} + +#collapse-button .collapse-button-icon, +#collapse-button .collapse-button-label { + /* absolutely positioned to avoid 1px shift in IE when button is pressed */ + display: block; + position: absolute; + top: 0; + right: 0; + line-height: 34px; +} + +#collapse-button .collapse-button-icon { + width: 36px; + height: 34px; +} + +#collapse-button .collapse-button-label { + padding: 0 36px 0 0; +} + +.folded #collapse-button .collapse-button-label { + display: none; +} + +#collapse-button .collapse-button-icon:after { + content: "\f148"; + display: block; + position: relative; + top: 7px; + text-align: center; + font: normal 20px/1 dashicons !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* rtl:ignore */ +.folded #collapse-button .collapse-button-icon:after, +.rtl #collapse-button .collapse-button-icon:after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl.folded #collapse-button .collapse-button-icon:after { + -webkit-transform: none; + transform: none; +} + +#collapse-button .collapse-button-icon:after, +#collapse-button .collapse-button-label { + transition: all .1s ease-in-out; +} + +/** + * Toolbar menu toggle + */ +li#wp-admin-bar-menu-toggle { + display: none; +} + +/* Hide-if-customize for items we can't add classes to */ +.customize-support #menu-appearance a[href="themes.php?page=custom-header"], +.customize-support #menu-appearance a[href="themes.php?page=custom-background"] { + display: none; +} + +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 960px) { + .auto-fold #wpcontent, + .auto-fold #wpfooter { + margin-right: 36px; + } + + .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 { + position: absolute; + right: -999px; + } + + .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 .collapse-button-label { + display: none; + } + + /* rtl:ignore */ + .auto-fold #collapse-button .collapse-button-icon:after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button .collapse-button-icon:after { + -webkit-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 { + position: static; + 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; + 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; + 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: #32373c; + } + + 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; + box-sizing: border-box; + } + + .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #00b9eb; + } +} + +/* 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-rtl.min.css b/wp-admin/css/admin-menu-rtl.min.css new file mode 100644 index 0000000..b44f2a0 --- /dev/null +++ b/wp-admin/css/admin-menu-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap{width:160px;background-color:#23282d}#adminmenuback{position:fixed;top:0;bottom:-120px;z-index:1}#adminmenu{clear:right;margin:12px 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:#82878c;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;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:"\f541"}.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;z-index:9990}#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:#b4b9be;color:rgba(240,245,250,.7)}#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:#00b9eb}#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 .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:#32373c;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;margin-top:0;box-shadow:none;background-color:#32373c}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative;background-color:#191e23;color:#00b9eb}.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:#0073aa;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:18px;margin:0;padding:5px 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;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:5px 12px}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head{display:none}.folded #adminmenu .wp-menu-name{position:absolute;right:-999px}.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;background-size:20px auto}div.wp-menu-image:before{color:#a0a5aa;color:rgba(240,245,250,.6);padding:7px 0;transition:all .1s ease-in-out}#adminmenu div.wp-menu-image:before{color:#a0a5aa;color:rgba(240,245,250,.6)}#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 a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before{color:#00b9eb}.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#a0a5aa}.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}.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:8px solid 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:#32373c}#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}#adminmenu .awaiting-mod,#adminmenu .update-plugins{display:inline-block;vertical-align:top;margin:1px 2px 0 0;padding:0 5px;min-width:7px;height:17px;border-radius:11px;background-color:#ca4a1f;color:#fff;font-size:9px;line-height:17px;text-align:center;z-index:26}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#00b9eb;color:#fff}#adminmenu li span.count-0{display:none}#collapse-button{display:block;width:100%;height:34px;margin:0;border:none;padding:0;position:relative;overflow:visible;line-height:34px;background:0 0;color:#aaa;cursor:pointer;outline:0}#collapse-button:focus,#collapse-button:hover{color:#00b9eb}#collapse-button .collapse-button-icon,#collapse-button .collapse-button-label{display:block;position:absolute;top:0;right:0;line-height:34px}#collapse-button .collapse-button-icon{width:36px;height:34px}#collapse-button .collapse-button-label{padding:0 36px 0 0}.folded #collapse-button .collapse-button-label{display:none}#collapse-button .collapse-button-icon:after{content:"\f148";display:block;position:relative;top:7px;text-align:center;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button .collapse-button-icon:after,.rtl #collapse-button .collapse-button-icon:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button .collapse-button-icon:after{-webkit-transform:none;transform:none}#collapse-button .collapse-button-icon:after,#collapse-button .collapse-button-label{transition:all .1s ease-in-out}.customize-support #menu-appearance a[href="themes.php?page=custom-header"],.customize-support #menu-appearance a[href="themes.php?page=custom-background"],li#wp-admin-bar-menu-toggle{display:none}@media only screen and (max-width:960px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-right:36px}.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{position:absolute;right:-999px}.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}.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 .collapse-button-label{display:none}.auto-fold #collapse-button .collapse-button-icon:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button .collapse-button-icon:after{-webkit-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{position:static;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;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 .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:none;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:#32373c}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:none;text-align:center;text-decoration:none;box-sizing:border-box}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#00b9eb}}@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}} \ No newline at end of file diff --git a/wp-admin/css/admin-menu.css b/wp-admin/css/admin-menu.css new file mode 100644 index 0000000..9c09dac --- /dev/null +++ b/wp-admin/css/admin-menu.css @@ -0,0 +1,924 @@ +#adminmenuback, +#adminmenuwrap, +#adminmenu, +#adminmenu .wp-submenu { + width: 160px; + background-color: #23282d; +} + +#adminmenuback { + position: fixed; + top: 0; + bottom: -120px; + z-index: 1; /* positive z-index to avoid elastic scrolling woes in Safari */ +} + +#adminmenu { + clear: left; + margin: 12px 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: #82878c; /* same as new icons */ + 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; + 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: "\f541"; +} + +.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; + z-index: 9990; +} + +/* 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: #b4b9be; + color: rgba(240,245,250,0.7); +} + +#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: #00b9eb; +} + +#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: #32373c; + 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; + box-shadow: none; + background-color: #32373c; +} + +/* 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: #191e23; + color: #00b9eb; +} + +.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: #0073aa; + 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: 18px; + margin: 0; + padding: 5px 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; + transition: all .1s ease-in-out; +} + +#adminmenu .wp-has-current-submenu ul > li > a, +.folded #adminmenu li.menu-top .wp-submenu > li > a { + padding: 5px 12px; +} + +#adminmenu a.menu-top, +#adminmenu .wp-submenu-head { + font-size: 14px; + font-weight: 400; + line-height: 18px; + padding: 0; +} + +#adminmenu .wp-submenu-head { + display: none; +} + +.folded #adminmenu .wp-menu-name { + position: absolute; + left: -999px; +} + +.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; + background-size: 20px auto; +} + +div.wp-menu-image:before { + color: #a0a5aa; + color: rgba(240,245,250,0.6); + padding: 7px 0; + transition: all .1s ease-in-out; +} + +#adminmenu div.wp-menu-image:before { + color: #a0a5aa; + color: rgba(240,245,250,0.6); +} + +#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, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before { + color: #fff; +} + +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before { + color: #00b9eb; +} + +/* IE8 doesn't redraw the pseudo elements unless you make a change to the content, this restore the initial color after hover */ +.ie8 #adminmenu li.opensub div.wp-menu-image:before { + color: #a0a5aa; +} + +.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; +} + +/* 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: #32373c; +} + +#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; +} + +/* @todo: consider to use a single rule for these counters and the list table comments counters. */ +#adminmenu .awaiting-mod, +#adminmenu .update-plugins { + display: inline-block; + vertical-align: top; + margin: 1px 0 0 2px; + padding: 0 5px; + min-width: 7px; + height: 17px; + border-radius: 11px; + background-color: #ca4a1f; + color: #fff; + font-size: 9px; + line-height: 17px; + text-align: center; + z-index: 26; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #00b9eb; + color: #fff; +} + +#adminmenu li span.count-0 { + display: none; +} + +#collapse-button { + display: block; + width: 100%; + height: 34px; + margin: 0; + border: none; + padding: 0; + position: relative; + overflow: visible; + line-height: 34px; + background: none; + color: #aaa; + cursor: pointer; + outline: 0; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #00b9eb; +} + +#collapse-button .collapse-button-icon, +#collapse-button .collapse-button-label { + /* absolutely positioned to avoid 1px shift in IE when button is pressed */ + display: block; + position: absolute; + top: 0; + left: 0; + line-height: 34px; +} + +#collapse-button .collapse-button-icon { + width: 36px; + height: 34px; +} + +#collapse-button .collapse-button-label { + padding: 0 0 0 36px; +} + +.folded #collapse-button .collapse-button-label { + display: none; +} + +#collapse-button .collapse-button-icon:after { + content: "\f148"; + display: block; + position: relative; + top: 7px; + text-align: center; + font: normal 20px/1 dashicons !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* rtl:ignore */ +.folded #collapse-button .collapse-button-icon:after, +.rtl #collapse-button .collapse-button-icon:after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl.folded #collapse-button .collapse-button-icon:after { + -webkit-transform: none; + transform: none; +} + +#collapse-button .collapse-button-icon:after, +#collapse-button .collapse-button-label { + transition: all .1s ease-in-out; +} + +/** + * Toolbar menu toggle + */ +li#wp-admin-bar-menu-toggle { + display: none; +} + +/* Hide-if-customize for items we can't add classes to */ +.customize-support #menu-appearance a[href="themes.php?page=custom-header"], +.customize-support #menu-appearance a[href="themes.php?page=custom-background"] { + display: none; +} + +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 960px) { + .auto-fold #wpcontent, + .auto-fold #wpfooter { + margin-left: 36px; + } + + .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 { + position: absolute; + left: -999px; + } + + .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 .collapse-button-label { + display: none; + } + + /* rtl:ignore */ + .auto-fold #collapse-button .collapse-button-icon:after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button .collapse-button-icon:after { + -webkit-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 { + position: static; + 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; + 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; + 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: #32373c; + } + + 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; + box-sizing: border-box; + } + + .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #00b9eb; + } +} + +/* 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.min.css b/wp-admin/css/admin-menu.min.css new file mode 100644 index 0000000..1709f16 --- /dev/null +++ b/wp-admin/css/admin-menu.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap{width:160px;background-color:#23282d}#adminmenuback{position:fixed;top:0;bottom:-120px;z-index:1}#adminmenu{clear:left;margin:12px 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:#82878c;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;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:"\f541"}.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;z-index:9990}#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:#b4b9be;color:rgba(240,245,250,.7)}#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:#00b9eb}#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 .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:#32373c;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;margin-top:0;box-shadow:none;background-color:#32373c}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative;background-color:#191e23;color:#00b9eb}.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:#0073aa;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:18px;margin:0;padding:5px 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;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:5px 12px}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head{display:none}.folded #adminmenu .wp-menu-name{position:absolute;left:-999px}.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;background-size:20px auto}div.wp-menu-image:before{color:#a0a5aa;color:rgba(240,245,250,.6);padding:7px 0;transition:all .1s ease-in-out}#adminmenu div.wp-menu-image:before{color:#a0a5aa;color:rgba(240,245,250,.6)}#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 a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before{color:#00b9eb}.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#a0a5aa}.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}.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:8px solid 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:#32373c}#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}#adminmenu .awaiting-mod,#adminmenu .update-plugins{display:inline-block;vertical-align:top;margin:1px 0 0 2px;padding:0 5px;min-width:7px;height:17px;border-radius:11px;background-color:#ca4a1f;color:#fff;font-size:9px;line-height:17px;text-align:center;z-index:26}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#00b9eb;color:#fff}#adminmenu li span.count-0{display:none}#collapse-button{display:block;width:100%;height:34px;margin:0;border:none;padding:0;position:relative;overflow:visible;line-height:34px;background:0 0;color:#aaa;cursor:pointer;outline:0}#collapse-button:focus,#collapse-button:hover{color:#00b9eb}#collapse-button .collapse-button-icon,#collapse-button .collapse-button-label{display:block;position:absolute;top:0;left:0;line-height:34px}#collapse-button .collapse-button-icon{width:36px;height:34px}#collapse-button .collapse-button-label{padding:0 0 0 36px}.folded #collapse-button .collapse-button-label{display:none}#collapse-button .collapse-button-icon:after{content:"\f148";display:block;position:relative;top:7px;text-align:center;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button .collapse-button-icon:after,.rtl #collapse-button .collapse-button-icon:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button .collapse-button-icon:after{-webkit-transform:none;transform:none}#collapse-button .collapse-button-icon:after,#collapse-button .collapse-button-label{transition:all .1s ease-in-out}.customize-support #menu-appearance a[href="themes.php?page=custom-header"],.customize-support #menu-appearance a[href="themes.php?page=custom-background"],li#wp-admin-bar-menu-toggle{display:none}@media only screen and (max-width:960px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-left:36px}.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{position:absolute;left:-999px}.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}.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 .collapse-button-label{display:none}.auto-fold #collapse-button .collapse-button-icon:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button .collapse-button-icon:after{-webkit-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{position:static;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;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 .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:none;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:#32373c}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:none;text-align:center;text-decoration:none;box-sizing:border-box}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#00b9eb}}@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}} \ No newline at end of file diff --git a/wp-admin/css/code-editor-rtl.css b/wp-admin/css/code-editor-rtl.css new file mode 100644 index 0000000..a33caa0 --- /dev/null +++ b/wp-admin/css/code-editor-rtl.css @@ -0,0 +1,72 @@ +.wrap [class*="CodeMirror-lint-marker"], +.wp-core-ui [class*="CodeMirror-lint-message"], +.wrap .CodeMirror-lint-marker-multiple { + background-image: none; +} + +.wp-core-ui .CodeMirror-lint-marker-error, +.wp-core-ui .CodeMirror-lint-marker-warning { + cursor: help; +} + +.wrap .CodeMirror-lint-marker-multiple { + position: absolute; + top: 0; +} + +.wrap [class*="CodeMirror-lint-marker"]:before { + font: normal 18px/1 dashicons; + position: relative; + top: -2px; +} + +.wp-core-ui [class*="CodeMirror-lint-message"]:before { + font: normal 16px/1 dashicons; + right: 16px; + position: absolute; +} + +.wp-core-ui .CodeMirror-lint-message-error, +.wp-core-ui .CodeMirror-lint-message-warning { + box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + margin: 5px 0 2px; + padding: 3px 28px 3px 12px; +} + +.wp-core-ui .CodeMirror-lint-message-warning { + background-color: #fff8e5; + border-right: 4px solid #ffb900; +} + +.wrap .CodeMirror-lint-marker-warning:before, +.wp-core-ui .CodeMirror-lint-message-warning:before { + content: "\f534"; + color: #f6a306; +} + +.wp-core-ui .CodeMirror-lint-message-error { + background-color: #fbeaea; + border-right: 4px solid #dc3232; +} + +.wrap .CodeMirror-lint-marker-error:before, +.wp-core-ui .CodeMirror-lint-message-error:before { + content: "\f153"; + color: #dc3232; +} + +.wp-core-ui .CodeMirror-lint-tooltip { + background: none; + border: none; + border-radius: 0; + direction: rtl; +} + +.wrap .CodeMirror .CodeMirror-matchingbracket { + background: rgba(255, 150, 0, .3); + color: inherit; +} + +.CodeMirror { + text-align: right; +} diff --git a/wp-admin/css/code-editor-rtl.min.css b/wp-admin/css/code-editor-rtl.min.css new file mode 100644 index 0000000..96717e1 --- /dev/null +++ b/wp-admin/css/code-editor-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.wp-core-ui [class*=CodeMirror-lint-message],.wrap .CodeMirror-lint-marker-multiple,.wrap [class*=CodeMirror-lint-marker]{background-image:none}.wp-core-ui .CodeMirror-lint-marker-error,.wp-core-ui .CodeMirror-lint-marker-warning{cursor:help}.wrap .CodeMirror-lint-marker-multiple{position:absolute;top:0}.wrap [class*=CodeMirror-lint-marker]:before{font:400 18px/1 dashicons;position:relative;top:-2px}.wp-core-ui [class*=CodeMirror-lint-message]:before{font:400 16px/1 dashicons;right:16px;position:absolute}.wp-core-ui .CodeMirror-lint-message-error,.wp-core-ui .CodeMirror-lint-message-warning{box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 2px;padding:3px 28px 3px 12px}.wp-core-ui .CodeMirror-lint-message-warning{background-color:#fff8e5;border-right:4px solid #ffb900}.wp-core-ui .CodeMirror-lint-message-warning:before,.wrap .CodeMirror-lint-marker-warning:before{content:"\f534";color:#f6a306}.wp-core-ui .CodeMirror-lint-message-error{background-color:#fbeaea;border-right:4px solid #dc3232}.wp-core-ui .CodeMirror-lint-message-error:before,.wrap .CodeMirror-lint-marker-error:before{content:"\f153";color:#dc3232}.wp-core-ui .CodeMirror-lint-tooltip{background:0 0;border:none;border-radius:0;direction:rtl}.wrap .CodeMirror .CodeMirror-matchingbracket{background:rgba(255,150,0,.3);color:inherit}.CodeMirror{text-align:right} \ No newline at end of file diff --git a/wp-admin/css/code-editor.css b/wp-admin/css/code-editor.css new file mode 100644 index 0000000..3c2f5e5 --- /dev/null +++ b/wp-admin/css/code-editor.css @@ -0,0 +1,72 @@ +.wrap [class*="CodeMirror-lint-marker"], +.wp-core-ui [class*="CodeMirror-lint-message"], +.wrap .CodeMirror-lint-marker-multiple { + background-image: none; +} + +.wp-core-ui .CodeMirror-lint-marker-error, +.wp-core-ui .CodeMirror-lint-marker-warning { + cursor: help; +} + +.wrap .CodeMirror-lint-marker-multiple { + position: absolute; + top: 0; +} + +.wrap [class*="CodeMirror-lint-marker"]:before { + font: normal 18px/1 dashicons; + position: relative; + top: -2px; +} + +.wp-core-ui [class*="CodeMirror-lint-message"]:before { + font: normal 16px/1 dashicons; + left: 16px; + position: absolute; +} + +.wp-core-ui .CodeMirror-lint-message-error, +.wp-core-ui .CodeMirror-lint-message-warning { + box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + margin: 5px 0 2px; + padding: 3px 12px 3px 28px; +} + +.wp-core-ui .CodeMirror-lint-message-warning { + background-color: #fff8e5; + border-left: 4px solid #ffb900; +} + +.wrap .CodeMirror-lint-marker-warning:before, +.wp-core-ui .CodeMirror-lint-message-warning:before { + content: "\f534"; + color: #f6a306; +} + +.wp-core-ui .CodeMirror-lint-message-error { + background-color: #fbeaea; + border-left: 4px solid #dc3232; +} + +.wrap .CodeMirror-lint-marker-error:before, +.wp-core-ui .CodeMirror-lint-message-error:before { + content: "\f153"; + color: #dc3232; +} + +.wp-core-ui .CodeMirror-lint-tooltip { + background: none; + border: none; + border-radius: 0; + direction: ltr; +} + +.wrap .CodeMirror .CodeMirror-matchingbracket { + background: rgba(255, 150, 0, .3); + color: inherit; +} + +.CodeMirror { + text-align: left; +} diff --git a/wp-admin/css/code-editor.min.css b/wp-admin/css/code-editor.min.css new file mode 100644 index 0000000..922f908 --- /dev/null +++ b/wp-admin/css/code-editor.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.wp-core-ui [class*=CodeMirror-lint-message],.wrap .CodeMirror-lint-marker-multiple,.wrap [class*=CodeMirror-lint-marker]{background-image:none}.wp-core-ui .CodeMirror-lint-marker-error,.wp-core-ui .CodeMirror-lint-marker-warning{cursor:help}.wrap .CodeMirror-lint-marker-multiple{position:absolute;top:0}.wrap [class*=CodeMirror-lint-marker]:before{font:400 18px/1 dashicons;position:relative;top:-2px}.wp-core-ui [class*=CodeMirror-lint-message]:before{font:400 16px/1 dashicons;left:16px;position:absolute}.wp-core-ui .CodeMirror-lint-message-error,.wp-core-ui .CodeMirror-lint-message-warning{box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 2px;padding:3px 12px 3px 28px}.wp-core-ui .CodeMirror-lint-message-warning{background-color:#fff8e5;border-left:4px solid #ffb900}.wp-core-ui .CodeMirror-lint-message-warning:before,.wrap .CodeMirror-lint-marker-warning:before{content:"\f534";color:#f6a306}.wp-core-ui .CodeMirror-lint-message-error{background-color:#fbeaea;border-left:4px solid #dc3232}.wp-core-ui .CodeMirror-lint-message-error:before,.wrap .CodeMirror-lint-marker-error:before{content:"\f153";color:#dc3232}.wp-core-ui .CodeMirror-lint-tooltip{background:0 0;border:none;border-radius:0;direction:ltr}.wrap .CodeMirror .CodeMirror-matchingbracket{background:rgba(255,150,0,.3);color:inherit}.CodeMirror{text-align:left} \ No newline at end of file diff --git a/wp-admin/css/color-picker-rtl.css b/wp-admin/css/color-picker-rtl.css new file mode 100644 index 0000000..aca78d9 --- /dev/null +++ b/wp-admin/css/color-picker-rtl.css @@ -0,0 +1,173 @@ +.wp-color-picker { + width: 80px; +} + +.wp-picker-container .hidden { + display: none; +} + +/* Needs higher specificiity. */ +.wp-picker-container .wp-color-result.button { + height: 24px; + margin: 0 0px 6px 6px; + padding: 0 30px 0 0; + font-size: 11px; +} + +.wp-color-result-text { + background: #f7f7f7; + border-radius: 2px 0 0 2px; + border-right: 1px solid #ccc; + color: #555; + display: block; + line-height: 22px; + padding: 0 6px; + text-align: center; +} + +.wp-color-result:hover, +.wp-color-result:focus { + background: #fafafa; + border-color: #999; + color: #23282d; +} + +.wp-color-result:hover:after, +.wp-color-result:focus:after { + color: #23282d; + border-color: #a0a5aa; + border-right: 1px solid #999; +} + +.wp-picker-containers { + display: inline-block; +} + +.wp-color-result:focus { + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); +} + +.wp-color-result:active { + /* See Trac ticket #39662 */ + -webkit-transform: none !important; + transform: none !important; +} + +.wp-picker-open + .wp-picker-input-wrap { + display: inline-block; + vertical-align: top; +} + +.wp-picker-input-wrap label { + display: inline-block; + vertical-align: top; +} + +/* For the old `custom-background` page, to override the inline-block and margins from `.form-table td fieldset label`. */ +.form-table .wp-picker-input-wrap label { + margin: 0 !important; +} + +.wp-picker-input-wrap .button, +.wp-customizer .wp-picker-input-wrap .button { + margin-right: 6px; +} + +.wp-picker-container .iris-square-slider .ui-slider-handle:focus { + background-color: #555 +} + +.wp-picker-container .iris-picker { + border-radius: 0; + border-color: #ddd; + margin-top: 6px; +} + +.wp-picker-container input[type="text"].wp-color-picker { + width: 65px; + font-size: 12px; + font-family: monospace; + line-height: 16px; + margin: 0; + vertical-align: top; +} + +.wp-color-picker::-webkit-input-placeholder { + color: #72777c; +} + +.wp-color-picker::-moz-placeholder { + color: #72777c; + opacity: 1; +} + +.wp-color-picker:-ms-input-placeholder { + color: #72777c; +} + +.wp-picker-container input[type="text"].iris-error { + background-color: #ffebe8; + border-color: #c00; + color: #000; +} + +.iris-picker .ui-square-handle:focus, +.iris-picker .iris-strip .ui-slider-handle:focus { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.iris-picker .iris-palette:focus { + box-shadow: + inset 0 0 5px rgba(0,0,0,.4), + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +@media screen and ( max-width: 782px ) { + .wp-picker-container input[type="text"].wp-color-picker { + width: 80px; + padding: 6px 5px 5px; + font-size: 16px; + line-height: 18px; + } + + .wp-customizer .wp-picker-container input[type="text"].wp-color-picker { + padding: 5px 5px 4px; + } + + .wp-picker-container .wp-color-result.button { + height: auto; + padding: 0 40px 0 0; + font-size: 14px; + line-height: 29px; + } + + .wp-customizer .wp-picker-container .wp-color-result.button { + font-size: 13px; + line-height: 26px; + } + + .wp-picker-container .wp-color-result-text { + padding: 0 14px; + font-size: inherit; + line-height: inherit; + } + + .wp-customizer .wp-picker-container .wp-color-result-text { + padding: 0 10px; + } +} + +@media screen and ( max-width: 640px ) { + .wp-customizer .wp-picker-container .wp-color-result.button { + font-size: 14px; + line-height: 29px; + } + + .wp-customizer .wp-picker-container input[type="text"].wp-color-picker { + padding: 6px 5px; + } +} 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..ad86822 --- /dev/null +++ b/wp-admin/css/color-picker-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.wp-color-picker{width:80px}.wp-picker-container .hidden{display:none}.wp-picker-container .wp-color-result.button{height:24px;margin:0 0 6px 6px;padding:0 30px 0 0;font-size:11px}.wp-color-result-text{background:#f7f7f7;border-radius:2px 0 0 2px;border-right:1px solid #ccc;color:#555;display:block;line-height:22px;padding:0 6px;text-align:center}.wp-color-result:focus,.wp-color-result:hover{background:#fafafa;border-color:#999;color:#23282d}.wp-color-result:focus:after,.wp-color-result:hover:after{color:#23282d;border-color:#a0a5aa;border-right:1px solid #999}.wp-picker-containers{display:inline-block}.wp-color-result:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.wp-color-result:active{-webkit-transform:none!important;transform:none!important}.wp-picker-input-wrap label,.wp-picker-open+.wp-picker-input-wrap{display:inline-block;vertical-align:top}.form-table .wp-picker-input-wrap label{margin:0!important}.wp-customizer .wp-picker-input-wrap .button,.wp-picker-input-wrap .button{margin-right:6px}.wp-picker-container .iris-square-slider .ui-slider-handle:focus{background-color:#555}.wp-picker-container .iris-picker{border-radius:0;border-color:#ddd;margin-top:6px}.wp-picker-container input[type=text].wp-color-picker{width:65px;font-size:12px;font-family:monospace;line-height:16px;margin:0;vertical-align:top}.wp-color-picker::-webkit-input-placeholder{color:#72777c}.wp-color-picker::-moz-placeholder{color:#72777c;opacity:1}.wp-color-picker:-ms-input-placeholder{color:#72777c}.wp-picker-container input[type=text].iris-error{background-color:#ffebe8;border-color:#c00;color:#000}.iris-picker .iris-strip .ui-slider-handle:focus,.iris-picker .ui-square-handle:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.iris-picker .iris-palette:focus{box-shadow:inset 0 0 5px rgba(0,0,0,.4),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}@media screen and (max-width:782px){.wp-picker-container input[type=text].wp-color-picker{width:80px;padding:6px 5px 5px;font-size:16px;line-height:18px}.wp-customizer .wp-picker-container input[type=text].wp-color-picker{padding:5px 5px 4px}.wp-picker-container .wp-color-result.button{height:auto;padding:0 40px 0 0;font-size:14px;line-height:29px}.wp-customizer .wp-picker-container .wp-color-result.button{font-size:13px;line-height:26px}.wp-picker-container .wp-color-result-text{padding:0 14px;font-size:inherit;line-height:inherit}.wp-customizer .wp-picker-container .wp-color-result-text{padding:0 10px}}@media screen and (max-width:640px){.wp-customizer .wp-picker-container .wp-color-result.button{font-size:14px;line-height:29px}.wp-customizer .wp-picker-container input[type=text].wp-color-picker{padding:6px 5px}} \ 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..00d7caf --- /dev/null +++ b/wp-admin/css/color-picker.css @@ -0,0 +1,173 @@ +.wp-color-picker { + width: 80px; +} + +.wp-picker-container .hidden { + display: none; +} + +/* Needs higher specificiity. */ +.wp-picker-container .wp-color-result.button { + height: 24px; + margin: 0 6px 6px 0px; + padding: 0 0 0 30px; + font-size: 11px; +} + +.wp-color-result-text { + background: #f7f7f7; + border-radius: 0 2px 2px 0; + border-left: 1px solid #ccc; + color: #555; + display: block; + line-height: 22px; + padding: 0 6px; + text-align: center; +} + +.wp-color-result:hover, +.wp-color-result:focus { + background: #fafafa; + border-color: #999; + color: #23282d; +} + +.wp-color-result:hover:after, +.wp-color-result:focus:after { + color: #23282d; + border-color: #a0a5aa; + border-left: 1px solid #999; +} + +.wp-picker-containers { + display: inline-block; +} + +.wp-color-result:focus { + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); +} + +.wp-color-result:active { + /* See Trac ticket #39662 */ + -webkit-transform: none !important; + transform: none !important; +} + +.wp-picker-open + .wp-picker-input-wrap { + display: inline-block; + vertical-align: top; +} + +.wp-picker-input-wrap label { + display: inline-block; + vertical-align: top; +} + +/* For the old `custom-background` page, to override the inline-block and margins from `.form-table td fieldset label`. */ +.form-table .wp-picker-input-wrap label { + margin: 0 !important; +} + +.wp-picker-input-wrap .button, +.wp-customizer .wp-picker-input-wrap .button { + margin-left: 6px; +} + +.wp-picker-container .iris-square-slider .ui-slider-handle:focus { + background-color: #555 +} + +.wp-picker-container .iris-picker { + border-radius: 0; + border-color: #ddd; + margin-top: 6px; +} + +.wp-picker-container input[type="text"].wp-color-picker { + width: 65px; + font-size: 12px; + font-family: monospace; + line-height: 16px; + margin: 0; + vertical-align: top; +} + +.wp-color-picker::-webkit-input-placeholder { + color: #72777c; +} + +.wp-color-picker::-moz-placeholder { + color: #72777c; + opacity: 1; +} + +.wp-color-picker:-ms-input-placeholder { + color: #72777c; +} + +.wp-picker-container input[type="text"].iris-error { + background-color: #ffebe8; + border-color: #c00; + color: #000; +} + +.iris-picker .ui-square-handle:focus, +.iris-picker .iris-strip .ui-slider-handle:focus { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.iris-picker .iris-palette:focus { + box-shadow: + inset 0 0 5px rgba(0,0,0,.4), + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +@media screen and ( max-width: 782px ) { + .wp-picker-container input[type="text"].wp-color-picker { + width: 80px; + padding: 6px 5px 5px; + font-size: 16px; + line-height: 18px; + } + + .wp-customizer .wp-picker-container input[type="text"].wp-color-picker { + padding: 5px 5px 4px; + } + + .wp-picker-container .wp-color-result.button { + height: auto; + padding: 0 0 0 40px; + font-size: 14px; + line-height: 29px; + } + + .wp-customizer .wp-picker-container .wp-color-result.button { + font-size: 13px; + line-height: 26px; + } + + .wp-picker-container .wp-color-result-text { + padding: 0 14px; + font-size: inherit; + line-height: inherit; + } + + .wp-customizer .wp-picker-container .wp-color-result-text { + padding: 0 10px; + } +} + +@media screen and ( max-width: 640px ) { + .wp-customizer .wp-picker-container .wp-color-result.button { + font-size: 14px; + line-height: 29px; + } + + .wp-customizer .wp-picker-container input[type="text"].wp-color-picker { + padding: 6px 5px; + } +} diff --git a/wp-admin/css/color-picker.min.css b/wp-admin/css/color-picker.min.css new file mode 100644 index 0000000..d5e49a1 --- /dev/null +++ b/wp-admin/css/color-picker.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.wp-color-picker{width:80px}.wp-picker-container .hidden{display:none}.wp-picker-container .wp-color-result.button{height:24px;margin:0 6px 6px 0;padding:0 0 0 30px;font-size:11px}.wp-color-result-text{background:#f7f7f7;border-radius:0 2px 2px 0;border-left:1px solid #ccc;color:#555;display:block;line-height:22px;padding:0 6px;text-align:center}.wp-color-result:focus,.wp-color-result:hover{background:#fafafa;border-color:#999;color:#23282d}.wp-color-result:focus:after,.wp-color-result:hover:after{color:#23282d;border-color:#a0a5aa;border-left:1px solid #999}.wp-picker-containers{display:inline-block}.wp-color-result:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.wp-color-result:active{-webkit-transform:none!important;transform:none!important}.wp-picker-input-wrap label,.wp-picker-open+.wp-picker-input-wrap{display:inline-block;vertical-align:top}.form-table .wp-picker-input-wrap label{margin:0!important}.wp-customizer .wp-picker-input-wrap .button,.wp-picker-input-wrap .button{margin-left:6px}.wp-picker-container .iris-square-slider .ui-slider-handle:focus{background-color:#555}.wp-picker-container .iris-picker{border-radius:0;border-color:#ddd;margin-top:6px}.wp-picker-container input[type=text].wp-color-picker{width:65px;font-size:12px;font-family:monospace;line-height:16px;margin:0;vertical-align:top}.wp-color-picker::-webkit-input-placeholder{color:#72777c}.wp-color-picker::-moz-placeholder{color:#72777c;opacity:1}.wp-color-picker:-ms-input-placeholder{color:#72777c}.wp-picker-container input[type=text].iris-error{background-color:#ffebe8;border-color:#c00;color:#000}.iris-picker .iris-strip .ui-slider-handle:focus,.iris-picker .ui-square-handle:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.iris-picker .iris-palette:focus{box-shadow:inset 0 0 5px rgba(0,0,0,.4),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}@media screen and (max-width:782px){.wp-picker-container input[type=text].wp-color-picker{width:80px;padding:6px 5px 5px;font-size:16px;line-height:18px}.wp-customizer .wp-picker-container input[type=text].wp-color-picker{padding:5px 5px 4px}.wp-picker-container .wp-color-result.button{height:auto;padding:0 0 0 40px;font-size:14px;line-height:29px}.wp-customizer .wp-picker-container .wp-color-result.button{font-size:13px;line-height:26px}.wp-picker-container .wp-color-result-text{padding:0 14px;font-size:inherit;line-height:inherit}.wp-customizer .wp-picker-container .wp-color-result-text{padding:0 10px}}@media screen and (max-width:640px){.wp-customizer .wp-picker-container .wp-color-result.button{font-size:14px;line-height:29px}.wp-customizer .wp-picker-container input[type=text].wp-color-picker{padding:6px 5px}} \ 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..928670d --- /dev/null +++ b/wp-admin/css/colors/_admin.scss @@ -0,0 +1,493 @@ + +@import 'variables'; +@import 'mixins'; + + +body { + 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, /* deprecated */ +.wrap .page-title-action: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; +} + + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: $menu-collapse-text; +} + +#collapse-button:hover, +#collapse-button:focus { + color: $menu-submenu-focus-text; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: $menu-submenu-focus-text; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: $menu-submenu-focus-text; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: $menu-submenu-focus-text; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: $menu-icon; +} + + +/* 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; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: $highlight-color; +} + + +/* Media */ + +.media-item .bar, +.media-progress-bar div { + background-color: $highlight-color; +} + +.details.attachment { + box-shadow: + inset 0 0 0 3px #fff, + inset 0 0 0 7px $highlight-color; +} + +.attachment.details .check { + background-color: $highlight-color; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px $highlight-color; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px $highlight-color; +} + + +/* Themes */ + +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: $highlight-color; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: $highlight-color; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: $menu-background; +} + +body.more-filters-opened .more-filters { + color: $menu-text; + background-color: $menu-background; +} + +body.more-filters-opened .more-filters:before { + color: $menu-text; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: $menu-highlight-background; + color: $menu-highlight-text; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* 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; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: $menu-submenu-background; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: $menu-icon; +} + +/* TinyMCE */ + +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: $highlight-color; +} diff --git a/wp-admin/css/colors/_mixins.scss b/wp-admin/css/colors/_mixins.scss new file mode 100644 index 0000000..7a764ab --- /dev/null +++ b/wp-admin/css/colors/_mixins.scss @@ -0,0 +1,54 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +@mixin button( $button-color, $text-color: #fff ) { + background: $button-color; + border-color: darken( $button-color, 10% ) darken( $button-color, 15% ) darken( $button-color, 15% ); + color: $text-color; + box-shadow: 0 1px 0 darken( $button-color, 15% ); + text-shadow: 0 -1px 1px darken( $button-color, 15% ), + 1px 0 1px darken( $button-color, 15% ), + 0 1px 1px darken( $button-color, 15% ), + -1px 0 1px darken( $button-color, 15% ); + + &:hover, + &:focus { + background: lighten( $button-color, 3% ); + border-color: darken( $button-color, 15% ); + color: $text-color; + box-shadow: 0 1px 0 darken( $button-color, 15% ); + } + + &:focus { + box-shadow: inset 0 1px 0 darken( $button-color, 10% ), + 0 0 2px 1px #33b3db; + } + + &:active, + &.active, + &.active:focus, + &.active:hover { + background: darken( $button-color, 10% ); + border-color: darken( $button-color, 15% ); + box-shadow: inset 0 2px 0 darken( $button-color, 15% ); + } + + &[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; + } + + &.button-hero { + box-shadow: 0 2px 0 darken( $button-color, 15% ) !important; + &:active { + box-shadow: inset 0 3px 0 darken( $button-color, 15% ) !important; + } + } + +} diff --git a/wp-admin/css/colors/_variables.scss b/wp-admin/css/colors/_variables.scss new file mode 100644 index 0000000..c203f1b --- /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: #23282d !default; +$icon-color: hsl( hue( $base-color ), 7%, 95% ) !default; +$highlight-color: #0073aa !default; +$notification-color: #d54e21 !default; + + +// global + +$body-background: #f1f1f1 !default; + +$link: #0073aa !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..b5d44c5 --- /dev/null +++ b/wp-admin/css/colors/blue/colors-rtl.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e1a948; + border-color: #d39323 #bd831f #bd831f; + color: #fff; + box-shadow: 0 1px 0 #bd831f; + text-shadow: 0 -1px 1px #bd831f, -1px 0 1px #bd831f, 0 1px 1px #bd831f, 1px 0 1px #bd831f; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #e3af55; + border-color: #bd831f; + color: #fff; + box-shadow: 0 1px 0 #bd831f; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #d39323, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #d39323; + border-color: #bd831f; + box-shadow: inset 0 2px 0 #bd831f; +} + +.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: #db9925 !important; + border-color: #bd831f !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #bd831f !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #bd831f !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #e5f8ff; +} + +#collapse-button:hover, +#collapse-button:focus { + 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #fff; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #74b6ce; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #fff; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #fff; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #e5f8ff; +} + +/* 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: #6eb9d4; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6eb9d4; + background-color: #6eb9d4; +} + +#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: #07526c; +} + +.wp-pointer .wp-pointer-content h3:before { + color: #096484; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #096484; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #096484; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #096484; +} + +.attachment.details .check { + background-color: #096484; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #096484; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #096484; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #096484; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #52accc; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #52accc; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #096484; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #e5f8ff; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #096484; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #4796b3; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #e5f8ff; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #096484; +} 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..abbbeec --- /dev/null +++ b/wp-admin/css/colors/blue/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323 #bd831f #bd831f;color:#fff;box-shadow:0 1px 0 #bd831f;text-shadow:0 -1px 1px #bd831f,-1px 0 1px #bd831f,0 1px 1px #bd831f,1px 0 1px #bd831f}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#e3af55;border-color:#bd831f;color:#fff;box-shadow:0 1px 0 #bd831f}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #d39323,0 0 2px 1px #33b3db}.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:#d39323;border-color:#bd831f;box-shadow:inset 0 2px 0 #bd831f}.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:#db9925!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #bd831f!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #bd831f!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#e2ecf1}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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-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:#fff}#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:#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#e5f8ff}#collapse-button:focus,#collapse-button:hover{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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#fff;background:#4796b3}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#fff}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{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:#74b6ce}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#fff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#fff}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#e5f8ff}#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:#6eb9d4}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6eb9d4;background-color:#6eb9d4}#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:#07526c}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #096484}.attachment.details .check{background-color:#096484;box-shadow:0 0 0 1px #fff,0 0 0 2px #096484}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#096484}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#096484}.theme-filter.current,.theme-section.current{border-bottom-color:#52accc}body.more-filters-opened .more-filters{color:#fff;background-color:#52accc}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#096484;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#e5f8ff}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#096484} \ 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..06955e3 --- /dev/null +++ b/wp-admin/css/colors/blue/colors.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e1a948; + border-color: #d39323 #bd831f #bd831f; + color: #fff; + box-shadow: 0 1px 0 #bd831f; + text-shadow: 0 -1px 1px #bd831f, 1px 0 1px #bd831f, 0 1px 1px #bd831f, -1px 0 1px #bd831f; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #e3af55; + border-color: #bd831f; + color: #fff; + box-shadow: 0 1px 0 #bd831f; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #d39323, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #d39323; + border-color: #bd831f; + box-shadow: inset 0 2px 0 #bd831f; +} + +.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: #db9925 !important; + border-color: #bd831f !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #bd831f !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #bd831f !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #e5f8ff; +} + +#collapse-button:hover, +#collapse-button:focus { + 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #fff; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #74b6ce; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #fff; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #fff; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #e5f8ff; +} + +/* 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: #6eb9d4; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6eb9d4; + background-color: #6eb9d4; +} + +#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: #07526c; +} + +.wp-pointer .wp-pointer-content h3:before { + color: #096484; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #096484; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #096484; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #096484; +} + +.attachment.details .check { + background-color: #096484; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #096484; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #096484; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #096484; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #52accc; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #52accc; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #096484; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #e5f8ff; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #096484; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #4796b3; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #e5f8ff; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #096484; +} 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..792845d --- /dev/null +++ b/wp-admin/css/colors/blue/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323 #bd831f #bd831f;color:#fff;box-shadow:0 1px 0 #bd831f;text-shadow:0 -1px 1px #bd831f,1px 0 1px #bd831f,0 1px 1px #bd831f,-1px 0 1px #bd831f}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#e3af55;border-color:#bd831f;color:#fff;box-shadow:0 1px 0 #bd831f}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #d39323,0 0 2px 1px #33b3db}.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:#d39323;border-color:#bd831f;box-shadow:inset 0 2px 0 #bd831f}.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:#db9925!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #bd831f!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #bd831f!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#e2ecf1}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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-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:#fff}#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:#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#e5f8ff}#collapse-button:focus,#collapse-button:hover{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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#fff;background:#4796b3}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#fff}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{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:#74b6ce}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#fff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#fff}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#e5f8ff}#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:#6eb9d4}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6eb9d4;background-color:#6eb9d4}#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:#07526c}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #096484}.attachment.details .check{background-color:#096484;box-shadow:0 0 0 1px #fff,0 0 0 2px #096484}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#096484}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#096484}.theme-filter.current,.theme-section.current{border-bottom-color:#52accc}body.more-filters-opened .more-filters{color:#fff;background-color:#52accc}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#096484;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#e5f8ff}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#096484} \ 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..f393a49 --- /dev/null +++ b/wp-admin/css/colors/coffee/colors-rtl.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #c7a589; + border-color: #b78b66 #ae7d55 #ae7d55; + color: #fff; + box-shadow: 0 1px 0 #ae7d55; + text-shadow: 0 -1px 1px #ae7d55, -1px 0 1px #ae7d55, 0 1px 1px #ae7d55, 1px 0 1px #ae7d55; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #ccad93; + border-color: #ae7d55; + color: #fff; + box-shadow: 0 1px 0 #ae7d55; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #b78b66, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #b78b66; + border-color: #ae7d55; + box-shadow: inset 0 2px 0 #ae7d55; +} + +.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: #d1ccc7 !important; + background: #ba906d !important; + border-color: #ae7d55 !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #ae7d55 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #ae7d55 !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f3f2f1; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #c7a589; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #c7a589; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #c7a589; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #c7a589; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f3f2f1; +} + +/* 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; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #c7a589; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #c7a589; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #c7a589; +} + +.attachment.details .check { + background-color: #c7a589; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #c7a589; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #c7a589; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #c7a589; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #59524c; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #59524c; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #c7a589; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f2f1; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #c7a589; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #46403c; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f3f2f1; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #c7a589; +} 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..ab7b492 --- /dev/null +++ b/wp-admin/css/colors/coffee/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78b66 #ae7d55 #ae7d55;color:#fff;box-shadow:0 1px 0 #ae7d55;text-shadow:0 -1px 1px #ae7d55,-1px 0 1px #ae7d55,0 1px 1px #ae7d55,1px 0 1px #ae7d55}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#ccad93;border-color:#ae7d55;color:#fff;box-shadow:0 1px 0 #ae7d55}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #b78b66,0 0 2px 1px #33b3db}.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:#b78b66;border-color:#ae7d55;box-shadow:inset 0 2px 0 #ae7d55}.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:#d1ccc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #ae7d55!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #ae7d55!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#cdcbc9}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f3f2f1}#collapse-button:focus,#collapse-button:hover{color:#c7a589}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#c7a589;background:#46403c}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#c7a589}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#c7a589}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#c7a589}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f3f2f1}#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 .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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #c7a589}.attachment.details .check{background-color:#c7a589;box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#c7a589}.theme-filter.current,.theme-section.current{border-bottom-color:#59524c}body.more-filters-opened .more-filters{color:#fff;background-color:#59524c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#c7a589;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f3f2f1}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#c7a589} \ 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..2fb55a2 --- /dev/null +++ b/wp-admin/css/colors/coffee/colors.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #c7a589; + border-color: #b78b66 #ae7d55 #ae7d55; + color: #fff; + box-shadow: 0 1px 0 #ae7d55; + text-shadow: 0 -1px 1px #ae7d55, 1px 0 1px #ae7d55, 0 1px 1px #ae7d55, -1px 0 1px #ae7d55; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #ccad93; + border-color: #ae7d55; + color: #fff; + box-shadow: 0 1px 0 #ae7d55; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #b78b66, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #b78b66; + border-color: #ae7d55; + box-shadow: inset 0 2px 0 #ae7d55; +} + +.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: #d1ccc7 !important; + background: #ba906d !important; + border-color: #ae7d55 !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #ae7d55 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #ae7d55 !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f3f2f1; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #c7a589; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #c7a589; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #c7a589; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #c7a589; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f3f2f1; +} + +/* 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; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #c7a589; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #c7a589; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #c7a589; +} + +.attachment.details .check { + background-color: #c7a589; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #c7a589; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #c7a589; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #c7a589; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #59524c; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #59524c; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #c7a589; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f2f1; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #c7a589; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #46403c; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f3f2f1; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #c7a589; +} 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..8de31ca --- /dev/null +++ b/wp-admin/css/colors/coffee/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78b66 #ae7d55 #ae7d55;color:#fff;box-shadow:0 1px 0 #ae7d55;text-shadow:0 -1px 1px #ae7d55,1px 0 1px #ae7d55,0 1px 1px #ae7d55,-1px 0 1px #ae7d55}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#ccad93;border-color:#ae7d55;color:#fff;box-shadow:0 1px 0 #ae7d55}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #b78b66,0 0 2px 1px #33b3db}.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:#b78b66;border-color:#ae7d55;box-shadow:inset 0 2px 0 #ae7d55}.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:#d1ccc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #ae7d55!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #ae7d55!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#cdcbc9}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f3f2f1}#collapse-button:focus,#collapse-button:hover{color:#c7a589}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#c7a589;background:#46403c}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#c7a589}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#c7a589}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#c7a589}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f3f2f1}#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 .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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #c7a589}.attachment.details .check{background-color:#c7a589;box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#c7a589}.theme-filter.current,.theme-section.current{border-bottom-color:#59524c}body.more-filters-opened .more-filters{color:#fff;background-color:#59524c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#c7a589;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f3f2f1}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#c7a589} \ 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..0f8fdd3 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors-rtl.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #a3b745; + border-color: #829237 #727f30 #727f30; + color: #fff; + box-shadow: 0 1px 0 #727f30; + text-shadow: 0 -1px 1px #727f30, -1px 0 1px #727f30, 0 1px 1px #727f30, 1px 0 1px #727f30; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #a9bd4f; + border-color: #727f30; + color: #fff; + box-shadow: 0 1px 0 #727f30; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #829237, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #829237; + border-color: #727f30; + box-shadow: inset 0 2px 0 #727f30; +} + +.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 .button-primary.button-hero { + box-shadow: 0 2px 0 #727f30 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #727f30 !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #ece6f6; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #a3b745; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #a3b745; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #a3b745; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #a3b745; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #ece6f6; +} + +/* 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: #634c84; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #634c84; + background-color: #634c84; +} + +#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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #a3b745; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #a3b745; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #a3b745; +} + +.attachment.details .check { + background-color: #a3b745; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #a3b745; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #a3b745; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #a3b745; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #523f6d; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #523f6d; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #a3b745; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #ece6f6; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #a3b745; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #413256; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #ece6f6; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #a3b745; +} 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..e57241f --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#a3b745;border-color:#829237 #727f30 #727f30;color:#fff;box-shadow:0 1px 0 #727f30;text-shadow:0 -1px 1px #727f30,-1px 0 1px #727f30,0 1px 1px #727f30,1px 0 1px #727f30}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#a9bd4f;border-color:#727f30;color:#fff;box-shadow:0 1px 0 #727f30}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #829237,0 0 2px 1px #33b3db}.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:#829237;border-color:#727f30;box-shadow:inset 0 2px 0 #727f30}.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 .button-primary.button-hero{box-shadow:0 2px 0 #727f30!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #727f30!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#cbc5d3}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#ece6f6}#collapse-button:focus,#collapse-button:hover{color:#a3b745}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#a3b745;background:#413256}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#a3b745}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#a3b745}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#a3b745}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#ece6f6}#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:#634c84}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#634c84;background-color:#634c84}#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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #a3b745}.attachment.details .check{background-color:#a3b745;box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#a3b745}.theme-filter.current,.theme-section.current{border-bottom-color:#523f6d}body.more-filters-opened .more-filters{color:#fff;background-color:#523f6d}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#a3b745;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#ece6f6}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#a3b745} \ 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..d2e8f40 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #a3b745; + border-color: #829237 #727f30 #727f30; + color: #fff; + box-shadow: 0 1px 0 #727f30; + text-shadow: 0 -1px 1px #727f30, 1px 0 1px #727f30, 0 1px 1px #727f30, -1px 0 1px #727f30; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #a9bd4f; + border-color: #727f30; + color: #fff; + box-shadow: 0 1px 0 #727f30; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #829237, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #829237; + border-color: #727f30; + box-shadow: inset 0 2px 0 #727f30; +} + +.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 .button-primary.button-hero { + box-shadow: 0 2px 0 #727f30 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #727f30 !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #ece6f6; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #a3b745; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #a3b745; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #a3b745; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #a3b745; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #ece6f6; +} + +/* 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: #634c84; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #634c84; + background-color: #634c84; +} + +#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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #a3b745; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #a3b745; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #a3b745; +} + +.attachment.details .check { + background-color: #a3b745; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #a3b745; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #a3b745; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #a3b745; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #523f6d; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #523f6d; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #a3b745; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #ece6f6; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #a3b745; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #413256; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #ece6f6; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #a3b745; +} 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..389e097 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#a3b745;border-color:#829237 #727f30 #727f30;color:#fff;box-shadow:0 1px 0 #727f30;text-shadow:0 -1px 1px #727f30,1px 0 1px #727f30,0 1px 1px #727f30,-1px 0 1px #727f30}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#a9bd4f;border-color:#727f30;color:#fff;box-shadow:0 1px 0 #727f30}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #829237,0 0 2px 1px #33b3db}.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:#829237;border-color:#727f30;box-shadow:inset 0 2px 0 #727f30}.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 .button-primary.button-hero{box-shadow:0 2px 0 #727f30!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #727f30!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#cbc5d3}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#ece6f6}#collapse-button:focus,#collapse-button:hover{color:#a3b745}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#a3b745;background:#413256}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#a3b745}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#a3b745}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#a3b745}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#ece6f6}#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:#634c84}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#634c84;background-color:#634c84}#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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #a3b745}.attachment.details .check{background-color:#a3b745;box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#a3b745}.theme-filter.current,.theme-section.current{border-bottom-color:#523f6d}body.more-filters-opened .more-filters{color:#fff;background-color:#523f6d}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#a3b745;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#ece6f6}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#a3b745} \ 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..e474d49 --- /dev/null +++ b/wp-admin/css/colors/light/colors-rtl.css @@ -0,0 +1,520 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f5f5f5; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #04a4cc; + border-color: #037c9a #036881 #036881; + color: #fff; + box-shadow: 0 1px 0 #036881; + text-shadow: 0 -1px 1px #036881, -1px 0 1px #036881, 0 1px 1px #036881, 1px 0 1px #036881; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #04b0db; + border-color: #036881; + color: #fff; + box-shadow: 0 1px 0 #036881; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #037c9a, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #037c9a; + border-color: #036881; + box-shadow: inset 0 2px 0 #036881; +} + +.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 .button-primary.button-hero { + box-shadow: 0 2px 0 #036881 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #036881 !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #777; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #04a4cc; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #04a4cc; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #f7f7f7; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #04a4cc; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #04a4cc; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #999; +} + +/* 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; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #04a4cc; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #04a4cc; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #04a4cc; +} + +.attachment.details .check { + background-color: #04a4cc; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #04a4cc; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #04a4cc; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #04a4cc; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #e5e5e5; +} + +body.more-filters-opened .more-filters { + color: #333; + background-color: #e5e5e5; +} + +body.more-filters-opened .more-filters:before { + color: #333; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #888; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #999; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #888; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #fff; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #999; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #04a4cc; +} + +/* 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..8bb8a5e --- /dev/null +++ b/wp-admin/css/colors/light/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f5f5f5}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a #036881 #036881;color:#fff;box-shadow:0 1px 0 #036881;text-shadow:0 -1px 1px #036881,-1px 0 1px #036881,0 1px 1px #036881,1px 0 1px #036881}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#04b0db;border-color:#036881;color:#fff;box-shadow:0 1px 0 #036881}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #037c9a,0 0 2px 1px #33b3db}.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:#037c9a;border-color:#036881;box-shadow:inset 0 2px 0 #036881}.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 .button-primary.button-hero{box-shadow:0 2px 0 #036881!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #036881!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#686868}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#777}#collapse-button:focus,#collapse-button:hover{color:#04a4cc}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#04a4cc;background:#fff}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#04a4cc}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#ccc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f7f7f7}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#04a4cc}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#04a4cc}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#999}#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 .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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #04a4cc}.attachment.details .check{background-color:#04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#04a4cc}body.more-filters-opened .more-filters{color:#333;background-color:#e5e5e5}body.more-filters-opened .more-filters:before{color:#333}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#888;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#999}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#04a4cc}#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.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop: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{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..92d974f --- /dev/null +++ b/wp-admin/css/colors/light/colors.css @@ -0,0 +1,520 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f5f5f5; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #04a4cc; + border-color: #037c9a #036881 #036881; + color: #fff; + box-shadow: 0 1px 0 #036881; + text-shadow: 0 -1px 1px #036881, 1px 0 1px #036881, 0 1px 1px #036881, -1px 0 1px #036881; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #04b0db; + border-color: #036881; + color: #fff; + box-shadow: 0 1px 0 #036881; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #037c9a, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #037c9a; + border-color: #036881; + box-shadow: inset 0 2px 0 #036881; +} + +.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 .button-primary.button-hero { + box-shadow: 0 2px 0 #036881 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #036881 !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, +.wrap .page-title-action: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; +} + +/* 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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #777; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #04a4cc; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #04a4cc; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #f7f7f7; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #04a4cc; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #04a4cc; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #999; +} + +/* 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; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #04a4cc; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #04a4cc; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #04a4cc; +} + +.attachment.details .check { + background-color: #04a4cc; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #04a4cc; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #04a4cc; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #04a4cc; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #e5e5e5; +} + +body.more-filters-opened .more-filters { + color: #333; + background-color: #e5e5e5; +} + +body.more-filters-opened .more-filters:before { + color: #333; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #888; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #999; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #888; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #fff; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #999; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #04a4cc; +} + +/* 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..31d0fd5 --- /dev/null +++ b/wp-admin/css/colors/light/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f5f5f5}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a #036881 #036881;color:#fff;box-shadow:0 1px 0 #036881;text-shadow:0 -1px 1px #036881,1px 0 1px #036881,0 1px 1px #036881,-1px 0 1px #036881}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#04b0db;border-color:#036881;color:#fff;box-shadow:0 1px 0 #036881}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #037c9a,0 0 2px 1px #33b3db}.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:#037c9a;border-color:#036881;box-shadow:inset 0 2px 0 #036881}.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 .button-primary.button-hero{box-shadow:0 2px 0 #036881!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #036881!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#686868}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#777}#collapse-button:focus,#collapse-button:hover{color:#04a4cc}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#04a4cc;background:#fff}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#04a4cc}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#ccc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f7f7f7}#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 .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#04a4cc}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#04a4cc}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#999}#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 .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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #04a4cc}.attachment.details .check{background-color:#04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#04a4cc}body.more-filters-opened .more-filters{color:#333;background-color:#e5e5e5}body.more-filters-opened .more-filters:before{color:#333}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#888;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#999}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#04a4cc}#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.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop: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{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..ab4230b --- /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..933e5d5 --- /dev/null +++ b/wp-admin/css/colors/midnight/colors-rtl.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e14d43; + border-color: #d02c21 #ba281e #ba281e; + color: #fff; + box-shadow: 0 1px 0 #ba281e; + text-shadow: 0 -1px 1px #ba281e, -1px 0 1px #ba281e, 0 1px 1px #ba281e, 1px 0 1px #ba281e; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #e35950; + border-color: #ba281e; + color: #fff; + box-shadow: 0 1px 0 #ba281e; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #d02c21, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #d02c21; + border-color: #ba281e; + box-shadow: inset 0 2px 0 #ba281e; +} + +.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: #d1c8c7 !important; + background: #d92e23 !important; + border-color: #ba281e !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #ba281e !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #ba281e !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, +.wrap .page-title-action: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; +} + +/* 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: #c3c4c5; +} + +#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: #c3c4c5; +} + +#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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f1f2f3; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #e14d43; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #e14d43; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #c3c4c5; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #e14d43; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #e14d43; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f1f2f3; +} + +/* 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; +} + +/* 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: #c3c4c5; +} + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #e14d43; + border-color: #dd382d; +} + +.wp-pointer .wp-pointer-content h3:before { + color: #e14d43; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #e14d43; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #e14d43; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #e14d43; +} + +.attachment.details .check { + background-color: #e14d43; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #e14d43; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #e14d43; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #e14d43; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #363b3f; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #363b3f; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #e14d43; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f1f2f3; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #e14d43; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #26292c; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f1f2f3; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #e14d43; +} 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..cb3046a --- /dev/null +++ b/wp-admin/css/colors/midnight/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02c21 #ba281e #ba281e;color:#fff;box-shadow:0 1px 0 #ba281e;text-shadow:0 -1px 1px #ba281e,-1px 0 1px #ba281e,0 1px 1px #ba281e,1px 0 1px #ba281e}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#e35950;border-color:#ba281e;color:#fff;box-shadow:0 1px 0 #ba281e}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #d02c21,0 0 2px 1px #33b3db}.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:#d02c21;border-color:#ba281e;box-shadow:inset 0 2px 0 #ba281e}.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:#d1c8c7!important;background:#d92e23!important;border-color:#ba281e!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #ba281e!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #ba281e!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#c3c4c5}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c3c4c5}#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f1f2f3}#collapse-button:focus,#collapse-button:hover{color:#e14d43}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#e14d43;background:#26292c}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#e14d43}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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:#c3c4c5}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f2f3}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#e14d43}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#e14d43}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f2f3}#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 .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:#c3c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43;border-color:#dd382d}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #e14d43}.attachment.details .check{background-color:#e14d43;box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#e14d43}.theme-filter.current,.theme-section.current{border-bottom-color:#363b3f}body.more-filters-opened .more-filters{color:#fff;background-color:#363b3f}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#e14d43;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f2f3}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#e14d43} \ 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..9aa3c57 --- /dev/null +++ b/wp-admin/css/colors/midnight/colors.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e14d43; + border-color: #d02c21 #ba281e #ba281e; + color: #fff; + box-shadow: 0 1px 0 #ba281e; + text-shadow: 0 -1px 1px #ba281e, 1px 0 1px #ba281e, 0 1px 1px #ba281e, -1px 0 1px #ba281e; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #e35950; + border-color: #ba281e; + color: #fff; + box-shadow: 0 1px 0 #ba281e; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #d02c21, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #d02c21; + border-color: #ba281e; + box-shadow: inset 0 2px 0 #ba281e; +} + +.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: #d1c8c7 !important; + background: #d92e23 !important; + border-color: #ba281e !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #ba281e !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #ba281e !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, +.wrap .page-title-action: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; +} + +/* 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: #c3c4c5; +} + +#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: #c3c4c5; +} + +#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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f1f2f3; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #e14d43; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #e14d43; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #c3c4c5; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #e14d43; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #e14d43; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f1f2f3; +} + +/* 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; +} + +/* 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: #c3c4c5; +} + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #e14d43; + border-color: #dd382d; +} + +.wp-pointer .wp-pointer-content h3:before { + color: #e14d43; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #e14d43; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #e14d43; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #e14d43; +} + +.attachment.details .check { + background-color: #e14d43; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #e14d43; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #e14d43; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #e14d43; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #363b3f; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #363b3f; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #e14d43; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f1f2f3; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #e14d43; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #26292c; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f1f2f3; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #e14d43; +} 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..2393a56 --- /dev/null +++ b/wp-admin/css/colors/midnight/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02c21 #ba281e #ba281e;color:#fff;box-shadow:0 1px 0 #ba281e;text-shadow:0 -1px 1px #ba281e,1px 0 1px #ba281e,0 1px 1px #ba281e,-1px 0 1px #ba281e}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#e35950;border-color:#ba281e;color:#fff;box-shadow:0 1px 0 #ba281e}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #d02c21,0 0 2px 1px #33b3db}.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:#d02c21;border-color:#ba281e;box-shadow:inset 0 2px 0 #ba281e}.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:#d1c8c7!important;background:#d92e23!important;border-color:#ba281e!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #ba281e!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #ba281e!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#c3c4c5}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c3c4c5}#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f1f2f3}#collapse-button:focus,#collapse-button:hover{color:#e14d43}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#e14d43;background:#26292c}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#e14d43}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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:#c3c4c5}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f2f3}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#e14d43}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#e14d43}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f2f3}#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 .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:#c3c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43;border-color:#dd382d}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #e14d43}.attachment.details .check{background-color:#e14d43;box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#e14d43}.theme-filter.current,.theme-section.current{border-bottom-color:#363b3f}body.more-filters-opened .more-filters{color:#fff;background-color:#363b3f}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#e14d43;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f2f3}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#e14d43} \ 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..8ca2884 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors-rtl.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #9ebaa0; + border-color: #80a583 #719a74 #719a74; + color: #fff; + box-shadow: 0 1px 0 #719a74; + text-shadow: 0 -1px 1px #719a74, -1px 0 1px #719a74, 0 1px 1px #719a74, 1px 0 1px #719a74; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #a7c0a9; + border-color: #719a74; + color: #fff; + box-shadow: 0 1px 0 #719a74; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #80a583, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #80a583; + border-color: #719a74; + box-shadow: inset 0 2px 0 #719a74; +} + +.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: #86a989 !important; + border-color: #719a74 !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #719a74 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #719a74 !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, +.wrap .page-title-action: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; +} + +/* 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: #d5dde0; +} + +#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: #d5dde0; +} + +#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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f2fcff; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #9ebaa0; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #9ebaa0; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #8f9a9e; +} + +#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: #d5dde0; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #9ebaa0; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #9ebaa0; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f2fcff; +} + +/* 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: #879ea5; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #879ea5; + background-color: #879ea5; +} + +#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: #d5dde0; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #9ebaa0; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #9ebaa0; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #9ebaa0; +} + +.attachment.details .check { + background-color: #9ebaa0; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #9ebaa0; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #9ebaa0; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #9ebaa0; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #738e96; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #738e96; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #9ebaa0; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f2fcff; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #9ebaa0; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #627c83; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f2fcff; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #9ebaa0; +} 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..71871d3 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583 #719a74 #719a74;color:#fff;box-shadow:0 1px 0 #719a74;text-shadow:0 -1px 1px #719a74,-1px 0 1px #719a74,0 1px 1px #719a74,1px 0 1px #719a74}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#a7c0a9;border-color:#719a74;color:#fff;box-shadow:0 1px 0 #719a74}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #80a583,0 0 2px 1px #33b3db}.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:#80a583;border-color:#719a74;box-shadow:inset 0 2px 0 #719a74}.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:#86a989!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #719a74!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #719a74!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#d5dde0}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#d5dde0}#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f2fcff}#collapse-button:focus,#collapse-button:hover{color:#9ebaa0}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#9ebaa0;background:#627c83}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#9ebaa0}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8f9a9e}#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:#d5dde0}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f2fcff}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#9ebaa0}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#9ebaa0}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f2fcff}#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:#879ea5}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879ea5;background-color:#879ea5}#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:#d5dde0}.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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#9ebaa0}.theme-filter.current,.theme-section.current{border-bottom-color:#738e96}body.more-filters-opened .more-filters{color:#fff;background-color:#738e96}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#9ebaa0;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f2fcff}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#9ebaa0} \ 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..2046a95 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #9ebaa0; + border-color: #80a583 #719a74 #719a74; + color: #fff; + box-shadow: 0 1px 0 #719a74; + text-shadow: 0 -1px 1px #719a74, 1px 0 1px #719a74, 0 1px 1px #719a74, -1px 0 1px #719a74; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #a7c0a9; + border-color: #719a74; + color: #fff; + box-shadow: 0 1px 0 #719a74; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #80a583, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #80a583; + border-color: #719a74; + box-shadow: inset 0 2px 0 #719a74; +} + +.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: #86a989 !important; + border-color: #719a74 !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #719a74 !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #719a74 !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, +.wrap .page-title-action: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; +} + +/* 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: #d5dde0; +} + +#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: #d5dde0; +} + +#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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f2fcff; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #9ebaa0; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #9ebaa0; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #8f9a9e; +} + +#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: #d5dde0; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #9ebaa0; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #9ebaa0; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f2fcff; +} + +/* 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: #879ea5; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #879ea5; + background-color: #879ea5; +} + +#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: #d5dde0; +} + +/* 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-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #9ebaa0; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #9ebaa0; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #9ebaa0; +} + +.attachment.details .check { + background-color: #9ebaa0; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #9ebaa0; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #9ebaa0; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #9ebaa0; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #738e96; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #738e96; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #9ebaa0; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f2fcff; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #9ebaa0; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #627c83; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f2fcff; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #9ebaa0; +} 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..a381100 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583 #719a74 #719a74;color:#fff;box-shadow:0 1px 0 #719a74;text-shadow:0 -1px 1px #719a74,1px 0 1px #719a74,0 1px 1px #719a74,-1px 0 1px #719a74}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#a7c0a9;border-color:#719a74;color:#fff;box-shadow:0 1px 0 #719a74}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #80a583,0 0 2px 1px #33b3db}.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:#80a583;border-color:#719a74;box-shadow:inset 0 2px 0 #719a74}.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:#86a989!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #719a74!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #719a74!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#d5dde0}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#d5dde0}#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f2fcff}#collapse-button:focus,#collapse-button:hover{color:#9ebaa0}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#9ebaa0;background:#627c83}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#9ebaa0}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8f9a9e}#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:#d5dde0}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f2fcff}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#9ebaa0}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#9ebaa0}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f2fcff}#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:#879ea5}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879ea5;background-color:#879ea5}#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:#d5dde0}.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-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#9ebaa0}.theme-filter.current,.theme-section.current{border-bottom-color:#738e96}body.more-filters-opened .more-filters{color:#fff;background-color:#738e96}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#9ebaa0;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f2fcff}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#9ebaa0} \ 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..7e227e0 --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors-rtl.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #dd823b; + border-color: #c36922 #ad5d1e #ad5d1e; + color: #fff; + box-shadow: 0 1px 0 #ad5d1e; + text-shadow: 0 -1px 1px #ad5d1e, -1px 0 1px #ad5d1e, 0 1px 1px #ad5d1e, 1px 0 1px #ad5d1e; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #df8a48; + border-color: #ad5d1e; + color: #fff; + box-shadow: 0 1px 0 #ad5d1e; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #c36922, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #c36922; + border-color: #ad5d1e; + box-shadow: inset 0 2px 0 #ad5d1e; +} + +.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: #cc6d23 !important; + border-color: #ad5d1e !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #ad5d1e !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #ad5d1e !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, +.wrap .page-title-action: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; +} + +/* 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: #f1c8c7; +} + +#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: #f1c8c7; +} + +#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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f3f1f1; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #f7e3d3; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #f7e3d3; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #f1c8c7; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #f7e3d3; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #f7e3d3; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f3f1f1; +} + +/* 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: #d66560; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #d66560; + background-color: #d66560; +} + +#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: #f1c8c7; +} + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #dd823b; + border-color: #d97426; +} + +.wp-pointer .wp-pointer-content h3:before { + color: #dd823b; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #dd823b; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #dd823b; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #dd823b; +} + +.attachment.details .check { + background-color: #dd823b; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #dd823b; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #dd823b; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #dd823b; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #cf4944; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #cf4944; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #dd823b; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f1f1; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #dd823b; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #be3631; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f3f1f1; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #dd823b; +} 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..2c28b2a --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36922 #ad5d1e #ad5d1e;color:#fff;box-shadow:0 1px 0 #ad5d1e;text-shadow:0 -1px 1px #ad5d1e,-1px 0 1px #ad5d1e,0 1px 1px #ad5d1e,1px 0 1px #ad5d1e}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#df8a48;border-color:#ad5d1e;color:#fff;box-shadow:0 1px 0 #ad5d1e}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #c36922,0 0 2px 1px #33b3db}.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:#c36922;border-color:#ad5d1e;box-shadow:inset 0 2px 0 #ad5d1e}.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:#cc6d23!important;border-color:#ad5d1e!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #ad5d1e!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #ad5d1e!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#f1c8c7}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#f1c8c7}#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f3f1f1}#collapse-button:focus,#collapse-button:hover{color:#f7e3d3}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#f7e3d3;background:#be3631}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#f7e3d3}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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:#f1c8c7}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f1f1}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#f7e3d3}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#f7e3d3}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f3f1f1}#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:#d66560}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66560;background-color:#d66560}#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:#f1c8c7}.wp-pointer .wp-pointer-content h3{background-color:#dd823b;border-color:#d97426}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #dd823b}.attachment.details .check{background-color:#dd823b;box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#dd823b}.theme-filter.current,.theme-section.current{border-bottom-color:#cf4944}body.more-filters-opened .more-filters{color:#fff;background-color:#cf4944}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#dd823b;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f3f1f1}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#dd823b} \ 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..a0d483b --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors.css @@ -0,0 +1,502 @@ +/*! This file is auto-generated */ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +body { + background: #f1f1f1; +} + +/* Links */ +a { + color: #0073aa; +} + +a:hover, a:active, a:focus { + color: #0096dd; +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: #0096dd; +} + +/* 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: #0096dd; +} + +/* Core UI */ +.wp-core-ui .button-primary { + background: #dd823b; + border-color: #c36922 #ad5d1e #ad5d1e; + color: #fff; + box-shadow: 0 1px 0 #ad5d1e; + text-shadow: 0 -1px 1px #ad5d1e, 1px 0 1px #ad5d1e, 0 1px 1px #ad5d1e, -1px 0 1px #ad5d1e; +} + +.wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #df8a48; + border-color: #ad5d1e; + color: #fff; + box-shadow: 0 1px 0 #ad5d1e; +} + +.wp-core-ui .button-primary:focus { + box-shadow: inset 0 1px 0 #c36922, 0 0 2px 1px #33b3db; +} + +.wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover { + background: #c36922; + border-color: #ad5d1e; + box-shadow: inset 0 2px 0 #ad5d1e; +} + +.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: #cc6d23 !important; + border-color: #ad5d1e !important; + text-shadow: none !important; +} + +.wp-core-ui .button-primary.button-hero { + box-shadow: 0 2px 0 #ad5d1e !important; +} + +.wp-core-ui .button-primary.button-hero:active { + box-shadow: inset 0 3px 0 #ad5d1e !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, +.wrap .page-title-action: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; +} + +/* 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: #f1c8c7; +} + +#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: #f1c8c7; +} + +#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, +#adminmenu a.current:hover div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before, +#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before, +#adminmenu li:hover div.wp-menu-image:before, +#adminmenu li a:focus div.wp-menu-image:before, +#adminmenu li.opensub div.wp-menu-image:before, +.ie8 #adminmenu li.opensub 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-button { + color: #f3f1f1; +} + +#collapse-button:hover, +#collapse-button:focus { + color: #f7e3d3; +} + +/* 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:not(.mobile) .ab-top-menu > li:hover > .ab-item, +#wpadminbar:not(.mobile) .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:not(.mobile) > #wp-toolbar li:hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, +#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color: #f7e3d3; +} + +#wpadminbar:not(.mobile) li:hover .ab-icon:before, +#wpadminbar:not(.mobile) li:hover .ab-item:before, +#wpadminbar:not(.mobile) li:hover .ab-item:after, +#wpadminbar:not(.mobile) 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: #f1c8c7; +} + +#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 .ab-sub-wrapper .menupop.hover > a, +#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 .ab-item:focus .ab-icon:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before, +#wpadminbar li #adminbarsearch.adminbar-focused:before { + color: #f7e3d3; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .quicklinks li a:focus .blavatar, +#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before, +#wpadminbar.mobile .quicklinks .ab-icon:before, +#wpadminbar.mobile .quicklinks .ab-item:before { + color: #f7e3d3; +} + +#wpadminbar.mobile .quicklinks .hover .ab-icon:before, +#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color: #f3f1f1; +} + +/* 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: #d66560; +} + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #d66560; + background-color: #d66560; +} + +#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: #f1c8c7; +} + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #dd823b; + border-color: #d97426; +} + +.wp-pointer .wp-pointer-content h3:before { + color: #dd823b; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color: #dd823b; +} + +/* Media */ +.media-item .bar, +.media-progress-bar div { + background-color: #dd823b; +} + +.details.attachment { + box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #dd823b; +} + +.attachment.details .check { + background-color: #dd823b; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; +} + +.media-selection .attachment.selection.details .thumbnail { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #dd823b; +} + +/* Themes */ +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + background: #dd823b; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + color: #dd823b; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: #cf4944; +} + +body.more-filters-opened .more-filters { + color: #fff; + background-color: #cf4944; +} + +body.more-filters-opened .more-filters:before { + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus { + background-color: #dd823b; + color: #fff; +} + +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + 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; +} + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f1f1; +} + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #dd823b; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #be3631; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color: #f3f1f1; +} + +/* TinyMCE */ +.mce-container.mce-menu .mce-menu-item:hover, +.mce-container.mce-menu .mce-menu-item.mce-selected, +.mce-container.mce-menu .mce-menu-item:focus, +.mce-container.mce-menu .mce-menu-item-normal.mce-active, +.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background: #dd823b; +} 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..c5d093f --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}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:#0096dd}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36922 #ad5d1e #ad5d1e;color:#fff;box-shadow:0 1px 0 #ad5d1e;text-shadow:0 -1px 1px #ad5d1e,1px 0 1px #ad5d1e,0 1px 1px #ad5d1e,-1px 0 1px #ad5d1e}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#df8a48;border-color:#ad5d1e;color:#fff;box-shadow:0 1px 0 #ad5d1e}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #c36922,0 0 2px 1px #33b3db}.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:#c36922;border-color:#ad5d1e;box-shadow:inset 0 2px 0 #ad5d1e}.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:#cc6d23!important;border-color:#ad5d1e!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #ad5d1e!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #ad5d1e!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}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{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-submenu .wp-submenu-head{color:#f1c8c7}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#f1c8c7}#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 a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub 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-button{color:#f3f1f1}#collapse-button:focus,#collapse-button:hover{color:#f7e3d3}#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.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#f7e3d3;background:#be3631}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#f7e3d3}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#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:#f1c8c7}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f1f1}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#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 #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#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:#f7e3d3}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#f7e3d3}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f3f1f1}#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:#d66560}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66560;background-color:#d66560}#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:#f1c8c7}.wp-pointer .wp-pointer-content h3{background-color:#dd823b;border-color:#d97426}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #dd823b}.attachment.details .check{background-color:#dd823b;box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#dd823b}.theme-filter.current,.theme-section.current{border-bottom-color:#cf4944}body.more-filters-opened .more-filters{color:#fff;background-color:#cf4944}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#dd823b;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.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}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f3f1f1}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#dd823b} \ 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..e404826 --- /dev/null +++ b/wp-admin/css/common-rtl.css @@ -0,0 +1,3955 @@ +/* 2 column liquid layout */ +#wpwrap { + height: auto; + min-height: 100%; + width: 100%; + position: relative; + -webkit-font-smoothing: subpixel-antialiased; +} + +#wpcontent { + height: 100%; + padding-right: 20px; +} + +#wpcontent, +#wpfooter { + margin-right: 160px; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-right: 36px; +} + +#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-left { + float: right; + width: 35%; +} + +#col-right { + float: left; + width: 65%; +} + +#col-left .col-wrap { + padding: 0 0 0 6px; +} + +#col-right .col-wrap { + padding: 0 6px 0 0; +} + +/* utility classes */ +.alignleft { + float: right; +} + +.alignright { + float: left; +} + +.textleft { + text-align: right; +} + +.textright { + text-align: left; +} + +.clear { + clear: both; +} + +/* modern clearfix */ +.wp-clearfix:after { + content: ""; + display: table; + clear: both; +} + +/* Hide visually but not from screen readers */ +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */ +} + +.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: #0073aa; + z-index: 100000; + line-height: normal; + 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, +.comment-ays { + border: 1px solid #e5e5e5; + 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, +.comment-ays { + background: #fff; +} + +/* general */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +body { + background: #f1f1f1; + color: #444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 13px; + line-height: 1.4em; + min-width: 600px; +} + +body.iframe { + min-width: 0; + padding-top: 1px; +} + +body.modal-open { + overflow: hidden; +} + +body.mobile.modal-open #wpwrap { + overflow: hidden; + position: fixed; + height: 100%; +} + +iframe, +img { + border: 0; +} + +td { + font-family: inherit; + font-size: inherit; + font-weight: inherit; + line-height: inherit; +} + +/* Any change to the default link style must be applied to button-link too. */ +a { + color: #0073aa; + transition-property: border, background, color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} + +a, +div { + outline: 0; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus, +a:focus .media-icon img, +.wp-person a:focus .gravatar { + color: #124964; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +#adminmenu a:focus, +.screen-reader-text:focus { + box-shadow: none; + 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 { + color: #23282d; + font-size: 2em; + margin: .67em 0; +} + +h2, +h3 { + color: #23282d; + font-size: 1.3em; + margin: 1em 0; +} + +.update-core-php h2 { + margin-top: 2em; +} + +.update-php h2, +.update-messages h2, +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; +} + +/* rtl:ignore */ +.ltr { + direction: ltr; +} + +/* rtl:ignore */ +.code, +code { + font-family: Consolas, Monaco, monospace; + direction: ltr; + unicode-bidi: embed; +} + +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: #555d66; /* #f1f1f1 background */ + font-weight: 400; +} + +.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, +.widefat button.button-link { + text-decoration: none; +} + +.widefat td, +.widefat th { + padding: 8px 10px; +} + +.widefat thead th, +.widefat thead td { + border-bottom: 1px solid #e1e1e1; +} + +.widefat tfoot th, +.widefat tfoot td { + 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, +.widefat thead td, +.widefat tfoot td { + text-align: right; + line-height: 1.3em; + font-size: 14px; +} + +.widefat th input, +.updates-table td input, +.widefat thead td input, +.widefat tfoot td 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 tbody th.check-column { + padding: 9px 0 22px; +} + +.widefat thead td.check-column, +.widefat tbody th.check-column, +.updates-table tbody td.check-column, +.widefat tfoot td.check-column { + padding: 11px 3px 0 0; +} + +.widefat thead td.check-column, +.widefat tfoot td.check-column { + padding-top: 4px; + vertical-align: middle; +} + +.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; +} + +.wrap > h2:first-child, /* Back-compat for pre-4.4 */ +.wrap [class$="icon32"] + h2, /* Back-compat for pre-4.4 */ +.postbox .inside h2, /* Back-compat for pre-4.4 */ +.wrap h1 { + font-size: 23px; + font-weight: 400; + margin: 0; + padding: 9px 0 4px 0; + line-height: 29px; +} + +.wrap h1.wp-heading-inline { + display: inline-block; + margin-left: 5px; +} + +.wp-header-end { + visibility: hidden; + margin: -2px 0 0; +} + +.subtitle { + margin: 0; + padding-right: 25px; + color: #555d66; + font-size: 14px; + font-weight: 400; + line-height: 1; +} + +.wrap .add-new-h2, /* deprecated */ +.wrap .add-new-h2:active, /* deprecated */ +.wrap .page-title-action, +.wrap .page-title-action:active { + margin-right: 4px; + padding: 4px 8px; + position: relative; + top: -3px; + text-decoration: none; + border: none; + border: 1px solid #ccc; + border-radius: 2px; + background: #f7f7f7; + text-shadow: none; + font-weight: 600; + font-size: 13px; + line-height: normal; /* IE8-IE11 need this for buttons */ + color: #0073aa; /* some of these controls are button elements and don't inherit from links */ + cursor: pointer; + outline: 0; +} + +.wrap .wp-heading-inline + .page-title-action { + margin-right: 0; +} + +.wrap .add-new-h2:hover, /* deprecated */ +.wrap .page-title-action:hover { + border-color: #008EC2; + background: #00a0d2; + color: #fff; +} + +/* lower specificity: color needs to be overridden by :hover and :active */ +.page-title-action:focus { + color: #124964; +} + +.wrap .page-title-action:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 ); +} + +.wrap h1.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; + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.sorthelper { + background-color: #ccf3fa; +} + +.ac_match, +.subsubsub a.current { + color: #000; +} + +.striped > tbody > :nth-child(odd), +ul.striped > :nth-child(odd), +.alternate { + background-color: #f9f9f9; +} + +.bar { + background-color: #e8e8e8; + border-left-color: #99d; +} + +/* Helper classes for plugins to leverage the active WordPress color scheme */ + +.highlight { + background-color: #e4f2fd; + color: #000; +} + +.wp-ui-primary { + color: #fff; + background-color: #32373c; +} +.wp-ui-text-primary { + color: #32373c; +} + +.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: #82878c; /* same as new icons */ +} + +/* For emoji replacement images */ +img.emoji { + display: inline !important; + border: none !important; + height: 1em !important; + width: 1em !important; + margin: 0 .07em !important; + vertical-align: -0.1em !important; + background: none !important; + padding: 0 !important; + box-shadow: none !important; +} + +/*------------------------------------------------------------------------------ + 1.0 - Text Styles +------------------------------------------------------------------------------*/ + +.widget .widget-top, +.postbox .hndle, +.stuffbox .hndle, +.control-section .accordion-section-title, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +#your-profile #rich_editing, +.widefat thead th, +.widefat thead td, +.widefat tfoot th, +.widefat tfoot td { + line-height: 1.4em; +} + +.widget .widget-top, +.menu-item-handle { + background: #fafafa; + color: #23282d; +} + +.postbox .hndle, +.stuffbox .hndle { + 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-close:before, +.tagchecklist .ntdelbutton .remove-tag-icon:before, +#bulk-titles div a:before, +.notice-dismiss:before { + background: none; + color: #72777c; + content: "\f153"; + display: block; + font: normal 16px/20px dashicons; + speak: none; + height: 20px; + text-align: center; + width: 20px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.welcome-panel .welcome-panel-close:before { + margin: 0; +} + +#bulk-titles div a:before { + margin: 1px 0; +} + +.tagchecklist .ntdelbutton .remove-tag-icon:before { + margin-right: 2px; + border-radius: 50%; + color: #0073aa; + /* vertically center the icon cross browsers */ + line-height: 1.28; +} + +.tagchecklist .ntdelbutton:focus { + outline: 0; +} + +.welcome-panel .welcome-panel-close:hover:before, +.welcome-panel .welcome-panel-close:focus:before, +.tagchecklist .ntdelbutton:hover .remove-tag-icon:before, +.tagchecklist .ntdelbutton:focus .remove-tag-icon:before, +#bulk-titles div a:hover:before, +#bulk-titles div a:focus:before { + color: #c00; +} + +.tagchecklist .ntdelbutton:focus .remove-tag-icon:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.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, +#delete-link a.delete { + color: #a00; +} + +abbr.required, +span.required, +.file-error, +.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, +#delete-link a.delete:hover { + color: #dc3232; + border: none; +} + +/*------------------------------------------------------------------------------ + 3.0 - Actions +------------------------------------------------------------------------------*/ + +#major-publishing-actions { + padding: 10px; + clear: both; + border-top: 1px solid #ddd; + background: #f5f5f5; +} + +#delete-action { + float: right; + line-height: 28px; +} + +#delete-link { + line-height: 28px; + vertical-align: middle; + text-align: right; + margin-right: 8px; +} + +#delete-link a { + text-decoration: none; +} + +#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; +} + +.misc-pub-filename { + word-wrap: break-word; +} + +#minor-publishing-actions { + padding: 10px 10px 0 10px; + text-align: left; +} + +#save-post { + float: right; +} + +.preview { + float: left; +} + +#sticky-span { + margin-right: 18px; +} + +.approve, +.unapproved .unapprove { + display: none; +} + +.unapproved .approve, +.spam .approve, +.trash .approve { + display: inline; +} + +td.action-links, +th.action-links { + text-align: left; +} + +#misc-publishing-actions .notice { + margin-right: 10px; + margin-left: 10px; +} + +/* Filter bar */ +.wp-filter { + display: inline-block; + position: relative; + box-sizing: border-box; + margin: 12px 0 25px; + padding: 0 10px; + width: 100%; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + border: 1px solid #e5e5e5; + background: #fff; + color: #555; + font-size: 13px; +} + +.wp-filter a { + text-decoration: none; +} + +.filter-count { + display: inline-block; + vertical-align: middle; + min-width: 4em; +} + +.title-count, +.filter-count .count { + display: inline-block; + position: relative; + top: -1px; + padding: 4px 10px; + border-radius: 30px; + background: #72777c; + color: #fff; + font-size: 14px; + font-weight: 600; +} + +/* not a part of filter bar, but derived from it, so here for now */ +.title-count { + display: inline; + top: -3px; + margin-right: 5px; + margin-left: 20px; +} + +.filter-items { + float: right; +} + +.filter-links { + display: inline-block; + margin: 0; +} + +.filter-links li { + display: inline-block; + margin: 0; +} + +.filter-links li > a { + display: inline-block; + margin: 0 10px; + padding: 15px 0; + border-bottom: 4px solid #fff; + color: #666; + cursor: pointer; +} + +.filter-links .current { + box-shadow: none; + border-bottom: 4px solid #666; + color: #23282d; +} + +.filter-links li > a:hover, +.filter-links li > a:focus, +.show-filters .filter-links a.current:hover, +.show-filters .filter-links a.current:focus { + color: #00a0d2; +} + +.wp-filter .search-form { + float: left; + margin: 10px 0; +} + +.wp-filter .search-form input[type="search"] { + margin: 0; + padding: 3px 5px; + width: 280px; + max-width: 100%; + font-size: 16px; + font-weight: 300; + line-height: 1.5; +} + +.wp-filter .search-form select { + margin: 0; + height: 32px; + vertical-align: top; +} + +.wp-filter .search-form.search-plugins { + display: inline-block; +} + +.wp-filter .button.drawer-toggle { + margin: 10px 9px 0; + padding: 0 6px 0 10px; + border-color: transparent; + background-color: transparent; + color: #666; + vertical-align: baseline; + box-shadow: none; +} + +.wp-filter .drawer-toggle:before { + content: "\f111"; + margin: 0 0 0 5px; + color: #72777c; + font: normal 16px/1 dashicons; + vertical-align: text-bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-filter .button.drawer-toggle:hover, +.wp-filter .drawer-toggle:hover:before, +.wp-filter .button.drawer-toggle:focus, +.wp-filter .drawer-toggle:focus:before { + background-color: transparent; + color: #00a0d2; +} + +.wp-filter .button.drawer-toggle:hover, +.wp-filter .button.drawer-toggle:focus:active { + border-color: transparent; +} + +.wp-filter .button.drawer-toggle:focus { + border-color: #5b9dd9; +} + +.wp-filter .button.drawer-toggle:active { + background: transparent; + box-shadow: none; + -webkit-transform: none; + transform: none; +} + +.wp-filter .drawer-toggle.current:before { + color: #fff; +} + +.filter-drawer, +.wp-filter .favorites-form { + display: none; + margin: 0 -20px 0 -10px; + padding: 20px; + border-top: 1px solid #eee; + background: #fafafa; + overflow: hidden; +} + +.show-filters .filter-drawer, +.show-favorites-form .favorites-form { + display: block; +} + +.show-filters .filter-links a.current { + border-bottom: none; +} + +.show-filters .wp-filter .button.drawer-toggle { + border-radius: 2px; + background: #72777c; + color: #fff; +} + +.show-filters .wp-filter .drawer-toggle:hover, +.show-filters .wp-filter .drawer-toggle:focus { + background: rgb(46, 162, 204); +} + +.show-filters .wp-filter .drawer-toggle:before { + color: #fff; +} + +.filter-group { + box-sizing: border-box; + position: relative; + float: right; + margin: 0 0 0 1%; + padding: 20px 10px 10px; + width: 24%; + background: #fff; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +.filter-group legend { + position: absolute; + top: 10px; + display: block; + margin: 0; + padding: 0; + font-size: 1em; + font-weight: 600; +} + +.filter-drawer .filter-group-feature { + margin: 28px 0 0; + list-style-type: none; + font-size: 12px; +} + +.filter-drawer .filter-group-feature input, +.filter-drawer .filter-group-feature label { + line-height: 16px; +} + +.filter-drawer .filter-group-feature input { + position: absolute; + margin: 0; +} + +.filter-group .filter-group-feature label { + display: block; + margin: 14px 23px 14px 0px; +} + +.filter-drawer .buttons { + clear: both; + margin-bottom: 20px; +} + +.filter-drawer .filter-group + .buttons { + margin-bottom: 0; + padding-top: 20px; +} + +.filter-drawer .buttons .button span { + display: inline-block; + opacity: 0.8; + font-size: 12px; + text-indent: 10px; +} + +.wp-filter .button.clear-filters { + display: none; + margin-right: 10px; +} + +.wp-filter .button-link.edit-filters { + padding: 0 5px; + line-height: 28px; +} + +.filtered-by { + display: none; + margin: 0; +} + +.filtered-by > span { + font-weight: 600; +} + +.filtered-by a { + margin-right: 10px; +} + +.filtered-by .tags { + display: inline; +} + +.filtered-by .tag { + margin: 0 5px; + padding: 4px 8px; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; + font-size: 11px; +} + +.filters-applied .filter-group, +.filters-applied .filter-drawer .buttons, +.filters-applied .filter-drawer br { + display: none !important; +} + +.filters-applied .filtered-by { + display: block; +} + +.filters-applied .filter-drawer { + padding: 20px; +} + +.show-filters .favorites-form, +.show-filters .content-filterable, +.show-filters.filters-applied.loading-content .content-filterable, +.loading-content .content-filterable, +.error .content-filterable { + display: none; +} + +.show-filters.filters-applied .content-filterable { + display: block; +} + +.loading-content .spinner { + display: block; + margin: 40px auto 0; + float: none; +} + +@media only screen and (max-width: 1120px) { + .filter-drawer { + border-bottom: 1px solid #eee; + } + + .filter-group { + margin-bottom: 0; + margin-top: 5px; + width: 100%; + } + + .filter-group li { + margin: 10px 0; + } +} + +@media only screen and (max-width: 1000px) { + .filter-items { + float: none; + } + + .wp-filter .media-toolbar-primary, + .wp-filter .media-toolbar-secondary, + .wp-filter .search-form { + float: none; /* Remove float from media-views.css */ + position: relative; + max-width: 100%; + } +} + +@media only screen and (max-width: 782px) { + .filter-group li { + padding: 0; + width: 50%; + } +} + +@media only screen and (max-width: 320px) { + .filter-count { + display: none; + } + + .wp-filter .drawer-toggle { + margin: 10px 0; + } + + .filter-group li, + .wp-filter .search-form input[type="search"] { + width: 100%; + } +} + +/*------------------------------------------------------------------------------ + 4.0 - Notifications +------------------------------------------------------------------------------*/ + +.notice, +div.updated, +div.error { + background: #fff; + border-right: 4px solid #fff; + box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + margin: 5px 15px 2px; + padding: 1px 12px; +} + +div[class="update-message"] { /* back-compat for pre-4.6 */ + padding: 0.5em 0 0.5em 12px; +} + +.notice p, +.notice-title, +div.updated p, +div.error p, +.form-table td .notice p { + margin: 0.5em 0; + padding: 2px; +} + +.error a { + text-decoration: underline; +} + +.updated a { + padding-bottom: 2px; +} + +.notice-alt { + box-shadow: none; +} + +.notice-large { + padding: 10px 20px; +} + +.notice-title { + display: inline-block; + color: #23282d; + font-size: 18px; +} + +.wp-core-ui .notice.is-dismissible { + padding-left: 38px; + position: relative; +} + +.notice-dismiss { + position: absolute; + top: 0; + left: 1px; + border: none; + margin: 0; + padding: 9px; + background: none; + color: #72777c; + cursor: pointer; +} + +.notice-dismiss:hover:before, +.notice-dismiss:active:before, +.notice-dismiss:focus:before { + color: #c00; +} + +.notice-dismiss:focus { + outline: none; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 .notice-dismiss:focus { + outline: 1px solid #5b9dd9; +} + +.notice-success, +div.updated { + border-right-color: #46b450; +} + +.notice-success.notice-alt { + background-color: #ecf7ed; +} + +.notice-warning { + border-right-color: #ffb900; +} + +.notice-warning.notice-alt { + background-color: #fff8e5; +} + +.notice-error, +div.error { + border-right-color: #dc3232; +} + +.notice-error.notice-alt { + background-color: #fbeaea; +} + +.notice-info { + border-right-color: #00a0d2; +} + +.notice-info.notice-alt { + background-color: #e5f5fa; +} + +.update-message p:before, +.updating-message p:before, +.updated-message p:before, +.import-php .updating-message:before, +.button.updating-message:before, +.button.updated-message:before, +.button.installed:before, +.button.installing:before { + display: inline-block; + font: normal 20px/1 'dashicons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.wrap .notice, +.wrap div.updated, +.wrap div.error, +.media-upload-form .notice, +.media-upload-form div.error { + margin: 5px 0 15px; +} + +.wrap #templateside .notice { + display: block; + margin: 0; + padding: 5px 8px; + font-weight: 600; + text-decoration: none; +} + +.wrap #templateside span.notice { + margin-right: -12px; +} + +#templateside li.notice a { + padding: 0; +} + +/* Update icon. */ +.update-message p:before, +.updating-message p:before, +.import-php .updating-message:before, +.button.updating-message:before, +.button.installing:before { + color: #f56e28; + content: "\f463"; +} + +/* Spins the update icon. */ +.updating-message p:before, +.import-php .updating-message:before, +.button.updating-message:before, +.button.installing:before { + -webkit-animation: rotation 2s infinite linear; + animation: rotation 2s infinite linear; +} + +/* Updated icon (check mark). */ +.updated-message p:before, +.installed p:before, +.button.updated-message:before { + color: #79ba49; + content: '\f147'; +} + +/* Error icon. */ +.update-message.notice-error p:before { + color: #dc3232; + content: "\f534"; +} + +.wrap .notice p:before, +.import-php .updating-message:before { + margin-left: 6px; + vertical-align: bottom; +} + +#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; + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +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; +} + +.button.updating-message:before, +.button.updated-message:before, +.button.installed:before, +.button.installing:before { + margin: 3px -2px 0 5px; +} + +.button-primary.updating-message:before { + color: #fff; +} + +.button-primary.updated-message:before { + color: #66c6e4; +} + +.button.updated-message { + transition-property: border, background, color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} + +@media aural { + .wrap .notice p:before, + .button.installing:before, + .button.installed:before, + .update-message p:before { + speak: none; + } +} + + +/* @todo: this does not need its own section anymore */ +/*------------------------------------------------------------------------------ + 6.0 - Admin Header +------------------------------------------------------------------------------*/ +#adminmenu 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-links { + margin: 0 0 0 20px; +} + +/* 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; + 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; + 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 .show-settings { + border: 0; + background: none; + border-radius: 0; + color: #72777c; + line-height: 1.7; + padding: 3px 16px 3px 6px; +} + +#screen-meta-links .show-settings:hover, +#screen-meta-links .show-settings:active, +#screen-meta-links .show-settings:focus { + color: #32373c; +} + +#screen-meta-links .show-settings:active { + box-shadow: none; + -webkit-transform: none; + transform: none; +} + +#screen-meta-links .show-settings: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: #72777c; +} + +#screen-meta-links .screen-meta-active:after { + content: "\f142"; +} + +/* 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, /* Back-compat for old plugins */ +#screen-options-wrap legend, +#contextual-help-wrap h5 { + margin: 0; + padding: 8px 0; + font-size: 13px; + font-weight: 600; +} + +.ie8 #screen-options-wrap legend { + color: inherit; +} + +.metabox-prefs label { + display: inline-block; + padding-left: 15px; + line-height: 30px; +} + +#number-of-columns { + display: inline-block; + vertical-align: middle; + line-height: 30px; +} + +.metabox-prefs input[type=checkbox] { + margin-top: 0; + margin-left: 6px; +} + +.metabox-prefs label input, +.metabox-prefs label input[type=checkbox] { + margin: -4px 0 0 5px; +} + +.metabox-prefs .columns-prefs label input { + margin: -1px 0 0 2px; +} + +.metabox-prefs label a { + display: none; +} + +.metabox-prefs .screen-options input, +.metabox-prefs .screen-options label { + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.metabox-prefs .screen-options .screen-per-page { + margin-left: 15px; +} + +.metabox-prefs .screen-options label { + line-height: 28px; + padding-left: 0; +} + +.screen-options + .screen-options { + margin-top: 10px; +} + +.metabox-prefs .submit { + margin-top: 1em; + padding: 0; +} + +/*------------------------------------------------------------------------------ + 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; + 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: #32373c; +} + +.contextual-help-tabs .active { + padding: 0; + margin: 0 0 0 -1px; + border-right: 2px solid #00a0d2; + background: #f6fbfd; + 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: #32373c; +} + +.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; + box-sizing: border-box; +} + +.widefat th, +.widefat td { + color: #555; +} + +.widefat th, +.widefat thead td, +.widefat tfoot td { + font-weight: 400; +} + +.widefat thead tr th, +.widefat thead tr td, +.widefat tfoot tr th, +.widefat tfoot tr td { + color: #32373c; +} + +.widefat td p { + margin: 2px 0 0.8em; +} + +.widefat p, +.widefat ol, +.widefat ul { + color: #32373c; +} + +.widefat .column-comment p { + margin: 0.6em 0; +} + +.widefat .column-comment ul { + list-style: initial; + margin-right: 2em; +} + +/* Screens with postboxes */ +.postbox-container { + float: right; +} + +.postbox-container .meta-box-sortables { + box-sizing: border-box; +} + +#wpbody-content .metabox-holder { + padding-top: 10px; +} + +.metabox-holder .postbox-container .empty-container { + border: 3px dashed #b4b9be; + height: 250px; + position: relative; +} + +.metabox-holder .postbox-container .empty-container:after { + content: attr(data-emptystring); + margin: auto; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 1em; + width: 200px; + text-align: center; + color: #ccc; + font-size:18px; + display: none; +} + +.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 .widget .widget-top, +.js .postbox .hndle { + cursor: move; +} + +.hndle a { + font-size: 11px; + font-weight: 400; +} + +.postbox .handlediv { + display: none; + float: left; + width: 36px; + height: 36px; + margin: 0; + padding: 0; + border: 0; + background: none; + cursor: pointer; +} + +.js .postbox .handlediv { + display: block; +} + +.sortable-placeholder { + border: 1px dashed #b4b9be; + margin-bottom: 20px; +} + +.postbox, +.stuffbox { + margin-bottom: 20px; + padding: 0; + line-height: 1; +} + +/* user-select is not a part of the CSS standard - may change behavior in the future */ +.postbox .hndle, +.stuffbox .hndle { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.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; + box-shadow: none; +} + +.postbox table.form-table { + margin-bottom: 0; +} + +.postbox table.widefat { + box-shadow: none; +} + +.temp-border { + border: 1px dotted #ccc; +} + +.columns-prefs label { + padding: 0 0 0 10px; +} + +/* @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 20px; + color: #555d66; +} + +#wpfooter p { + font-size: 13px; + margin: 0; + line-height: 20px; +} + +#footer-thankyou { + font-style: italic; +} + +/*------------------------------------------------------------------------------ + 25.0 - Tabbed Admin Screen Interface (Experimental) +------------------------------------------------------------------------------*/ + +.nav-tab { + float: right; + border: 1px solid #ccc; + border-bottom: none; + margin-right: 0.5em; /* half the font size so set the font size properly */ + padding: 5px 10px; + font-size: 14px; + line-height: 24px; + font-weight: 600; + background: #e5e5e5; + color: #555; + text-decoration: none; + white-space: nowrap; +} + +h3 .nav-tab, /* Back-compat for pre-4.4 */ +.nav-tab-small .nav-tab { + padding: 5px 14px; + font-size: 12px; + line-height: 16px; +} + +.nav-tab:hover, +.nav-tab:focus { + background-color: #fff; + color: #444; +} + +.nav-tab-active, +.nav-tab:focus:active { + box-shadow: none; +} + +.nav-tab-active { + margin-bottom: -1px; + color: #444; +} + +.nav-tab-active, +.nav-tab-active:hover, +.nav-tab-active:focus, +.nav-tab-active:focus:active { + border-bottom: 1px solid #f1f1f1; + background: #f1f1f1; + color: #000; +} + +h1.nav-tab-wrapper, /* Back-compat for pre-4.4 */ +.wrap h2.nav-tab-wrapper, /* higher specificity to override .wrap > h2:first-child */ +.nav-tab-wrapper { + border-bottom: 1px solid #ccc; + margin: 0; + padding-top: 9px; + padding-bottom: 0; + line-height: inherit; +} + +/* Back-compat for plugins. Deprecated. Use .wp-clearfix instead. */ +.nav-tab-wrapper:not(.wp-clearfix):after { + content: ""; + display: table; + clear: both; + } + +.ie8 .nav-tab-wrapper { + /* contain floats establishing a new block formatting context */ + display: inline-block; + width: 100%; + vertical-align: top; +} + +/*------------------------------------------------------------------------------ + 26.0 - Misc +------------------------------------------------------------------------------*/ + +.spinner { + background: url(../images/spinner.gif) no-repeat; + background-size: 20px 20px; + display: inline-block; + visibility: hidden; + float: left; + vertical-align: middle; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 4px 10px 0; +} + +.spinner.is-active, +.loading-content .spinner { + visibility: visible; +} + +#template > div { + margin-left: 16em; +} +#template .notice { + margin-top: 1em; + margin-left: 3%; +} +#template .notice p { + width: auto; +} +#template .submit .spinner { + float: none; +} + +.metabox-holder .stuffbox > h3, /* Back-compat for pre-4.4 */ +.metabox-holder .postbox > h3, /* Back-compat for pre-4.4 */ +.metabox-holder h3.hndle, /* Back-compat for pre-4.4 */ +.metabox-holder h2.hndle { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +/* Back-compat for nav-menus screen */ +.nav-menus-php .metabox-holder h3 { + padding: 10px 14px 11px 10px; + line-height: 21px; +} + +#templateside ul li a { + text-decoration: none; +} + +.plugin-install #description, +.plugin-install-network #description { + width: 60%; +} + +table .vers, +table .column-visible, +table .column-rating { + text-align: right; +} + +.attention, +.error-message { + color: #dc3232; + 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 +------------------------------------------------------------------------------*/ +.media-icon { + width: 62px; /* icon + border */ + text-align: center; +} + +.media-icon img { + border: 1px solid #e5e5e5; + border: 1px solid rgba(0, 0, 0, 0.07); +} + +#howto { + font-size: 11px; + margin: 0 5px; + display: block; +} + +.importers { + font-size: 16px; + width: auto; +} + +.importers td { + padding-left: 14px; + line-height: 1.5em; +} + +.importers .import-system { + max-width: 250px; +} + +.importers td.desc { + max-width: 500px; +} + +.importer-title, +.importer-desc, +.importer-action { + display: block; +} + +.importer-title { + color: #000; + font-size: 14px; + font-weight: 400; + margin-bottom: .2em; +} + +.importer-action { + line-height: 20px; /* Same as with .updating-message */ + color: #555; + margin-bottom: 1em; +} + +#post-body #post-body-content #namediv h3, /* Back-compat for pre-4.4 */ +#post-body #post-body-content #namediv h2 { + margin-top: 0; +} + +.edit-comment-author { + font-size: 14px; + line-height: 1.4; + font-weight: 600; + color: #222; + margin: 2px 9px 0 0; +} + +#namediv h3 label, /* Back-compat for pre-4.4 */ +#namediv h2 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: 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: 400; + font-style: normal; + vertical-align: top; + transition: color .1s ease-in 0; + text-align: center; + color: #ffb900; +} + +.star-rating .star-full:before { + content: "\f155"; +} + +.star-rating .star-half:before { + content: "\f459"; +} + +.rtl .star-rating .star-half { + -webkit-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +.star-rating .star-empty:before { + content: "\f154"; +} + +div.action-links { + font-weight: 400; + margin: 6px 0 0; +} + +/* Plugin install thickbox */ +#plugin-information { + background: #fff; + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + height: 100%; + padding: 0; +} + +#plugin-information-scrollable { + overflow: auto; + -webkit-overflow-scrolling: touch; + height: 100%; +} + +#plugin-information-title { + padding: 0 26px; + background: #f5f5f5; + font-size: 22px; + font-weight: 600; + line-height: 56px; + position: relative; + height: 56px; +} + +#plugin-information-title.with-banner { + margin-left: 0; + height: 250px; + background-size: cover; +} + +#plugin-information-title h2 { + font-size: 1em; + font-weight: 600; + padding: 0; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#plugin-information-title.with-banner h2 { + position: relative; + font-family: "Helvetica Neue", sans-serif; + display: inline-block; + font-size: 30px; + line-height: 50px; + box-sizing: border-box; + max-width: 100%; + padding: 0 15px; + margin-top: 174px; + color: #fff; + background: rgba( 30, 30, 30, 0.9 ); + text-shadow: 0 1px 3px rgba( 0, 0, 0, 0.4 ); + box-shadow: 0 0 30px rgba( 255, 255, 255, 0.1 ); + border-radius: 8px; +} + +#plugin-information-title div.vignette { + display: none; +} + +#plugin-information-title.with-banner div.vignette { + position: absolute; + display: block; + top: 0; + right: 0; + height: 250px; + width: 100%; + background: transparent; + box-shadow: inset 0 0 50px 4px rgba( 0, 0, 0, 0.2 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.1 ); +} + +#plugin-information-tabs { + padding: 0 16px; + position: relative; + left: 0; + right: 0; + min-height: 36px; + font-size: 0; + z-index: 1; + border-bottom: 1px solid #ddd; + background: #f3f3f3; +} + +#plugin-information-tabs a { + position: relative; + display: inline-block; + padding: 9px 10px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; + transition: none; +} + +#plugin-information-tabs a.current { + margin: 0 -1px -1px; + background: #fff; + border: 1px solid #ddd; + border-bottom-color: #fff; + padding-top: 8px; + color: #32373c; +} + +#plugin-information-tabs.with-banner a.current { + border-top: none; + padding-top: 9px; +} + +#plugin-information-tabs a:active, +#plugin-information-tabs a:focus { + outline: none; +} + +#plugin-information-content { + overflow: hidden; /* equal height column trick */ + background: #fff; + position: relative; + top: 0; + left: 0; + right: 0; + min-height: 100%; + /* Height of title + tabs + install now */ + min-height: calc( 100% - 152px ); +} + +#plugin-information-content.with-banner { + /* Height of banner + tabs + install now */ + min-height: calc( 100% - 346px ); +} + +#section-holder { + position: relative; + top: 0; + left: 250px; + bottom: 0; + right: 0; + margin-left: 250px; /* FYI box */ + padding: 10px 26px; + margin-bottom: -99939px; /* 60px less than the padding below to accommodate footer */ + padding-bottom: 99999px; /* equal height column trick */ +} + +#section-holder .updated { + margin: 16px 0; +} + +#plugin-information .fyi { + float: left; + position: relative; + top: 0; + left: 0; + padding: 16px; + margin-bottom: -99939px; /* 60px less than the padding below to accommodate footer */ + padding-bottom: 99999px; /* equal height column trick */ + width: 217px; + border-right: 1px solid #ddd; + background: #f3f3f3; + color: #666; +} + +#plugin-information .fyi strong { + color: #444; +} + +#plugin-information .fyi h3 { + font-weight: 600; + 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 .fyi-description { + margin-top: 0; +} + +#plugin-information .counter-container { + margin: 3px 0; +} + +#plugin-information .counter-label { + float: right; + margin-left: 5px; + min-width: 55px; +} + +#plugin-information .counter-back { + height: 17px; + width: 92px; + background-color: #e5e5e5; + float: right; +} + +#plugin-information .counter-bar { + height: 17px; + background-color: #ffc733; /* slightly lighter than stars due to larger expanse */ + float: right; +} + +#plugin-information .counter-count { + margin-right: 5px; +} + +#plugin-information .fyi ul.contributors { + margin-top: 10px; +} + +#plugin-information .fyi ul.contributors li { + display: inline-block; + margin-left: 8px; + vertical-align: middle; +} + +#plugin-information .fyi ul.contributors li { + display: inline-block; + margin-left: 8px; + vertical-align: middle; +} + +#plugin-information .fyi ul.contributors li img { + vertical-align: middle; + margin-left: 4px; +} + +#plugin-information-footer { + padding: 13px 16px; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 33px; /* 33+13+13+1=60 */ + border-top: 1px solid #ddd; + background: #f3f3f3; +} + +/* rtl:ignore */ +#plugin-information .section { + direction: ltr; +} + +/* rtl:ignore */ +#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; + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 ); +} + +/* rtl:ignore */ +#plugin-information #section-screenshots li p { + font-style: italic; + padding-left: 20px; +} + +#plugin-information pre { + padding: 7px; + overflow: auto; + border: 1px solid #ccc; +} + +#plugin-information blockquote { + border-right: 2px solid #ddd; + color: #666; + font-style: italic; + margin: 1em 0; + padding: 0 1em 0 0; +} + +/* rtl:ignore */ +#plugin-information .review { + overflow: hidden; /* clearfix */ + width: 100%; + margin-bottom: 20px; + border-bottom: 1px solid #e5e5e5; +} + +#plugin-information .review-title-section { + overflow: hidden; /* clearfix */ +} + +/* rtl:ignore */ +#plugin-information .review-title-section h4 { + display: inline-block; + float: left; + margin: 0 6px 0 0; +} + +#plugin-information .reviewer-info p { + clear: both; + margin: 0; + padding-top: 2px; +} + +/* rtl:ignore */ +#plugin-information .reviewer-info .avatar { + float: left; + margin: 4px 6px 0 0; +} + +/* rtl:ignore */ +#plugin-information .reviewer-info .star-rating { + float: left; +} + +/* rtl:ignore */ +#plugin-information .review-meta { + float: left; + margin-left: 0.75em; +} + +/* rtl:ignore */ +#plugin-information .review-body { + float: left; + width: 100%; +} + +.plugin-version-author-uri { + font-size: 13px; +} + +/* For non-js plugin installation screen ticket #36430. */ +.update-php .button.button-primary { + margin-left: 1em; +} + +@media screen and ( max-width: 771px ) { + #plugin-information-title.with-banner { + height: 100px; + } + + #plugin-information-title.with-banner h2 { + margin-top: 30px; + font-size: 20px; + line-height: 40px; + max-width: 85%; + } + + #plugin-information-title.with-banner div.vignette { + height: 100px; + } + + #plugin-information-tabs { + overflow: hidden; /* clearfix */ + padding: 0; + height: auto; /* let tabs wrap */ + } + + #plugin-information-tabs a.current { + margin-bottom: 0; + border-bottom: none; + } + + #plugin-information .fyi { + float: none; + border: 1px solid #ddd; + position: static; + width: auto; + margin: 26px 26px 0; + padding-bottom: 0; /* reset from the two column height fix */ + } + + #section-holder { + position: static; + margin: 0; + padding-bottom: 70px; /* reset from the two column height fix, plus accommodate footer */ + } + + #plugin-information .fyi h3, + #plugin-information .fyi small { + display: none; + } + + #plugin-information-footer { + padding: 12px 16px 0; + height: 46px; + } +} + +/* Thickbox for the Plugin details modal. */ +#TB_window.plugin-details-modal { + background: #fcfcfc; +} + +#TB_window.plugin-details-modal.thickbox-loading:before { + content: ""; + display: block; + width: 20px; + height: 20px; + position: absolute; + right: 50%; + top: 50%; + z-index: -1; + margin: -10px -10px 0 0; + background: #fcfcfc url(../images/spinner.gif) no-repeat center; + background-size: 20px 20px; + -webkit-transform: translateZ(0); + transform: translateZ(0); +} + +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + #TB_window.plugin-details-modal.thickbox-loading:before { + background-image: url(../images/spinner-2x.gif); + } +} + +.plugin-details-modal #TB_title { + float: right; + height: 1px; +} + +.plugin-details-modal #TB_ajaxWindowTitle { + display: none; +} + +.plugin-details-modal #TB_closeWindowButton { + right: auto; + left: -30px; + color: #eee; +} + +.plugin-details-modal #TB_closeWindowButton:hover, +.plugin-details-modal #TB_closeWindowButton:focus { + color: #00a0d2; + outline: none; + box-shadow: none; +} + +.plugin-details-modal .tb-close-icon { + display: none; +} + +.plugin-details-modal #TB_closeWindowButton:after { + content: "\f335"; + font: normal 32px/29px 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* move plugin install close icon to top on narrow screens */ +@media screen and ( max-width: 830px ) { + .plugin-details-modal #TB_closeWindowButton { + left: 0; + top: -30px; + } +} + +/* @todo: move this. */ +img { + border: none; +} + +/* Metabox collapse arrow indicators */ +.sidebar-name .toggle-indicator:before, +.js .meta-box-sortables .postbox .toggle-indicator:before, +.bulk-action-notice .toggle-indicator:before, +.privacy-text-box .toggle-indicator:before { + content: "\f142"; + display: inline-block; + font: normal 20px/1 dashicons; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.js .widgets-holder-wrap.closed .toggle-indicator:before, +.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before, +.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before, +.privacy-text-box.closed .toggle-indicator:before { + content: "\f140"; +} + +.js .postbox .handlediv .toggle-indicator:before { + margin-top: 4px; + width: 20px; + border-radius: 50%; + text-indent: -1px; /* account for the dashicon alignment */ +} + +.rtl.js .postbox .handlediv .toggle-indicator:before { + text-indent: 1px; /* account for the dashicon alignment */ +} + +.bulk-action-notice .toggle-indicator:before { + line-height: 16px; + vertical-align: top; + color: #72777c; +} + +.js .postbox .handlediv:focus { + box-shadow: none; + outline: none; +} + +.js .postbox .handlediv:focus .toggle-indicator:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +/* @todo: appears to be Press This only and overridden */ +#photo-add-url-div input[type="text"] { + width: 300px; +} + +/* Theme/Plugin Editor */ +.alignleft h2 { + margin: 0; +} + +#template textarea { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + background: #f9f9f9; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +#template textarea, +#template .CodeMirror { + width: 100%; + min-height: 60vh; + height: calc( 100vh - 295px ); + border: 1px solid #ddd; + box-sizing: border-box; +} + +#templateside > h2 { + padding-top: 6px; + padding-bottom: 7px; + margin: 0; +} + +#templateside ol, +#templateside ul { + margin: 0; + padding: 0; +} +#templateside > ul { + box-sizing: border-box; + margin-top: 0; + overflow: auto; + padding: 0; + min-height: 60vh; + height: calc(100vh - 295px); + background-color: #f7f7f7; + border: 1px solid #ddd; + border-right: none; +} +#templateside ul ul { + padding-right: 12px; +} +#templateside > ul > li > ul[role=group] { + padding-right: 0; +} + +/* + * Styles for Theme and Plugin editors. + */ + +/* Hide collapsed items. */ +[role="treeitem"][aria-expanded="false"] > ul { + display: none; +} + +/* Use arrow dashicons for folder states, but hide from screen readers. */ +[role="treeitem"] span[aria-hidden] { + display: inline; + font-family: dashicons; + font-size: 20px; + position: absolute; + pointer-events: none; +} +[role="treeitem"][aria-expanded="false"] > .folder-label .icon:after { + content: "\f141"; +} +[role="treeitem"][aria-expanded="true"] > .folder-label .icon:after { + content: "\f140"; +} +[role="treeitem"] .folder-label { + display: block; + padding: 3px 12px 3px 3px; + cursor: pointer; +} + +/* Remove outline, and create our own focus and hover styles */ +[role="treeitem"] { + outline: 0; +} +[role="treeitem"] .folder-label.focus { + color: #124964; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); +} +[role="treeitem"].hover, +[role="treeitem"] .folder-label.hover { + background-color: #eaeaea; +} + +.tree-folder { + margin: 0; + position: relative; +} +[role="treeitem"] li { + position: relative; +} + +/* Styles for folder indicators/depth */ +.tree-folder .tree-folder::after { + content: ' '; + display: block; + position: absolute; + right: 2px; + border-right: 1px solid #ccc; + top: -13px; + bottom: 10px; +} +.tree-folder > li::before { + content: ' '; + position: absolute; + display: block; + border-right: 1px solid #ccc; + right: 2px; + top: -5px; + height: 18px; + width: 7px; + border-bottom: 1px solid #ccc; +} +.tree-folder > li::after { + content: ' '; + position: absolute; + display: block; + border-right: 1px solid #ccc; + right: 2px; + bottom: -7px; + top: 0; +} + +/* current-file needs to adjustment for .notice styles */ +#templateside .current-file { + margin: -4px 0 -2px; +} +.tree-folder > .current-file::before { + right: 4px; + height: 15px; + width: 0px; + border-right: none; + top: 3px; +} +.tree-folder > .current-file::after { + bottom: -4px; + height: 7px; + right: 2px; + top: auto; +} + +/* Lines shouldn't continue on last item */ +.tree-folder > li:last-child::after, +.tree-folder li:last-child > .tree-folder::after { + display: none; +} + + +#theme-plugin-editor-label { + display: inline-block; + margin-bottom: 1em; + font-weight: 600; +} + +/* rtl:ignore */ +#template textarea, +#docs-list { + direction: ltr; +} + +.fileedit-sub #theme, +.fileedit-sub #plugin { + max-width: 40%; +} +.fileedit-sub .alignright { + text-align: left; +} + +#template p { + width: 97%; +} + +#file-editor-linting-error { + margin-top: 1em; + margin-bottom: 1em; +} +#file-editor-linting-error > .notice { + margin: 0; + display: inline-block; +} +#file-editor-linting-error > .notice > p { + width: auto; +} +#template .submit { + margin-top: 1em; + padding: 0; +} + +#template .submit input[type=submit][disabled] { + cursor: not-allowed; +} +#templateside { + float: left; + width: 16em; + word-wrap: break-word; +} + +#postcustomstuff p.submit { + margin: 0; +} + +#templateside h4 { + margin: 1em 0 0; +} + +#templateside li { + margin: 4px 0; +} + +#templateside li:not(.howto) a, +.theme-editor-php .highlight { + display: block; + padding: 3px 12px 3px 0; + text-decoration: none; +} + +#templateside li:not(.howto) > a:first-of-type { + padding-top: 0; +} + +#templateside li.howto { + padding: 6px 12px 12px 12px; +} + +.theme-editor-php .highlight { + margin: -3px -12px -3px 3px; +} + +#templateside .highlight { + border: none; + font-weight: 600; +} + +.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%; +} + +#file-editor-warning .file-editor-warning-content { + margin: 25px; +} + +/* @todo: can we use a common class for these? */ +.nav-menus-php .item-edit:before, +.widget-top .widget-action .toggle-indicator:before, +.control-section .accordion-section-title:after, +.accordion-section-title:after { + content: "\f140"; + font: normal 20px/1 dashicons; + speak: none; + display: block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.widget-top .widget-action .toggle-indicator:before { + padding: 1px 0px 1px 2px; + border-radius: 50%; +} + +.handlediv, +.postbox .handlediv.button-link, +.item-edit, +.toggle-indicator, +.accordion-section-title:after { + color: #72777c; +} + +.widget-action { + color: #555d66; /* #fafafa background in the Widgets screen */ +} + +.widget-top:hover .widget-action, +.widget-action:focus, +.handlediv:hover, +.handlediv:focus, +.postbox .handlediv.button-link:hover, +.postbox .handlediv.button-link:focus, +.item-edit:hover, +.item-edit:focus, +.sidebar-name:hover .toggle-indicator, +.accordion-section-title:hover:after { + color: #23282d; +} + +.widget-top .widget-action:focus .toggle-indicator:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30,140,190,.8); +} + +.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, +.widget.open .widget-top .widget-action .toggle-indicator:before { + content: "\f142"; +} + +/*! + * jQuery UI Draggable/Sortable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ +.ui-draggable-handle, +.ui-sortable-handle { + touch-action: none; +} + +/* Accordion */ +.accordion-section { + border-bottom: 1px solid #ddd; + margin: 0; +} + +.accordion-section.open .accordion-section-content, +.no-js .accordion-section .accordion-section-content { + display: block; +} + +.accordion-section.open:hover { + border-bottom-color: #ddd; +} + +.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 #ddd; + border-left: 1px solid #ddd; + -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: #a0a5aa transparent; +} + +.cannot-expand .accordion-section-title { + cursor: auto; +} + +.cannot-expand .accordion-section-title:after { + display: none; +} + +.control-section .accordion-section-title, +.customize-pane-child .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, +.customize-pane-child .accordion-section-title:after { + top: calc(50% - 10px); /* Arrow height is 20px, so use half of that to vertically center */ +} + +.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: #23282d; + background: #f5f5f5; +} + +.control-section.open .accordion-section-title { + /* When expanded */ + border-bottom: 1px solid #ddd; +} + +/* Edit Site */ +.network-admin .edit-site-actions { + margin-top: 0; +} + +/* My Sites */ +.my-sites { + display: block; + overflow: auto; + zoom: 1; +} + +.my-sites li { + display: block; + padding: 8px 3%; + min-height: 130px; + margin: 0; +} + +@media only screen and (max-width: 599px) { + .my-sites li { + min-height: 0; + } +} + +@media only screen and (min-width: 600px) { + .my-sites.striped li { + background-color: #fff; + position: relative; + } + .my-sites.striped li:after { + content: ""; + width: 1px; + height: 100%; + position: absolute; + top: 0; + left: 0; + background: #ccc; + } + +} +@media only screen and (min-width: 600px) and (max-width: 699px) { + .my-sites li{ + float: right; + width: 44%; + } + .my-sites.striped li { + background-color: #fff; + } + .my-sites.striped li:nth-of-type(2n+1) { + clear: right; + } + .my-sites.striped li:nth-of-type(2n+2):after { + content: none; + } + .my-sites li:nth-of-type(4n+1), + .my-sites li:nth-of-type(4n+2) { + background-color: #f9f9f9; + } + +} + +@media only screen and (min-width: 700px) and (max-width: 1199px) { + .my-sites li { + float: right; + width: 27.333333%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(3n+3):after { + content: none; + } + .my-sites li:nth-of-type(6n+1), + .my-sites li:nth-of-type(6n+2), + .my-sites li:nth-of-type(6n+3) { + background-color: #f9f9f9; + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .my-sites li { + float: right; + width: 21%; + padding: 8px 2%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(4n+1) { + clear: right; + } + .my-sites.striped li:nth-of-type(4n+4):after { + content: none; + } + .my-sites li:nth-of-type(8n+1), + .my-sites li:nth-of-type(8n+2), + .my-sites li:nth-of-type(8n+3), + .my-sites li:nth-of-type(8n+4) { + background-color: #f9f9f9; + } +} + +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .my-sites li { + float: right; + width: 16%; + padding: 8px 2%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(5n+1) { + clear: right; + } + .my-sites.striped li:nth-of-type(5n+5):after { + content: none; + } + .my-sites li:nth-of-type(10n+1), + .my-sites li:nth-of-type(10n+2), + .my-sites li:nth-of-type(10n+3), + .my-sites li:nth-of-type(10n+4), + .my-sites li:nth-of-type(10n+5) { + background-color: #f9f9f9; + } +} + +@media only screen and (min-width: 1600px) { + .my-sites li { + float: right; + width: 12.666666%; + padding: 8px 2%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(6n+1) { + clear: right; + } + .my-sites.striped li:nth-of-type(6n+6):after { + content: none; + } + .my-sites li:nth-of-type(12n+1), + .my-sites li:nth-of-type(12n+2), + .my-sites li:nth-of-type(12n+3), + .my-sites li:nth-of-type(12n+4), + .my-sites li:nth-of-type(12n+5), + .my-sites li:nth-of-type(12n+6) { + background-color: #f9f9f9; + } +} + +.my-sites li a { + text-decoration: none; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-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; + 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 .widget-action, + .widget-top .widget-action:hover, + .sidebar-name .toggle-indicator, + .sidebar-name:hover .toggle-indicator, + .meta-box-sortables .postbox:hover .handlediv, + #bulk-titles div a, + #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; + } + + #wpcontent { + position: relative; + margin-right: 0; + padding-right: 10px; + } + + #wpbody-content { + padding-bottom: 100px; + } + + .wrap { + margin-left: 12px; + margin-right: 0; + } + + /* categories */ + #col-left, + #col-right { + float: none; + width: auto; + } + + #col-left .col-wrap, + #col-right .col-wrap { + padding: 0; + } + + /* Hidden Elements */ + #screen-meta, + #screen-meta-links, + #collapse-menu, + .post-format-select { + display: none !important; + } + + .wrap h1.wp-heading-inline { + margin-bottom: 0.5em; + } + + .wrap .add-new-h2, /* deprecated */ + .wrap .add-new-h2:active, /* deprecated */ + .wrap .page-title-action, + .wrap .page-title-action:active { + padding: 10px 15px; + font-size: 14px; + white-space: nowrap; + } + + /* Feedback Messages */ + .notice, + .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%; + } + + .wp-core-ui .notice.is-dismissible { + padding-left: 46px; + } + + .notice-dismiss { + padding: 13px; + } + + .wrap .icon32 + h2 { + margin-top: -2px; + } + + .wp-responsive-open #wpbody { + left: -16em; + } + + code { + word-wrap: break-word; + } + + /* General Metabox */ + .postbox { + font-size: 14px; + } + + .metabox-holder h3.hndle, /* Back-compat for pre-4.4 */ + .metabox-holder .stuffbox > h3, /* Back-compat for pre-4.4 */ + .metabox-holder .postbox > h3, /* Back-compat for pre-4.4 */ + .metabox-holder h2 { + padding: 12px; + } + + .postbox .handlediv { + margin-top: 3px; + } + + /* Subsubsub Nav */ + .subsubsub { + font-size: 16px; + text-align: center; + margin-bottom: 15px; + } + + /* Theme/Plugin File Editor */ + + #template textarea, + #template .CodeMirror { + box-sizing: border-box; + } + + #templateside { + float: none; + width: auto; + } + + #templateside > ul { + border-right: 1px solid #ddd; + } + + #templateside li { + margin: 0; + } + + #templateside li:not(.howto) a { + display: block; + padding: 5px; + } + #templateside li.howto { + padding: 12px; + } + + #templateside .highlight { + padding: 5px; + margin-right: -5px; + margin-top: -5px; + } + + #template > div, + #template .notice { + float: none; + margin: 1em 0; + width: auto; + } + + #template .CodeMirror, + #template textarea { + width: 100%; + } + + #templateside ul ul { + padding-right: 1.5em; + } + [role="treeitem"] .folder-label { + display: block; + padding: 5px; + } + .tree-folder > li::before, + .tree-folder > li::after, + .tree-folder .tree-folder::after { + right: -8px; + } + .tree-folder > li::before { + top: 0px; + height: 13px; + } + .tree-folder > .current-file::before { + right: -5px; + top: 7px; + width: 4px; + } + .tree-folder > .current-file::after { + height: 9px; + right: -8px; + } + .wrap #templateside span.notice { + margin-right: -5px; + width: 100%; + } + + .fileedit-sub .alignright { + float: right; + margin-top: 15px; + width: 100%; + text-align: right; + } + + .fileedit-sub .alignright label { + display: block; + } + + .fileedit-sub #theme, + .fileedit-sub #plugin { + margin-right: 0; + max-width: 70%; + } + + .fileedit-sub input[type="submit"] { + margin-bottom: 0px; + padding: 8px 18px; + } + + #documentation label[for="docs-list"] { + display: block; + } + + #documentation select[name="docs-list"] { + margin-right: 0; + max-width: 60%; + } + + #documentation input[type="button"] { + margin-bottom: 0; + padding: 8px 18px; + } + + #wpfooter { + display: none; + } + + #comments-form .checkforspam { + display: none; + } + + .edit-comment-author { + margin: 2px 0 0; + } + + .filter-drawer .filter-group-feature input, + .filter-drawer .filter-group-feature label { + line-height: 25px; + } + + .filter-drawer .filter-group-feature label { + margin-right: 32px; + } + + .wp-filter .button.drawer-toggle { + font-size: 13px; + line-height: 26px; + height: 28px; + } +} + +/* 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; + } + + h1.nav-tab-wrapper, + .wrap h2.nav-tab-wrapper, + .nav-tab-wrapper { + border-bottom: 0; + } + + h1 .nav-tab, + h2 .nav-tab, + h3 .nav-tab { + margin: 10px 0 0 10px; + border-bottom: 1px solid #ccc; + } +} + +@media screen and (max-width: 320px) { + /* Prevent default center alignment and larger font for the Right Now widget when + the network dashboard is viewed on a small mobile device. */ + #network_dashboard_right_now .subsubsub { + font-size: 14px; + text-align: right; + } +} diff --git a/wp-admin/css/common-rtl.min.css b/wp-admin/css/common-rtl.min.css new file mode 100644 index 0000000..c3a9bc4 --- /dev/null +++ b/wp-admin/css/common-rtl.min.css @@ -0,0 +1,9 @@ +/*! This file is auto-generated */ +.button.updated-message,a{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading,.spinner,.wp-header-end{visibility:hidden}.filter-group,.postbox-container .meta-box-sortables,.wp-filter,html.wp-toolbar{box-sizing:border-box}#docs-list,#plugin-information .section,#template textarea,.code,.ltr,code{direction:ltr}#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-right:20px}#wpcontent,#wpfooter{margin-right:160px}.folded #wpcontent,.folded #wpfooter{margin-right:36px}#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-left{float:right;width:35%}#col-right{float:left;width:65%}#col-left .col-wrap{padding:0 0 0 6px}#col-right .col-wrap{padding:0 6px 0 0}.alignleft{float:right}.alignright{float:left}#publishing-action .spinner,#save-post,.subsubsub{float:right}.textleft{text-align:right}.textright{text-align:left}.clear{clear:both}.wp-clearfix:after{content:"";display:table;clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#templateside,.misc-pub-filename,.pre,.widefat *{word-wrap:break-word}.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:#0073aa;z-index:100000;line-height:normal;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,.comment-ays,.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;box-shadow:0 1px 1px rgba(0,0,0,.04)}.comment-ays,.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}body{background:#f1f1f1;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;position:fixed;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0073aa}a,div{outline:0}a:active,a:hover{color:#00a0d2}.wp-person a:focus .gravatar,a:focus,a:focus .media-icon img{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}h1,h2,h3{color:#23282d}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{box-shadow:none;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,h3{font-size:1.3em;margin:1em 0}.update-core-php h2{margin-top:2em}.update-messages h2,.update-php h2,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}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}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}.code,code{font-family:Consolas,Monaco,monospace;unicode-bidi:embed}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;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#555d66;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat a,.widefat button.button-link{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead td,.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot td,.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 ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat tfoot td,.widefat th,.widefat thead td{text-align:right;line-height:1.3em;font-size:14px}.updates-table td input,.widefat tfoot td input,.widefat th input,.widefat thead td 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}.updates-table tbody td.check-column,.widefat tbody th.check-column,.widefat tfoot td.check-column,.widefat thead td.check-column{padding:11px 3px 0 0}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:4px;vertical-align:middle}.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}.postbox .inside h2,.wrap [class$=icon32]+h2,.wrap h1,.wrap>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px;line-height:29px}.wrap h1.wp-heading-inline{display:inline-block;margin-left:5px}.wp-header-end{margin:-2px 0 0}.subtitle{margin:0;padding-right:25px;color:#555d66;font-size:14px;font-weight:400;line-height:1}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{margin-right:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;border:1px solid #ccc;border-radius:2px;background:#f7f7f7;text-shadow:none;font-weight:600;font-size:13px;line-height:normal;color:#0073aa;cursor:pointer;outline:0}.wrap .wp-heading-inline+.page-title-action{margin-right:0}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{border-color:#008EC2;background:#00a0d2;color:#fff}.page-title-action:focus{color:#124964}.ac_match,.highlight,.subsubsub a.current{color:#000}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.wrap h1.long-header{padding-left:0}.wp-dialog{background-color:#fff}#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;box-shadow:0 1px 2px rgba(0,0,0,.1)}.sorthelper{background-color:#ccf3fa}.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd){background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-left-color:#99d}.highlight{background-color:#e4f2fd}.wp-ui-primary{color:#fff;background-color:#32373c}.wp-ui-text-primary{color:#32373c}.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:#82878c}img.emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot td,.widefat tfoot th,.widefat thead td,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#23282d}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,.notice-dismiss:before,.tagchecklist .ntdelbutton .remove-tag-icon:before,.welcome-panel .welcome-panel-close:before{background:0 0;color:#72777c;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before{margin:1px 0}.tagchecklist .ntdelbutton .remove-tag-icon:before{margin-right:2px;border-radius:50%;color:#0073aa;line-height:1.28}.tagchecklist .ntdelbutton:focus{outline:0}#bulk-titles div a:focus:before,#bulk-titles div a:hover:before,.tagchecklist .ntdelbutton:focus .remove-tag-icon:before,.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,.welcome-panel .welcome-panel-close:focus:before,.welcome-panel .welcome-panel-close:hover:before{color:#c00}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap}#namediv td.first,.nav-tab,.no-break,.star-rating{white-space:nowrap}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#delete-link 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,#delete-link 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,abbr.required,span.required{color:#dc3232;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{float:right;line-height:28px}#delete-link{line-height:28px;vertical-align:middle;text-align:right;margin-right:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:left;float:left;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:left}.preview{float:left}#sticky-span{margin-right:18px}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:left}#misc-publishing-actions .notice{margin-right:10px;margin-left:10px}.wp-filter{display:inline-block;position:relative;margin:12px 0 25px;padding:0 10px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;border-radius:30px;background:#72777c;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-right:5px;margin-left:20px}.filter-links li>a,.wp-filter .search-form.search-plugins{display:inline-block}.filter-items{float:right}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{box-shadow:none;border-bottom:4px solid #666;color:#23282d}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#00a0d2}.wp-filter .search-form{float:left;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .button.drawer-toggle{margin:10px 9px 0;padding:0 6px 0 10px;border-color:transparent;background-color:transparent;color:#666;vertical-align:baseline;box-shadow:none}.wp-filter .drawer-toggle:before{content:"\f111";margin:0 0 0 5px;color:#72777c;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-filter .button.drawer-toggle:focus,.wp-filter .button.drawer-toggle:hover,.wp-filter .drawer-toggle:focus:before,.wp-filter .drawer-toggle:hover:before{background-color:transparent;color:#00a0d2}.wp-filter .button.drawer-toggle:focus:active,.wp-filter .button.drawer-toggle:hover{border-color:transparent}.wp-filter .button.drawer-toggle:focus{border-color:#5b9dd9}.wp-filter .button.drawer-toggle:active{background:0 0;box-shadow:none;-webkit-transform:none;transform:none}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer,.wp-filter .favorites-form{display:none;margin:0 -20px 0 -10px;padding:20px;border-top:1px solid #eee;background:#fafafa;overflow:hidden}.show-favorites-form .favorites-form,.show-filters .filter-drawer{display:block}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .button.drawer-toggle{border-radius:2px;background:#72777c;color:#fff}.filter-group,.filtered-by .tag{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{position:relative;float:right;margin:0 0 0 1%;padding:20px 10px 10px;width:24%;background:#fff}.filter-group legend{position:absolute;top:10px;display:block;margin:0;padding:0;font-size:1em;font-weight:600}.filter-drawer .filter-group-feature{margin:28px 0 0;list-style-type:none;font-size:12px}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:16px}.filter-drawer .filter-group-feature input{position:absolute;margin:0}.filter-group .filter-group-feature label{display:block;margin:14px 23px 14px 0}.filter-drawer .buttons{clear:both;margin-bottom:20px}.filter-drawer .filter-group+.buttons{margin-bottom:0;padding-top:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin-right:10px}.wp-filter .button-link.edit-filters{padding:0 5px;line-height:28px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-right:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters .favorites-form,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-right:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}div[class=update-message]{padding:.5em 0 .5em 12px}.form-table td .notice p,.notice p,.notice-title,div.error p,div.updated p{margin:.5em 0;padding:2px}.error a{text-decoration:underline}.updated a{padding-bottom:2px}.notice-alt{box-shadow:none}.notice-large{padding:10px 20px}.notice-title{display:inline-block;color:#23282d;font-size:18px}.wp-core-ui .notice.is-dismissible{padding-left:38px;position:relative}.notice-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#72777c;cursor:pointer}.notice-dismiss:active:before,.notice-dismiss:focus:before,.notice-dismiss:hover:before{color:#c00}.notice-dismiss:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .notice-dismiss:focus{outline:#5b9dd9 solid 1px}.notice-success,div.updated{border-right-color:#46b450}.notice-success.notice-alt{background-color:#ecf7ed}.notice-warning{border-right-color:#ffb900}.notice-warning.notice-alt{background-color:#fff8e5}.notice-error,div.error{border-right-color:#dc3232}.notice-error.notice-alt{background-color:#fbeaea}.notice-info{border-right-color:#00a0d2}.notice-info.notice-alt{background-color:#e5f5fa}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updated-message p:before,.updating-message p:before{display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}.wrap #templateside .notice{display:block;margin:0;padding:5px 8px;font-weight:600;text-decoration:none}.wrap #templateside span.notice{margin-right:-12px}#templateside li.notice a{padding:0}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updating-message p:before{color:#f56e28;content:"\f463"}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.updating-message p:before{-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.button.updated-message:before,.installed p:before,.updated-message p:before{color:#79ba49;content:'\f147'}.update-message.notice-error p:before{color:#dc3232;content:"\f534"}.import-php .updating-message:before,.wrap .notice p:before{margin-left:6px;vertical-align:bottom}#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;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#screen-meta,ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}.update-php .spinner{float:none;margin:-4px 0}#ajax-response.alignleft{margin-right:2em}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before{margin:3px -2px 0 5px}.button-primary.updating-message:before{color:#fff}.button-primary.updated-message:before{color:#66c6e4}@media aural{.button.installed:before,.button.installing:before,.update-message p:before,.wrap .notice p:before{speak:none}}#adminmenu a,#catlist 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-links{margin:0 0 0 20px}#screen-meta{margin:0 0 -1px 20px;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;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:none;background:#fff;box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:0;background:0 0;border-radius:0;color:#72777c;line-height:1.7;padding:3px 16px 3px 6px}#screen-meta-links .show-settings:active,#screen-meta-links .show-settings:focus,#screen-meta-links .show-settings:hover{color:#32373c}#screen-meta-links .show-settings:active{box-shadow:none;-webkit-transform:none;transform:none}#screen-meta-links .show-settings: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:#72777c}#templateside ul li a,.contextual-help-tabs a,.nav-tab{text-decoration:none}#screen-meta-links .screen-meta-active:after{content:"\f142"}.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,#screen-options-wrap legend{margin:0;padding:8px 0;font-size:13px;font-weight:600}.hndle a,.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:30px}#number-of-columns{display:inline-block;vertical-align:middle;line-height:30px}.metabox-prefs input[type=checkbox]{margin-top:0;margin-left:6px}.metabox-prefs label input,.metabox-prefs label input[type=checkbox]{margin:-4px 0 0 5px}.metabox-prefs .columns-prefs label input{margin:-1px 0 0 2px}.metabox-prefs label a{display:none}.metabox-prefs .screen-options input,.metabox-prefs .screen-options label{margin-top:0;margin-bottom:0;vertical-align:middle}.metabox-prefs .screen-options .screen-per-page{margin-left:15px}.metabox-prefs .screen-options label{line-height:28px;padding-left:0}.screen-options+.screen-options{margin-top:10px}.metabox-prefs .submit{margin-top:1em;padding:0}#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;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;border:1px solid transparent;border-left:none;border-right:none}.contextual-help-tabs a:hover{color:#32373c}.contextual-help-tabs .active{padding:0;margin:0 0 0 -1px;border-right:2px solid #00a0d2;background:#f6fbfd;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:#32373c}.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}.widefat td,.widefat th{color:#555}.widefat ol,.widefat p,.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th,.widefat ul{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:outside;margin-right:2em}.postbox-container{float:right}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #b4b9be;height:250px;position:relative}.metabox-holder .postbox-container .empty-container:after{content:attr(data-emptystring);margin:auto;position:absolute;top:0;right:0;bottom:0;left:0;height:1em;width:200px;text-align:center;color:#ccc;font-size:18px;display:none}.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;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;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px}#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,.nav-tab,.plugins .name{font-weight:600}.postbox .handlediv{display:none;float:left;width:36px;height:36px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.js .postbox .handlediv{display:block}.sortable-placeholder{border:1px dashed #b4b9be;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.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;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 0 0 10px}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}.nav-tab{float:right;border:1px solid #ccc;border-bottom:none;margin-right:.5em;padding:5px 10px;font-size:14px;line-height:24px;background:#e5e5e5;color:#555}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:16px}.nav-tab:focus,.nav-tab:hover{background-color:#fff;color:#444}.nav-tab-active,.nav-tab:focus:active{box-shadow:none}.nav-tab-active{margin-bottom:-1px;color:#444}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:1px solid #ccc;margin:0;padding-top:9px;padding-bottom:0;line-height:inherit}.nav-tab-wrapper:not(.wp-clearfix):after{content:"";display:table;clear:both}.ie8 .nav-tab-wrapper{display:inline-block;width:100%;vertical-align:top}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;float:left;vertical-align:middle;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:4px 10px 0}.loading-content .spinner,.spinner.is-active{visibility:visible}#template>div{margin-left:16em}#template .notice{margin-top:1em;margin-left:3%}#template .notice p{width:auto}#template .submit .spinner{float:none}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.nav-menus-php .metabox-holder h3{padding:10px 14px 11px 10px;line-height:21px}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:right}.attention,.error-message{color:#dc3232;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}#howto,.importer-action,.importer-desc,.importer-title{display:block}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}.media-icon{width:62px;text-align:center}.media-icon img{border:1px solid #e5e5e5;border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px}.importers{font-size:16px;width:auto}.importers td{padding-left:14px;line-height:1.5em}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.post-categories,.post-categories li{display:inline}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:20px;color:#555;margin-bottom:1em}#post-body #post-body-content #namediv h2,#post-body #post-body-content #namediv h3{margin-top:0}.edit-comment-author{font-size:14px;line-height:1.4;font-weight:600;color:#222;margin:2px 9px 0 0}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.checkbox,.post-categories,.zerosize,fieldset{margin:0;padding:0}.zerosize{height:0;width:0;border:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none}fieldset{border:0}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:right}.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;transition:color .1s ease-in 0;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{-webkit-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:#fff;position:fixed;top:0;left:0;bottom:0;right:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;-webkit-overflow-scrolling:touch;height:100%}#plugin-information-title{padding:0 26px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;height:56px}#plugin-information-title.with-banner{margin-left:0;height:250px;background-size:cover}#plugin-information-title h2{font-size:1em;font-weight:600;padding:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{position:relative;font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;box-sizing:border-box;max-width:100%;padding:0 15px;margin-top:174px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 0 30px rgba(255,255,255,.1);border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{position:absolute;display:block;top:0;right:0;height:250px;width:100%;background:0 0;box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;left:0;right:0;min-height:36px;font-size:0;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;display:inline-block;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#32373c}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;left:0;right:0;min-height:100%;min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;left:250px;bottom:0;right:0;margin-left:250px;padding:10px 26px 99999px;margin-bottom:-99939px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:left;position:relative;top:0;left:0;padding:16px 16px 99999px;margin-bottom:-99939px;width:217px;border-right:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#444}#plugin-information .fyi h3{font-weight:600;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 .fyi-description{margin-top:0}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:right;margin-left:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#e5e5e5;float:right}#plugin-information .counter-bar{height:17px;background-color:#ffc733;float:right}#plugin-information .counter-count{margin-right:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-left:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-left:4px}#plugin-information-footer{padding:13px 16px;position:absolute;left:0;bottom:0;right:0;height:33px;border-top:1px solid #ddd;background:#f3f3f3}#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;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-information blockquote{border-right:2px solid #ddd;color:#666;font-style:italic;margin:1em 0;padding:0 1em 0 0}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e5e5e5}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}.update-php .button.button-primary{margin-left:1em}@media screen and (max-width:771px){#plugin-information-title.with-banner,#plugin-information-title.with-banner div.vignette{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}#TB_window.plugin-details-modal{background:#fcfcfc}#TB_window.plugin-details-modal.thickbox-loading:before{content:"";display:block;width:20px;height:20px;position:absolute;right:50%;top:50%;z-index:-1;margin:-10px -10px 0 0;background:url(../images/spinner.gif) center no-repeat #fcfcfc;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.plugin-details-modal #TB_ajaxWindowTitle,.plugin-details-modal .tb-close-icon{display:none}.tree-folder,[role=treeitem] li{position:relative}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#TB_window.plugin-details-modal.thickbox-loading:before{background-image:url(../images/spinner-2x.gif)}}.plugin-details-modal #TB_title{float:right;height:1px}.plugin-details-modal #TB_closeWindowButton{right:auto;left:-30px;color:#eee}.plugin-details-modal #TB_closeWindowButton:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;box-shadow:none}.plugin-details-modal #TB_closeWindowButton:after{content:"\f335";font:400 32px/29px dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (max-width:830px){.plugin-details-modal #TB_closeWindowButton{left:0;top:-30px}}img{border:none}.bulk-action-notice .toggle-indicator:before,.js .meta-box-sortables .postbox .toggle-indicator:before,.privacy-text-box .toggle-indicator:before,.sidebar-name .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,.js .widgets-holder-wrap.closed .toggle-indicator:before,.privacy-text-box.closed .toggle-indicator:before{content:"\f140"}.js .postbox .handlediv .toggle-indicator:before{margin-top:4px;width:20px;border-radius:50%;text-indent:-1px}#template .CodeMirror,#template textarea,#templateside>ul{box-sizing:border-box;min-height:60vh;height:calc(100vh - 295px);border:1px solid #ddd}.rtl.js .postbox .handlediv .toggle-indicator:before{text-indent:1px}.bulk-action-notice .toggle-indicator:before{line-height:16px;vertical-align:top;color:#72777c}.js .postbox .handlediv:focus{box-shadow:none;outline:0}.js .postbox .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#photo-add-url-div input[type=text]{width:300px}.alignleft h2{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;background:#f9f9f9;-moz-tab-size:4;-o-tab-size:4;tab-size:4}#template .CodeMirror,#template textarea{width:100%}#templateside>h2{padding-top:6px;padding-bottom:7px;margin:0}#templateside ol,#templateside ul{margin:0;padding:0}#templateside>ul{margin-top:0;overflow:auto;padding:0;background-color:#f7f7f7;border-right:none}#templateside ul ul{padding-right:12px}#templateside>ul>li>ul[role=group]{padding-right:0}[role=treeitem][aria-expanded=false]>ul{display:none}[role=treeitem] span[aria-hidden]{display:inline;font-family:dashicons;font-size:20px;position:absolute;pointer-events:none}[role=treeitem][aria-expanded=false]>.folder-label .icon:after{content:"\f141"}[role=treeitem][aria-expanded=true]>.folder-label .icon:after{content:"\f140"}[role=treeitem] .folder-label{display:block;padding:3px 12px 3px 3px;cursor:pointer}[role=treeitem]{outline:0}[role=treeitem] .folder-label.focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}[role=treeitem] .folder-label.hover,[role=treeitem].hover{background-color:#eaeaea}.tree-folder{margin:0}.tree-folder .tree-folder::after{content:' ';display:block;position:absolute;right:2px;border-right:1px solid #ccc;top:-13px;bottom:10px}.tree-folder>li::before{content:' ';position:absolute;display:block;border-right:1px solid #ccc;right:2px;top:-5px;height:18px;width:7px;border-bottom:1px solid #ccc}.tree-folder>li::after{content:' ';position:absolute;display:block;border-right:1px solid #ccc;right:2px;bottom:-7px;top:0}#templateside .current-file{margin:-4px 0 -2px}.tree-folder>.current-file::before{right:4px;height:15px;width:0;border-right:none;top:3px}.tree-folder>.current-file::after{bottom:-4px;height:7px;right:2px;top:auto}.tree-folder li:last-child>.tree-folder::after,.tree-folder>li:last-child::after{display:none}#theme-plugin-editor-label{display:inline-block;margin-bottom:1em;font-weight:600}.fileedit-sub #plugin,.fileedit-sub #theme{max-width:40%}.fileedit-sub .alignright{text-align:left}#template p{width:97%}#file-editor-linting-error{margin-top:1em;margin-bottom:1em}#file-editor-linting-error>.notice{margin:0;display:inline-block}#file-editor-linting-error>.notice>p{width:auto}#template .submit{margin-top:1em;padding:0}#template .submit input[type=submit][disabled]{cursor:not-allowed}#templateside{float:left;width:16em}#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside li{margin:4px 0}#templateside li:not(.howto) a,.theme-editor-php .highlight{display:block;padding:3px 12px 3px 0;text-decoration:none}#templateside li:not(.howto)>a:first-of-type{padding-top:0}#templateside li.howto{padding:6px 12px 12px}.theme-editor-php .highlight{margin:-3px -12px -3px 3px}#templateside .highlight{border:none;font-weight:600}.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%}#file-editor-warning .file-editor-warning-content{margin:25px}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top .widget-action .toggle-indicator:before{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top .widget-action .toggle-indicator:before{padding:1px 0 1px 2px;border-radius:50%}.accordion-section-title:after,.handlediv,.item-edit,.postbox .handlediv.button-link,.toggle-indicator{color:#72777c}.widget-action{color:#555d66}.accordion-section-title:hover:after,.handlediv:focus,.handlediv:hover,.item-edit:focus,.item-edit:hover,.postbox .handlediv.button-link:focus,.postbox .handlediv.button-link:hover,.sidebar-name:hover .toggle-indicator,.widget-action:focus,.widget-top:hover .widget-action{color:#23282d}.widget-top .widget-action:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.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,.widget.open .widget-top .widget-action .toggle-indicator:before{content:"\f142"}/*! + * jQuery UI Draggable/Sortable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */.ui-draggable-handle,.ui-sortable-handle{touch-action:none}.accordion-section{border-bottom:1px solid #ddd;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#ddd}.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 #ddd;border-left:1px solid #ddd;-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:#a0a5aa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title,.customize-pane-child .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,.customize-pane-child .accordion-section-title:after{top:calc(50% - 10px)}.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:#23282d;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #ddd}.network-admin .edit-site-actions{margin-top:0}.my-sites{display:block;overflow:auto;zoom:1}.my-sites li{display:block;padding:8px 3%;min-height:130px;margin:0}@media only screen and (max-width:599px){.my-sites li{min-height:0}}@media only screen and (min-width:600px){.my-sites.striped li{background-color:#fff;position:relative}.my-sites.striped li:after{content:"";width:1px;height:100%;position:absolute;top:0;left:0;background:#ccc}}@media only screen and (min-width:600px) and (max-width:699px){.my-sites li{float:right;width:44%}.my-sites.striped li{background-color:#fff}.my-sites.striped li:nth-of-type(2n+1){clear:right}.my-sites.striped li:nth-of-type(2n+2):after{content:none}.my-sites li:nth-of-type(4n+1),.my-sites li:nth-of-type(4n+2){background-color:#f9f9f9}}@media only screen and (min-width:700px) and (max-width:1199px){.my-sites li{float:right;width:27.333333%;background-color:#fff}.my-sites.striped li:nth-of-type(3n+3):after{content:none}.my-sites li:nth-of-type(6n+1),.my-sites li:nth-of-type(6n+2),.my-sites li:nth-of-type(6n+3){background-color:#f9f9f9}}@media only screen and (min-width:1200px) and (max-width:1399px){.my-sites li{float:right;width:21%;padding:8px 2%;background-color:#fff}.my-sites.striped li:nth-of-type(4n+1){clear:right}.my-sites.striped li:nth-of-type(4n+4):after{content:none}.my-sites li:nth-of-type(8n+1),.my-sites li:nth-of-type(8n+2),.my-sites li:nth-of-type(8n+3),.my-sites li:nth-of-type(8n+4){background-color:#f9f9f9}}@media only screen and (min-width:1400px) and (max-width:1599px){.my-sites li{float:right;width:16%;padding:8px 2%;background-color:#fff}.my-sites.striped li:nth-of-type(5n+1){clear:right}.my-sites.striped li:nth-of-type(5n+5):after{content:none}.my-sites li:nth-of-type(10n+1),.my-sites li:nth-of-type(10n+2),.my-sites li:nth-of-type(10n+3),.my-sites li:nth-of-type(10n+4),.my-sites li:nth-of-type(10n+5){background-color:#f9f9f9}}@media only screen and (min-width:1600px){.my-sites li{float:right;width:12.666666%;padding:8px 2%;background-color:#fff}.my-sites.striped li:nth-of-type(6n+1){clear:right}.my-sites.striped li:nth-of-type(6n+6):after{content:none}.my-sites li:nth-of-type(12n+1),.my-sites li:nth-of-type(12n+2),.my-sites li:nth-of-type(12n+3),.my-sites li:nth-of-type(12n+4),.my-sites li:nth-of-type(12n+5),.my-sites li:nth-of-type(12n+6){background-color:#f9f9f9}}.my-sites li a{text-decoration:none}@media print,(-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) bottom left repeat-x;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 .toggle-indicator,.sidebar-name:hover .toggle-indicator,.widget-top .widget-action,.widget-top .widget-action:hover{background:0 0!important}}@-ms-viewport{width:device-width}@media screen and (max-width:782px){#col-left,#col-right,#templateside{float:none;width:auto}html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:rgba(0,0,0,0)!important}#wpcontent{position:relative;margin-right:0;padding-right:10px}#wpbody-content{padding-bottom:100px}.wrap{margin-left:12px;margin-right:0}#col-left .col-wrap,#col-right .col-wrap{padding:0}#collapse-menu,#screen-meta,#screen-meta-links,.post-format-select{display:none!important}#documentation label[for=docs-list],.fileedit-sub .alignright label{display:block}.wrap h1.wp-heading-inline{margin-bottom:.5em}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{padding:10px 15px;font-size:14px;white-space:nowrap}.media-upload-form div.error,.notice,.wrap div.error,.wrap div.updated{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.wp-core-ui .notice.is-dismissible{padding-left:46px}.notice-dismiss{padding:13px}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpbody{left:-16em}code{word-wrap:break-word}.postbox{font-size:14px}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2,.metabox-holder h3.hndle{padding:12px}.postbox .handlediv{margin-top:3px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}#templateside>ul{border-right:1px solid #ddd}#templateside li{margin:0}#templateside li:not(.howto) a{display:block;padding:5px}#templateside li.howto{padding:12px}#templateside .highlight{padding:5px;margin-right:-5px;margin-top:-5px}#template .notice,#template>div{float:none;margin:1em 0;width:auto}#template .CodeMirror,#template textarea{box-sizing:border-box;width:100%}#templateside ul ul{padding-right:1.5em}[role=treeitem] .folder-label{display:block;padding:5px}#documentation input[type=button],.fileedit-sub input[type=submit]{margin-bottom:0;padding:8px 18px}.tree-folder .tree-folder::after,.tree-folder>li::after,.tree-folder>li::before{right:-8px}.tree-folder>li::before{top:0;height:13px}.tree-folder>.current-file::before{right:-5px;top:7px;width:4px}.tree-folder>.current-file::after{height:9px;right:-8px}.wrap #templateside span.notice{margin-right:-5px;width:100%}.fileedit-sub .alignright{float:right;margin-top:15px;width:100%;text-align:right}.fileedit-sub #plugin,.fileedit-sub #theme{margin-right:0;max-width:70%}#documentation select[name=docs-list]{margin-right:0;max-width:60%}#comments-form .checkforspam,#wpfooter{display:none}.edit-comment-author{margin:2px 0 0}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:25px}.filter-drawer .filter-group-feature label{margin-right:32px}.wp-filter .button.drawer-toggle{font-size:13px;line-height:26px;height:28px}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open,div#post-body.metabox-holder.columns-1{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:0}h1 .nav-tab,h2 .nav-tab,h3 .nav-tab{margin:10px 0 0 10px;border-bottom:1px solid #ccc}}@media screen and (max-width:320px){#network_dashboard_right_now .subsubsub{font-size:14px;text-align:right}} \ No newline at end of file diff --git a/wp-admin/css/common.css b/wp-admin/css/common.css new file mode 100644 index 0000000..ac3a7c6 --- /dev/null +++ b/wp-admin/css/common.css @@ -0,0 +1,3955 @@ +/* 2 column liquid layout */ +#wpwrap { + height: auto; + min-height: 100%; + width: 100%; + position: relative; + -webkit-font-smoothing: subpixel-antialiased; +} + +#wpcontent { + height: 100%; + padding-left: 20px; +} + +#wpcontent, +#wpfooter { + margin-left: 160px; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-left: 36px; +} + +#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-left { + float: left; + width: 35%; +} + +#col-right { + float: right; + width: 65%; +} + +#col-left .col-wrap { + padding: 0 6px 0 0; +} + +#col-right .col-wrap { + padding: 0 0 0 6px; +} + +/* utility classes */ +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.textleft { + text-align: left; +} + +.textright { + text-align: right; +} + +.clear { + clear: both; +} + +/* modern clearfix */ +.wp-clearfix:after { + content: ""; + display: table; + clear: both; +} + +/* Hide visually but not from screen readers */ +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */ +} + +.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: #0073aa; + z-index: 100000; + line-height: normal; + 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, +.comment-ays { + border: 1px solid #e5e5e5; + 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, +.comment-ays { + background: #fff; +} + +/* general */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +body { + background: #f1f1f1; + color: #444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 13px; + line-height: 1.4em; + min-width: 600px; +} + +body.iframe { + min-width: 0; + padding-top: 1px; +} + +body.modal-open { + overflow: hidden; +} + +body.mobile.modal-open #wpwrap { + overflow: hidden; + position: fixed; + height: 100%; +} + +iframe, +img { + border: 0; +} + +td { + font-family: inherit; + font-size: inherit; + font-weight: inherit; + line-height: inherit; +} + +/* Any change to the default link style must be applied to button-link too. */ +a { + color: #0073aa; + transition-property: border, background, color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} + +a, +div { + outline: 0; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus, +a:focus .media-icon img, +.wp-person a:focus .gravatar { + color: #124964; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +#adminmenu a:focus, +.screen-reader-text:focus { + box-shadow: none; + 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 { + color: #23282d; + font-size: 2em; + margin: .67em 0; +} + +h2, +h3 { + color: #23282d; + font-size: 1.3em; + margin: 1em 0; +} + +.update-core-php h2 { + margin-top: 2em; +} + +.update-php h2, +.update-messages h2, +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; +} + +/* rtl:ignore */ +.ltr { + direction: ltr; +} + +/* rtl:ignore */ +.code, +code { + font-family: Consolas, Monaco, monospace; + direction: ltr; + unicode-bidi: embed; +} + +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: #555d66; /* #f1f1f1 background */ + font-weight: 400; +} + +.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, +.widefat button.button-link { + text-decoration: none; +} + +.widefat td, +.widefat th { + padding: 8px 10px; +} + +.widefat thead th, +.widefat thead td { + border-bottom: 1px solid #e1e1e1; +} + +.widefat tfoot th, +.widefat tfoot td { + 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, +.widefat thead td, +.widefat tfoot td { + text-align: left; + line-height: 1.3em; + font-size: 14px; +} + +.widefat th input, +.updates-table td input, +.widefat thead td input, +.widefat tfoot td 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 tbody th.check-column { + padding: 9px 0 22px; +} + +.widefat thead td.check-column, +.widefat tbody th.check-column, +.updates-table tbody td.check-column, +.widefat tfoot td.check-column { + padding: 11px 0 0 3px; +} + +.widefat thead td.check-column, +.widefat tfoot td.check-column { + padding-top: 4px; + vertical-align: middle; +} + +.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; +} + +.wrap > h2:first-child, /* Back-compat for pre-4.4 */ +.wrap [class$="icon32"] + h2, /* Back-compat for pre-4.4 */ +.postbox .inside h2, /* Back-compat for pre-4.4 */ +.wrap h1 { + font-size: 23px; + font-weight: 400; + margin: 0; + padding: 9px 0 4px 0; + line-height: 29px; +} + +.wrap h1.wp-heading-inline { + display: inline-block; + margin-right: 5px; +} + +.wp-header-end { + visibility: hidden; + margin: -2px 0 0; +} + +.subtitle { + margin: 0; + padding-left: 25px; + color: #555d66; + font-size: 14px; + font-weight: 400; + line-height: 1; +} + +.wrap .add-new-h2, /* deprecated */ +.wrap .add-new-h2:active, /* deprecated */ +.wrap .page-title-action, +.wrap .page-title-action:active { + margin-left: 4px; + padding: 4px 8px; + position: relative; + top: -3px; + text-decoration: none; + border: none; + border: 1px solid #ccc; + border-radius: 2px; + background: #f7f7f7; + text-shadow: none; + font-weight: 600; + font-size: 13px; + line-height: normal; /* IE8-IE11 need this for buttons */ + color: #0073aa; /* some of these controls are button elements and don't inherit from links */ + cursor: pointer; + outline: 0; +} + +.wrap .wp-heading-inline + .page-title-action { + margin-left: 0; +} + +.wrap .add-new-h2:hover, /* deprecated */ +.wrap .page-title-action:hover { + border-color: #008EC2; + background: #00a0d2; + color: #fff; +} + +/* lower specificity: color needs to be overridden by :hover and :active */ +.page-title-action:focus { + color: #124964; +} + +.wrap .page-title-action:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 ); +} + +.wrap h1.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; + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.sorthelper { + background-color: #ccf3fa; +} + +.ac_match, +.subsubsub a.current { + color: #000; +} + +.striped > tbody > :nth-child(odd), +ul.striped > :nth-child(odd), +.alternate { + background-color: #f9f9f9; +} + +.bar { + background-color: #e8e8e8; + border-right-color: #99d; +} + +/* Helper classes for plugins to leverage the active WordPress color scheme */ + +.highlight { + background-color: #e4f2fd; + color: #000; +} + +.wp-ui-primary { + color: #fff; + background-color: #32373c; +} +.wp-ui-text-primary { + color: #32373c; +} + +.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: #82878c; /* same as new icons */ +} + +/* For emoji replacement images */ +img.emoji { + display: inline !important; + border: none !important; + height: 1em !important; + width: 1em !important; + margin: 0 .07em !important; + vertical-align: -0.1em !important; + background: none !important; + padding: 0 !important; + box-shadow: none !important; +} + +/*------------------------------------------------------------------------------ + 1.0 - Text Styles +------------------------------------------------------------------------------*/ + +.widget .widget-top, +.postbox .hndle, +.stuffbox .hndle, +.control-section .accordion-section-title, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +#your-profile #rich_editing, +.widefat thead th, +.widefat thead td, +.widefat tfoot th, +.widefat tfoot td { + line-height: 1.4em; +} + +.widget .widget-top, +.menu-item-handle { + background: #fafafa; + color: #23282d; +} + +.postbox .hndle, +.stuffbox .hndle { + 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-close:before, +.tagchecklist .ntdelbutton .remove-tag-icon:before, +#bulk-titles div a:before, +.notice-dismiss:before { + background: none; + color: #72777c; + content: "\f153"; + display: block; + font: normal 16px/20px dashicons; + speak: none; + height: 20px; + text-align: center; + width: 20px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.welcome-panel .welcome-panel-close:before { + margin: 0; +} + +#bulk-titles div a:before { + margin: 1px 0; +} + +.tagchecklist .ntdelbutton .remove-tag-icon:before { + margin-left: 2px; + border-radius: 50%; + color: #0073aa; + /* vertically center the icon cross browsers */ + line-height: 1.28; +} + +.tagchecklist .ntdelbutton:focus { + outline: 0; +} + +.welcome-panel .welcome-panel-close:hover:before, +.welcome-panel .welcome-panel-close:focus:before, +.tagchecklist .ntdelbutton:hover .remove-tag-icon:before, +.tagchecklist .ntdelbutton:focus .remove-tag-icon:before, +#bulk-titles div a:hover:before, +#bulk-titles div a:focus:before { + color: #c00; +} + +.tagchecklist .ntdelbutton:focus .remove-tag-icon:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.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, +#delete-link a.delete { + color: #a00; +} + +abbr.required, +span.required, +.file-error, +.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, +#delete-link a.delete:hover { + color: #dc3232; + border: none; +} + +/*------------------------------------------------------------------------------ + 3.0 - Actions +------------------------------------------------------------------------------*/ + +#major-publishing-actions { + padding: 10px; + clear: both; + border-top: 1px solid #ddd; + background: #f5f5f5; +} + +#delete-action { + float: left; + line-height: 28px; +} + +#delete-link { + line-height: 28px; + vertical-align: middle; + text-align: left; + margin-left: 8px; +} + +#delete-link a { + text-decoration: none; +} + +#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; +} + +.misc-pub-filename { + word-wrap: break-word; +} + +#minor-publishing-actions { + padding: 10px 10px 0 10px; + text-align: right; +} + +#save-post { + float: left; +} + +.preview { + float: right; +} + +#sticky-span { + margin-left: 18px; +} + +.approve, +.unapproved .unapprove { + display: none; +} + +.unapproved .approve, +.spam .approve, +.trash .approve { + display: inline; +} + +td.action-links, +th.action-links { + text-align: right; +} + +#misc-publishing-actions .notice { + margin-left: 10px; + margin-right: 10px; +} + +/* Filter bar */ +.wp-filter { + display: inline-block; + position: relative; + box-sizing: border-box; + margin: 12px 0 25px; + padding: 0 10px; + width: 100%; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + border: 1px solid #e5e5e5; + background: #fff; + color: #555; + font-size: 13px; +} + +.wp-filter a { + text-decoration: none; +} + +.filter-count { + display: inline-block; + vertical-align: middle; + min-width: 4em; +} + +.title-count, +.filter-count .count { + display: inline-block; + position: relative; + top: -1px; + padding: 4px 10px; + border-radius: 30px; + background: #72777c; + color: #fff; + font-size: 14px; + font-weight: 600; +} + +/* not a part of filter bar, but derived from it, so here for now */ +.title-count { + display: inline; + top: -3px; + margin-left: 5px; + margin-right: 20px; +} + +.filter-items { + float: left; +} + +.filter-links { + display: inline-block; + margin: 0; +} + +.filter-links li { + display: inline-block; + margin: 0; +} + +.filter-links li > a { + display: inline-block; + margin: 0 10px; + padding: 15px 0; + border-bottom: 4px solid #fff; + color: #666; + cursor: pointer; +} + +.filter-links .current { + box-shadow: none; + border-bottom: 4px solid #666; + color: #23282d; +} + +.filter-links li > a:hover, +.filter-links li > a:focus, +.show-filters .filter-links a.current:hover, +.show-filters .filter-links a.current:focus { + color: #00a0d2; +} + +.wp-filter .search-form { + float: right; + margin: 10px 0; +} + +.wp-filter .search-form input[type="search"] { + margin: 0; + padding: 3px 5px; + width: 280px; + max-width: 100%; + font-size: 16px; + font-weight: 300; + line-height: 1.5; +} + +.wp-filter .search-form select { + margin: 0; + height: 32px; + vertical-align: top; +} + +.wp-filter .search-form.search-plugins { + display: inline-block; +} + +.wp-filter .button.drawer-toggle { + margin: 10px 9px 0; + padding: 0 10px 0 6px; + border-color: transparent; + background-color: transparent; + color: #666; + vertical-align: baseline; + box-shadow: none; +} + +.wp-filter .drawer-toggle:before { + content: "\f111"; + margin: 0 5px 0 0; + color: #72777c; + font: normal 16px/1 dashicons; + vertical-align: text-bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-filter .button.drawer-toggle:hover, +.wp-filter .drawer-toggle:hover:before, +.wp-filter .button.drawer-toggle:focus, +.wp-filter .drawer-toggle:focus:before { + background-color: transparent; + color: #00a0d2; +} + +.wp-filter .button.drawer-toggle:hover, +.wp-filter .button.drawer-toggle:focus:active { + border-color: transparent; +} + +.wp-filter .button.drawer-toggle:focus { + border-color: #5b9dd9; +} + +.wp-filter .button.drawer-toggle:active { + background: transparent; + box-shadow: none; + -webkit-transform: none; + transform: none; +} + +.wp-filter .drawer-toggle.current:before { + color: #fff; +} + +.filter-drawer, +.wp-filter .favorites-form { + display: none; + margin: 0 -10px 0 -20px; + padding: 20px; + border-top: 1px solid #eee; + background: #fafafa; + overflow: hidden; +} + +.show-filters .filter-drawer, +.show-favorites-form .favorites-form { + display: block; +} + +.show-filters .filter-links a.current { + border-bottom: none; +} + +.show-filters .wp-filter .button.drawer-toggle { + border-radius: 2px; + background: #72777c; + color: #fff; +} + +.show-filters .wp-filter .drawer-toggle:hover, +.show-filters .wp-filter .drawer-toggle:focus { + background: rgb(46, 162, 204); +} + +.show-filters .wp-filter .drawer-toggle:before { + color: #fff; +} + +.filter-group { + box-sizing: border-box; + position: relative; + float: left; + margin: 0 1% 0 0; + padding: 20px 10px 10px; + width: 24%; + background: #fff; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +.filter-group legend { + position: absolute; + top: 10px; + display: block; + margin: 0; + padding: 0; + font-size: 1em; + font-weight: 600; +} + +.filter-drawer .filter-group-feature { + margin: 28px 0 0; + list-style-type: none; + font-size: 12px; +} + +.filter-drawer .filter-group-feature input, +.filter-drawer .filter-group-feature label { + line-height: 16px; +} + +.filter-drawer .filter-group-feature input { + position: absolute; + margin: 0; +} + +.filter-group .filter-group-feature label { + display: block; + margin: 14px 0px 14px 23px; +} + +.filter-drawer .buttons { + clear: both; + margin-bottom: 20px; +} + +.filter-drawer .filter-group + .buttons { + margin-bottom: 0; + padding-top: 20px; +} + +.filter-drawer .buttons .button span { + display: inline-block; + opacity: 0.8; + font-size: 12px; + text-indent: 10px; +} + +.wp-filter .button.clear-filters { + display: none; + margin-left: 10px; +} + +.wp-filter .button-link.edit-filters { + padding: 0 5px; + line-height: 28px; +} + +.filtered-by { + display: none; + margin: 0; +} + +.filtered-by > span { + font-weight: 600; +} + +.filtered-by a { + margin-left: 10px; +} + +.filtered-by .tags { + display: inline; +} + +.filtered-by .tag { + margin: 0 5px; + padding: 4px 8px; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; + font-size: 11px; +} + +.filters-applied .filter-group, +.filters-applied .filter-drawer .buttons, +.filters-applied .filter-drawer br { + display: none !important; +} + +.filters-applied .filtered-by { + display: block; +} + +.filters-applied .filter-drawer { + padding: 20px; +} + +.show-filters .favorites-form, +.show-filters .content-filterable, +.show-filters.filters-applied.loading-content .content-filterable, +.loading-content .content-filterable, +.error .content-filterable { + display: none; +} + +.show-filters.filters-applied .content-filterable { + display: block; +} + +.loading-content .spinner { + display: block; + margin: 40px auto 0; + float: none; +} + +@media only screen and (max-width: 1120px) { + .filter-drawer { + border-bottom: 1px solid #eee; + } + + .filter-group { + margin-bottom: 0; + margin-top: 5px; + width: 100%; + } + + .filter-group li { + margin: 10px 0; + } +} + +@media only screen and (max-width: 1000px) { + .filter-items { + float: none; + } + + .wp-filter .media-toolbar-primary, + .wp-filter .media-toolbar-secondary, + .wp-filter .search-form { + float: none; /* Remove float from media-views.css */ + position: relative; + max-width: 100%; + } +} + +@media only screen and (max-width: 782px) { + .filter-group li { + padding: 0; + width: 50%; + } +} + +@media only screen and (max-width: 320px) { + .filter-count { + display: none; + } + + .wp-filter .drawer-toggle { + margin: 10px 0; + } + + .filter-group li, + .wp-filter .search-form input[type="search"] { + width: 100%; + } +} + +/*------------------------------------------------------------------------------ + 4.0 - Notifications +------------------------------------------------------------------------------*/ + +.notice, +div.updated, +div.error { + background: #fff; + border-left: 4px solid #fff; + box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + margin: 5px 15px 2px; + padding: 1px 12px; +} + +div[class="update-message"] { /* back-compat for pre-4.6 */ + padding: 0.5em 12px 0.5em 0; +} + +.notice p, +.notice-title, +div.updated p, +div.error p, +.form-table td .notice p { + margin: 0.5em 0; + padding: 2px; +} + +.error a { + text-decoration: underline; +} + +.updated a { + padding-bottom: 2px; +} + +.notice-alt { + box-shadow: none; +} + +.notice-large { + padding: 10px 20px; +} + +.notice-title { + display: inline-block; + color: #23282d; + font-size: 18px; +} + +.wp-core-ui .notice.is-dismissible { + padding-right: 38px; + position: relative; +} + +.notice-dismiss { + position: absolute; + top: 0; + right: 1px; + border: none; + margin: 0; + padding: 9px; + background: none; + color: #72777c; + cursor: pointer; +} + +.notice-dismiss:hover:before, +.notice-dismiss:active:before, +.notice-dismiss:focus:before { + color: #c00; +} + +.notice-dismiss:focus { + outline: none; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 .notice-dismiss:focus { + outline: 1px solid #5b9dd9; +} + +.notice-success, +div.updated { + border-left-color: #46b450; +} + +.notice-success.notice-alt { + background-color: #ecf7ed; +} + +.notice-warning { + border-left-color: #ffb900; +} + +.notice-warning.notice-alt { + background-color: #fff8e5; +} + +.notice-error, +div.error { + border-left-color: #dc3232; +} + +.notice-error.notice-alt { + background-color: #fbeaea; +} + +.notice-info { + border-left-color: #00a0d2; +} + +.notice-info.notice-alt { + background-color: #e5f5fa; +} + +.update-message p:before, +.updating-message p:before, +.updated-message p:before, +.import-php .updating-message:before, +.button.updating-message:before, +.button.updated-message:before, +.button.installed:before, +.button.installing:before { + display: inline-block; + font: normal 20px/1 'dashicons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.wrap .notice, +.wrap div.updated, +.wrap div.error, +.media-upload-form .notice, +.media-upload-form div.error { + margin: 5px 0 15px; +} + +.wrap #templateside .notice { + display: block; + margin: 0; + padding: 5px 8px; + font-weight: 600; + text-decoration: none; +} + +.wrap #templateside span.notice { + margin-left: -12px; +} + +#templateside li.notice a { + padding: 0; +} + +/* Update icon. */ +.update-message p:before, +.updating-message p:before, +.import-php .updating-message:before, +.button.updating-message:before, +.button.installing:before { + color: #f56e28; + content: "\f463"; +} + +/* Spins the update icon. */ +.updating-message p:before, +.import-php .updating-message:before, +.button.updating-message:before, +.button.installing:before { + -webkit-animation: rotation 2s infinite linear; + animation: rotation 2s infinite linear; +} + +/* Updated icon (check mark). */ +.updated-message p:before, +.installed p:before, +.button.updated-message:before { + color: #79ba49; + content: '\f147'; +} + +/* Error icon. */ +.update-message.notice-error p:before { + color: #dc3232; + content: "\f534"; +} + +.wrap .notice p:before, +.import-php .updating-message:before { + margin-right: 6px; + vertical-align: bottom; +} + +#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; + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +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; +} + +.button.updating-message:before, +.button.updated-message:before, +.button.installed:before, +.button.installing:before { + margin: 3px 5px 0 -2px; +} + +.button-primary.updating-message:before { + color: #fff; +} + +.button-primary.updated-message:before { + color: #66c6e4; +} + +.button.updated-message { + transition-property: border, background, color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} + +@media aural { + .wrap .notice p:before, + .button.installing:before, + .button.installed:before, + .update-message p:before { + speak: none; + } +} + + +/* @todo: this does not need its own section anymore */ +/*------------------------------------------------------------------------------ + 6.0 - Admin Header +------------------------------------------------------------------------------*/ +#adminmenu 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-links { + margin: 0 20px 0 0; +} + +/* 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; + 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; + 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 .show-settings { + border: 0; + background: none; + border-radius: 0; + color: #72777c; + line-height: 1.7; + padding: 3px 6px 3px 16px; +} + +#screen-meta-links .show-settings:hover, +#screen-meta-links .show-settings:active, +#screen-meta-links .show-settings:focus { + color: #32373c; +} + +#screen-meta-links .show-settings:active { + box-shadow: none; + -webkit-transform: none; + transform: none; +} + +#screen-meta-links .show-settings: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: #72777c; +} + +#screen-meta-links .screen-meta-active:after { + content: "\f142"; +} + +/* 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, /* Back-compat for old plugins */ +#screen-options-wrap legend, +#contextual-help-wrap h5 { + margin: 0; + padding: 8px 0; + font-size: 13px; + font-weight: 600; +} + +.ie8 #screen-options-wrap legend { + color: inherit; +} + +.metabox-prefs label { + display: inline-block; + padding-right: 15px; + line-height: 30px; +} + +#number-of-columns { + display: inline-block; + vertical-align: middle; + line-height: 30px; +} + +.metabox-prefs input[type=checkbox] { + margin-top: 0; + margin-right: 6px; +} + +.metabox-prefs label input, +.metabox-prefs label input[type=checkbox] { + margin: -4px 5px 0 0; +} + +.metabox-prefs .columns-prefs label input { + margin: -1px 2px 0 0; +} + +.metabox-prefs label a { + display: none; +} + +.metabox-prefs .screen-options input, +.metabox-prefs .screen-options label { + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.metabox-prefs .screen-options .screen-per-page { + margin-right: 15px; +} + +.metabox-prefs .screen-options label { + line-height: 28px; + padding-right: 0; +} + +.screen-options + .screen-options { + margin-top: 10px; +} + +.metabox-prefs .submit { + margin-top: 1em; + padding: 0; +} + +/*------------------------------------------------------------------------------ + 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; + 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: #32373c; +} + +.contextual-help-tabs .active { + padding: 0; + margin: 0 -1px 0 0; + border-left: 2px solid #00a0d2; + background: #f6fbfd; + 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: #32373c; +} + +.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; + box-sizing: border-box; +} + +.widefat th, +.widefat td { + color: #555; +} + +.widefat th, +.widefat thead td, +.widefat tfoot td { + font-weight: 400; +} + +.widefat thead tr th, +.widefat thead tr td, +.widefat tfoot tr th, +.widefat tfoot tr td { + color: #32373c; +} + +.widefat td p { + margin: 2px 0 0.8em; +} + +.widefat p, +.widefat ol, +.widefat ul { + color: #32373c; +} + +.widefat .column-comment p { + margin: 0.6em 0; +} + +.widefat .column-comment ul { + list-style: initial; + margin-left: 2em; +} + +/* Screens with postboxes */ +.postbox-container { + float: left; +} + +.postbox-container .meta-box-sortables { + box-sizing: border-box; +} + +#wpbody-content .metabox-holder { + padding-top: 10px; +} + +.metabox-holder .postbox-container .empty-container { + border: 3px dashed #b4b9be; + height: 250px; + position: relative; +} + +.metabox-holder .postbox-container .empty-container:after { + content: attr(data-emptystring); + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + height: 1em; + width: 200px; + text-align: center; + color: #ccc; + font-size:18px; + display: none; +} + +.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 .widget .widget-top, +.js .postbox .hndle { + cursor: move; +} + +.hndle a { + font-size: 11px; + font-weight: 400; +} + +.postbox .handlediv { + display: none; + float: right; + width: 36px; + height: 36px; + margin: 0; + padding: 0; + border: 0; + background: none; + cursor: pointer; +} + +.js .postbox .handlediv { + display: block; +} + +.sortable-placeholder { + border: 1px dashed #b4b9be; + margin-bottom: 20px; +} + +.postbox, +.stuffbox { + margin-bottom: 20px; + padding: 0; + line-height: 1; +} + +/* user-select is not a part of the CSS standard - may change behavior in the future */ +.postbox .hndle, +.stuffbox .hndle { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.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; + box-shadow: none; +} + +.postbox table.form-table { + margin-bottom: 0; +} + +.postbox table.widefat { + box-shadow: none; +} + +.temp-border { + border: 1px dotted #ccc; +} + +.columns-prefs label { + padding: 0 10px 0 0; +} + +/* @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 20px; + color: #555d66; +} + +#wpfooter p { + font-size: 13px; + margin: 0; + line-height: 20px; +} + +#footer-thankyou { + font-style: italic; +} + +/*------------------------------------------------------------------------------ + 25.0 - Tabbed Admin Screen Interface (Experimental) +------------------------------------------------------------------------------*/ + +.nav-tab { + float: left; + border: 1px solid #ccc; + border-bottom: none; + margin-left: 0.5em; /* half the font size so set the font size properly */ + padding: 5px 10px; + font-size: 14px; + line-height: 24px; + font-weight: 600; + background: #e5e5e5; + color: #555; + text-decoration: none; + white-space: nowrap; +} + +h3 .nav-tab, /* Back-compat for pre-4.4 */ +.nav-tab-small .nav-tab { + padding: 5px 14px; + font-size: 12px; + line-height: 16px; +} + +.nav-tab:hover, +.nav-tab:focus { + background-color: #fff; + color: #444; +} + +.nav-tab-active, +.nav-tab:focus:active { + box-shadow: none; +} + +.nav-tab-active { + margin-bottom: -1px; + color: #444; +} + +.nav-tab-active, +.nav-tab-active:hover, +.nav-tab-active:focus, +.nav-tab-active:focus:active { + border-bottom: 1px solid #f1f1f1; + background: #f1f1f1; + color: #000; +} + +h1.nav-tab-wrapper, /* Back-compat for pre-4.4 */ +.wrap h2.nav-tab-wrapper, /* higher specificity to override .wrap > h2:first-child */ +.nav-tab-wrapper { + border-bottom: 1px solid #ccc; + margin: 0; + padding-top: 9px; + padding-bottom: 0; + line-height: inherit; +} + +/* Back-compat for plugins. Deprecated. Use .wp-clearfix instead. */ +.nav-tab-wrapper:not(.wp-clearfix):after { + content: ""; + display: table; + clear: both; + } + +.ie8 .nav-tab-wrapper { + /* contain floats establishing a new block formatting context */ + display: inline-block; + width: 100%; + vertical-align: top; +} + +/*------------------------------------------------------------------------------ + 26.0 - Misc +------------------------------------------------------------------------------*/ + +.spinner { + background: url(../images/spinner.gif) no-repeat; + background-size: 20px 20px; + display: inline-block; + visibility: hidden; + float: right; + vertical-align: middle; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 4px 10px 0; +} + +.spinner.is-active, +.loading-content .spinner { + visibility: visible; +} + +#template > div { + margin-right: 16em; +} +#template .notice { + margin-top: 1em; + margin-right: 3%; +} +#template .notice p { + width: auto; +} +#template .submit .spinner { + float: none; +} + +.metabox-holder .stuffbox > h3, /* Back-compat for pre-4.4 */ +.metabox-holder .postbox > h3, /* Back-compat for pre-4.4 */ +.metabox-holder h3.hndle, /* Back-compat for pre-4.4 */ +.metabox-holder h2.hndle { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +/* Back-compat for nav-menus screen */ +.nav-menus-php .metabox-holder h3 { + padding: 10px 10px 11px 14px; + line-height: 21px; +} + +#templateside ul li a { + text-decoration: none; +} + +.plugin-install #description, +.plugin-install-network #description { + width: 60%; +} + +table .vers, +table .column-visible, +table .column-rating { + text-align: left; +} + +.attention, +.error-message { + color: #dc3232; + 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 +------------------------------------------------------------------------------*/ +.media-icon { + width: 62px; /* icon + border */ + text-align: center; +} + +.media-icon img { + border: 1px solid #e5e5e5; + border: 1px solid rgba(0, 0, 0, 0.07); +} + +#howto { + font-size: 11px; + margin: 0 5px; + display: block; +} + +.importers { + font-size: 16px; + width: auto; +} + +.importers td { + padding-right: 14px; + line-height: 1.5em; +} + +.importers .import-system { + max-width: 250px; +} + +.importers td.desc { + max-width: 500px; +} + +.importer-title, +.importer-desc, +.importer-action { + display: block; +} + +.importer-title { + color: #000; + font-size: 14px; + font-weight: 400; + margin-bottom: .2em; +} + +.importer-action { + line-height: 20px; /* Same as with .updating-message */ + color: #555; + margin-bottom: 1em; +} + +#post-body #post-body-content #namediv h3, /* Back-compat for pre-4.4 */ +#post-body #post-body-content #namediv h2 { + margin-top: 0; +} + +.edit-comment-author { + font-size: 14px; + line-height: 1.4; + font-weight: 600; + color: #222; + margin: 2px 0 0 9px; +} + +#namediv h3 label, /* Back-compat for pre-4.4 */ +#namediv h2 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: 400; + font-style: normal; + vertical-align: top; + transition: color .1s ease-in 0; + text-align: center; + color: #ffb900; +} + +.star-rating .star-full:before { + content: "\f155"; +} + +.star-rating .star-half:before { + content: "\f459"; +} + +.rtl .star-rating .star-half { + -webkit-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +.star-rating .star-empty:before { + content: "\f154"; +} + +div.action-links { + font-weight: 400; + margin: 6px 0 0; +} + +/* Plugin install thickbox */ +#plugin-information { + background: #fff; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; + padding: 0; +} + +#plugin-information-scrollable { + overflow: auto; + -webkit-overflow-scrolling: touch; + height: 100%; +} + +#plugin-information-title { + padding: 0 26px; + background: #f5f5f5; + font-size: 22px; + font-weight: 600; + line-height: 56px; + position: relative; + height: 56px; +} + +#plugin-information-title.with-banner { + margin-right: 0; + height: 250px; + background-size: cover; +} + +#plugin-information-title h2 { + font-size: 1em; + font-weight: 600; + padding: 0; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#plugin-information-title.with-banner h2 { + position: relative; + font-family: "Helvetica Neue", sans-serif; + display: inline-block; + font-size: 30px; + line-height: 50px; + box-sizing: border-box; + max-width: 100%; + padding: 0 15px; + margin-top: 174px; + color: #fff; + background: rgba( 30, 30, 30, 0.9 ); + text-shadow: 0 1px 3px rgba( 0, 0, 0, 0.4 ); + box-shadow: 0 0 30px rgba( 255, 255, 255, 0.1 ); + border-radius: 8px; +} + +#plugin-information-title div.vignette { + display: none; +} + +#plugin-information-title.with-banner div.vignette { + position: absolute; + display: block; + top: 0; + left: 0; + height: 250px; + width: 100%; + background: transparent; + box-shadow: inset 0 0 50px 4px rgba( 0, 0, 0, 0.2 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.1 ); +} + +#plugin-information-tabs { + padding: 0 16px; + position: relative; + right: 0; + left: 0; + min-height: 36px; + font-size: 0; + z-index: 1; + border-bottom: 1px solid #ddd; + background: #f3f3f3; +} + +#plugin-information-tabs a { + position: relative; + display: inline-block; + padding: 9px 10px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; + transition: none; +} + +#plugin-information-tabs a.current { + margin: 0 -1px -1px; + background: #fff; + border: 1px solid #ddd; + border-bottom-color: #fff; + padding-top: 8px; + color: #32373c; +} + +#plugin-information-tabs.with-banner a.current { + border-top: none; + padding-top: 9px; +} + +#plugin-information-tabs a:active, +#plugin-information-tabs a:focus { + outline: none; +} + +#plugin-information-content { + overflow: hidden; /* equal height column trick */ + background: #fff; + position: relative; + top: 0; + right: 0; + left: 0; + min-height: 100%; + /* Height of title + tabs + install now */ + min-height: calc( 100% - 152px ); +} + +#plugin-information-content.with-banner { + /* Height of banner + tabs + install now */ + min-height: calc( 100% - 346px ); +} + +#section-holder { + position: relative; + top: 0; + right: 250px; + bottom: 0; + left: 0; + margin-right: 250px; /* FYI box */ + padding: 10px 26px; + margin-bottom: -99939px; /* 60px less than the padding below to accommodate footer */ + padding-bottom: 99999px; /* equal height column trick */ +} + +#section-holder .updated { + margin: 16px 0; +} + +#plugin-information .fyi { + float: right; + position: relative; + top: 0; + right: 0; + padding: 16px; + margin-bottom: -99939px; /* 60px less than the padding below to accommodate footer */ + padding-bottom: 99999px; /* equal height column trick */ + width: 217px; + border-left: 1px solid #ddd; + background: #f3f3f3; + color: #666; +} + +#plugin-information .fyi strong { + color: #444; +} + +#plugin-information .fyi h3 { + font-weight: 600; + 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 .fyi-description { + margin-top: 0; +} + +#plugin-information .counter-container { + margin: 3px 0; +} + +#plugin-information .counter-label { + float: left; + margin-right: 5px; + min-width: 55px; +} + +#plugin-information .counter-back { + height: 17px; + width: 92px; + background-color: #e5e5e5; + float: left; +} + +#plugin-information .counter-bar { + height: 17px; + background-color: #ffc733; /* slightly lighter than stars due to larger expanse */ + float: left; +} + +#plugin-information .counter-count { + margin-left: 5px; +} + +#plugin-information .fyi ul.contributors { + margin-top: 10px; +} + +#plugin-information .fyi ul.contributors li { + display: inline-block; + margin-right: 8px; + vertical-align: middle; +} + +#plugin-information .fyi ul.contributors li { + display: inline-block; + margin-right: 8px; + vertical-align: middle; +} + +#plugin-information .fyi ul.contributors li img { + vertical-align: middle; + margin-right: 4px; +} + +#plugin-information-footer { + padding: 13px 16px; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 33px; /* 33+13+13+1=60 */ + border-top: 1px solid #ddd; + background: #f3f3f3; +} + +/* rtl:ignore */ +#plugin-information .section { + direction: ltr; +} + +/* rtl:ignore */ +#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; + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 ); +} + +/* rtl:ignore */ +#plugin-information #section-screenshots li p { + font-style: italic; + padding-left: 20px; +} + +#plugin-information pre { + padding: 7px; + overflow: auto; + border: 1px solid #ccc; +} + +#plugin-information blockquote { + border-left: 2px solid #ddd; + color: #666; + font-style: italic; + margin: 1em 0; + padding: 0 0 0 1em; +} + +/* rtl:ignore */ +#plugin-information .review { + overflow: hidden; /* clearfix */ + width: 100%; + margin-bottom: 20px; + border-bottom: 1px solid #e5e5e5; +} + +#plugin-information .review-title-section { + overflow: hidden; /* clearfix */ +} + +/* rtl:ignore */ +#plugin-information .review-title-section h4 { + display: inline-block; + float: left; + margin: 0 6px 0 0; +} + +#plugin-information .reviewer-info p { + clear: both; + margin: 0; + padding-top: 2px; +} + +/* rtl:ignore */ +#plugin-information .reviewer-info .avatar { + float: left; + margin: 4px 6px 0 0; +} + +/* rtl:ignore */ +#plugin-information .reviewer-info .star-rating { + float: left; +} + +/* rtl:ignore */ +#plugin-information .review-meta { + float: left; + margin-left: 0.75em; +} + +/* rtl:ignore */ +#plugin-information .review-body { + float: left; + width: 100%; +} + +.plugin-version-author-uri { + font-size: 13px; +} + +/* For non-js plugin installation screen ticket #36430. */ +.update-php .button.button-primary { + margin-right: 1em; +} + +@media screen and ( max-width: 771px ) { + #plugin-information-title.with-banner { + height: 100px; + } + + #plugin-information-title.with-banner h2 { + margin-top: 30px; + font-size: 20px; + line-height: 40px; + max-width: 85%; + } + + #plugin-information-title.with-banner div.vignette { + height: 100px; + } + + #plugin-information-tabs { + overflow: hidden; /* clearfix */ + padding: 0; + height: auto; /* let tabs wrap */ + } + + #plugin-information-tabs a.current { + margin-bottom: 0; + border-bottom: none; + } + + #plugin-information .fyi { + float: none; + border: 1px solid #ddd; + position: static; + width: auto; + margin: 26px 26px 0; + padding-bottom: 0; /* reset from the two column height fix */ + } + + #section-holder { + position: static; + margin: 0; + padding-bottom: 70px; /* reset from the two column height fix, plus accommodate footer */ + } + + #plugin-information .fyi h3, + #plugin-information .fyi small { + display: none; + } + + #plugin-information-footer { + padding: 12px 16px 0; + height: 46px; + } +} + +/* Thickbox for the Plugin details modal. */ +#TB_window.plugin-details-modal { + background: #fcfcfc; +} + +#TB_window.plugin-details-modal.thickbox-loading:before { + content: ""; + display: block; + width: 20px; + height: 20px; + position: absolute; + left: 50%; + top: 50%; + z-index: -1; + margin: -10px 0 0 -10px; + background: #fcfcfc url(../images/spinner.gif) no-repeat center; + background-size: 20px 20px; + -webkit-transform: translateZ(0); + transform: translateZ(0); +} + +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + #TB_window.plugin-details-modal.thickbox-loading:before { + background-image: url(../images/spinner-2x.gif); + } +} + +.plugin-details-modal #TB_title { + float: left; + height: 1px; +} + +.plugin-details-modal #TB_ajaxWindowTitle { + display: none; +} + +.plugin-details-modal #TB_closeWindowButton { + left: auto; + right: -30px; + color: #eee; +} + +.plugin-details-modal #TB_closeWindowButton:hover, +.plugin-details-modal #TB_closeWindowButton:focus { + color: #00a0d2; + outline: none; + box-shadow: none; +} + +.plugin-details-modal .tb-close-icon { + display: none; +} + +.plugin-details-modal #TB_closeWindowButton:after { + content: "\f335"; + font: normal 32px/29px 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* move plugin install close icon to top on narrow screens */ +@media screen and ( max-width: 830px ) { + .plugin-details-modal #TB_closeWindowButton { + right: 0; + top: -30px; + } +} + +/* @todo: move this. */ +img { + border: none; +} + +/* Metabox collapse arrow indicators */ +.sidebar-name .toggle-indicator:before, +.js .meta-box-sortables .postbox .toggle-indicator:before, +.bulk-action-notice .toggle-indicator:before, +.privacy-text-box .toggle-indicator:before { + content: "\f142"; + display: inline-block; + font: normal 20px/1 dashicons; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.js .widgets-holder-wrap.closed .toggle-indicator:before, +.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before, +.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before, +.privacy-text-box.closed .toggle-indicator:before { + content: "\f140"; +} + +.js .postbox .handlediv .toggle-indicator:before { + margin-top: 4px; + width: 20px; + border-radius: 50%; + text-indent: -1px; /* account for the dashicon alignment */ +} + +.rtl.js .postbox .handlediv .toggle-indicator:before { + text-indent: 1px; /* account for the dashicon alignment */ +} + +.bulk-action-notice .toggle-indicator:before { + line-height: 16px; + vertical-align: top; + color: #72777c; +} + +.js .postbox .handlediv:focus { + box-shadow: none; + outline: none; +} + +.js .postbox .handlediv:focus .toggle-indicator:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +/* @todo: appears to be Press This only and overridden */ +#photo-add-url-div input[type="text"] { + width: 300px; +} + +/* Theme/Plugin Editor */ +.alignleft h2 { + margin: 0; +} + +#template textarea { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + background: #f9f9f9; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +#template textarea, +#template .CodeMirror { + width: 100%; + min-height: 60vh; + height: calc( 100vh - 295px ); + border: 1px solid #ddd; + box-sizing: border-box; +} + +#templateside > h2 { + padding-top: 6px; + padding-bottom: 7px; + margin: 0; +} + +#templateside ol, +#templateside ul { + margin: 0; + padding: 0; +} +#templateside > ul { + box-sizing: border-box; + margin-top: 0; + overflow: auto; + padding: 0; + min-height: 60vh; + height: calc(100vh - 295px); + background-color: #f7f7f7; + border: 1px solid #ddd; + border-left: none; +} +#templateside ul ul { + padding-left: 12px; +} +#templateside > ul > li > ul[role=group] { + padding-left: 0; +} + +/* + * Styles for Theme and Plugin editors. + */ + +/* Hide collapsed items. */ +[role="treeitem"][aria-expanded="false"] > ul { + display: none; +} + +/* Use arrow dashicons for folder states, but hide from screen readers. */ +[role="treeitem"] span[aria-hidden] { + display: inline; + font-family: dashicons; + font-size: 20px; + position: absolute; + pointer-events: none; +} +[role="treeitem"][aria-expanded="false"] > .folder-label .icon:after { + content: "\f139"; +} +[role="treeitem"][aria-expanded="true"] > .folder-label .icon:after { + content: "\f140"; +} +[role="treeitem"] .folder-label { + display: block; + padding: 3px 3px 3px 12px; + cursor: pointer; +} + +/* Remove outline, and create our own focus and hover styles */ +[role="treeitem"] { + outline: 0; +} +[role="treeitem"] .folder-label.focus { + color: #124964; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); +} +[role="treeitem"].hover, +[role="treeitem"] .folder-label.hover { + background-color: #eaeaea; +} + +.tree-folder { + margin: 0; + position: relative; +} +[role="treeitem"] li { + position: relative; +} + +/* Styles for folder indicators/depth */ +.tree-folder .tree-folder::after { + content: ' '; + display: block; + position: absolute; + left: 2px; + border-left: 1px solid #ccc; + top: -13px; + bottom: 10px; +} +.tree-folder > li::before { + content: ' '; + position: absolute; + display: block; + border-left: 1px solid #ccc; + left: 2px; + top: -5px; + height: 18px; + width: 7px; + border-bottom: 1px solid #ccc; +} +.tree-folder > li::after { + content: ' '; + position: absolute; + display: block; + border-left: 1px solid #ccc; + left: 2px; + bottom: -7px; + top: 0; +} + +/* current-file needs to adjustment for .notice styles */ +#templateside .current-file { + margin: -4px 0 -2px; +} +.tree-folder > .current-file::before { + left: 4px; + height: 15px; + width: 0px; + border-left: none; + top: 3px; +} +.tree-folder > .current-file::after { + bottom: -4px; + height: 7px; + left: 2px; + top: auto; +} + +/* Lines shouldn't continue on last item */ +.tree-folder > li:last-child::after, +.tree-folder li:last-child > .tree-folder::after { + display: none; +} + + +#theme-plugin-editor-label { + display: inline-block; + margin-bottom: 1em; + font-weight: 600; +} + +/* rtl:ignore */ +#template textarea, +#docs-list { + direction: ltr; +} + +.fileedit-sub #theme, +.fileedit-sub #plugin { + max-width: 40%; +} +.fileedit-sub .alignright { + text-align: right; +} + +#template p { + width: 97%; +} + +#file-editor-linting-error { + margin-top: 1em; + margin-bottom: 1em; +} +#file-editor-linting-error > .notice { + margin: 0; + display: inline-block; +} +#file-editor-linting-error > .notice > p { + width: auto; +} +#template .submit { + margin-top: 1em; + padding: 0; +} + +#template .submit input[type=submit][disabled] { + cursor: not-allowed; +} +#templateside { + float: right; + width: 16em; + word-wrap: break-word; +} + +#postcustomstuff p.submit { + margin: 0; +} + +#templateside h4 { + margin: 1em 0 0; +} + +#templateside li { + margin: 4px 0; +} + +#templateside li:not(.howto) a, +.theme-editor-php .highlight { + display: block; + padding: 3px 0 3px 12px; + text-decoration: none; +} + +#templateside li:not(.howto) > a:first-of-type { + padding-top: 0; +} + +#templateside li.howto { + padding: 6px 12px 12px 12px; +} + +.theme-editor-php .highlight { + margin: -3px 3px -3px -12px; +} + +#templateside .highlight { + border: none; + font-weight: 600; +} + +.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%; +} + +#file-editor-warning .file-editor-warning-content { + margin: 25px; +} + +/* @todo: can we use a common class for these? */ +.nav-menus-php .item-edit:before, +.widget-top .widget-action .toggle-indicator:before, +.control-section .accordion-section-title:after, +.accordion-section-title:after { + content: "\f140"; + font: normal 20px/1 dashicons; + speak: none; + display: block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.widget-top .widget-action .toggle-indicator:before { + padding: 1px 2px 1px 0px; + border-radius: 50%; +} + +.handlediv, +.postbox .handlediv.button-link, +.item-edit, +.toggle-indicator, +.accordion-section-title:after { + color: #72777c; +} + +.widget-action { + color: #555d66; /* #fafafa background in the Widgets screen */ +} + +.widget-top:hover .widget-action, +.widget-action:focus, +.handlediv:hover, +.handlediv:focus, +.postbox .handlediv.button-link:hover, +.postbox .handlediv.button-link:focus, +.item-edit:hover, +.item-edit:focus, +.sidebar-name:hover .toggle-indicator, +.accordion-section-title:hover:after { + color: #23282d; +} + +.widget-top .widget-action:focus .toggle-indicator:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30,140,190,.8); +} + +.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, +.widget.open .widget-top .widget-action .toggle-indicator:before { + content: "\f142"; +} + +/*! + * jQuery UI Draggable/Sortable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ +.ui-draggable-handle, +.ui-sortable-handle { + touch-action: none; +} + +/* Accordion */ +.accordion-section { + border-bottom: 1px solid #ddd; + margin: 0; +} + +.accordion-section.open .accordion-section-content, +.no-js .accordion-section .accordion-section-content { + display: block; +} + +.accordion-section.open:hover { + border-bottom-color: #ddd; +} + +.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 #ddd; + border-right: 1px solid #ddd; + -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: #a0a5aa transparent; +} + +.cannot-expand .accordion-section-title { + cursor: auto; +} + +.cannot-expand .accordion-section-title:after { + display: none; +} + +.control-section .accordion-section-title, +.customize-pane-child .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, +.customize-pane-child .accordion-section-title:after { + top: calc(50% - 10px); /* Arrow height is 20px, so use half of that to vertically center */ +} + +.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: #23282d; + background: #f5f5f5; +} + +.control-section.open .accordion-section-title { + /* When expanded */ + border-bottom: 1px solid #ddd; +} + +/* Edit Site */ +.network-admin .edit-site-actions { + margin-top: 0; +} + +/* My Sites */ +.my-sites { + display: block; + overflow: auto; + zoom: 1; +} + +.my-sites li { + display: block; + padding: 8px 3%; + min-height: 130px; + margin: 0; +} + +@media only screen and (max-width: 599px) { + .my-sites li { + min-height: 0; + } +} + +@media only screen and (min-width: 600px) { + .my-sites.striped li { + background-color: #fff; + position: relative; + } + .my-sites.striped li:after { + content: ""; + width: 1px; + height: 100%; + position: absolute; + top: 0; + right: 0; + background: #ccc; + } + +} +@media only screen and (min-width: 600px) and (max-width: 699px) { + .my-sites li{ + float: left; + width: 44%; + } + .my-sites.striped li { + background-color: #fff; + } + .my-sites.striped li:nth-of-type(2n+1) { + clear: left; + } + .my-sites.striped li:nth-of-type(2n+2):after { + content: none; + } + .my-sites li:nth-of-type(4n+1), + .my-sites li:nth-of-type(4n+2) { + background-color: #f9f9f9; + } + +} + +@media only screen and (min-width: 700px) and (max-width: 1199px) { + .my-sites li { + float: left; + width: 27.333333%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(3n+3):after { + content: none; + } + .my-sites li:nth-of-type(6n+1), + .my-sites li:nth-of-type(6n+2), + .my-sites li:nth-of-type(6n+3) { + background-color: #f9f9f9; + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .my-sites li { + float: left; + width: 21%; + padding: 8px 2%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(4n+1) { + clear: left; + } + .my-sites.striped li:nth-of-type(4n+4):after { + content: none; + } + .my-sites li:nth-of-type(8n+1), + .my-sites li:nth-of-type(8n+2), + .my-sites li:nth-of-type(8n+3), + .my-sites li:nth-of-type(8n+4) { + background-color: #f9f9f9; + } +} + +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .my-sites li { + float: left; + width: 16%; + padding: 8px 2%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(5n+1) { + clear: left; + } + .my-sites.striped li:nth-of-type(5n+5):after { + content: none; + } + .my-sites li:nth-of-type(10n+1), + .my-sites li:nth-of-type(10n+2), + .my-sites li:nth-of-type(10n+3), + .my-sites li:nth-of-type(10n+4), + .my-sites li:nth-of-type(10n+5) { + background-color: #f9f9f9; + } +} + +@media only screen and (min-width: 1600px) { + .my-sites li { + float: left; + width: 12.666666%; + padding: 8px 2%; + background-color: #fff; + } + .my-sites.striped li:nth-of-type(6n+1) { + clear: left; + } + .my-sites.striped li:nth-of-type(6n+6):after { + content: none; + } + .my-sites li:nth-of-type(12n+1), + .my-sites li:nth-of-type(12n+2), + .my-sites li:nth-of-type(12n+3), + .my-sites li:nth-of-type(12n+4), + .my-sites li:nth-of-type(12n+5), + .my-sites li:nth-of-type(12n+6) { + background-color: #f9f9f9; + } +} + +.my-sites li a { + text-decoration: none; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-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; + 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 .widget-action, + .widget-top .widget-action:hover, + .sidebar-name .toggle-indicator, + .sidebar-name:hover .toggle-indicator, + .meta-box-sortables .postbox:hover .handlediv, + #bulk-titles div a, + #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; + } + + #wpcontent { + position: relative; + margin-left: 0; + padding-left: 10px; + } + + #wpbody-content { + padding-bottom: 100px; + } + + .wrap { + margin-right: 12px; + margin-left: 0; + } + + /* categories */ + #col-left, + #col-right { + float: none; + width: auto; + } + + #col-left .col-wrap, + #col-right .col-wrap { + padding: 0; + } + + /* Hidden Elements */ + #screen-meta, + #screen-meta-links, + #collapse-menu, + .post-format-select { + display: none !important; + } + + .wrap h1.wp-heading-inline { + margin-bottom: 0.5em; + } + + .wrap .add-new-h2, /* deprecated */ + .wrap .add-new-h2:active, /* deprecated */ + .wrap .page-title-action, + .wrap .page-title-action:active { + padding: 10px 15px; + font-size: 14px; + white-space: nowrap; + } + + /* Feedback Messages */ + .notice, + .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%; + } + + .wp-core-ui .notice.is-dismissible { + padding-right: 46px; + } + + .notice-dismiss { + padding: 13px; + } + + .wrap .icon32 + h2 { + margin-top: -2px; + } + + .wp-responsive-open #wpbody { + right: -16em; + } + + code { + word-wrap: break-word; + } + + /* General Metabox */ + .postbox { + font-size: 14px; + } + + .metabox-holder h3.hndle, /* Back-compat for pre-4.4 */ + .metabox-holder .stuffbox > h3, /* Back-compat for pre-4.4 */ + .metabox-holder .postbox > h3, /* Back-compat for pre-4.4 */ + .metabox-holder h2 { + padding: 12px; + } + + .postbox .handlediv { + margin-top: 3px; + } + + /* Subsubsub Nav */ + .subsubsub { + font-size: 16px; + text-align: center; + margin-bottom: 15px; + } + + /* Theme/Plugin File Editor */ + + #template textarea, + #template .CodeMirror { + box-sizing: border-box; + } + + #templateside { + float: none; + width: auto; + } + + #templateside > ul { + border-left: 1px solid #ddd; + } + + #templateside li { + margin: 0; + } + + #templateside li:not(.howto) a { + display: block; + padding: 5px; + } + #templateside li.howto { + padding: 12px; + } + + #templateside .highlight { + padding: 5px; + margin-left: -5px; + margin-top: -5px; + } + + #template > div, + #template .notice { + float: none; + margin: 1em 0; + width: auto; + } + + #template .CodeMirror, + #template textarea { + width: 100%; + } + + #templateside ul ul { + padding-left: 1.5em; + } + [role="treeitem"] .folder-label { + display: block; + padding: 5px; + } + .tree-folder > li::before, + .tree-folder > li::after, + .tree-folder .tree-folder::after { + left: -8px; + } + .tree-folder > li::before { + top: 0px; + height: 13px; + } + .tree-folder > .current-file::before { + left: -5px; + top: 7px; + width: 4px; + } + .tree-folder > .current-file::after { + height: 9px; + left: -8px; + } + .wrap #templateside span.notice { + margin-left: -5px; + width: 100%; + } + + .fileedit-sub .alignright { + float: left; + margin-top: 15px; + width: 100%; + text-align: left; + } + + .fileedit-sub .alignright label { + display: block; + } + + .fileedit-sub #theme, + .fileedit-sub #plugin { + margin-left: 0; + max-width: 70%; + } + + .fileedit-sub input[type="submit"] { + margin-bottom: 0px; + padding: 8px 18px; + } + + #documentation label[for="docs-list"] { + display: block; + } + + #documentation select[name="docs-list"] { + margin-left: 0; + max-width: 60%; + } + + #documentation input[type="button"] { + margin-bottom: 0; + padding: 8px 18px; + } + + #wpfooter { + display: none; + } + + #comments-form .checkforspam { + display: none; + } + + .edit-comment-author { + margin: 2px 0 0; + } + + .filter-drawer .filter-group-feature input, + .filter-drawer .filter-group-feature label { + line-height: 25px; + } + + .filter-drawer .filter-group-feature label { + margin-left: 32px; + } + + .wp-filter .button.drawer-toggle { + font-size: 13px; + line-height: 26px; + height: 28px; + } +} + +/* 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; + } + + h1.nav-tab-wrapper, + .wrap h2.nav-tab-wrapper, + .nav-tab-wrapper { + border-bottom: 0; + } + + h1 .nav-tab, + h2 .nav-tab, + h3 .nav-tab { + margin: 10px 10px 0 0; + border-bottom: 1px solid #ccc; + } +} + +@media screen and (max-width: 320px) { + /* Prevent default center alignment and larger font for the Right Now widget when + the network dashboard is viewed on a small mobile device. */ + #network_dashboard_right_now .subsubsub { + font-size: 14px; + text-align: left; + } +} diff --git a/wp-admin/css/common.min.css b/wp-admin/css/common.min.css new file mode 100644 index 0000000..7be7bcd --- /dev/null +++ b/wp-admin/css/common.min.css @@ -0,0 +1,9 @@ +/*! This file is auto-generated */ +.button.updated-message,a{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading,.spinner,.wp-header-end{visibility:hidden}.filter-group,.postbox-container .meta-box-sortables,.wp-filter,html.wp-toolbar{box-sizing:border-box}#docs-list,#plugin-information .section,#template textarea,.code,.ltr,code{direction:ltr}#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-left:20px}#wpcontent,#wpfooter{margin-left:160px}.folded #wpcontent,.folded #wpfooter{margin-left:36px}#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-left{float:left;width:35%}#col-right{float:right;width:65%}#col-left .col-wrap{padding:0 6px 0 0}#col-right .col-wrap{padding:0 0 0 6px}.alignleft{float:left}.alignright{float:right}#publishing-action .spinner,#save-post,.subsubsub{float:left}.textleft{text-align:left}.textright{text-align:right}.clear{clear:both}.wp-clearfix:after{content:"";display:table;clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#templateside,.misc-pub-filename,.pre,.widefat *{word-wrap:break-word}.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:#0073aa;z-index:100000;line-height:normal;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,.comment-ays,.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;box-shadow:0 1px 1px rgba(0,0,0,.04)}.comment-ays,.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}body{background:#f1f1f1;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;position:fixed;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0073aa}a,div{outline:0}a:active,a:hover{color:#00a0d2}.wp-person a:focus .gravatar,a:focus,a:focus .media-icon img{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}h1,h2,h3{color:#23282d}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{box-shadow:none;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,h3{font-size:1.3em;margin:1em 0}.update-core-php h2{margin-top:2em}.update-messages h2,.update-php h2,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}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}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}.code,code{font-family:Consolas,Monaco,monospace;unicode-bidi:embed}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;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#555d66;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat a,.widefat button.button-link{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead td,.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot td,.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 ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat tfoot td,.widefat th,.widefat thead td{text-align:left;line-height:1.3em;font-size:14px}.updates-table td input,.widefat tfoot td input,.widefat th input,.widefat thead td 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}.updates-table tbody td.check-column,.widefat tbody th.check-column,.widefat tfoot td.check-column,.widefat thead td.check-column{padding:11px 0 0 3px}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:4px;vertical-align:middle}.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}.postbox .inside h2,.wrap [class$=icon32]+h2,.wrap h1,.wrap>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px;line-height:29px}.wrap h1.wp-heading-inline{display:inline-block;margin-right:5px}.wp-header-end{margin:-2px 0 0}.subtitle{margin:0;padding-left:25px;color:#555d66;font-size:14px;font-weight:400;line-height:1}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{margin-left:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;border:1px solid #ccc;border-radius:2px;background:#f7f7f7;text-shadow:none;font-weight:600;font-size:13px;line-height:normal;color:#0073aa;cursor:pointer;outline:0}.wrap .wp-heading-inline+.page-title-action{margin-left:0}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{border-color:#008EC2;background:#00a0d2;color:#fff}.page-title-action:focus{color:#124964}.ac_match,.highlight,.subsubsub a.current{color:#000}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.wrap h1.long-header{padding-right:0}.wp-dialog{background-color:#fff}#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;box-shadow:0 1px 2px rgba(0,0,0,.1)}.sorthelper{background-color:#ccf3fa}.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd){background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-right-color:#99d}.highlight{background-color:#e4f2fd}.wp-ui-primary{color:#fff;background-color:#32373c}.wp-ui-text-primary{color:#32373c}.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:#82878c}img.emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot td,.widefat tfoot th,.widefat thead td,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#23282d}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,.notice-dismiss:before,.tagchecklist .ntdelbutton .remove-tag-icon:before,.welcome-panel .welcome-panel-close:before{background:0 0;color:#72777c;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before{margin:1px 0}.tagchecklist .ntdelbutton .remove-tag-icon:before{margin-left:2px;border-radius:50%;color:#0073aa;line-height:1.28}.tagchecklist .ntdelbutton:focus{outline:0}#bulk-titles div a:focus:before,#bulk-titles div a:hover:before,.tagchecklist .ntdelbutton:focus .remove-tag-icon:before,.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,.welcome-panel .welcome-panel-close:focus:before,.welcome-panel .welcome-panel-close:hover:before{color:#c00}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap}#namediv td.first,.nav-tab,.no-break,.star-rating{white-space:nowrap}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#delete-link 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,#delete-link 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,abbr.required,span.required{color:#dc3232;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{float:left;line-height:28px}#delete-link{line-height:28px;vertical-align:middle;text-align:left;margin-left:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:right;float:right;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:right}.preview{float:right}#sticky-span{margin-left:18px}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:right}#misc-publishing-actions .notice{margin-left:10px;margin-right:10px}.wp-filter{display:inline-block;position:relative;margin:12px 0 25px;padding:0 10px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;border-radius:30px;background:#72777c;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-left:5px;margin-right:20px}.filter-links li>a,.wp-filter .search-form.search-plugins{display:inline-block}.filter-items{float:left}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{box-shadow:none;border-bottom:4px solid #666;color:#23282d}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#00a0d2}.wp-filter .search-form{float:right;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .button.drawer-toggle{margin:10px 9px 0;padding:0 10px 0 6px;border-color:transparent;background-color:transparent;color:#666;vertical-align:baseline;box-shadow:none}.wp-filter .drawer-toggle:before{content:"\f111";margin:0 5px 0 0;color:#72777c;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-filter .button.drawer-toggle:focus,.wp-filter .button.drawer-toggle:hover,.wp-filter .drawer-toggle:focus:before,.wp-filter .drawer-toggle:hover:before{background-color:transparent;color:#00a0d2}.wp-filter .button.drawer-toggle:focus:active,.wp-filter .button.drawer-toggle:hover{border-color:transparent}.wp-filter .button.drawer-toggle:focus{border-color:#5b9dd9}.wp-filter .button.drawer-toggle:active{background:0 0;box-shadow:none;-webkit-transform:none;transform:none}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer,.wp-filter .favorites-form{display:none;margin:0 -10px 0 -20px;padding:20px;border-top:1px solid #eee;background:#fafafa;overflow:hidden}.show-favorites-form .favorites-form,.show-filters .filter-drawer{display:block}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .button.drawer-toggle{border-radius:2px;background:#72777c;color:#fff}.filter-group,.filtered-by .tag{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{position:relative;float:left;margin:0 1% 0 0;padding:20px 10px 10px;width:24%;background:#fff}.filter-group legend{position:absolute;top:10px;display:block;margin:0;padding:0;font-size:1em;font-weight:600}.filter-drawer .filter-group-feature{margin:28px 0 0;list-style-type:none;font-size:12px}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:16px}.filter-drawer .filter-group-feature input{position:absolute;margin:0}.filter-group .filter-group-feature label{display:block;margin:14px 0 14px 23px}.filter-drawer .buttons{clear:both;margin-bottom:20px}.filter-drawer .filter-group+.buttons{margin-bottom:0;padding-top:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin-left:10px}.wp-filter .button-link.edit-filters{padding:0 5px;line-height:28px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-left:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters .favorites-form,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}div[class=update-message]{padding:.5em 12px .5em 0}.form-table td .notice p,.notice p,.notice-title,div.error p,div.updated p{margin:.5em 0;padding:2px}.error a{text-decoration:underline}.updated a{padding-bottom:2px}.notice-alt{box-shadow:none}.notice-large{padding:10px 20px}.notice-title{display:inline-block;color:#23282d;font-size:18px}.wp-core-ui .notice.is-dismissible{padding-right:38px;position:relative}.notice-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#72777c;cursor:pointer}.notice-dismiss:active:before,.notice-dismiss:focus:before,.notice-dismiss:hover:before{color:#c00}.notice-dismiss:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .notice-dismiss:focus{outline:#5b9dd9 solid 1px}.notice-success,div.updated{border-left-color:#46b450}.notice-success.notice-alt{background-color:#ecf7ed}.notice-warning{border-left-color:#ffb900}.notice-warning.notice-alt{background-color:#fff8e5}.notice-error,div.error{border-left-color:#dc3232}.notice-error.notice-alt{background-color:#fbeaea}.notice-info{border-left-color:#00a0d2}.notice-info.notice-alt{background-color:#e5f5fa}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updated-message p:before,.updating-message p:before{display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}.wrap #templateside .notice{display:block;margin:0;padding:5px 8px;font-weight:600;text-decoration:none}.wrap #templateside span.notice{margin-left:-12px}#templateside li.notice a{padding:0}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updating-message p:before{color:#f56e28;content:"\f463"}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.updating-message p:before{-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.button.updated-message:before,.installed p:before,.updated-message p:before{color:#79ba49;content:'\f147'}.update-message.notice-error p:before{color:#dc3232;content:"\f534"}.import-php .updating-message:before,.wrap .notice p:before{margin-right:6px;vertical-align:bottom}#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;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#screen-meta,ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}.update-php .spinner{float:none;margin:-4px 0}#ajax-response.alignleft{margin-left:2em}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before{margin:3px 5px 0 -2px}.button-primary.updating-message:before{color:#fff}.button-primary.updated-message:before{color:#66c6e4}@media aural{.button.installed:before,.button.installing:before,.update-message p:before,.wrap .notice p:before{speak:none}}#adminmenu a,#catlist 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-links{margin:0 20px 0 0}#screen-meta{margin:0 20px -1px 0;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;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:none;background:#fff;box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:0;background:0 0;border-radius:0;color:#72777c;line-height:1.7;padding:3px 6px 3px 16px}#screen-meta-links .show-settings:active,#screen-meta-links .show-settings:focus,#screen-meta-links .show-settings:hover{color:#32373c}#screen-meta-links .show-settings:active{box-shadow:none;-webkit-transform:none;transform:none}#screen-meta-links .show-settings: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:#72777c}#templateside ul li a,.contextual-help-tabs a,.nav-tab{text-decoration:none}#screen-meta-links .screen-meta-active:after{content:"\f142"}.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,#screen-options-wrap legend{margin:0;padding:8px 0;font-size:13px;font-weight:600}.hndle a,.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:30px}#number-of-columns{display:inline-block;vertical-align:middle;line-height:30px}.metabox-prefs input[type=checkbox]{margin-top:0;margin-right:6px}.metabox-prefs label input,.metabox-prefs label input[type=checkbox]{margin:-4px 5px 0 0}.metabox-prefs .columns-prefs label input{margin:-1px 2px 0 0}.metabox-prefs label a{display:none}.metabox-prefs .screen-options input,.metabox-prefs .screen-options label{margin-top:0;margin-bottom:0;vertical-align:middle}.metabox-prefs .screen-options .screen-per-page{margin-right:15px}.metabox-prefs .screen-options label{line-height:28px;padding-right:0}.screen-options+.screen-options{margin-top:10px}.metabox-prefs .submit{margin-top:1em;padding:0}#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;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;border:1px solid transparent;border-right:none;border-left:none}.contextual-help-tabs a:hover{color:#32373c}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-left:2px solid #00a0d2;background:#f6fbfd;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:#32373c}.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}.widefat td,.widefat th{color:#555}.widefat ol,.widefat p,.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th,.widefat ul{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:outside;margin-left:2em}.postbox-container{float:left}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #b4b9be;height:250px;position:relative}.metabox-holder .postbox-container .empty-container:after{content:attr(data-emptystring);margin:auto;position:absolute;top:0;left:0;bottom:0;right:0;height:1em;width:200px;text-align:center;color:#ccc;font-size:18px;display:none}.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;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;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px}#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,.nav-tab,.plugins .name{font-weight:600}.postbox .handlediv{display:none;float:right;width:36px;height:36px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.js .postbox .handlediv{display:block}.sortable-placeholder{border:1px dashed #b4b9be;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.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;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 10px 0 0}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}.nav-tab{float:left;border:1px solid #ccc;border-bottom:none;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;background:#e5e5e5;color:#555}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:16px}.nav-tab:focus,.nav-tab:hover{background-color:#fff;color:#444}.nav-tab-active,.nav-tab:focus:active{box-shadow:none}.nav-tab-active{margin-bottom:-1px;color:#444}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:1px solid #ccc;margin:0;padding-top:9px;padding-bottom:0;line-height:inherit}.nav-tab-wrapper:not(.wp-clearfix):after{content:"";display:table;clear:both}.ie8 .nav-tab-wrapper{display:inline-block;width:100%;vertical-align:top}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;float:right;vertical-align:middle;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:4px 10px 0}.loading-content .spinner,.spinner.is-active{visibility:visible}#template>div{margin-right:16em}#template .notice{margin-top:1em;margin-right:3%}#template .notice p{width:auto}#template .submit .spinner{float:none}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.nav-menus-php .metabox-holder h3{padding:10px 10px 11px 14px;line-height:21px}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:left}.attention,.error-message{color:#dc3232;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}#howto,.importer-action,.importer-desc,.importer-title{display:block}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}.media-icon{width:62px;text-align:center}.media-icon img{border:1px solid #e5e5e5;border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px}.importers{font-size:16px;width:auto}.importers td{padding-right:14px;line-height:1.5em}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.post-categories,.post-categories li{display:inline}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:20px;color:#555;margin-bottom:1em}#post-body #post-body-content #namediv h2,#post-body #post-body-content #namediv h3{margin-top:0}.edit-comment-author{font-size:14px;line-height:1.4;font-weight:600;color:#222;margin:2px 0 0 9px}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.checkbox,.post-categories,.zerosize,fieldset{margin:0;padding:0}.zerosize{height:0;width:0;border:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none}fieldset{border:0}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:left}.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;transition:color .1s ease-in 0;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{-webkit-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:#fff;position:fixed;top:0;right:0;bottom:0;left:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;-webkit-overflow-scrolling:touch;height:100%}#plugin-information-title{padding:0 26px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;height:56px}#plugin-information-title.with-banner{margin-right:0;height:250px;background-size:cover}#plugin-information-title h2{font-size:1em;font-weight:600;padding:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{position:relative;font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;box-sizing:border-box;max-width:100%;padding:0 15px;margin-top:174px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 0 30px rgba(255,255,255,.1);border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{position:absolute;display:block;top:0;left:0;height:250px;width:100%;background:0 0;box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;right:0;left:0;min-height:36px;font-size:0;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;display:inline-block;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#32373c}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;right:0;left:0;min-height:100%;min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;right:250px;bottom:0;left:0;margin-right:250px;padding:10px 26px 99999px;margin-bottom:-99939px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:right;position:relative;top:0;right:0;padding:16px 16px 99999px;margin-bottom:-99939px;width:217px;border-left:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#444}#plugin-information .fyi h3{font-weight:600;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 .fyi-description{margin-top:0}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:left;margin-right:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#e5e5e5;float:left}#plugin-information .counter-bar{height:17px;background-color:#ffc733;float:left}#plugin-information .counter-count{margin-left:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-right:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-right:4px}#plugin-information-footer{padding:13px 16px;position:absolute;right:0;bottom:0;left:0;height:33px;border-top:1px solid #ddd;background:#f3f3f3}#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;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-information blockquote{border-left:2px solid #ddd;color:#666;font-style:italic;margin:1em 0;padding:0 0 0 1em}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e5e5e5}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}.update-php .button.button-primary{margin-right:1em}@media screen and (max-width:771px){#plugin-information-title.with-banner,#plugin-information-title.with-banner div.vignette{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}#TB_window.plugin-details-modal{background:#fcfcfc}#TB_window.plugin-details-modal.thickbox-loading:before{content:"";display:block;width:20px;height:20px;position:absolute;left:50%;top:50%;z-index:-1;margin:-10px 0 0 -10px;background:url(../images/spinner.gif) center no-repeat #fcfcfc;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.plugin-details-modal #TB_ajaxWindowTitle,.plugin-details-modal .tb-close-icon{display:none}.tree-folder,[role=treeitem] li{position:relative}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#TB_window.plugin-details-modal.thickbox-loading:before{background-image:url(../images/spinner-2x.gif)}}.plugin-details-modal #TB_title{float:left;height:1px}.plugin-details-modal #TB_closeWindowButton{left:auto;right:-30px;color:#eee}.plugin-details-modal #TB_closeWindowButton:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;box-shadow:none}.plugin-details-modal #TB_closeWindowButton:after{content:"\f335";font:400 32px/29px dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (max-width:830px){.plugin-details-modal #TB_closeWindowButton{right:0;top:-30px}}img{border:none}.bulk-action-notice .toggle-indicator:before,.js .meta-box-sortables .postbox .toggle-indicator:before,.privacy-text-box .toggle-indicator:before,.sidebar-name .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,.js .widgets-holder-wrap.closed .toggle-indicator:before,.privacy-text-box.closed .toggle-indicator:before{content:"\f140"}.js .postbox .handlediv .toggle-indicator:before{margin-top:4px;width:20px;border-radius:50%;text-indent:-1px}#template .CodeMirror,#template textarea,#templateside>ul{box-sizing:border-box;min-height:60vh;height:calc(100vh - 295px);border:1px solid #ddd}.rtl.js .postbox .handlediv .toggle-indicator:before{text-indent:1px}.bulk-action-notice .toggle-indicator:before{line-height:16px;vertical-align:top;color:#72777c}.js .postbox .handlediv:focus{box-shadow:none;outline:0}.js .postbox .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#photo-add-url-div input[type=text]{width:300px}.alignleft h2{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;background:#f9f9f9;-moz-tab-size:4;-o-tab-size:4;tab-size:4}#template .CodeMirror,#template textarea{width:100%}#templateside>h2{padding-top:6px;padding-bottom:7px;margin:0}#templateside ol,#templateside ul{margin:0;padding:0}#templateside>ul{margin-top:0;overflow:auto;padding:0;background-color:#f7f7f7;border-left:none}#templateside ul ul{padding-left:12px}#templateside>ul>li>ul[role=group]{padding-left:0}[role=treeitem][aria-expanded=false]>ul{display:none}[role=treeitem] span[aria-hidden]{display:inline;font-family:dashicons;font-size:20px;position:absolute;pointer-events:none}[role=treeitem][aria-expanded=false]>.folder-label .icon:after{content:"\f139"}[role=treeitem][aria-expanded=true]>.folder-label .icon:after{content:"\f140"}[role=treeitem] .folder-label{display:block;padding:3px 3px 3px 12px;cursor:pointer}[role=treeitem]{outline:0}[role=treeitem] .folder-label.focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}[role=treeitem] .folder-label.hover,[role=treeitem].hover{background-color:#eaeaea}.tree-folder{margin:0}.tree-folder .tree-folder::after{content:' ';display:block;position:absolute;left:2px;border-left:1px solid #ccc;top:-13px;bottom:10px}.tree-folder>li::before{content:' ';position:absolute;display:block;border-left:1px solid #ccc;left:2px;top:-5px;height:18px;width:7px;border-bottom:1px solid #ccc}.tree-folder>li::after{content:' ';position:absolute;display:block;border-left:1px solid #ccc;left:2px;bottom:-7px;top:0}#templateside .current-file{margin:-4px 0 -2px}.tree-folder>.current-file::before{left:4px;height:15px;width:0;border-left:none;top:3px}.tree-folder>.current-file::after{bottom:-4px;height:7px;left:2px;top:auto}.tree-folder li:last-child>.tree-folder::after,.tree-folder>li:last-child::after{display:none}#theme-plugin-editor-label{display:inline-block;margin-bottom:1em;font-weight:600}.fileedit-sub #plugin,.fileedit-sub #theme{max-width:40%}.fileedit-sub .alignright{text-align:right}#template p{width:97%}#file-editor-linting-error{margin-top:1em;margin-bottom:1em}#file-editor-linting-error>.notice{margin:0;display:inline-block}#file-editor-linting-error>.notice>p{width:auto}#template .submit{margin-top:1em;padding:0}#template .submit input[type=submit][disabled]{cursor:not-allowed}#templateside{float:right;width:16em}#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside li{margin:4px 0}#templateside li:not(.howto) a,.theme-editor-php .highlight{display:block;padding:3px 0 3px 12px;text-decoration:none}#templateside li:not(.howto)>a:first-of-type{padding-top:0}#templateside li.howto{padding:6px 12px 12px}.theme-editor-php .highlight{margin:-3px 3px -3px -12px}#templateside .highlight{border:none;font-weight:600}.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%}#file-editor-warning .file-editor-warning-content{margin:25px}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top .widget-action .toggle-indicator:before{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top .widget-action .toggle-indicator:before{padding:1px 2px 1px 0;border-radius:50%}.accordion-section-title:after,.handlediv,.item-edit,.postbox .handlediv.button-link,.toggle-indicator{color:#72777c}.widget-action{color:#555d66}.accordion-section-title:hover:after,.handlediv:focus,.handlediv:hover,.item-edit:focus,.item-edit:hover,.postbox .handlediv.button-link:focus,.postbox .handlediv.button-link:hover,.sidebar-name:hover .toggle-indicator,.widget-action:focus,.widget-top:hover .widget-action{color:#23282d}.widget-top .widget-action:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.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,.widget.open .widget-top .widget-action .toggle-indicator:before{content:"\f142"}/*! + * jQuery UI Draggable/Sortable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */.ui-draggable-handle,.ui-sortable-handle{touch-action:none}.accordion-section{border-bottom:1px solid #ddd;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#ddd}.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 #ddd;border-right:1px solid #ddd;-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:#a0a5aa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title,.customize-pane-child .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,.customize-pane-child .accordion-section-title:after{top:calc(50% - 10px)}.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:#23282d;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #ddd}.network-admin .edit-site-actions{margin-top:0}.my-sites{display:block;overflow:auto;zoom:1}.my-sites li{display:block;padding:8px 3%;min-height:130px;margin:0}@media only screen and (max-width:599px){.my-sites li{min-height:0}}@media only screen and (min-width:600px){.my-sites.striped li{background-color:#fff;position:relative}.my-sites.striped li:after{content:"";width:1px;height:100%;position:absolute;top:0;right:0;background:#ccc}}@media only screen and (min-width:600px) and (max-width:699px){.my-sites li{float:left;width:44%}.my-sites.striped li{background-color:#fff}.my-sites.striped li:nth-of-type(2n+1){clear:left}.my-sites.striped li:nth-of-type(2n+2):after{content:none}.my-sites li:nth-of-type(4n+1),.my-sites li:nth-of-type(4n+2){background-color:#f9f9f9}}@media only screen and (min-width:700px) and (max-width:1199px){.my-sites li{float:left;width:27.333333%;background-color:#fff}.my-sites.striped li:nth-of-type(3n+3):after{content:none}.my-sites li:nth-of-type(6n+1),.my-sites li:nth-of-type(6n+2),.my-sites li:nth-of-type(6n+3){background-color:#f9f9f9}}@media only screen and (min-width:1200px) and (max-width:1399px){.my-sites li{float:left;width:21%;padding:8px 2%;background-color:#fff}.my-sites.striped li:nth-of-type(4n+1){clear:left}.my-sites.striped li:nth-of-type(4n+4):after{content:none}.my-sites li:nth-of-type(8n+1),.my-sites li:nth-of-type(8n+2),.my-sites li:nth-of-type(8n+3),.my-sites li:nth-of-type(8n+4){background-color:#f9f9f9}}@media only screen and (min-width:1400px) and (max-width:1599px){.my-sites li{float:left;width:16%;padding:8px 2%;background-color:#fff}.my-sites.striped li:nth-of-type(5n+1){clear:left}.my-sites.striped li:nth-of-type(5n+5):after{content:none}.my-sites li:nth-of-type(10n+1),.my-sites li:nth-of-type(10n+2),.my-sites li:nth-of-type(10n+3),.my-sites li:nth-of-type(10n+4),.my-sites li:nth-of-type(10n+5){background-color:#f9f9f9}}@media only screen and (min-width:1600px){.my-sites li{float:left;width:12.666666%;padding:8px 2%;background-color:#fff}.my-sites.striped li:nth-of-type(6n+1){clear:left}.my-sites.striped li:nth-of-type(6n+6):after{content:none}.my-sites li:nth-of-type(12n+1),.my-sites li:nth-of-type(12n+2),.my-sites li:nth-of-type(12n+3),.my-sites li:nth-of-type(12n+4),.my-sites li:nth-of-type(12n+5),.my-sites li:nth-of-type(12n+6){background-color:#f9f9f9}}.my-sites li a{text-decoration:none}@media print,(-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) bottom left repeat-x;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 .toggle-indicator,.sidebar-name:hover .toggle-indicator,.widget-top .widget-action,.widget-top .widget-action:hover{background:0 0!important}}@-ms-viewport{width:device-width}@media screen and (max-width:782px){#col-left,#col-right,#templateside{float:none;width:auto}html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:rgba(0,0,0,0)!important}#wpcontent{position:relative;margin-left:0;padding-left:10px}#wpbody-content{padding-bottom:100px}.wrap{margin-right:12px;margin-left:0}#col-left .col-wrap,#col-right .col-wrap{padding:0}#collapse-menu,#screen-meta,#screen-meta-links,.post-format-select{display:none!important}#documentation label[for=docs-list],.fileedit-sub .alignright label{display:block}.wrap h1.wp-heading-inline{margin-bottom:.5em}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{padding:10px 15px;font-size:14px;white-space:nowrap}.media-upload-form div.error,.notice,.wrap div.error,.wrap div.updated{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.wp-core-ui .notice.is-dismissible{padding-right:46px}.notice-dismiss{padding:13px}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpbody{right:-16em}code{word-wrap:break-word}.postbox{font-size:14px}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2,.metabox-holder h3.hndle{padding:12px}.postbox .handlediv{margin-top:3px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}#templateside>ul{border-left:1px solid #ddd}#templateside li{margin:0}#templateside li:not(.howto) a{display:block;padding:5px}#templateside li.howto{padding:12px}#templateside .highlight{padding:5px;margin-left:-5px;margin-top:-5px}#template .notice,#template>div{float:none;margin:1em 0;width:auto}#template .CodeMirror,#template textarea{box-sizing:border-box;width:100%}#templateside ul ul{padding-left:1.5em}[role=treeitem] .folder-label{display:block;padding:5px}#documentation input[type=button],.fileedit-sub input[type=submit]{margin-bottom:0;padding:8px 18px}.tree-folder .tree-folder::after,.tree-folder>li::after,.tree-folder>li::before{left:-8px}.tree-folder>li::before{top:0;height:13px}.tree-folder>.current-file::before{left:-5px;top:7px;width:4px}.tree-folder>.current-file::after{height:9px;left:-8px}.wrap #templateside span.notice{margin-left:-5px;width:100%}.fileedit-sub .alignright{float:left;margin-top:15px;width:100%;text-align:left}.fileedit-sub #plugin,.fileedit-sub #theme{margin-left:0;max-width:70%}#documentation select[name=docs-list]{margin-left:0;max-width:60%}#comments-form .checkforspam,#wpfooter{display:none}.edit-comment-author{margin:2px 0 0}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:25px}.filter-drawer .filter-group-feature label{margin-left:32px}.wp-filter .button.drawer-toggle{font-size:13px;line-height:26px;height:28px}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open,div#post-body.metabox-holder.columns-1{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:0}h1 .nav-tab,h2 .nav-tab,h3 .nav-tab{margin:10px 10px 0 0;border-bottom:1px solid #ccc}}@media screen and (max-width:320px){#network_dashboard_right_now .subsubsub{font-size:14px;text-align:left}} \ No newline at end of file diff --git a/wp-admin/css/customize-controls-rtl.css b/wp-admin/css/customize-controls-rtl.css new file mode 100644 index 0000000..39c635a --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.css @@ -0,0 +1,3032 @@ +body { + overflow: hidden; + -webkit-text-size-adjust: 100%; +} + +.customize-controls-close, +.widget-control-actions a { + text-decoration: none; +} + +#customize-controls h3 { + font-size: 14px; +} + +#customize-controls img { + max-width: 100%; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked { + background-color: rgba( 0, 0, 0, 0.7 ); + padding: 25px; +} + +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .customize-changeset-locked-message { + margin-right: auto; + margin-left: auto; + max-width: 366px; + min-height: 64px; + width: auto; + padding: 25px 109px 25px 25px; + position: relative; + background: #fff; + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + line-height: 1.5; + overflow-y: auto; + text-align: right; + top: calc( 50% - 100px ); +} + +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .currently-editing { + margin-top: 0; +} +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .action-buttons { + margin-bottom: 0; +} + +.customize-changeset-locked-avatar { + width: 64px; + position: absolute; + right: 25px; + top: 25px; +} + +.wp-core-ui.wp-customizer .customize-changeset-locked-message a.button { + margin-left: 10px; + margin-top: 0; +} + +#customize-controls .description { + color: #555d66; +} + +#customize-save-button-wrapper { + float: left; + margin-top: 9px; +} + +body:not(.ready) #customize-save-button-wrapper .save { + visibility: hidden; +} +#customize-save-button-wrapper .save { + float: right; + border-radius: 3px; + box-shadow: none; /* @todo Adjust box shadow based on the disable states of paired button. */ + margin-top: 0; +} + +#customize-save-button-wrapper .save:focus, #publish-settings:focus { + box-shadow: 0 1px 0 #0073aa, 0 0 2px 1px #33b3db; /* This is default box shadow for focus */ +} + +#customize-save-button-wrapper .save.has-next-sibling { + border-radius: 0 3px 3px 0; +} + +#customize-sidebar-outer-content { + position: absolute; + top: 0; + bottom: 0; + right: 0; + visibility: hidden; + overflow-x: hidden; + overflow-y: auto; + width: 100%; + margin: 0; + z-index: -1; + background: #eee; + transition: right .18s; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + height: 100%; +} + +#customize-theme-controls .control-section-outer { + display: none !important; +} + +#customize-outer-theme-controls .accordion-section-content { + padding: 12px; +} + +#customize-outer-theme-controls .accordion-section-content.open { + display: block; +} + +.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content { + visibility: visible; + right: 100%; + transition: right .18s; +} + +.customize-outer-pane-parent { + margin: 0; +} + +.outer-section-open .wp-full-overlay.expanded .wp-full-overlay-main { + right: 300px; + opacity: 0.4; +} + +.outer-section-open .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main, +.outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, +.adding-menu-items .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main, +.adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, +.adding-widget .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main, +.adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main { + right: 64%; +} + +#customize-outer-theme-controls li.notice { + padding-top: 8px; + padding-bottom: 8px; + margin-right: 0; + margin-bottom: 10px; +} + +#publish-settings { + text-indent: 0; + border-radius: 3px 0 0 3px; + padding-right: 0; + padding-left: 0; + box-shadow: none; /* @todo Adjust box shadow based on the disable states of paired button. */ + font-size: 14px; + width: 30px; + float: right; + -webkit-transform: none; + transform: none; + margin-top: 0; +} + +body:not(.ready) #publish-settings, +body.trashing #customize-save-button-wrapper .save, +body.trashing #publish-settings { + display: none; +} + +#customize-header-actions .spinner { + margin-top: 13px; + margin-left: 4px; +} + +.saving #customize-header-actions .spinner, +.trashing #customize-header-actions .spinner { + visibility: visible; +} + +#customize-header-actions { + border-bottom: 1px solid #ddd; +} + +#customize-controls .wp-full-overlay-sidebar-content { + overflow-y: auto; + overflow-x: hidden; +} + +.outer-section-open #customize-controls .wp-full-overlay-sidebar-content { + background: #eee; +} + +#customize-controls .customize-info { + border: none; + border-bottom: 1px solid #ddd; + margin-bottom: 15px; +} + +#customize-control-changeset_status .customize-inside-control-row, +#customize-control-changeset_preview_link input { + background-color: #ffffff; + border-bottom: 1px solid #ddd; + box-sizing: content-box; + width: 100%; + margin-right: -12px; + padding-right: 12px; + padding-left: 12px; +} + +#customize-control-trash_changeset { + margin-top: 20px; +} +#customize-control-trash_changeset .button-link { + position: relative; + padding-right: 24px; + display: inline-block; +} +#customize-control-trash_changeset .button-link:before { + content: "\f182"; + font: normal 22px dashicons; + text-decoration: none; + position: absolute; + right: 0; + top: -2px; +} + +#customize-controls .date-input:invalid { + border-color: #dc3232; +} + +#customize-control-changeset_status .customize-inside-control-row { + padding-top: 10px; + padding-bottom: 10px; + font-weight: 500; +} + +#customize-control-changeset_status .customize-inside-control-row:first-of-type { + border-top: 1px solid #ddd; +} + +#customize-control-changeset_status .customize-control-title { + margin-bottom: 6px; +} + +#customize-control-changeset_status input { + margin-right: 0; +} + +#customize-control-changeset_preview_link { + position: relative; + display: block; +} + +.preview-link-wrapper .customize-copy-preview-link.preview-control-element.button { + margin: 0; + position: absolute; + bottom: 9px; + left: 0; +} + +.preview-link-wrapper { + position: relative; +} + +.customize-copy-preview-link:before, +.customize-copy-preview-link:after { + content: ""; + height: 28px; + position: absolute; + background: #ffffff; + top: -1px; +} + +.customize-copy-preview-link:before { + right: -10px; + width: 9px; + opacity: 0.75; +} + +.customize-copy-preview-link:after { + right: -5px; + width: 4px; + opacity: 0.8; +} + +#customize-control-changeset_preview_link input { + line-height: 2.5; + border-top: 1px solid #ddd; + border-right: none; + border-left: none; + text-indent: -999px; + color: #fff; +} + +#customize-control-changeset_preview_link label { + position: relative; + display: block; +} + +#customize-control-changeset_preview_link a { + display: inline-block; + position: absolute; + white-space: nowrap; + overflow: hidden; + width: 90%; + bottom: 14px; + font-size: 14px; + text-decoration: none; +} + +#customize-control-changeset_preview_link a.disabled, +#customize-control-changeset_preview_link a.disabled:active, +#customize-control-changeset_preview_link a.disabled:focus, +#customize-control-changeset_preview_link a.disabled:visited { + color: black; + opacity: 0.4; + cursor: default; + outline: none; + box-shadow: none; +} + +#sub-accordion-section-publish_settings .customize-section-description-container { + display: none; +} + +#customize-controls .customize-info.section-meta { + margin-bottom: 15px; +} + +.customize-control-date_time .customize-control-description + .date-time-fields.includes-time { + margin-top: 10px; +} + +.customize-control.customize-control-date_time .date-time-fields .date-input.day { + margin-left: 0; +} + +.date-time-fields .date-input.month { + width: auto; + margin: 0; +} + +.date-time-fields .date-input.day, +.date-time-fields .date-input.hour, +.date-time-fields .date-input.minute { + width: 46px; +} + +.date-time-fields .date-input.year { + width: 60px; +} + +.date-time-fields .date-input.meridian { + width: auto; + margin: 0; +} + +.date-time-fields .time-row { + margin-top: 12px; +} + +.date-time-fields .date-timezone { + line-height: 2.2; + text-decoration: none; +} + +#customize-control-changeset_preview_link { + margin-top: 6px; +} + +#customize-control-changeset_status { + margin-bottom: 0; + padding-bottom: 0; +} + +#customize-control-changeset_scheduled_date { + box-sizing: content-box; + width: 100%; + margin-right: -12px; + padding: 12px; + background: #ffffff; + border-bottom: 1px solid #ddd; + margin-bottom: 0; +} + +#customize-control-changeset_scheduled_date .customize-control-description { + font-style: normal; +} + +#customize-controls .customize-info.is-in-view, +#customize-controls .customize-section-title.is-in-view { + position: absolute; + z-index: 9; + width: 100%; + box-shadow: 0 1px 0 rgba(0, 0, 0, .1); +} + +#customize-controls .customize-section-title.is-in-view { + margin-top: 0; +} + +#customize-controls .customize-info.is-in-view + .accordion-section { + margin-top: 15px; +} + +#customize-controls .customize-info.is-sticky, +#customize-controls .customize-section-title.is-sticky { + position: fixed; + top: 46px; +} + +#customize-controls .customize-info .accordion-section-title { + background: #fff; + color: #555d66; + border-right: none; + border-left: none; + border-bottom: none; + cursor: default; +} + +#customize-controls .customize-info.open .accordion-section-title:after, +#customize-controls .customize-info .accordion-section-title:hover:after, +#customize-controls .customize-info .accordion-section-title:focus:after { + color: #32373c; +} + +#customize-controls .customize-info .accordion-section-title:after { + display: none; +} + +#customize-controls .customize-info .preview-notice { + font-size: 13px; + line-height: 24px; +} + +#customize-controls .customize-pane-child .customize-section-title h3, +#customize-controls .customize-pane-child h3.customize-section-title, +#customize-outer-theme-controls .customize-pane-child .customize-section-title h3, +#customize-outer-theme-controls .customize-pane-child h3.customize-section-title, +#customize-controls .customize-info .panel-title { + font-size: 20px; + font-weight: 200; + line-height: 26px; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#customize-controls .customize-section-title span.customize-action { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#customize-controls .customize-info .customize-help-toggle { + position: absolute; + top: 4px; + left: 1px; + padding: 20px 10px 10px 20px; + width: 20px; + height: 20px; + cursor: pointer; + box-shadow: none; + -webkit-appearance: none; + background: transparent; + color: #555d66; + border: none; +} + +#customize-controls .customize-info .customize-help-toggle:before { + position: absolute; + top: 5px; + right: 6px; +} + +#customize-controls .customize-info.open .customize-help-toggle, +#customize-controls .customize-info .customize-help-toggle:focus, +#customize-controls .customize-info .customize-help-toggle:hover { + color: #0073aa; +} + +#customize-controls .customize-info .customize-panel-description, +#customize-controls .customize-info .customize-section-description, +#customize-outer-theme-controls .customize-info .customize-section-description, +#customize-controls .no-widget-areas-rendered-notice { + color: #555d66; + display: none; + background: #fff; + padding: 12px 15px; + border-top: 1px solid #ddd; +} + +#customize-controls .customize-info .customize-panel-description.open + .no-widget-areas-rendered-notice { + border-top: none; +} +.no-widget-areas-rendered-notice { + font-style: italic; +} +.no-widget-areas-rendered-notice p:first-child { + margin-top: 0; +} +.no-widget-areas-rendered-notice p:last-child { + margin-bottom: 0; +} + +#customize-controls .customize-info .customize-section-description { + margin-bottom: 15px; +} + +#customize-controls .customize-info .customize-panel-description p:first-child, +#customize-controls .customize-info .customize-section-description p:first-child { + margin-top: 0; +} + +#customize-controls .customize-info .customize-panel-description p:last-child, +#customize-controls .customize-info .customize-section-description p:last-child { + margin-bottom: 0; +} + +#customize-controls .current-panel .control-section > h3.accordion-section-title { + padding-left: 30px; +} + +#customize-theme-controls .control-section, +#customize-outer-theme-controls .control-section { + border: none; +} + +#customize-theme-controls .accordion-section-title, +#customize-outer-theme-controls .accordion-section-title { + color: #555d66; + background-color: #fff; + border-bottom: 1px solid #ddd; + border-right: 4px solid #fff; + transition: .15s color ease-in-out, + .15s background-color ease-in-out, + .15s border-color ease-in-out; +} + +#customize-controls #customize-theme-controls .customize-themes-panel .accordion-section-title { + color: #555; + background-color: #fff; + border-right: 4px solid #fff; +} + +#customize-theme-controls .accordion-section-title:after, +#customize-outer-theme-controls .accordion-section-title:after { + content: "\f341"; + color: #a0a5aa; +} + +#customize-theme-controls .accordion-section-content, +#customize-outer-theme-controls .accordion-section-content { + color: #555d66; + background: transparent; +} + +#customize-controls .control-section:hover > .accordion-section-title, +#customize-controls .control-section .accordion-section-title:hover, +#customize-controls .control-section.open .accordion-section-title, +#customize-controls .control-section .accordion-section-title:focus { + color: #0073aa; + background: #f3f3f5; + border-right-color: #0073aa; +} + +#accordion-section-themes + .control-section { + border-top: 1px solid #ddd; +} + +.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: #f3f3f5; +} + +#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, +#customize-outer-theme-controls .control-section:hover > .accordion-section-title:after, +#customize-outer-theme-controls .control-section .accordion-section-title:hover:after, +#customize-outer-theme-controls .control-section.open .accordion-section-title:after, +#customize-outer-theme-controls .control-section .accordion-section-title:focus:after { + color: #0073aa; +} + +#customize-theme-controls .control-section.open { + border-bottom: 1px solid #eee; +} + +#customize-theme-controls .control-section.open .accordion-section-title, +#customize-outer-theme-controls .control-section.open .accordion-section-title { + border-bottom-color: #eee !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 .control-panel-content:not(.control-panel-nav_menus) .control-section:nth-child(2), +#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu, +#customize-theme-controls .control-section-nav_menu_locations .accordion-section-title { + border-top: 1px solid #ddd; +} + +#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu + .control-section-nav_menu { + border-top: none; +} + +#customize-theme-controls > ul { + margin: 0; +} + +#customize-theme-controls .accordion-section-content { + position: absolute; + top: 0; + right: 100%; + width: 100%; + margin: 0; + padding: 12px; + box-sizing: border-box; +} + +#customize-info, +#customize-theme-controls .customize-pane-parent, +#customize-theme-controls .customize-pane-child { + overflow: visible; + width: 100%; + margin: 0; + padding: 0; + box-sizing: border-box; + transition: 0.18s -webkit-transform cubic-bezier(0.645, 0.045, 0.355, 1); + transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1); + transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1), 0.18s -webkit-transform cubic-bezier(0.645, 0.045, 0.355, 1); /* easeInOutCubic */ +} + +#customize-theme-controls .customize-pane-child.skip-transition { + transition: none; +} + +#customize-info, +#customize-theme-controls .customize-pane-parent { + position: relative; + visibility: visible; + height: auto; + max-height: none; + overflow: auto; + -webkit-transform: none; + transform: none; +} + +#customize-theme-controls .customize-pane-child { + position: absolute; + top: 0; + right: 0; + visibility: hidden; + height: 0; + max-height: none; + overflow: hidden; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +#customize-theme-controls .customize-pane-child.open, +#customize-theme-controls .customize-pane-child.current-panel { + -webkit-transform: none; + transform: none; +} + +.section-open #customize-theme-controls .customize-pane-parent, +.in-sub-panel #customize-theme-controls .customize-pane-parent, +.section-open #customize-info, +.in-sub-panel #customize-info, +.in-sub-panel.section-open #customize-theme-controls .customize-pane-child.current-panel { + visibility: hidden; + height: 0; + overflow: hidden; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.section-open #customize-theme-controls .customize-pane-parent.busy, +.in-sub-panel #customize-theme-controls .customize-pane-parent.busy, +.section-open #customize-info.busy, +.in-sub-panel #customize-info.busy, +.busy.section-open.in-sub-panel #customize-theme-controls .customize-pane-child.current-panel, +#customize-theme-controls .customize-pane-child.open, +#customize-theme-controls .customize-pane-child.current-panel, +#customize-theme-controls .customize-pane-child.busy { + visibility: visible; + height: auto; + overflow: auto; +} + +#customize-theme-controls .customize-pane-child.accordion-section-content, +#customize-theme-controls .customize-pane-child.accordion-sub-container { + display: block; + overflow-x: hidden; +} + +#customize-theme-controls .customize-pane-child.accordion-section-content { + padding: 12px; +} + +#customize-theme-controls .customize-pane-child.menu li { + position: static; +} + +.customize-section-description-container, +.control-section-nav_menu .customize-section-description-container, +.control-section-new_menu .customize-section-description-container { + margin-bottom: 15px; +} + +.control-section-nav_menu .customize-control, +.control-section-new_menu .customize-control { + /* Override default `margin-bottom` for `.customize-control` */ + margin-bottom: 0; +} + +.customize-section-title { + margin: -12px -12px 0 -12px; + border-bottom: 1px solid #ddd; + background: #fff; +} + +div.customize-section-description { + margin-top: 22px; +} + +.customize-info div.customize-section-description { + margin-top: 0; +} + +div.customize-section-description p:first-child { + margin-top: 0; +} + +div.customize-section-description p:last-child { + margin-bottom: 0; +} + +#customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child { + border-bottom: 1px solid #ddd; + padding: 12px 12px 12px 12px; +} + +.ios #customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child { + padding: 12px 12px 13px 12px; +} + +.customize-section-title h3, +h3.customize-section-title { + padding: 10px 14px 12px 10px; + margin: 0; + line-height: 21px; + color: #555d66; +} + +.accordion-sub-container.control-panel-content { + display: none; + position: absolute; + top: 0; + width: 100%; +} + +.accordion-sub-container.control-panel-content.busy { + display: block; +} + +.current-panel .accordion-sub-container.control-panel-content { + width: 100%; +} + +.customize-controls-close { + display: block; + position: absolute; + top: 0; + right: 0; + width: 45px; + height: 41px; + padding: 0 0 0 2px; + background: #eee; + border: none; + border-top: 4px solid #eee; + border-left: 1px solid #ddd; + color: #444; + text-align: right; + cursor: pointer; + transition: color .15s ease-in-out, + border-color .15s ease-in-out, + background .15s ease-in-out; + box-sizing: content-box; +} + +.customize-panel-back, +.customize-section-back { + display: block; + float: right; + width: 48px; + height: 71px; + padding: 0 0 0 24px; + margin: 0; + background: #fff; + border: none; + border-left: 1px solid #ddd; + border-right: 4px solid #fff; + box-shadow: none; + cursor: pointer; + transition: color .15s ease-in-out, + border-color .15s ease-in-out, + background .15s ease-in-out; +} + +.customize-section-back { + height: 74px; +} + +.ios .customize-panel-back { + display: none; +} + +.ios .expanded.in-sub-panel .customize-panel-back { + display: block; +} + +#customize-controls .panel-meta.customize-info .accordion-section-title { + margin-right: 48px; + border-right: none; +} + +#customize-controls .panel-meta.customize-info .accordion-section-title:hover, +#customize-controls .cannot-expand:hover .accordion-section-title { + background: #fff; + color: #555d66; + border-right-color: #fff; +} + +.customize-controls-close:focus, +.customize-controls-close:hover, +.customize-controls-preview-toggle:focus, +.customize-controls-preview-toggle:hover { + background: #fff; + color: #0073aa; + border-top-color: #0073aa; + outline: none; + box-shadow: none; +} + + +.customize-panel-back:hover, +.customize-panel-back:focus, +.customize-section-back:hover, +.customize-section-back:focus { + color: #0073aa; + background: #f3f3f5; + border-right-color: #0073aa; + outline: none; + box-shadow: none; +} + +.customize-controls-close:before { + font: normal 22px/45px dashicons; + content: "\f335"; + position: relative; + top: -3px; + right: 13px; +} + +.customize-panel-back:before, +.customize-section-back:before { + font: normal 20px/72px dashicons; + content: "\f345"; + position: relative; + right: 9px; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header { + background-color: #eee; + transition: padding ease-in-out .18s; +} + +.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header { + padding-right: 62px; +} + +p.customize-section-description { + font-style: normal; + margin-top: 22px; + margin-bottom: 0; +} + +.customize-section-description ul { + margin-right: 1em; +} + +.customize-section-description ul > li { + list-style: disc; +} + +.section-description-buttons { + text-align: left; +} + +.section-description-buttons button.button-link { + color: #0073aa; + text-decoration: underline; +} + +.customize-control { + width: 100%; + float: right; + clear: both; + margin-bottom: 12px; +} + +.customize-control select, +.customize-control input[type="radio"], +.customize-control input[type="checkbox"] { + line-height: 28px; +} + +.customize-control input[type="text"], +.customize-control input[type="password"], +.customize-control input[type="email"], +.customize-control input[type="number"], +.customize-control input[type="search"], +.customize-control input[type="tel"], +.customize-control input[type="url"] { + width: 100%; + line-height: 18px; + margin: 0; +} + +.customize-control-hidden { + margin: 0; +} + +.customize-control-textarea textarea { + width: 100%; + resize: vertical; +} + +.customize-control select { + 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: 4px; +} + +.customize-control-description { + display: block; + font-style: italic; + line-height: 18px; + margin-top: 0; + margin-bottom: 5px; +} + +.customize-section-description a.external-link:after { + font: 16px/11px dashicons; + content: "\f310"; + top: 3px; + position: relative; + padding-right: 3px; + display: inline-block; + text-decoration: none; +} + +.customize-control-color .color-picker, +.customize-control-upload div { + line-height: 28px; +} + +.customize-control .customize-inside-control-row { + line-height: 20px; + display: block; + margin-right: 24px; + padding-top: 6px; + padding-bottom: 6px; +} + +.customize-control-radio input, +.customize-control-checkbox input, +.customize-control-nav_menu_auto_add input { + margin-left: 4px; + margin-right: -24px; +} + +.customize-control-radio { + padding: 5px 0 10px; +} + +.customize-control-radio .customize-control-title { + margin-bottom: 0; + line-height: 22px; +} + +.customize-control-radio .customize-control-title + .customize-control-description { + margin-top: 7px; +} + +.customize-control-radio label, +.customize-control-checkbox label { + vertical-align: top; +} + +.customize-control .attachment-thumb.type-icon { + float: right; + margin: 10px; + width: auto; +} + +.customize-control .attachment-title { + font-weight: 600; + margin: 0; + padding: 5px 10px; +} + +.customize-control .attachment-meta { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + padding: 0 10px; +} + +.customize-control .attachment-meta-title { + padding-top: 7px; +} + +/* Remove descender space. */ +.customize-control .thumbnail-image, +.customize-control-header .current, +.customize-control .wp-media-wrapper.wp-video { + line-height: 0; +} + +/* Remove descender space. */ +.customize-control-site_icon .favicon-preview .browser-preview { + vertical-align: top; +} + +.customize-control .thumbnail-image img { + cursor: pointer; +} + +#customize-controls .thumbnail-audio .thumbnail { + max-width: 64px; + max-height: 64px; + margin: 10px; + float: right; +} + +#available-menu-items .accordion-section-content .new-content-item, +.customize-control-dropdown-pages .new-content-item { + width: calc(100% - 30px); + padding: 8px 15px; + position: absolute; + bottom: 0; + z-index: 10; + background: #eee; + display: -webkit-box; + display: flex; +} + +.customize-control-dropdown-pages .new-content-item { + width: 100%; + padding: 5px 1px 5px 0; + position: relative; +} + +#available-menu-items .new-content-item .create-item-input, +.customize-control-dropdown-pages .new-content-item .create-item-input { + -webkit-box-flex: 10; + flex-grow: 10; +} + +#available-menu-items .new-content-item .add-content, +.customize-control-dropdown-pages .new-content-item .add-content { + margin: 2px 6px 2px 0; + -webkit-box-flex: 10; + flex-grow: 1; +} + +.customize-control-dropdown-pages .new-content-item .create-item-input.invalid { + border: 1px solid #dc3232; +} + +.customize-control-dropdown-pages .add-new-toggle { + margin-right: 1px; + font-weight: 600; + line-height: 28px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; + position: absolute; +} +#customize-preview iframe + iframe { + visibility: hidden; +} + +.wp-full-overlay-sidebar { + background: #eee; + border-left: 1px solid #ddd; +} + + +/** + * Notifications + */ + +#customize-controls .customize-control-notifications-container { /* Scoped to #customize-controls for specificity over notification styles in common.css. */ + margin: 4px 0 8px 0; + padding: 0; + cursor: default; +} + +#customize-controls .customize-control-widget_form.has-error .widget .widget-top, +.customize-control-nav_menu_item.has-error .menu-item-bar .menu-item-handle { + box-shadow: inset 0 0 0 2px #dc3232; + transition: .15s box-shadow linear; +} + +#customize-controls .customize-control-notifications-container li.notice { + list-style: none; + margin: 0 0 6px 0; + padding: 9px 14px; + overflow: hidden; +} +#customize-controls .customize-control-notifications-container .notice.is-dismissible { + padding-left: 38px; +} + +.customize-control-notifications-container li.notice:last-child { + margin-bottom: 0; +} + +#customize-controls .customize-control-nav_menu_item .customize-control-notifications-container { + margin-top: 0; +} + +#customize-controls .customize-control-widget_form .customize-control-notifications-container { + margin-top: 8px; +} + +.customize-control-text.has-error input { + outline: 2px solid #dc3232; +} + +#customize-controls #customize-notifications-area { + position: absolute; + top: 46px; + width: 100%; + border-bottom: 1px solid #ddd; + display: block; + padding: 0; + margin: 0; +} + +.wp-full-overlay.collapsed #customize-controls #customize-notifications-area { + display: none !important; +} + +#customize-controls #customize-notifications-area:not(.has-overlay-notifications), +#customize-controls .customize-section-title > .customize-control-notifications-container:not(.has-overlay-notifications), +#customize-controls .panel-meta > .customize-control-notifications-container:not(.has-overlay-notifications) { + max-height: 210px; + overflow-x: hidden; + overflow-y: auto; +} + +#customize-controls #customize-notifications-area > ul, +#customize-controls #customize-notifications-area .notice, +#customize-controls .panel-meta > .customize-control-notifications-container, +#customize-controls .panel-meta > .customize-control-notifications-container .notice, +#customize-controls .customize-section-title > .customize-control-notifications-container, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice { + margin: 0; +} +#customize-controls .panel-meta > .customize-control-notifications-container, +#customize-controls .customize-section-title > .customize-control-notifications-container { + border-top: 1px solid #ddd; +} +#customize-controls #customize-notifications-area .notice, +#customize-controls .panel-meta > .customize-control-notifications-container .notice, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice { + padding: 9px 14px; +} +#customize-controls #customize-notifications-area .notice.is-dismissible, +#customize-controls .panel-meta > .customize-control-notifications-container .notice.is-dismissible, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice.is-dismissible { + padding-left: 38px; +} +#customize-controls #customize-notifications-area .notice + .notice, +#customize-controls .panel-meta > .customize-control-notifications-container .notice + .notice, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice + .notice { + margin-top: 1px; +} + +@-webkit-keyframes customize-fade-in { + 0% { opacity: 0; } + 100% { opacity: 1; } +} + +@keyframes customize-fade-in { + 0% { opacity: 0; } + 100% { opacity: 1; } +} + +#customize-controls .notice.notification-overlay, +#customize-controls #customize-notifications-area .notice.notification-overlay { + margin: 0; + border-right: 0; /* @todo Appropriate styles could be added for notice-error, notice-warning, notice-success, etc */ +} + +#customize-controls .customize-control-notifications-container.has-overlay-notifications { + -webkit-animation: customize-fade-in 0.5s; + animation: customize-fade-in 0.5s; + z-index: 30; +} + +/* Note: Styles for this are also defined in themes.css */ +#customize-controls #customize-notifications-area .notice.notification-overlay .notification-message { + clear: both; + color: #191e23; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 2em 0; + text-align: center; + width: 100%; + display: block; + top: 50%; + position: relative; +} + +/* Style for custom settings */ + +/** + * Static front page + */ + +#customize-control-show_on_front.has-error { + margin-bottom: 0; +} +#customize-control-show_on_front.has-error .customize-control-notifications-container { + margin-top: 12px; +} + +/** + * 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 #eee; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* @todo maybe no more used? */ +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 20px; + background: #eee; +} + +.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: #32373c; +} + +.customize-control .dropdown-status { + color: #32373c; + background: #eee; + display: none; + max-width: 112px; +} + +.customize-control-color .dropdown { + margin-left: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #555d66; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba(0, 0, 0, 0.25); +} + +/** + * 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-controls .wp-full-overlay-sidebar-content { + -webkit-overflow-scrolling: touch; +} + +/* Media controls */ + +.customize-control .actions .button { + margin-top: 12px; +} + +.customize-control-header .actions, +.customize-control-header .uploaded { + margin-bottom: 18px; +} + +.customize-control-header .uploaded button:not(.random), +.customize-control-header .default button:not(.random) { + width: 100%; + padding: 0; + margin: 0; + background: none; + border: none; + color: inherit; + cursor: pointer; +} + +.customize-control-header button img { + display: block; +} + +.customize-control .attachment-media-view .remove-button, +.customize-control .attachment-media-view .default-button, +.customize-control .attachment-media-view .upload-button, +.customize-control-header button.new, +.customize-control-header button.remove { + width: auto; + height: auto; + white-space: normal; +} + +.customize-control .attachment-media-view .thumbnail, +.customize-control-header .current .container { + overflow: hidden; +} + +.customize-control .attachment-media-view .placeholder, +.customize-control-header .placeholder { + width: 100%; + position: relative; + text-align: center; + cursor: default; + border: 1px dashed #b4b9be; + box-sizing: border-box; + padding: 9px 0; + line-height: 20px; +} + +.customize-control-header .inner { + display: none; + position: absolute; + width: 100%; + color: #555d66; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.customize-control-header .inner, +.customize-control-header .inner .dashicons { + line-height: 20px; + top: 8px; +} + +.customize-control-header .list .inner, +.customize-control-header .list .inner .dashicons { + top: 9px; +} + +.customize-control-header .header-view { + position: relative; + width: 100%; + margin-bottom: 12px; +} + +.customize-control-header .header-view:last-child { + margin-bottom: 0px; +} + +/* Convoluted, but 'outline' support isn't good enough yet */ +.customize-control-header .header-view:after { + border: 0; +} + +.customize-control-header .header-view.selected .choice:focus { + outline: none; +} + +.customize-control-header .header-view.selected:after { + content: ''; + position: absolute; + height: auto; + top: 0; + right: 0; + bottom: 0; + left: 0; + border: 4px solid #00a0d2; + border-radius: 2px; +} + +.customize-control-header .header-view.button.selected { + border: 0; +} + +/* Header control: overlay "close" button */ + +.customize-control-header .uploaded .header-view .close { + font-size: 20px; + color: #fff; + background: #555d66; + background: rgba(0, 0, 0, 0.5); + position: absolute; + top: 10px; + right: -999px; + z-index: 1; + width: 26px; + height: 26px; + cursor: pointer; +} + +.customize-control-header .header-view:hover .close, +.customize-control-header .header-view .close:focus { + right: auto; + left: 10px; +} + +.customize-control-header .header-view .close:focus { + outline: 1px solid #5b9dd9; +} + +/* Header control: randomiz(s)er */ + +.customize-control-header .random.placeholder { + cursor: pointer; + border-radius: 2px; + height: 40px; +} + +.customize-control-header button.random { + width: 100%; + height: auto; + min-height: 40px; + white-space: normal; +} + +.customize-control-header button.random .dice { + margin-top: 4px; +} + +.customize-control-header .placeholder:hover .dice, +.customize-control-header .header-view:hover > button.random .dice { + -webkit-animation: dice-color-change 3s infinite; + animation: dice-color-change 3s infinite; +} + +.button-see-me { + -webkit-animation: bounce .7s 1; + animation: bounce .7s 1; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -12px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -6px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-1px,0); + } +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -12px, 0); + transform: translate3d(0, -12px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -6px, 0); + transform: translate3d(0, -6px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-1px,0); + transform: translate3d(0,-1px,0); + } +} + +.customize-control-header .choice { + position: relative; + display: block; + margin-bottom: 9px; +} + +.customize-control-header .choice:focus { + outline: none; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 3px 1px rgba(30, 140, 190, .8); +} + +.customize-control-header .uploaded div:last-child > .choice { + margin-bottom: 0; +} + +.customize-control .attachment-media-view .thumbnail-image img, +.customize-control-header img { + max-width: 100%; +} + +.customize-control .attachment-media-view .remove-button, +.customize-control .attachment-media-view .default-button, +.customize-control-header .remove { + margin-left: 8px; +} + +/* Background position control */ +.customize-control-background_position .background-position-control .button-group { + display: block; +} + +/** + * Code Editor Control and Custom CSS Section + * + * Modifications to the Section Container to make the textarea full-width and + * full-height, if the control is the only control in the section. + */ + +.customize-control-code_editor textarea { + width: 100%; + font-family: Consolas, Monaco, monospace; + font-size: 12px; + padding: 6px 8px; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +.customize-control-code_editor textarea, +.customize-control-code_editor .CodeMirror { + height: 14em; +} + +#customize-controls .customize-section-description-container.section-meta.customize-info { + border-bottom: none; +} + +#sub-accordion-section-custom_css .customize-control-notifications-container { + margin-bottom: 15px; +} + +#customize-control-custom_css textarea { + display: block; + height: 500px; +} + +.customize-section-description-container + #customize-control-custom_css .customize-control-title { + margin-right: 12px; +} + +.customize-section-description-container + #customize-control-custom_css:last-child textarea { + border-left: 0; + border-right: 0; + height: calc( 100vh - 185px ); + resize: none; +} + +.customize-section-description-container + #customize-control-custom_css:last-child { + margin-right: -12px; + width: 299px; + width: calc( 100% + 24px ); + margin-bottom: -12px; +} + +.customize-section-description-container + #customize-control-custom_css:last-child .CodeMirror { + height: calc( 100vh - 185px ); +} + +.CodeMirror-lint-tooltip, +.CodeMirror-hints { + z-index: 500000 !important; +} + +.customize-section-description-container + #customize-control-custom_css:last-child .customize-control-notifications-container { + margin-right: 12px; + margin-left: 12px; +} + +.theme-browser .theme.active .theme-actions, +.wp-customizer .theme-browser .theme .theme-actions { + padding: 10px 15px; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); +} + +@media screen and ( max-width: 640px ) { + .customize-section-description-container + #customize-control-custom_css:last-child { + margin-left: 0; + } + + .customize-section-description-container + #customize-control-custom_css:last-child textarea { + height: calc( 100vh - 140px ); + } +} + +/** + * Themes + */ + +#customize-theme-controls .control-panel-themes { + border-bottom: none; +} + +#customize-theme-controls .control-panel-themes > .accordion-section-title:hover, /* Not a focusable element. */ +#customize-theme-controls .control-panel-themes > .accordion-section-title { + cursor: default; + background: #fff; + color: #555d66; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + border-right: none; + border-left: none; + margin: 0 0 15px 0; + padding-left: 100px; /* Space for the button */ +} + +#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child:hover, /* Not a focusable element. */ +#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child { + border-top: 0; +} + +#customize-theme-controls .control-section-themes > .accordion-section-title:hover, /* Not a focusable element. */ +#customize-theme-controls .control-section-themes > .accordion-section-title { + margin: 0 0 15px; +} + +#customize-controls .customize-themes-panel .accordion-section-title:hover, +#customize-controls .customize-themes-panel .accordion-section-title { + margin: 15px -8px; +} + +#customize-controls .control-section-themes .accordion-section-title, +#customize-controls .customize-themes-panel .accordion-section-title { + padding-left: 100px; /* Space for the button */ +} + +.control-panel-themes .accordion-section-title span.customize-action, +#customize-controls .customize-section-title span.customize-action, +#customize-controls .control-section-themes .accordion-section-title span.customize-action, +#customize-controls .customize-section-title span.customize-action { + font-size: 13px; + display: block; + font-weight: 400; +} + +#customize-theme-controls .control-panel-themes .accordion-section-title .change-theme { + position: absolute; + left: 10px; + top: 50%; + margin-top: -14px; + font-weight: 400; +} + +#customize-theme-controls .control-panel-themes > .accordion-section-title:after { + display: none; +} + +.control-panel-themes .customize-themes-full-container { + position: fixed; + top: 0; + right: 0; + transition: .18s right ease-in-out; + margin: 0 300px 0 0; + padding: 71px 0 25px; + overflow-y: scroll; + width: calc(100% - 300px); + height: calc(100% - 96px); + background: #eee; + z-index: 20; +} + +@media screen and (min-width: 1670px) { + .control-panel-themes .customize-themes-full-container { + width: 82%; + left: 0; + right: initial; + } +} + +.modal-open .control-panel-themes .customize-themes-full-container { + overflow-y: visible; +} + +/* Animations for opening the themes panel */ +#customize-save-button-wrapper, +#customize-header-actions .spinner, +#customize-header-actions .customize-controls-preview-toggle { + transition: .18s margin ease-in-out; +} + +#customize-footer-actions, +#customize-footer-actions .collapse-sidebar { + bottom: 0; + transition: .18s bottom ease-in-out; +} + +.in-themes-panel:not(.animating) #customize-header-actions .spinner, +.in-themes-panel:not(.animating) #customize-header-actions .customize-controls-preview-toggle, +.in-themes-panel:not(.animating) #customize-preview, +.in-themes-panel:not(.animating) #customize-footer-actions { + visibility: hidden; +} + +.wp-full-overlay.in-themes-panel { + background: #eee; /* Prevents a black flash when fading in the panel */ +} + +.in-themes-panel #customize-save-button-wrapper, +.in-themes-panel #customize-header-actions .spinner, +.in-themes-panel #customize-header-actions .customize-controls-preview-toggle { + margin-top: -46px; /* Height of header actions bar */ +} + +.in-themes-panel #customize-footer-actions, +.in-themes-panel #customize-footer-actions .collapse-sidebar { + bottom: -45px; +} + +/* Don't show the theme count while the panel opens, as it's in the wrong place during the animation */ +.in-themes-panel.animating .control-panel-themes .filter-themes-count { + display: none; +} + +.in-themes-panel.wp-full-overlay .wp-full-overlay-sidebar-content { + bottom: 0; +} + +.themes-filter-bar .feature-filter-toggle { + float: left; + margin: 3px 25px 3px 0; +} + +.themes-filter-bar .feature-filter-toggle:before { + content: "\f111"; + margin: 0 0 0 5px; + font: normal 16px/1 dashicons; + vertical-align: text-bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.themes-filter-bar .feature-filter-toggle.open { + background: #eee; + border-color: #999; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + -webkit-transform: translateY(1px); + transform: translateY(1px); +} + +.themes-filter-bar .feature-filter-toggle .filter-count-filters { + display: none; +} + +.filter-drawer { + box-sizing: border-box; + width: 100%; + position: absolute; + top: 46px; + right: 0; + padding: 25px 25px 25px 0; + border-top: 0; + margin: 0; + background: #eee; + border-bottom: 1px solid #ddd; +} + +.filter-drawer .filter-group { + margin: 0 0 0 25px; + width: calc( (100% - 75px) / 3); + min-width: 200px; + max-width: 320px; +} + +/* Adds a delay before fading in to avoid it "jumping" */ +@-webkit-keyframes themes-fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes themes-fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.control-panel-themes .customize-themes-full-container.animate { + -webkit-animation: .6s themes-fade-in 1; + animation: .6s themes-fade-in 1; +} + +.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count { + -webkit-animation: .6s themes-fade-in 1; + animation: .6s themes-fade-in 1; +} + +.control-panel-themes .filter-themes-count { + position: relative; + float: left; + line-height: 34px; +} + +.control-panel-themes .filter-themes-count .themes-displayed { + font-weight: 600; + color: #555d66; +} + +.customize-themes-notifications { + margin: 0; +} + +.control-panel-themes .customize-themes-notifications .notice { + margin: 0 0 25px 0; +} + +.customize-themes-full-container .customize-themes-section { + display: none !important; /* There is unknown JS that perpetually tries to show all theme sections when more items are added. */ + overflow: hidden; +} + +.customize-themes-full-container .customize-themes-section.current-section { + display: list-item !important; /* There is unknown JS that perpetually tries to show all theme sections when more items are added. */ +} + +.control-section .customize-section-text-before { + padding: 0 15px 8px 0; + margin: 15px 0 0 0; + line-height: 16px; + border-bottom: 1px solid #ddd; + color: #555d66; +} + +.control-panel-themes .customize-themes-section-title { + width: 100%; + background: #fff; + box-shadow: none; + outline: none; + border-top: none; + border-bottom: 1px solid #ddd; + border-right: 4px solid #fff; + border-left: none; + cursor: pointer; + padding: 10px 15px; + position: relative; + text-align: right; + font-size: 14px; + font-weight: 600; + color: #555d66; + text-shadow: none; +} + +.control-panel-themes #accordion-section-installed_themes { + border-top: 1px solid #ddd; +} + +.control-panel-themes .theme-section { + margin: 0; + position: relative; +} + +.control-panel-themes .customize-themes-section-title:focus, +.control-panel-themes .customize-themes-section-title:hover { + border-right-color: #0073aa; + color: #0073aa; + background: #f5f5f5; +} + +.customize-themes-section-title:not(.selected):after { + content: ""; + display: block; + position: absolute; + top: 9px; + left: 15px; + width: 18px; + height: 18px; + border-radius: 100%; + border: 1px solid #ccc; + background: #fff; +} + +.control-panel-themes .theme-section .customize-themes-section-title.selected:after { + content: "\f147"; + font: 16px/1 dashicons; + box-sizing: border-box; + width: 20px; + height: 20px; + padding: 3px 1px 1px 3px; /* Re-align the icon to the smaller grid */ + border-radius: 100%; + position: absolute; + top: 9px; + left: 15px; + background: #0073aa; + color: #fff; +} + +.control-panel-themes .customize-themes-section-title.selected { + color: #0073aa; +} + +#customize-theme-controls .themes.accordion-section-content { + position: relative; + right: 0; + padding: 0; + width: 100%; +} + +.loading .customize-themes-section .spinner { + display: block; + visibility: visible; + position: relative; + clear: both; + width: 20px; + height: 20px; + right: calc(50% - 10px); + float: none; + margin-top: 50px; +} + +.customize-themes-section .no-themes, +.customize-themes-section .no-themes-local { + display: none; +} + +.themes-section-installed_themes .theme .notice-success:not(.updated-message) { + display: none; /* Hide "installed" notice on installed themes tab. */ +} + +.customize-control-theme .theme { + width: 100%; + margin: 0; + border: 1px solid #ddd; + background: #fff; +} + +.customize-control-theme .theme .theme-name, .customize-control-theme .theme .theme-actions { + background: #fff; + border: none; +} + +.customize-control.customize-control-theme { /* override most properties on .customize-control */ + box-sizing: border-box; + width: 25%; + max-width: 600px; /* Max. screenshot size / 2 */ + margin: 0 0 25px 25px; + padding: 0; + clear: none; +} + +/* 5 columns above 2100px */ +@media screen and (min-width: 2101px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 125px ) / 5 - 1px ); /* 1px offset accounts for browser rounding, typical all grids */ + } +} + +/* 4 columns up to 2100px */ +@media screen and (min-width: 1601px) and (max-width: 2100px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 100px ) / 4 - 1px ); + } +} + +/* 3 columns up to 1600px */ +@media screen and (min-width: 1201px) and (max-width: 1600px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 75px ) / 3 - 1px ); + } +} + +/* 2 columns up to 1200px */ +@media screen and (min-width: 851px) and (max-width: 1200px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 50px ) / 2 - 1px ); + + } +} + +/* 1 column up to 850 px */ +@media screen and (max-width: 850px) { + .customize-control.customize-control-theme { + width: 100%; + } +} + +.wp-customizer .theme-browser .themes { + padding: 0 25px 25px 0; + transition: .18s margin-top linear; +} + +.wp-customizer .theme-browser .theme .theme-actions { + opacity: 1; +} + +#customize-controls h3.theme-name { + font-size: 15px; +} + +#customize-controls .theme-overlay .theme-name { + font-size: 32px; +} + +.customize-preview-header.themes-filter-bar { + position: fixed; + top: 0; + right: 300px; + width: calc(100% - 300px); + height: 46px; + background: #eee; + z-index: 10; + padding: 6px 25px; + box-sizing: border-box; + border-bottom: 1px solid #ddd; +} + +@media screen and (min-width: 1670px) { + .customize-preview-header.themes-filter-bar { + width: 82%; + left: 0; + right: initial; + } +} + +.themes-filter-bar .themes-filter-container { + margin: 0; + padding: 0; +} + +.themes-filter-bar .wp-filter-search { + line-height: 25px; + padding: 6px 30px 6px 10px; + max-width: 100%; + width: 40%; + min-width: 300px; + position: absolute; + top: 6px; + right: 25px; + height: 32px; + margin: 1px 0; +} + +/* Unstick the filter bar on short windows/screens. This breakpoint is based on the + current length of .org feature filters assuming translations do not wrap lines. */ +@media screen and (max-height:540px), screen and (max-width:1018px) { + .customize-preview-header.themes-filter-bar { + position: relative; + right: 0; + width: 100%; + margin: 0 0 25px 0; + } + .filter-drawer { + top: 46px; + } + .wp-customizer .theme-browser .themes { + padding: 0 25px 25px 0; + overflow: hidden; + } + + .control-panel-themes .customize-themes-full-container { + margin-top: 0; + padding: 0; + height: 100%; + width: calc(100% - 300px); + } +} + +@media screen and (max-width:1018px) { + .filter-drawer .filter-group { + width: calc( (100% - 50px) / 2); + } +} + +@media screen and (max-width:900px) { + .customize-preview-header.themes-filter-bar { + height: 86px; + padding-top: 46px; + } + + .themes-filter-bar .wp-filter-search { + width: calc(100% - 50px); + margin: 0; + min-width: 200px; + } + + .filter-drawer { + top: 86px; + } + + .control-panel-themes .filter-themes-count { + float: right; + } +} + +@media screen and (max-width:792px) { + .filter-drawer .filter-group { + width: calc( 100% - 25px); + } +} + +.control-panel-themes .customize-themes-mobile-back { + display: none; +} + +/* Mobile - toggle between themes and filters */ +@media screen and (max-width:600px) { + + .filter-drawer { + top: 132px; + } + + .wp-full-overlay.showing-themes .control-panel-themes .filter-themes-count .filter-themes { + display: block; + float: left; + } + + .control-panel-themes .customize-themes-full-container { + width: 100%; + margin: 0; + padding-top: 46px; + height: calc(100% - 46px); + z-index: 1; + display: none; + } + + .showing-themes .control-panel-themes .customize-themes-full-container { + display: block; + } + + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back { + display: block; + position: fixed; + top: 0; + right: 0; + background: #eee; + color: #444; + border-radius: 0; + box-shadow: none; + border: none; + height: 46px; + width: 100%; + z-index: 10; + text-align: right; + text-shadow: none; + border-bottom: 1px solid #ddd; + border-right: 4px solid transparent; + margin: 0; + padding: 0; + font-size: 0; + overflow: hidden; + } + + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:before { + right: 0; + top: 0; + height: 46px; + width: 26px; + display: block; + line-height: 46px; + padding: 0 8px 0 8px; + border-left: 1px solid #ddd; + } + + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:hover, + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:focus { + color: #0073aa; + background: #f3f3f5; + border-right-color: #0073aa; + outline: none; + box-shadow: none; + } + + .showing-themes #customize-header-actions { + display: none; + } + + #customize-controls { + width: 100%; + } +} + +/* Details View */ +.wp-customizer .theme-overlay { + display: none; +} + +.wp-customizer.modal-open .theme-overlay { + position: fixed; + right: 0; + top: 0; + left: 0; + bottom: 0; + z-index: 109; +} + +/* Avoid a z-index war by resetting elements that should be under the overlay. + This is likely required because of the way that sections and panels are positioned. */ +.wp-customizer.modal-open #customize-header-actions, +.wp-customizer.modal-open .control-panel-themes .filter-themes-count, +.wp-customizer.modal-open .control-panel-themes .customize-themes-section-title.selected:after { + z-index: -1; +} + +.wp-full-overlay.in-themes-panel.themes-panel-expanded #customize-controls .wp-full-overlay-sidebar-content { + overflow: visible; +} + +.wp-customizer .theme-overlay .theme-backdrop { + background: rgba( 238, 238, 238, 0.75 ); + position: fixed; + z-index: 110; +} + +.wp-customizer .theme-overlay .star-rating { + float: right; + margin-left: 8px; +} + +.wp-customizer .theme-rating .num-ratings { + line-height: 20px; +} + +.wp-customizer .theme-overlay .theme-wrap { + right: 90px; + left: 90px; + top: 45px; + bottom: 45px; + z-index: 120; +} + +.wp-customizer .theme-overlay .theme-actions { + text-align: left; /* Because there're only one or two actions, match the UI pattern of media modals and right-align the action. */ + padding: 10px 25px; + background: #eee; + border-top: 1px solid #ddd; +} + +.wp-customizer .theme-overlay .theme-actions .theme-install.preview { + margin-right: 8px; +} + +.control-panel-themes .theme-actions .delete-theme { + right: 15px; /* these override themes.css on mobile */ + left: auto; + bottom: auto; + position: absolute; +} + +.modal-open .in-themes-panel #customize-controls .wp-full-overlay-sidebar-content { + overflow: visible; /* Prevent the top-level Customizer controls from becoming visible when elements on the right of the details modal are focused. */ +} + +.wp-customizer .theme-header { + background: #eee; +} + +.wp-customizer .theme-overlay .theme-header button, +.wp-customizer .theme-overlay .theme-header .close:before { + color: #444; +} + +.wp-customizer .theme-overlay .theme-header .close:focus, +.wp-customizer .theme-overlay .theme-header .close:hover, +.wp-customizer .theme-overlay .theme-header .right:focus, +.wp-customizer .theme-overlay .theme-header .right:hover, +.wp-customizer .theme-overlay .theme-header .left:focus, +.wp-customizer .theme-overlay .theme-header .left:hover { + background: #fff; + border-bottom: 4px solid #0073aa; + color: #0073aa; +} + +.wp-customizer .theme-overlay .theme-header .close:focus:before, +.wp-customizer .theme-overlay .theme-header .close:hover:before { + color: #0073aa; +} + +.wp-customizer .theme-overlay .theme-header button.disabled, +.wp-customizer .theme-overlay .theme-header button.disabled:hover, +.wp-customizer .theme-overlay .theme-header button.disabled:focus { + border-bottom: none; + background: transparent; + color: #ccc; +} + +/* Small Screens */ +@media (max-width:850px), (max-height:472px) { + .wp-customizer .theme-overlay .theme-wrap { + right: 0; + left: 0; + top: 0; + bottom: 0; + } + + .wp-customizer .theme-browser .themes { + padding-left: 25px; + } +} + +/* Handle cheaters. */ +body.cheatin { + font-size: medium; + height: auto; + background: #fff; + margin: 50px auto 2em; + padding: 1em 2em; + max-width: 700px; + min-width: 0; + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +body.cheatin h1 { + border-bottom: 1px solid #ddd; + clear: both; + color: #555d66; + font-size: 24px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + margin: 30px 0 0 0; + padding: 0; + padding-bottom: 7px; +} + +body.cheatin p { + font-size: 14px; + line-height: 1.5; + margin: 25px 0 20px; +} + +/** + * Widgets and Menus common styles + */ + +/* higher specificity than .wp-core-ui .button */ +#customize-theme-controls .add-new-widget, +#customize-theme-controls .add-new-menu-item { + cursor: pointer; + float: left; + margin: 0; + margin-right: 10px; + transition: all 0.2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; +} + +.reordering .add-new-widget, +.reordering .add-new-menu-item { + opacity: 0.2; + pointer-events: none; + cursor: not-allowed; /* doesn't work in conjunction with pointer-events */ +} + +.add-new-widget:before, +.add-new-menu-item:before, +#available-menu-items .new-content-item .add-content:before { + content: "\f132"; + display: inline-block; + position: relative; + right: -2px; + top: 0; + font: normal 20px/1 dashicons; + vertical-align: middle; + transition: all 0.2s; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Reordering */ +.reorder-toggle { + float: left; + padding: 5px 8px; + text-decoration: none; + cursor: pointer; + outline: none; +} + +.reorder, +.reordering .reorder-done { + display: block; + padding: 5px 8px; +} + +.reorder-done, +.reordering .reorder { + display: none; +} + +.widget-reorder-nav span, +.menu-item-reorder-nav button { + position: relative; + overflow: hidden; + float: right; + display: block; + width: 33px; /* was 42px for mobile */ + height: 43px; + color: #82878c; + text-indent: -9999px; + cursor: pointer; + outline: none; +} + +.menu-item-reorder-nav button { + width: 30px; + height: 40px; + background: transparent; + border: none; + box-shadow: none; +} + +.widget-reorder-nav span:before, +.menu-item-reorder-nav button: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, +.menu-item-reorder-nav button:hover, +.menu-item-reorder-nav button:focus { + color: #191e23; + background: #eee; +} + +.move-widget-down:before, +.menus-move-down:before { + content: "\f347"; +} + +.move-widget-up:before, +.menus-move-up:before { + content: "\f343"; +} + +#customize-theme-controls .first-widget .move-widget-up, +#customize-theme-controls .last-widget .move-widget-down, +.move-up-disabled .menus-move-up, +.move-down-disabled .menus-move-down, +.move-right-disabled .menus-move-right, +.move-left-disabled .menus-move-left { + color: #d5d5d5; + background-color: #fff; + cursor: default; + pointer-events: none; +} + +/** + * New widget and Add-menu-items modes and panels + */ + +.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%; +} + +body.adding-widget .add-new-widget, +body.adding-widget .add-new-widget:hover, +.adding-menu-items .add-new-menu-item, +.adding-menu-items .add-new-menu-item:hover, +.add-menu-toggle.open, +.add-menu-toggle.open:hover { + background: #eee; + border-color: #929793; + color: #32373c; + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); +} + +body.adding-widget .add-new-widget:before, +.adding-menu-items .add-new-menu-item:before, +#accordion-section-add_menu .add-new-menu-item.open:before { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +#available-widgets, +#available-menu-items { + position: absolute; + top: 0; + bottom: 0; + right: -301px; + visibility: hidden; + overflow-x: hidden; + overflow-y: auto; + width: 300px; + margin: 0; + z-index: 4; + background: #eee; + transition: right .18s; + border-left: 1px solid #ddd; +} + +#available-widgets .customize-section-title, +#available-menu-items .customize-section-title { + display: none; +} + +#available-widgets-list { + top: 60px; + position: absolute; + overflow: auto; + bottom: 0; + width: 100%; + border-top: 1px solid #ddd; +} + +.no-widgets-found #available-widgets-list { + border-top: none; +} + +#available-widgets-filter { + position: fixed; + top: 0; + z-index: 1; + width: 300px; + background: #eee; +} + +/* search field container */ +#available-widgets-filter, +#available-menu-items-search .accordion-section-title { + padding: 13px 15px; + box-sizing: border-box; +} + +#available-widgets-filter input, +#available-menu-items-search input { + width: 100%; + height: 32px; + margin: 1px 0; + padding: 6px 30px; +} + +#available-widgets-filter input::-ms-clear, +#available-menu-items-search input::-ms-clear { + display: none; /* remove the "x" in IE, which conflicts with the "x" icon on button.clear-results */ +} + +#available-menu-items-search .search-icon, +#available-widgets-filter .search-icon { + display: block; + position: absolute; + top: 15px; /* 13 container padding +1 input margin +1 input border */ + right: 16px; + width: 30px; + height: 30px; + line-height: 28px; + text-align: center; + color: #72777c; +} + +#available-widgets-filter .clear-results, +#available-menu-items-search .clear-results { + position: absolute; + top: 15px; /* 13 container padding +1 input margin +1 input border */ + left: 16px; + width: 30px; + height: 30px; + padding: 0; + border: 0; + cursor: pointer; + background: none; + color: #a00; + text-decoration: none; + outline: 0; +} + +#available-widgets-filter .clear-results, +#available-menu-items-search .clear-results, +#available-menu-items-search.loading .clear-results.is-visible { + display: none; +} + +#available-widgets-filter .clear-results.is-visible, +#available-menu-items-search .clear-results.is-visible { + display: block; +} + +#available-widgets-filter .clear-results:before, +#available-menu-items-search .clear-results:before { + content: "\f335"; + font: normal 20px/1 dashicons; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#available-widgets-filter .clear-results:hover, +#available-widgets-filter .clear-results:focus, +#available-menu-items-search .clear-results:hover, +#available-menu-items-search .clear-results:focus { + color: #dc3232; +} + +#available-widgets-filter .clear-results:focus, +#available-menu-items-search .clear-results:focus { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +#available-menu-items-search .search-icon:after, +#available-widgets-filter .search-icon:after, +.themes-filter-bar .search-icon:after { + content: "\f179"; + font: normal 20px/1 dashicons; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.themes-filter-bar .search-icon { + position: absolute; + top: 7px; + right: 26px; + z-index: 1; + color: #72777c; + height: 30px; + width: 30px; + line-height: 2; + text-align: center; +} + +.no-widgets-found-message { + display: none; + margin: 0; + padding: 0 15px; + line-height: inherit; +} + +.no-widgets-found .no-widgets-found-message { + display: block; +} + +#available-widgets .widget-top, +#available-widgets .widget-top:hover, +#available-menu-items .item-top, +#available-menu-items .item-top:hover { + border: none; + background: transparent; + box-shadow: none; +} + +#available-widgets .widget-tpl, +#available-menu-items .item-tpl { + position: relative; + padding: 15px 60px 15px 15px; + background: #fff; + border-bottom: 1px solid #ddd; + border-right: 4px solid #fff; + transition: .15s color ease-in-out, + .15s background-color ease-in-out, + .15s border-color ease-in-out; + cursor: pointer; + display: none; +} + +#available-widgets .widget, +#available-menu-items .item { + position: static; +} + + +/* Responsive */ +.customize-controls-preview-toggle { + display: none; +} + +@media only screen and (max-width: 782px) { + .wp-customizer .theme:not(.active):hover .theme-actions, + .wp-customizer .theme:not(.active):focus .theme-actions { + display: block; + } + + .wp-customizer .theme-browser .theme.active .theme-name span { + display: inline; + } + + .customize-control-header button.random .dice { + margin-top: 0; + } + + .customize-control-radio .customize-inside-control-row, + .customize-control-checkbox .customize-inside-control-row, + .customize-control-nav_menu_auto_add .customize-inside-control-row { + margin-right: 32px; + } + + .customize-control-radio input, + .customize-control-checkbox input, + .customize-control-nav_menu_auto_add input { + margin-right: -32px; + } + + .customize-control input[type="radio"] + label + br, + .customize-control input[type="checkbox"] + label + br { + line-height: 32px; /* For widgets checkboxes */ + } + + .customize-control .date-time-fields select { + height: 39px; + } + + .date-time-fields .date-input.month { + width: 79px; + } + + .date-time-fields .date-input.day, + .date-time-fields .date-input.hour, + .date-time-fields .date-input.minute { + width: 55px; + } + + .date-time-fields .date-input.year { + width: 80px; + } + + .date-time-fields .date-timezone { + line-height: 3.2; + } + + #customize-control-changeset_preview_link a { + bottom: 16px; + } + + .preview-link-wrapper .customize-copy-preview-link.preview-control-element.button { + bottom: 10px; + } + + .media-widget-control .media-widget-buttons .button.edit-media, + .media-widget-control .media-widget-buttons .button.change-media, + .media-widget-control .media-widget-buttons .button.select-media { + margin-top: 12px; + } + + .wp-core-ui .themes-filter-bar .feature-filter-toggle { + margin: 3px 25px 3px 0; + } +} + +@media screen and ( max-width: 1200px ) { + .outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, + .adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, + .adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main { + right: 67%; + } +} + +@media screen and ( max-width: 640px ) { + + /* when the sidebar is collapsed and switching to responsive view, + bring it back see ticket #35220 */ + .wp-full-overlay.collapsed #customize-controls { + margin-right: 0; + } + + .wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { + bottom: 0; + } + + .customize-controls-preview-toggle { + display: block; + position: absolute; + top: 0; + right: 48px; + line-height: 45px; + font-size: 14px; + padding: 0 12px; + margin: 0; + height: 45px; + background: #eee; + border: 0; + border-left: 1px solid #ddd; + color: #555d66; + cursor: pointer; + transition: color .1s ease-in-out, background .1s ease-in-out; + } + + #customize-footer-actions, + /*#customize-preview,*/ + .customize-controls-preview-toggle .controls, + .preview-only .wp-full-overlay-sidebar-content, + .preview-only .customize-controls-preview-toggle .preview { + display: none; + } + + .preview-only #customize-save-button-wrapper { + margin-top: -46px; + } + + .customize-controls-preview-toggle .preview:before, + .customize-controls-preview-toggle .controls:before { + font: normal 20px/1 dashicons; + content: "\f177"; + position: relative; + top: 4px; + margin-left: 6px; + } + + .customize-controls-preview-toggle .controls:before { + content: "\f540"; + } + + .preview-only #customize-controls { + height: 45px; + } + + .preview-only #customize-preview, + .preview-only .customize-controls-preview-toggle .controls { + display: block; + } + + .wp-core-ui.wp-customizer .button { + padding: 6px 14px; + line-height: normal; + font-size: 14px; + vertical-align: middle; + height: auto; + } + + #publish-settings { + height: 31px; + } + + #customize-control-changeset_status .customize-inside-control-row { + padding-top: 15px; + } + + body.adding-widget div#available-widgets, + body.adding-menu-items div#available-menu-items, + body.outer-section-open div#customize-sidebar-outer-content { + width: 100%; + } + + #available-widgets .customize-section-title, + #available-menu-items .customize-section-title { + display: block; + margin: 0; + } + + #available-widgets .customize-section-back, + #available-menu-items .customize-section-back { + height: 69px; + } + + #available-widgets .customize-section-title h3, + #available-menu-items .customize-section-title h3 { + font-size: 20px; + font-weight: 200; + padding: 9px 14px 12px 10px; + margin: 0; + line-height: 24px; + color: #555d66; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + #available-widgets .customize-section-title .customize-action, + #available-menu-items .customize-section-title .customize-action { + font-size: 13px; + display: block; + font-weight: 400; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + #available-widgets-filter { + position: relative; + width: 100%; + height: auto; + } + + #available-widgets-list { + top: 130px; + } + + #available-menu-items-search .clear-results, + #available-menu-items-search .search-icon { + top: 85px; /* 70 section title height + 13 container padding +1 input margin +1 input border */ + } + + .reorder, + .reordering .reorder-done { + padding: 8px; + } + + .wp-core-ui .themes-filter-bar .feature-filter-toggle { + margin: 0; + } + + .theme-browser .theme.active .theme-actions, + .wp-customizer .theme-browser .theme .theme-actions { + padding: 9px 15px; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + } +} + +@media screen and ( max-width: 600px ) { + .theme-browser .theme.active .theme-actions, + .wp-customizer .theme-browser .theme .theme-actions { + padding: 8px 15px; + box-shadow: none; + } + + .wp-full-overlay.expanded { + margin-right: 0; + } + + body.adding-widget div#available-widgets, + body.adding-menu-items div#available-menu-items, + body.outer-section-open div#customize-sidebar-outer-content { + top: 46px; + z-index: 10; + } + + body.wp-customizer .wp-full-overlay.expanded #customize-sidebar-outer-content { + right: -100%; + } + + body.wp-customizer.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content { + right: 0; + } +} 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..786043a --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#customize-controls .wp-full-overlay-sidebar-content,#customize-sidebar-outer-content{overflow-x:hidden;overflow-y:auto}.customize-control-checkbox label,.customize-control-radio label,.customize-control-site_icon .favicon-preview .browser-preview{vertical-align:top}body{overflow:hidden;-webkit-text-size-adjust:100%}.customize-controls-close,.widget-control-actions a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls img{max-width:100%}#customize-controls .submit{text-align:center}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked{background-color:rgba(0,0,0,.7);padding:25px}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .customize-changeset-locked-message{margin-right:auto;margin-left:auto;max-width:366px;min-height:64px;width:auto;padding:25px 109px 25px 25px;position:relative;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;overflow-y:auto;text-align:right;top:calc(50% - 100px)}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .currently-editing{margin-top:0}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .action-buttons{margin-bottom:0}.customize-changeset-locked-avatar{width:64px;position:absolute;right:25px;top:25px}.wp-core-ui.wp-customizer .customize-changeset-locked-message a.button{margin-left:10px;margin-top:0}#customize-controls .description{color:#555d66}#customize-save-button-wrapper{float:left;margin-top:9px}body:not(.ready) #customize-save-button-wrapper .save{visibility:hidden}#customize-save-button-wrapper .save{float:right;border-radius:3px;box-shadow:none;margin-top:0}#customize-save-button-wrapper .save:focus,#publish-settings:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}#customize-save-button-wrapper .save.has-next-sibling{border-radius:0 3px 3px 0}#customize-sidebar-outer-content{position:absolute;top:0;bottom:0;right:0;visibility:hidden;width:100%;margin:0;z-index:-1;background:#eee;transition:right .18s;border-left:1px solid #ddd;border-right:1px solid #ddd;height:100%}#customize-theme-controls .control-section-outer{display:none!important}#customize-outer-theme-controls .accordion-section-content{padding:12px}#customize-outer-theme-controls .accordion-section-content.open{display:block}.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content{visibility:visible;right:100%;transition:right .18s}.customize-outer-pane-parent{margin:0}.outer-section-open .wp-full-overlay.expanded .wp-full-overlay-main{right:300px;opacity:.4}.adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.adding-menu-items .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main,.adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.adding-widget .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main,.outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.outer-section-open .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main{right:64%}#customize-outer-theme-controls li.notice{padding-top:8px;padding-bottom:8px;margin-right:0;margin-bottom:10px}#publish-settings{text-indent:0;border-radius:3px 0 0 3px;padding-right:0;padding-left:0;box-shadow:none;font-size:14px;width:30px;float:right;-webkit-transform:none;transform:none;margin-top:0}body.trashing #customize-save-button-wrapper .save,body.trashing #publish-settings,body:not(.ready) #publish-settings{display:none}#customize-header-actions .spinner{margin-top:13px;margin-left:4px}.saving #customize-header-actions .spinner,.trashing #customize-header-actions .spinner{visibility:visible}#customize-header-actions{border-bottom:1px solid #ddd}.outer-section-open #customize-controls .wp-full-overlay-sidebar-content{background:#eee}#customize-controls .customize-info{border:none;border-bottom:1px solid #ddd;margin-bottom:15px}#customize-control-changeset_preview_link input,#customize-control-changeset_status .customize-inside-control-row{background-color:#fff;border-bottom:1px solid #ddd;box-sizing:content-box;width:100%;margin-right:-12px;padding-right:12px;padding-left:12px}#customize-control-trash_changeset{margin-top:20px}#customize-control-trash_changeset .button-link{position:relative;padding-right:24px;display:inline-block}#customize-control-trash_changeset .button-link:before{content:"\f182";font:400 22px dashicons;text-decoration:none;position:absolute;right:0;top:-2px}#customize-controls .date-input:invalid{border-color:#dc3232}#customize-control-changeset_status .customize-inside-control-row{padding-top:10px;padding-bottom:10px;font-weight:500}#customize-control-changeset_status .customize-inside-control-row:first-of-type{border-top:1px solid #ddd}#customize-control-changeset_status .customize-control-title{margin-bottom:6px}#customize-control-changeset_status input{margin-right:0}#customize-control-changeset_preview_link{position:relative;display:block}.preview-link-wrapper .customize-copy-preview-link.preview-control-element.button{margin:0;position:absolute;bottom:9px;left:0}.preview-link-wrapper{position:relative}.customize-copy-preview-link:after,.customize-copy-preview-link:before{content:"";height:28px;position:absolute;background:#fff;top:-1px}.customize-copy-preview-link:before{right:-10px;width:9px;opacity:.75}.customize-copy-preview-link:after{right:-5px;width:4px;opacity:.8}#customize-control-changeset_preview_link input{line-height:2.5;border-top:1px solid #ddd;border-right:none;border-left:none;text-indent:-999px;color:#fff}#customize-control-changeset_preview_link label{position:relative;display:block}#customize-control-changeset_preview_link a{display:inline-block;position:absolute;white-space:nowrap;overflow:hidden;width:90%;bottom:14px;font-size:14px;text-decoration:none}#customize-control-changeset_preview_link a.disabled,#customize-control-changeset_preview_link a.disabled:active,#customize-control-changeset_preview_link a.disabled:focus,#customize-control-changeset_preview_link a.disabled:visited{color:#000;opacity:.4;cursor:default;outline:0;box-shadow:none}#sub-accordion-section-publish_settings .customize-section-description-container{display:none}#customize-controls .customize-info.section-meta{margin-bottom:15px}.customize-control-date_time .customize-control-description+.date-time-fields.includes-time{margin-top:10px}.customize-control.customize-control-date_time .date-time-fields .date-input.day{margin-left:0}.date-time-fields .date-input.month{width:auto;margin:0}.date-time-fields .date-input.day,.date-time-fields .date-input.hour,.date-time-fields .date-input.minute{width:46px}.date-time-fields .date-input.year{width:60px}.date-time-fields .date-input.meridian{width:auto;margin:0}.date-time-fields .time-row{margin-top:12px}.date-time-fields .date-timezone{line-height:2.2;text-decoration:none}#customize-control-changeset_preview_link{margin-top:6px}#customize-control-changeset_status{margin-bottom:0;padding-bottom:0}#customize-control-changeset_scheduled_date{box-sizing:content-box;width:100%;margin-right:-12px;padding:12px;background:#fff;border-bottom:1px solid #ddd;margin-bottom:0}#customize-control-changeset_scheduled_date .customize-control-description{font-style:normal}#customize-controls .customize-info.is-in-view,#customize-controls .customize-section-title.is-in-view{position:absolute;z-index:9;width:100%;box-shadow:0 1px 0 rgba(0,0,0,.1)}#customize-controls .customize-section-title.is-in-view{margin-top:0}#customize-controls .customize-info.is-in-view+.accordion-section{margin-top:15px}#customize-controls .customize-info .customize-panel-description p:first-child,#customize-controls .customize-info .customize-section-description p:first-child,.no-widget-areas-rendered-notice p:first-child{margin-top:0}#customize-controls .customize-info.is-sticky,#customize-controls .customize-section-title.is-sticky{position:fixed;top:46px}#customize-controls .customize-info .accordion-section-title{background:#fff;color:#555d66;border-right:none;border-left:none;border-bottom:none;cursor:default}#customize-controls .customize-info .accordion-section-title:focus:after,#customize-controls .customize-info .accordion-section-title:hover:after,#customize-controls .customize-info.open .accordion-section-title:after{color:#32373c}#customize-controls .customize-info .accordion-section-title:after{display:none}#customize-controls .customize-info .preview-notice{font-size:13px;line-height:24px}#customize-controls .customize-info .panel-title,#customize-controls .customize-pane-child .customize-section-title h3,#customize-controls .customize-pane-child h3.customize-section-title,#customize-outer-theme-controls .customize-pane-child .customize-section-title h3,#customize-outer-theme-controls .customize-pane-child h3.customize-section-title{font-size:20px;font-weight:200;line-height:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#customize-controls .customize-section-title span.customize-action{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#customize-controls .customize-info .customize-help-toggle{position:absolute;top:4px;left:1px;padding:20px 10px 10px 20px;width:20px;height:20px;cursor:pointer;box-shadow:none;-webkit-appearance:none;background:0 0;color:#555d66;border:none}#customize-controls .customize-info .customize-help-toggle:before{position:absolute;top:5px;right:6px}#customize-controls .customize-info .customize-help-toggle:focus,#customize-controls .customize-info .customize-help-toggle:hover,#customize-controls .customize-info.open .customize-help-toggle{color:#0073aa}#customize-controls .customize-info .customize-panel-description,#customize-controls .customize-info .customize-section-description,#customize-controls .no-widget-areas-rendered-notice,#customize-outer-theme-controls .customize-info .customize-section-description{color:#555d66;display:none;background:#fff;padding:12px 15px;border-top:1px solid #ddd}#customize-controls .customize-info .customize-panel-description.open+.no-widget-areas-rendered-notice{border-top:none}.no-widget-areas-rendered-notice{font-style:italic}.no-widget-areas-rendered-notice p:last-child{margin-bottom:0}#customize-controls .customize-info .customize-section-description{margin-bottom:15px}#customize-controls .customize-info .customize-panel-description p:last-child,#customize-controls .customize-info .customize-section-description p:last-child{margin-bottom:0}#customize-controls .current-panel .control-section>h3.accordion-section-title{padding-left:30px}#customize-outer-theme-controls .control-section,#customize-theme-controls .control-section{border:none}#customize-outer-theme-controls .accordion-section-title,#customize-theme-controls .accordion-section-title{color:#555d66;background-color:#fff;border-bottom:1px solid #ddd;border-right:4px solid #fff;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}#customize-controls #customize-theme-controls .customize-themes-panel .accordion-section-title{color:#555;background-color:#fff;border-right:4px solid #fff}#customize-outer-theme-controls .accordion-section-title:after,#customize-theme-controls .accordion-section-title:after{content:"\f341";color:#a0a5aa}#customize-outer-theme-controls .accordion-section-content,#customize-theme-controls .accordion-section-content{color:#555d66;background:0 0}#customize-controls .control-section .accordion-section-title:focus,#customize-controls .control-section .accordion-section-title:hover,#customize-controls .control-section.open .accordion-section-title,#customize-controls .control-section:hover>.accordion-section-title{color:#0073aa;background:#f3f3f5;border-right-color:#0073aa}#accordion-section-themes+.control-section{border-top:1px solid #ddd}.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:#f3f3f5}#customize-outer-theme-controls .control-section .accordion-section-title:focus:after,#customize-outer-theme-controls .control-section .accordion-section-title:hover:after,#customize-outer-theme-controls .control-section.open .accordion-section-title:after,#customize-outer-theme-controls .control-section:hover>.accordion-section-title:after,#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:#0073aa}#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-outer-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!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 .control-panel-content:not(.control-panel-nav_menus) .control-section:nth-child(2),#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu,#customize-theme-controls .control-section-nav_menu_locations .accordion-section-title{border-top:1px solid #ddd}#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu+.control-section-nav_menu{border-top:none}#customize-theme-controls>ul{margin:0}#customize-theme-controls .accordion-section-content{position:absolute;top:0;right:100%;width:100%;margin:0;padding:12px;box-sizing:border-box}#customize-info,#customize-theme-controls .customize-pane-child,#customize-theme-controls .customize-pane-parent{width:100%;margin:0;padding:0;box-sizing:border-box;transition:.18s -webkit-transform cubic-bezier(.645,.045,.355,1);transition:.18s transform cubic-bezier(.645,.045,.355,1);transition:.18s transform cubic-bezier(.645,.045,.355,1),.18s -webkit-transform cubic-bezier(.645,.045,.355,1)}#customize-theme-controls .customize-pane-child.skip-transition{transition:none}#customize-info,#customize-theme-controls .customize-pane-parent{position:relative;visibility:visible;height:auto;max-height:none;overflow:auto;-webkit-transform:none;transform:none}#customize-theme-controls .customize-pane-child{position:absolute;top:0;right:0;visibility:hidden;height:0;max-height:none;overflow:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}#customize-theme-controls .customize-pane-child.current-panel,#customize-theme-controls .customize-pane-child.open{-webkit-transform:none;transform:none}.in-sub-panel #customize-info,.in-sub-panel #customize-theme-controls .customize-pane-parent,.in-sub-panel.section-open #customize-theme-controls .customize-pane-child.current-panel,.section-open #customize-info,.section-open #customize-theme-controls .customize-pane-parent{visibility:hidden;height:0;overflow:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}#customize-theme-controls .customize-pane-child.busy,#customize-theme-controls .customize-pane-child.current-panel,#customize-theme-controls .customize-pane-child.open,.busy.section-open.in-sub-panel #customize-theme-controls .customize-pane-child.current-panel,.in-sub-panel #customize-info.busy,.in-sub-panel #customize-theme-controls .customize-pane-parent.busy,.section-open #customize-info.busy,.section-open #customize-theme-controls .customize-pane-parent.busy{visibility:visible;height:auto;overflow:auto}#customize-theme-controls .customize-pane-child.accordion-section-content,#customize-theme-controls .customize-pane-child.accordion-sub-container{display:block;overflow-x:hidden}#customize-theme-controls .customize-pane-child.accordion-section-content{padding:12px}#customize-theme-controls .customize-pane-child.menu li{position:static}.control-section-nav_menu .customize-section-description-container,.control-section-new_menu .customize-section-description-container,.customize-section-description-container{margin-bottom:15px}.control-section-nav_menu .customize-control,.control-section-new_menu .customize-control{margin-bottom:0}.customize-section-title{margin:-12px -12px 0;border-bottom:1px solid #ddd;background:#fff}div.customize-section-description{margin-top:22px}.customize-info div.customize-section-description,div.customize-section-description p:first-child{margin-top:0}div.customize-section-description p:last-child{margin-bottom:0}#customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child{border-bottom:1px solid #ddd;padding:12px}.ios #customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child{padding:12px 12px 13px}.customize-section-title h3,h3.customize-section-title{padding:10px 14px 12px 10px;margin:0;line-height:21px;color:#555d66}.accordion-sub-container.control-panel-content{display:none;position:absolute;top:0;width:100%}.accordion-sub-container.control-panel-content.busy{display:block}.current-panel .accordion-sub-container.control-panel-content{width:100%}.customize-controls-close{display:block;position:absolute;top:0;right:0;width:45px;height:41px;padding:0 0 0 2px;background:#eee;border:none;border-top:4px solid #eee;border-left:1px solid #ddd;color:#444;text-align:right;cursor:pointer;transition:color .15s ease-in-out,border-color .15s ease-in-out,background .15s ease-in-out;box-sizing:content-box}.customize-panel-back,.customize-section-back{display:block;float:right;width:48px;height:71px;padding:0 0 0 24px;margin:0;background:#fff;border:none;border-left:1px solid #ddd;border-right:4px solid #fff;box-shadow:none;cursor:pointer;transition:color .15s ease-in-out,border-color .15s ease-in-out,background .15s ease-in-out}.customize-section-back{height:74px}.ios .customize-panel-back{display:none}.ios .expanded.in-sub-panel .customize-panel-back{display:block}#customize-controls .panel-meta.customize-info .accordion-section-title{margin-right:48px;border-right:none}#customize-controls .cannot-expand:hover .accordion-section-title,#customize-controls .panel-meta.customize-info .accordion-section-title:hover{background:#fff;color:#555d66;border-right-color:#fff}.customize-controls-close:focus,.customize-controls-close:hover,.customize-controls-preview-toggle:focus,.customize-controls-preview-toggle:hover{background:#fff;color:#0073aa;border-top-color:#0073aa;outline:0;box-shadow:none}.customize-panel-back:focus,.customize-panel-back:hover,.customize-section-back:focus,.customize-section-back:hover{color:#0073aa;background:#f3f3f5;border-right-color:#0073aa;outline:0;box-shadow:none}.customize-controls-close:before{font:400 22px/45px dashicons;content:"\f335";position:relative;top:-3px;right:13px}.customize-panel-back:before,.customize-section-back:before{font:400 20px/72px dashicons;content:"\f345";position:relative;right:9px}.wp-full-overlay-sidebar .wp-full-overlay-header{background-color:#eee;transition:padding ease-in-out .18s}.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header{padding-right:62px}p.customize-section-description{font-style:normal;margin-top:22px;margin-bottom:0}.customize-section-description ul{margin-right:1em}.customize-section-description ul>li{list-style:disc}.section-description-buttons{text-align:left}.section-description-buttons button.button-link{color:#0073aa;text-decoration:underline}.customize-control{width:100%;float:right;clear:both;margin-bottom:12px}.customize-control input[type=radio],.customize-control input[type=checkbox],.customize-control select{line-height:28px}.customize-control input[type=number],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=url],.customize-control input[type=text],.customize-control input[type=password],.customize-control input[type=email]{width:100%;line-height:18px;margin:0}.customize-control-hidden{margin:0}.customize-control-textarea textarea{width:100%;resize:vertical}.customize-control select{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:4px}.customize-control-description{display:block;font-style:italic;line-height:18px;margin-top:0;margin-bottom:5px}.customize-section-description a.external-link:after{font:16px/11px dashicons;content:"\f310";top:3px;position:relative;padding-right:3px;display:inline-block;text-decoration:none}.customize-control-color .color-picker,.customize-control-upload div{line-height:28px}.customize-control .customize-inside-control-row{line-height:20px;display:block;margin-right:24px;padding-top:6px;padding-bottom:6px}.customize-control-checkbox input,.customize-control-nav_menu_auto_add input,.customize-control-radio input{margin-left:4px;margin-right:-24px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio .customize-control-title+.customize-control-description{margin-top:7px}.customize-control .attachment-thumb.type-icon{float:right;margin:10px;width:auto}.customize-control .attachment-title{font-weight:600;margin:0;padding:5px 10px}.customize-control .attachment-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding:0 10px}.customize-control .attachment-meta-title{padding-top:7px}.customize-control .thumbnail-image,.customize-control .wp-media-wrapper.wp-video,.customize-control-header .current{line-height:0}.customize-control .thumbnail-image img{cursor:pointer}#customize-controls .thumbnail-audio .thumbnail{max-width:64px;max-height:64px;margin:10px;float:right}#available-menu-items .accordion-section-content .new-content-item,.customize-control-dropdown-pages .new-content-item{width:calc(100% - 30px);padding:8px 15px;position:absolute;bottom:0;z-index:10;background:#eee;display:-webkit-box;display:flex}.customize-control-dropdown-pages .new-content-item{width:100%;padding:5px 1px 5px 0;position:relative}#available-menu-items .new-content-item .create-item-input,.customize-control-dropdown-pages .new-content-item .create-item-input{-webkit-box-flex:10;flex-grow:10}#available-menu-items .new-content-item .add-content,.customize-control-dropdown-pages .new-content-item .add-content{margin:2px 6px 2px 0;-webkit-box-flex:10;flex-grow:1}.customize-control-dropdown-pages .new-content-item .create-item-input.invalid{border:1px solid #dc3232}.customize-control-dropdown-pages .add-new-toggle{margin-right:1px;font-weight:600;line-height:28px}#customize-preview iframe{width:100%;height:100%;position:absolute}#customize-preview iframe+iframe{visibility:hidden}.wp-full-overlay-sidebar{background:#eee;border-left:1px solid #ddd}#customize-controls .customize-control-notifications-container{margin:4px 0 8px;padding:0;cursor:default}#customize-controls .customize-control-widget_form.has-error .widget .widget-top,.customize-control-nav_menu_item.has-error .menu-item-bar .menu-item-handle{box-shadow:inset 0 0 0 2px #dc3232;transition:.15s box-shadow linear}#customize-controls .customize-control-notifications-container li.notice{list-style:none;margin:0 0 6px;padding:9px 14px;overflow:hidden}#customize-controls .customize-control-notifications-container .notice.is-dismissible{padding-left:38px}.customize-control-notifications-container li.notice:last-child{margin-bottom:0}#customize-controls .customize-control-nav_menu_item .customize-control-notifications-container{margin-top:0}#customize-controls .customize-control-widget_form .customize-control-notifications-container{margin-top:8px}.customize-control-text.has-error input{outline:#dc3232 solid 2px}#customize-controls #customize-notifications-area{position:absolute;top:46px;width:100%;border-bottom:1px solid #ddd;display:block;padding:0;margin:0}.wp-full-overlay.collapsed #customize-controls #customize-notifications-area{display:none!important}#customize-controls #customize-notifications-area:not(.has-overlay-notifications),#customize-controls .customize-section-title>.customize-control-notifications-container:not(.has-overlay-notifications),#customize-controls .panel-meta>.customize-control-notifications-container:not(.has-overlay-notifications){max-height:210px;overflow-x:hidden;overflow-y:auto}#customize-controls #customize-notifications-area .notice,#customize-controls #customize-notifications-area>ul,#customize-controls .customize-section-title>.customize-control-notifications-container,#customize-controls .customize-section-title>.customize-control-notifications-container .notice,#customize-controls .panel-meta>.customize-control-notifications-container,#customize-controls .panel-meta>.customize-control-notifications-container .notice{margin:0}#customize-controls .customize-section-title>.customize-control-notifications-container,#customize-controls .panel-meta>.customize-control-notifications-container{border-top:1px solid #ddd}#customize-controls #customize-notifications-area .notice,#customize-controls .customize-section-title>.customize-control-notifications-container .notice,#customize-controls .panel-meta>.customize-control-notifications-container .notice{padding:9px 14px}#customize-controls #customize-notifications-area .notice.is-dismissible,#customize-controls .customize-section-title>.customize-control-notifications-container .notice.is-dismissible,#customize-controls .panel-meta>.customize-control-notifications-container .notice.is-dismissible{padding-left:38px}#customize-controls #customize-notifications-area .notice+.notice,#customize-controls .customize-section-title>.customize-control-notifications-container .notice+.notice,#customize-controls .panel-meta>.customize-control-notifications-container .notice+.notice{margin-top:1px}@-webkit-keyframes customize-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes customize-fade-in{0%{opacity:0}100%{opacity:1}}#customize-controls #customize-notifications-area .notice.notification-overlay,#customize-controls .notice.notification-overlay{margin:0;border-right:0}#customize-controls .customize-control-notifications-container.has-overlay-notifications{-webkit-animation:customize-fade-in .5s;animation:customize-fade-in .5s;z-index:30}#customize-controls #customize-notifications-area .notice.notification-overlay .notification-message{clear:both;color:#191e23;font-size:18px;font-style:normal;margin:0;padding:2em 0;text-align:center;width:100%;display:block;top:50%;position:relative}#customize-control-show_on_front.has-error .customize-control-notifications-container,.customize-control .actions .button{margin-top:12px}#customize-control-show_on_front.has-error{margin-bottom:0}.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:#32373c}.customize-control .dropdown-status{color:#32373c;background:#eee;display:none;max-width:112px}.customize-control-color .dropdown{margin-left:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555d66;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.ios .wp-full-overlay{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}.customize-control-header .actions,.customize-control-header .uploaded{margin-bottom:18px}.customize-control-header .default button:not(.random),.customize-control-header .uploaded button:not(.random){width:100%;padding:0;margin:0;background:0 0;border:none;color:inherit;cursor:pointer}.customize-control-header button img{display:block}.customize-control .attachment-media-view .default-button,.customize-control .attachment-media-view .remove-button,.customize-control .attachment-media-view .upload-button,.customize-control-header button.new,.customize-control-header button.remove{width:auto;height:auto;white-space:normal}.customize-control .attachment-media-view .thumbnail,.customize-control-header .current .container{overflow:hidden}.customize-control .attachment-media-view .placeholder,.customize-control-header .placeholder{width:100%;position:relative;text-align:center;cursor:default;border:1px dashed #b4b9be;box-sizing:border-box;padding:9px 0;line-height:20px}.customize-control-header .inner{display:none;position:absolute;width:100%;color:#555d66;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.customize-control-header .inner,.customize-control-header .inner .dashicons{line-height:20px;top:8px}.customize-control-header .list .inner,.customize-control-header .list .inner .dashicons{top:9px}.customize-control-header .header-view{position:relative;width:100%;margin-bottom:12px}.customize-control-header .header-view:last-child{margin-bottom:0}.customize-control-header .header-view:after{border:0}.customize-control-header .header-view.selected .choice:focus{outline:0}.customize-control-header .header-view.selected:after{content:'';position:absolute;height:auto;top:0;right:0;bottom:0;left:0;border:4px solid #00a0d2;border-radius:2px}.customize-control-header .header-view.button.selected{border:0}#customize-controls .customize-section-description-container.section-meta.customize-info,#customize-theme-controls .control-panel-themes{border-bottom:none}.customize-control-header .uploaded .header-view .close{font-size:20px;color:#fff;background:#555d66;background:rgba(0,0,0,.5);position:absolute;top:10px;right:-999px;z-index:1;width:26px;height:26px;cursor:pointer}.customize-control-header .header-view .close:focus,.customize-control-header .header-view:hover .close{right:auto;left:10px}.customize-control-header .header-view .close:focus{outline:#5b9dd9 solid 1px}.customize-control-header .random.placeholder{cursor:pointer;border-radius:2px;height:40px}.customize-control-header button.random{width:100%;height:auto;min-height:40px;white-space:normal}.customize-control-header button.random .dice{margin-top:4px}.customize-control-header .header-view:hover>button.random .dice,.customize-control-header .placeholder:hover .dice{-webkit-animation:dice-color-change 3s infinite;animation:dice-color-change 3s infinite}.button-see-me{-webkit-animation:bounce .7s 1;animation:bounce .7s 1;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-12px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-6px,0)}90%{-webkit-transform:translate3d(0,-1px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-12px,0);transform:translate3d(0,-12px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-6px,0);transform:translate3d(0,-6px,0)}90%{-webkit-transform:translate3d(0,-1px,0);transform:translate3d(0,-1px,0)}}.customize-control-header .choice{position:relative;display:block;margin-bottom:9px}.customize-control-header .choice:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 3px 1px rgba(30,140,190,.8)}.customize-control-header .uploaded div:last-child>.choice{margin-bottom:0}.customize-control .attachment-media-view .thumbnail-image img,.customize-control-header img{max-width:100%}.customize-control .attachment-media-view .default-button,.customize-control .attachment-media-view .remove-button,.customize-control-header .remove{margin-left:8px}.customize-control-background_position .background-position-control .button-group{display:block}.customize-control-code_editor textarea{width:100%;font-family:Consolas,Monaco,monospace;font-size:12px;padding:6px 8px;-moz-tab-size:2;-o-tab-size:2;tab-size:2}.customize-control-code_editor .CodeMirror,.customize-control-code_editor textarea{height:14em}#sub-accordion-section-custom_css .customize-control-notifications-container{margin-bottom:15px}#customize-control-custom_css textarea{display:block;height:500px}.customize-section-description-container+#customize-control-custom_css .customize-control-title{margin-right:12px}.customize-section-description-container+#customize-control-custom_css:last-child textarea{border-left:0;border-right:0;height:calc(100vh - 185px);resize:none}.customize-section-description-container+#customize-control-custom_css:last-child{margin-right:-12px;width:299px;width:calc(100% + 24px);margin-bottom:-12px}.customize-section-description-container+#customize-control-custom_css:last-child .CodeMirror{height:calc(100vh - 185px)}.CodeMirror-hints,.CodeMirror-lint-tooltip{z-index:500000!important}.customize-section-description-container+#customize-control-custom_css:last-child .customize-control-notifications-container{margin-right:12px;margin-left:12px}.theme-browser .theme.active .theme-actions,.wp-customizer .theme-browser .theme .theme-actions{padding:10px 15px;box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}@media screen and (max-width:640px){.customize-section-description-container+#customize-control-custom_css:last-child{margin-left:0}.customize-section-description-container+#customize-control-custom_css:last-child textarea{height:calc(100vh - 140px)}}#customize-theme-controls .control-panel-themes>.accordion-section-title,#customize-theme-controls .control-panel-themes>.accordion-section-title:hover{cursor:default;background:#fff;color:#555d66;border-top:1px solid #ddd;border-bottom:1px solid #ddd;border-right:none;border-left:none;margin:0 0 15px;padding-left:100px}#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child,#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child:hover{border-top:0}#customize-theme-controls .control-section-themes>.accordion-section-title,#customize-theme-controls .control-section-themes>.accordion-section-title:hover{margin:0 0 15px}#customize-controls .customize-themes-panel .accordion-section-title,#customize-controls .customize-themes-panel .accordion-section-title:hover{margin:15px -8px}#customize-controls .control-section-themes .accordion-section-title,#customize-controls .customize-themes-panel .accordion-section-title{padding-left:100px}#customize-controls .control-section-themes .accordion-section-title span.customize-action,#customize-controls .customize-section-title span.customize-action,.control-panel-themes .accordion-section-title span.customize-action{font-size:13px;display:block;font-weight:400}.in-themes-panel.animating .control-panel-themes .filter-themes-count,.themes-filter-bar .feature-filter-toggle .filter-count-filters{display:none}#customize-theme-controls .control-panel-themes .accordion-section-title .change-theme{position:absolute;left:10px;top:50%;margin-top:-14px;font-weight:400}#customize-theme-controls .control-panel-themes>.accordion-section-title:after{display:none}.control-panel-themes .customize-themes-full-container{position:fixed;top:0;right:0;transition:.18s right ease-in-out;margin:0 300px 0 0;padding:71px 0 25px;overflow-y:scroll;width:calc(100% - 300px);height:calc(100% - 96px);background:#eee;z-index:20}@media screen and (min-width:1670px){.control-panel-themes .customize-themes-full-container{width:82%;left:0;right:initial}}.modal-open .control-panel-themes .customize-themes-full-container{overflow-y:visible}#customize-header-actions .customize-controls-preview-toggle,#customize-header-actions .spinner,#customize-save-button-wrapper{transition:.18s margin ease-in-out}#customize-footer-actions,#customize-footer-actions .collapse-sidebar{bottom:0;transition:.18s bottom ease-in-out}.in-themes-panel:not(.animating) #customize-footer-actions,.in-themes-panel:not(.animating) #customize-header-actions .customize-controls-preview-toggle,.in-themes-panel:not(.animating) #customize-header-actions .spinner,.in-themes-panel:not(.animating) #customize-preview{visibility:hidden}.wp-full-overlay.in-themes-panel{background:#eee}.in-themes-panel #customize-header-actions .customize-controls-preview-toggle,.in-themes-panel #customize-header-actions .spinner,.in-themes-panel #customize-save-button-wrapper{margin-top:-46px}.in-themes-panel #customize-footer-actions,.in-themes-panel #customize-footer-actions .collapse-sidebar{bottom:-45px}.in-themes-panel.wp-full-overlay .wp-full-overlay-sidebar-content{bottom:0}.themes-filter-bar .feature-filter-toggle{float:left;margin:3px 25px 3px 0}.themes-filter-bar .feature-filter-toggle:before{content:"\f111";margin:0 0 0 5px;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.themes-filter-bar .feature-filter-toggle.open{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.filter-drawer{box-sizing:border-box;width:100%;position:absolute;top:46px;right:0;padding:25px 25px 25px 0;border-top:0;margin:0;background:#eee;border-bottom:1px solid #ddd}.filter-drawer .filter-group{margin:0 0 0 25px;width:calc((100% - 75px)/ 3);min-width:200px;max-width:320px}@-webkit-keyframes themes-fade-in{0%,50%{opacity:0}100%{opacity:1}}@keyframes themes-fade-in{0%,50%{opacity:0}100%{opacity:1}}.control-panel-themes .customize-themes-full-container.animate{-webkit-animation:.6s themes-fade-in 1;animation:.6s themes-fade-in 1}.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count{-webkit-animation:.6s themes-fade-in 1;animation:.6s themes-fade-in 1}.control-panel-themes .filter-themes-count{position:relative;float:left;line-height:34px}.control-panel-themes .filter-themes-count .themes-displayed{font-weight:600;color:#555d66}.customize-themes-notifications{margin:0}.control-panel-themes .customize-themes-notifications .notice{margin:0 0 25px}.customize-themes-full-container .customize-themes-section{display:none!important;overflow:hidden}.customize-themes-full-container .customize-themes-section.current-section{display:list-item!important}.control-section .customize-section-text-before{padding:0 15px 8px 0;margin:15px 0 0;line-height:16px;border-bottom:1px solid #ddd;color:#555d66}.control-panel-themes .customize-themes-section-title{width:100%;background:#fff;box-shadow:none;outline:0;border-top:none;border-bottom:1px solid #ddd;border-right:4px solid #fff;border-left:none;cursor:pointer;padding:10px 15px;position:relative;text-align:right;font-size:14px;font-weight:600;color:#555d66;text-shadow:none}.control-panel-themes #accordion-section-installed_themes{border-top:1px solid #ddd}.control-panel-themes .theme-section{margin:0;position:relative}.control-panel-themes .customize-themes-section-title:focus,.control-panel-themes .customize-themes-section-title:hover{border-right-color:#0073aa;color:#0073aa;background:#f5f5f5}.customize-themes-section-title:not(.selected):after{content:"";display:block;position:absolute;top:9px;left:15px;width:18px;height:18px;border-radius:100%;border:1px solid #ccc;background:#fff}.control-panel-themes .theme-section .customize-themes-section-title.selected:after{content:"\f147";font:16px/1 dashicons;box-sizing:border-box;width:20px;height:20px;padding:3px 1px 1px 3px;border-radius:100%;position:absolute;top:9px;left:15px;background:#0073aa;color:#fff}.control-panel-themes .customize-themes-section-title.selected{color:#0073aa}#customize-theme-controls .themes.accordion-section-content{position:relative;right:0;padding:0;width:100%}.loading .customize-themes-section .spinner{display:block;visibility:visible;position:relative;clear:both;width:20px;height:20px;right:calc(50% - 10px);float:none;margin-top:50px}.control-panel-themes .customize-themes-mobile-back,.customize-themes-section .no-themes,.customize-themes-section .no-themes-local{display:none}.themes-section-installed_themes .theme .notice-success:not(.updated-message){display:none}.customize-control-theme .theme{width:100%;margin:0;border:1px solid #ddd;background:#fff}.customize-control-theme .theme .theme-actions,.customize-control-theme .theme .theme-name{background:#fff;border:none}.customize-control.customize-control-theme{box-sizing:border-box;width:25%;max-width:600px;margin:0 0 25px 25px;padding:0;clear:none}@media screen and (min-width:2101px){.customize-control.customize-control-theme{width:calc((100% - 125px)/ 5 - 1px)}}@media screen and (min-width:1601px) and (max-width:2100px){.customize-control.customize-control-theme{width:calc((100% - 100px)/ 4 - 1px)}}@media screen and (min-width:1201px) and (max-width:1600px){.customize-control.customize-control-theme{width:calc((100% - 75px)/ 3 - 1px)}}@media screen and (min-width:851px) and (max-width:1200px){.customize-control.customize-control-theme{width:calc((100% - 50px)/ 2 - 1px)}}@media screen and (max-width:850px){.customize-control.customize-control-theme{width:100%}}.wp-customizer .theme-browser .themes{padding:0 25px 25px 0;transition:.18s margin-top linear}.wp-customizer .theme-browser .theme .theme-actions{opacity:1}#customize-controls h3.theme-name{font-size:15px}#customize-controls .theme-overlay .theme-name{font-size:32px}.customize-preview-header.themes-filter-bar{position:fixed;top:0;right:300px;width:calc(100% - 300px);height:46px;background:#eee;z-index:10;padding:6px 25px;box-sizing:border-box;border-bottom:1px solid #ddd}@media screen and (min-width:1670px){.customize-preview-header.themes-filter-bar{width:82%;left:0;right:initial}}.themes-filter-bar .themes-filter-container{margin:0;padding:0}.themes-filter-bar .wp-filter-search{line-height:25px;padding:6px 30px 6px 10px;max-width:100%;width:40%;min-width:300px;position:absolute;top:6px;right:25px;height:32px;margin:1px 0}@media screen and (max-height:540px),screen and (max-width:1018px){.customize-preview-header.themes-filter-bar{position:relative;right:0;width:100%;margin:0 0 25px}.filter-drawer{top:46px}.wp-customizer .theme-browser .themes{padding:0 25px 25px 0;overflow:hidden}.control-panel-themes .customize-themes-full-container{margin-top:0;padding:0;height:100%;width:calc(100% - 300px)}}@media screen and (max-width:1018px){.filter-drawer .filter-group{width:calc((100% - 50px)/ 2)}}@media screen and (max-width:900px){.customize-preview-header.themes-filter-bar{height:86px;padding-top:46px}.themes-filter-bar .wp-filter-search{width:calc(100% - 50px);margin:0;min-width:200px}.filter-drawer{top:86px}.control-panel-themes .filter-themes-count{float:right}}@media screen and (max-width:792px){.filter-drawer .filter-group{width:calc(100% - 25px)}}@media screen and (max-width:600px){.filter-drawer{top:132px}.wp-full-overlay.showing-themes .control-panel-themes .filter-themes-count .filter-themes{display:block;float:left}.control-panel-themes .customize-themes-full-container{width:100%;margin:0;padding-top:46px;height:calc(100% - 46px);z-index:1;display:none}.showing-themes .control-panel-themes .customize-themes-full-container{display:block}.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back{display:block;position:fixed;top:0;right:0;background:#eee;color:#444;border-radius:0;box-shadow:none;border:none;height:46px;width:100%;z-index:10;text-align:right;text-shadow:none;border-bottom:1px solid #ddd;border-right:4px solid transparent;margin:0;padding:0;font-size:0;overflow:hidden}.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:before{right:0;top:0;height:46px;width:26px;display:block;line-height:46px;padding:0 8px;border-left:1px solid #ddd}.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:focus,.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:hover{color:#0073aa;background:#f3f3f5;border-right-color:#0073aa;outline:0;box-shadow:none}.showing-themes #customize-header-actions{display:none}#customize-controls{width:100%}}.modal-open .in-themes-panel #customize-controls .wp-full-overlay-sidebar-content,.wp-full-overlay.in-themes-panel.themes-panel-expanded #customize-controls .wp-full-overlay-sidebar-content{overflow:visible}.wp-customizer .theme-overlay{display:none}.wp-customizer.modal-open .theme-overlay{position:fixed;right:0;top:0;left:0;bottom:0;z-index:109}.wp-customizer.modal-open #customize-header-actions,.wp-customizer.modal-open .control-panel-themes .customize-themes-section-title.selected:after,.wp-customizer.modal-open .control-panel-themes .filter-themes-count{z-index:-1}.wp-customizer .theme-overlay .theme-backdrop{background:rgba(238,238,238,.75);position:fixed;z-index:110}.wp-customizer .theme-overlay .star-rating{float:right;margin-left:8px}.wp-customizer .theme-rating .num-ratings{line-height:20px}.wp-customizer .theme-overlay .theme-wrap{right:90px;left:90px;top:45px;bottom:45px;z-index:120}.wp-customizer .theme-overlay .theme-actions{text-align:left;padding:10px 25px;background:#eee;border-top:1px solid #ddd}.wp-customizer .theme-overlay .theme-actions .theme-install.preview{margin-right:8px}.control-panel-themes .theme-actions .delete-theme{right:15px;left:auto;bottom:auto;position:absolute}.wp-customizer .theme-header{background:#eee}.wp-customizer .theme-overlay .theme-header .close:before,.wp-customizer .theme-overlay .theme-header button{color:#444}.wp-customizer .theme-overlay .theme-header .close:focus,.wp-customizer .theme-overlay .theme-header .close:hover,.wp-customizer .theme-overlay .theme-header .left:focus,.wp-customizer .theme-overlay .theme-header .left:hover,.wp-customizer .theme-overlay .theme-header .right:focus,.wp-customizer .theme-overlay .theme-header .right:hover{background:#fff;border-bottom:4px solid #0073aa;color:#0073aa}.wp-customizer .theme-overlay .theme-header .close:focus:before,.wp-customizer .theme-overlay .theme-header .close:hover:before{color:#0073aa}.wp-customizer .theme-overlay .theme-header button.disabled,.wp-customizer .theme-overlay .theme-header button.disabled:focus,.wp-customizer .theme-overlay .theme-header button.disabled:hover{border-bottom:none;background:0 0;color:#ccc}@media (max-width:850px),(max-height:472px){.wp-customizer .theme-overlay .theme-wrap{right:0;left:0;top:0;bottom:0}.wp-customizer .theme-browser .themes{padding-left:25px}}body.cheatin{font-size:medium;height:auto;background:#fff;margin:50px auto 2em;padding:1em 2em;max-width:700px;min-width:0;box-shadow:0 1px 3px rgba(0,0,0,.13)}body.cheatin h1{border-bottom:1px solid #ddd;clear:both;color:#555d66;font-size:24px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin:30px 0 0;padding:0 0 7px}body.cheatin p{font-size:14px;line-height:1.5;margin:25px 0 20px}#customize-theme-controls .add-new-menu-item,#customize-theme-controls .add-new-widget{cursor:pointer;float:left;margin:0 10px 0 0;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.reordering .add-new-menu-item,.reordering .add-new-widget{opacity:.2;pointer-events:none;cursor:not-allowed}#available-menu-items .new-content-item .add-content:before,.add-new-menu-item:before,.add-new-widget:before{content:"\f132";display:inline-block;position:relative;right:-2px;top:0;font:400 20px/1 dashicons;vertical-align:middle;transition:all .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.reorder-toggle{float:left;padding:5px 8px;text-decoration:none;cursor:pointer;outline:0}.reorder,.reordering .reorder-done{display:block;padding:5px 8px}.reorder-done,.reordering .reorder{display:none}.menu-item-reorder-nav button,.widget-reorder-nav span{position:relative;overflow:hidden;float:right;display:block;width:33px;height:43px;color:#82878c;text-indent:-9999px;cursor:pointer;outline:0}.menu-item-reorder-nav button{width:30px;height:40px;background:0 0;border:none;box-shadow:none}.menu-item-reorder-nav button:before,.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}.menu-item-reorder-nav button:focus,.menu-item-reorder-nav button:hover,.widget-reorder-nav span:focus,.widget-reorder-nav span:hover{color:#191e23;background:#eee}.menus-move-down:before,.move-widget-down:before{content:"\f347"}.menus-move-up:before,.move-widget-up:before{content:"\f343"}#customize-theme-controls .first-widget .move-widget-up,#customize-theme-controls .last-widget .move-widget-down,.move-down-disabled .menus-move-down,.move-left-disabled .menus-move-left,.move-right-disabled .menus-move-right,.move-up-disabled .menus-move-up{color:#d5d5d5;background-color:#fff;cursor:default;pointer-events:none}.wp-full-overlay-main{left:auto;width:100%}.add-menu-toggle.open,.add-menu-toggle.open:hover,.adding-menu-items .add-new-menu-item,.adding-menu-items .add-new-menu-item:hover,body.adding-widget .add-new-widget,body.adding-widget .add-new-widget:hover{background:#eee;border-color:#929793;color:#32373c;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}#accordion-section-add_menu .add-new-menu-item.open:before,.adding-menu-items .add-new-menu-item:before,body.adding-widget .add-new-widget:before{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#available-menu-items,#available-widgets{position:absolute;top:0;bottom:0;right:-301px;visibility:hidden;overflow-x:hidden;overflow-y:auto;width:300px;margin:0;z-index:4;background:#eee;transition:right .18s;border-left:1px solid #ddd}#available-menu-items .customize-section-title,#available-widgets .customize-section-title{display:none}#available-widgets-list{top:60px;position:absolute;overflow:auto;bottom:0;width:100%;border-top:1px solid #ddd}.no-widgets-found #available-widgets-list{border-top:none}#available-widgets-filter{position:fixed;top:0;z-index:1;width:300px;background:#eee}#available-menu-items-search .accordion-section-title,#available-widgets-filter{padding:13px 15px;box-sizing:border-box}#available-menu-items-search input,#available-widgets-filter input{width:100%;height:32px;margin:1px 0;padding:6px 30px}#available-menu-items-search input::-ms-clear,#available-widgets-filter input::-ms-clear{display:none}#available-menu-items-search .search-icon,#available-widgets-filter .search-icon{display:block;position:absolute;top:15px;right:16px;width:30px;height:30px;line-height:28px;text-align:center;color:#72777c}#available-menu-items-search .clear-results,#available-widgets-filter .clear-results{position:absolute;top:15px;left:16px;width:30px;height:30px;padding:0;border:0;cursor:pointer;background:0 0;color:#a00;text-decoration:none;outline:0}#available-menu-items-search .clear-results,#available-menu-items-search.loading .clear-results.is-visible,#available-widgets-filter .clear-results{display:none}#available-menu-items-search .clear-results.is-visible,#available-widgets-filter .clear-results.is-visible{display:block}#available-menu-items-search .clear-results:before,#available-widgets-filter .clear-results:before{content:"\f335";font:400 20px/1 dashicons;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#available-menu-items-search .clear-results:focus,#available-menu-items-search .clear-results:hover,#available-widgets-filter .clear-results:focus,#available-widgets-filter .clear-results:hover{color:#dc3232}#available-menu-items-search .clear-results:focus,#available-widgets-filter .clear-results:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#available-menu-items-search .search-icon:after,#available-widgets-filter .search-icon:after,.themes-filter-bar .search-icon:after{content:"\f179";font:400 20px/1 dashicons;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.themes-filter-bar .search-icon{position:absolute;top:7px;right:26px;z-index:1;color:#72777c;height:30px;width:30px;line-height:2;text-align:center}.no-widgets-found-message{display:none;margin:0;padding:0 15px;line-height:inherit}.no-widgets-found .no-widgets-found-message{display:block}#available-menu-items .item-top,#available-menu-items .item-top:hover,#available-widgets .widget-top,#available-widgets .widget-top:hover{border:none;background:0 0;box-shadow:none}#available-menu-items .item-tpl,#available-widgets .widget-tpl{position:relative;padding:15px 60px 15px 15px;background:#fff;border-bottom:1px solid #ddd;border-right:4px solid #fff;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;cursor:pointer;display:none}#available-menu-items .item,#available-widgets .widget{position:static}.customize-controls-preview-toggle{display:none}@media only screen and (max-width:782px){.wp-customizer .theme:not(.active):focus .theme-actions,.wp-customizer .theme:not(.active):hover .theme-actions{display:block}.wp-customizer .theme-browser .theme.active .theme-name span{display:inline}.customize-control-header button.random .dice{margin-top:0}.customize-control-checkbox .customize-inside-control-row,.customize-control-nav_menu_auto_add .customize-inside-control-row,.customize-control-radio .customize-inside-control-row{margin-right:32px}.customize-control-checkbox input,.customize-control-nav_menu_auto_add input,.customize-control-radio input{margin-right:-32px}.customize-control input[type=radio]+label+br,.customize-control input[type=checkbox]+label+br{line-height:32px}.customize-control .date-time-fields select{height:39px}.date-time-fields .date-input.month{width:79px}.date-time-fields .date-input.day,.date-time-fields .date-input.hour,.date-time-fields .date-input.minute{width:55px}.date-time-fields .date-input.year{width:80px}.date-time-fields .date-timezone{line-height:3.2}#customize-control-changeset_preview_link a{bottom:16px}.preview-link-wrapper .customize-copy-preview-link.preview-control-element.button{bottom:10px}.media-widget-control .media-widget-buttons .button.change-media,.media-widget-control .media-widget-buttons .button.edit-media,.media-widget-control .media-widget-buttons .button.select-media{margin-top:12px}.wp-core-ui .themes-filter-bar .feature-filter-toggle{margin:3px 25px 3px 0}}@media screen and (max-width:1200px){.adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main{right:67%}}@media screen and (max-width:640px){.wp-full-overlay.collapsed #customize-controls{margin-right:0}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{bottom:0}.customize-controls-preview-toggle{display:block;position:absolute;top:0;right:48px;line-height:45px;font-size:14px;padding:0 12px;margin:0;height:45px;background:#eee;border:0;border-left:1px solid #ddd;color:#555d66;cursor:pointer;transition:color .1s ease-in-out,background .1s ease-in-out}#customize-footer-actions,.customize-controls-preview-toggle .controls,.preview-only .customize-controls-preview-toggle .preview,.preview-only .wp-full-overlay-sidebar-content{display:none}.preview-only #customize-save-button-wrapper{margin-top:-46px}.customize-controls-preview-toggle .controls:before,.customize-controls-preview-toggle .preview:before{font:400 20px/1 dashicons;content:"\f177";position:relative;top:4px;margin-left:6px}.customize-controls-preview-toggle .controls:before{content:"\f540"}.preview-only #customize-controls{height:45px}.preview-only #customize-preview,.preview-only .customize-controls-preview-toggle .controls{display:block}.wp-core-ui.wp-customizer .button{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto}#publish-settings{height:31px}#customize-control-changeset_status .customize-inside-control-row{padding-top:15px}body.adding-menu-items div#available-menu-items,body.adding-widget div#available-widgets,body.outer-section-open div#customize-sidebar-outer-content{width:100%}#available-menu-items .customize-section-title,#available-widgets .customize-section-title{display:block;margin:0}#available-menu-items .customize-section-back,#available-widgets .customize-section-back{height:69px}#available-menu-items .customize-section-title h3,#available-widgets .customize-section-title h3{font-size:20px;font-weight:200;padding:9px 14px 12px 10px;margin:0;line-height:24px;color:#555d66;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#available-menu-items .customize-section-title .customize-action,#available-widgets .customize-section-title .customize-action{font-size:13px;display:block;font-weight:400;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#available-widgets-filter{position:relative;width:100%;height:auto}#available-widgets-list{top:130px}#available-menu-items-search .clear-results,#available-menu-items-search .search-icon{top:85px}.reorder,.reordering .reorder-done{padding:8px}.wp-core-ui .themes-filter-bar .feature-filter-toggle{margin:0}.theme-browser .theme.active .theme-actions,.wp-customizer .theme-browser .theme .theme-actions{padding:9px 15px;box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}}@media screen and (max-width:600px){.theme-browser .theme.active .theme-actions,.wp-customizer .theme-browser .theme .theme-actions{padding:8px 15px;box-shadow:none}.wp-full-overlay.expanded{margin-right:0}body.adding-menu-items div#available-menu-items,body.adding-widget div#available-widgets,body.outer-section-open div#customize-sidebar-outer-content{top:46px;z-index:10}body.wp-customizer .wp-full-overlay.expanded #customize-sidebar-outer-content{right:-100%}body.wp-customizer.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content{right:0}} \ 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..b595e2a --- /dev/null +++ b/wp-admin/css/customize-controls.css @@ -0,0 +1,3032 @@ +body { + overflow: hidden; + -webkit-text-size-adjust: 100%; +} + +.customize-controls-close, +.widget-control-actions a { + text-decoration: none; +} + +#customize-controls h3 { + font-size: 14px; +} + +#customize-controls img { + max-width: 100%; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked { + background-color: rgba( 0, 0, 0, 0.7 ); + padding: 25px; +} + +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .customize-changeset-locked-message { + margin-left: auto; + margin-right: auto; + max-width: 366px; + min-height: 64px; + width: auto; + padding: 25px 25px 25px 109px; + position: relative; + background: #fff; + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + line-height: 1.5; + overflow-y: auto; + text-align: left; + top: calc( 50% - 100px ); +} + +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .currently-editing { + margin-top: 0; +} +#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .action-buttons { + margin-bottom: 0; +} + +.customize-changeset-locked-avatar { + width: 64px; + position: absolute; + left: 25px; + top: 25px; +} + +.wp-core-ui.wp-customizer .customize-changeset-locked-message a.button { + margin-right: 10px; + margin-top: 0; +} + +#customize-controls .description { + color: #555d66; +} + +#customize-save-button-wrapper { + float: right; + margin-top: 9px; +} + +body:not(.ready) #customize-save-button-wrapper .save { + visibility: hidden; +} +#customize-save-button-wrapper .save { + float: left; + border-radius: 3px; + box-shadow: none; /* @todo Adjust box shadow based on the disable states of paired button. */ + margin-top: 0; +} + +#customize-save-button-wrapper .save:focus, #publish-settings:focus { + box-shadow: 0 1px 0 #0073aa, 0 0 2px 1px #33b3db; /* This is default box shadow for focus */ +} + +#customize-save-button-wrapper .save.has-next-sibling { + border-radius: 3px 0 0 3px; +} + +#customize-sidebar-outer-content { + position: absolute; + top: 0; + bottom: 0; + left: 0; + visibility: hidden; + overflow-x: hidden; + overflow-y: auto; + width: 100%; + margin: 0; + z-index: -1; + background: #eee; + transition: left .18s; + border-right: 1px solid #ddd; + border-left: 1px solid #ddd; + height: 100%; +} + +#customize-theme-controls .control-section-outer { + display: none !important; +} + +#customize-outer-theme-controls .accordion-section-content { + padding: 12px; +} + +#customize-outer-theme-controls .accordion-section-content.open { + display: block; +} + +.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content { + visibility: visible; + left: 100%; + transition: left .18s; +} + +.customize-outer-pane-parent { + margin: 0; +} + +.outer-section-open .wp-full-overlay.expanded .wp-full-overlay-main { + left: 300px; + opacity: 0.4; +} + +.outer-section-open .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main, +.outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, +.adding-menu-items .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main, +.adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, +.adding-widget .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main, +.adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main { + left: 64%; +} + +#customize-outer-theme-controls li.notice { + padding-top: 8px; + padding-bottom: 8px; + margin-left: 0; + margin-bottom: 10px; +} + +#publish-settings { + text-indent: 0; + border-radius: 0 3px 3px 0; + padding-left: 0; + padding-right: 0; + box-shadow: none; /* @todo Adjust box shadow based on the disable states of paired button. */ + font-size: 14px; + width: 30px; + float: left; + -webkit-transform: none; + transform: none; + margin-top: 0; +} + +body:not(.ready) #publish-settings, +body.trashing #customize-save-button-wrapper .save, +body.trashing #publish-settings { + display: none; +} + +#customize-header-actions .spinner { + margin-top: 13px; + margin-right: 4px; +} + +.saving #customize-header-actions .spinner, +.trashing #customize-header-actions .spinner { + visibility: visible; +} + +#customize-header-actions { + border-bottom: 1px solid #ddd; +} + +#customize-controls .wp-full-overlay-sidebar-content { + overflow-y: auto; + overflow-x: hidden; +} + +.outer-section-open #customize-controls .wp-full-overlay-sidebar-content { + background: #eee; +} + +#customize-controls .customize-info { + border: none; + border-bottom: 1px solid #ddd; + margin-bottom: 15px; +} + +#customize-control-changeset_status .customize-inside-control-row, +#customize-control-changeset_preview_link input { + background-color: #ffffff; + border-bottom: 1px solid #ddd; + box-sizing: content-box; + width: 100%; + margin-left: -12px; + padding-left: 12px; + padding-right: 12px; +} + +#customize-control-trash_changeset { + margin-top: 20px; +} +#customize-control-trash_changeset .button-link { + position: relative; + padding-left: 24px; + display: inline-block; +} +#customize-control-trash_changeset .button-link:before { + content: "\f182"; + font: normal 22px dashicons; + text-decoration: none; + position: absolute; + left: 0; + top: -2px; +} + +#customize-controls .date-input:invalid { + border-color: #dc3232; +} + +#customize-control-changeset_status .customize-inside-control-row { + padding-top: 10px; + padding-bottom: 10px; + font-weight: 500; +} + +#customize-control-changeset_status .customize-inside-control-row:first-of-type { + border-top: 1px solid #ddd; +} + +#customize-control-changeset_status .customize-control-title { + margin-bottom: 6px; +} + +#customize-control-changeset_status input { + margin-left: 0; +} + +#customize-control-changeset_preview_link { + position: relative; + display: block; +} + +.preview-link-wrapper .customize-copy-preview-link.preview-control-element.button { + margin: 0; + position: absolute; + bottom: 9px; + right: 0; +} + +.preview-link-wrapper { + position: relative; +} + +.customize-copy-preview-link:before, +.customize-copy-preview-link:after { + content: ""; + height: 28px; + position: absolute; + background: #ffffff; + top: -1px; +} + +.customize-copy-preview-link:before { + left: -10px; + width: 9px; + opacity: 0.75; +} + +.customize-copy-preview-link:after { + left: -5px; + width: 4px; + opacity: 0.8; +} + +#customize-control-changeset_preview_link input { + line-height: 2.5; + border-top: 1px solid #ddd; + border-left: none; + border-right: none; + text-indent: -999px; + color: #fff; +} + +#customize-control-changeset_preview_link label { + position: relative; + display: block; +} + +#customize-control-changeset_preview_link a { + display: inline-block; + position: absolute; + white-space: nowrap; + overflow: hidden; + width: 90%; + bottom: 14px; + font-size: 14px; + text-decoration: none; +} + +#customize-control-changeset_preview_link a.disabled, +#customize-control-changeset_preview_link a.disabled:active, +#customize-control-changeset_preview_link a.disabled:focus, +#customize-control-changeset_preview_link a.disabled:visited { + color: black; + opacity: 0.4; + cursor: default; + outline: none; + box-shadow: none; +} + +#sub-accordion-section-publish_settings .customize-section-description-container { + display: none; +} + +#customize-controls .customize-info.section-meta { + margin-bottom: 15px; +} + +.customize-control-date_time .customize-control-description + .date-time-fields.includes-time { + margin-top: 10px; +} + +.customize-control.customize-control-date_time .date-time-fields .date-input.day { + margin-right: 0; +} + +.date-time-fields .date-input.month { + width: auto; + margin: 0; +} + +.date-time-fields .date-input.day, +.date-time-fields .date-input.hour, +.date-time-fields .date-input.minute { + width: 46px; +} + +.date-time-fields .date-input.year { + width: 60px; +} + +.date-time-fields .date-input.meridian { + width: auto; + margin: 0; +} + +.date-time-fields .time-row { + margin-top: 12px; +} + +.date-time-fields .date-timezone { + line-height: 2.2; + text-decoration: none; +} + +#customize-control-changeset_preview_link { + margin-top: 6px; +} + +#customize-control-changeset_status { + margin-bottom: 0; + padding-bottom: 0; +} + +#customize-control-changeset_scheduled_date { + box-sizing: content-box; + width: 100%; + margin-left: -12px; + padding: 12px; + background: #ffffff; + border-bottom: 1px solid #ddd; + margin-bottom: 0; +} + +#customize-control-changeset_scheduled_date .customize-control-description { + font-style: normal; +} + +#customize-controls .customize-info.is-in-view, +#customize-controls .customize-section-title.is-in-view { + position: absolute; + z-index: 9; + width: 100%; + box-shadow: 0 1px 0 rgba(0, 0, 0, .1); +} + +#customize-controls .customize-section-title.is-in-view { + margin-top: 0; +} + +#customize-controls .customize-info.is-in-view + .accordion-section { + margin-top: 15px; +} + +#customize-controls .customize-info.is-sticky, +#customize-controls .customize-section-title.is-sticky { + position: fixed; + top: 46px; +} + +#customize-controls .customize-info .accordion-section-title { + background: #fff; + color: #555d66; + border-left: none; + border-right: none; + border-bottom: none; + cursor: default; +} + +#customize-controls .customize-info.open .accordion-section-title:after, +#customize-controls .customize-info .accordion-section-title:hover:after, +#customize-controls .customize-info .accordion-section-title:focus:after { + color: #32373c; +} + +#customize-controls .customize-info .accordion-section-title:after { + display: none; +} + +#customize-controls .customize-info .preview-notice { + font-size: 13px; + line-height: 24px; +} + +#customize-controls .customize-pane-child .customize-section-title h3, +#customize-controls .customize-pane-child h3.customize-section-title, +#customize-outer-theme-controls .customize-pane-child .customize-section-title h3, +#customize-outer-theme-controls .customize-pane-child h3.customize-section-title, +#customize-controls .customize-info .panel-title { + font-size: 20px; + font-weight: 200; + line-height: 26px; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#customize-controls .customize-section-title span.customize-action { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#customize-controls .customize-info .customize-help-toggle { + position: absolute; + top: 4px; + right: 1px; + padding: 20px 20px 10px 10px; + width: 20px; + height: 20px; + cursor: pointer; + box-shadow: none; + -webkit-appearance: none; + background: transparent; + color: #555d66; + border: none; +} + +#customize-controls .customize-info .customize-help-toggle:before { + position: absolute; + top: 5px; + left: 6px; +} + +#customize-controls .customize-info.open .customize-help-toggle, +#customize-controls .customize-info .customize-help-toggle:focus, +#customize-controls .customize-info .customize-help-toggle:hover { + color: #0073aa; +} + +#customize-controls .customize-info .customize-panel-description, +#customize-controls .customize-info .customize-section-description, +#customize-outer-theme-controls .customize-info .customize-section-description, +#customize-controls .no-widget-areas-rendered-notice { + color: #555d66; + display: none; + background: #fff; + padding: 12px 15px; + border-top: 1px solid #ddd; +} + +#customize-controls .customize-info .customize-panel-description.open + .no-widget-areas-rendered-notice { + border-top: none; +} +.no-widget-areas-rendered-notice { + font-style: italic; +} +.no-widget-areas-rendered-notice p:first-child { + margin-top: 0; +} +.no-widget-areas-rendered-notice p:last-child { + margin-bottom: 0; +} + +#customize-controls .customize-info .customize-section-description { + margin-bottom: 15px; +} + +#customize-controls .customize-info .customize-panel-description p:first-child, +#customize-controls .customize-info .customize-section-description p:first-child { + margin-top: 0; +} + +#customize-controls .customize-info .customize-panel-description p:last-child, +#customize-controls .customize-info .customize-section-description p:last-child { + margin-bottom: 0; +} + +#customize-controls .current-panel .control-section > h3.accordion-section-title { + padding-right: 30px; +} + +#customize-theme-controls .control-section, +#customize-outer-theme-controls .control-section { + border: none; +} + +#customize-theme-controls .accordion-section-title, +#customize-outer-theme-controls .accordion-section-title { + color: #555d66; + background-color: #fff; + border-bottom: 1px solid #ddd; + border-left: 4px solid #fff; + transition: .15s color ease-in-out, + .15s background-color ease-in-out, + .15s border-color ease-in-out; +} + +#customize-controls #customize-theme-controls .customize-themes-panel .accordion-section-title { + color: #555; + background-color: #fff; + border-left: 4px solid #fff; +} + +#customize-theme-controls .accordion-section-title:after, +#customize-outer-theme-controls .accordion-section-title:after { + content: "\f345"; + color: #a0a5aa; +} + +#customize-theme-controls .accordion-section-content, +#customize-outer-theme-controls .accordion-section-content { + color: #555d66; + background: transparent; +} + +#customize-controls .control-section:hover > .accordion-section-title, +#customize-controls .control-section .accordion-section-title:hover, +#customize-controls .control-section.open .accordion-section-title, +#customize-controls .control-section .accordion-section-title:focus { + color: #0073aa; + background: #f3f3f5; + border-left-color: #0073aa; +} + +#accordion-section-themes + .control-section { + border-top: 1px solid #ddd; +} + +.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: #f3f3f5; +} + +#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, +#customize-outer-theme-controls .control-section:hover > .accordion-section-title:after, +#customize-outer-theme-controls .control-section .accordion-section-title:hover:after, +#customize-outer-theme-controls .control-section.open .accordion-section-title:after, +#customize-outer-theme-controls .control-section .accordion-section-title:focus:after { + color: #0073aa; +} + +#customize-theme-controls .control-section.open { + border-bottom: 1px solid #eee; +} + +#customize-theme-controls .control-section.open .accordion-section-title, +#customize-outer-theme-controls .control-section.open .accordion-section-title { + border-bottom-color: #eee !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 .control-panel-content:not(.control-panel-nav_menus) .control-section:nth-child(2), +#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu, +#customize-theme-controls .control-section-nav_menu_locations .accordion-section-title { + border-top: 1px solid #ddd; +} + +#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu + .control-section-nav_menu { + border-top: none; +} + +#customize-theme-controls > ul { + margin: 0; +} + +#customize-theme-controls .accordion-section-content { + position: absolute; + top: 0; + left: 100%; + width: 100%; + margin: 0; + padding: 12px; + box-sizing: border-box; +} + +#customize-info, +#customize-theme-controls .customize-pane-parent, +#customize-theme-controls .customize-pane-child { + overflow: visible; + width: 100%; + margin: 0; + padding: 0; + box-sizing: border-box; + transition: 0.18s -webkit-transform cubic-bezier(0.645, 0.045, 0.355, 1); + transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1); + transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1), 0.18s -webkit-transform cubic-bezier(0.645, 0.045, 0.355, 1); /* easeInOutCubic */ +} + +#customize-theme-controls .customize-pane-child.skip-transition { + transition: none; +} + +#customize-info, +#customize-theme-controls .customize-pane-parent { + position: relative; + visibility: visible; + height: auto; + max-height: none; + overflow: auto; + -webkit-transform: none; + transform: none; +} + +#customize-theme-controls .customize-pane-child { + position: absolute; + top: 0; + left: 0; + visibility: hidden; + height: 0; + max-height: none; + overflow: hidden; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +#customize-theme-controls .customize-pane-child.open, +#customize-theme-controls .customize-pane-child.current-panel { + -webkit-transform: none; + transform: none; +} + +.section-open #customize-theme-controls .customize-pane-parent, +.in-sub-panel #customize-theme-controls .customize-pane-parent, +.section-open #customize-info, +.in-sub-panel #customize-info, +.in-sub-panel.section-open #customize-theme-controls .customize-pane-child.current-panel { + visibility: hidden; + height: 0; + overflow: hidden; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.section-open #customize-theme-controls .customize-pane-parent.busy, +.in-sub-panel #customize-theme-controls .customize-pane-parent.busy, +.section-open #customize-info.busy, +.in-sub-panel #customize-info.busy, +.busy.section-open.in-sub-panel #customize-theme-controls .customize-pane-child.current-panel, +#customize-theme-controls .customize-pane-child.open, +#customize-theme-controls .customize-pane-child.current-panel, +#customize-theme-controls .customize-pane-child.busy { + visibility: visible; + height: auto; + overflow: auto; +} + +#customize-theme-controls .customize-pane-child.accordion-section-content, +#customize-theme-controls .customize-pane-child.accordion-sub-container { + display: block; + overflow-x: hidden; +} + +#customize-theme-controls .customize-pane-child.accordion-section-content { + padding: 12px; +} + +#customize-theme-controls .customize-pane-child.menu li { + position: static; +} + +.customize-section-description-container, +.control-section-nav_menu .customize-section-description-container, +.control-section-new_menu .customize-section-description-container { + margin-bottom: 15px; +} + +.control-section-nav_menu .customize-control, +.control-section-new_menu .customize-control { + /* Override default `margin-bottom` for `.customize-control` */ + margin-bottom: 0; +} + +.customize-section-title { + margin: -12px -12px 0 -12px; + border-bottom: 1px solid #ddd; + background: #fff; +} + +div.customize-section-description { + margin-top: 22px; +} + +.customize-info div.customize-section-description { + margin-top: 0; +} + +div.customize-section-description p:first-child { + margin-top: 0; +} + +div.customize-section-description p:last-child { + margin-bottom: 0; +} + +#customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child { + border-bottom: 1px solid #ddd; + padding: 12px 12px 12px 12px; +} + +.ios #customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child { + padding: 12px 12px 13px 12px; +} + +.customize-section-title h3, +h3.customize-section-title { + padding: 10px 10px 12px 14px; + margin: 0; + line-height: 21px; + color: #555d66; +} + +.accordion-sub-container.control-panel-content { + display: none; + position: absolute; + top: 0; + width: 100%; +} + +.accordion-sub-container.control-panel-content.busy { + display: block; +} + +.current-panel .accordion-sub-container.control-panel-content { + width: 100%; +} + +.customize-controls-close { + display: block; + position: absolute; + top: 0; + left: 0; + width: 45px; + height: 41px; + padding: 0 2px 0 0; + background: #eee; + border: none; + border-top: 4px solid #eee; + border-right: 1px solid #ddd; + color: #444; + text-align: left; + cursor: pointer; + transition: color .15s ease-in-out, + border-color .15s ease-in-out, + background .15s ease-in-out; + box-sizing: content-box; +} + +.customize-panel-back, +.customize-section-back { + display: block; + float: left; + width: 48px; + height: 71px; + padding: 0 24px 0 0; + margin: 0; + background: #fff; + border: none; + border-right: 1px solid #ddd; + border-left: 4px solid #fff; + box-shadow: none; + cursor: pointer; + transition: color .15s ease-in-out, + border-color .15s ease-in-out, + background .15s ease-in-out; +} + +.customize-section-back { + height: 74px; +} + +.ios .customize-panel-back { + display: none; +} + +.ios .expanded.in-sub-panel .customize-panel-back { + display: block; +} + +#customize-controls .panel-meta.customize-info .accordion-section-title { + margin-left: 48px; + border-left: none; +} + +#customize-controls .panel-meta.customize-info .accordion-section-title:hover, +#customize-controls .cannot-expand:hover .accordion-section-title { + background: #fff; + color: #555d66; + border-left-color: #fff; +} + +.customize-controls-close:focus, +.customize-controls-close:hover, +.customize-controls-preview-toggle:focus, +.customize-controls-preview-toggle:hover { + background: #fff; + color: #0073aa; + border-top-color: #0073aa; + outline: none; + box-shadow: none; +} + + +.customize-panel-back:hover, +.customize-panel-back:focus, +.customize-section-back:hover, +.customize-section-back:focus { + color: #0073aa; + background: #f3f3f5; + border-left-color: #0073aa; + outline: none; + box-shadow: none; +} + +.customize-controls-close:before { + font: normal 22px/45px dashicons; + content: "\f335"; + position: relative; + top: -3px; + left: 13px; +} + +.customize-panel-back:before, +.customize-section-back:before { + font: normal 20px/72px dashicons; + content: "\f341"; + position: relative; + left: 9px; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header { + background-color: #eee; + transition: padding ease-in-out .18s; +} + +.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header { + padding-left: 62px; +} + +p.customize-section-description { + font-style: normal; + margin-top: 22px; + margin-bottom: 0; +} + +.customize-section-description ul { + margin-left: 1em; +} + +.customize-section-description ul > li { + list-style: disc; +} + +.section-description-buttons { + text-align: right; +} + +.section-description-buttons button.button-link { + color: #0073aa; + text-decoration: underline; +} + +.customize-control { + width: 100%; + float: left; + clear: both; + margin-bottom: 12px; +} + +.customize-control select, +.customize-control input[type="radio"], +.customize-control input[type="checkbox"] { + line-height: 28px; +} + +.customize-control input[type="text"], +.customize-control input[type="password"], +.customize-control input[type="email"], +.customize-control input[type="number"], +.customize-control input[type="search"], +.customize-control input[type="tel"], +.customize-control input[type="url"] { + width: 100%; + line-height: 18px; + margin: 0; +} + +.customize-control-hidden { + margin: 0; +} + +.customize-control-textarea textarea { + width: 100%; + resize: vertical; +} + +.customize-control select { + 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: 4px; +} + +.customize-control-description { + display: block; + font-style: italic; + line-height: 18px; + margin-top: 0; + margin-bottom: 5px; +} + +.customize-section-description a.external-link:after { + font: 16px/11px dashicons; + content: "\f310"; + top: 3px; + position: relative; + padding-left: 3px; + display: inline-block; + text-decoration: none; +} + +.customize-control-color .color-picker, +.customize-control-upload div { + line-height: 28px; +} + +.customize-control .customize-inside-control-row { + line-height: 20px; + display: block; + margin-left: 24px; + padding-top: 6px; + padding-bottom: 6px; +} + +.customize-control-radio input, +.customize-control-checkbox input, +.customize-control-nav_menu_auto_add input { + margin-right: 4px; + margin-left: -24px; +} + +.customize-control-radio { + padding: 5px 0 10px; +} + +.customize-control-radio .customize-control-title { + margin-bottom: 0; + line-height: 22px; +} + +.customize-control-radio .customize-control-title + .customize-control-description { + margin-top: 7px; +} + +.customize-control-radio label, +.customize-control-checkbox label { + vertical-align: top; +} + +.customize-control .attachment-thumb.type-icon { + float: left; + margin: 10px; + width: auto; +} + +.customize-control .attachment-title { + font-weight: 600; + margin: 0; + padding: 5px 10px; +} + +.customize-control .attachment-meta { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + padding: 0 10px; +} + +.customize-control .attachment-meta-title { + padding-top: 7px; +} + +/* Remove descender space. */ +.customize-control .thumbnail-image, +.customize-control-header .current, +.customize-control .wp-media-wrapper.wp-video { + line-height: 0; +} + +/* Remove descender space. */ +.customize-control-site_icon .favicon-preview .browser-preview { + vertical-align: top; +} + +.customize-control .thumbnail-image img { + cursor: pointer; +} + +#customize-controls .thumbnail-audio .thumbnail { + max-width: 64px; + max-height: 64px; + margin: 10px; + float: left; +} + +#available-menu-items .accordion-section-content .new-content-item, +.customize-control-dropdown-pages .new-content-item { + width: calc(100% - 30px); + padding: 8px 15px; + position: absolute; + bottom: 0; + z-index: 10; + background: #eee; + display: -webkit-box; + display: flex; +} + +.customize-control-dropdown-pages .new-content-item { + width: 100%; + padding: 5px 0 5px 1px; + position: relative; +} + +#available-menu-items .new-content-item .create-item-input, +.customize-control-dropdown-pages .new-content-item .create-item-input { + -webkit-box-flex: 10; + flex-grow: 10; +} + +#available-menu-items .new-content-item .add-content, +.customize-control-dropdown-pages .new-content-item .add-content { + margin: 2px 0 2px 6px; + -webkit-box-flex: 10; + flex-grow: 1; +} + +.customize-control-dropdown-pages .new-content-item .create-item-input.invalid { + border: 1px solid #dc3232; +} + +.customize-control-dropdown-pages .add-new-toggle { + margin-left: 1px; + font-weight: 600; + line-height: 28px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; + position: absolute; +} +#customize-preview iframe + iframe { + visibility: hidden; +} + +.wp-full-overlay-sidebar { + background: #eee; + border-right: 1px solid #ddd; +} + + +/** + * Notifications + */ + +#customize-controls .customize-control-notifications-container { /* Scoped to #customize-controls for specificity over notification styles in common.css. */ + margin: 4px 0 8px 0; + padding: 0; + cursor: default; +} + +#customize-controls .customize-control-widget_form.has-error .widget .widget-top, +.customize-control-nav_menu_item.has-error .menu-item-bar .menu-item-handle { + box-shadow: inset 0 0 0 2px #dc3232; + transition: .15s box-shadow linear; +} + +#customize-controls .customize-control-notifications-container li.notice { + list-style: none; + margin: 0 0 6px 0; + padding: 9px 14px; + overflow: hidden; +} +#customize-controls .customize-control-notifications-container .notice.is-dismissible { + padding-right: 38px; +} + +.customize-control-notifications-container li.notice:last-child { + margin-bottom: 0; +} + +#customize-controls .customize-control-nav_menu_item .customize-control-notifications-container { + margin-top: 0; +} + +#customize-controls .customize-control-widget_form .customize-control-notifications-container { + margin-top: 8px; +} + +.customize-control-text.has-error input { + outline: 2px solid #dc3232; +} + +#customize-controls #customize-notifications-area { + position: absolute; + top: 46px; + width: 100%; + border-bottom: 1px solid #ddd; + display: block; + padding: 0; + margin: 0; +} + +.wp-full-overlay.collapsed #customize-controls #customize-notifications-area { + display: none !important; +} + +#customize-controls #customize-notifications-area:not(.has-overlay-notifications), +#customize-controls .customize-section-title > .customize-control-notifications-container:not(.has-overlay-notifications), +#customize-controls .panel-meta > .customize-control-notifications-container:not(.has-overlay-notifications) { + max-height: 210px; + overflow-x: hidden; + overflow-y: auto; +} + +#customize-controls #customize-notifications-area > ul, +#customize-controls #customize-notifications-area .notice, +#customize-controls .panel-meta > .customize-control-notifications-container, +#customize-controls .panel-meta > .customize-control-notifications-container .notice, +#customize-controls .customize-section-title > .customize-control-notifications-container, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice { + margin: 0; +} +#customize-controls .panel-meta > .customize-control-notifications-container, +#customize-controls .customize-section-title > .customize-control-notifications-container { + border-top: 1px solid #ddd; +} +#customize-controls #customize-notifications-area .notice, +#customize-controls .panel-meta > .customize-control-notifications-container .notice, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice { + padding: 9px 14px; +} +#customize-controls #customize-notifications-area .notice.is-dismissible, +#customize-controls .panel-meta > .customize-control-notifications-container .notice.is-dismissible, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice.is-dismissible { + padding-right: 38px; +} +#customize-controls #customize-notifications-area .notice + .notice, +#customize-controls .panel-meta > .customize-control-notifications-container .notice + .notice, +#customize-controls .customize-section-title > .customize-control-notifications-container .notice + .notice { + margin-top: 1px; +} + +@-webkit-keyframes customize-fade-in { + 0% { opacity: 0; } + 100% { opacity: 1; } +} + +@keyframes customize-fade-in { + 0% { opacity: 0; } + 100% { opacity: 1; } +} + +#customize-controls .notice.notification-overlay, +#customize-controls #customize-notifications-area .notice.notification-overlay { + margin: 0; + border-left: 0; /* @todo Appropriate styles could be added for notice-error, notice-warning, notice-success, etc */ +} + +#customize-controls .customize-control-notifications-container.has-overlay-notifications { + -webkit-animation: customize-fade-in 0.5s; + animation: customize-fade-in 0.5s; + z-index: 30; +} + +/* Note: Styles for this are also defined in themes.css */ +#customize-controls #customize-notifications-area .notice.notification-overlay .notification-message { + clear: both; + color: #191e23; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 2em 0; + text-align: center; + width: 100%; + display: block; + top: 50%; + position: relative; +} + +/* Style for custom settings */ + +/** + * Static front page + */ + +#customize-control-show_on_front.has-error { + margin-bottom: 0; +} +#customize-control-show_on_front.has-error .customize-control-notifications-container { + margin-top: 12px; +} + +/** + * 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 #eee; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* @todo maybe no more used? */ +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 20px; + background: #eee; +} + +.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: #32373c; +} + +.customize-control .dropdown-status { + color: #32373c; + background: #eee; + display: none; + max-width: 112px; +} + +.customize-control-color .dropdown { + margin-right: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #555d66; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba(0, 0, 0, 0.25); +} + +/** + * 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-controls .wp-full-overlay-sidebar-content { + -webkit-overflow-scrolling: touch; +} + +/* Media controls */ + +.customize-control .actions .button { + margin-top: 12px; +} + +.customize-control-header .actions, +.customize-control-header .uploaded { + margin-bottom: 18px; +} + +.customize-control-header .uploaded button:not(.random), +.customize-control-header .default button:not(.random) { + width: 100%; + padding: 0; + margin: 0; + background: none; + border: none; + color: inherit; + cursor: pointer; +} + +.customize-control-header button img { + display: block; +} + +.customize-control .attachment-media-view .remove-button, +.customize-control .attachment-media-view .default-button, +.customize-control .attachment-media-view .upload-button, +.customize-control-header button.new, +.customize-control-header button.remove { + width: auto; + height: auto; + white-space: normal; +} + +.customize-control .attachment-media-view .thumbnail, +.customize-control-header .current .container { + overflow: hidden; +} + +.customize-control .attachment-media-view .placeholder, +.customize-control-header .placeholder { + width: 100%; + position: relative; + text-align: center; + cursor: default; + border: 1px dashed #b4b9be; + box-sizing: border-box; + padding: 9px 0; + line-height: 20px; +} + +.customize-control-header .inner { + display: none; + position: absolute; + width: 100%; + color: #555d66; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.customize-control-header .inner, +.customize-control-header .inner .dashicons { + line-height: 20px; + top: 8px; +} + +.customize-control-header .list .inner, +.customize-control-header .list .inner .dashicons { + top: 9px; +} + +.customize-control-header .header-view { + position: relative; + width: 100%; + margin-bottom: 12px; +} + +.customize-control-header .header-view:last-child { + margin-bottom: 0px; +} + +/* Convoluted, but 'outline' support isn't good enough yet */ +.customize-control-header .header-view:after { + border: 0; +} + +.customize-control-header .header-view.selected .choice:focus { + outline: none; +} + +.customize-control-header .header-view.selected:after { + content: ''; + position: absolute; + height: auto; + top: 0; + left: 0; + bottom: 0; + right: 0; + border: 4px solid #00a0d2; + border-radius: 2px; +} + +.customize-control-header .header-view.button.selected { + border: 0; +} + +/* Header control: overlay "close" button */ + +.customize-control-header .uploaded .header-view .close { + font-size: 20px; + color: #fff; + background: #555d66; + background: rgba(0, 0, 0, 0.5); + position: absolute; + top: 10px; + left: -999px; + z-index: 1; + width: 26px; + height: 26px; + cursor: pointer; +} + +.customize-control-header .header-view:hover .close, +.customize-control-header .header-view .close:focus { + left: auto; + right: 10px; +} + +.customize-control-header .header-view .close:focus { + outline: 1px solid #5b9dd9; +} + +/* Header control: randomiz(s)er */ + +.customize-control-header .random.placeholder { + cursor: pointer; + border-radius: 2px; + height: 40px; +} + +.customize-control-header button.random { + width: 100%; + height: auto; + min-height: 40px; + white-space: normal; +} + +.customize-control-header button.random .dice { + margin-top: 4px; +} + +.customize-control-header .placeholder:hover .dice, +.customize-control-header .header-view:hover > button.random .dice { + -webkit-animation: dice-color-change 3s infinite; + animation: dice-color-change 3s infinite; +} + +.button-see-me { + -webkit-animation: bounce .7s 1; + animation: bounce .7s 1; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -12px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -6px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-1px,0); + } +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -12px, 0); + transform: translate3d(0, -12px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -6px, 0); + transform: translate3d(0, -6px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-1px,0); + transform: translate3d(0,-1px,0); + } +} + +.customize-control-header .choice { + position: relative; + display: block; + margin-bottom: 9px; +} + +.customize-control-header .choice:focus { + outline: none; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 3px 1px rgba(30, 140, 190, .8); +} + +.customize-control-header .uploaded div:last-child > .choice { + margin-bottom: 0; +} + +.customize-control .attachment-media-view .thumbnail-image img, +.customize-control-header img { + max-width: 100%; +} + +.customize-control .attachment-media-view .remove-button, +.customize-control .attachment-media-view .default-button, +.customize-control-header .remove { + margin-right: 8px; +} + +/* Background position control */ +.customize-control-background_position .background-position-control .button-group { + display: block; +} + +/** + * Code Editor Control and Custom CSS Section + * + * Modifications to the Section Container to make the textarea full-width and + * full-height, if the control is the only control in the section. + */ + +.customize-control-code_editor textarea { + width: 100%; + font-family: Consolas, Monaco, monospace; + font-size: 12px; + padding: 6px 8px; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +.customize-control-code_editor textarea, +.customize-control-code_editor .CodeMirror { + height: 14em; +} + +#customize-controls .customize-section-description-container.section-meta.customize-info { + border-bottom: none; +} + +#sub-accordion-section-custom_css .customize-control-notifications-container { + margin-bottom: 15px; +} + +#customize-control-custom_css textarea { + display: block; + height: 500px; +} + +.customize-section-description-container + #customize-control-custom_css .customize-control-title { + margin-left: 12px; +} + +.customize-section-description-container + #customize-control-custom_css:last-child textarea { + border-right: 0; + border-left: 0; + height: calc( 100vh - 185px ); + resize: none; +} + +.customize-section-description-container + #customize-control-custom_css:last-child { + margin-left: -12px; + width: 299px; + width: calc( 100% + 24px ); + margin-bottom: -12px; +} + +.customize-section-description-container + #customize-control-custom_css:last-child .CodeMirror { + height: calc( 100vh - 185px ); +} + +.CodeMirror-lint-tooltip, +.CodeMirror-hints { + z-index: 500000 !important; +} + +.customize-section-description-container + #customize-control-custom_css:last-child .customize-control-notifications-container { + margin-left: 12px; + margin-right: 12px; +} + +.theme-browser .theme.active .theme-actions, +.wp-customizer .theme-browser .theme .theme-actions { + padding: 10px 15px; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); +} + +@media screen and ( max-width: 640px ) { + .customize-section-description-container + #customize-control-custom_css:last-child { + margin-right: 0; + } + + .customize-section-description-container + #customize-control-custom_css:last-child textarea { + height: calc( 100vh - 140px ); + } +} + +/** + * Themes + */ + +#customize-theme-controls .control-panel-themes { + border-bottom: none; +} + +#customize-theme-controls .control-panel-themes > .accordion-section-title:hover, /* Not a focusable element. */ +#customize-theme-controls .control-panel-themes > .accordion-section-title { + cursor: default; + background: #fff; + color: #555d66; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + border-left: none; + border-right: none; + margin: 0 0 15px 0; + padding-right: 100px; /* Space for the button */ +} + +#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child:hover, /* Not a focusable element. */ +#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child { + border-top: 0; +} + +#customize-theme-controls .control-section-themes > .accordion-section-title:hover, /* Not a focusable element. */ +#customize-theme-controls .control-section-themes > .accordion-section-title { + margin: 0 0 15px; +} + +#customize-controls .customize-themes-panel .accordion-section-title:hover, +#customize-controls .customize-themes-panel .accordion-section-title { + margin: 15px -8px; +} + +#customize-controls .control-section-themes .accordion-section-title, +#customize-controls .customize-themes-panel .accordion-section-title { + padding-right: 100px; /* Space for the button */ +} + +.control-panel-themes .accordion-section-title span.customize-action, +#customize-controls .customize-section-title span.customize-action, +#customize-controls .control-section-themes .accordion-section-title span.customize-action, +#customize-controls .customize-section-title span.customize-action { + font-size: 13px; + display: block; + font-weight: 400; +} + +#customize-theme-controls .control-panel-themes .accordion-section-title .change-theme { + position: absolute; + right: 10px; + top: 50%; + margin-top: -14px; + font-weight: 400; +} + +#customize-theme-controls .control-panel-themes > .accordion-section-title:after { + display: none; +} + +.control-panel-themes .customize-themes-full-container { + position: fixed; + top: 0; + left: 0; + transition: .18s left ease-in-out; + margin: 0 0 0 300px; + padding: 71px 0 25px; + overflow-y: scroll; + width: calc(100% - 300px); + height: calc(100% - 96px); + background: #eee; + z-index: 20; +} + +@media screen and (min-width: 1670px) { + .control-panel-themes .customize-themes-full-container { + width: 82%; + right: 0; + left: initial; + } +} + +.modal-open .control-panel-themes .customize-themes-full-container { + overflow-y: visible; +} + +/* Animations for opening the themes panel */ +#customize-save-button-wrapper, +#customize-header-actions .spinner, +#customize-header-actions .customize-controls-preview-toggle { + transition: .18s margin ease-in-out; +} + +#customize-footer-actions, +#customize-footer-actions .collapse-sidebar { + bottom: 0; + transition: .18s bottom ease-in-out; +} + +.in-themes-panel:not(.animating) #customize-header-actions .spinner, +.in-themes-panel:not(.animating) #customize-header-actions .customize-controls-preview-toggle, +.in-themes-panel:not(.animating) #customize-preview, +.in-themes-panel:not(.animating) #customize-footer-actions { + visibility: hidden; +} + +.wp-full-overlay.in-themes-panel { + background: #eee; /* Prevents a black flash when fading in the panel */ +} + +.in-themes-panel #customize-save-button-wrapper, +.in-themes-panel #customize-header-actions .spinner, +.in-themes-panel #customize-header-actions .customize-controls-preview-toggle { + margin-top: -46px; /* Height of header actions bar */ +} + +.in-themes-panel #customize-footer-actions, +.in-themes-panel #customize-footer-actions .collapse-sidebar { + bottom: -45px; +} + +/* Don't show the theme count while the panel opens, as it's in the wrong place during the animation */ +.in-themes-panel.animating .control-panel-themes .filter-themes-count { + display: none; +} + +.in-themes-panel.wp-full-overlay .wp-full-overlay-sidebar-content { + bottom: 0; +} + +.themes-filter-bar .feature-filter-toggle { + float: right; + margin: 3px 0 3px 25px; +} + +.themes-filter-bar .feature-filter-toggle:before { + content: "\f111"; + margin: 0 5px 0 0; + font: normal 16px/1 dashicons; + vertical-align: text-bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.themes-filter-bar .feature-filter-toggle.open { + background: #eee; + border-color: #999; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + -webkit-transform: translateY(1px); + transform: translateY(1px); +} + +.themes-filter-bar .feature-filter-toggle .filter-count-filters { + display: none; +} + +.filter-drawer { + box-sizing: border-box; + width: 100%; + position: absolute; + top: 46px; + left: 0; + padding: 25px 0 25px 25px; + border-top: 0; + margin: 0; + background: #eee; + border-bottom: 1px solid #ddd; +} + +.filter-drawer .filter-group { + margin: 0 25px 0 0; + width: calc( (100% - 75px) / 3); + min-width: 200px; + max-width: 320px; +} + +/* Adds a delay before fading in to avoid it "jumping" */ +@-webkit-keyframes themes-fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes themes-fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.control-panel-themes .customize-themes-full-container.animate { + -webkit-animation: .6s themes-fade-in 1; + animation: .6s themes-fade-in 1; +} + +.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count { + -webkit-animation: .6s themes-fade-in 1; + animation: .6s themes-fade-in 1; +} + +.control-panel-themes .filter-themes-count { + position: relative; + float: right; + line-height: 34px; +} + +.control-panel-themes .filter-themes-count .themes-displayed { + font-weight: 600; + color: #555d66; +} + +.customize-themes-notifications { + margin: 0; +} + +.control-panel-themes .customize-themes-notifications .notice { + margin: 0 0 25px 0; +} + +.customize-themes-full-container .customize-themes-section { + display: none !important; /* There is unknown JS that perpetually tries to show all theme sections when more items are added. */ + overflow: hidden; +} + +.customize-themes-full-container .customize-themes-section.current-section { + display: list-item !important; /* There is unknown JS that perpetually tries to show all theme sections when more items are added. */ +} + +.control-section .customize-section-text-before { + padding: 0 0 8px 15px; + margin: 15px 0 0 0; + line-height: 16px; + border-bottom: 1px solid #ddd; + color: #555d66; +} + +.control-panel-themes .customize-themes-section-title { + width: 100%; + background: #fff; + box-shadow: none; + outline: none; + border-top: none; + border-bottom: 1px solid #ddd; + border-left: 4px solid #fff; + border-right: none; + cursor: pointer; + padding: 10px 15px; + position: relative; + text-align: left; + font-size: 14px; + font-weight: 600; + color: #555d66; + text-shadow: none; +} + +.control-panel-themes #accordion-section-installed_themes { + border-top: 1px solid #ddd; +} + +.control-panel-themes .theme-section { + margin: 0; + position: relative; +} + +.control-panel-themes .customize-themes-section-title:focus, +.control-panel-themes .customize-themes-section-title:hover { + border-left-color: #0073aa; + color: #0073aa; + background: #f5f5f5; +} + +.customize-themes-section-title:not(.selected):after { + content: ""; + display: block; + position: absolute; + top: 9px; + right: 15px; + width: 18px; + height: 18px; + border-radius: 100%; + border: 1px solid #ccc; + background: #fff; +} + +.control-panel-themes .theme-section .customize-themes-section-title.selected:after { + content: "\f147"; + font: 16px/1 dashicons; + box-sizing: border-box; + width: 20px; + height: 20px; + padding: 3px 3px 1px 1px; /* Re-align the icon to the smaller grid */ + border-radius: 100%; + position: absolute; + top: 9px; + right: 15px; + background: #0073aa; + color: #fff; +} + +.control-panel-themes .customize-themes-section-title.selected { + color: #0073aa; +} + +#customize-theme-controls .themes.accordion-section-content { + position: relative; + left: 0; + padding: 0; + width: 100%; +} + +.loading .customize-themes-section .spinner { + display: block; + visibility: visible; + position: relative; + clear: both; + width: 20px; + height: 20px; + left: calc(50% - 10px); + float: none; + margin-top: 50px; +} + +.customize-themes-section .no-themes, +.customize-themes-section .no-themes-local { + display: none; +} + +.themes-section-installed_themes .theme .notice-success:not(.updated-message) { + display: none; /* Hide "installed" notice on installed themes tab. */ +} + +.customize-control-theme .theme { + width: 100%; + margin: 0; + border: 1px solid #ddd; + background: #fff; +} + +.customize-control-theme .theme .theme-name, .customize-control-theme .theme .theme-actions { + background: #fff; + border: none; +} + +.customize-control.customize-control-theme { /* override most properties on .customize-control */ + box-sizing: border-box; + width: 25%; + max-width: 600px; /* Max. screenshot size / 2 */ + margin: 0 25px 25px 0; + padding: 0; + clear: none; +} + +/* 5 columns above 2100px */ +@media screen and (min-width: 2101px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 125px ) / 5 - 1px ); /* 1px offset accounts for browser rounding, typical all grids */ + } +} + +/* 4 columns up to 2100px */ +@media screen and (min-width: 1601px) and (max-width: 2100px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 100px ) / 4 - 1px ); + } +} + +/* 3 columns up to 1600px */ +@media screen and (min-width: 1201px) and (max-width: 1600px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 75px ) / 3 - 1px ); + } +} + +/* 2 columns up to 1200px */ +@media screen and (min-width: 851px) and (max-width: 1200px) { + .customize-control.customize-control-theme { + width: calc( ( 100% - 50px ) / 2 - 1px ); + + } +} + +/* 1 column up to 850 px */ +@media screen and (max-width: 850px) { + .customize-control.customize-control-theme { + width: 100%; + } +} + +.wp-customizer .theme-browser .themes { + padding: 0 0 25px 25px; + transition: .18s margin-top linear; +} + +.wp-customizer .theme-browser .theme .theme-actions { + opacity: 1; +} + +#customize-controls h3.theme-name { + font-size: 15px; +} + +#customize-controls .theme-overlay .theme-name { + font-size: 32px; +} + +.customize-preview-header.themes-filter-bar { + position: fixed; + top: 0; + left: 300px; + width: calc(100% - 300px); + height: 46px; + background: #eee; + z-index: 10; + padding: 6px 25px; + box-sizing: border-box; + border-bottom: 1px solid #ddd; +} + +@media screen and (min-width: 1670px) { + .customize-preview-header.themes-filter-bar { + width: 82%; + right: 0; + left: initial; + } +} + +.themes-filter-bar .themes-filter-container { + margin: 0; + padding: 0; +} + +.themes-filter-bar .wp-filter-search { + line-height: 25px; + padding: 6px 10px 6px 30px; + max-width: 100%; + width: 40%; + min-width: 300px; + position: absolute; + top: 6px; + left: 25px; + height: 32px; + margin: 1px 0; +} + +/* Unstick the filter bar on short windows/screens. This breakpoint is based on the + current length of .org feature filters assuming translations do not wrap lines. */ +@media screen and (max-height:540px), screen and (max-width:1018px) { + .customize-preview-header.themes-filter-bar { + position: relative; + left: 0; + width: 100%; + margin: 0 0 25px 0; + } + .filter-drawer { + top: 46px; + } + .wp-customizer .theme-browser .themes { + padding: 0 0 25px 25px; + overflow: hidden; + } + + .control-panel-themes .customize-themes-full-container { + margin-top: 0; + padding: 0; + height: 100%; + width: calc(100% - 300px); + } +} + +@media screen and (max-width:1018px) { + .filter-drawer .filter-group { + width: calc( (100% - 50px) / 2); + } +} + +@media screen and (max-width:900px) { + .customize-preview-header.themes-filter-bar { + height: 86px; + padding-top: 46px; + } + + .themes-filter-bar .wp-filter-search { + width: calc(100% - 50px); + margin: 0; + min-width: 200px; + } + + .filter-drawer { + top: 86px; + } + + .control-panel-themes .filter-themes-count { + float: left; + } +} + +@media screen and (max-width:792px) { + .filter-drawer .filter-group { + width: calc( 100% - 25px); + } +} + +.control-panel-themes .customize-themes-mobile-back { + display: none; +} + +/* Mobile - toggle between themes and filters */ +@media screen and (max-width:600px) { + + .filter-drawer { + top: 132px; + } + + .wp-full-overlay.showing-themes .control-panel-themes .filter-themes-count .filter-themes { + display: block; + float: right; + } + + .control-panel-themes .customize-themes-full-container { + width: 100%; + margin: 0; + padding-top: 46px; + height: calc(100% - 46px); + z-index: 1; + display: none; + } + + .showing-themes .control-panel-themes .customize-themes-full-container { + display: block; + } + + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back { + display: block; + position: fixed; + top: 0; + left: 0; + background: #eee; + color: #444; + border-radius: 0; + box-shadow: none; + border: none; + height: 46px; + width: 100%; + z-index: 10; + text-align: left; + text-shadow: none; + border-bottom: 1px solid #ddd; + border-left: 4px solid transparent; + margin: 0; + padding: 0; + font-size: 0; + overflow: hidden; + } + + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:before { + left: 0; + top: 0; + height: 46px; + width: 26px; + display: block; + line-height: 46px; + padding: 0 8px 0 8px; + border-right: 1px solid #ddd; + } + + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:hover, + .wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:focus { + color: #0073aa; + background: #f3f3f5; + border-left-color: #0073aa; + outline: none; + box-shadow: none; + } + + .showing-themes #customize-header-actions { + display: none; + } + + #customize-controls { + width: 100%; + } +} + +/* Details View */ +.wp-customizer .theme-overlay { + display: none; +} + +.wp-customizer.modal-open .theme-overlay { + position: fixed; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: 109; +} + +/* Avoid a z-index war by resetting elements that should be under the overlay. + This is likely required because of the way that sections and panels are positioned. */ +.wp-customizer.modal-open #customize-header-actions, +.wp-customizer.modal-open .control-panel-themes .filter-themes-count, +.wp-customizer.modal-open .control-panel-themes .customize-themes-section-title.selected:after { + z-index: -1; +} + +.wp-full-overlay.in-themes-panel.themes-panel-expanded #customize-controls .wp-full-overlay-sidebar-content { + overflow: visible; +} + +.wp-customizer .theme-overlay .theme-backdrop { + background: rgba( 238, 238, 238, 0.75 ); + position: fixed; + z-index: 110; +} + +.wp-customizer .theme-overlay .star-rating { + float: left; + margin-right: 8px; +} + +.wp-customizer .theme-rating .num-ratings { + line-height: 20px; +} + +.wp-customizer .theme-overlay .theme-wrap { + left: 90px; + right: 90px; + top: 45px; + bottom: 45px; + z-index: 120; +} + +.wp-customizer .theme-overlay .theme-actions { + text-align: right; /* Because there're only one or two actions, match the UI pattern of media modals and right-align the action. */ + padding: 10px 25px; + background: #eee; + border-top: 1px solid #ddd; +} + +.wp-customizer .theme-overlay .theme-actions .theme-install.preview { + margin-left: 8px; +} + +.control-panel-themes .theme-actions .delete-theme { + left: 15px; /* these override themes.css on mobile */ + right: auto; + bottom: auto; + position: absolute; +} + +.modal-open .in-themes-panel #customize-controls .wp-full-overlay-sidebar-content { + overflow: visible; /* Prevent the top-level Customizer controls from becoming visible when elements on the right of the details modal are focused. */ +} + +.wp-customizer .theme-header { + background: #eee; +} + +.wp-customizer .theme-overlay .theme-header button, +.wp-customizer .theme-overlay .theme-header .close:before { + color: #444; +} + +.wp-customizer .theme-overlay .theme-header .close:focus, +.wp-customizer .theme-overlay .theme-header .close:hover, +.wp-customizer .theme-overlay .theme-header .right:focus, +.wp-customizer .theme-overlay .theme-header .right:hover, +.wp-customizer .theme-overlay .theme-header .left:focus, +.wp-customizer .theme-overlay .theme-header .left:hover { + background: #fff; + border-bottom: 4px solid #0073aa; + color: #0073aa; +} + +.wp-customizer .theme-overlay .theme-header .close:focus:before, +.wp-customizer .theme-overlay .theme-header .close:hover:before { + color: #0073aa; +} + +.wp-customizer .theme-overlay .theme-header button.disabled, +.wp-customizer .theme-overlay .theme-header button.disabled:hover, +.wp-customizer .theme-overlay .theme-header button.disabled:focus { + border-bottom: none; + background: transparent; + color: #ccc; +} + +/* Small Screens */ +@media (max-width:850px), (max-height:472px) { + .wp-customizer .theme-overlay .theme-wrap { + left: 0; + right: 0; + top: 0; + bottom: 0; + } + + .wp-customizer .theme-browser .themes { + padding-right: 25px; + } +} + +/* Handle cheaters. */ +body.cheatin { + font-size: medium; + height: auto; + background: #fff; + margin: 50px auto 2em; + padding: 1em 2em; + max-width: 700px; + min-width: 0; + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +body.cheatin h1 { + border-bottom: 1px solid #ddd; + clear: both; + color: #555d66; + font-size: 24px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + margin: 30px 0 0 0; + padding: 0; + padding-bottom: 7px; +} + +body.cheatin p { + font-size: 14px; + line-height: 1.5; + margin: 25px 0 20px; +} + +/** + * Widgets and Menus common styles + */ + +/* higher specificity than .wp-core-ui .button */ +#customize-theme-controls .add-new-widget, +#customize-theme-controls .add-new-menu-item { + cursor: pointer; + float: right; + margin: 0; + margin-left: 10px; + transition: all 0.2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; +} + +.reordering .add-new-widget, +.reordering .add-new-menu-item { + opacity: 0.2; + pointer-events: none; + cursor: not-allowed; /* doesn't work in conjunction with pointer-events */ +} + +.add-new-widget:before, +.add-new-menu-item:before, +#available-menu-items .new-content-item .add-content:before { + content: "\f132"; + display: inline-block; + position: relative; + left: -2px; + top: 0; + font: normal 20px/1 dashicons; + vertical-align: middle; + transition: all 0.2s; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Reordering */ +.reorder-toggle { + float: right; + padding: 5px 8px; + text-decoration: none; + cursor: pointer; + outline: none; +} + +.reorder, +.reordering .reorder-done { + display: block; + padding: 5px 8px; +} + +.reorder-done, +.reordering .reorder { + display: none; +} + +.widget-reorder-nav span, +.menu-item-reorder-nav button { + position: relative; + overflow: hidden; + float: left; + display: block; + width: 33px; /* was 42px for mobile */ + height: 43px; + color: #82878c; + text-indent: -9999px; + cursor: pointer; + outline: none; +} + +.menu-item-reorder-nav button { + width: 30px; + height: 40px; + background: transparent; + border: none; + box-shadow: none; +} + +.widget-reorder-nav span:before, +.menu-item-reorder-nav button: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, +.menu-item-reorder-nav button:hover, +.menu-item-reorder-nav button:focus { + color: #191e23; + background: #eee; +} + +.move-widget-down:before, +.menus-move-down:before { + content: "\f347"; +} + +.move-widget-up:before, +.menus-move-up:before { + content: "\f343"; +} + +#customize-theme-controls .first-widget .move-widget-up, +#customize-theme-controls .last-widget .move-widget-down, +.move-up-disabled .menus-move-up, +.move-down-disabled .menus-move-down, +.move-right-disabled .menus-move-right, +.move-left-disabled .menus-move-left { + color: #d5d5d5; + background-color: #fff; + cursor: default; + pointer-events: none; +} + +/** + * New widget and Add-menu-items modes and panels + */ + +.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%; +} + +body.adding-widget .add-new-widget, +body.adding-widget .add-new-widget:hover, +.adding-menu-items .add-new-menu-item, +.adding-menu-items .add-new-menu-item:hover, +.add-menu-toggle.open, +.add-menu-toggle.open:hover { + background: #eee; + border-color: #929793; + color: #32373c; + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); +} + +body.adding-widget .add-new-widget:before, +.adding-menu-items .add-new-menu-item:before, +#accordion-section-add_menu .add-new-menu-item.open:before { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} + +#available-widgets, +#available-menu-items { + position: absolute; + top: 0; + bottom: 0; + left: -301px; + visibility: hidden; + overflow-x: hidden; + overflow-y: auto; + width: 300px; + margin: 0; + z-index: 4; + background: #eee; + transition: left .18s; + border-right: 1px solid #ddd; +} + +#available-widgets .customize-section-title, +#available-menu-items .customize-section-title { + display: none; +} + +#available-widgets-list { + top: 60px; + position: absolute; + overflow: auto; + bottom: 0; + width: 100%; + border-top: 1px solid #ddd; +} + +.no-widgets-found #available-widgets-list { + border-top: none; +} + +#available-widgets-filter { + position: fixed; + top: 0; + z-index: 1; + width: 300px; + background: #eee; +} + +/* search field container */ +#available-widgets-filter, +#available-menu-items-search .accordion-section-title { + padding: 13px 15px; + box-sizing: border-box; +} + +#available-widgets-filter input, +#available-menu-items-search input { + width: 100%; + height: 32px; + margin: 1px 0; + padding: 6px 30px; +} + +#available-widgets-filter input::-ms-clear, +#available-menu-items-search input::-ms-clear { + display: none; /* remove the "x" in IE, which conflicts with the "x" icon on button.clear-results */ +} + +#available-menu-items-search .search-icon, +#available-widgets-filter .search-icon { + display: block; + position: absolute; + top: 15px; /* 13 container padding +1 input margin +1 input border */ + left: 16px; + width: 30px; + height: 30px; + line-height: 28px; + text-align: center; + color: #72777c; +} + +#available-widgets-filter .clear-results, +#available-menu-items-search .clear-results { + position: absolute; + top: 15px; /* 13 container padding +1 input margin +1 input border */ + right: 16px; + width: 30px; + height: 30px; + padding: 0; + border: 0; + cursor: pointer; + background: none; + color: #a00; + text-decoration: none; + outline: 0; +} + +#available-widgets-filter .clear-results, +#available-menu-items-search .clear-results, +#available-menu-items-search.loading .clear-results.is-visible { + display: none; +} + +#available-widgets-filter .clear-results.is-visible, +#available-menu-items-search .clear-results.is-visible { + display: block; +} + +#available-widgets-filter .clear-results:before, +#available-menu-items-search .clear-results:before { + content: "\f335"; + font: normal 20px/1 dashicons; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#available-widgets-filter .clear-results:hover, +#available-widgets-filter .clear-results:focus, +#available-menu-items-search .clear-results:hover, +#available-menu-items-search .clear-results:focus { + color: #dc3232; +} + +#available-widgets-filter .clear-results:focus, +#available-menu-items-search .clear-results:focus { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +#available-menu-items-search .search-icon:after, +#available-widgets-filter .search-icon:after, +.themes-filter-bar .search-icon:after { + content: "\f179"; + font: normal 20px/1 dashicons; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.themes-filter-bar .search-icon { + position: absolute; + top: 7px; + left: 26px; + z-index: 1; + color: #72777c; + height: 30px; + width: 30px; + line-height: 2; + text-align: center; +} + +.no-widgets-found-message { + display: none; + margin: 0; + padding: 0 15px; + line-height: inherit; +} + +.no-widgets-found .no-widgets-found-message { + display: block; +} + +#available-widgets .widget-top, +#available-widgets .widget-top:hover, +#available-menu-items .item-top, +#available-menu-items .item-top:hover { + border: none; + background: transparent; + box-shadow: none; +} + +#available-widgets .widget-tpl, +#available-menu-items .item-tpl { + position: relative; + padding: 15px 15px 15px 60px; + background: #fff; + border-bottom: 1px solid #ddd; + border-left: 4px solid #fff; + transition: .15s color ease-in-out, + .15s background-color ease-in-out, + .15s border-color ease-in-out; + cursor: pointer; + display: none; +} + +#available-widgets .widget, +#available-menu-items .item { + position: static; +} + + +/* Responsive */ +.customize-controls-preview-toggle { + display: none; +} + +@media only screen and (max-width: 782px) { + .wp-customizer .theme:not(.active):hover .theme-actions, + .wp-customizer .theme:not(.active):focus .theme-actions { + display: block; + } + + .wp-customizer .theme-browser .theme.active .theme-name span { + display: inline; + } + + .customize-control-header button.random .dice { + margin-top: 0; + } + + .customize-control-radio .customize-inside-control-row, + .customize-control-checkbox .customize-inside-control-row, + .customize-control-nav_menu_auto_add .customize-inside-control-row { + margin-left: 32px; + } + + .customize-control-radio input, + .customize-control-checkbox input, + .customize-control-nav_menu_auto_add input { + margin-left: -32px; + } + + .customize-control input[type="radio"] + label + br, + .customize-control input[type="checkbox"] + label + br { + line-height: 32px; /* For widgets checkboxes */ + } + + .customize-control .date-time-fields select { + height: 39px; + } + + .date-time-fields .date-input.month { + width: 79px; + } + + .date-time-fields .date-input.day, + .date-time-fields .date-input.hour, + .date-time-fields .date-input.minute { + width: 55px; + } + + .date-time-fields .date-input.year { + width: 80px; + } + + .date-time-fields .date-timezone { + line-height: 3.2; + } + + #customize-control-changeset_preview_link a { + bottom: 16px; + } + + .preview-link-wrapper .customize-copy-preview-link.preview-control-element.button { + bottom: 10px; + } + + .media-widget-control .media-widget-buttons .button.edit-media, + .media-widget-control .media-widget-buttons .button.change-media, + .media-widget-control .media-widget-buttons .button.select-media { + margin-top: 12px; + } + + .wp-core-ui .themes-filter-bar .feature-filter-toggle { + margin: 3px 0 3px 25px; + } +} + +@media screen and ( max-width: 1200px ) { + .outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, + .adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main, + .adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main { + left: 67%; + } +} + +@media screen and ( max-width: 640px ) { + + /* when the sidebar is collapsed and switching to responsive view, + bring it back see ticket #35220 */ + .wp-full-overlay.collapsed #customize-controls { + margin-left: 0; + } + + .wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { + bottom: 0; + } + + .customize-controls-preview-toggle { + display: block; + position: absolute; + top: 0; + left: 48px; + line-height: 45px; + font-size: 14px; + padding: 0 12px; + margin: 0; + height: 45px; + background: #eee; + border: 0; + border-right: 1px solid #ddd; + color: #555d66; + cursor: pointer; + transition: color .1s ease-in-out, background .1s ease-in-out; + } + + #customize-footer-actions, + /*#customize-preview,*/ + .customize-controls-preview-toggle .controls, + .preview-only .wp-full-overlay-sidebar-content, + .preview-only .customize-controls-preview-toggle .preview { + display: none; + } + + .preview-only #customize-save-button-wrapper { + margin-top: -46px; + } + + .customize-controls-preview-toggle .preview:before, + .customize-controls-preview-toggle .controls:before { + font: normal 20px/1 dashicons; + content: "\f177"; + position: relative; + top: 4px; + margin-right: 6px; + } + + .customize-controls-preview-toggle .controls:before { + content: "\f540"; + } + + .preview-only #customize-controls { + height: 45px; + } + + .preview-only #customize-preview, + .preview-only .customize-controls-preview-toggle .controls { + display: block; + } + + .wp-core-ui.wp-customizer .button { + padding: 6px 14px; + line-height: normal; + font-size: 14px; + vertical-align: middle; + height: auto; + } + + #publish-settings { + height: 31px; + } + + #customize-control-changeset_status .customize-inside-control-row { + padding-top: 15px; + } + + body.adding-widget div#available-widgets, + body.adding-menu-items div#available-menu-items, + body.outer-section-open div#customize-sidebar-outer-content { + width: 100%; + } + + #available-widgets .customize-section-title, + #available-menu-items .customize-section-title { + display: block; + margin: 0; + } + + #available-widgets .customize-section-back, + #available-menu-items .customize-section-back { + height: 69px; + } + + #available-widgets .customize-section-title h3, + #available-menu-items .customize-section-title h3 { + font-size: 20px; + font-weight: 200; + padding: 9px 10px 12px 14px; + margin: 0; + line-height: 24px; + color: #555d66; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + #available-widgets .customize-section-title .customize-action, + #available-menu-items .customize-section-title .customize-action { + font-size: 13px; + display: block; + font-weight: 400; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + #available-widgets-filter { + position: relative; + width: 100%; + height: auto; + } + + #available-widgets-list { + top: 130px; + } + + #available-menu-items-search .clear-results, + #available-menu-items-search .search-icon { + top: 85px; /* 70 section title height + 13 container padding +1 input margin +1 input border */ + } + + .reorder, + .reordering .reorder-done { + padding: 8px; + } + + .wp-core-ui .themes-filter-bar .feature-filter-toggle { + margin: 0; + } + + .theme-browser .theme.active .theme-actions, + .wp-customizer .theme-browser .theme .theme-actions { + padding: 9px 15px; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + } +} + +@media screen and ( max-width: 600px ) { + .theme-browser .theme.active .theme-actions, + .wp-customizer .theme-browser .theme .theme-actions { + padding: 8px 15px; + box-shadow: none; + } + + .wp-full-overlay.expanded { + margin-left: 0; + } + + body.adding-widget div#available-widgets, + body.adding-menu-items div#available-menu-items, + body.outer-section-open div#customize-sidebar-outer-content { + top: 46px; + z-index: 10; + } + + body.wp-customizer .wp-full-overlay.expanded #customize-sidebar-outer-content { + left: -100%; + } + + body.wp-customizer.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content { + left: 0; + } +} diff --git a/wp-admin/css/customize-controls.min.css b/wp-admin/css/customize-controls.min.css new file mode 100644 index 0000000..f6cf3dd --- /dev/null +++ b/wp-admin/css/customize-controls.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#customize-controls .wp-full-overlay-sidebar-content,#customize-sidebar-outer-content{overflow-x:hidden;overflow-y:auto}.customize-control-checkbox label,.customize-control-radio label,.customize-control-site_icon .favicon-preview .browser-preview{vertical-align:top}body{overflow:hidden;-webkit-text-size-adjust:100%}.customize-controls-close,.widget-control-actions a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls img{max-width:100%}#customize-controls .submit{text-align:center}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked{background-color:rgba(0,0,0,.7);padding:25px}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .customize-changeset-locked-message{margin-left:auto;margin-right:auto;max-width:366px;min-height:64px;width:auto;padding:25px 25px 25px 109px;position:relative;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;overflow-y:auto;text-align:left;top:calc(50% - 100px)}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .currently-editing{margin-top:0}#customize-controls #customize-notifications-area .notice.notification-overlay.notification-changeset-locked .action-buttons{margin-bottom:0}.customize-changeset-locked-avatar{width:64px;position:absolute;left:25px;top:25px}.wp-core-ui.wp-customizer .customize-changeset-locked-message a.button{margin-right:10px;margin-top:0}#customize-controls .description{color:#555d66}#customize-save-button-wrapper{float:right;margin-top:9px}body:not(.ready) #customize-save-button-wrapper .save{visibility:hidden}#customize-save-button-wrapper .save{float:left;border-radius:3px;box-shadow:none;margin-top:0}#customize-save-button-wrapper .save:focus,#publish-settings:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}#customize-save-button-wrapper .save.has-next-sibling{border-radius:3px 0 0 3px}#customize-sidebar-outer-content{position:absolute;top:0;bottom:0;left:0;visibility:hidden;width:100%;margin:0;z-index:-1;background:#eee;transition:left .18s;border-right:1px solid #ddd;border-left:1px solid #ddd;height:100%}#customize-theme-controls .control-section-outer{display:none!important}#customize-outer-theme-controls .accordion-section-content{padding:12px}#customize-outer-theme-controls .accordion-section-content.open{display:block}.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content{visibility:visible;left:100%;transition:left .18s}.customize-outer-pane-parent{margin:0}.outer-section-open .wp-full-overlay.expanded .wp-full-overlay-main{left:300px;opacity:.4}.adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.adding-menu-items .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main,.adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.adding-widget .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main,.outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.outer-section-open .wp-full-overlay.expanded.preview-tablet .wp-full-overlay-main{left:64%}#customize-outer-theme-controls li.notice{padding-top:8px;padding-bottom:8px;margin-left:0;margin-bottom:10px}#publish-settings{text-indent:0;border-radius:0 3px 3px 0;padding-left:0;padding-right:0;box-shadow:none;font-size:14px;width:30px;float:left;-webkit-transform:none;transform:none;margin-top:0}body.trashing #customize-save-button-wrapper .save,body.trashing #publish-settings,body:not(.ready) #publish-settings{display:none}#customize-header-actions .spinner{margin-top:13px;margin-right:4px}.saving #customize-header-actions .spinner,.trashing #customize-header-actions .spinner{visibility:visible}#customize-header-actions{border-bottom:1px solid #ddd}.outer-section-open #customize-controls .wp-full-overlay-sidebar-content{background:#eee}#customize-controls .customize-info{border:none;border-bottom:1px solid #ddd;margin-bottom:15px}#customize-control-changeset_preview_link input,#customize-control-changeset_status .customize-inside-control-row{background-color:#fff;border-bottom:1px solid #ddd;box-sizing:content-box;width:100%;margin-left:-12px;padding-left:12px;padding-right:12px}#customize-control-trash_changeset{margin-top:20px}#customize-control-trash_changeset .button-link{position:relative;padding-left:24px;display:inline-block}#customize-control-trash_changeset .button-link:before{content:"\f182";font:400 22px dashicons;text-decoration:none;position:absolute;left:0;top:-2px}#customize-controls .date-input:invalid{border-color:#dc3232}#customize-control-changeset_status .customize-inside-control-row{padding-top:10px;padding-bottom:10px;font-weight:500}#customize-control-changeset_status .customize-inside-control-row:first-of-type{border-top:1px solid #ddd}#customize-control-changeset_status .customize-control-title{margin-bottom:6px}#customize-control-changeset_status input{margin-left:0}#customize-control-changeset_preview_link{position:relative;display:block}.preview-link-wrapper .customize-copy-preview-link.preview-control-element.button{margin:0;position:absolute;bottom:9px;right:0}.preview-link-wrapper{position:relative}.customize-copy-preview-link:after,.customize-copy-preview-link:before{content:"";height:28px;position:absolute;background:#fff;top:-1px}.customize-copy-preview-link:before{left:-10px;width:9px;opacity:.75}.customize-copy-preview-link:after{left:-5px;width:4px;opacity:.8}#customize-control-changeset_preview_link input{line-height:2.5;border-top:1px solid #ddd;border-left:none;border-right:none;text-indent:-999px;color:#fff}#customize-control-changeset_preview_link label{position:relative;display:block}#customize-control-changeset_preview_link a{display:inline-block;position:absolute;white-space:nowrap;overflow:hidden;width:90%;bottom:14px;font-size:14px;text-decoration:none}#customize-control-changeset_preview_link a.disabled,#customize-control-changeset_preview_link a.disabled:active,#customize-control-changeset_preview_link a.disabled:focus,#customize-control-changeset_preview_link a.disabled:visited{color:#000;opacity:.4;cursor:default;outline:0;box-shadow:none}#sub-accordion-section-publish_settings .customize-section-description-container{display:none}#customize-controls .customize-info.section-meta{margin-bottom:15px}.customize-control-date_time .customize-control-description+.date-time-fields.includes-time{margin-top:10px}.customize-control.customize-control-date_time .date-time-fields .date-input.day{margin-right:0}.date-time-fields .date-input.month{width:auto;margin:0}.date-time-fields .date-input.day,.date-time-fields .date-input.hour,.date-time-fields .date-input.minute{width:46px}.date-time-fields .date-input.year{width:60px}.date-time-fields .date-input.meridian{width:auto;margin:0}.date-time-fields .time-row{margin-top:12px}.date-time-fields .date-timezone{line-height:2.2;text-decoration:none}#customize-control-changeset_preview_link{margin-top:6px}#customize-control-changeset_status{margin-bottom:0;padding-bottom:0}#customize-control-changeset_scheduled_date{box-sizing:content-box;width:100%;margin-left:-12px;padding:12px;background:#fff;border-bottom:1px solid #ddd;margin-bottom:0}#customize-control-changeset_scheduled_date .customize-control-description{font-style:normal}#customize-controls .customize-info.is-in-view,#customize-controls .customize-section-title.is-in-view{position:absolute;z-index:9;width:100%;box-shadow:0 1px 0 rgba(0,0,0,.1)}#customize-controls .customize-section-title.is-in-view{margin-top:0}#customize-controls .customize-info.is-in-view+.accordion-section{margin-top:15px}#customize-controls .customize-info .customize-panel-description p:first-child,#customize-controls .customize-info .customize-section-description p:first-child,.no-widget-areas-rendered-notice p:first-child{margin-top:0}#customize-controls .customize-info.is-sticky,#customize-controls .customize-section-title.is-sticky{position:fixed;top:46px}#customize-controls .customize-info .accordion-section-title{background:#fff;color:#555d66;border-left:none;border-right:none;border-bottom:none;cursor:default}#customize-controls .customize-info .accordion-section-title:focus:after,#customize-controls .customize-info .accordion-section-title:hover:after,#customize-controls .customize-info.open .accordion-section-title:after{color:#32373c}#customize-controls .customize-info .accordion-section-title:after{display:none}#customize-controls .customize-info .preview-notice{font-size:13px;line-height:24px}#customize-controls .customize-info .panel-title,#customize-controls .customize-pane-child .customize-section-title h3,#customize-controls .customize-pane-child h3.customize-section-title,#customize-outer-theme-controls .customize-pane-child .customize-section-title h3,#customize-outer-theme-controls .customize-pane-child h3.customize-section-title{font-size:20px;font-weight:200;line-height:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#customize-controls .customize-section-title span.customize-action{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#customize-controls .customize-info .customize-help-toggle{position:absolute;top:4px;right:1px;padding:20px 20px 10px 10px;width:20px;height:20px;cursor:pointer;box-shadow:none;-webkit-appearance:none;background:0 0;color:#555d66;border:none}#customize-controls .customize-info .customize-help-toggle:before{position:absolute;top:5px;left:6px}#customize-controls .customize-info .customize-help-toggle:focus,#customize-controls .customize-info .customize-help-toggle:hover,#customize-controls .customize-info.open .customize-help-toggle{color:#0073aa}#customize-controls .customize-info .customize-panel-description,#customize-controls .customize-info .customize-section-description,#customize-controls .no-widget-areas-rendered-notice,#customize-outer-theme-controls .customize-info .customize-section-description{color:#555d66;display:none;background:#fff;padding:12px 15px;border-top:1px solid #ddd}#customize-controls .customize-info .customize-panel-description.open+.no-widget-areas-rendered-notice{border-top:none}.no-widget-areas-rendered-notice{font-style:italic}.no-widget-areas-rendered-notice p:last-child{margin-bottom:0}#customize-controls .customize-info .customize-section-description{margin-bottom:15px}#customize-controls .customize-info .customize-panel-description p:last-child,#customize-controls .customize-info .customize-section-description p:last-child{margin-bottom:0}#customize-controls .current-panel .control-section>h3.accordion-section-title{padding-right:30px}#customize-outer-theme-controls .control-section,#customize-theme-controls .control-section{border:none}#customize-outer-theme-controls .accordion-section-title,#customize-theme-controls .accordion-section-title{color:#555d66;background-color:#fff;border-bottom:1px solid #ddd;border-left:4px solid #fff;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}#customize-controls #customize-theme-controls .customize-themes-panel .accordion-section-title{color:#555;background-color:#fff;border-left:4px solid #fff}#customize-outer-theme-controls .accordion-section-title:after,#customize-theme-controls .accordion-section-title:after{content:"\f345";color:#a0a5aa}#customize-outer-theme-controls .accordion-section-content,#customize-theme-controls .accordion-section-content{color:#555d66;background:0 0}#customize-controls .control-section .accordion-section-title:focus,#customize-controls .control-section .accordion-section-title:hover,#customize-controls .control-section.open .accordion-section-title,#customize-controls .control-section:hover>.accordion-section-title{color:#0073aa;background:#f3f3f5;border-left-color:#0073aa}#accordion-section-themes+.control-section{border-top:1px solid #ddd}.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:#f3f3f5}#customize-outer-theme-controls .control-section .accordion-section-title:focus:after,#customize-outer-theme-controls .control-section .accordion-section-title:hover:after,#customize-outer-theme-controls .control-section.open .accordion-section-title:after,#customize-outer-theme-controls .control-section:hover>.accordion-section-title:after,#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:#0073aa}#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-outer-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!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 .control-panel-content:not(.control-panel-nav_menus) .control-section:nth-child(2),#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu,#customize-theme-controls .control-section-nav_menu_locations .accordion-section-title{border-top:1px solid #ddd}#customize-theme-controls .control-panel-nav_menus .control-section-nav_menu+.control-section-nav_menu{border-top:none}#customize-theme-controls>ul{margin:0}#customize-theme-controls .accordion-section-content{position:absolute;top:0;left:100%;width:100%;margin:0;padding:12px;box-sizing:border-box}#customize-info,#customize-theme-controls .customize-pane-child,#customize-theme-controls .customize-pane-parent{width:100%;margin:0;padding:0;box-sizing:border-box;transition:.18s -webkit-transform cubic-bezier(.645,.045,.355,1);transition:.18s transform cubic-bezier(.645,.045,.355,1);transition:.18s transform cubic-bezier(.645,.045,.355,1),.18s -webkit-transform cubic-bezier(.645,.045,.355,1)}#customize-theme-controls .customize-pane-child.skip-transition{transition:none}#customize-info,#customize-theme-controls .customize-pane-parent{position:relative;visibility:visible;height:auto;max-height:none;overflow:auto;-webkit-transform:none;transform:none}#customize-theme-controls .customize-pane-child{position:absolute;top:0;left:0;visibility:hidden;height:0;max-height:none;overflow:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}#customize-theme-controls .customize-pane-child.current-panel,#customize-theme-controls .customize-pane-child.open{-webkit-transform:none;transform:none}.in-sub-panel #customize-info,.in-sub-panel #customize-theme-controls .customize-pane-parent,.in-sub-panel.section-open #customize-theme-controls .customize-pane-child.current-panel,.section-open #customize-info,.section-open #customize-theme-controls .customize-pane-parent{visibility:hidden;height:0;overflow:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}#customize-theme-controls .customize-pane-child.busy,#customize-theme-controls .customize-pane-child.current-panel,#customize-theme-controls .customize-pane-child.open,.busy.section-open.in-sub-panel #customize-theme-controls .customize-pane-child.current-panel,.in-sub-panel #customize-info.busy,.in-sub-panel #customize-theme-controls .customize-pane-parent.busy,.section-open #customize-info.busy,.section-open #customize-theme-controls .customize-pane-parent.busy{visibility:visible;height:auto;overflow:auto}#customize-theme-controls .customize-pane-child.accordion-section-content,#customize-theme-controls .customize-pane-child.accordion-sub-container{display:block;overflow-x:hidden}#customize-theme-controls .customize-pane-child.accordion-section-content{padding:12px}#customize-theme-controls .customize-pane-child.menu li{position:static}.control-section-nav_menu .customize-section-description-container,.control-section-new_menu .customize-section-description-container,.customize-section-description-container{margin-bottom:15px}.control-section-nav_menu .customize-control,.control-section-new_menu .customize-control{margin-bottom:0}.customize-section-title{margin:-12px -12px 0;border-bottom:1px solid #ddd;background:#fff}div.customize-section-description{margin-top:22px}.customize-info div.customize-section-description,div.customize-section-description p:first-child{margin-top:0}div.customize-section-description p:last-child{margin-bottom:0}#customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child{border-bottom:1px solid #ddd;padding:12px}.ios #customize-theme-controls .customize-themes-panel h3.customize-section-title:first-child{padding:12px 12px 13px}.customize-section-title h3,h3.customize-section-title{padding:10px 10px 12px 14px;margin:0;line-height:21px;color:#555d66}.accordion-sub-container.control-panel-content{display:none;position:absolute;top:0;width:100%}.accordion-sub-container.control-panel-content.busy{display:block}.current-panel .accordion-sub-container.control-panel-content{width:100%}.customize-controls-close{display:block;position:absolute;top:0;left:0;width:45px;height:41px;padding:0 2px 0 0;background:#eee;border:none;border-top:4px solid #eee;border-right:1px solid #ddd;color:#444;text-align:left;cursor:pointer;transition:color .15s ease-in-out,border-color .15s ease-in-out,background .15s ease-in-out;box-sizing:content-box}.customize-panel-back,.customize-section-back{display:block;float:left;width:48px;height:71px;padding:0 24px 0 0;margin:0;background:#fff;border:none;border-right:1px solid #ddd;border-left:4px solid #fff;box-shadow:none;cursor:pointer;transition:color .15s ease-in-out,border-color .15s ease-in-out,background .15s ease-in-out}.customize-section-back{height:74px}.ios .customize-panel-back{display:none}.ios .expanded.in-sub-panel .customize-panel-back{display:block}#customize-controls .panel-meta.customize-info .accordion-section-title{margin-left:48px;border-left:none}#customize-controls .cannot-expand:hover .accordion-section-title,#customize-controls .panel-meta.customize-info .accordion-section-title:hover{background:#fff;color:#555d66;border-left-color:#fff}.customize-controls-close:focus,.customize-controls-close:hover,.customize-controls-preview-toggle:focus,.customize-controls-preview-toggle:hover{background:#fff;color:#0073aa;border-top-color:#0073aa;outline:0;box-shadow:none}.customize-panel-back:focus,.customize-panel-back:hover,.customize-section-back:focus,.customize-section-back:hover{color:#0073aa;background:#f3f3f5;border-left-color:#0073aa;outline:0;box-shadow:none}.customize-controls-close:before{font:400 22px/45px dashicons;content:"\f335";position:relative;top:-3px;left:13px}.customize-panel-back:before,.customize-section-back:before{font:400 20px/72px dashicons;content:"\f341";position:relative;left:9px}.wp-full-overlay-sidebar .wp-full-overlay-header{background-color:#eee;transition:padding ease-in-out .18s}.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header{padding-left:62px}p.customize-section-description{font-style:normal;margin-top:22px;margin-bottom:0}.customize-section-description ul{margin-left:1em}.customize-section-description ul>li{list-style:disc}.section-description-buttons{text-align:right}.section-description-buttons button.button-link{color:#0073aa;text-decoration:underline}.customize-control{width:100%;float:left;clear:both;margin-bottom:12px}.customize-control input[type=radio],.customize-control input[type=checkbox],.customize-control select{line-height:28px}.customize-control input[type=number],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=url],.customize-control input[type=text],.customize-control input[type=password],.customize-control input[type=email]{width:100%;line-height:18px;margin:0}.customize-control-hidden{margin:0}.customize-control-textarea textarea{width:100%;resize:vertical}.customize-control select{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:4px}.customize-control-description{display:block;font-style:italic;line-height:18px;margin-top:0;margin-bottom:5px}.customize-section-description a.external-link:after{font:16px/11px dashicons;content:"\f310";top:3px;position:relative;padding-left:3px;display:inline-block;text-decoration:none}.customize-control-color .color-picker,.customize-control-upload div{line-height:28px}.customize-control .customize-inside-control-row{line-height:20px;display:block;margin-left:24px;padding-top:6px;padding-bottom:6px}.customize-control-checkbox input,.customize-control-nav_menu_auto_add input,.customize-control-radio input{margin-right:4px;margin-left:-24px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio .customize-control-title+.customize-control-description{margin-top:7px}.customize-control .attachment-thumb.type-icon{float:left;margin:10px;width:auto}.customize-control .attachment-title{font-weight:600;margin:0;padding:5px 10px}.customize-control .attachment-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding:0 10px}.customize-control .attachment-meta-title{padding-top:7px}.customize-control .thumbnail-image,.customize-control .wp-media-wrapper.wp-video,.customize-control-header .current{line-height:0}.customize-control .thumbnail-image img{cursor:pointer}#customize-controls .thumbnail-audio .thumbnail{max-width:64px;max-height:64px;margin:10px;float:left}#available-menu-items .accordion-section-content .new-content-item,.customize-control-dropdown-pages .new-content-item{width:calc(100% - 30px);padding:8px 15px;position:absolute;bottom:0;z-index:10;background:#eee;display:-webkit-box;display:flex}.customize-control-dropdown-pages .new-content-item{width:100%;padding:5px 0 5px 1px;position:relative}#available-menu-items .new-content-item .create-item-input,.customize-control-dropdown-pages .new-content-item .create-item-input{-webkit-box-flex:10;flex-grow:10}#available-menu-items .new-content-item .add-content,.customize-control-dropdown-pages .new-content-item .add-content{margin:2px 0 2px 6px;-webkit-box-flex:10;flex-grow:1}.customize-control-dropdown-pages .new-content-item .create-item-input.invalid{border:1px solid #dc3232}.customize-control-dropdown-pages .add-new-toggle{margin-left:1px;font-weight:600;line-height:28px}#customize-preview iframe{width:100%;height:100%;position:absolute}#customize-preview iframe+iframe{visibility:hidden}.wp-full-overlay-sidebar{background:#eee;border-right:1px solid #ddd}#customize-controls .customize-control-notifications-container{margin:4px 0 8px;padding:0;cursor:default}#customize-controls .customize-control-widget_form.has-error .widget .widget-top,.customize-control-nav_menu_item.has-error .menu-item-bar .menu-item-handle{box-shadow:inset 0 0 0 2px #dc3232;transition:.15s box-shadow linear}#customize-controls .customize-control-notifications-container li.notice{list-style:none;margin:0 0 6px;padding:9px 14px;overflow:hidden}#customize-controls .customize-control-notifications-container .notice.is-dismissible{padding-right:38px}.customize-control-notifications-container li.notice:last-child{margin-bottom:0}#customize-controls .customize-control-nav_menu_item .customize-control-notifications-container{margin-top:0}#customize-controls .customize-control-widget_form .customize-control-notifications-container{margin-top:8px}.customize-control-text.has-error input{outline:#dc3232 solid 2px}#customize-controls #customize-notifications-area{position:absolute;top:46px;width:100%;border-bottom:1px solid #ddd;display:block;padding:0;margin:0}.wp-full-overlay.collapsed #customize-controls #customize-notifications-area{display:none!important}#customize-controls #customize-notifications-area:not(.has-overlay-notifications),#customize-controls .customize-section-title>.customize-control-notifications-container:not(.has-overlay-notifications),#customize-controls .panel-meta>.customize-control-notifications-container:not(.has-overlay-notifications){max-height:210px;overflow-x:hidden;overflow-y:auto}#customize-controls #customize-notifications-area .notice,#customize-controls #customize-notifications-area>ul,#customize-controls .customize-section-title>.customize-control-notifications-container,#customize-controls .customize-section-title>.customize-control-notifications-container .notice,#customize-controls .panel-meta>.customize-control-notifications-container,#customize-controls .panel-meta>.customize-control-notifications-container .notice{margin:0}#customize-controls .customize-section-title>.customize-control-notifications-container,#customize-controls .panel-meta>.customize-control-notifications-container{border-top:1px solid #ddd}#customize-controls #customize-notifications-area .notice,#customize-controls .customize-section-title>.customize-control-notifications-container .notice,#customize-controls .panel-meta>.customize-control-notifications-container .notice{padding:9px 14px}#customize-controls #customize-notifications-area .notice.is-dismissible,#customize-controls .customize-section-title>.customize-control-notifications-container .notice.is-dismissible,#customize-controls .panel-meta>.customize-control-notifications-container .notice.is-dismissible{padding-right:38px}#customize-controls #customize-notifications-area .notice+.notice,#customize-controls .customize-section-title>.customize-control-notifications-container .notice+.notice,#customize-controls .panel-meta>.customize-control-notifications-container .notice+.notice{margin-top:1px}@-webkit-keyframes customize-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes customize-fade-in{0%{opacity:0}100%{opacity:1}}#customize-controls #customize-notifications-area .notice.notification-overlay,#customize-controls .notice.notification-overlay{margin:0;border-left:0}#customize-controls .customize-control-notifications-container.has-overlay-notifications{-webkit-animation:customize-fade-in .5s;animation:customize-fade-in .5s;z-index:30}#customize-controls #customize-notifications-area .notice.notification-overlay .notification-message{clear:both;color:#191e23;font-size:18px;font-style:normal;margin:0;padding:2em 0;text-align:center;width:100%;display:block;top:50%;position:relative}#customize-control-show_on_front.has-error .customize-control-notifications-container,.customize-control .actions .button{margin-top:12px}#customize-control-show_on_front.has-error{margin-bottom:0}.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:#32373c}.customize-control .dropdown-status{color:#32373c;background:#eee;display:none;max-width:112px}.customize-control-color .dropdown{margin-right:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555d66;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.ios .wp-full-overlay{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}.customize-control-header .actions,.customize-control-header .uploaded{margin-bottom:18px}.customize-control-header .default button:not(.random),.customize-control-header .uploaded button:not(.random){width:100%;padding:0;margin:0;background:0 0;border:none;color:inherit;cursor:pointer}.customize-control-header button img{display:block}.customize-control .attachment-media-view .default-button,.customize-control .attachment-media-view .remove-button,.customize-control .attachment-media-view .upload-button,.customize-control-header button.new,.customize-control-header button.remove{width:auto;height:auto;white-space:normal}.customize-control .attachment-media-view .thumbnail,.customize-control-header .current .container{overflow:hidden}.customize-control .attachment-media-view .placeholder,.customize-control-header .placeholder{width:100%;position:relative;text-align:center;cursor:default;border:1px dashed #b4b9be;box-sizing:border-box;padding:9px 0;line-height:20px}.customize-control-header .inner{display:none;position:absolute;width:100%;color:#555d66;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.customize-control-header .inner,.customize-control-header .inner .dashicons{line-height:20px;top:8px}.customize-control-header .list .inner,.customize-control-header .list .inner .dashicons{top:9px}.customize-control-header .header-view{position:relative;width:100%;margin-bottom:12px}.customize-control-header .header-view:last-child{margin-bottom:0}.customize-control-header .header-view:after{border:0}.customize-control-header .header-view.selected .choice:focus{outline:0}.customize-control-header .header-view.selected:after{content:'';position:absolute;height:auto;top:0;left:0;bottom:0;right:0;border:4px solid #00a0d2;border-radius:2px}.customize-control-header .header-view.button.selected{border:0}#customize-controls .customize-section-description-container.section-meta.customize-info,#customize-theme-controls .control-panel-themes{border-bottom:none}.customize-control-header .uploaded .header-view .close{font-size:20px;color:#fff;background:#555d66;background:rgba(0,0,0,.5);position:absolute;top:10px;left:-999px;z-index:1;width:26px;height:26px;cursor:pointer}.customize-control-header .header-view .close:focus,.customize-control-header .header-view:hover .close{left:auto;right:10px}.customize-control-header .header-view .close:focus{outline:#5b9dd9 solid 1px}.customize-control-header .random.placeholder{cursor:pointer;border-radius:2px;height:40px}.customize-control-header button.random{width:100%;height:auto;min-height:40px;white-space:normal}.customize-control-header button.random .dice{margin-top:4px}.customize-control-header .header-view:hover>button.random .dice,.customize-control-header .placeholder:hover .dice{-webkit-animation:dice-color-change 3s infinite;animation:dice-color-change 3s infinite}.button-see-me{-webkit-animation:bounce .7s 1;animation:bounce .7s 1;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-12px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-6px,0)}90%{-webkit-transform:translate3d(0,-1px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-12px,0);transform:translate3d(0,-12px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-6px,0);transform:translate3d(0,-6px,0)}90%{-webkit-transform:translate3d(0,-1px,0);transform:translate3d(0,-1px,0)}}.customize-control-header .choice{position:relative;display:block;margin-bottom:9px}.customize-control-header .choice:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 3px 1px rgba(30,140,190,.8)}.customize-control-header .uploaded div:last-child>.choice{margin-bottom:0}.customize-control .attachment-media-view .thumbnail-image img,.customize-control-header img{max-width:100%}.customize-control .attachment-media-view .default-button,.customize-control .attachment-media-view .remove-button,.customize-control-header .remove{margin-right:8px}.customize-control-background_position .background-position-control .button-group{display:block}.customize-control-code_editor textarea{width:100%;font-family:Consolas,Monaco,monospace;font-size:12px;padding:6px 8px;-moz-tab-size:2;-o-tab-size:2;tab-size:2}.customize-control-code_editor .CodeMirror,.customize-control-code_editor textarea{height:14em}#sub-accordion-section-custom_css .customize-control-notifications-container{margin-bottom:15px}#customize-control-custom_css textarea{display:block;height:500px}.customize-section-description-container+#customize-control-custom_css .customize-control-title{margin-left:12px}.customize-section-description-container+#customize-control-custom_css:last-child textarea{border-right:0;border-left:0;height:calc(100vh - 185px);resize:none}.customize-section-description-container+#customize-control-custom_css:last-child{margin-left:-12px;width:299px;width:calc(100% + 24px);margin-bottom:-12px}.customize-section-description-container+#customize-control-custom_css:last-child .CodeMirror{height:calc(100vh - 185px)}.CodeMirror-hints,.CodeMirror-lint-tooltip{z-index:500000!important}.customize-section-description-container+#customize-control-custom_css:last-child .customize-control-notifications-container{margin-left:12px;margin-right:12px}.theme-browser .theme.active .theme-actions,.wp-customizer .theme-browser .theme .theme-actions{padding:10px 15px;box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}@media screen and (max-width:640px){.customize-section-description-container+#customize-control-custom_css:last-child{margin-right:0}.customize-section-description-container+#customize-control-custom_css:last-child textarea{height:calc(100vh - 140px)}}#customize-theme-controls .control-panel-themes>.accordion-section-title,#customize-theme-controls .control-panel-themes>.accordion-section-title:hover{cursor:default;background:#fff;color:#555d66;border-top:1px solid #ddd;border-bottom:1px solid #ddd;border-left:none;border-right:none;margin:0 0 15px;padding-right:100px}#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child,#customize-theme-controls .control-section-themes .customize-themes-panel .accordion-section-title:first-child:hover{border-top:0}#customize-theme-controls .control-section-themes>.accordion-section-title,#customize-theme-controls .control-section-themes>.accordion-section-title:hover{margin:0 0 15px}#customize-controls .customize-themes-panel .accordion-section-title,#customize-controls .customize-themes-panel .accordion-section-title:hover{margin:15px -8px}#customize-controls .control-section-themes .accordion-section-title,#customize-controls .customize-themes-panel .accordion-section-title{padding-right:100px}#customize-controls .control-section-themes .accordion-section-title span.customize-action,#customize-controls .customize-section-title span.customize-action,.control-panel-themes .accordion-section-title span.customize-action{font-size:13px;display:block;font-weight:400}.in-themes-panel.animating .control-panel-themes .filter-themes-count,.themes-filter-bar .feature-filter-toggle .filter-count-filters{display:none}#customize-theme-controls .control-panel-themes .accordion-section-title .change-theme{position:absolute;right:10px;top:50%;margin-top:-14px;font-weight:400}#customize-theme-controls .control-panel-themes>.accordion-section-title:after{display:none}.control-panel-themes .customize-themes-full-container{position:fixed;top:0;left:0;transition:.18s left ease-in-out;margin:0 0 0 300px;padding:71px 0 25px;overflow-y:scroll;width:calc(100% - 300px);height:calc(100% - 96px);background:#eee;z-index:20}@media screen and (min-width:1670px){.control-panel-themes .customize-themes-full-container{width:82%;right:0;left:initial}}.modal-open .control-panel-themes .customize-themes-full-container{overflow-y:visible}#customize-header-actions .customize-controls-preview-toggle,#customize-header-actions .spinner,#customize-save-button-wrapper{transition:.18s margin ease-in-out}#customize-footer-actions,#customize-footer-actions .collapse-sidebar{bottom:0;transition:.18s bottom ease-in-out}.in-themes-panel:not(.animating) #customize-footer-actions,.in-themes-panel:not(.animating) #customize-header-actions .customize-controls-preview-toggle,.in-themes-panel:not(.animating) #customize-header-actions .spinner,.in-themes-panel:not(.animating) #customize-preview{visibility:hidden}.wp-full-overlay.in-themes-panel{background:#eee}.in-themes-panel #customize-header-actions .customize-controls-preview-toggle,.in-themes-panel #customize-header-actions .spinner,.in-themes-panel #customize-save-button-wrapper{margin-top:-46px}.in-themes-panel #customize-footer-actions,.in-themes-panel #customize-footer-actions .collapse-sidebar{bottom:-45px}.in-themes-panel.wp-full-overlay .wp-full-overlay-sidebar-content{bottom:0}.themes-filter-bar .feature-filter-toggle{float:right;margin:3px 0 3px 25px}.themes-filter-bar .feature-filter-toggle:before{content:"\f111";margin:0 5px 0 0;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.themes-filter-bar .feature-filter-toggle.open{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.filter-drawer{box-sizing:border-box;width:100%;position:absolute;top:46px;left:0;padding:25px 0 25px 25px;border-top:0;margin:0;background:#eee;border-bottom:1px solid #ddd}.filter-drawer .filter-group{margin:0 25px 0 0;width:calc((100% - 75px)/ 3);min-width:200px;max-width:320px}@-webkit-keyframes themes-fade-in{0%,50%{opacity:0}100%{opacity:1}}@keyframes themes-fade-in{0%,50%{opacity:0}100%{opacity:1}}.control-panel-themes .customize-themes-full-container.animate{-webkit-animation:.6s themes-fade-in 1;animation:.6s themes-fade-in 1}.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count{-webkit-animation:.6s themes-fade-in 1;animation:.6s themes-fade-in 1}.control-panel-themes .filter-themes-count{position:relative;float:right;line-height:34px}.control-panel-themes .filter-themes-count .themes-displayed{font-weight:600;color:#555d66}.customize-themes-notifications{margin:0}.control-panel-themes .customize-themes-notifications .notice{margin:0 0 25px}.customize-themes-full-container .customize-themes-section{display:none!important;overflow:hidden}.customize-themes-full-container .customize-themes-section.current-section{display:list-item!important}.control-section .customize-section-text-before{padding:0 0 8px 15px;margin:15px 0 0;line-height:16px;border-bottom:1px solid #ddd;color:#555d66}.control-panel-themes .customize-themes-section-title{width:100%;background:#fff;box-shadow:none;outline:0;border-top:none;border-bottom:1px solid #ddd;border-left:4px solid #fff;border-right:none;cursor:pointer;padding:10px 15px;position:relative;text-align:left;font-size:14px;font-weight:600;color:#555d66;text-shadow:none}.control-panel-themes #accordion-section-installed_themes{border-top:1px solid #ddd}.control-panel-themes .theme-section{margin:0;position:relative}.control-panel-themes .customize-themes-section-title:focus,.control-panel-themes .customize-themes-section-title:hover{border-left-color:#0073aa;color:#0073aa;background:#f5f5f5}.customize-themes-section-title:not(.selected):after{content:"";display:block;position:absolute;top:9px;right:15px;width:18px;height:18px;border-radius:100%;border:1px solid #ccc;background:#fff}.control-panel-themes .theme-section .customize-themes-section-title.selected:after{content:"\f147";font:16px/1 dashicons;box-sizing:border-box;width:20px;height:20px;padding:3px 3px 1px 1px;border-radius:100%;position:absolute;top:9px;right:15px;background:#0073aa;color:#fff}.control-panel-themes .customize-themes-section-title.selected{color:#0073aa}#customize-theme-controls .themes.accordion-section-content{position:relative;left:0;padding:0;width:100%}.loading .customize-themes-section .spinner{display:block;visibility:visible;position:relative;clear:both;width:20px;height:20px;left:calc(50% - 10px);float:none;margin-top:50px}.control-panel-themes .customize-themes-mobile-back,.customize-themes-section .no-themes,.customize-themes-section .no-themes-local{display:none}.themes-section-installed_themes .theme .notice-success:not(.updated-message){display:none}.customize-control-theme .theme{width:100%;margin:0;border:1px solid #ddd;background:#fff}.customize-control-theme .theme .theme-actions,.customize-control-theme .theme .theme-name{background:#fff;border:none}.customize-control.customize-control-theme{box-sizing:border-box;width:25%;max-width:600px;margin:0 25px 25px 0;padding:0;clear:none}@media screen and (min-width:2101px){.customize-control.customize-control-theme{width:calc((100% - 125px)/ 5 - 1px)}}@media screen and (min-width:1601px) and (max-width:2100px){.customize-control.customize-control-theme{width:calc((100% - 100px)/ 4 - 1px)}}@media screen and (min-width:1201px) and (max-width:1600px){.customize-control.customize-control-theme{width:calc((100% - 75px)/ 3 - 1px)}}@media screen and (min-width:851px) and (max-width:1200px){.customize-control.customize-control-theme{width:calc((100% - 50px)/ 2 - 1px)}}@media screen and (max-width:850px){.customize-control.customize-control-theme{width:100%}}.wp-customizer .theme-browser .themes{padding:0 0 25px 25px;transition:.18s margin-top linear}.wp-customizer .theme-browser .theme .theme-actions{opacity:1}#customize-controls h3.theme-name{font-size:15px}#customize-controls .theme-overlay .theme-name{font-size:32px}.customize-preview-header.themes-filter-bar{position:fixed;top:0;left:300px;width:calc(100% - 300px);height:46px;background:#eee;z-index:10;padding:6px 25px;box-sizing:border-box;border-bottom:1px solid #ddd}@media screen and (min-width:1670px){.customize-preview-header.themes-filter-bar{width:82%;right:0;left:initial}}.themes-filter-bar .themes-filter-container{margin:0;padding:0}.themes-filter-bar .wp-filter-search{line-height:25px;padding:6px 10px 6px 30px;max-width:100%;width:40%;min-width:300px;position:absolute;top:6px;left:25px;height:32px;margin:1px 0}@media screen and (max-height:540px),screen and (max-width:1018px){.customize-preview-header.themes-filter-bar{position:relative;left:0;width:100%;margin:0 0 25px}.filter-drawer{top:46px}.wp-customizer .theme-browser .themes{padding:0 0 25px 25px;overflow:hidden}.control-panel-themes .customize-themes-full-container{margin-top:0;padding:0;height:100%;width:calc(100% - 300px)}}@media screen and (max-width:1018px){.filter-drawer .filter-group{width:calc((100% - 50px)/ 2)}}@media screen and (max-width:900px){.customize-preview-header.themes-filter-bar{height:86px;padding-top:46px}.themes-filter-bar .wp-filter-search{width:calc(100% - 50px);margin:0;min-width:200px}.filter-drawer{top:86px}.control-panel-themes .filter-themes-count{float:left}}@media screen and (max-width:792px){.filter-drawer .filter-group{width:calc(100% - 25px)}}@media screen and (max-width:600px){.filter-drawer{top:132px}.wp-full-overlay.showing-themes .control-panel-themes .filter-themes-count .filter-themes{display:block;float:right}.control-panel-themes .customize-themes-full-container{width:100%;margin:0;padding-top:46px;height:calc(100% - 46px);z-index:1;display:none}.showing-themes .control-panel-themes .customize-themes-full-container{display:block}.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back{display:block;position:fixed;top:0;left:0;background:#eee;color:#444;border-radius:0;box-shadow:none;border:none;height:46px;width:100%;z-index:10;text-align:left;text-shadow:none;border-bottom:1px solid #ddd;border-left:4px solid transparent;margin:0;padding:0;font-size:0;overflow:hidden}.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:before{left:0;top:0;height:46px;width:26px;display:block;line-height:46px;padding:0 8px;border-right:1px solid #ddd}.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:focus,.wp-customizer .showing-themes .control-panel-themes .customize-themes-mobile-back:hover{color:#0073aa;background:#f3f3f5;border-left-color:#0073aa;outline:0;box-shadow:none}.showing-themes #customize-header-actions{display:none}#customize-controls{width:100%}}.modal-open .in-themes-panel #customize-controls .wp-full-overlay-sidebar-content,.wp-full-overlay.in-themes-panel.themes-panel-expanded #customize-controls .wp-full-overlay-sidebar-content{overflow:visible}.wp-customizer .theme-overlay{display:none}.wp-customizer.modal-open .theme-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:109}.wp-customizer.modal-open #customize-header-actions,.wp-customizer.modal-open .control-panel-themes .customize-themes-section-title.selected:after,.wp-customizer.modal-open .control-panel-themes .filter-themes-count{z-index:-1}.wp-customizer .theme-overlay .theme-backdrop{background:rgba(238,238,238,.75);position:fixed;z-index:110}.wp-customizer .theme-overlay .star-rating{float:left;margin-right:8px}.wp-customizer .theme-rating .num-ratings{line-height:20px}.wp-customizer .theme-overlay .theme-wrap{left:90px;right:90px;top:45px;bottom:45px;z-index:120}.wp-customizer .theme-overlay .theme-actions{text-align:right;padding:10px 25px;background:#eee;border-top:1px solid #ddd}.wp-customizer .theme-overlay .theme-actions .theme-install.preview{margin-left:8px}.control-panel-themes .theme-actions .delete-theme{left:15px;right:auto;bottom:auto;position:absolute}.wp-customizer .theme-header{background:#eee}.wp-customizer .theme-overlay .theme-header .close:before,.wp-customizer .theme-overlay .theme-header button{color:#444}.wp-customizer .theme-overlay .theme-header .close:focus,.wp-customizer .theme-overlay .theme-header .close:hover,.wp-customizer .theme-overlay .theme-header .left:focus,.wp-customizer .theme-overlay .theme-header .left:hover,.wp-customizer .theme-overlay .theme-header .right:focus,.wp-customizer .theme-overlay .theme-header .right:hover{background:#fff;border-bottom:4px solid #0073aa;color:#0073aa}.wp-customizer .theme-overlay .theme-header .close:focus:before,.wp-customizer .theme-overlay .theme-header .close:hover:before{color:#0073aa}.wp-customizer .theme-overlay .theme-header button.disabled,.wp-customizer .theme-overlay .theme-header button.disabled:focus,.wp-customizer .theme-overlay .theme-header button.disabled:hover{border-bottom:none;background:0 0;color:#ccc}@media (max-width:850px),(max-height:472px){.wp-customizer .theme-overlay .theme-wrap{left:0;right:0;top:0;bottom:0}.wp-customizer .theme-browser .themes{padding-right:25px}}body.cheatin{font-size:medium;height:auto;background:#fff;margin:50px auto 2em;padding:1em 2em;max-width:700px;min-width:0;box-shadow:0 1px 3px rgba(0,0,0,.13)}body.cheatin h1{border-bottom:1px solid #ddd;clear:both;color:#555d66;font-size:24px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin:30px 0 0;padding:0 0 7px}body.cheatin p{font-size:14px;line-height:1.5;margin:25px 0 20px}#customize-theme-controls .add-new-menu-item,#customize-theme-controls .add-new-widget{cursor:pointer;float:right;margin:0 0 0 10px;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.reordering .add-new-menu-item,.reordering .add-new-widget{opacity:.2;pointer-events:none;cursor:not-allowed}#available-menu-items .new-content-item .add-content:before,.add-new-menu-item:before,.add-new-widget:before{content:"\f132";display:inline-block;position:relative;left:-2px;top:0;font:400 20px/1 dashicons;vertical-align:middle;transition:all .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.reorder-toggle{float:right;padding:5px 8px;text-decoration:none;cursor:pointer;outline:0}.reorder,.reordering .reorder-done{display:block;padding:5px 8px}.reorder-done,.reordering .reorder{display:none}.menu-item-reorder-nav button,.widget-reorder-nav span{position:relative;overflow:hidden;float:left;display:block;width:33px;height:43px;color:#82878c;text-indent:-9999px;cursor:pointer;outline:0}.menu-item-reorder-nav button{width:30px;height:40px;background:0 0;border:none;box-shadow:none}.menu-item-reorder-nav button:before,.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}.menu-item-reorder-nav button:focus,.menu-item-reorder-nav button:hover,.widget-reorder-nav span:focus,.widget-reorder-nav span:hover{color:#191e23;background:#eee}.menus-move-down:before,.move-widget-down:before{content:"\f347"}.menus-move-up:before,.move-widget-up:before{content:"\f343"}#customize-theme-controls .first-widget .move-widget-up,#customize-theme-controls .last-widget .move-widget-down,.move-down-disabled .menus-move-down,.move-left-disabled .menus-move-left,.move-right-disabled .menus-move-right,.move-up-disabled .menus-move-up{color:#d5d5d5;background-color:#fff;cursor:default;pointer-events:none}.wp-full-overlay-main{right:auto;width:100%}.add-menu-toggle.open,.add-menu-toggle.open:hover,.adding-menu-items .add-new-menu-item,.adding-menu-items .add-new-menu-item:hover,body.adding-widget .add-new-widget,body.adding-widget .add-new-widget:hover{background:#eee;border-color:#929793;color:#32373c;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}#accordion-section-add_menu .add-new-menu-item.open:before,.adding-menu-items .add-new-menu-item:before,body.adding-widget .add-new-widget:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}#available-menu-items,#available-widgets{position:absolute;top:0;bottom:0;left:-301px;visibility:hidden;overflow-x:hidden;overflow-y:auto;width:300px;margin:0;z-index:4;background:#eee;transition:left .18s;border-right:1px solid #ddd}#available-menu-items .customize-section-title,#available-widgets .customize-section-title{display:none}#available-widgets-list{top:60px;position:absolute;overflow:auto;bottom:0;width:100%;border-top:1px solid #ddd}.no-widgets-found #available-widgets-list{border-top:none}#available-widgets-filter{position:fixed;top:0;z-index:1;width:300px;background:#eee}#available-menu-items-search .accordion-section-title,#available-widgets-filter{padding:13px 15px;box-sizing:border-box}#available-menu-items-search input,#available-widgets-filter input{width:100%;height:32px;margin:1px 0;padding:6px 30px}#available-menu-items-search input::-ms-clear,#available-widgets-filter input::-ms-clear{display:none}#available-menu-items-search .search-icon,#available-widgets-filter .search-icon{display:block;position:absolute;top:15px;left:16px;width:30px;height:30px;line-height:28px;text-align:center;color:#72777c}#available-menu-items-search .clear-results,#available-widgets-filter .clear-results{position:absolute;top:15px;right:16px;width:30px;height:30px;padding:0;border:0;cursor:pointer;background:0 0;color:#a00;text-decoration:none;outline:0}#available-menu-items-search .clear-results,#available-menu-items-search.loading .clear-results.is-visible,#available-widgets-filter .clear-results{display:none}#available-menu-items-search .clear-results.is-visible,#available-widgets-filter .clear-results.is-visible{display:block}#available-menu-items-search .clear-results:before,#available-widgets-filter .clear-results:before{content:"\f335";font:400 20px/1 dashicons;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#available-menu-items-search .clear-results:focus,#available-menu-items-search .clear-results:hover,#available-widgets-filter .clear-results:focus,#available-widgets-filter .clear-results:hover{color:#dc3232}#available-menu-items-search .clear-results:focus,#available-widgets-filter .clear-results:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#available-menu-items-search .search-icon:after,#available-widgets-filter .search-icon:after,.themes-filter-bar .search-icon:after{content:"\f179";font:400 20px/1 dashicons;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.themes-filter-bar .search-icon{position:absolute;top:7px;left:26px;z-index:1;color:#72777c;height:30px;width:30px;line-height:2;text-align:center}.no-widgets-found-message{display:none;margin:0;padding:0 15px;line-height:inherit}.no-widgets-found .no-widgets-found-message{display:block}#available-menu-items .item-top,#available-menu-items .item-top:hover,#available-widgets .widget-top,#available-widgets .widget-top:hover{border:none;background:0 0;box-shadow:none}#available-menu-items .item-tpl,#available-widgets .widget-tpl{position:relative;padding:15px 15px 15px 60px;background:#fff;border-bottom:1px solid #ddd;border-left:4px solid #fff;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;cursor:pointer;display:none}#available-menu-items .item,#available-widgets .widget{position:static}.customize-controls-preview-toggle{display:none}@media only screen and (max-width:782px){.wp-customizer .theme:not(.active):focus .theme-actions,.wp-customizer .theme:not(.active):hover .theme-actions{display:block}.wp-customizer .theme-browser .theme.active .theme-name span{display:inline}.customize-control-header button.random .dice{margin-top:0}.customize-control-checkbox .customize-inside-control-row,.customize-control-nav_menu_auto_add .customize-inside-control-row,.customize-control-radio .customize-inside-control-row{margin-left:32px}.customize-control-checkbox input,.customize-control-nav_menu_auto_add input,.customize-control-radio input{margin-left:-32px}.customize-control input[type=radio]+label+br,.customize-control input[type=checkbox]+label+br{line-height:32px}.customize-control .date-time-fields select{height:39px}.date-time-fields .date-input.month{width:79px}.date-time-fields .date-input.day,.date-time-fields .date-input.hour,.date-time-fields .date-input.minute{width:55px}.date-time-fields .date-input.year{width:80px}.date-time-fields .date-timezone{line-height:3.2}#customize-control-changeset_preview_link a{bottom:16px}.preview-link-wrapper .customize-copy-preview-link.preview-control-element.button{bottom:10px}.media-widget-control .media-widget-buttons .button.change-media,.media-widget-control .media-widget-buttons .button.edit-media,.media-widget-control .media-widget-buttons .button.select-media{margin-top:12px}.wp-core-ui .themes-filter-bar .feature-filter-toggle{margin:3px 0 3px 25px}}@media screen and (max-width:1200px){.adding-menu-items .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.adding-widget .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main,.outer-section-open .wp-full-overlay.expanded.preview-mobile .wp-full-overlay-main{left:67%}}@media screen and (max-width:640px){.wp-full-overlay.collapsed #customize-controls{margin-left:0}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{bottom:0}.customize-controls-preview-toggle{display:block;position:absolute;top:0;left:48px;line-height:45px;font-size:14px;padding:0 12px;margin:0;height:45px;background:#eee;border:0;border-right:1px solid #ddd;color:#555d66;cursor:pointer;transition:color .1s ease-in-out,background .1s ease-in-out}#customize-footer-actions,.customize-controls-preview-toggle .controls,.preview-only .customize-controls-preview-toggle .preview,.preview-only .wp-full-overlay-sidebar-content{display:none}.preview-only #customize-save-button-wrapper{margin-top:-46px}.customize-controls-preview-toggle .controls:before,.customize-controls-preview-toggle .preview:before{font:400 20px/1 dashicons;content:"\f177";position:relative;top:4px;margin-right:6px}.customize-controls-preview-toggle .controls:before{content:"\f540"}.preview-only #customize-controls{height:45px}.preview-only #customize-preview,.preview-only .customize-controls-preview-toggle .controls{display:block}.wp-core-ui.wp-customizer .button{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto}#publish-settings{height:31px}#customize-control-changeset_status .customize-inside-control-row{padding-top:15px}body.adding-menu-items div#available-menu-items,body.adding-widget div#available-widgets,body.outer-section-open div#customize-sidebar-outer-content{width:100%}#available-menu-items .customize-section-title,#available-widgets .customize-section-title{display:block;margin:0}#available-menu-items .customize-section-back,#available-widgets .customize-section-back{height:69px}#available-menu-items .customize-section-title h3,#available-widgets .customize-section-title h3{font-size:20px;font-weight:200;padding:9px 10px 12px 14px;margin:0;line-height:24px;color:#555d66;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#available-menu-items .customize-section-title .customize-action,#available-widgets .customize-section-title .customize-action{font-size:13px;display:block;font-weight:400;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#available-widgets-filter{position:relative;width:100%;height:auto}#available-widgets-list{top:130px}#available-menu-items-search .clear-results,#available-menu-items-search .search-icon{top:85px}.reorder,.reordering .reorder-done{padding:8px}.wp-core-ui .themes-filter-bar .feature-filter-toggle{margin:0}.theme-browser .theme.active .theme-actions,.wp-customizer .theme-browser .theme .theme-actions{padding:9px 15px;box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}}@media screen and (max-width:600px){.theme-browser .theme.active .theme-actions,.wp-customizer .theme-browser .theme .theme-actions{padding:8px 15px;box-shadow:none}.wp-full-overlay.expanded{margin-left:0}body.adding-menu-items div#available-menu-items,body.adding-widget div#available-widgets,body.outer-section-open div#customize-sidebar-outer-content{top:46px;z-index:10}body.wp-customizer .wp-full-overlay.expanded #customize-sidebar-outer-content{left:-100%}body.wp-customizer.outer-section-open .wp-full-overlay.expanded #customize-sidebar-outer-content{left:0}} \ No newline at end of file diff --git a/wp-admin/css/customize-nav-menus-rtl.css b/wp-admin/css/customize-nav-menus-rtl.css new file mode 100644 index 0000000..6ba34ea --- /dev/null +++ b/wp-admin/css/customize-nav-menus-rtl.css @@ -0,0 +1,887 @@ +#customize-theme-controls #accordion-section-menu_locations { + position: relative; + margin-top: 30px; +} + +#customize-theme-controls #accordion-section-menu_locations > .accordion-section-title { + border-bottom-color: #ddd; + margin-top: 15px; +} + +#customize-theme-controls .customize-section-title-nav_menus-heading, +#customize-theme-controls .customize-section-title-menu_locations-heading, +#customize-theme-controls .customize-section-title-menu_locations-description { + padding: 0 12px 0 12px; +} + +#customize-theme-controls .customize-control-description.customize-section-title-menu_locations-description { + /* Override the default italic style for control descriptions */ + font-style: normal; +} + +.menu-in-location, +.menu-in-locations { + display: block; + font-weight: 600; + font-size: 10px; +} + +#customize-controls .theme-location-set, +#customize-controls .control-section .accordion-section-title:focus .menu-in-location, +#customize-controls .control-section .accordion-section-title:hover .menu-in-location { + color: #555; +} + +/* The `edit-menu` and `create-menu` buttons also use the `button-link` class. */ +.customize-control-nav_menu_location .edit-menu, +.customize-control-nav_menu_location .create-menu { + margin-right: 6px; + vertical-align: middle; + line-height: 28px; +} + +#customize-controls .customize-control-nav_menu_name { + margin-bottom: 12px; +} + +.customize-control-nav_menu_name p:last-of-type { + margin-bottom: 0; +} + +#customize-new-menu-submit { + float: left; + min-width: 85px; +} + +.wp-customizer .menu-item-bar .menu-item-handle, +.wp-customizer .menu-item-settings, +.wp-customizer .menu-item-settings .description-thin { + box-sizing: border-box; +} + +.wp-customizer .menu-item-bar { + margin: 0; +} + +.wp-customizer .menu-item-bar .menu-item-handle { + width: 100%; + background: #fff; +} + +.wp-customizer .menu-item-handle .item-title { + margin-left: 0; +} + +.wp-customizer .menu-item-handle .item-type { + padding: 1px 5px 0 21px; + float: left; + text-align: left; +} + +.wp-customizer .menu-item-handle:hover { + z-index: 8; +} + +.customize-control-nav_menu_item.has-notifications .menu-item-handle { + border-right: 4px solid #00a0d2; +} + +.wp-customizer .menu-item-settings { + max-width: 100%; + overflow: hidden; + z-index: 8; + padding: 10px; + background: #eee; + border: 1px solid #999; + border-top: none; +} + +.wp-customizer .menu-item-settings .description-thin { + width: 100%; + height: auto; + margin: 0 0 8px 0; +} + +.wp-customizer .menu-item-settings input[type="text"] { + width: 100%; +} + +.wp-customizer .menu-item-settings .submitbox { + margin: 0; + padding: 0; +} + +.wp-customizer .menu-item-settings .link-to-original { + padding: 5px 0; + border: none; + font-style: normal; + margin: 0; + width: 100%; +} + +.wp-customizer .menu-item .submitbox .submitdelete { + float: right; + margin: 6px 0 0; + padding: 0; + cursor: pointer; +} + + +/** + * Menu items reordering styles + */ + +.menu-item-reorder-nav { + display: none; + background-color: #fff; + position: absolute; + top: 0; + left: 0; +} + +.menus-move-left:before { + content: "\f345"; +} + +.menus-move-right:before { + content: "\f341"; +} + +.reordering .menu-item .item-controls, +.reordering .menu-item .item-type { + display: none; +} + +.reordering .menu-item-reorder-nav { + display: block; +} + +.customize-control input.menu-name-field { + width: 100%; /* Override the 98% default for customizer inputs, to align with the size of menu items. */ +} + +.wp-customizer .menu-item .item-edit { + position: absolute; + left: -19px; + top: 2px; + display: block; + width: 30px; + height: 38px; + margin-left: 0 !important; + box-shadow: none; + outline: none; + overflow: hidden; + cursor: pointer; + text-align: center; +} + +.wp-customizer .menu-item.menu-item-edit-active .item-edit .toggle-indicator:before { + content: "\f142"; +} + +.wp-customizer .menu-item-settings p.description { + font-style: normal; +} + +.wp-customizer .menu-settings dl { + margin: 12px 0 0 0; + padding: 0; +} + +.wp-customizer .menu-settings .checkbox-input { + margin-top: 8px; +} + +.wp-customizer .menu-settings .menu-theme-locations { + border-top: 1px solid #ccc; +} + +.wp-customizer .menu-settings { + margin-top: 36px; + border-top: none; +} + +.wp-customizer .menu-location-settings { + margin-top: 12px; + border-top: none; +} + +.wp-customizer .control-section-nav_menu .menu-location-settings { + margin-top: 24px; + border-top: 1px solid #ddd; +} + +.wp-customizer .control-section-nav_menu .menu-location-settings, +.customize-control-nav_menu_auto_add { + padding-top: 12px; +} + +.menu-location-settings .customize-control-checkbox .theme-location-set { + line-height: 1; +} + +.customize-control-nav_menu_auto_add label { + vertical-align: top; +} + +.menu-location-settings .new-menu-locations-widget-note { + display: block; +} + +.customize-control-menu { + margin-top: 4px; +} + +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle { + color: #555; +} + +/* Screen Options */ +.customize-screen-options-toggle { + background: none; + border: none; + color: #555; + cursor: pointer; + margin: 0; + padding: 20px; + position: absolute; + left: 0; + top: 30px; +} + +#customize-controls .customize-info .customize-help-toggle { + padding: 20px; +} + +#customize-controls .customize-info .customize-help-toggle:before { + padding: 4px; +} + +.customize-screen-options-toggle:hover, +.customize-screen-options-toggle:active, +.customize-screen-options-toggle:focus, +.active-menu-screen-options .customize-screen-options-toggle, +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:hover, +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:active, +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:focus { + color: #0073aa; +} + +.customize-screen-options-toggle:focus, +#customize-controls .customize-info .customize-help-toggle:focus { + outline: none; +} + +.customize-screen-options-toggle:before { + -moz-osx-font-smoothing: grayscale; + border: none; + content: "\f111"; + display: block; + font: 18px/1 dashicons; + padding: 5px; + text-align: center; + text-decoration: none !important; + text-indent: 0; + right: 6px; + position: absolute; + top: 6px; +} + +.customize-screen-options-toggle:focus:before, +#customize-controls .customize-info .customize-help-toggle:focus:before { + border-radius: 100%; +} + +.wp-customizer #screen-options-wrap { + display: none; + background: #fff; + border-top: 1px solid #ddd; + padding: 4px 15px 15px; +} + +.wp-customizer .metabox-prefs label { + display: block; + padding-left: 0; + line-height: 30px; +} + +/* rework the arrow indicator implementation for NVDA bug same as #32715 */ +.wp-customizer .toggle-indicator { + display: inline-block; + font-size: 20px; + line-height: 1; +} + +.rtl .wp-customizer .toggle-indicator { + text-indent: 1px; /* account for the dashicon alignment */ +} + +.wp-customizer .menu-item .item-edit .toggle-indicator:before, +#available-menu-items .accordion-section-title .toggle-indicator:before { + content: "\f140"; + display: block; + padding: 1px 0px 1px 2px; + speak: none; + border-radius: 50%; + color: #72777c; + font: normal 20px/1 dashicons; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.control-section-nav_menu .field-link-target, +.control-section-nav_menu .field-title-attribute, +.control-section-nav_menu .field-css-classes, +.control-section-nav_menu .field-xfn, +.control-section-nav_menu .field-description { + display: none; +} + +.control-section-nav_menu.field-link-target-active .field-link-target, +.control-section-nav_menu.field-title-attribute-active .field-title-attribute, +.control-section-nav_menu.field-css-classes-active .field-css-classes, +.control-section-nav_menu.field-xfn-active .field-xfn, +.control-section-nav_menu.field-description-active .field-description { + display: block; +} + +/* WARNING: The 20px factor is hard-coded in JS. */ +.menu-item-depth-0 { margin-right: 0; } +.menu-item-depth-1 { margin-right: 20px; } +.menu-item-depth-2 { margin-right: 40px; } +.menu-item-depth-3 { margin-right: 60px; } +.menu-item-depth-4 { margin-right: 80px; } +.menu-item-depth-5 { margin-right: 100px; } +.menu-item-depth-6 { margin-right: 120px; } +.menu-item-depth-7 { margin-right: 140px; } +.menu-item-depth-8 { margin-right: 160px; } /* Not likely to be used or useful beyond this depth */ +.menu-item-depth-9 { margin-right: 180px; } +.menu-item-depth-10 { margin-right: 200px; } +.menu-item-depth-11 { margin-right: 220px; } + +/* @todo handle .menu-item-settings width */ +.menu-item-depth-0 > .menu-item-bar { margin-left: 0; } +.menu-item-depth-1 > .menu-item-bar { margin-left: 20px; } +.menu-item-depth-2 > .menu-item-bar { margin-left: 40px; } +.menu-item-depth-3 > .menu-item-bar { margin-left: 60px; } +.menu-item-depth-4 > .menu-item-bar { margin-left: 80px; } +.menu-item-depth-5 > .menu-item-bar { margin-left: 100px; } +.menu-item-depth-6 > .menu-item-bar { margin-left: 120px; } +.menu-item-depth-7 > .menu-item-bar { margin-left: 140px; } +.menu-item-depth-8 > .menu-item-bar { margin-left: 160px; } +.menu-item-depth-9 > .menu-item-bar { margin-left: 180px; } +.menu-item-depth-10 > .menu-item-bar { margin-left: 200px; } +.menu-item-depth-11 > .menu-item-bar { margin-left: 220px; } + +/* Submenu left margin. */ +.menu-item-depth-0 .menu-item-transport { margin-right: 0; } +.menu-item-depth-1 .menu-item-transport { margin-right: -20px; } +.menu-item-depth-3 .menu-item-transport { margin-right: -60px; } +.menu-item-depth-4 .menu-item-transport { margin-right: -80px; } +.menu-item-depth-2 .menu-item-transport { margin-right: -40px; } +.menu-item-depth-5 .menu-item-transport { margin-right: -100px; } +.menu-item-depth-6 .menu-item-transport { margin-right: -120px; } +.menu-item-depth-7 .menu-item-transport { margin-right: -140px; } +.menu-item-depth-8 .menu-item-transport { margin-right: -160px; } +.menu-item-depth-9 .menu-item-transport { margin-right: -180px; } +.menu-item-depth-10 .menu-item-transport { margin-right: -200px; } +.menu-item-depth-11 .menu-item-transport { margin-right: -220px; } + +/* WARNING: The 20px factor is hard-coded in JS. */ +.reordering .menu-item-depth-0 { margin-right: 0; } +.reordering .menu-item-depth-1 { margin-right: 15px; } +.reordering .menu-item-depth-2 { margin-right: 30px; } +.reordering .menu-item-depth-3 { margin-right: 45px; } +.reordering .menu-item-depth-4 { margin-right: 60px; } +.reordering .menu-item-depth-5 { margin-right: 75px; } +.reordering .menu-item-depth-6 { margin-right: 90px; } +.reordering .menu-item-depth-7 { margin-right: 105px; } +.reordering .menu-item-depth-8 { margin-right: 120px; } /* Not likely to be used or useful beyond this depth */ +.reordering .menu-item-depth-9 { margin-right: 135px; } +.reordering .menu-item-depth-10 { margin-right: 150px; } +.reordering .menu-item-depth-11 { margin-right: 165px; } + +.reordering .menu-item-depth-0 > .menu-item-bar { margin-left: 0; } +.reordering .menu-item-depth-1 > .menu-item-bar { margin-left: 15px; } +.reordering .menu-item-depth-2 > .menu-item-bar { margin-left: 30px; } +.reordering .menu-item-depth-3 > .menu-item-bar { margin-left: 45px; } +.reordering .menu-item-depth-4 > .menu-item-bar { margin-left: 60px; } +.reordering .menu-item-depth-5 > .menu-item-bar { margin-left: 75px; } +.reordering .menu-item-depth-6 > .menu-item-bar { margin-left: 90px; } +.reordering .menu-item-depth-7 > .menu-item-bar { margin-left: 105px; } +.reordering .menu-item-depth-8 > .menu-item-bar { margin-left: 120px; } +.reordering .menu-item-depth-9 > .menu-item-bar { margin-left: 135px; } +.reordering .menu-item-depth-10 > .menu-item-bar { margin-left: 150px; } +.reordering .menu-item-depth-11 > .menu-item-bar { margin-left: 165px; } + +.control-section-nav_menu.menu .menu-item-edit-active { + margin-right: 0; +} + +.control-section-nav_menu.menu .menu-item-edit-active .menu-item-bar { + margin-left: 0; +} + +.control-section-nav_menu.menu .sortable-placeholder { + margin-top: 0; + margin-bottom: 1px; + max-width: calc(100% - 2px); + float: right; + display: list-item; + border-color: #a0a5aa; +} + +.menu-item-transport li.customize-control { + float: none; +} + +.control-section-nav_menu.menu ul.menu-item-transport .menu-item-bar { + margin-top: 0; +} + +/** + * Add-menu-items mode + */ + +.adding-menu-items .control-section { + opacity: .4; +} + +.adding-menu-items .control-panel.control-section, +.adding-menu-items .control-section.open { + opacity: 1; +} + +.menu-item-bar .item-delete { + color: #a00; + position: absolute; + top: 2px; + left: -19px; + width: 30px; + height: 38px; + cursor: pointer; + display: none; +} + +.menu-item-bar .item-delete:before { + content: "\f335"; + position: absolute; + top: 9px; + right: 5px; + border-radius: 50%; + font: normal 20px/1 dashicons; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ie8 .menu-item-bar .item-delete:before { + top: -10px; +} + +.menu-item-bar .item-delete:hover, +.menu-item-bar .item-delete:focus { + box-shadow: none; + outline: none; + color: #dc3232; +} + +.adding-menu-items .menu-item-bar .item-edit { + display: none; +} + +.adding-menu-items .menu-item-bar .item-delete { + display: block; +} + +/** + * Styles for menu-item addition panel + */ + +#available-menu-items.opening { + overflow-y: hidden; /* avoid scrollbar jitter with animating heights */ +} + +#available-menu-items #available-menu-items-search.open { + height: 100%; + border-bottom: none; +} + +#available-menu-items .accordion-section-title { + border-right: none; + border-left: none; + background: #fff; + transition: background-color 0.15s; + /* Reset the value inherited from the base .accordion-section-title style. Ticket #37589. */ + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} + +#available-menu-items .open .accordion-section-title, +#available-menu-items #available-menu-items-search .accordion-section-title { + background: #eee; +} + +/* rework the arrow indicator implementation for NVDA bug see #32715 */ +#available-menu-items .accordion-section-title:after { + content: none !important; +} + +#available-menu-items .accordion-section-title:hover .toggle-indicator:before, +#available-menu-items .button-link:hover .toggle-indicator:before, +#available-menu-items .button-link:focus .toggle-indicator:before { + color: #23282d; +} + +#available-menu-items .open .accordion-section-title .toggle-indicator:before { + content: "\f142"; + color: #23282d; +} + +#available-menu-items .available-menu-items-list { + overflow-y: auto; + max-height: 200px; /* This gets set in JS to fit the screen size, and based on # of sections. */ + background: transparent; +} + +#available-menu-items .accordion-section-title button { + display: block; + width: 28px; + height: 35px; + position: absolute; + top: 5px; + left: 5px; + box-shadow: none; + outline: none; + cursor: pointer; + text-align: center; +} + +#available-menu-items .accordion-section-title .no-items, +#available-menu-items .cannot-expand .accordion-section-title .spinner, +#available-menu-items .cannot-expand .accordion-section-title > button { + display: none; +} + +#available-menu-items-search.cannot-expand .accordion-section-title .spinner { + display: block; +} + +#available-menu-items .cannot-expand .accordion-section-title .no-items { + float: left; + color: #555d66; + font-weight: 400; + margin-right: 5px; +} + +#available-menu-items .accordion-section-content { + max-height: 290px; + margin: 0; + padding: 0; + position: relative; + background: transparent; +} + +#available-menu-items .accordion-section-content .available-menu-items-list { + margin: 0 0 45px 0; + padding: 1px 15px 15px 15px; +} + +#available-menu-items .accordion-section-content .available-menu-items-list:only-child { /* Types that do not support new items for the current user */ + margin-bottom: 0; +} + +#new-custom-menu-item .accordion-section-content { + padding: 0 15px 15px 15px; +} + +#available-menu-items .menu-item-tpl { + margin: 0; +} + +#custom-menu-item-name.invalid, +#custom-menu-item-url.invalid, +.edit-menu-item-url.invalid, +.menu-name-field.invalid, +.menu-name-field.invalid:focus, +#available-menu-items .new-content-item .create-item-input.invalid, +#available-menu-items .new-content-item .create-item-input.invalid:focus { + border: 1px solid #dc3232; +} + +#available-menu-items .menu-item-handle .item-type { + padding-left: 0; +} + +#available-menu-items .menu-item-handle .item-title { + padding-right: 20px; +} + +#available-menu-items .menu-item-handle { + cursor: pointer; +} + +#available-menu-items .menu-item-handle { + box-shadow: none; + margin-top: -1px; +} + +#available-menu-items .menu-item-handle:hover { + z-index: 1; +} + +#available-menu-items .item-title h4 { + padding: 0 0 5px; + font-size: 14px; +} + +#available-menu-items .item-add { + position: absolute; + top: 1px; + right: 1px; + color: #82878c; + width: 30px; + height: 38px; + box-shadow: none; + outline: none; + cursor: pointer; + text-align: center; +} + +#available-menu-items .menu-item-handle .item-add:focus { + color: #23282d; +} + +#available-menu-items .item-add:before { + content: "\f543"; + position: relative; + right: 2px; + top: 3px; + display: inline-block; + height: 20px; + border-radius: 50%; + font: normal 20px/1.05 dashicons; /* line height is to account for the dashicon's vertical alignment */ +} + +#available-menu-items .menu-item-handle.item-added .item-type, +#available-menu-items .menu-item-handle.item-added .item-title, +#available-menu-items .menu-item-handle.item-added:hover .item-add, +#available-menu-items .menu-item-handle.item-added .item-add:focus { + color: #82878c; +} + +#available-menu-items .menu-item-handle.item-added .item-add:before { + content: "\f147"; +} + +#available-menu-items .accordion-section-title.loading .spinner, +#available-menu-items-search.loading .accordion-section-title .spinner { + visibility: visible; + margin: 0 20px; +} + +#available-menu-items-search .spinner { + position: absolute; + top: 20px; /* 13 container padding +1 input margin +6 ( ( 32 input height - 20 spinner height ) / 2 ) */ + left: 21px; + margin: 0 !important; +} + +/* search results list */ +#available-menu-items #available-menu-items-search .accordion-section-content { + position: absolute; + right: 0; + top: 60px; /* below title div / search input */ + bottom: 0px; /* 100% height that still triggers lazy load */ + max-height: none; + width: 100%; + padding: 1px 15px 15px; + box-sizing: border-box; +} + +#available-menu-items-search .nothing-found { + /* Compensate the 1px top padding of the container. */ + margin-top: -1px; +} + +#available-menu-items-search .accordion-section-title:after { + display: none; +} + +#available-menu-items-search .accordion-section-content:empty { + min-height: 0; + padding: 0; +} + +#available-menu-items-search.loading .accordion-section-content div { + opacity: .5; +} + +#available-menu-items-search.loading.loading-more .accordion-section-content div { + opacity: 1; +} + +#customize-preview { + transition: all 0.2s; +} + +body.adding-menu-items #available-menu-items { + right: 0; + visibility: visible; +} + +body.adding-menu-items .wp-full-overlay-main { + right: 300px; +} + +body.adding-menu-items #customize-preview { + opacity: 0.4; +} + +body.adding-menu-items #customize-preview iframe { + pointer-events: none; +} + +.menu-item-handle .spinner { + display: none; + float: right; + margin: 0 0 0 8px; +} + +.nav-menu-inserted-item-loading .spinner { + display: block; +} + +.nav-menu-inserted-item-loading .menu-item-handle .item-type { + padding: 0 8px 0 0; +} + +.nav-menu-inserted-item-loading .menu-item-handle, +.added-menu-item .menu-item-handle.loading { + padding: 10px 8px 10px 15px; + cursor: default; + opacity: .5; + background: #fff; + color: #727773; +} + +.added-menu-item .menu-item-handle { + transition-property: opacity, background, color; + transition-duration: 1.25s; + transition-timing-function: cubic-bezier( .25, -2.5, .75, 8 ); /* Replacement for .hide().fadeIn('slow') in JS to add emphasis when it's loaded. */ +} + +/* Add/delete Menus */ + +#customize-theme-controls .control-panel-content .control-section-nav_menu:nth-last-child(2) .accordion-section-title { + border-bottom-color: #ddd; +} + +/* @todo update selector */ +#accordion-section-add_menu { + margin: 15px 12px; +} + +#accordion-section-add_menu h3 { + text-align: left; +} + +#accordion-section-add_menu h3, +#accordion-section-add_menu .customize-add-menu-button { + margin: 0; +} + +#accordion-section-add_menu .customize-add-menu-button { + font-weight: normal; +} + +#create-new-menu-submit { + float: left; + margin: 0 0 12px 0; +} + +.menu-delete-item { + float: right; + padding: 1em 0; + width: 100%; +} + +.assigned-menu-locations-title p { + margin: 0 0 8px 0; +} + +li.assigned-to-menu-location .menu-delete-item { + display: none; +} + +li.assigned-to-menu-location .add-new-menu-item { + margin-bottom: 1em; +} + +.menu-item-handle { + margin-top: -1px; +} +.ui-sortable-disabled .menu-item-handle { + cursor: default; +} + +.menu-item-handle:hover { + position: relative; + z-index: 10; + color: #0073aa; +} + +.menu-item-handle:hover .item-type, +.menu-item-handle:hover .item-edit, +#available-menu-items .menu-item-handle:hover .item-add { + color: #0073aa; +} + +.menu-item-edit-active .menu-item-handle { + border-color: #999; + border-bottom: none; +} + +.customize-control-nav_menu_item { + margin-bottom: 0; +} + +.customize-control-nav_menu .new-menu-item-invitation { + margin-top: 0; + margin-bottom: 0; +} + +.customize-control-nav_menu .customize-control-nav_menu-buttons { + margin-top: 12px; +} + +/** + * box-shadows + */ + +.wp-customizer .menu-item .submitbox .submitdelete:focus, +.customize-screen-options-toggle:focus:before, +#customize-controls .customize-info .customize-help-toggle:focus:before, +.wp-customizer button:focus .toggle-indicator:before, +.menu-delete:focus, +.menu-item-bar .item-delete:focus:before, +#available-menu-items .item-add:focus:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + + +@media screen and ( max-width: 782px ) { + #available-menu-items #available-menu-items-search .accordion-section-content { + top: 63px; + } +} + +@media screen and ( max-width: 640px ) { + #available-menu-items #available-menu-items-search .accordion-section-content { + top: 130px; + } +} diff --git a/wp-admin/css/customize-nav-menus-rtl.min.css b/wp-admin/css/customize-nav-menus-rtl.min.css new file mode 100644 index 0000000..4eddad2 --- /dev/null +++ b/wp-admin/css/customize-nav-menus-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#customize-theme-controls .customize-control-description.customize-section-title-menu_locations-description,.wp-customizer .menu-item-settings p.description{font-style:normal}#customize-theme-controls #accordion-section-menu_locations{position:relative;margin-top:30px}#customize-theme-controls #accordion-section-menu_locations>.accordion-section-title{border-bottom-color:#ddd;margin-top:15px}#customize-theme-controls .customize-section-title-menu_locations-description,#customize-theme-controls .customize-section-title-menu_locations-heading,#customize-theme-controls .customize-section-title-nav_menus-heading{padding:0 12px}.menu-in-location,.menu-in-locations{display:block;font-weight:600;font-size:10px}#customize-controls .control-section .accordion-section-title:focus .menu-in-location,#customize-controls .control-section .accordion-section-title:hover .menu-in-location,#customize-controls .theme-location-set{color:#555}.customize-control-nav_menu_location .create-menu,.customize-control-nav_menu_location .edit-menu{margin-right:6px;vertical-align:middle;line-height:28px}#customize-controls .customize-control-nav_menu_name{margin-bottom:12px}.customize-control-nav_menu_name p:last-of-type{margin-bottom:0}#customize-new-menu-submit{float:left;min-width:85px}.wp-customizer .menu-item-bar .menu-item-handle,.wp-customizer .menu-item-settings,.wp-customizer .menu-item-settings .description-thin{box-sizing:border-box}.wp-customizer .menu-item-bar{margin:0}.wp-customizer .menu-item-bar .menu-item-handle{width:100%;background:#fff}.wp-customizer .menu-item-handle .item-title{margin-left:0}.wp-customizer .menu-item-handle .item-type{padding:1px 5px 0 21px;float:left;text-align:left}.wp-customizer .menu-item-handle:hover{z-index:8}.customize-control-nav_menu_item.has-notifications .menu-item-handle{border-right:4px solid #00a0d2}.wp-customizer .menu-item-settings{max-width:100%;overflow:hidden;z-index:8;padding:10px;background:#eee;border:1px solid #999;border-top:none}.wp-customizer .menu-item-settings .description-thin{width:100%;height:auto;margin:0 0 8px}.wp-customizer .menu-item-settings input[type=text]{width:100%}.wp-customizer .menu-item-settings .submitbox{margin:0;padding:0}.wp-customizer .menu-item-settings .link-to-original{padding:5px 0;border:none;font-style:normal;margin:0;width:100%}.wp-customizer .menu-item .submitbox .submitdelete{float:right;margin:6px 0 0;padding:0;cursor:pointer}.menu-item-reorder-nav{display:none;background-color:#fff;position:absolute;top:0;left:0}.menus-move-left:before{content:"\f345"}.menus-move-right:before{content:"\f341"}.reordering .menu-item .item-controls,.reordering .menu-item .item-type{display:none}.menu-location-settings .new-menu-locations-widget-note,.reordering .menu-item-reorder-nav{display:block}.customize-control input.menu-name-field{width:100%}.wp-customizer .menu-item .item-edit{position:absolute;left:-19px;top:2px;display:block;width:30px;height:38px;margin-left:0!important;box-shadow:none;outline:0;overflow:hidden;cursor:pointer;text-align:center}.wp-customizer .menu-item.menu-item-edit-active .item-edit .toggle-indicator:before{content:"\f142"}.wp-customizer .menu-settings dl{margin:12px 0 0;padding:0}.wp-customizer .menu-settings .checkbox-input{margin-top:8px}.wp-customizer .menu-settings .menu-theme-locations{border-top:1px solid #ccc}.wp-customizer .menu-settings{margin-top:36px;border-top:none}.wp-customizer .menu-location-settings{margin-top:12px;border-top:none}.wp-customizer .control-section-nav_menu .menu-location-settings{margin-top:24px;border-top:1px solid #ddd}.customize-control-nav_menu_auto_add,.wp-customizer .control-section-nav_menu .menu-location-settings{padding-top:12px}.menu-location-settings .customize-control-checkbox .theme-location-set{line-height:1}.customize-control-nav_menu_auto_add label{vertical-align:top}.customize-control-menu{margin-top:4px}#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle{color:#555}.customize-screen-options-toggle{background:0 0;border:none;color:#555;cursor:pointer;margin:0;padding:20px;position:absolute;left:0;top:30px}#customize-controls .customize-info .customize-help-toggle{padding:20px}#customize-controls .customize-info .customize-help-toggle:before{padding:4px}#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:active,#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:focus,#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:hover,.active-menu-screen-options .customize-screen-options-toggle,.customize-screen-options-toggle:active,.customize-screen-options-toggle:focus,.customize-screen-options-toggle:hover{color:#0073aa}#customize-controls .customize-info .customize-help-toggle:focus,.customize-screen-options-toggle:focus{outline:0}.customize-screen-options-toggle:before{-moz-osx-font-smoothing:grayscale;border:none;content:"\f111";display:block;font:18px/1 dashicons;padding:5px;text-align:center;text-decoration:none!important;text-indent:0;right:6px;position:absolute;top:6px}#customize-controls .customize-info .customize-help-toggle:focus:before,.customize-screen-options-toggle:focus:before{border-radius:100%}.wp-customizer #screen-options-wrap{display:none;background:#fff;border-top:1px solid #ddd;padding:4px 15px 15px}.wp-customizer .metabox-prefs label{display:block;padding-left:0;line-height:30px}.wp-customizer .toggle-indicator{display:inline-block;font-size:20px;line-height:1}.rtl .wp-customizer .toggle-indicator{text-indent:1px}#available-menu-items .accordion-section-title .toggle-indicator:before,.wp-customizer .menu-item .item-edit .toggle-indicator:before{content:"\f140";display:block;padding:1px 0 1px 2px;speak:none;border-radius:50%;color:#72777c;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.control-section-nav_menu .field-css-classes,.control-section-nav_menu .field-description,.control-section-nav_menu .field-link-target,.control-section-nav_menu .field-title-attribute,.control-section-nav_menu .field-xfn{display:none}.control-section-nav_menu.field-css-classes-active .field-css-classes,.control-section-nav_menu.field-description-active .field-description,.control-section-nav_menu.field-link-target-active .field-link-target,.control-section-nav_menu.field-title-attribute-active .field-title-attribute,.control-section-nav_menu.field-xfn-active .field-xfn{display:block}.menu-item-depth-0{margin-right:0}.menu-item-depth-1{margin-right:20px}.menu-item-depth-2{margin-right:40px}.menu-item-depth-3{margin-right:60px}.menu-item-depth-4{margin-right:80px}.menu-item-depth-5{margin-right:100px}.menu-item-depth-6{margin-right:120px}.menu-item-depth-7{margin-right:140px}.menu-item-depth-8{margin-right:160px}.menu-item-depth-9{margin-right:180px}.menu-item-depth-10{margin-right:200px}.menu-item-depth-11{margin-right:220px}.menu-item-depth-0>.menu-item-bar{margin-left:0}.menu-item-depth-1>.menu-item-bar{margin-left:20px}.menu-item-depth-2>.menu-item-bar{margin-left:40px}.menu-item-depth-3>.menu-item-bar{margin-left:60px}.menu-item-depth-4>.menu-item-bar{margin-left:80px}.menu-item-depth-5>.menu-item-bar{margin-left:100px}.menu-item-depth-6>.menu-item-bar{margin-left:120px}.menu-item-depth-7>.menu-item-bar{margin-left:140px}.menu-item-depth-8>.menu-item-bar{margin-left:160px}.menu-item-depth-9>.menu-item-bar{margin-left:180px}.menu-item-depth-10>.menu-item-bar{margin-left:200px}.menu-item-depth-11>.menu-item-bar{margin-left:220px}.menu-item-depth-0 .menu-item-transport{margin-right:0}.menu-item-depth-1 .menu-item-transport{margin-right:-20px}.menu-item-depth-3 .menu-item-transport{margin-right:-60px}.menu-item-depth-4 .menu-item-transport{margin-right:-80px}.menu-item-depth-2 .menu-item-transport{margin-right:-40px}.menu-item-depth-5 .menu-item-transport{margin-right:-100px}.menu-item-depth-6 .menu-item-transport{margin-right:-120px}.menu-item-depth-7 .menu-item-transport{margin-right:-140px}.menu-item-depth-8 .menu-item-transport{margin-right:-160px}.menu-item-depth-9 .menu-item-transport{margin-right:-180px}.menu-item-depth-10 .menu-item-transport{margin-right:-200px}.menu-item-depth-11 .menu-item-transport{margin-right:-220px}.reordering .menu-item-depth-0{margin-right:0}.reordering .menu-item-depth-1{margin-right:15px}.reordering .menu-item-depth-2{margin-right:30px}.reordering .menu-item-depth-3{margin-right:45px}.reordering .menu-item-depth-4{margin-right:60px}.reordering .menu-item-depth-5{margin-right:75px}.reordering .menu-item-depth-6{margin-right:90px}.reordering .menu-item-depth-7{margin-right:105px}.reordering .menu-item-depth-8{margin-right:120px}.reordering .menu-item-depth-9{margin-right:135px}.reordering .menu-item-depth-10{margin-right:150px}.reordering .menu-item-depth-11{margin-right:165px}.reordering .menu-item-depth-0>.menu-item-bar{margin-left:0}.reordering .menu-item-depth-1>.menu-item-bar{margin-left:15px}.reordering .menu-item-depth-2>.menu-item-bar{margin-left:30px}.reordering .menu-item-depth-3>.menu-item-bar{margin-left:45px}.reordering .menu-item-depth-4>.menu-item-bar{margin-left:60px}.reordering .menu-item-depth-5>.menu-item-bar{margin-left:75px}.reordering .menu-item-depth-6>.menu-item-bar{margin-left:90px}.reordering .menu-item-depth-7>.menu-item-bar{margin-left:105px}.reordering .menu-item-depth-8>.menu-item-bar{margin-left:120px}.reordering .menu-item-depth-9>.menu-item-bar{margin-left:135px}.reordering .menu-item-depth-10>.menu-item-bar{margin-left:150px}.reordering .menu-item-depth-11>.menu-item-bar{margin-left:165px}.control-section-nav_menu.menu .menu-item-edit-active{margin-right:0}.control-section-nav_menu.menu .menu-item-edit-active .menu-item-bar{margin-left:0}.control-section-nav_menu.menu .sortable-placeholder{margin-top:0;margin-bottom:1px;max-width:calc(100% - 2px);float:right;display:list-item;border-color:#a0a5aa}.menu-item-transport li.customize-control{float:none}.control-section-nav_menu.menu ul.menu-item-transport .menu-item-bar{margin-top:0}.adding-menu-items .control-section{opacity:.4}.adding-menu-items .control-panel.control-section,.adding-menu-items .control-section.open{opacity:1}.menu-item-bar .item-delete{color:#a00;position:absolute;top:2px;left:-19px;width:30px;height:38px;cursor:pointer;display:none}.menu-item-bar .item-delete:before{content:"\f335";position:absolute;top:9px;right:5px;border-radius:50%;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ie8 .menu-item-bar .item-delete:before{top:-10px}.menu-item-bar .item-delete:focus,.menu-item-bar .item-delete:hover{box-shadow:none;outline:0;color:#dc3232}.adding-menu-items .menu-item-bar .item-edit{display:none}.adding-menu-items .menu-item-bar .item-delete{display:block}#available-menu-items.opening{overflow-y:hidden}#available-menu-items #available-menu-items-search.open{height:100%;border-bottom:none}#available-menu-items .accordion-section-title{border-right:none;border-left:none;background:#fff;transition:background-color .15s;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}#available-menu-items #available-menu-items-search .accordion-section-title,#available-menu-items .open .accordion-section-title{background:#eee}#available-menu-items .accordion-section-title:after{content:none!important}#available-menu-items .accordion-section-title:hover .toggle-indicator:before,#available-menu-items .button-link:focus .toggle-indicator:before,#available-menu-items .button-link:hover .toggle-indicator:before{color:#23282d}#available-menu-items .open .accordion-section-title .toggle-indicator:before{content:"\f142";color:#23282d}#available-menu-items .available-menu-items-list{overflow-y:auto;max-height:200px;background:0 0}#available-menu-items .accordion-section-title button{display:block;width:28px;height:35px;position:absolute;top:5px;left:5px;box-shadow:none;outline:0;cursor:pointer;text-align:center}#available-menu-items .accordion-section-title .no-items,#available-menu-items .cannot-expand .accordion-section-title .spinner,#available-menu-items .cannot-expand .accordion-section-title>button{display:none}#available-menu-items-search.cannot-expand .accordion-section-title .spinner{display:block}#available-menu-items .cannot-expand .accordion-section-title .no-items{float:left;color:#555d66;font-weight:400;margin-right:5px}#available-menu-items .accordion-section-content{max-height:290px;margin:0;padding:0;position:relative;background:0 0}#available-menu-items .accordion-section-content .available-menu-items-list{margin:0 0 45px;padding:1px 15px 15px}#available-menu-items .accordion-section-content .available-menu-items-list:only-child{margin-bottom:0}#new-custom-menu-item .accordion-section-content{padding:0 15px 15px}#available-menu-items .menu-item-tpl{margin:0}#available-menu-items .new-content-item .create-item-input.invalid,#available-menu-items .new-content-item .create-item-input.invalid:focus,#custom-menu-item-name.invalid,#custom-menu-item-url.invalid,.edit-menu-item-url.invalid,.menu-name-field.invalid,.menu-name-field.invalid:focus{border:1px solid #dc3232}#available-menu-items .menu-item-handle .item-type{padding-left:0}#available-menu-items .menu-item-handle .item-title{padding-right:20px}#available-menu-items .menu-item-handle{cursor:pointer;box-shadow:none;margin-top:-1px}#available-menu-items .menu-item-handle:hover{z-index:1}#available-menu-items .item-title h4{padding:0 0 5px;font-size:14px}#available-menu-items .item-add{position:absolute;top:1px;right:1px;color:#82878c;width:30px;height:38px;box-shadow:none;outline:0;cursor:pointer;text-align:center}#available-menu-items .menu-item-handle .item-add:focus{color:#23282d}#available-menu-items .item-add:before{content:"\f543";position:relative;right:2px;top:3px;display:inline-block;height:20px;border-radius:50%;font:400 20px/1.05 dashicons}#available-menu-items .menu-item-handle.item-added .item-add:focus,#available-menu-items .menu-item-handle.item-added .item-title,#available-menu-items .menu-item-handle.item-added .item-type,#available-menu-items .menu-item-handle.item-added:hover .item-add{color:#82878c}#available-menu-items .menu-item-handle.item-added .item-add:before{content:"\f147"}#available-menu-items .accordion-section-title.loading .spinner,#available-menu-items-search.loading .accordion-section-title .spinner{visibility:visible;margin:0 20px}#available-menu-items-search .spinner{position:absolute;top:20px;left:21px;margin:0!important}#available-menu-items #available-menu-items-search .accordion-section-content{position:absolute;right:0;top:60px;bottom:0;max-height:none;width:100%;padding:1px 15px 15px;box-sizing:border-box}#available-menu-items-search .nothing-found{margin-top:-1px}#available-menu-items-search .accordion-section-title:after{display:none}#available-menu-items-search .accordion-section-content:empty{min-height:0;padding:0}#available-menu-items-search.loading .accordion-section-content div{opacity:.5}#available-menu-items-search.loading.loading-more .accordion-section-content div{opacity:1}#customize-preview{transition:all .2s}body.adding-menu-items #available-menu-items{right:0;visibility:visible}body.adding-menu-items .wp-full-overlay-main{right:300px}body.adding-menu-items #customize-preview{opacity:.4}body.adding-menu-items #customize-preview iframe{pointer-events:none}.menu-item-handle .spinner{display:none;float:right;margin:0 0 0 8px}.nav-menu-inserted-item-loading .spinner{display:block}.nav-menu-inserted-item-loading .menu-item-handle .item-type{padding:0 8px 0 0}.added-menu-item .menu-item-handle.loading,.nav-menu-inserted-item-loading .menu-item-handle{padding:10px 8px 10px 15px;cursor:default;opacity:.5;background:#fff;color:#727773}.added-menu-item .menu-item-handle{transition-property:opacity,background,color;transition-duration:1.25s;transition-timing-function:cubic-bezier(.25,-2.5,.75,8)}#customize-theme-controls .control-panel-content .control-section-nav_menu:nth-last-child(2) .accordion-section-title{border-bottom-color:#ddd}#accordion-section-add_menu{margin:15px 12px}#accordion-section-add_menu h3{text-align:left}#accordion-section-add_menu .customize-add-menu-button,#accordion-section-add_menu h3{margin:0}#accordion-section-add_menu .customize-add-menu-button{font-weight:400}#create-new-menu-submit{float:left;margin:0 0 12px}.menu-delete-item{float:right;padding:1em 0;width:100%}.assigned-menu-locations-title p{margin:0 0 8px}li.assigned-to-menu-location .menu-delete-item{display:none}li.assigned-to-menu-location .add-new-menu-item{margin-bottom:1em}.menu-item-handle{margin-top:-1px}.ui-sortable-disabled .menu-item-handle{cursor:default}.menu-item-handle:hover{position:relative;z-index:10;color:#0073aa}#available-menu-items .menu-item-handle:hover .item-add,.menu-item-handle:hover .item-edit,.menu-item-handle:hover .item-type{color:#0073aa}.menu-item-edit-active .menu-item-handle{border-color:#999;border-bottom:none}.customize-control-nav_menu_item{margin-bottom:0}.customize-control-nav_menu .new-menu-item-invitation{margin-top:0;margin-bottom:0}.customize-control-nav_menu .customize-control-nav_menu-buttons{margin-top:12px}#available-menu-items .item-add:focus:before,#customize-controls .customize-info .customize-help-toggle:focus:before,.customize-screen-options-toggle:focus:before,.menu-delete:focus,.menu-item-bar .item-delete:focus:before,.wp-customizer .menu-item .submitbox .submitdelete:focus,.wp-customizer button:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}@media screen and (max-width:782px){#available-menu-items #available-menu-items-search .accordion-section-content{top:63px}}@media screen and (max-width:640px){#available-menu-items #available-menu-items-search .accordion-section-content{top:130px}} \ No newline at end of file diff --git a/wp-admin/css/customize-nav-menus.css b/wp-admin/css/customize-nav-menus.css new file mode 100644 index 0000000..899c078 --- /dev/null +++ b/wp-admin/css/customize-nav-menus.css @@ -0,0 +1,887 @@ +#customize-theme-controls #accordion-section-menu_locations { + position: relative; + margin-top: 30px; +} + +#customize-theme-controls #accordion-section-menu_locations > .accordion-section-title { + border-bottom-color: #ddd; + margin-top: 15px; +} + +#customize-theme-controls .customize-section-title-nav_menus-heading, +#customize-theme-controls .customize-section-title-menu_locations-heading, +#customize-theme-controls .customize-section-title-menu_locations-description { + padding: 0 12px 0 12px; +} + +#customize-theme-controls .customize-control-description.customize-section-title-menu_locations-description { + /* Override the default italic style for control descriptions */ + font-style: normal; +} + +.menu-in-location, +.menu-in-locations { + display: block; + font-weight: 600; + font-size: 10px; +} + +#customize-controls .theme-location-set, +#customize-controls .control-section .accordion-section-title:focus .menu-in-location, +#customize-controls .control-section .accordion-section-title:hover .menu-in-location { + color: #555; +} + +/* The `edit-menu` and `create-menu` buttons also use the `button-link` class. */ +.customize-control-nav_menu_location .edit-menu, +.customize-control-nav_menu_location .create-menu { + margin-left: 6px; + vertical-align: middle; + line-height: 28px; +} + +#customize-controls .customize-control-nav_menu_name { + margin-bottom: 12px; +} + +.customize-control-nav_menu_name p:last-of-type { + margin-bottom: 0; +} + +#customize-new-menu-submit { + float: right; + min-width: 85px; +} + +.wp-customizer .menu-item-bar .menu-item-handle, +.wp-customizer .menu-item-settings, +.wp-customizer .menu-item-settings .description-thin { + box-sizing: border-box; +} + +.wp-customizer .menu-item-bar { + margin: 0; +} + +.wp-customizer .menu-item-bar .menu-item-handle { + width: 100%; + background: #fff; +} + +.wp-customizer .menu-item-handle .item-title { + margin-right: 0; +} + +.wp-customizer .menu-item-handle .item-type { + padding: 1px 21px 0 5px; + float: right; + text-align: right; +} + +.wp-customizer .menu-item-handle:hover { + z-index: 8; +} + +.customize-control-nav_menu_item.has-notifications .menu-item-handle { + border-left: 4px solid #00a0d2; +} + +.wp-customizer .menu-item-settings { + max-width: 100%; + overflow: hidden; + z-index: 8; + padding: 10px; + background: #eee; + border: 1px solid #999; + border-top: none; +} + +.wp-customizer .menu-item-settings .description-thin { + width: 100%; + height: auto; + margin: 0 0 8px 0; +} + +.wp-customizer .menu-item-settings input[type="text"] { + width: 100%; +} + +.wp-customizer .menu-item-settings .submitbox { + margin: 0; + padding: 0; +} + +.wp-customizer .menu-item-settings .link-to-original { + padding: 5px 0; + border: none; + font-style: normal; + margin: 0; + width: 100%; +} + +.wp-customizer .menu-item .submitbox .submitdelete { + float: left; + margin: 6px 0 0; + padding: 0; + cursor: pointer; +} + + +/** + * Menu items reordering styles + */ + +.menu-item-reorder-nav { + display: none; + background-color: #fff; + position: absolute; + top: 0; + right: 0; +} + +.menus-move-left:before { + content: "\f341"; +} + +.menus-move-right:before { + content: "\f345"; +} + +.reordering .menu-item .item-controls, +.reordering .menu-item .item-type { + display: none; +} + +.reordering .menu-item-reorder-nav { + display: block; +} + +.customize-control input.menu-name-field { + width: 100%; /* Override the 98% default for customizer inputs, to align with the size of menu items. */ +} + +.wp-customizer .menu-item .item-edit { + position: absolute; + right: -19px; + top: 2px; + display: block; + width: 30px; + height: 38px; + margin-right: 0 !important; + box-shadow: none; + outline: none; + overflow: hidden; + cursor: pointer; + text-align: center; +} + +.wp-customizer .menu-item.menu-item-edit-active .item-edit .toggle-indicator:before { + content: "\f142"; +} + +.wp-customizer .menu-item-settings p.description { + font-style: normal; +} + +.wp-customizer .menu-settings dl { + margin: 12px 0 0 0; + padding: 0; +} + +.wp-customizer .menu-settings .checkbox-input { + margin-top: 8px; +} + +.wp-customizer .menu-settings .menu-theme-locations { + border-top: 1px solid #ccc; +} + +.wp-customizer .menu-settings { + margin-top: 36px; + border-top: none; +} + +.wp-customizer .menu-location-settings { + margin-top: 12px; + border-top: none; +} + +.wp-customizer .control-section-nav_menu .menu-location-settings { + margin-top: 24px; + border-top: 1px solid #ddd; +} + +.wp-customizer .control-section-nav_menu .menu-location-settings, +.customize-control-nav_menu_auto_add { + padding-top: 12px; +} + +.menu-location-settings .customize-control-checkbox .theme-location-set { + line-height: 1; +} + +.customize-control-nav_menu_auto_add label { + vertical-align: top; +} + +.menu-location-settings .new-menu-locations-widget-note { + display: block; +} + +.customize-control-menu { + margin-top: 4px; +} + +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle { + color: #555; +} + +/* Screen Options */ +.customize-screen-options-toggle { + background: none; + border: none; + color: #555; + cursor: pointer; + margin: 0; + padding: 20px; + position: absolute; + right: 0; + top: 30px; +} + +#customize-controls .customize-info .customize-help-toggle { + padding: 20px; +} + +#customize-controls .customize-info .customize-help-toggle:before { + padding: 4px; +} + +.customize-screen-options-toggle:hover, +.customize-screen-options-toggle:active, +.customize-screen-options-toggle:focus, +.active-menu-screen-options .customize-screen-options-toggle, +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:hover, +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:active, +#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:focus { + color: #0073aa; +} + +.customize-screen-options-toggle:focus, +#customize-controls .customize-info .customize-help-toggle:focus { + outline: none; +} + +.customize-screen-options-toggle:before { + -moz-osx-font-smoothing: grayscale; + border: none; + content: "\f111"; + display: block; + font: 18px/1 dashicons; + padding: 5px; + text-align: center; + text-decoration: none !important; + text-indent: 0; + left: 6px; + position: absolute; + top: 6px; +} + +.customize-screen-options-toggle:focus:before, +#customize-controls .customize-info .customize-help-toggle:focus:before { + border-radius: 100%; +} + +.wp-customizer #screen-options-wrap { + display: none; + background: #fff; + border-top: 1px solid #ddd; + padding: 4px 15px 15px; +} + +.wp-customizer .metabox-prefs label { + display: block; + padding-right: 0; + line-height: 30px; +} + +/* rework the arrow indicator implementation for NVDA bug same as #32715 */ +.wp-customizer .toggle-indicator { + display: inline-block; + font-size: 20px; + line-height: 1; +} + +.rtl .wp-customizer .toggle-indicator { + text-indent: 1px; /* account for the dashicon alignment */ +} + +.wp-customizer .menu-item .item-edit .toggle-indicator:before, +#available-menu-items .accordion-section-title .toggle-indicator:before { + content: "\f140"; + display: block; + padding: 1px 2px 1px 0px; + speak: none; + border-radius: 50%; + color: #72777c; + font: normal 20px/1 dashicons; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.control-section-nav_menu .field-link-target, +.control-section-nav_menu .field-title-attribute, +.control-section-nav_menu .field-css-classes, +.control-section-nav_menu .field-xfn, +.control-section-nav_menu .field-description { + display: none; +} + +.control-section-nav_menu.field-link-target-active .field-link-target, +.control-section-nav_menu.field-title-attribute-active .field-title-attribute, +.control-section-nav_menu.field-css-classes-active .field-css-classes, +.control-section-nav_menu.field-xfn-active .field-xfn, +.control-section-nav_menu.field-description-active .field-description { + display: block; +} + +/* WARNING: The 20px factor is hard-coded in JS. */ +.menu-item-depth-0 { margin-left: 0; } +.menu-item-depth-1 { margin-left: 20px; } +.menu-item-depth-2 { margin-left: 40px; } +.menu-item-depth-3 { margin-left: 60px; } +.menu-item-depth-4 { margin-left: 80px; } +.menu-item-depth-5 { margin-left: 100px; } +.menu-item-depth-6 { margin-left: 120px; } +.menu-item-depth-7 { margin-left: 140px; } +.menu-item-depth-8 { margin-left: 160px; } /* Not likely to be used or useful beyond this depth */ +.menu-item-depth-9 { margin-left: 180px; } +.menu-item-depth-10 { margin-left: 200px; } +.menu-item-depth-11 { margin-left: 220px; } + +/* @todo handle .menu-item-settings width */ +.menu-item-depth-0 > .menu-item-bar { margin-right: 0; } +.menu-item-depth-1 > .menu-item-bar { margin-right: 20px; } +.menu-item-depth-2 > .menu-item-bar { margin-right: 40px; } +.menu-item-depth-3 > .menu-item-bar { margin-right: 60px; } +.menu-item-depth-4 > .menu-item-bar { margin-right: 80px; } +.menu-item-depth-5 > .menu-item-bar { margin-right: 100px; } +.menu-item-depth-6 > .menu-item-bar { margin-right: 120px; } +.menu-item-depth-7 > .menu-item-bar { margin-right: 140px; } +.menu-item-depth-8 > .menu-item-bar { margin-right: 160px; } +.menu-item-depth-9 > .menu-item-bar { margin-right: 180px; } +.menu-item-depth-10 > .menu-item-bar { margin-right: 200px; } +.menu-item-depth-11 > .menu-item-bar { margin-right: 220px; } + +/* Submenu left margin. */ +.menu-item-depth-0 .menu-item-transport { margin-left: 0; } +.menu-item-depth-1 .menu-item-transport { margin-left: -20px; } +.menu-item-depth-3 .menu-item-transport { margin-left: -60px; } +.menu-item-depth-4 .menu-item-transport { margin-left: -80px; } +.menu-item-depth-2 .menu-item-transport { margin-left: -40px; } +.menu-item-depth-5 .menu-item-transport { margin-left: -100px; } +.menu-item-depth-6 .menu-item-transport { margin-left: -120px; } +.menu-item-depth-7 .menu-item-transport { margin-left: -140px; } +.menu-item-depth-8 .menu-item-transport { margin-left: -160px; } +.menu-item-depth-9 .menu-item-transport { margin-left: -180px; } +.menu-item-depth-10 .menu-item-transport { margin-left: -200px; } +.menu-item-depth-11 .menu-item-transport { margin-left: -220px; } + +/* WARNING: The 20px factor is hard-coded in JS. */ +.reordering .menu-item-depth-0 { margin-left: 0; } +.reordering .menu-item-depth-1 { margin-left: 15px; } +.reordering .menu-item-depth-2 { margin-left: 30px; } +.reordering .menu-item-depth-3 { margin-left: 45px; } +.reordering .menu-item-depth-4 { margin-left: 60px; } +.reordering .menu-item-depth-5 { margin-left: 75px; } +.reordering .menu-item-depth-6 { margin-left: 90px; } +.reordering .menu-item-depth-7 { margin-left: 105px; } +.reordering .menu-item-depth-8 { margin-left: 120px; } /* Not likely to be used or useful beyond this depth */ +.reordering .menu-item-depth-9 { margin-left: 135px; } +.reordering .menu-item-depth-10 { margin-left: 150px; } +.reordering .menu-item-depth-11 { margin-left: 165px; } + +.reordering .menu-item-depth-0 > .menu-item-bar { margin-right: 0; } +.reordering .menu-item-depth-1 > .menu-item-bar { margin-right: 15px; } +.reordering .menu-item-depth-2 > .menu-item-bar { margin-right: 30px; } +.reordering .menu-item-depth-3 > .menu-item-bar { margin-right: 45px; } +.reordering .menu-item-depth-4 > .menu-item-bar { margin-right: 60px; } +.reordering .menu-item-depth-5 > .menu-item-bar { margin-right: 75px; } +.reordering .menu-item-depth-6 > .menu-item-bar { margin-right: 90px; } +.reordering .menu-item-depth-7 > .menu-item-bar { margin-right: 105px; } +.reordering .menu-item-depth-8 > .menu-item-bar { margin-right: 120px; } +.reordering .menu-item-depth-9 > .menu-item-bar { margin-right: 135px; } +.reordering .menu-item-depth-10 > .menu-item-bar { margin-right: 150px; } +.reordering .menu-item-depth-11 > .menu-item-bar { margin-right: 165px; } + +.control-section-nav_menu.menu .menu-item-edit-active { + margin-left: 0; +} + +.control-section-nav_menu.menu .menu-item-edit-active .menu-item-bar { + margin-right: 0; +} + +.control-section-nav_menu.menu .sortable-placeholder { + margin-top: 0; + margin-bottom: 1px; + max-width: calc(100% - 2px); + float: left; + display: list-item; + border-color: #a0a5aa; +} + +.menu-item-transport li.customize-control { + float: none; +} + +.control-section-nav_menu.menu ul.menu-item-transport .menu-item-bar { + margin-top: 0; +} + +/** + * Add-menu-items mode + */ + +.adding-menu-items .control-section { + opacity: .4; +} + +.adding-menu-items .control-panel.control-section, +.adding-menu-items .control-section.open { + opacity: 1; +} + +.menu-item-bar .item-delete { + color: #a00; + position: absolute; + top: 2px; + right: -19px; + width: 30px; + height: 38px; + cursor: pointer; + display: none; +} + +.menu-item-bar .item-delete:before { + content: "\f335"; + position: absolute; + top: 9px; + left: 5px; + border-radius: 50%; + font: normal 20px/1 dashicons; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ie8 .menu-item-bar .item-delete:before { + top: -10px; +} + +.menu-item-bar .item-delete:hover, +.menu-item-bar .item-delete:focus { + box-shadow: none; + outline: none; + color: #dc3232; +} + +.adding-menu-items .menu-item-bar .item-edit { + display: none; +} + +.adding-menu-items .menu-item-bar .item-delete { + display: block; +} + +/** + * Styles for menu-item addition panel + */ + +#available-menu-items.opening { + overflow-y: hidden; /* avoid scrollbar jitter with animating heights */ +} + +#available-menu-items #available-menu-items-search.open { + height: 100%; + border-bottom: none; +} + +#available-menu-items .accordion-section-title { + border-left: none; + border-right: none; + background: #fff; + transition: background-color 0.15s; + /* Reset the value inherited from the base .accordion-section-title style. Ticket #37589. */ + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} + +#available-menu-items .open .accordion-section-title, +#available-menu-items #available-menu-items-search .accordion-section-title { + background: #eee; +} + +/* rework the arrow indicator implementation for NVDA bug see #32715 */ +#available-menu-items .accordion-section-title:after { + content: none !important; +} + +#available-menu-items .accordion-section-title:hover .toggle-indicator:before, +#available-menu-items .button-link:hover .toggle-indicator:before, +#available-menu-items .button-link:focus .toggle-indicator:before { + color: #23282d; +} + +#available-menu-items .open .accordion-section-title .toggle-indicator:before { + content: "\f142"; + color: #23282d; +} + +#available-menu-items .available-menu-items-list { + overflow-y: auto; + max-height: 200px; /* This gets set in JS to fit the screen size, and based on # of sections. */ + background: transparent; +} + +#available-menu-items .accordion-section-title button { + display: block; + width: 28px; + height: 35px; + position: absolute; + top: 5px; + right: 5px; + box-shadow: none; + outline: none; + cursor: pointer; + text-align: center; +} + +#available-menu-items .accordion-section-title .no-items, +#available-menu-items .cannot-expand .accordion-section-title .spinner, +#available-menu-items .cannot-expand .accordion-section-title > button { + display: none; +} + +#available-menu-items-search.cannot-expand .accordion-section-title .spinner { + display: block; +} + +#available-menu-items .cannot-expand .accordion-section-title .no-items { + float: right; + color: #555d66; + font-weight: 400; + margin-left: 5px; +} + +#available-menu-items .accordion-section-content { + max-height: 290px; + margin: 0; + padding: 0; + position: relative; + background: transparent; +} + +#available-menu-items .accordion-section-content .available-menu-items-list { + margin: 0 0 45px 0; + padding: 1px 15px 15px 15px; +} + +#available-menu-items .accordion-section-content .available-menu-items-list:only-child { /* Types that do not support new items for the current user */ + margin-bottom: 0; +} + +#new-custom-menu-item .accordion-section-content { + padding: 0 15px 15px 15px; +} + +#available-menu-items .menu-item-tpl { + margin: 0; +} + +#custom-menu-item-name.invalid, +#custom-menu-item-url.invalid, +.edit-menu-item-url.invalid, +.menu-name-field.invalid, +.menu-name-field.invalid:focus, +#available-menu-items .new-content-item .create-item-input.invalid, +#available-menu-items .new-content-item .create-item-input.invalid:focus { + border: 1px solid #dc3232; +} + +#available-menu-items .menu-item-handle .item-type { + padding-right: 0; +} + +#available-menu-items .menu-item-handle .item-title { + padding-left: 20px; +} + +#available-menu-items .menu-item-handle { + cursor: pointer; +} + +#available-menu-items .menu-item-handle { + box-shadow: none; + margin-top: -1px; +} + +#available-menu-items .menu-item-handle:hover { + z-index: 1; +} + +#available-menu-items .item-title h4 { + padding: 0 0 5px; + font-size: 14px; +} + +#available-menu-items .item-add { + position: absolute; + top: 1px; + left: 1px; + color: #82878c; + width: 30px; + height: 38px; + box-shadow: none; + outline: none; + cursor: pointer; + text-align: center; +} + +#available-menu-items .menu-item-handle .item-add:focus { + color: #23282d; +} + +#available-menu-items .item-add:before { + content: "\f543"; + position: relative; + left: 2px; + top: 3px; + display: inline-block; + height: 20px; + border-radius: 50%; + font: normal 20px/1.05 dashicons; /* line height is to account for the dashicon's vertical alignment */ +} + +#available-menu-items .menu-item-handle.item-added .item-type, +#available-menu-items .menu-item-handle.item-added .item-title, +#available-menu-items .menu-item-handle.item-added:hover .item-add, +#available-menu-items .menu-item-handle.item-added .item-add:focus { + color: #82878c; +} + +#available-menu-items .menu-item-handle.item-added .item-add:before { + content: "\f147"; +} + +#available-menu-items .accordion-section-title.loading .spinner, +#available-menu-items-search.loading .accordion-section-title .spinner { + visibility: visible; + margin: 0 20px; +} + +#available-menu-items-search .spinner { + position: absolute; + top: 20px; /* 13 container padding +1 input margin +6 ( ( 32 input height - 20 spinner height ) / 2 ) */ + right: 21px; + margin: 0 !important; +} + +/* search results list */ +#available-menu-items #available-menu-items-search .accordion-section-content { + position: absolute; + left: 0; + top: 60px; /* below title div / search input */ + bottom: 0px; /* 100% height that still triggers lazy load */ + max-height: none; + width: 100%; + padding: 1px 15px 15px; + box-sizing: border-box; +} + +#available-menu-items-search .nothing-found { + /* Compensate the 1px top padding of the container. */ + margin-top: -1px; +} + +#available-menu-items-search .accordion-section-title:after { + display: none; +} + +#available-menu-items-search .accordion-section-content:empty { + min-height: 0; + padding: 0; +} + +#available-menu-items-search.loading .accordion-section-content div { + opacity: .5; +} + +#available-menu-items-search.loading.loading-more .accordion-section-content div { + opacity: 1; +} + +#customize-preview { + transition: all 0.2s; +} + +body.adding-menu-items #available-menu-items { + left: 0; + visibility: visible; +} + +body.adding-menu-items .wp-full-overlay-main { + left: 300px; +} + +body.adding-menu-items #customize-preview { + opacity: 0.4; +} + +body.adding-menu-items #customize-preview iframe { + pointer-events: none; +} + +.menu-item-handle .spinner { + display: none; + float: left; + margin: 0 8px 0 0; +} + +.nav-menu-inserted-item-loading .spinner { + display: block; +} + +.nav-menu-inserted-item-loading .menu-item-handle .item-type { + padding: 0 0 0 8px; +} + +.nav-menu-inserted-item-loading .menu-item-handle, +.added-menu-item .menu-item-handle.loading { + padding: 10px 15px 10px 8px; + cursor: default; + opacity: .5; + background: #fff; + color: #727773; +} + +.added-menu-item .menu-item-handle { + transition-property: opacity, background, color; + transition-duration: 1.25s; + transition-timing-function: cubic-bezier( .25, -2.5, .75, 8 ); /* Replacement for .hide().fadeIn('slow') in JS to add emphasis when it's loaded. */ +} + +/* Add/delete Menus */ + +#customize-theme-controls .control-panel-content .control-section-nav_menu:nth-last-child(2) .accordion-section-title { + border-bottom-color: #ddd; +} + +/* @todo update selector */ +#accordion-section-add_menu { + margin: 15px 12px; +} + +#accordion-section-add_menu h3 { + text-align: right; +} + +#accordion-section-add_menu h3, +#accordion-section-add_menu .customize-add-menu-button { + margin: 0; +} + +#accordion-section-add_menu .customize-add-menu-button { + font-weight: normal; +} + +#create-new-menu-submit { + float: right; + margin: 0 0 12px 0; +} + +.menu-delete-item { + float: left; + padding: 1em 0; + width: 100%; +} + +.assigned-menu-locations-title p { + margin: 0 0 8px 0; +} + +li.assigned-to-menu-location .menu-delete-item { + display: none; +} + +li.assigned-to-menu-location .add-new-menu-item { + margin-bottom: 1em; +} + +.menu-item-handle { + margin-top: -1px; +} +.ui-sortable-disabled .menu-item-handle { + cursor: default; +} + +.menu-item-handle:hover { + position: relative; + z-index: 10; + color: #0073aa; +} + +.menu-item-handle:hover .item-type, +.menu-item-handle:hover .item-edit, +#available-menu-items .menu-item-handle:hover .item-add { + color: #0073aa; +} + +.menu-item-edit-active .menu-item-handle { + border-color: #999; + border-bottom: none; +} + +.customize-control-nav_menu_item { + margin-bottom: 0; +} + +.customize-control-nav_menu .new-menu-item-invitation { + margin-top: 0; + margin-bottom: 0; +} + +.customize-control-nav_menu .customize-control-nav_menu-buttons { + margin-top: 12px; +} + +/** + * box-shadows + */ + +.wp-customizer .menu-item .submitbox .submitdelete:focus, +.customize-screen-options-toggle:focus:before, +#customize-controls .customize-info .customize-help-toggle:focus:before, +.wp-customizer button:focus .toggle-indicator:before, +.menu-delete:focus, +.menu-item-bar .item-delete:focus:before, +#available-menu-items .item-add:focus:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + + +@media screen and ( max-width: 782px ) { + #available-menu-items #available-menu-items-search .accordion-section-content { + top: 63px; + } +} + +@media screen and ( max-width: 640px ) { + #available-menu-items #available-menu-items-search .accordion-section-content { + top: 130px; + } +} diff --git a/wp-admin/css/customize-nav-menus.min.css b/wp-admin/css/customize-nav-menus.min.css new file mode 100644 index 0000000..1862dfd --- /dev/null +++ b/wp-admin/css/customize-nav-menus.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#customize-theme-controls .customize-control-description.customize-section-title-menu_locations-description,.wp-customizer .menu-item-settings p.description{font-style:normal}#customize-theme-controls #accordion-section-menu_locations{position:relative;margin-top:30px}#customize-theme-controls #accordion-section-menu_locations>.accordion-section-title{border-bottom-color:#ddd;margin-top:15px}#customize-theme-controls .customize-section-title-menu_locations-description,#customize-theme-controls .customize-section-title-menu_locations-heading,#customize-theme-controls .customize-section-title-nav_menus-heading{padding:0 12px}.menu-in-location,.menu-in-locations{display:block;font-weight:600;font-size:10px}#customize-controls .control-section .accordion-section-title:focus .menu-in-location,#customize-controls .control-section .accordion-section-title:hover .menu-in-location,#customize-controls .theme-location-set{color:#555}.customize-control-nav_menu_location .create-menu,.customize-control-nav_menu_location .edit-menu{margin-left:6px;vertical-align:middle;line-height:28px}#customize-controls .customize-control-nav_menu_name{margin-bottom:12px}.customize-control-nav_menu_name p:last-of-type{margin-bottom:0}#customize-new-menu-submit{float:right;min-width:85px}.wp-customizer .menu-item-bar .menu-item-handle,.wp-customizer .menu-item-settings,.wp-customizer .menu-item-settings .description-thin{box-sizing:border-box}.wp-customizer .menu-item-bar{margin:0}.wp-customizer .menu-item-bar .menu-item-handle{width:100%;background:#fff}.wp-customizer .menu-item-handle .item-title{margin-right:0}.wp-customizer .menu-item-handle .item-type{padding:1px 21px 0 5px;float:right;text-align:right}.wp-customizer .menu-item-handle:hover{z-index:8}.customize-control-nav_menu_item.has-notifications .menu-item-handle{border-left:4px solid #00a0d2}.wp-customizer .menu-item-settings{max-width:100%;overflow:hidden;z-index:8;padding:10px;background:#eee;border:1px solid #999;border-top:none}.wp-customizer .menu-item-settings .description-thin{width:100%;height:auto;margin:0 0 8px}.wp-customizer .menu-item-settings input[type=text]{width:100%}.wp-customizer .menu-item-settings .submitbox{margin:0;padding:0}.wp-customizer .menu-item-settings .link-to-original{padding:5px 0;border:none;font-style:normal;margin:0;width:100%}.wp-customizer .menu-item .submitbox .submitdelete{float:left;margin:6px 0 0;padding:0;cursor:pointer}.menu-item-reorder-nav{display:none;background-color:#fff;position:absolute;top:0;right:0}.menus-move-left:before{content:"\f341"}.menus-move-right:before{content:"\f345"}.reordering .menu-item .item-controls,.reordering .menu-item .item-type{display:none}.menu-location-settings .new-menu-locations-widget-note,.reordering .menu-item-reorder-nav{display:block}.customize-control input.menu-name-field{width:100%}.wp-customizer .menu-item .item-edit{position:absolute;right:-19px;top:2px;display:block;width:30px;height:38px;margin-right:0!important;box-shadow:none;outline:0;overflow:hidden;cursor:pointer;text-align:center}.wp-customizer .menu-item.menu-item-edit-active .item-edit .toggle-indicator:before{content:"\f142"}.wp-customizer .menu-settings dl{margin:12px 0 0;padding:0}.wp-customizer .menu-settings .checkbox-input{margin-top:8px}.wp-customizer .menu-settings .menu-theme-locations{border-top:1px solid #ccc}.wp-customizer .menu-settings{margin-top:36px;border-top:none}.wp-customizer .menu-location-settings{margin-top:12px;border-top:none}.wp-customizer .control-section-nav_menu .menu-location-settings{margin-top:24px;border-top:1px solid #ddd}.customize-control-nav_menu_auto_add,.wp-customizer .control-section-nav_menu .menu-location-settings{padding-top:12px}.menu-location-settings .customize-control-checkbox .theme-location-set{line-height:1}.customize-control-nav_menu_auto_add label{vertical-align:top}.customize-control-menu{margin-top:4px}#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle{color:#555}.customize-screen-options-toggle{background:0 0;border:none;color:#555;cursor:pointer;margin:0;padding:20px;position:absolute;right:0;top:30px}#customize-controls .customize-info .customize-help-toggle{padding:20px}#customize-controls .customize-info .customize-help-toggle:before{padding:4px}#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:active,#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:focus,#customize-controls .customize-info.open.active-menu-screen-options .customize-help-toggle:hover,.active-menu-screen-options .customize-screen-options-toggle,.customize-screen-options-toggle:active,.customize-screen-options-toggle:focus,.customize-screen-options-toggle:hover{color:#0073aa}#customize-controls .customize-info .customize-help-toggle:focus,.customize-screen-options-toggle:focus{outline:0}.customize-screen-options-toggle:before{-moz-osx-font-smoothing:grayscale;border:none;content:"\f111";display:block;font:18px/1 dashicons;padding:5px;text-align:center;text-decoration:none!important;text-indent:0;left:6px;position:absolute;top:6px}#customize-controls .customize-info .customize-help-toggle:focus:before,.customize-screen-options-toggle:focus:before{border-radius:100%}.wp-customizer #screen-options-wrap{display:none;background:#fff;border-top:1px solid #ddd;padding:4px 15px 15px}.wp-customizer .metabox-prefs label{display:block;padding-right:0;line-height:30px}.wp-customizer .toggle-indicator{display:inline-block;font-size:20px;line-height:1}.rtl .wp-customizer .toggle-indicator{text-indent:1px}#available-menu-items .accordion-section-title .toggle-indicator:before,.wp-customizer .menu-item .item-edit .toggle-indicator:before{content:"\f140";display:block;padding:1px 2px 1px 0;speak:none;border-radius:50%;color:#72777c;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.control-section-nav_menu .field-css-classes,.control-section-nav_menu .field-description,.control-section-nav_menu .field-link-target,.control-section-nav_menu .field-title-attribute,.control-section-nav_menu .field-xfn{display:none}.control-section-nav_menu.field-css-classes-active .field-css-classes,.control-section-nav_menu.field-description-active .field-description,.control-section-nav_menu.field-link-target-active .field-link-target,.control-section-nav_menu.field-title-attribute-active .field-title-attribute,.control-section-nav_menu.field-xfn-active .field-xfn{display:block}.menu-item-depth-0{margin-left:0}.menu-item-depth-1{margin-left:20px}.menu-item-depth-2{margin-left:40px}.menu-item-depth-3{margin-left:60px}.menu-item-depth-4{margin-left:80px}.menu-item-depth-5{margin-left:100px}.menu-item-depth-6{margin-left:120px}.menu-item-depth-7{margin-left:140px}.menu-item-depth-8{margin-left:160px}.menu-item-depth-9{margin-left:180px}.menu-item-depth-10{margin-left:200px}.menu-item-depth-11{margin-left:220px}.menu-item-depth-0>.menu-item-bar{margin-right:0}.menu-item-depth-1>.menu-item-bar{margin-right:20px}.menu-item-depth-2>.menu-item-bar{margin-right:40px}.menu-item-depth-3>.menu-item-bar{margin-right:60px}.menu-item-depth-4>.menu-item-bar{margin-right:80px}.menu-item-depth-5>.menu-item-bar{margin-right:100px}.menu-item-depth-6>.menu-item-bar{margin-right:120px}.menu-item-depth-7>.menu-item-bar{margin-right:140px}.menu-item-depth-8>.menu-item-bar{margin-right:160px}.menu-item-depth-9>.menu-item-bar{margin-right:180px}.menu-item-depth-10>.menu-item-bar{margin-right:200px}.menu-item-depth-11>.menu-item-bar{margin-right:220px}.menu-item-depth-0 .menu-item-transport{margin-left:0}.menu-item-depth-1 .menu-item-transport{margin-left:-20px}.menu-item-depth-3 .menu-item-transport{margin-left:-60px}.menu-item-depth-4 .menu-item-transport{margin-left:-80px}.menu-item-depth-2 .menu-item-transport{margin-left:-40px}.menu-item-depth-5 .menu-item-transport{margin-left:-100px}.menu-item-depth-6 .menu-item-transport{margin-left:-120px}.menu-item-depth-7 .menu-item-transport{margin-left:-140px}.menu-item-depth-8 .menu-item-transport{margin-left:-160px}.menu-item-depth-9 .menu-item-transport{margin-left:-180px}.menu-item-depth-10 .menu-item-transport{margin-left:-200px}.menu-item-depth-11 .menu-item-transport{margin-left:-220px}.reordering .menu-item-depth-0{margin-left:0}.reordering .menu-item-depth-1{margin-left:15px}.reordering .menu-item-depth-2{margin-left:30px}.reordering .menu-item-depth-3{margin-left:45px}.reordering .menu-item-depth-4{margin-left:60px}.reordering .menu-item-depth-5{margin-left:75px}.reordering .menu-item-depth-6{margin-left:90px}.reordering .menu-item-depth-7{margin-left:105px}.reordering .menu-item-depth-8{margin-left:120px}.reordering .menu-item-depth-9{margin-left:135px}.reordering .menu-item-depth-10{margin-left:150px}.reordering .menu-item-depth-11{margin-left:165px}.reordering .menu-item-depth-0>.menu-item-bar{margin-right:0}.reordering .menu-item-depth-1>.menu-item-bar{margin-right:15px}.reordering .menu-item-depth-2>.menu-item-bar{margin-right:30px}.reordering .menu-item-depth-3>.menu-item-bar{margin-right:45px}.reordering .menu-item-depth-4>.menu-item-bar{margin-right:60px}.reordering .menu-item-depth-5>.menu-item-bar{margin-right:75px}.reordering .menu-item-depth-6>.menu-item-bar{margin-right:90px}.reordering .menu-item-depth-7>.menu-item-bar{margin-right:105px}.reordering .menu-item-depth-8>.menu-item-bar{margin-right:120px}.reordering .menu-item-depth-9>.menu-item-bar{margin-right:135px}.reordering .menu-item-depth-10>.menu-item-bar{margin-right:150px}.reordering .menu-item-depth-11>.menu-item-bar{margin-right:165px}.control-section-nav_menu.menu .menu-item-edit-active{margin-left:0}.control-section-nav_menu.menu .menu-item-edit-active .menu-item-bar{margin-right:0}.control-section-nav_menu.menu .sortable-placeholder{margin-top:0;margin-bottom:1px;max-width:calc(100% - 2px);float:left;display:list-item;border-color:#a0a5aa}.menu-item-transport li.customize-control{float:none}.control-section-nav_menu.menu ul.menu-item-transport .menu-item-bar{margin-top:0}.adding-menu-items .control-section{opacity:.4}.adding-menu-items .control-panel.control-section,.adding-menu-items .control-section.open{opacity:1}.menu-item-bar .item-delete{color:#a00;position:absolute;top:2px;right:-19px;width:30px;height:38px;cursor:pointer;display:none}.menu-item-bar .item-delete:before{content:"\f335";position:absolute;top:9px;left:5px;border-radius:50%;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ie8 .menu-item-bar .item-delete:before{top:-10px}.menu-item-bar .item-delete:focus,.menu-item-bar .item-delete:hover{box-shadow:none;outline:0;color:#dc3232}.adding-menu-items .menu-item-bar .item-edit{display:none}.adding-menu-items .menu-item-bar .item-delete{display:block}#available-menu-items.opening{overflow-y:hidden}#available-menu-items #available-menu-items-search.open{height:100%;border-bottom:none}#available-menu-items .accordion-section-title{border-left:none;border-right:none;background:#fff;transition:background-color .15s;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}#available-menu-items #available-menu-items-search .accordion-section-title,#available-menu-items .open .accordion-section-title{background:#eee}#available-menu-items .accordion-section-title:after{content:none!important}#available-menu-items .accordion-section-title:hover .toggle-indicator:before,#available-menu-items .button-link:focus .toggle-indicator:before,#available-menu-items .button-link:hover .toggle-indicator:before{color:#23282d}#available-menu-items .open .accordion-section-title .toggle-indicator:before{content:"\f142";color:#23282d}#available-menu-items .available-menu-items-list{overflow-y:auto;max-height:200px;background:0 0}#available-menu-items .accordion-section-title button{display:block;width:28px;height:35px;position:absolute;top:5px;right:5px;box-shadow:none;outline:0;cursor:pointer;text-align:center}#available-menu-items .accordion-section-title .no-items,#available-menu-items .cannot-expand .accordion-section-title .spinner,#available-menu-items .cannot-expand .accordion-section-title>button{display:none}#available-menu-items-search.cannot-expand .accordion-section-title .spinner{display:block}#available-menu-items .cannot-expand .accordion-section-title .no-items{float:right;color:#555d66;font-weight:400;margin-left:5px}#available-menu-items .accordion-section-content{max-height:290px;margin:0;padding:0;position:relative;background:0 0}#available-menu-items .accordion-section-content .available-menu-items-list{margin:0 0 45px;padding:1px 15px 15px}#available-menu-items .accordion-section-content .available-menu-items-list:only-child{margin-bottom:0}#new-custom-menu-item .accordion-section-content{padding:0 15px 15px}#available-menu-items .menu-item-tpl{margin:0}#available-menu-items .new-content-item .create-item-input.invalid,#available-menu-items .new-content-item .create-item-input.invalid:focus,#custom-menu-item-name.invalid,#custom-menu-item-url.invalid,.edit-menu-item-url.invalid,.menu-name-field.invalid,.menu-name-field.invalid:focus{border:1px solid #dc3232}#available-menu-items .menu-item-handle .item-type{padding-right:0}#available-menu-items .menu-item-handle .item-title{padding-left:20px}#available-menu-items .menu-item-handle{cursor:pointer;box-shadow:none;margin-top:-1px}#available-menu-items .menu-item-handle:hover{z-index:1}#available-menu-items .item-title h4{padding:0 0 5px;font-size:14px}#available-menu-items .item-add{position:absolute;top:1px;left:1px;color:#82878c;width:30px;height:38px;box-shadow:none;outline:0;cursor:pointer;text-align:center}#available-menu-items .menu-item-handle .item-add:focus{color:#23282d}#available-menu-items .item-add:before{content:"\f543";position:relative;left:2px;top:3px;display:inline-block;height:20px;border-radius:50%;font:400 20px/1.05 dashicons}#available-menu-items .menu-item-handle.item-added .item-add:focus,#available-menu-items .menu-item-handle.item-added .item-title,#available-menu-items .menu-item-handle.item-added .item-type,#available-menu-items .menu-item-handle.item-added:hover .item-add{color:#82878c}#available-menu-items .menu-item-handle.item-added .item-add:before{content:"\f147"}#available-menu-items .accordion-section-title.loading .spinner,#available-menu-items-search.loading .accordion-section-title .spinner{visibility:visible;margin:0 20px}#available-menu-items-search .spinner{position:absolute;top:20px;right:21px;margin:0!important}#available-menu-items #available-menu-items-search .accordion-section-content{position:absolute;left:0;top:60px;bottom:0;max-height:none;width:100%;padding:1px 15px 15px;box-sizing:border-box}#available-menu-items-search .nothing-found{margin-top:-1px}#available-menu-items-search .accordion-section-title:after{display:none}#available-menu-items-search .accordion-section-content:empty{min-height:0;padding:0}#available-menu-items-search.loading .accordion-section-content div{opacity:.5}#available-menu-items-search.loading.loading-more .accordion-section-content div{opacity:1}#customize-preview{transition:all .2s}body.adding-menu-items #available-menu-items{left:0;visibility:visible}body.adding-menu-items .wp-full-overlay-main{left:300px}body.adding-menu-items #customize-preview{opacity:.4}body.adding-menu-items #customize-preview iframe{pointer-events:none}.menu-item-handle .spinner{display:none;float:left;margin:0 8px 0 0}.nav-menu-inserted-item-loading .spinner{display:block}.nav-menu-inserted-item-loading .menu-item-handle .item-type{padding:0 0 0 8px}.added-menu-item .menu-item-handle.loading,.nav-menu-inserted-item-loading .menu-item-handle{padding:10px 15px 10px 8px;cursor:default;opacity:.5;background:#fff;color:#727773}.added-menu-item .menu-item-handle{transition-property:opacity,background,color;transition-duration:1.25s;transition-timing-function:cubic-bezier(.25,-2.5,.75,8)}#customize-theme-controls .control-panel-content .control-section-nav_menu:nth-last-child(2) .accordion-section-title{border-bottom-color:#ddd}#accordion-section-add_menu{margin:15px 12px}#accordion-section-add_menu h3{text-align:right}#accordion-section-add_menu .customize-add-menu-button,#accordion-section-add_menu h3{margin:0}#accordion-section-add_menu .customize-add-menu-button{font-weight:400}#create-new-menu-submit{float:right;margin:0 0 12px}.menu-delete-item{float:left;padding:1em 0;width:100%}.assigned-menu-locations-title p{margin:0 0 8px}li.assigned-to-menu-location .menu-delete-item{display:none}li.assigned-to-menu-location .add-new-menu-item{margin-bottom:1em}.menu-item-handle{margin-top:-1px}.ui-sortable-disabled .menu-item-handle{cursor:default}.menu-item-handle:hover{position:relative;z-index:10;color:#0073aa}#available-menu-items .menu-item-handle:hover .item-add,.menu-item-handle:hover .item-edit,.menu-item-handle:hover .item-type{color:#0073aa}.menu-item-edit-active .menu-item-handle{border-color:#999;border-bottom:none}.customize-control-nav_menu_item{margin-bottom:0}.customize-control-nav_menu .new-menu-item-invitation{margin-top:0;margin-bottom:0}.customize-control-nav_menu .customize-control-nav_menu-buttons{margin-top:12px}#available-menu-items .item-add:focus:before,#customize-controls .customize-info .customize-help-toggle:focus:before,.customize-screen-options-toggle:focus:before,.menu-delete:focus,.menu-item-bar .item-delete:focus:before,.wp-customizer .menu-item .submitbox .submitdelete:focus,.wp-customizer button:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}@media screen and (max-width:782px){#available-menu-items #available-menu-items-search .accordion-section-content{top:63px}}@media screen and (max-width:640px){#available-menu-items #available-menu-items-search .accordion-section-content{top:130px}} \ 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..8c13bfb --- /dev/null +++ b/wp-admin/css/customize-widgets-rtl.css @@ -0,0 +1,478 @@ +.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.control-section-sidebar, +.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; +} + +.control-section.control-section-sidebar .accordion-section-content.ui-sortable { + overflow: visible; +} + +/* Note: widget-tops are more compact when (max-height: 700px) and (min-width: 981px). */ +.customize-control-widget_form .widget-top { + background: #fff; + transition: opacity 0.5s; +} + +.customize-control .widget-action { + color: #72777c; +} + +.customize-control .widget-top:hover .widget-action, +.customize-control .widget-action:focus { + color: #23282d; +} + +.customize-control-widget_form:not(.widget-rendered) .widget-top { + opacity: 0.5; +} + +.customize-control-widget_form .widget-control-save { + display: none; +} + +.customize-control-widget_form .spinner { + visibility: hidden; + margin-top: 0; +} + +.customize-control-widget_form.previewer-loading .spinner { + visibility: visible; +} + +.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 { + 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; +} + +.customize-control-widget_form.expanded .widget-action .toggle-indicator:before { + content: "\f142"; +} + +.customize-control-widget_form.wide-widget-control .widget-action .toggle-indicator:before { + content: "\f141"; +} + +.customize-control-widget_form.wide-widget-control.expanded .widget-action .toggle-indicator:before { + content: "\f139"; +} + +.widget-title-action { + cursor: pointer; +} + +.widget-top, +.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; + 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 + */ + +#customize-theme-controls .widget-reorder-nav { + display: none; + float: left; + background-color: #fafafa; +} + +.move-widget:before { + content: "\f504"; +} + +#customize-theme-controls .move-widget-area { + display: none; + background: #fff; + border: 1px solid #ddd; + 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: #00a0d2; +} + +#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; +} + +/* Text Widget */ +.wp-customizer div.mce-inline-toolbar-grp, +.wp-customizer div.mce-tooltip { + z-index: 500100 !important; +} +.wp-customizer .ui-autocomplete.wplink-autocomplete { + z-index: 500110; /* originally 100110, but z-index of .wp-full-overlay is 500000 */ +} +.wp-customizer #wp-link-backdrop { + z-index: 500100; /* originally 100100, but z-index of .wp-full-overlay is 500000 */ +} +.wp-customizer #wp-link-wrap { + z-index: 500105; /* originally 100105, but z-index of .wp-full-overlay is 500000 */ +} + +/** + * Styles for new widget addition panel + */ + +/* override widgets admin page rules in wp-admin/css/widgets.css */ +#widgets-left #available-widgets .widget { + float: none !important; + width: auto !important; +} + +.ios #available-widgets { + transition: right 0s; +} + +#available-widgets .widget-tpl:hover, +#available-widgets .widget-tpl.selected { + background: #f3f3f5; + border-bottom-color: #ccc; + color: #0073aa; + border-right: 4px solid #0073aa; +} + +#customize-controls .widget-title h3 { + font-size: 1em; +} + +#available-widgets .widget-title h3 { + padding: 0 0 5px; + font-size: 14px; +} + +#available-widgets .widget .widget-description { + padding: 0; + color: #72777c; +} + +#customize-preview { + transition: all 0.2s; +} + +body.adding-widget #available-widgets { + right: 0; + visibility: visible; +} + +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: #32373c; + font: normal 20px/1 dashicons; + text-align: center; + 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) { + /* Compact widget-tops on smaller laptops, but not tablets. See ticket #27112#comment:4 */ + .customize-control-widget_form { + margin-bottom: 0; + } + + .widget-top { + box-shadow: none; + margin-top: -1px; + } + + .widget-top:hover { + position: relative; + z-index: 1; + } + + .last-widget { + margin-bottom: 15px; + } + + .widget-title h3 { + padding: 13px 15px; + } + + .widget-top .widget-action { + padding: 8px 10px; + } + + .widget-reorder-nav span { + height: 39px; + } + + .widget-reorder-nav span:before { + line-height: 39px; + } + + /* Compact the move widget areas. */ + #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..dd701c0 --- /dev/null +++ b/wp-admin/css/customize-widgets-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.control-section.control-section-sidebar .accordion-section-content.ui-sortable,.wp-full-overlay-sidebar{overflow:visible}.control-section.control-section-sidebar,.customize-control-sidebar_widgets .hide-if-js,.customize-control-sidebar_widgets label{display:none}.customize-control-widget_form .widget-top{background:#fff;transition:opacity .5s}.customize-control .widget-action{color:#72777c}.customize-control .widget-action:focus,.customize-control .widget-top:hover .widget-action{color:#23282d}.customize-control-widget_form:not(.widget-rendered) .widget-top{opacity:.5}.customize-control-widget_form .widget-control-save{display:none}.customize-control-widget_form .spinner{visibility:hidden;margin-top:0}.customize-control-widget_form.previewer-loading .spinner{visibility:visible}.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{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:none;line-height:16px}.customize-control-widget_form.expanded .widget-action .toggle-indicator:before{content:"\f142"}.customize-control-widget_form.wide-widget-control .widget-action .toggle-indicator:before{content:"\f141"}.customize-control-widget_form.wide-widget-control.expanded .widget-action .toggle-indicator:before{content:"\f139"}.widget-title-action{cursor:pointer}.customize-control-widget_form .widget .customize-control-title,.widget-top{cursor:move}.control-section.accordion-section.highlighted>.accordion-section-title,.customize-control-widget_form.highlighted{outline:0;box-shadow:0 0 2px rgba(30,140,190,.8);position:relative;z-index:1}#widget-customizer-control-templates{display:none}#customize-theme-controls .widget-reorder-nav{display:none;float:left;background-color:#fafafa}.move-widget:before{content:"\f504"}#customize-theme-controls .move-widget-area{display:none;background:#fff;border:1px solid #ddd;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: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:#00a0d2}#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-customizer div.mce-inline-toolbar-grp,.wp-customizer div.mce-tooltip{z-index:500100!important}.wp-customizer .ui-autocomplete.wplink-autocomplete{z-index:500110}.wp-customizer #wp-link-backdrop{z-index:500100}.wp-customizer #wp-link-wrap{z-index:500105}#widgets-left #available-widgets .widget{float:none!important;width:auto!important}.ios #available-widgets{transition:right 0s}#available-widgets .widget-tpl.selected,#available-widgets .widget-tpl:hover{background:#f3f3f5;border-bottom-color:#ccc;color:#0073aa;border-right:4px solid #0073aa}#customize-controls .widget-title h3{font-size:1em}#available-widgets .widget-title h3{padding:0 0 5px;font-size:14px}#available-widgets .widget .widget-description{padding:0;color:#72777c}#customize-preview{transition:all .2s}body.adding-widget #available-widgets{right:0;visibility:visible}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:#32373c;font:400 20px/1 dashicons;text-align:center;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*=super] .widget-title:before,#available-widgets [class*=like] .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*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before,#available-widgets [class*=chat] .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*=event] .widget-title:before,#available-widgets [class*=calendar] .widget-title:before{content:"\f145";top:-4px}#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"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=video] .widget-title:before,#available-widgets [class*=tube] .widget-title:before{content:"\f126"}#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before,#available-widgets [class*=audio] .widget-title:before{content:"\f127"}#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"}#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}#available-widgets [class*=secur] .widget-title:before,#available-widgets [class*=firewall] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=stat] .widget-title:before,#available-widgets [class*=poll] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#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"}#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-widget_form{margin-bottom:0}.widget-top{box-shadow:none;margin-top:-1px}.widget-top:hover{position:relative;z-index:1}.last-widget{margin-bottom:15px}.widget-title h3{padding:13px 15px}.widget-top .widget-action{padding:8px 10px}.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..ab4f91b --- /dev/null +++ b/wp-admin/css/customize-widgets.css @@ -0,0 +1,478 @@ +.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.control-section-sidebar, +.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; +} + +.control-section.control-section-sidebar .accordion-section-content.ui-sortable { + overflow: visible; +} + +/* Note: widget-tops are more compact when (max-height: 700px) and (min-width: 981px). */ +.customize-control-widget_form .widget-top { + background: #fff; + transition: opacity 0.5s; +} + +.customize-control .widget-action { + color: #72777c; +} + +.customize-control .widget-top:hover .widget-action, +.customize-control .widget-action:focus { + color: #23282d; +} + +.customize-control-widget_form:not(.widget-rendered) .widget-top { + opacity: 0.5; +} + +.customize-control-widget_form .widget-control-save { + display: none; +} + +.customize-control-widget_form .spinner { + visibility: hidden; + margin-top: 0; +} + +.customize-control-widget_form.previewer-loading .spinner { + visibility: visible; +} + +.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 { + 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; +} + +.customize-control-widget_form.expanded .widget-action .toggle-indicator:before { + content: "\f142"; +} + +.customize-control-widget_form.wide-widget-control .widget-action .toggle-indicator:before { + content: "\f139"; +} + +.customize-control-widget_form.wide-widget-control.expanded .widget-action .toggle-indicator:before { + content: "\f141"; +} + +.widget-title-action { + cursor: pointer; +} + +.widget-top, +.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; + 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 + */ + +#customize-theme-controls .widget-reorder-nav { + display: none; + float: right; + background-color: #fafafa; +} + +.move-widget:before { + content: "\f504"; +} + +#customize-theme-controls .move-widget-area { + display: none; + background: #fff; + border: 1px solid #ddd; + 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: #00a0d2; +} + +#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; +} + +/* Text Widget */ +.wp-customizer div.mce-inline-toolbar-grp, +.wp-customizer div.mce-tooltip { + z-index: 500100 !important; +} +.wp-customizer .ui-autocomplete.wplink-autocomplete { + z-index: 500110; /* originally 100110, but z-index of .wp-full-overlay is 500000 */ +} +.wp-customizer #wp-link-backdrop { + z-index: 500100; /* originally 100100, but z-index of .wp-full-overlay is 500000 */ +} +.wp-customizer #wp-link-wrap { + z-index: 500105; /* originally 100105, but z-index of .wp-full-overlay is 500000 */ +} + +/** + * Styles for new widget addition panel + */ + +/* override widgets admin page rules in wp-admin/css/widgets.css */ +#widgets-left #available-widgets .widget { + float: none !important; + width: auto !important; +} + +.ios #available-widgets { + transition: left 0s; +} + +#available-widgets .widget-tpl:hover, +#available-widgets .widget-tpl.selected { + background: #f3f3f5; + border-bottom-color: #ccc; + color: #0073aa; + border-left: 4px solid #0073aa; +} + +#customize-controls .widget-title h3 { + font-size: 1em; +} + +#available-widgets .widget-title h3 { + padding: 0 0 5px; + font-size: 14px; +} + +#available-widgets .widget .widget-description { + padding: 0; + color: #72777c; +} + +#customize-preview { + transition: all 0.2s; +} + +body.adding-widget #available-widgets { + left: 0; + visibility: visible; +} + +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: #32373c; + font: normal 20px/1 dashicons; + text-align: center; + 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) { + /* Compact widget-tops on smaller laptops, but not tablets. See ticket #27112#comment:4 */ + .customize-control-widget_form { + margin-bottom: 0; + } + + .widget-top { + box-shadow: none; + margin-top: -1px; + } + + .widget-top:hover { + position: relative; + z-index: 1; + } + + .last-widget { + margin-bottom: 15px; + } + + .widget-title h3 { + padding: 13px 15px; + } + + .widget-top .widget-action { + padding: 8px 10px; + } + + .widget-reorder-nav span { + height: 39px; + } + + .widget-reorder-nav span:before { + line-height: 39px; + } + + /* Compact the move widget areas. */ + #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..f170f39 --- /dev/null +++ b/wp-admin/css/customize-widgets.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.control-section.control-section-sidebar .accordion-section-content.ui-sortable,.wp-full-overlay-sidebar{overflow:visible}.control-section.control-section-sidebar,.customize-control-sidebar_widgets .hide-if-js,.customize-control-sidebar_widgets label{display:none}.customize-control-widget_form .widget-top{background:#fff;transition:opacity .5s}.customize-control .widget-action{color:#72777c}.customize-control .widget-action:focus,.customize-control .widget-top:hover .widget-action{color:#23282d}.customize-control-widget_form:not(.widget-rendered) .widget-top{opacity:.5}.customize-control-widget_form .widget-control-save{display:none}.customize-control-widget_form .spinner{visibility:hidden;margin-top:0}.customize-control-widget_form.previewer-loading .spinner{visibility:visible}.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{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:none;line-height:16px}.customize-control-widget_form.expanded .widget-action .toggle-indicator:before{content:"\f142"}.customize-control-widget_form.wide-widget-control .widget-action .toggle-indicator:before{content:"\f139"}.customize-control-widget_form.wide-widget-control.expanded .widget-action .toggle-indicator:before{content:"\f141"}.widget-title-action{cursor:pointer}.customize-control-widget_form .widget .customize-control-title,.widget-top{cursor:move}.control-section.accordion-section.highlighted>.accordion-section-title,.customize-control-widget_form.highlighted{outline:0;box-shadow:0 0 2px rgba(30,140,190,.8);position:relative;z-index:1}#widget-customizer-control-templates{display:none}#customize-theme-controls .widget-reorder-nav{display:none;float:right;background-color:#fafafa}.move-widget:before{content:"\f504"}#customize-theme-controls .move-widget-area{display:none;background:#fff;border:1px solid #ddd;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: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:#00a0d2}#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-customizer div.mce-inline-toolbar-grp,.wp-customizer div.mce-tooltip{z-index:500100!important}.wp-customizer .ui-autocomplete.wplink-autocomplete{z-index:500110}.wp-customizer #wp-link-backdrop{z-index:500100}.wp-customizer #wp-link-wrap{z-index:500105}#widgets-left #available-widgets .widget{float:none!important;width:auto!important}.ios #available-widgets{transition:left 0s}#available-widgets .widget-tpl.selected,#available-widgets .widget-tpl:hover{background:#f3f3f5;border-bottom-color:#ccc;color:#0073aa;border-left:4px solid #0073aa}#customize-controls .widget-title h3{font-size:1em}#available-widgets .widget-title h3{padding:0 0 5px;font-size:14px}#available-widgets .widget .widget-description{padding:0;color:#72777c}#customize-preview{transition:all .2s}body.adding-widget #available-widgets{left:0;visibility:visible}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:#32373c;font:400 20px/1 dashicons;text-align:center;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*=super] .widget-title:before,#available-widgets [class*=like] .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*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before,#available-widgets [class*=chat] .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*=event] .widget-title:before,#available-widgets [class*=calendar] .widget-title:before{content:"\f145";top:-4px}#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"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=video] .widget-title:before,#available-widgets [class*=tube] .widget-title:before{content:"\f126"}#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before,#available-widgets [class*=audio] .widget-title:before{content:"\f127"}#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"}#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}#available-widgets [class*=secur] .widget-title:before,#available-widgets [class*=firewall] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=stat] .widget-title:before,#available-widgets [class*=poll] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#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"}#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-widget_form{margin-bottom:0}.widget-top{box-shadow:none;margin-top:-1px}.widget-top:hover{position:relative;z-index:1}.last-widget{margin-bottom:15px}.widget-title h3{padding:13px 15px}.widget-top .widget-action{padding:8px 10px}.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..373d2be --- /dev/null +++ b/wp-admin/css/dashboard-rtl.css @@ -0,0 +1,1313 @@ +#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; +} + +#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; +} + +/* @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; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; + font-size: 13px; + line-height: 2.1em; +} + +.welcome-panel h2 { + margin: 0; + font-size: 21px; + font-weight: 400; + line-height: 1.2; +} + +.welcome-panel h3 { + margin: 1.33em 0 0; + font-size: 16px; +} + +.welcome-panel li { + font-size: 14px; +} + +.welcome-panel p { + color: #72777c; +} + +.welcome-panel a { + text-decoration: none; +} + +.welcome-panel .about-description { + font-size: 16px; + margin: 0; +} + +.welcome-panel .welcome-panel-close { + position: absolute; + top: 10px; + left: 10px; + padding: 10px 21px 10px 15px; + font-size: 13px; + line-height: 1.23076923; /* Chrome rounding, needs to be 16px equivalent */ + text-decoration: none; +} + +.welcome-panel .welcome-panel-close:before { + position: absolute; + top: 8px; + right: 0; + transition: all .1s ease-in-out; +} + +.wp-core-ui .welcome-panel .button.button-hero { + margin: 15px 0 3px 13px; + padding: 12px 36px; + height: auto; + line-height: 1.4285714; + white-space: normal; +} + +.welcome-panel-content { + margin-right: 13px; + max-width: 1500px; +} + +.welcome-panel .welcome-panel-column-container { + clear: both; + 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: #444; +} + +.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; + padding: 0 0 8px; +} + +.welcome-panel .welcome-icon { + background: transparent !important; +} + +/* Welcome Panel and Right Now common Icons style */ + +.welcome-panel .welcome-icon:before, +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + color: #82878c; + font: normal 20px/1 dashicons; + speak: none; + display: inline-block; + padding: 0 0 0 10px; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + vertical-align: top; +} + +/* Welcome Panel specific Icons styles */ + +.welcome-panel .welcome-write-blog:before, +.welcome-panel .welcome-edit-page:before { + content: "\f119"; + top: -3px; +} + +.welcome-panel .welcome-add-page:before { + content: "\f132"; + top: -1px; +} + +.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; +} + +/* Right Now specific Icons styles */ + +#dashboard_right_now li a:before, +#dashboard_right_now li > span:before { /* get only the first level span to exclude screen-reader-text in mu-storage */ + content: "\f159"; /* generic icon for items added by CPTs ? */ + padding: 0 0 0 5px; +} + +#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 WordPress events */ + +.community-events-errors { + margin: 0; +} + +.community-events-loading { + padding: 10px 12px 8px; +} + +.community-events { + margin-bottom: 6px; + padding: 0 12px; +} + +.community-events .spinner { + float: none; + margin: 5px 2px 0; + vertical-align: top; +} + +.community-events-errors[aria-hidden="true"], +.community-events-errors [aria-hidden="true"], +.community-events-loading[aria-hidden="true"], +.community-events[aria-hidden="true"], +.community-events [aria-hidden="true"] { + display: none; +} + +.community-events .activity-block:first-child, +.community-events h2 { + padding-top: 12px; + padding-bottom: 10px; +} + +.community-events-form { + margin: 15px 0 5px; +} + +.community-events-form .regular-text { + width: 40%; + height: 29px; + margin: 0; + vertical-align: top; +} + +.community-events li.event-none { + border-right: 4px solid #00a0d2; +} + +.community-events-form label { + display: inline-block; + vertical-align: top; + line-height: 28px; + height: 28px; +} + +.community-events .activity-block > p { + margin-bottom: 0; + display: inline; +} + +.community-events-toggle-location { + vertical-align: middle; +} + +#community-events-submit { + margin-right: 3px; + margin-left: 3px; +} + +/* Needs higher specificity than #dashboard-widgets .button-link */ +#dashboard-widgets .community-events-cancel.button-link { + vertical-align: top; + /* Same properties as the submit button for cross-browsers alignment. */ + line-height: 26px; + height: 28px; + text-decoration: underline; +} + +.community-events ul { + background-color: #fafafa; + padding-right: 0; + padding-left: 0; + padding-bottom: 0; +} + +.community-events li { + margin: 0; + padding: 8px 12px; + color: #72777c; +} +.community-events li:first-child { + border-top: 1px solid #eee; +} + +.community-events li ~ li { + border-top: 1px solid #eee; +} + +.community-events .activity-block.last { + border-bottom: 1px solid #eee; + padding-top: 0; + margin-top: -1px; +} + +.community-events .event-info { + display: block; +} + +.event-icon { + height: 18px; + padding-left: 10px; + width: 18px; + display: none; /* Hide on smaller screens */ +} + +.event-icon:before { + color: #82878C; + font-size: 18px; +} +.event-meetup .event-icon:before { + content: "\f484"; +} +.event-wordcamp .event-icon:before { + content: "\f486"; +} + +.community-events .event-title { + font-weight: 600; + display: block; +} + +.community-events .event-date, +.community-events .event-time { + display: block; +} + +.community-events-footer { + margin-top: 0; + margin-bottom: 0; + padding: 12px; + border-top: 1px solid #eee; + color: #ddd; +} + +/* Safari 10 + VoiceOver specific: without this, the hidden text gets read out before the link. */ +.community-events-footer .screen-reader-text { + height: inherit; + white-space: nowrap; +} + +/* Dashboard WordPress news */ + +#dashboard_primary .inside { + margin: 0; + padding: 0; +} + +#dashboard_primary .widget-loading { + padding: 12px 12px 0; + margin-bottom: 1em !important; /* Needs to override `.postbox .inside > p:last-child` in common.css */ +} + +/* Notice when JS is off. */ +#dashboard_primary .inside .notice { + margin: 0; +} + +body #dashboard-widgets .postbox form .submit { + margin: 0; +} + +/* Used only for configurable widgets. */ +.dashboard-widget-control-form p { + margin-top: 0; +} + +.rssSummary { + color: #72777c; + margin-top: 4px; +} + +#dashboard_primary .rss-widget { + font-size: 13px; + padding: 0 12px 0; +} + +#dashboard_primary .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; +} + +#dashboard_primary .rss-widget a { + font-weight: 400; +} + +#dashboard_primary .rss-widget span, +#dashboard_primary .rss-widget span.rss-date { + color: #72777c; +} + +#dashboard_primary .rss-widget span.rss-date { + margin-right: 12px; +} + +#dashboard_primary .rss-widget ul li { + padding: 4px 0; + margin: 0; +} + +/* Dashboard right now */ + +#dashboard_right_now ul { + margin: 0; + /* contain floats but don't use overflow: hidden */ + display: inline-block; + width: 100%; +} + +#dashboard_right_now li { + width: 50%; + float: right; + margin-bottom: 10px; +} + +#dashboard_right_now .inside { + padding: 0; +} + +#dashboard_right_now .main { + padding: 0 12px 11px; +} + +#dashboard_right_now .main p { + margin: 0; +} + +#dashboard_right_now #wp-version-message .button { + float: left; + position: relative; + top: -5px; + margin-right: 5px; +} + +.mu-storage { + overflow: hidden; +} + +#dashboard-widgets h3.mu-storage { + margin: 0 0 10px; + padding: 0; + font-size: 14px; + font-weight: 400; +} + +/* Dashboard right now - Colors */ + +#dashboard_right_now .sub { + color: #555d66; + background: #f5f5f5; + border-top: 1px solid #eee; + padding: 10px 12px 6px 12px; +} + +#dashboard_right_now .sub h3 { + 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 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 { + 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 { + 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: #72777c; +} + +#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 .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: #72777c; +} + +#dashboard_quick_press .drafts p { + margin: 0; + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title { + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title a, +#dashboard_quick_press .draft-title time { + margin: 0 0 0 5px; +} + +/* Dashboard common styles */ + +#dashboard-widgets h4, /* Back-compat for pre-4.4 */ +#dashboard-widgets h3, +#dashboard_quick_press .drafts h2 { + margin: 0 12px 8px; + padding: 0; + font-size: 14px; + font-weight: 400; + color: #23282d; +} + +#dashboard_quick_press .drafts h2 { + line-height: inherit; +} + +#dashboard-widgets .inside h4, /* Back-compat for pre-4.4 */ +#dashboard-widgets .inside h3 { + margin-right: 0; + margin-left: 0; +} + +/* Dashboard activity widget */ + +#dashboard_activity .comment-meta span.approve:before { + content: "\f227"; + font: 20px/.5 dashicons; + margin-right: 5px; + vertical-align: middle; + position: relative; + top: -1px; + margin-left: 2px; +} + +#dashboard_activity .inside { + margin: 0; + padding-bottom: 0; +} + +#dashboard_activity .no-activity { + overflow: hidden; + padding: 0 0 12px; + text-align: center; +} + +#dashboard_activity .no-activity p { + color: #72777c; + 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 #eee; + margin: 0 -12px; + padding: 8px 12px 4px; +} + +#dashboard_activity .subsubsub a .count, +#dashboard_activity .subsubsub a.current .count { + color: #72777c; /* white background on the dashboard but #f1f1f1 on list tables */ +} + +#future-posts ul, +#published-posts ul { + clear: both; + margin-bottom: 0; +} + +#future-posts li, +#published-posts li { + margin-bottom: 8px; +} + +#future-posts ul span, +#published-posts ul span { + display: inline-block; + margin-left: 5px; + min-width: 150px; + color: #72777c; +} + +.activity-block { + border-bottom: 1px solid #eee; + margin: 0 -12px; + padding: 8px 12px 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; + margin-right: 12px; +} + +#activity-widget #the-comment-list .comment-item { + background: #fafafa; + padding: 12px; + position: relative; +} + +#activity-widget #the-comment-list .avatar { + position: absolute; + top: 12px; +} + +#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 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 { + position: relative; + top: 0; +} + +/* Browse happy box */ + +#dashboard-widgets #dashboard_browser_nag.postbox .inside { + margin: 10px; +} + +.postbox .button-link .edit-box { + display: none; +} + +.edit-box { + opacity: 0; +} + +.hndle:hover .edit-box, +.edit-box:focus { + opacity: 1; +} + +#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, +#dashboard-widgets .button-link { + text-decoration: none; +} + +#dashboard-widgets h2 a { + text-decoration: underline; +} + +#dashboard-widgets .hndle .postbox-title-action { + float: left; + line-height: 1.2; +} + +#dashboard_plugins h5 { + font-size: 14px; +} + +/* Recent Comments */ + +#latest-comments #the-comment-list { + position: relative; + margin: 0 -12px; +} + +#activity-widget #the-comment-list .comment, +#activity-widget #the-comment-list .pingback { + 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 { + /* the row-actions paragraph is output only for users with 'edit_comment' capabilities, + for other users this needs a min height equal to the gravatar image */ + min-height: 50px; + margin: 0; + padding: 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-meta { + line-height: 1.5em; + margin: 0; + color: #666; +} + +#latest-comments #the-comment-list .comment-meta 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; +} + +/* QuickDraft */ + +#title-wrap label, +#description-wrap label { + cursor: text; +} + +#title-wrap #title { + padding: 2px 6px; + font-size: 1.3em; + 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: 13px; + font-weight: 600; + line-height: 1.4em; +} + +.rss-widget ul li { + line-height: 1.5em; + margin-bottom: 12px; +} + +.rss-widget span.rss-date { + color: #72777c; + 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 { + 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; + box-shadow: none; +} + +#dashboard_browser_nag.postbox.browser-insecure h2 { + border-bottom-color: #cd5a5a; + color: #fff; +} + +#dashboard_browser_nag.postbox h2 { + border-bottom-color: #f6e2ac; + background: transparent none; + color: #fff; + box-shadow: none; +} + +#dashboard_browser_nag a { + color: #fff; +} + +#dashboard_browser_nag h2.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; + } + + #dashboard-widgets #postbox-container-3 .empty-container:after, + #dashboard-widgets #postbox-container-4 .empty-container:after { + display: none; + } + + #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; + } + + .metabox-holder .postbox-container .empty-container:after { + display: block; + } +} + +/* 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; + } + + #dashboard-widgets #postbox-container-4 .empty-container:after { + display: none; + } + + .metabox-holder .postbox-container .empty-container:after { + display: block; + } +} + +@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; + } + + .community-events-toggle-location { + height: 38px; + vertical-align: baseline; + } + + .community-events-form .regular-text { + height: 32px; + } + + #community-events-submit { + margin-bottom: 0; + /* Override .wp-core-ui .button */ + vertical-align: top; + } + + .community-events-form label, + #dashboard-widgets .community-events-cancel.button-link { + /* Same properties as the submit button for cross-browsers alignment. */ + font-size: 14px; + line-height: normal; + height: auto; + padding: 6px 0; + border: 1px solid transparent; + } + + .community-events .spinner { + margin-top: 7px; + } +} + +/* 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: 40px; + white-space: nowrap; + width: 20px; + height: 20px; + padding: 5px; + top: 5px; + left: 5px; + } + + /* Make the close icon larger for tappability. */ + .welcome-panel .welcome-panel-close:before { + font-size: 20px; + top: 5px; + right: -35px; + } +} + +@media screen and (min-width: 355px) { + .community-events .event-info { + display: table-row; + float: right; + max-width: 59%; + } + + .event-icon, + .event-icon[aria-hidden="true"] { + display: table-cell; + } + + .event-info-inner { + display: table-cell; + } + + .community-events .event-date-time { + float: left; + max-width: 39%; + } + + .community-events .event-date, + .community-events .event-time { + text-align: left; + } +} diff --git a/wp-admin/css/dashboard-rtl.min.css b/wp-admin/css/dashboard-rtl.min.css new file mode 100644 index 0000000..184f3c0 --- /dev/null +++ b/wp-admin/css/dashboard-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#dashboard_quick_press .draft-title,#the-comment-list td.comment,.dashboard-comment-wrap{word-wrap:break-word}#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: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;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}#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 img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}#dashboard_right_now .sub,.community-events li:first-child,.community-events li~li,.community-events-footer{border-top:1px solid #eee}.welcome-panel h2{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h3{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#72777c}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:10px;left:10px;padding:10px 21px 10px 15px;font-size:13px;line-height:1.23076923;text-decoration:none}.welcome-panel .welcome-panel-close:before{position:absolute;top:8px;right:0;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px 13px;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.welcome-panel-content{margin-right:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;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:#444}.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;padding:0 0 8px}.welcome-panel .welcome-icon{background:0 0!important}#dashboard_right_now li a:before,#dashboard_right_now li span:before,.welcome-panel .welcome-icon:before{color:#82878c;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 10px;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";top:-1px}.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}#dashboard_right_now li a:before,#dashboard_right_now li>span:before{content:"\f159";padding:0 0 0 5px}#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"}.community-events-errors{margin:0}.community-events-loading{padding:10px 12px 8px}.community-events{margin-bottom:6px;padding:0 12px}.community-events .spinner{float:none;margin:5px 2px 0;vertical-align:top}.community-events [aria-hidden=true],.community-events-errors [aria-hidden=true],.community-events-errors[aria-hidden=true],.community-events-loading[aria-hidden=true],.community-events[aria-hidden=true]{display:none}.community-events .activity-block:first-child,.community-events h2{padding-top:12px;padding-bottom:10px}.community-events-form{margin:15px 0 5px}.community-events-form .regular-text{width:40%;height:29px;margin:0;vertical-align:top}.community-events li.event-none{border-right:4px solid #00a0d2}.community-events-form label{display:inline-block;vertical-align:top;line-height:28px;height:28px}.community-events .activity-block>p{margin-bottom:0;display:inline}.community-events-toggle-location{vertical-align:middle}#community-events-submit{margin-right:3px;margin-left:3px}#dashboard-widgets .community-events-cancel.button-link{vertical-align:top;line-height:26px;height:28px;text-decoration:underline}.community-events ul{background-color:#fafafa;padding-right:0;padding-left:0;padding-bottom:0}.community-events li{margin:0;padding:8px 12px;color:#72777c}.community-events .activity-block.last{border-bottom:1px solid #eee;padding-top:0;margin-top:-1px}.community-events .event-info{display:block}.event-icon{height:18px;padding-left:10px;width:18px;display:none}.event-icon:before{color:#82878C;font-size:18px}.event-meetup .event-icon:before{content:"\f484"}.event-wordcamp .event-icon:before{content:"\f486"}.community-events .event-title{font-weight:600;display:block}.community-events .event-date,.community-events .event-time{display:block}.community-events-footer{margin-top:0;margin-bottom:0;padding:12px;color:#ddd}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date,.rssSummary{color:#72777c}.community-events-footer .screen-reader-text{height:inherit;white-space:nowrap}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading{padding:12px 12px 0;margin-bottom:1em!important}#dashboard_primary .inside .notice,body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form p{margin-top:0}.rssSummary{margin-top:4px}#dashboard_primary .rss-widget{font-size:13px;padding:0 12px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span.rss-date{margin-right:12px}#dashboard_primary .rss-widget ul li{padding:4px 0;margin:0}#dashboard_right_now ul{margin:0;display:inline-block;width:100%}#dashboard_right_now li{width:50%;float:right;margin-bottom:10px}#dashboard_right_now .inside{padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{float:left;position:relative;top:-5px;margin-right:5px}.mu-storage{overflow:hidden}#dashboard-widgets h3.mu-storage{margin:0 0 10px;padding:0;font-size:14px;font-weight:400}#dashboard_right_now .sub{color:#555d66;background:#f5f5f5;padding:10px 12px 6px}#dashboard_right_now .sub h3{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_quick_press .drafts li time,#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#72777c}#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{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{box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}.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:none}#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 p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{margin:0 0 0 5px}#dashboard-widgets h3,#dashboard-widgets h4,#dashboard_quick_press .drafts h2{margin:0 12px 8px;padding:0;font-size:14px;font-weight:400;color:#23282d}#dashboard_quick_press .drafts h2{line-height:inherit}#dashboard-widgets .inside h3,#dashboard-widgets .inside h4{margin-right:0;margin-left:0}#dashboard_activity .comment-meta span.approve:before{content:"\f227";font:20px/.5 dashicons;margin-right:5px;vertical-align:middle;position:relative;top:-1px;margin-left:2px}#dashboard_activity .inside{margin:0;padding-bottom:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 0 12px;text-align:center}#dashboard_activity .no-activity p{color:#72777c;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:0 -12px;padding:8px 12px 4px}#dashboard_activity .subsubsub a .count,#dashboard_activity .subsubsub a.current .count{color:#72777c}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{margin-bottom:8px}#future-posts ul span,#published-posts ul span{display:inline-block;margin-left:5px;min-width:150px;color:#72777c}.activity-block{border-bottom:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}.activity-block:last-child{border-bottom:none}.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;margin-right:12px}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list .avatar{position:absolute;top:12px}#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 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{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.postbox .button-link .edit-box{display:none}.edit-box{opacity:0}.edit-box:focus,.hndle:hover .edit-box{opacity:1}#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:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets .button-link,#dashboard-widgets a{text-decoration:none}#dashboard-widgets h2 a,#dashboard_browser_nag a{text-decoration:underline}#dashboard-widgets .hndle .postbox-title-action{float:left;line-height:1.2}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative;margin:0 -12px}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{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{min-height:50px;margin:0;padding: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-meta{line-height:1.5em;margin:0;color:#666}#latest-comments #the-comment-list .comment-meta 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}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;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:13px;font-weight:600;line-height:1.4em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#72777c;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_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{color:#fff}#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;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h2{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h2{border-bottom-color:#f6e2ac;background:0 0;color:#fff;box-shadow:none}#dashboard_browser_nag h2.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 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){#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container,#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#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:after,#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@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;height:0;min-height:0}#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@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}.community-events-toggle-location{height:38px;vertical-align:baseline}.community-events-form .regular-text{height:32px}#community-events-submit{margin-bottom:0;vertical-align:top}#dashboard-widgets .community-events-cancel.button-link,.community-events-form label{font-size:14px;line-height:normal;height:auto;padding:6px 0;border:1px solid transparent}.community-events .spinner{margin-top:7px}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:40px;white-space:nowrap;width:20px;height:20px;padding:5px;top:5px;left:5px}.welcome-panel .welcome-panel-close:before{font-size:20px;top:5px;right:-35px}}@media screen and (min-width:355px){.community-events .event-info{display:table-row;float:right;max-width:59%}.event-icon,.event-icon[aria-hidden=true],.event-info-inner{display:table-cell}.community-events .event-date-time{float:left;max-width:39%}.community-events .event-date,.community-events .event-time{text-align:left}} \ No newline at end of file diff --git a/wp-admin/css/dashboard.css b/wp-admin/css/dashboard.css new file mode 100644 index 0000000..f64cc92 --- /dev/null +++ b/wp-admin/css/dashboard.css @@ -0,0 +1,1313 @@ +#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; +} + +#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; +} + +/* @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; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; + font-size: 13px; + line-height: 2.1em; +} + +.welcome-panel h2 { + margin: 0; + font-size: 21px; + font-weight: 400; + line-height: 1.2; +} + +.welcome-panel h3 { + margin: 1.33em 0 0; + font-size: 16px; +} + +.welcome-panel li { + font-size: 14px; +} + +.welcome-panel p { + color: #72777c; +} + +.welcome-panel a { + text-decoration: none; +} + +.welcome-panel .about-description { + font-size: 16px; + margin: 0; +} + +.welcome-panel .welcome-panel-close { + position: absolute; + top: 10px; + right: 10px; + padding: 10px 15px 10px 21px; + font-size: 13px; + line-height: 1.23076923; /* Chrome rounding, needs to be 16px equivalent */ + text-decoration: none; +} + +.welcome-panel .welcome-panel-close:before { + position: absolute; + top: 8px; + left: 0; + transition: all .1s ease-in-out; +} + +.wp-core-ui .welcome-panel .button.button-hero { + margin: 15px 13px 3px 0; + padding: 12px 36px; + height: auto; + line-height: 1.4285714; + white-space: normal; +} + +.welcome-panel-content { + margin-left: 13px; + max-width: 1500px; +} + +.welcome-panel .welcome-panel-column-container { + clear: both; + 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: #444; +} + +.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; + padding: 0 0 8px; +} + +.welcome-panel .welcome-icon { + background: transparent !important; +} + +/* Welcome Panel and Right Now common Icons style */ + +.welcome-panel .welcome-icon:before, +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + color: #82878c; + font: normal 20px/1 dashicons; + speak: none; + display: inline-block; + padding: 0 10px 0 0; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + vertical-align: top; +} + +/* Welcome Panel specific Icons styles */ + +.welcome-panel .welcome-write-blog:before, +.welcome-panel .welcome-edit-page:before { + content: "\f119"; + top: -3px; +} + +.welcome-panel .welcome-add-page:before { + content: "\f132"; + top: -1px; +} + +.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; +} + +/* Right Now specific Icons styles */ + +#dashboard_right_now li a:before, +#dashboard_right_now li > span:before { /* get only the first level span to exclude screen-reader-text in mu-storage */ + content: "\f159"; /* generic icon for items added by CPTs ? */ + padding: 0 5px 0 0; +} + +#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 WordPress events */ + +.community-events-errors { + margin: 0; +} + +.community-events-loading { + padding: 10px 12px 8px; +} + +.community-events { + margin-bottom: 6px; + padding: 0 12px; +} + +.community-events .spinner { + float: none; + margin: 5px 2px 0; + vertical-align: top; +} + +.community-events-errors[aria-hidden="true"], +.community-events-errors [aria-hidden="true"], +.community-events-loading[aria-hidden="true"], +.community-events[aria-hidden="true"], +.community-events [aria-hidden="true"] { + display: none; +} + +.community-events .activity-block:first-child, +.community-events h2 { + padding-top: 12px; + padding-bottom: 10px; +} + +.community-events-form { + margin: 15px 0 5px; +} + +.community-events-form .regular-text { + width: 40%; + height: 29px; + margin: 0; + vertical-align: top; +} + +.community-events li.event-none { + border-left: 4px solid #00a0d2; +} + +.community-events-form label { + display: inline-block; + vertical-align: top; + line-height: 28px; + height: 28px; +} + +.community-events .activity-block > p { + margin-bottom: 0; + display: inline; +} + +.community-events-toggle-location { + vertical-align: middle; +} + +#community-events-submit { + margin-left: 3px; + margin-right: 3px; +} + +/* Needs higher specificity than #dashboard-widgets .button-link */ +#dashboard-widgets .community-events-cancel.button-link { + vertical-align: top; + /* Same properties as the submit button for cross-browsers alignment. */ + line-height: 26px; + height: 28px; + text-decoration: underline; +} + +.community-events ul { + background-color: #fafafa; + padding-left: 0; + padding-right: 0; + padding-bottom: 0; +} + +.community-events li { + margin: 0; + padding: 8px 12px; + color: #72777c; +} +.community-events li:first-child { + border-top: 1px solid #eee; +} + +.community-events li ~ li { + border-top: 1px solid #eee; +} + +.community-events .activity-block.last { + border-bottom: 1px solid #eee; + padding-top: 0; + margin-top: -1px; +} + +.community-events .event-info { + display: block; +} + +.event-icon { + height: 18px; + padding-right: 10px; + width: 18px; + display: none; /* Hide on smaller screens */ +} + +.event-icon:before { + color: #82878C; + font-size: 18px; +} +.event-meetup .event-icon:before { + content: "\f484"; +} +.event-wordcamp .event-icon:before { + content: "\f486"; +} + +.community-events .event-title { + font-weight: 600; + display: block; +} + +.community-events .event-date, +.community-events .event-time { + display: block; +} + +.community-events-footer { + margin-top: 0; + margin-bottom: 0; + padding: 12px; + border-top: 1px solid #eee; + color: #ddd; +} + +/* Safari 10 + VoiceOver specific: without this, the hidden text gets read out before the link. */ +.community-events-footer .screen-reader-text { + height: inherit; + white-space: nowrap; +} + +/* Dashboard WordPress news */ + +#dashboard_primary .inside { + margin: 0; + padding: 0; +} + +#dashboard_primary .widget-loading { + padding: 12px 12px 0; + margin-bottom: 1em !important; /* Needs to override `.postbox .inside > p:last-child` in common.css */ +} + +/* Notice when JS is off. */ +#dashboard_primary .inside .notice { + margin: 0; +} + +body #dashboard-widgets .postbox form .submit { + margin: 0; +} + +/* Used only for configurable widgets. */ +.dashboard-widget-control-form p { + margin-top: 0; +} + +.rssSummary { + color: #72777c; + margin-top: 4px; +} + +#dashboard_primary .rss-widget { + font-size: 13px; + padding: 0 12px 0; +} + +#dashboard_primary .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; +} + +#dashboard_primary .rss-widget a { + font-weight: 400; +} + +#dashboard_primary .rss-widget span, +#dashboard_primary .rss-widget span.rss-date { + color: #72777c; +} + +#dashboard_primary .rss-widget span.rss-date { + margin-left: 12px; +} + +#dashboard_primary .rss-widget ul li { + padding: 4px 0; + margin: 0; +} + +/* Dashboard right now */ + +#dashboard_right_now ul { + margin: 0; + /* contain floats but don't use overflow: hidden */ + display: inline-block; + width: 100%; +} + +#dashboard_right_now li { + width: 50%; + float: left; + margin-bottom: 10px; +} + +#dashboard_right_now .inside { + padding: 0; +} + +#dashboard_right_now .main { + padding: 0 12px 11px; +} + +#dashboard_right_now .main p { + margin: 0; +} + +#dashboard_right_now #wp-version-message .button { + float: right; + position: relative; + top: -5px; + margin-left: 5px; +} + +.mu-storage { + overflow: hidden; +} + +#dashboard-widgets h3.mu-storage { + margin: 0 0 10px; + padding: 0; + font-size: 14px; + font-weight: 400; +} + +/* Dashboard right now - Colors */ + +#dashboard_right_now .sub { + color: #555d66; + background: #f5f5f5; + border-top: 1px solid #eee; + padding: 10px 12px 6px 12px; +} + +#dashboard_right_now .sub h3 { + 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 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 { + 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 { + 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: #72777c; +} + +#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 .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: #72777c; +} + +#dashboard_quick_press .drafts p { + margin: 0; + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title { + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title a, +#dashboard_quick_press .draft-title time { + margin: 0 5px 0 0; +} + +/* Dashboard common styles */ + +#dashboard-widgets h4, /* Back-compat for pre-4.4 */ +#dashboard-widgets h3, +#dashboard_quick_press .drafts h2 { + margin: 0 12px 8px; + padding: 0; + font-size: 14px; + font-weight: 400; + color: #23282d; +} + +#dashboard_quick_press .drafts h2 { + line-height: inherit; +} + +#dashboard-widgets .inside h4, /* Back-compat for pre-4.4 */ +#dashboard-widgets .inside h3 { + margin-left: 0; + margin-right: 0; +} + +/* Dashboard activity widget */ + +#dashboard_activity .comment-meta span.approve:before { + content: "\f227"; + font: 20px/.5 dashicons; + margin-left: 5px; + vertical-align: middle; + position: relative; + top: -1px; + margin-right: 2px; +} + +#dashboard_activity .inside { + margin: 0; + padding-bottom: 0; +} + +#dashboard_activity .no-activity { + overflow: hidden; + padding: 0 0 12px; + text-align: center; +} + +#dashboard_activity .no-activity p { + color: #72777c; + 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 #eee; + margin: 0 -12px; + padding: 8px 12px 4px; +} + +#dashboard_activity .subsubsub a .count, +#dashboard_activity .subsubsub a.current .count { + color: #72777c; /* white background on the dashboard but #f1f1f1 on list tables */ +} + +#future-posts ul, +#published-posts ul { + clear: both; + margin-bottom: 0; +} + +#future-posts li, +#published-posts li { + margin-bottom: 8px; +} + +#future-posts ul span, +#published-posts ul span { + display: inline-block; + margin-right: 5px; + min-width: 150px; + color: #72777c; +} + +.activity-block { + border-bottom: 1px solid #eee; + margin: 0 -12px; + padding: 8px 12px 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; + margin-left: 12px; +} + +#activity-widget #the-comment-list .comment-item { + background: #fafafa; + padding: 12px; + position: relative; +} + +#activity-widget #the-comment-list .avatar { + position: absolute; + top: 12px; +} + +#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 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 { + position: relative; + top: 0; +} + +/* Browse happy box */ + +#dashboard-widgets #dashboard_browser_nag.postbox .inside { + margin: 10px; +} + +.postbox .button-link .edit-box { + display: none; +} + +.edit-box { + opacity: 0; +} + +.hndle:hover .edit-box, +.edit-box:focus { + opacity: 1; +} + +#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, +#dashboard-widgets .button-link { + text-decoration: none; +} + +#dashboard-widgets h2 a { + text-decoration: underline; +} + +#dashboard-widgets .hndle .postbox-title-action { + float: right; + line-height: 1.2; +} + +#dashboard_plugins h5 { + font-size: 14px; +} + +/* Recent Comments */ + +#latest-comments #the-comment-list { + position: relative; + margin: 0 -12px; +} + +#activity-widget #the-comment-list .comment, +#activity-widget #the-comment-list .pingback { + 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 { + /* the row-actions paragraph is output only for users with 'edit_comment' capabilities, + for other users this needs a min height equal to the gravatar image */ + min-height: 50px; + margin: 0; + padding: 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-meta { + line-height: 1.5em; + margin: 0; + color: #666; +} + +#latest-comments #the-comment-list .comment-meta 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; +} + +/* QuickDraft */ + +#title-wrap label, +#description-wrap label { + cursor: text; +} + +#title-wrap #title { + padding: 2px 6px; + font-size: 1.3em; + 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: 13px; + font-weight: 600; + line-height: 1.4em; +} + +.rss-widget ul li { + line-height: 1.5em; + margin-bottom: 12px; +} + +.rss-widget span.rss-date { + color: #72777c; + 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 { + 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; + box-shadow: none; +} + +#dashboard_browser_nag.postbox.browser-insecure h2 { + border-bottom-color: #cd5a5a; + color: #fff; +} + +#dashboard_browser_nag.postbox h2 { + border-bottom-color: #f6e2ac; + background: transparent none; + color: #fff; + box-shadow: none; +} + +#dashboard_browser_nag a { + color: #fff; +} + +#dashboard_browser_nag h2.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; + } + + #dashboard-widgets #postbox-container-3 .empty-container:after, + #dashboard-widgets #postbox-container-4 .empty-container:after { + display: none; + } + + #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; + } + + .metabox-holder .postbox-container .empty-container:after { + display: block; + } +} + +/* 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; + } + + #dashboard-widgets #postbox-container-4 .empty-container:after { + display: none; + } + + .metabox-holder .postbox-container .empty-container:after { + display: block; + } +} + +@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; + } + + .community-events-toggle-location { + height: 38px; + vertical-align: baseline; + } + + .community-events-form .regular-text { + height: 32px; + } + + #community-events-submit { + margin-bottom: 0; + /* Override .wp-core-ui .button */ + vertical-align: top; + } + + .community-events-form label, + #dashboard-widgets .community-events-cancel.button-link { + /* Same properties as the submit button for cross-browsers alignment. */ + font-size: 14px; + line-height: normal; + height: auto; + padding: 6px 0; + border: 1px solid transparent; + } + + .community-events .spinner { + margin-top: 7px; + } +} + +/* 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: 40px; + white-space: nowrap; + width: 20px; + height: 20px; + padding: 5px; + top: 5px; + right: 5px; + } + + /* Make the close icon larger for tappability. */ + .welcome-panel .welcome-panel-close:before { + font-size: 20px; + top: 5px; + left: -35px; + } +} + +@media screen and (min-width: 355px) { + .community-events .event-info { + display: table-row; + float: left; + max-width: 59%; + } + + .event-icon, + .event-icon[aria-hidden="true"] { + display: table-cell; + } + + .event-info-inner { + display: table-cell; + } + + .community-events .event-date-time { + float: right; + max-width: 39%; + } + + .community-events .event-date, + .community-events .event-time { + text-align: right; + } +} diff --git a/wp-admin/css/dashboard.min.css b/wp-admin/css/dashboard.min.css new file mode 100644 index 0000000..ba0b6b5 --- /dev/null +++ b/wp-admin/css/dashboard.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#dashboard_quick_press .draft-title,#the-comment-list td.comment,.dashboard-comment-wrap{word-wrap:break-word}#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: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;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}#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 img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}#dashboard_right_now .sub,.community-events li:first-child,.community-events li~li,.community-events-footer{border-top:1px solid #eee}.welcome-panel h2{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h3{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#72777c}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:10px;right:10px;padding:10px 15px 10px 21px;font-size:13px;line-height:1.23076923;text-decoration:none}.welcome-panel .welcome-panel-close:before{position:absolute;top:8px;left:0;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 13px 3px 0;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.welcome-panel-content{margin-left:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;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:#444}.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;padding:0 0 8px}.welcome-panel .welcome-icon{background:0 0!important}#dashboard_right_now li a:before,#dashboard_right_now li span:before,.welcome-panel .welcome-icon:before{color:#82878c;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;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";top:-1px}.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}#dashboard_right_now li a:before,#dashboard_right_now li>span:before{content:"\f159";padding:0 5px 0 0}#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"}.community-events-errors{margin:0}.community-events-loading{padding:10px 12px 8px}.community-events{margin-bottom:6px;padding:0 12px}.community-events .spinner{float:none;margin:5px 2px 0;vertical-align:top}.community-events [aria-hidden=true],.community-events-errors [aria-hidden=true],.community-events-errors[aria-hidden=true],.community-events-loading[aria-hidden=true],.community-events[aria-hidden=true]{display:none}.community-events .activity-block:first-child,.community-events h2{padding-top:12px;padding-bottom:10px}.community-events-form{margin:15px 0 5px}.community-events-form .regular-text{width:40%;height:29px;margin:0;vertical-align:top}.community-events li.event-none{border-left:4px solid #00a0d2}.community-events-form label{display:inline-block;vertical-align:top;line-height:28px;height:28px}.community-events .activity-block>p{margin-bottom:0;display:inline}.community-events-toggle-location{vertical-align:middle}#community-events-submit{margin-left:3px;margin-right:3px}#dashboard-widgets .community-events-cancel.button-link{vertical-align:top;line-height:26px;height:28px;text-decoration:underline}.community-events ul{background-color:#fafafa;padding-left:0;padding-right:0;padding-bottom:0}.community-events li{margin:0;padding:8px 12px;color:#72777c}.community-events .activity-block.last{border-bottom:1px solid #eee;padding-top:0;margin-top:-1px}.community-events .event-info{display:block}.event-icon{height:18px;padding-right:10px;width:18px;display:none}.event-icon:before{color:#82878C;font-size:18px}.event-meetup .event-icon:before{content:"\f484"}.event-wordcamp .event-icon:before{content:"\f486"}.community-events .event-title{font-weight:600;display:block}.community-events .event-date,.community-events .event-time{display:block}.community-events-footer{margin-top:0;margin-bottom:0;padding:12px;color:#ddd}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date,.rssSummary{color:#72777c}.community-events-footer .screen-reader-text{height:inherit;white-space:nowrap}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading{padding:12px 12px 0;margin-bottom:1em!important}#dashboard_primary .inside .notice,body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form p{margin-top:0}.rssSummary{margin-top:4px}#dashboard_primary .rss-widget{font-size:13px;padding:0 12px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span.rss-date{margin-left:12px}#dashboard_primary .rss-widget ul li{padding:4px 0;margin:0}#dashboard_right_now ul{margin:0;display:inline-block;width:100%}#dashboard_right_now li{width:50%;float:left;margin-bottom:10px}#dashboard_right_now .inside{padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{float:right;position:relative;top:-5px;margin-left:5px}.mu-storage{overflow:hidden}#dashboard-widgets h3.mu-storage{margin:0 0 10px;padding:0;font-size:14px;font-weight:400}#dashboard_right_now .sub{color:#555d66;background:#f5f5f5;padding:10px 12px 6px}#dashboard_right_now .sub h3{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_quick_press .drafts li time,#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#72777c}#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{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{box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}.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:none}#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 p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{margin:0 5px 0 0}#dashboard-widgets h3,#dashboard-widgets h4,#dashboard_quick_press .drafts h2{margin:0 12px 8px;padding:0;font-size:14px;font-weight:400;color:#23282d}#dashboard_quick_press .drafts h2{line-height:inherit}#dashboard-widgets .inside h3,#dashboard-widgets .inside h4{margin-left:0;margin-right:0}#dashboard_activity .comment-meta span.approve:before{content:"\f227";font:20px/.5 dashicons;margin-left:5px;vertical-align:middle;position:relative;top:-1px;margin-right:2px}#dashboard_activity .inside{margin:0;padding-bottom:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 0 12px;text-align:center}#dashboard_activity .no-activity p{color:#72777c;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:0 -12px;padding:8px 12px 4px}#dashboard_activity .subsubsub a .count,#dashboard_activity .subsubsub a.current .count{color:#72777c}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{margin-bottom:8px}#future-posts ul span,#published-posts ul span{display:inline-block;margin-right:5px;min-width:150px;color:#72777c}.activity-block{border-bottom:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}.activity-block:last-child{border-bottom:none}.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;margin-left:12px}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list .avatar{position:absolute;top:12px}#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 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{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.postbox .button-link .edit-box{display:none}.edit-box{opacity:0}.edit-box:focus,.hndle:hover .edit-box{opacity:1}#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:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets .button-link,#dashboard-widgets a{text-decoration:none}#dashboard-widgets h2 a,#dashboard_browser_nag a{text-decoration:underline}#dashboard-widgets .hndle .postbox-title-action{float:right;line-height:1.2}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative;margin:0 -12px}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{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{min-height:50px;margin:0;padding: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-meta{line-height:1.5em;margin:0;color:#666}#latest-comments #the-comment-list .comment-meta 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}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;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:13px;font-weight:600;line-height:1.4em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#72777c;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_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{color:#fff}#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;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h2{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h2{border-bottom-color:#f6e2ac;background:0 0;color:#fff;box-shadow:none}#dashboard_browser_nag h2.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 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){#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container,#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#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:after,#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@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;height:0;min-height:0}#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@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}.community-events-toggle-location{height:38px;vertical-align:baseline}.community-events-form .regular-text{height:32px}#community-events-submit{margin-bottom:0;vertical-align:top}#dashboard-widgets .community-events-cancel.button-link,.community-events-form label{font-size:14px;line-height:normal;height:auto;padding:6px 0;border:1px solid transparent}.community-events .spinner{margin-top:7px}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:40px;white-space:nowrap;width:20px;height:20px;padding:5px;top:5px;right:5px}.welcome-panel .welcome-panel-close:before{font-size:20px;top:5px;left:-35px}}@media screen and (min-width:355px){.community-events .event-info{display:table-row;float:left;max-width:59%}.event-icon,.event-icon[aria-hidden=true],.event-info-inner{display:table-cell}.community-events .event-date-time{float:right;max-width:39%}.community-events .event-date,.community-events .event-time{text-align:right}} \ No newline at end of file diff --git a/wp-admin/css/deprecated-media-rtl.css b/wp-admin/css/deprecated-media-rtl.css new file mode 100644 index 0000000..c83d3b0 --- /dev/null +++ b/wp-admin/css/deprecated-media-rtl.css @@ -0,0 +1,413 @@ +/* Styles for the media library iframe (not used on the Library screen) */ + +div#media-upload-header { + margin: 0; + padding: 5px 5px 0; + font-weight: 600; + position: relative; + border-bottom: 1px solid #ddd; + background: #f9f9f9; +} + +#sidemenu { + overflow: hidden; + float: none; + position: relative; + right: 0; + bottom: -1px; + margin: 0 5px; + padding-right: 10px; + list-style: none; + font-size: 12px; + font-weight: 400; +} + +#sidemenu a { + padding: 0 7px; + display: block; + float: right; + line-height: 28px; + border-top: 1px solid #f9f9f9; + border-bottom: 1px solid #ddd; + background-color: #f9f9f9; + text-decoration: 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; + border: 1px solid #ddd; + border-bottom-color: #f1f1f1; + background-color: #f1f1f1; + color: #000; +} + +#media-upload:after { /* clearfix */ + content: ""; + display: table; + clear: both; +} + +#media-upload .slidetoggle { + border-top-color: #ddd; +} + +#media-upload input[type="radio"] { + padding: 0; +} + +.media-upload-form label.form-help, +td.help { + color: #72777c; +} + +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: 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, +span.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: 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: 8px 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 #a0a5aa; + 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 { + 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 #ddd; +} + +h3.media-title { + font-size: 1.6em; +} + +h4.media-sub-title { + border-bottom: 1px solid #ddd; + 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: 100%; + clear: both; + cursor: default; + background: #fff; +} + +#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: #444; + margin-left: 15px; +} + +#gallery-settings .align .field label { + margin: 0 3px 0 1em; +} + +#gallery-settings p.ml-submit { + border-top: 1px solid #ddd; +} + +#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: 0; + padding: 1em; +} + +p.media-types-required-info { + padding-top: 0; +} + +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, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .image-align-none-label { + background-image: url(../images/align-none-2x.png?ver=20120916); + background-size: 21px 15px; + } + + .image-align-left-label { + background-image: url(../images/align-left-2x.png?ver=20120916); + background-size: 22px 15px; + } + + .image-align-center-label { + background-image: url(../images/align-center-2x.png?ver=20120916); + background-size: 21px 15px; + } + + .image-align-right-label { + background-image: url(../images/align-right-2x.png?ver=20120916); + 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..e8d5312 --- /dev/null +++ b/wp-admin/css/deprecated-media-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#sidemenu,th{position:relative}#sidemenu a,#sort-buttons a{text-decoration:none}div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:600;position:relative;border-bottom:1px solid #ddd;background:#f9f9f9}#sidemenu{overflow:hidden;float:none;right:0;bottom:-1px;margin:0 5px;padding-right:10px;list-style:none;font-size:12px;font-weight:400}#sidemenu a{padding:0 7px;display:block;float:right;line-height:28px;border-top:1px solid #f9f9f9;border-bottom:1px solid #ddd;background-color:#f9f9f9;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;border:1px solid #ddd;border-bottom-color:#f1f1f1;background-color:#f1f1f1;color:#000}#media-upload:after{content:"";display:table;clear:both}#media-upload .slidetoggle{border-top-color:#ddd}#media-upload input[type=radio]{padding:0}.media-upload-form label.form-help,td.help{color:#72777c;font-family:sans-serif;font-style:italic;font-weight:400}form{margin:1em}#search-filter{text-align:left}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:none;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) center left no-repeat}.image-align-left-label{background:url(../images/align-left.png) center left no-repeat}.image-align-center-label{background:url(../images/align-center.png) center left no-repeat}.image-align-right-label{background:url(../images/align-right.png) center left no-repeat}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,span.required{text-decoration:none;border:none}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type=text],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload 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:8px 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 #a0a5aa;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{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,h4.media-sub-title{border-bottom:1px solid #ddd;padding:0 0 3px}#gallery-settings .title{clear:both;font-size:1.6em}h3.media-title{font-size:1.6em}h4.media-sub-title{font-size:1.3em;margin:12px}#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:100%;clear:both;cursor:default;background:#fff}#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:#444;margin-left:15px}#gallery-settings .align .field label{margin:0 3px 0 1em}#gallery-settings p.ml-submit{border-top:1px solid #ddd}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 0 -8px 25px;text-align:left;max-width:625px}#sort-buttons #asc,#sort-buttons #showall{padding-right:5px}#sort-buttons span{margin-left:25px}p.media-types{margin:0;padding:1em}p.media-types-required-info{padding-top:0}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);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..01848f3 --- /dev/null +++ b/wp-admin/css/deprecated-media.css @@ -0,0 +1,413 @@ +/* Styles for the media library iframe (not used on the Library screen) */ + +div#media-upload-header { + margin: 0; + padding: 5px 5px 0; + font-weight: 600; + position: relative; + border-bottom: 1px solid #ddd; + background: #f9f9f9; +} + +#sidemenu { + overflow: hidden; + float: none; + position: relative; + left: 0; + bottom: -1px; + margin: 0 5px; + padding-left: 10px; + list-style: none; + font-size: 12px; + font-weight: 400; +} + +#sidemenu a { + padding: 0 7px; + display: block; + float: left; + line-height: 28px; + border-top: 1px solid #f9f9f9; + border-bottom: 1px solid #ddd; + background-color: #f9f9f9; + text-decoration: 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; + border: 1px solid #ddd; + border-bottom-color: #f1f1f1; + background-color: #f1f1f1; + color: #000; +} + +#media-upload:after { /* clearfix */ + content: ""; + display: table; + clear: both; +} + +#media-upload .slidetoggle { + border-top-color: #ddd; +} + +#media-upload input[type="radio"] { + padding: 0; +} + +.media-upload-form label.form-help, +td.help { + color: #72777c; +} + +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: 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, +span.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: 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: 8px 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 #a0a5aa; + 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 { + 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 #ddd; +} + +h3.media-title { + font-size: 1.6em; +} + +h4.media-sub-title { + border-bottom: 1px solid #ddd; + 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: 100%; + clear: both; + cursor: default; + background: #fff; +} + +#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: #444; + margin-right: 15px; +} + +#gallery-settings .align .field label { + margin: 0 1em 0 3px; +} + +#gallery-settings p.ml-submit { + border-top: 1px solid #ddd; +} + +#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: 0; + padding: 1em; +} + +p.media-types-required-info { + padding-top: 0; +} + +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, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .image-align-none-label { + background-image: url(../images/align-none-2x.png?ver=20120916); + background-size: 21px 15px; + } + + .image-align-left-label { + background-image: url(../images/align-left-2x.png?ver=20120916); + background-size: 22px 15px; + } + + .image-align-center-label { + background-image: url(../images/align-center-2x.png?ver=20120916); + background-size: 21px 15px; + } + + .image-align-right-label { + background-image: url(../images/align-right-2x.png?ver=20120916); + 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..a22cb40 --- /dev/null +++ b/wp-admin/css/deprecated-media.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#sidemenu,th{position:relative}#sidemenu a,#sort-buttons a{text-decoration:none}div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:600;position:relative;border-bottom:1px solid #ddd;background:#f9f9f9}#sidemenu{overflow:hidden;float:none;left:0;bottom:-1px;margin:0 5px;padding-left:10px;list-style:none;font-size:12px;font-weight:400}#sidemenu a{padding:0 7px;display:block;float:left;line-height:28px;border-top:1px solid #f9f9f9;border-bottom:1px solid #ddd;background-color:#f9f9f9;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;border:1px solid #ddd;border-bottom-color:#f1f1f1;background-color:#f1f1f1;color:#000}#media-upload:after{content:"";display:table;clear:both}#media-upload .slidetoggle{border-top-color:#ddd}#media-upload input[type=radio]{padding:0}.media-upload-form label.form-help,td.help{color:#72777c;font-family:sans-serif;font-style:italic;font-weight:400}form{margin:1em}#search-filter{text-align:right}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:none;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) center left no-repeat}.image-align-left-label{background:url(../images/align-left.png) center left no-repeat}.image-align-center-label{background:url(../images/align-center.png) center left no-repeat}.image-align-right-label{background:url(../images/align-right.png) center left no-repeat}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,span.required{text-decoration:none;border:none}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type=text],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload 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:8px 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 #a0a5aa;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{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,h4.media-sub-title{border-bottom:1px solid #ddd;padding:0 0 3px}#gallery-settings .title{clear:both;font-size:1.6em}h3.media-title{font-size:1.6em}h4.media-sub-title{font-size:1.3em;margin:12px}#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:100%;clear:both;cursor:default;background:#fff}#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:#444;margin-right:15px}#gallery-settings .align .field label{margin:0 1em 0 3px}#gallery-settings p.ml-submit{border-top:1px solid #ddd}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 25px -8px 0;text-align:right;max-width:625px}#sort-buttons #asc,#sort-buttons #showall{padding-left:5px}#sort-buttons span{margin-right:25px}p.media-types{margin:0;padding:1em}p.media-types-required-info{padding-top:0}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);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..793d6d4 --- /dev/null +++ b/wp-admin/css/edit-rtl.css @@ -0,0 +1,1675 @@ +#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 { + float: right; +} + +#show-comments .spinner { + float: none; + margin-top: 0; +} + +#lost-connection-notice .spinner { + visibility: visible; + float: right; + margin: 0 0 0 5px; +} + +#titlediv { + position: relative; +} + +#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 0 3px; + background-color: #fff; +} + +#titlediv #title-prompt-text { + color: #72777c; + position: absolute; + font-size: 1.7em; + padding: 11px 10px; +} + +input#link_description, +input#link_url { + width: 98%; +} + +#pending { + background: 100% none; + border: 0 none; + padding: 0; + font-size: 11px; + margin-top: -1px; +} + +#edit-slug-box, +#comment-link-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; + padding: 0; + font-size: 11px; +} + +#comment-link-box { + margin: 5px 0; + padding: 0 5px; +} + +#editable-post-name-full { + display: none; +} + +#editable-post-name { + font-weight: 600; +} + +#editable-post-name input { + font-size: 13px; + font-weight: 400; + height: 24px; + margin: 0; + width: 16em; +} + +.postarea h3 label { + float: right; +} + +body.post-new-php .submitbox .submitdelete { + display: none; +} + +.submitbox .submit a:hover { + text-decoration: underline; +} + +.submitbox .submit input { + margin-bottom: 8px; + margin-left: 4px; + padding: 6px; +} + +#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; + 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: #32373c; +} + +.category-tabs { + margin: 8px 0 5px; +} + +/* Back-compat for pre-4.4 */ +#category-adder h4 { + margin: 0; +} + +.taxonomy-add-new { + display: inline-block; + margin: 10px 0; + font-weight: 600; +} + +#side-sortables .add-menu-item-tabs, +.wp-tab-bar { + margin-bottom: 3px; +} + +#normal-sortables .postbox #replyrow .submit { + float: none; + margin: 0; + padding: 5px 7px 10px; + overflow: hidden; +} + +#side-sortables .submitbox .submit input, +#side-sortables .submitbox .submit .preview, +#side-sortables .submitbox .submit a.preview:hover { + border: 0 none; +} + +/* @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 #ddd; + 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 6px; +} + +#set-post-thumbnail { + display: inline-block; + max-width: 100%; +} + +#postimagediv .inside img { + max-width: 100%; + height: auto; + width: auto; + vertical-align: top; + background-image: linear-gradient(-45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4), linear-gradient(-45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4); + background-position: 100% 0, 10px 10px; + background-size: 20px 20px; +} + +form#tags-filter { + position: relative; +} + +/* 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; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + z-index: 999; +} + +#post-status-info td { + font-size: 12px; +} + +.autosave-info { + padding: 2px 10px; + 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:ignore*/ +.rtl #content-resize-handle { + background-image: url(../images/resize-rtl.gif); + background-position: left bottom; +} + +.wp-editor-expand #content-resize-handle { + display: none; +} + +#postdivrich #content { + resize: none; +} + +#wp-word-count { + display: block; + padding: 2px 10px; +} + +#wp-content-editor-container { + position: relative; +} + +.wp-editor-expand #wp-content-editor-tools { + z-index: 1000; + border-bottom: 1px solid #e5e5e5; +} + +.wp-editor-expand #wp-content-editor-container { + box-shadow: none; + margin-top: -1px; +} + +.wp-editor-expand #wp-content-editor-container { + border-bottom: 0 none; +} + +.wp-editor-expand div.mce-statusbar { + z-index: 1; +} + +.wp-editor-expand #post-status-info { + border-top: 1px solid #e5e5e5; +} + +.wp-editor-expand div.mce-toolbar-grp { + z-index: 999; +} + +/* TinyMCE native fullscreen mode override */ +.mce-fullscreen #wp-content-wrap .mce-menubar, +.mce-fullscreen #wp-content-wrap .mce-toolbar-grp, +.mce-fullscreen #wp-content-wrap .mce-edit-area, +.mce-fullscreen #wp-content-wrap .mce-statusbar { + position: static !important; + width: auto !important; + padding: 0 !important; +} + +.mce-fullscreen #wp-content-wrap .mce-statusbar { + visibility: visible !important; +} + +.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw { + display: none; +} + +.post-php.mce-fullscreen #wpadminbar, +.mce-fullscreen #wp-content-wrap .mce-wp-dfw { + display: none; +} +/* End TinyMCE native fullscreen mode override */ + +#wp-content-editor-tools { + background-color: #f1f1f1; + padding-top: 20px; +} + +#poststuff #post-body.columns-2 #side-sortables { + width: 280px; +} + +#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; +} + +#post-body .misc-pub-post-status:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before, +span.wp-media-buttons-icon:before { + color: #82878c; +} + +#post-body .misc-pub-post-status:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before { + font: normal 20px/1 dashicons; + speak: none; + display: inline-block; + margin-right: -1px; + padding-left: 3px; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#post-body .misc-pub-post-status:before { + content: "\f173"; +} + +#post-body #visibility:before { + content: "\f177"; +} + +.curtime #timestamp:before { + content: "\f145"; + position: relative; + 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%; + max-height: 70%; + right: 50%; + width: 450px; + margin-right: -225px; + background: #fff; + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + line-height: 1.5; + z-index: 1000005; + overflow-y: auto; +} + +.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, +#file-editor-warning .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 { + display: block; + margin: 12px 0 0; + height: 4em; + width: 100%; +} + +.tagchecklist { + margin-right: 14px; + font-size: 12px; + overflow: auto; +} + +.tagchecklist br { + display: none; +} + +.tagchecklist strong { + margin-right: -8px; + position: absolute; +} + +.tagchecklist > li { + float: right; + margin-left: 25px; + font-size: 13px; + line-height: 1.8em; + cursor: default; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; +} + +.tagchecklist .ntdelbutton { + position: absolute; + width: 24px; + height: 24px; + border: none; + margin: 0 -19px 0 0; + padding: 0; + background: none; + cursor: pointer; + text-indent: 0; +} + +#poststuff h3.hndle, /* Back-compat for pre-4.4 */ +#poststuff .stuffbox > h3, /* Back-compat for pre-4.4 */ +#poststuff h2 { + 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%; +} + +.ie8 #poststuff .inside #parent_id, +.ie8 #poststuff .inside #page_template { + width: 250px; +} + +.post-attributes-label-wrapper { + margin-bottom: 0.5em; +} + +.post-attributes-label { + vertical-align: baseline; + font-weight: 600; +} + +#post-visibility-select { + line-height: 1.5em; + margin-top: 3px; +} + +#linksubmitdiv .inside, /* Old Link Manager back-compat. */ +#poststuff #submitdiv .inside { + margin: 0; + padding: 0; +} + +#post-body-content, +.edit-form-section { + margin-bottom: 20px; +} + +/* Suggested text for privacy policy */ +.wp-privacy-policy-guide { + max-width: 1000px; +} + +.privacy-text-box { + width: calc(100% - 260px); +} + +.privacy-text-box-toc { + float: left; + width: 250px; + background-color: #fff; +} + +.privacy-text-box-toc p { + margin: 0; + padding: 0.7em 1em; + border-bottom: 1px solid #eee; +} + +.privacy-text-box-toc ol { + margin-right: 2em; +} + +.wp-privacy-policy-guide h3 { + font-size: 1.2em; + margin: 1em 0 0.5em; +} + +.privacy-text-section .privacy-text-copy { + float: left; +} + +.privacy-text-section { + position: relative; + border-top: 1px solid #e3e3e3; +} + +.privacy-text-box-head, +.privacy-text-section.text-removed { + padding-bottom: 12px; +} + +.text-removed .policy-text { + font-style: italic; + color: #666; + font-weight: 600; +} + +.privacy-text-actions { + height: 32px; + line-height: 32px; + padding-bottom: 6px; +} + +.wp-privacy-policy-guide .policy-text h2 { + margin: 1.2em 0 1em; + padding: 0; +} + +.suggested-policy-content { + font-style: italic; +} + +.privacy-text-section a.return-to-top { + float: left; + margin-left: -250px; + margin-top: 6px; +} + +.hide-privacy-policy-tutorial .privacy-policy-tutorial { + visibility: hidden; +} + +.wp-suggested-text p { + font-style: italic; +} + +.wp-suggested-text p.privacy-policy-tutorial { + font-style: normal; +} + +.notice.wp-pp-notice { + margin: 15px 0 3px; +} + +/*------------------------------------------------------------------------------ + 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 #ddd; + 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; + transition: all .1s ease-in-out; +} + +a.post-state-format:hover:before, +a.post-format-icon:hover:before { + color: #00a0d2; +} + +#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 #ddd; + 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 label { + display: block; + padding: 2px 0; +} + +.form-field input[type="text"], +.form-field input[type="password"], +.form-field input[type="email"], +.form-field input[type="number"], +.form-field input[type="search"], +.form-field input[type="tel"], +.form-field input[type="url"], +.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: 1em 0; + padding: 0; +} + +.form-wrap .form-field #parent { + max-width: 100%; +} + +.col-wrap h2 { + margin: 12px 0; + font-size: 1.1em; +} + +.col-wrap p.submit { + margin-top: -10px; +} + +.edit-term-notes { + margin-top: 2em; +} + +/*------------------------------------------------------------------------------ + 13.0 - Tags +------------------------------------------------------------------------------*/ + +#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; +} + +p.popular-tags { + border: none; + line-height: 2em; + 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 h2 { + margin: 2px 0 12px; +} + +.the-tagcloud ul { + margin: 0; +} + +.the-tagcloud ul li { + display: inline-block; +} + +/* Suggest.js autocomplete, no more used by core. */ +.ac_results { + display: none; + margin: -1px 0 0; + padding: 0; + list-style: none; + position: absolute; + z-index: 10000; + border: 1px solid #5b9dd9; + background-color: #fff; +} + +.wp-customizer .ac_results { + z-index: 500000; +} + +.ac_results li { + margin: 0; + padding: 5px 10px; + white-space: nowrap; + text-align: right; +} + +.ac_results .ac_over, +.ac_over .ac_match { + background-color: #0073aa; + color: #fff; + cursor: pointer; +} + +.ac_match { + text-decoration: underline; +} + +#edittag { + max-width: 800px; +} + +.edit-tag-actions { + margin-top: 20px; + overflow: hidden; + padding: 10px; + margin-left: 10px; +} + +/* Comments */ + +.comment-php .wp-editor-area { + height: 200px; +} + +.comment-ays th, +.comment-ays td { + padding: 10px 15px; +} + +.comment-ays .comment-content ul { + list-style: initial; + margin-right: 2em; +} + +.comment-ays .comment-content a[href]:after { + content: '(' attr( href ) ')'; + display: inline-block; + padding: 0 4px; + color: #72777C; + font-size: 13px; + word-break: break-all; +} + +.comment-ays .comment-content p.edit-comment { + margin-top: 10px; +} + +.comment-ays .comment-content p.edit-comment a[href]:after { + content: ''; + padding: 0; +} + +.comment-ays-submit .button-cancel { + margin-right: 1em; +} + +.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: 400; + 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; +} + +/* DFW 2 +-------------------------------------------------------------- */ + +#wp-content-wrap .mce-wp-dfw, +#qt_content_dfw { + display: none; +} + +.wp-editor-expand #wp-content-wrap .mce-wp-dfw, +.wp-editor-expand #qt_content_dfw { + display: inline-block; +} + +.focus-on .wrap > h1, +.focus-on .page-title-action, +.focus-on #wpfooter, +.focus-on .postbox-container > *, +.focus-on div.updated, +.focus-on div.error, +.focus-on div.notice, +.focus-on .update-nag, +.focus-on #wp-toolbar, +.focus-on #screen-meta-links, +.focus-on #screen-meta { + opacity: 0; + transition-duration: 0.6s; + transition-property: opacity; + transition-timing-function: ease-in-out; +} + +.focus-on #wp-toolbar { + opacity: 0.3; +} + +.focus-off .wrap > h1, +.focus-off .page-title-action, +.focus-off #wpfooter, +.focus-off .postbox-container > *, +.focus-off div.updated, +.focus-off div.error, +.focus-off div.notice, +.focus-off .update-nag, +.focus-off #wp-toolbar, +.focus-off #screen-meta-links, +.focus-off #screen-meta { + opacity: 1; + transition-duration: 0.2s; + transition-property: opacity; + transition-timing-function: ease-in-out; +} + +.focus-off #wp-toolbar { + -webkit-transform: translate(0, 0); +} + +.focus-on #adminmenuback, +.focus-on #adminmenuwrap { + transition-duration: 0.6s; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + transition-timing-function: ease-in-out; +} + +.focus-on #adminmenuback, +.focus-on #adminmenuwrap { + -webkit-transform: translateX( 100% ); + transform: translateX( 100% ); +} + +.focus-off #adminmenuback, +.focus-off #adminmenuwrap { + -webkit-transform: translateX( 0 ); + transform: translateX( 0 ); + transition-duration: 0.2s; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + transition-timing-function: ease-in-out; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-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; + background-size: 11px 11px; + } + + /*rtl:ignore*/ + .rtl #content-resize-handle, + .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background-image: url(../images/resize-rtl-2x.gif); + background-position: 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; + width: auto; + } + + /* hide the radio buttons for column prefs */ + .screen-layout, + .columns-prefs { + display: none; + } +} + +@media screen and ( max-width: 782px ) { + .wp-core-ui .edit-tag-actions .button-primary { + margin-bottom: 0; + } + + #post-body-content { + min-width: 0; + } + + #titlediv #title-prompt-text { + padding: 10px 10px; + } + + #poststuff h3.hndle, /* Back-compat for pre-4.4 */ + #poststuff .stuffbox > h3, /* Back-compat for pre-4.4 */ + #poststuff h2 { + 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 > li { + font-size: 16px; + line-height: 1.4; + } + + /* 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; + } + + button.wp-switch-editor { + font-size: 16px; + line-height: 1em; + margin: 7px 7px 0 0; + padding: 8px 12px; + } + + #wp-content-media-buttons a { + font-size: 14px; + padding: 6px 10px; + } + + .wp-media-buttons span.wp-media-buttons-icon, + .wp-media-buttons span.jetpack-contact-form-icon { + width: 22px !important; + margin-right: -2px !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; + } + + #publishing-action .spinner { + float: none; + margin-top: -2px; /* Half of the Publish button's bottom margin. */ + } + + /* Moderate Comment */ + .comment-ays th, + .comment-ays td { + padding-bottom: 0; + } + + .comment-ays td { + padding-top: 6px; + } + + /* Links */ + .links-table #link_rel { + max-width: none; + } + + .links-table th, + .links-table td { + padding: 10px 0; + } + + .privacy-text-box { + width: auto; + } + + .privacy-text-box-toc { + float: none; + width: auto; + height: 100%; + } + + .privacy-text-section a.return-to-top { + float: none; + margin: 0; + } +} diff --git a/wp-admin/css/edit-rtl.min.css b/wp-admin/css/edit-rtl.min.css new file mode 100644 index 0000000..c69ffbe --- /dev/null +++ b/wp-admin/css/edit-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#pending,#poststuff #titlewrap{border:0;padding:0}#pending,#poststuff #post-body{padding:0}#editable-post-name-full,body.post-new-php .submitbox .submitdelete{display:none}#post-status-info,.postbox{box-shadow:0 1px 1px rgba(0,0,0,.04)}#titlediv,#wp-content-editor-container,.postbox,form#tags-filter{position:relative}#poststuff{padding-top:10px;min-width:763px}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a{float:right}#show-comments .spinner{float:none;margin-top:0}#lost-connection-notice .spinner{visibility:visible;float:right;margin:0 0 0 5px}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0 0 3px;background-color:#fff}#titlediv #title-prompt-text{color:#72777c;position:absolute;font-size:1.7em;padding:11px 10px}input#link_description,input#link_url{width:98%}#pending{background:100% none;font-size:11px;margin-top:-1px}#comment-link-box,#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-left:10px;padding:0;font-size:11px}#comment-link-box{margin:5px 0;padding:0 5px}#editable-post-name{font-weight:600}#editable-post-name input{font-size:13px;font-weight:400;height:24px;margin:0;width:16em}.postarea h3 label{float:right}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-left:4px;padding:6px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{min-width:255px;border:1px solid #e5e5e5;background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;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:#32373c}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:0}.taxonomy-add-new{display:inline-block;margin:10px 0;font-weight:600}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:5px 7px 10px;overflow:hidden}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border: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:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #ddd;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 6px}#set-post-thumbnail{display:inline-block;max-width:100%}.ui-tabs-hide,.wp-editor-expand #content-resize-handle,.wp-hidden-children .wp-hidden-child{display:none}#postimagediv .inside img{max-width:100%;height:auto;width:auto;vertical-align:top;background-image:linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:100% 0,10px 10px;background-size:20px 20px}#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;z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:left}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) left bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background-image:url(../images/resize-rtl.gif);background-position:left bottom}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw,.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#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}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#82878c}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;margin-right:-1px;padding-left:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.suggested-policy-content,.wp-suggested-text p{font-style:italic}#post-body .misc-pub-post-status:before{content:"\f173"}#post-body #visibility:before{content:"\f177"}.curtime #timestamp:before{content:"\f145";position:relative;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%;max-height:70%;right:50%;width:450px;margin-right:-225px;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005;overflow-y:auto}.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}#file-editor-warning .button,#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{display:block;margin:12px 0 0;height:4em;width:100%}.tagchecklist{margin-right:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-right:-8px;position:absolute}.tagchecklist>li{float:right;margin-left:25px;font-size:13px;line-height:1.8em;cursor:default;max-width:100%;overflow:hidden;text-overflow:ellipsis}.tagchecklist .ntdelbutton{position:absolute;width:24px;height:24px;border:none;margin:0 -19px 0 0;padding:0;background:0 0;cursor:pointer;text-indent:0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{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%}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}.post-attributes-label-wrapper{margin-bottom:.5em}.post-attributes-label{vertical-align:baseline;font-weight:600}#post-visibility-select{line-height:1.5em;margin-top:3px}#linksubmitdiv .inside,#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}.wp-privacy-policy-guide{max-width:1000px}.privacy-text-box{width:calc(100% - 260px)}.privacy-text-box-toc{float:left;width:250px;background-color:#fff}.privacy-text-box-toc p{margin:0;padding:.7em 1em;border-bottom:1px solid #eee}.privacy-text-box-toc ol{margin-right:2em}.wp-privacy-policy-guide h3{font-size:1.2em;margin:1em 0 .5em}.privacy-text-section .privacy-text-copy{float:left}.privacy-text-section{position:relative;border-top:1px solid #e3e3e3}.privacy-text-box-head,.privacy-text-section.text-removed{padding-bottom:12px}.text-removed .policy-text{font-style:italic;color:#666;font-weight:600}.privacy-text-actions{height:32px;line-height:32px;padding-bottom:6px}.wp-privacy-policy-guide .policy-text h2{margin:1.2em 0 1em;padding:0}.privacy-text-section a.return-to-top{float:left;margin-left:-250px;margin-top:6px}.hide-privacy-policy-tutorial .privacy-policy-tutorial{visibility:hidden}.wp-suggested-text p.privacy-policy-tutorial{font-style:normal}.notice.wp-pp-notice{margin:15px 0 3px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;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 #ddd;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;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#00a0d2}#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:1px solid #ddd;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 0}.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field input[type=number],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=url],.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:1em 0;padding:0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h2{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.edit-term-notes{margin-top:2em}#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}p.popular-tags{border:none;line-height:2em;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 h2{margin:2px 0 12px}.the-tagcloud ul{margin:0}.the-tagcloud ul li{display:inline-block}.ac_results{display:none;margin:-1px 0 0;padding:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{margin:0;padding:5px 10px;white-space:nowrap;text-align:right}.ac_over .ac_match,.ac_results .ac_over{background-color:#0073aa;color:#fff;cursor:pointer}.ac_match{text-decoration:underline}#edittag{max-width:800px}.edit-tag-actions{margin-top:20px;overflow:hidden;padding:10px;margin-left:10px}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{padding:10px 15px}.comment-ays .comment-content ul{list-style:outside;margin-right:2em}.comment-ays .comment-content a[href]:after{content:'(' attr(href) ')';display:inline-block;padding:0 4px;color:#72777C;font-size:13px;word-break:break-all}.comment-ays .comment-content p.edit-comment{margin-top:10px}.comment-ays .comment-content p.edit-comment a[href]:after{content:'';padding:0}#comment-status-radio label,.links-table td,.links-table th{padding:5px 0}.comment-ays-submit .button-cancel{margin-right:1em}.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}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 label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .page-title-action,.focus-on .postbox-container>*,.focus-on .update-nag,.focus-on .wrap>h1,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .page-title-action,.focus-off .postbox-container>*,.focus-off .update-nag,.focus-off .wrap>h1,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;transition-duration:.2s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transition-duration:.6s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) left bottom no-repeat;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background-image:url(../images/resize-rtl-2x.gif);background-position: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;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){.wp-core-ui .edit-tag-actions .button-primary{margin-bottom:0}#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{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}.tagsdiv .newtag,ul.categorychecklist li{margin-bottom:15px}ul.category-tabs li.tabs{padding: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}.tagchecklist{margin:25px 10px}.tagchecklist>li{font-size:16px;line-height:1.4}#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:6px 6px 6px 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}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 7px 0 0;padding:8px 12px}#wp-content-media-buttons a{font-size:14px;padding:6px 10px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-right:-2px!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}#publishing-action .spinner{float:none;margin-top:-2px}.comment-ays td,.comment-ays th{padding-bottom:0}.comment-ays td{padding-top:6px}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}.privacy-text-box{width:auto}.privacy-text-box-toc{float:none;width:auto;height:100%}.privacy-text-section a.return-to-top{float:none;margin:0}} \ No newline at end of file diff --git a/wp-admin/css/edit.css b/wp-admin/css/edit.css new file mode 100644 index 0000000..1c3f8b4 --- /dev/null +++ b/wp-admin/css/edit.css @@ -0,0 +1,1675 @@ +#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 { + float: left; +} + +#show-comments .spinner { + float: none; + margin-top: 0; +} + +#lost-connection-notice .spinner { + visibility: visible; + float: left; + margin: 0 5px 0 0; +} + +#titlediv { + position: relative; +} + +#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 0 3px; + background-color: #fff; +} + +#titlediv #title-prompt-text { + color: #72777c; + position: absolute; + font-size: 1.7em; + padding: 11px 10px; +} + +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, +#comment-link-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; + padding: 0; + font-size: 11px; +} + +#comment-link-box { + margin: 5px 0; + padding: 0 5px; +} + +#editable-post-name-full { + display: none; +} + +#editable-post-name { + font-weight: 600; +} + +#editable-post-name input { + font-size: 13px; + font-weight: 400; + height: 24px; + margin: 0; + width: 16em; +} + +.postarea h3 label { + float: left; +} + +body.post-new-php .submitbox .submitdelete { + display: none; +} + +.submitbox .submit a:hover { + text-decoration: underline; +} + +.submitbox .submit input { + margin-bottom: 8px; + margin-right: 4px; + padding: 6px; +} + +#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; + 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: #32373c; +} + +.category-tabs { + margin: 8px 0 5px; +} + +/* Back-compat for pre-4.4 */ +#category-adder h4 { + margin: 0; +} + +.taxonomy-add-new { + display: inline-block; + margin: 10px 0; + font-weight: 600; +} + +#side-sortables .add-menu-item-tabs, +.wp-tab-bar { + margin-bottom: 3px; +} + +#normal-sortables .postbox #replyrow .submit { + float: none; + margin: 0; + padding: 5px 7px 10px; + overflow: hidden; +} + +#side-sortables .submitbox .submit input, +#side-sortables .submitbox .submit .preview, +#side-sortables .submitbox .submit a.preview:hover { + border: 0 none; +} + +/* @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 #ddd; + 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 6px; +} + +#set-post-thumbnail { + display: inline-block; + max-width: 100%; +} + +#postimagediv .inside img { + max-width: 100%; + height: auto; + width: auto; + vertical-align: top; + background-image: linear-gradient(45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4), linear-gradient(45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4); + background-position: 0 0, 10px 10px; + background-size: 20px 20px; +} + +form#tags-filter { + position: relative; +} + +/* 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; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + z-index: 999; +} + +#post-status-info td { + font-size: 12px; +} + +.autosave-info { + padding: 2px 10px; + 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:ignore*/ +.rtl #content-resize-handle { + background-image: url(../images/resize-rtl.gif); + background-position: left bottom; +} + +.wp-editor-expand #content-resize-handle { + display: none; +} + +#postdivrich #content { + resize: none; +} + +#wp-word-count { + display: block; + padding: 2px 10px; +} + +#wp-content-editor-container { + position: relative; +} + +.wp-editor-expand #wp-content-editor-tools { + z-index: 1000; + border-bottom: 1px solid #e5e5e5; +} + +.wp-editor-expand #wp-content-editor-container { + box-shadow: none; + margin-top: -1px; +} + +.wp-editor-expand #wp-content-editor-container { + border-bottom: 0 none; +} + +.wp-editor-expand div.mce-statusbar { + z-index: 1; +} + +.wp-editor-expand #post-status-info { + border-top: 1px solid #e5e5e5; +} + +.wp-editor-expand div.mce-toolbar-grp { + z-index: 999; +} + +/* TinyMCE native fullscreen mode override */ +.mce-fullscreen #wp-content-wrap .mce-menubar, +.mce-fullscreen #wp-content-wrap .mce-toolbar-grp, +.mce-fullscreen #wp-content-wrap .mce-edit-area, +.mce-fullscreen #wp-content-wrap .mce-statusbar { + position: static !important; + width: auto !important; + padding: 0 !important; +} + +.mce-fullscreen #wp-content-wrap .mce-statusbar { + visibility: visible !important; +} + +.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw { + display: none; +} + +.post-php.mce-fullscreen #wpadminbar, +.mce-fullscreen #wp-content-wrap .mce-wp-dfw { + display: none; +} +/* End TinyMCE native fullscreen mode override */ + +#wp-content-editor-tools { + background-color: #f1f1f1; + padding-top: 20px; +} + +#poststuff #post-body.columns-2 #side-sortables { + width: 280px; +} + +#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; +} + +#post-body .misc-pub-post-status:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before, +span.wp-media-buttons-icon:before { + color: #82878c; +} + +#post-body .misc-pub-post-status:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before { + font: normal 20px/1 dashicons; + speak: none; + display: inline-block; + margin-left: -1px; + padding-right: 3px; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#post-body .misc-pub-post-status:before { + content: "\f173"; +} + +#post-body #visibility:before { + content: "\f177"; +} + +.curtime #timestamp:before { + content: "\f145"; + position: relative; + 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%; + max-height: 70%; + left: 50%; + width: 450px; + margin-left: -225px; + background: #fff; + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + line-height: 1.5; + z-index: 1000005; + overflow-y: auto; +} + +.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, +#file-editor-warning .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 { + display: block; + margin: 12px 0 0; + height: 4em; + width: 100%; +} + +.tagchecklist { + margin-left: 14px; + font-size: 12px; + overflow: auto; +} + +.tagchecklist br { + display: none; +} + +.tagchecklist strong { + margin-left: -8px; + position: absolute; +} + +.tagchecklist > li { + float: left; + margin-right: 25px; + font-size: 13px; + line-height: 1.8em; + cursor: default; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; +} + +.tagchecklist .ntdelbutton { + position: absolute; + width: 24px; + height: 24px; + border: none; + margin: 0 0 0 -19px; + padding: 0; + background: none; + cursor: pointer; + text-indent: 0; +} + +#poststuff h3.hndle, /* Back-compat for pre-4.4 */ +#poststuff .stuffbox > h3, /* Back-compat for pre-4.4 */ +#poststuff h2 { + 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%; +} + +.ie8 #poststuff .inside #parent_id, +.ie8 #poststuff .inside #page_template { + width: 250px; +} + +.post-attributes-label-wrapper { + margin-bottom: 0.5em; +} + +.post-attributes-label { + vertical-align: baseline; + font-weight: 600; +} + +#post-visibility-select { + line-height: 1.5em; + margin-top: 3px; +} + +#linksubmitdiv .inside, /* Old Link Manager back-compat. */ +#poststuff #submitdiv .inside { + margin: 0; + padding: 0; +} + +#post-body-content, +.edit-form-section { + margin-bottom: 20px; +} + +/* Suggested text for privacy policy */ +.wp-privacy-policy-guide { + max-width: 1000px; +} + +.privacy-text-box { + width: calc(100% - 260px); +} + +.privacy-text-box-toc { + float: right; + width: 250px; + background-color: #fff; +} + +.privacy-text-box-toc p { + margin: 0; + padding: 0.7em 1em; + border-bottom: 1px solid #eee; +} + +.privacy-text-box-toc ol { + margin-left: 2em; +} + +.wp-privacy-policy-guide h3 { + font-size: 1.2em; + margin: 1em 0 0.5em; +} + +.privacy-text-section .privacy-text-copy { + float: right; +} + +.privacy-text-section { + position: relative; + border-top: 1px solid #e3e3e3; +} + +.privacy-text-box-head, +.privacy-text-section.text-removed { + padding-bottom: 12px; +} + +.text-removed .policy-text { + font-style: italic; + color: #666; + font-weight: 600; +} + +.privacy-text-actions { + height: 32px; + line-height: 32px; + padding-bottom: 6px; +} + +.wp-privacy-policy-guide .policy-text h2 { + margin: 1.2em 0 1em; + padding: 0; +} + +.suggested-policy-content { + font-style: italic; +} + +.privacy-text-section a.return-to-top { + float: right; + margin-right: -250px; + margin-top: 6px; +} + +.hide-privacy-policy-tutorial .privacy-policy-tutorial { + visibility: hidden; +} + +.wp-suggested-text p { + font-style: italic; +} + +.wp-suggested-text p.privacy-policy-tutorial { + font-style: normal; +} + +.notice.wp-pp-notice { + margin: 15px 0 3px; +} + +/*------------------------------------------------------------------------------ + 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 #ddd; + 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; + transition: all .1s ease-in-out; +} + +a.post-state-format:hover:before, +a.post-format-icon:hover:before { + color: #00a0d2; +} + +#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 #ddd; + 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 label { + display: block; + padding: 2px 0; +} + +.form-field input[type="text"], +.form-field input[type="password"], +.form-field input[type="email"], +.form-field input[type="number"], +.form-field input[type="search"], +.form-field input[type="tel"], +.form-field input[type="url"], +.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: 1em 0; + padding: 0; +} + +.form-wrap .form-field #parent { + max-width: 100%; +} + +.col-wrap h2 { + margin: 12px 0; + font-size: 1.1em; +} + +.col-wrap p.submit { + margin-top: -10px; +} + +.edit-term-notes { + margin-top: 2em; +} + +/*------------------------------------------------------------------------------ + 13.0 - Tags +------------------------------------------------------------------------------*/ + +#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; +} + +p.popular-tags { + border: none; + line-height: 2em; + 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 h2 { + margin: 2px 0 12px; +} + +.the-tagcloud ul { + margin: 0; +} + +.the-tagcloud ul li { + display: inline-block; +} + +/* Suggest.js autocomplete, no more used by core. */ +.ac_results { + display: none; + margin: -1px 0 0; + padding: 0; + list-style: none; + position: absolute; + z-index: 10000; + border: 1px solid #5b9dd9; + background-color: #fff; +} + +.wp-customizer .ac_results { + z-index: 500000; +} + +.ac_results li { + margin: 0; + padding: 5px 10px; + white-space: nowrap; + text-align: left; +} + +.ac_results .ac_over, +.ac_over .ac_match { + background-color: #0073aa; + color: #fff; + cursor: pointer; +} + +.ac_match { + text-decoration: underline; +} + +#edittag { + max-width: 800px; +} + +.edit-tag-actions { + margin-top: 20px; + overflow: hidden; + padding: 10px; + margin-right: 10px; +} + +/* Comments */ + +.comment-php .wp-editor-area { + height: 200px; +} + +.comment-ays th, +.comment-ays td { + padding: 10px 15px; +} + +.comment-ays .comment-content ul { + list-style: initial; + margin-left: 2em; +} + +.comment-ays .comment-content a[href]:after { + content: '(' attr( href ) ')'; + display: inline-block; + padding: 0 4px; + color: #72777C; + font-size: 13px; + word-break: break-all; +} + +.comment-ays .comment-content p.edit-comment { + margin-top: 10px; +} + +.comment-ays .comment-content p.edit-comment a[href]:after { + content: ''; + padding: 0; +} + +.comment-ays-submit .button-cancel { + margin-left: 1em; +} + +.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: 400; + 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; +} + +/* DFW 2 +-------------------------------------------------------------- */ + +#wp-content-wrap .mce-wp-dfw, +#qt_content_dfw { + display: none; +} + +.wp-editor-expand #wp-content-wrap .mce-wp-dfw, +.wp-editor-expand #qt_content_dfw { + display: inline-block; +} + +.focus-on .wrap > h1, +.focus-on .page-title-action, +.focus-on #wpfooter, +.focus-on .postbox-container > *, +.focus-on div.updated, +.focus-on div.error, +.focus-on div.notice, +.focus-on .update-nag, +.focus-on #wp-toolbar, +.focus-on #screen-meta-links, +.focus-on #screen-meta { + opacity: 0; + transition-duration: 0.6s; + transition-property: opacity; + transition-timing-function: ease-in-out; +} + +.focus-on #wp-toolbar { + opacity: 0.3; +} + +.focus-off .wrap > h1, +.focus-off .page-title-action, +.focus-off #wpfooter, +.focus-off .postbox-container > *, +.focus-off div.updated, +.focus-off div.error, +.focus-off div.notice, +.focus-off .update-nag, +.focus-off #wp-toolbar, +.focus-off #screen-meta-links, +.focus-off #screen-meta { + opacity: 1; + transition-duration: 0.2s; + transition-property: opacity; + transition-timing-function: ease-in-out; +} + +.focus-off #wp-toolbar { + -webkit-transform: translate(0, 0); +} + +.focus-on #adminmenuback, +.focus-on #adminmenuwrap { + transition-duration: 0.6s; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + transition-timing-function: ease-in-out; +} + +.focus-on #adminmenuback, +.focus-on #adminmenuwrap { + -webkit-transform: translateX( -100% ); + transform: translateX( -100% ); +} + +.focus-off #adminmenuback, +.focus-off #adminmenuwrap { + -webkit-transform: translateX( 0 ); + transform: translateX( 0 ); + transition-duration: 0.2s; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + transition-timing-function: ease-in-out; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-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; + background-size: 11px 11px; + } + + /*rtl:ignore*/ + .rtl #content-resize-handle, + .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background-image: url(../images/resize-rtl-2x.gif); + background-position: 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-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; + width: auto; + } + + /* hide the radio buttons for column prefs */ + .screen-layout, + .columns-prefs { + display: none; + } +} + +@media screen and ( max-width: 782px ) { + .wp-core-ui .edit-tag-actions .button-primary { + margin-bottom: 0; + } + + #post-body-content { + min-width: 0; + } + + #titlediv #title-prompt-text { + padding: 10px 10px; + } + + #poststuff h3.hndle, /* Back-compat for pre-4.4 */ + #poststuff .stuffbox > h3, /* Back-compat for pre-4.4 */ + #poststuff h2 { + 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 > li { + font-size: 16px; + line-height: 1.4; + } + + /* 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; + } + + button.wp-switch-editor { + font-size: 16px; + line-height: 1em; + margin: 7px 0 0 7px; + padding: 8px 12px; + } + + #wp-content-media-buttons a { + font-size: 14px; + padding: 6px 10px; + } + + .wp-media-buttons span.wp-media-buttons-icon, + .wp-media-buttons span.jetpack-contact-form-icon { + width: 22px !important; + margin-left: -2px !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; + } + + #publishing-action .spinner { + float: none; + margin-top: -2px; /* Half of the Publish button's bottom margin. */ + } + + /* Moderate Comment */ + .comment-ays th, + .comment-ays td { + padding-bottom: 0; + } + + .comment-ays td { + padding-top: 6px; + } + + /* Links */ + .links-table #link_rel { + max-width: none; + } + + .links-table th, + .links-table td { + padding: 10px 0; + } + + .privacy-text-box { + width: auto; + } + + .privacy-text-box-toc { + float: none; + width: auto; + height: 100%; + } + + .privacy-text-section a.return-to-top { + float: none; + margin: 0; + } +} diff --git a/wp-admin/css/edit.min.css b/wp-admin/css/edit.min.css new file mode 100644 index 0000000..b8e1519 --- /dev/null +++ b/wp-admin/css/edit.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#pending,#poststuff #titlewrap{border:0;padding:0}#pending,#poststuff #post-body{padding:0}#editable-post-name-full,body.post-new-php .submitbox .submitdelete{display:none}#post-status-info,.postbox{box-shadow:0 1px 1px rgba(0,0,0,.04)}#titlediv,#wp-content-editor-container,.postbox,form#tags-filter{position:relative}#poststuff{padding-top:10px;min-width:763px}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a{float:left}#show-comments .spinner{float:none;margin-top:0}#lost-connection-notice .spinner{visibility:visible;float:left;margin:0 5px 0 0}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0 0 3px;background-color:#fff}#titlediv #title-prompt-text{color:#72777c;position:absolute;font-size:1.7em;padding:11px 10px}input#link_description,input#link_url{width:98%}#pending{background:0 none;font-size:11px;margin-top:-1px}#comment-link-box,#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-right:10px;padding:0;font-size:11px}#comment-link-box{margin:5px 0;padding:0 5px}#editable-post-name{font-weight:600}#editable-post-name input{font-size:13px;font-weight:400;height:24px;margin:0;width:16em}.postarea h3 label{float:left}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{min-width:255px;border:1px solid #e5e5e5;background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;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:#32373c}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:0}.taxonomy-add-new{display:inline-block;margin:10px 0;font-weight:600}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:5px 7px 10px;overflow:hidden}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border: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:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #ddd;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 6px}#set-post-thumbnail{display:inline-block;max-width:100%}.ui-tabs-hide,.wp-editor-expand #content-resize-handle,.wp-hidden-children .wp-hidden-child{display:none}#postimagediv .inside img{max-width:100%;height:auto;width:auto;vertical-align:top;background-image:linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:0 0,10px 10px;background-size:20px 20px}#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;z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:right}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) right bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background-image:url(../images/resize-rtl.gif);background-position:left bottom}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw,.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#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}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#82878c}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;margin-left:-1px;padding-right:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.suggested-policy-content,.wp-suggested-text p{font-style:italic}#post-body .misc-pub-post-status:before{content:"\f173"}#post-body #visibility:before{content:"\f177"}.curtime #timestamp:before{content:"\f145";position:relative;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%;max-height:70%;left:50%;width:450px;margin-left:-225px;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005;overflow-y:auto}.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}#file-editor-warning .button,#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{display:block;margin:12px 0 0;height:4em;width:100%}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist>li{float:left;margin-right:25px;font-size:13px;line-height:1.8em;cursor:default;max-width:100%;overflow:hidden;text-overflow:ellipsis}.tagchecklist .ntdelbutton{position:absolute;width:24px;height:24px;border:none;margin:0 0 0 -19px;padding:0;background:0 0;cursor:pointer;text-indent:0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{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%}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}.post-attributes-label-wrapper{margin-bottom:.5em}.post-attributes-label{vertical-align:baseline;font-weight:600}#post-visibility-select{line-height:1.5em;margin-top:3px}#linksubmitdiv .inside,#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}.wp-privacy-policy-guide{max-width:1000px}.privacy-text-box{width:calc(100% - 260px)}.privacy-text-box-toc{float:right;width:250px;background-color:#fff}.privacy-text-box-toc p{margin:0;padding:.7em 1em;border-bottom:1px solid #eee}.privacy-text-box-toc ol{margin-left:2em}.wp-privacy-policy-guide h3{font-size:1.2em;margin:1em 0 .5em}.privacy-text-section .privacy-text-copy{float:right}.privacy-text-section{position:relative;border-top:1px solid #e3e3e3}.privacy-text-box-head,.privacy-text-section.text-removed{padding-bottom:12px}.text-removed .policy-text{font-style:italic;color:#666;font-weight:600}.privacy-text-actions{height:32px;line-height:32px;padding-bottom:6px}.wp-privacy-policy-guide .policy-text h2{margin:1.2em 0 1em;padding:0}.privacy-text-section a.return-to-top{float:right;margin-right:-250px;margin-top:6px}.hide-privacy-policy-tutorial .privacy-policy-tutorial{visibility:hidden}.wp-suggested-text p.privacy-policy-tutorial{font-style:normal}.notice.wp-pp-notice{margin:15px 0 3px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;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 #ddd;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;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#00a0d2}#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:1px solid #ddd;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 0}.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field input[type=number],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=url],.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:1em 0;padding:0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h2{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.edit-term-notes{margin-top:2em}#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}p.popular-tags{border:none;line-height:2em;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 h2{margin:2px 0 12px}.the-tagcloud ul{margin:0}.the-tagcloud ul li{display:inline-block}.ac_results{display:none;margin:-1px 0 0;padding:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{margin:0;padding:5px 10px;white-space:nowrap;text-align:left}.ac_over .ac_match,.ac_results .ac_over{background-color:#0073aa;color:#fff;cursor:pointer}.ac_match{text-decoration:underline}#edittag{max-width:800px}.edit-tag-actions{margin-top:20px;overflow:hidden;padding:10px;margin-right:10px}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{padding:10px 15px}.comment-ays .comment-content ul{list-style:outside;margin-left:2em}.comment-ays .comment-content a[href]:after{content:'(' attr(href) ')';display:inline-block;padding:0 4px;color:#72777C;font-size:13px;word-break:break-all}.comment-ays .comment-content p.edit-comment{margin-top:10px}.comment-ays .comment-content p.edit-comment a[href]:after{content:'';padding:0}#comment-status-radio label,.links-table td,.links-table th{padding:5px 0}.comment-ays-submit .button-cancel{margin-left:1em}.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}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 label{margin-right:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .page-title-action,.focus-on .postbox-container>*,.focus-on .update-nag,.focus-on .wrap>h1,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .page-title-action,.focus-off .postbox-container>*,.focus-off .update-nag,.focus-off .wrap>h1,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;transition-duration:.2s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transition-duration:.6s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) right bottom no-repeat;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background-image:url(../images/resize-rtl-2x.gif);background-position: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-right:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){.wp-core-ui .edit-tag-actions .button-primary{margin-bottom:0}#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{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}.tagsdiv .newtag,ul.categorychecklist li{margin-bottom:15px}ul.category-tabs li.tabs{padding: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}.tagchecklist{margin:25px 10px}.tagchecklist>li{font-size:16px;line-height:1.4}#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:6px 3px 6px 6px}.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}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 0 0 7px;padding:8px 12px}#wp-content-media-buttons a{font-size:14px;padding:6px 10px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-left:-2px!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}#publishing-action .spinner{float:none;margin-top:-2px}.comment-ays td,.comment-ays th{padding-bottom:0}.comment-ays td{padding-top:6px}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}.privacy-text-box{width:auto}.privacy-text-box-toc{float:none;width:auto;height:100%}.privacy-text-section a.return-to-top{float:none;margin:0}} \ No newline at end of file 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-rtl.min.css b/wp-admin/css/farbtastic-rtl.min.css new file mode 100644 index 0000000..26cc0c4 --- /dev/null +++ b/wp-admin/css/farbtastic-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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} \ No newline at end of file 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/farbtastic.min.css b/wp-admin/css/farbtastic.min.css new file mode 100644 index 0000000..e276808 --- /dev/null +++ b/wp-admin/css/farbtastic.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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} \ No newline at end of file diff --git a/wp-admin/css/forms-rtl.css b/wp-admin/css/forms-rtl.css new file mode 100644 index 0000000..dff8430 --- /dev/null +++ b/wp-admin/css/forms-rtl.css @@ -0,0 +1,1592 @@ +/* Include margin and padding in the width calculation of input and textarea. */ +input, +textarea { + box-sizing: border-box; +} + +input[type="text"], +input[type="password"], +input[type="checkbox"], +input[type="color"], +input[type="date"], +input[type="datetime"], +input[type="datetime-local"], +input[type="email"], +input[type="month"], +input[type="number"], +input[type="search"], +input[type="radio"], +input[type="tel"], +input[type="text"], +input[type="time"], +input[type="url"], +input[type="week"], +select, +textarea { + border: 1px solid #ddd; + box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 ); + background-color: #fff; + color: #32373c; + outline: none; + transition: 0.05s border-color ease-in-out; +} + +input[type="text"]:focus, +input[type="password"]:focus, +input[type="color"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="email"]:focus, +input[type="month"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="text"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +input[type="week"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus, +textarea:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 ); +} + +/* rtl:ignore */ +input[type="email"], +input[type="url"] { + direction: ltr; +} + +/* Vertically align the number selector with the input. */ +input[type="number"] { + height: 28px; + line-height: 1; +} + +input[type="checkbox"], +input[type="radio"] { + border: 1px solid #b4b9be; + 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; + box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 ); + transition: .05s border-color ease-in-out; +} + +input[type="radio"]:checked + label:before { + color: #82878c; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: #00a0d2; +} + +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"] { + 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; + border-radius: 50px; + font-size: 24px; + width: 6px; + height: 6px; + margin: 4px; + line-height: 16px; + background-color: #1e8cbe; +} + +@-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; + border-radius: 0; /* Reset mobile webkit's default element styling */ +} + +textarea { + overflow: auto; + padding: 2px 6px; + line-height: 1.4; + resize: vertical; +} + +.wp-admin input[type="file"] { + padding: 3px 0; + cursor: pointer; +} + +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; +} + +input.readonly, +input[readonly], +textarea.readonly, +textarea[readonly] { + background-color: #eee; +} + +::-webkit-input-placeholder { + color: #72777c; +} + +::-moz-placeholder { + color: #72777c; + opacity: 1; +} + +:-ms-input-placeholder { + color: #72777c; +} + +.form-invalid input, .form-invalid input:focus, +.form-invalid select, .form-invalid select:focus { + border-color: #dc3232 !important; + box-shadow: 0 0 2px rgba( 204, 0, 0, 0.8 ); +} + +.form-table .form-required.form-invalid td:after { + content: "\f534"; + font: normal 20px/1 dashicons; + color: #dc3232; + margin-right: -25px; + vertical-align: middle; +} + +/* Adjust error indicator for password layout */ +.form-table .form-required.user-pass1-wrap.form-invalid td:after { + content: ''; +} + +.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after { + content: '\f534'; + font: normal 20px/1 dashicons; + color: #dc3232; + margin: 0 -29px 0 6px; + vertical-align: middle; +} + +.form-input-tip { + color: #666; +} + +input:disabled, +input.disabled, +select:disabled, +select.disabled, +textarea:disabled, +textarea.disabled { + background: rgba( 255, 255, 255, 0.5 ); + border-color: rgba( 222, 222, 222, 0.75 ); + box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 ); + color: rgba( 51, 51, 51, 0.5 ); +} + +input[type="file"]:disabled, +input[type="file"].disabled, +input[type="range"]:disabled, +input[type="range"].disabled { + background: none; + box-shadow: none; + cursor: default; +} + +input[type="checkbox"]:disabled, +input[type="checkbox"].disabled, +input[type="radio"]:disabled, +input[type="radio"].disabled, +input[type="checkbox"]:disabled:checked:before, +input[type="checkbox"].disabled:checked:before, +input[type="radio"]: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; + border-bottom-right-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%; +} + +.regular-text { + width: 25em; +} + +input.small-text { + width: 50px; + padding: 1px 6px; +} + +input[type="number"].small-text { + width: 65px; +} + +input.tiny-text { + width: 35px; +} + +input[type="number"].tiny-text { + width: 45px; +} + +#doaction, +#doaction2, +#post-query-submit { + margin: 1px 0 0 8px; +} + +.tablenav #changeit, +.tablenav #delete_all, +.tablenav #clear-recent-list, +.wp-filter #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; +} + +button.wp-hide-pw > .dashicons { + position: relative; + top: 3px; +} + +label, +#your-profile label + a { + vertical-align: middle; +} + +fieldset label, +#your-profile label + a { + vertical-align: middle; +} + +.options-media-php [for*="_size_"] { + min-width: 10em; + vertical-align: baseline; +} + +.options-media-php .small-text[name*="_size_"] { + margin: 0 0 1em; +} + +#misc-publishing-actions label { + vertical-align: baseline; +} + +#pass-strength-result { + background-color: #eee; + border: 1px solid #ddd; + color: #23282d; + margin: -2px 1px 5px 5px; + padding: 3px 5px; + text-align: center; + width: 25em; + box-sizing: border-box; + opacity: 0; +} + +#pass-strength-result.short { + background-color: #f1adad; + border-color: #e35b5b; + opacity: 1; +} + +#pass-strength-result.bad { + background-color: #fbc5a9; + border-color: #f78b53; + opacity: 1; +} + +#pass-strength-result.good { + background-color: #ffe399; + border-color: #ffc733; + opacity: 1; +} + +#pass-strength-result.strong { + background-color: #c1e1b9; + border-color: #83c373; + opacity: 1; +} + +#pass1.short, #pass1-text.short { + border-color: #e35b5b; +} + +#pass1.bad, #pass1-text.bad { + border-color: #f78b53; +} + +#pass1.good, #pass1-text.good { + border-color: #ffc733; +} + +#pass1.strong, #pass1-text.strong { + border-color: #83c373; +} + +.pw-weak { + display:none; +} + +.indicator-hint { + padding-top: 8px; +} + +#pass1-text, +.show-password #pass1 { + display: none; +} + +.show-password #pass1-text +{ + display: inline-block; +} + +.form-table span.description.important { + font-size: 12px; +} + +p.search-box { + float: left; + margin: 0; +} + +.network-admin.themes-php p.search-box { + clear: right; +} + +.search-box input[name="s"], +.tablenav .search-plugins input[name="s"], +.tagsdiv .newtag { + float: right; + height: 28px; + margin: 0 0 0 4px; +} + +.js.plugins-php .search-box .wp-filter-search { + margin: 0; + width: 280px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + padding: 3px 5px; + height: 32px; +} + +input[type="text"].ui-autocomplete-loading, +input[type="email"].ui-autocomplete-loading { + background-image: url(../images/loading.gif); + background-repeat: no-repeat; + background-position: left center; + visibility: visible; +} + +input.ui-autocomplete-input.open { + border-bottom-color: transparent; +} + +ul#add-to-blog-users { + margin: 0 14px 0 0; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + border: 1px solid #5b9dd9; + box-shadow: 0 1px 2px rgba( 30, 140, 190, 0.8 ); + background-color: #fff; +} + +.ui-autocomplete li { + margin-bottom: 0; + padding: 4px 10px; + white-space: nowrap; + text-align: right; + cursor: pointer; +} + +/* Colors for the wplink toolbar autocomplete. */ +.ui-autocomplete .ui-state-focus { + background-color: #ddd; +} + +/* Colors for the tags autocomplete. */ +.wp-tags-autocomplete .ui-state-focus { + background-color: #0073aa; + color: #fff; +} + +/*------------------------------------------------------------------------------ + 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 { + 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: #23282d; + 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, /* Not used by core. Back-compat for pre-4.8 */ +.form-table .td-full { + width: auto; + padding: 20px 0 20px 10px; + font-weight: 400; +} + +.form-table td p { + margin-top: 4px; + margin-bottom: 0; +} + +.form-table .date-time-doc { + margin-top: 1em; +} + +.form-table p.timezone-info { + margin: 1em 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; +} + +table.form-table td .updated p { + font-size: 13px; + margin: 0.3em 0; +} + +/*------------------------------------------------------------------------------ + 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; +} + +#adduser .form-field input, +#createuser .form-field input { + width: 25em; +} + +.color-option { + display: inline-block; + width: 24%; + padding: 5px 15px 15px; + 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: 400; + line-height: 24px; +} + +.label-responsive { + vertical-align: middle; +} + +#export-filters p { + margin: 0 0 1em; +} + +#export-filters p.submit { + margin: 7px 0 5px; +} + +/* Card styles */ + +.card { + position: relative; + margin-top: 20px; + padding: 0.7em 2em 1em; + min-width: 255px; + max-width: 520px; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; +} + +/* Press this styles */ + +.pressthis h4 { + margin: 2em 0 1em; +} + +.pressthis textarea { + width: 100%; + font-size: 1em; +} + +#pressthis-code-wrap { + overflow: auto; +} + +.pressthis-bookmarklet-wrapper { + margin: 20px 0 8px; + vertical-align: top; + position: relative; + z-index: 1; +} + +.pressthis-bookmarklet, +.pressthis-bookmarklet:hover, +.pressthis-bookmarklet:focus, +.pressthis-bookmarklet:active { + display: inline-block; + position: relative; + cursor: move; + color: #32373c; + background: #e5e5e5; + border-radius: 5px; + border: 1px solid #b4b9be; + font-style: normal; + line-height: 16px; + font-size: 14px; + text-decoration: none; +} + +.pressthis-bookmarklet:active { + outline: none; +} + +.pressthis-bookmarklet:after { + content: ""; + width: 70%; + height: 55%; + z-index: -1; + position: absolute; + left: 10px; + bottom: 9px; + background: transparent; + -webkit-transform: skew(-20deg) rotate(-6deg); + transform: skew(-20deg) rotate(-6deg); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +.pressthis-bookmarklet:hover:after { + -webkit-transform: skew(-20deg) rotate(-9deg); + transform: skew(-20deg) rotate(-9deg); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); +} + +.pressthis-bookmarklet span { + display: inline-block; + margin: 0px 0 0; + padding: 0px 9px 8px 12px; +} + +.pressthis-bookmarklet span:before { + color: #72777c; + font: normal 20px/1 dashicons; + content: "\f157"; + position: relative; + display: inline-block; + top: 4px; + margin-left: 4px; +} + +.pressthis-js-toggle { + margin-right: 10px; + padding: 0; + height: auto; + vertical-align: top; +} + +/* to override the button class being applied */ +.pressthis-js-toggle.button.button { + margin-right: 10px; + padding: 0; + height: auto; + vertical-align: top; +} + +.pressthis-js-toggle .dashicons { + margin: 5px 7px 6px 8px; + color: #555d66; +} + +/*------------------------------------------------------------------------------ + 20.0 - Settings +------------------------------------------------------------------------------*/ + +.timezone-info code { + white-space: nowrap; +} + +.defaultavatarpicker .avatar { + margin: 2px 0; + vertical-align: middle; +} + +.options-general-php .date-time-text { + display: inline-block; + min-width: 10em; +} + +.options-general-php input.small-text { + width: 56px; +} + +.options-general-php .spinner { + float: none; + margin: -3px 3px 0; +} + +.settings-php .language-install-spinner, +.options-general-php .language-install-spinner { + display: inline-block; + float: none; + margin: -3px 5px 0; + vertical-align: middle; +} + +.form-table.permalink-structure .available-structure-tags li { + float: right; + margin-left: 5px; +} + +/*------------------------------------------------------------------------------ + 21.0 - Network Admin +------------------------------------------------------------------------------*/ + +.setup-php textarea { + max-width: 100%; +} + +.form-field #site-address { + max-width: 25em; +} + +.form-field #domain { + max-width: 22em; +} + +.form-field #site-title, +.form-field #admin-email, +.form-field #path, +.form-field #blog_registered, +.form-field #blog_last_updated { + max-width: 25em; +} + +.form-field #path { + margin-bottom: 5px; +} + +#search-users, +#search-sites { + max-width: 100%; +} + +/*------------------------------------------------------------------------------ + Credentials check dialog for Install and Updates +------------------------------------------------------------------------------*/ + +.request-filesystem-credentials-dialog { + display: none; + /* The customizer uses visibility: hidden on the body for full-overlays. */ + visibility: visible; +} + +.request-filesystem-credentials-dialog .notification-dialog { + top: 10%; + max-height: 85%; +} + +.request-filesystem-credentials-dialog-content { + margin: 25px; +} + +#request-filesystem-credentials-title { + font-size: 1.3em; + margin: 1em 0; +} + +.request-filesystem-credentials-form legend { + font-size: 1em; + padding: 1.33em 0; + font-weight: 600; +} + +.request-filesystem-credentials-form input[type="text"], +.request-filesystem-credentials-form input[type="password"] { + display: block; +} + +.request-filesystem-credentials-dialog input[type="text"], +.request-filesystem-credentials-dialog input[type="password"] { + width: 100%; +} + +.request-filesystem-credentials-form .field-title { + font-weight: 600; +} + +.request-filesystem-credentials-dialog label[for="hostname"], +.request-filesystem-credentials-dialog label[for="public_key"], +.request-filesystem-credentials-dialog label[for="private_key"] { + display: block; + margin-bottom: 1em; +} + +.request-filesystem-credentials-dialog .ftp-username, +.request-filesystem-credentials-dialog .ftp-password { + float: right; + width: 48%; +} + +.request-filesystem-credentials-dialog .ftp-password { + margin-right: 4%; +} + +.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons { + text-align: left; +} + +.request-filesystem-credentials-dialog label[for="ftp"] { + margin-left: 10px; +} + +.request-filesystem-credentials-dialog #auth-keys-desc { + margin-bottom: 0; +} + +#request-filesystem-credentials-dialog .button:not(:last-child) { + margin-left: 10px; +} + +#request-filesystem-credentials-form .cancel-button { + display: none; +} + +#request-filesystem-credentials-dialog .cancel-button { + display: inline; +} + +.request-filesystem-credentials-dialog .ftp-username, +.request-filesystem-credentials-dialog .ftp-password { + float: none; + width: auto; +} + +.request-filesystem-credentials-dialog .ftp-username { + margin-bottom: 1em; +} + +.request-filesystem-credentials-dialog .ftp-password { + margin: 0; +} + +.request-filesystem-credentials-dialog .ftp-password em { + color: #888; +} + +.request-filesystem-credentials-dialog label { + display: block; + line-height: 1.5; + margin-bottom: 1em; +} + +.request-filesystem-credentials-form legend { + padding-bottom: 0; +} + +.request-filesystem-credentials-form #ssh-keys legend { + font-size: 1.3em; +} + +.request-filesystem-credentials-form .notice { + margin: 0 0 20px 0; + clear: both; +} + +/*------------------------------------------------------------------------------ + Privacy Policy settings screen +------------------------------------------------------------------------------*/ +.tools-privacy-policy-page form { + margin-bottom: 1.3em; +} + +.tools-privacy-policy-page input.button, +.tools-privacy-policy-page select { + margin-right: 6px; +} + +.tools-privacy-edit { + margin: 1.5em 0; +} + +.tools-privacy-policy-page span { + line-height: 2em; +} + +.privacy_requests .column-email { + width: 40%; +} + +.privacy_requests .column-type { + text-align: center; +} + +.privacy_requests thead td:first-child, +.privacy_requests tfoot td:first-child { + border-right: 4px solid #fff; +} + +.privacy_requests tbody th { + border-right: 4px solid #fff; + background: #fff; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.privacy_requests tbody .has-request-results th { + box-shadow: none; +} + +.privacy_requests tbody .request-results th .notice { + margin: 0 0 5px; +} + +.privacy_requests tbody td { + background: #fff; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.privacy_requests tbody .has-request-results td { + box-shadow: none; +} + +.privacy_requests .next_steps .button { + height: auto; + line-height: 1.5; + padding: 4px 10px; + word-break: break-all; + white-space: unset; +} + +.privacy_requests .status-request-confirmed th, +.privacy_requests .status-request-confirmed td { + background-color: #f7fcfe; + border-right-color: #00a0d2; +} + +.privacy_requests .status-request-failed th, +.privacy_requests .status-request-failed td { + background-color: #fef7f1; + border-right-color: #d64d21; +} + +.privacy_requests .export_personal_data_failed a { + vertical-align: baseline; +} + +.status-label { + font-weight: bold; +} + +.status-label.status-request-pending { + font-weight: normal; + font-style: italic; + color: #6c7781; +} + +.status-label.status-request-failed { + color: #aa0000; + font-weight: bold; +} + +.wp-privacy-request-form { + clear: both; +} + +.wp-privacy-request-form-field { + margin: 1.5em 0; +} + +.wp-privacy-request-form label { + font-weight: bold; + line-height: 1.5; + padding-bottom: .5em; + display: block; +} + +.wp-privacy-request-form input { + line-height: 1.5; + margin: 0; +} + +.email-personal-data::before { + display: inline-block; + font: normal 20px/1 dashicons; + margin: 3px -2px 0 5px; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.email-personal-data--sending::before { + color: #f56e28; + content: "\f463"; + -webkit-animation: rotation 2s infinite linear; + animation: rotation 2s infinite linear; +} + +.email-personal-data--sent::before { + color: #79ba49; + content: "\f147"; +} + + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + /* Input Elements */ + textarea { + -webkit-appearance: none; + } + + input[type="text"], + input[type="email"], + input[type="search"], + input[type="password"], + input[type="number"] { + -webkit-appearance: none; + padding: 6px 10px; + } + + input[type="number"] { + height: 40px; + } + + input.code { + padding-bottom: 5px; + padding-top: 10px; + } + + input[type="checkbox"], + .widefat th input[type="checkbox"], + .widefat thead td input[type="checkbox"], + .widefat tfoot td input[type="checkbox"] { + -webkit-appearance: none; + padding: 10px; + } + + .widefat th input[type="checkbox"], + .widefat thead td input[type="checkbox"], + .widefat tfoot td input[type="checkbox"] { + margin-bottom: 8px; + } + + input[type="checkbox"]:checked:before, + .widefat th input[type="checkbox"]:before, + .widefat thead td input[type="checkbox"]:before, + .widefat tfoot td 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; + } + + #adduser .form-field input, + #createuser .form-field input { + width: 100%; + } + + .form-table { + box-sizing: border-box; + } + + .form-table th, + .form-table td, + .label-responsive { + display: block; + width: auto; + vertical-align: middle; + } + + .label-responsive { + margin: 0.5em 0; + } + + .export-filters li { + margin-bottom: 0; + } + + .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="email"], + .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; + box-sizing: border-box; + } + + .form-table .form-required.form-invalid td:after { + float: left; + margin: -30px 0 0 3px; + } + + #wpbody .form-table td select { + height: 40px; + } + + 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: 4.375em; /* 70px, enough for 4 digits to fit comfortably */ + display: inline; + padding: 3px 6px; + margin: 0 3px; + } + + #pass-strength-result { + width: 100%; + 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 { + display: inline; + padding: 4px 0 0; + line-height: 1.4em; + font-size: 14px; + } + + .form-table th { + padding-top: 10px; + padding-bottom: 0; + border-bottom: 0; + } + + .form-table td { + margin-bottom: 0; + padding-bottom: 6px; + padding-top: 4px; + padding-right: 0; + } + + .form-table.permalink-structure td code { + margin-right: 32px; + } + + .form-table.permalink-structure td input[type="text"] { + margin-right: 32px; + margin-top: 4px; + width: 96%; + } + + .form-table input.regular-text { + width: 100%; + } + + .form-table label { + font-size: 14px; + } + + .form-table fieldset label { + display: block; + } + + #utc-time, + #local-time { + display: block; + float: none; + margin-top: 0.5em; + } + + .form-field #domain { + max-width: none; + } + + /* New Password */ + .wp-pwd { + position: relative; + } + + .wp-pwd [type="text"], + .wp-pwd [type="password"] { + padding-left: 40px; + } + + .wp-pwd button.button { + background: transparent; + border: none; + box-shadow: none; + line-height: 2; + margin: 0; + padding: 5px 10px; + position: absolute; + left: 0; + top: 0; + } + + .wp-pwd button.button:hover, + .wp-pwd button.button:focus, + .wp-pwd button.button:active { + background: transparent; + } + + .wp-pwd .button .text { + display: none; + } + + .options-general-php input[type="text"].small-text { + max-width: 6.25em; + margin: 0; + } + + /* Privacy Policy settings screen */ + .tools-privacy-policy-page form.wp-create-privacy-page { + margin-bottom: 1em; + } + + .tools-privacy-policy-page input#set-page, + .tools-privacy-policy-page select { + margin: 10px 0 0; + } + + .tools-privacy-policy-page .wp-create-privacy-page span { + display: block; + margin-bottom: 1em; + } + + .tools-privacy-policy-page .wp-create-privacy-page .button { + margin-right: 0; + } + + .wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column) { + display: table-cell; + } + + .wp-list-table.privacy_requests.widefat th input, + .wp-list-table.privacy_requests.widefat thead td input { + margin-right: 5px; + } +} + +@media only screen and (max-width: 768px) { + .form-field input[type="text"], + .form-field input[type="email"], + .form-field input[type="password"], + .form-field select, + .form-field textarea { + width: 99%; + } + + .form-wrap .form-field { + padding:0; + } + + /* users */ + #profile-page .form-table textarea { + max-width: 400px; + width: auto; + } +} + +@media only screen and (max-height: 480px), screen and (max-width: 450px) { + /* Request Credentials / File Editor Warning */ + .request-filesystem-credentials-dialog .notification-dialog, + .file-editor-warning .notification-dialog { + width: 100%; + height: 100%; + max-height: 100%; + position: fixed; + top: 0; + margin: 0; + right: 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Color Picker Options */ + .color-option { + width: 49%; + } +} + +@media only screen and (max-width: 320px) { + .options-general-php .date-time-text.date-time-custom-text { + min-width: 0; + margin-left: 0.5em; + } +} + +@-webkit-keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} + +@keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} diff --git a/wp-admin/css/forms-rtl.min.css b/wp-admin/css/forms-rtl.min.css new file mode 100644 index 0000000..bc5ddfc --- /dev/null +++ b/wp-admin/css/forms-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;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;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],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]{border-radius:50%;margin-left:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]: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}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{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;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}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.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-right:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 -29px 0 6px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.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;border-bottom-right-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+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;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%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #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}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 1px 5px 5px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:left center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:right;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{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:#23282d;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 .td-full,.form-table th.th-full{width:auto;padding:20px 0 20px 10px;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 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}table.form-table td .updated p{font-size:13px;margin:.3em 0}#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}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.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:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-right:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(-20deg) rotate(-6deg);transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(-20deg) rotate(-9deg);transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-right:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 7px 6px 8px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:right;margin-left:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:left}.request-filesystem-credentials-dialog label[for=ftp]{margin-left:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-left:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-right:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests .column-type{text-align:center}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-right-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-right-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px -2px 0 5px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{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}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.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=text],.form-table td input[type=password],.form-table td input[type=email],.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;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:left;margin:-30px 0 0 3px}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;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{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-right:0}.form-table.permalink-structure td code{margin-right:32px}.form-table.permalink-structure td input[type=text]{margin-right:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-left:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;left:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-right:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-right:5px}}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;right:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-left:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}} \ No newline at end of file diff --git a/wp-admin/css/forms.css b/wp-admin/css/forms.css new file mode 100644 index 0000000..9b14751 --- /dev/null +++ b/wp-admin/css/forms.css @@ -0,0 +1,1592 @@ +/* Include margin and padding in the width calculation of input and textarea. */ +input, +textarea { + box-sizing: border-box; +} + +input[type="text"], +input[type="password"], +input[type="checkbox"], +input[type="color"], +input[type="date"], +input[type="datetime"], +input[type="datetime-local"], +input[type="email"], +input[type="month"], +input[type="number"], +input[type="search"], +input[type="radio"], +input[type="tel"], +input[type="text"], +input[type="time"], +input[type="url"], +input[type="week"], +select, +textarea { + border: 1px solid #ddd; + box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 ); + background-color: #fff; + color: #32373c; + outline: none; + transition: 0.05s border-color ease-in-out; +} + +input[type="text"]:focus, +input[type="password"]:focus, +input[type="color"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="email"]:focus, +input[type="month"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="text"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +input[type="week"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus, +textarea:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 ); +} + +/* rtl:ignore */ +input[type="email"], +input[type="url"] { + direction: ltr; +} + +/* Vertically align the number selector with the input. */ +input[type="number"] { + height: 28px; + line-height: 1; +} + +input[type="checkbox"], +input[type="radio"] { + border: 1px solid #b4b9be; + 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; + box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 ); + transition: .05s border-color ease-in-out; +} + +input[type="radio"]:checked + label:before { + color: #82878c; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: #00a0d2; +} + +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"] { + 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; + border-radius: 50px; + font-size: 24px; + width: 6px; + height: 6px; + margin: 4px; + line-height: 16px; + background-color: #1e8cbe; +} + +@-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; + border-radius: 0; /* Reset mobile webkit's default element styling */ +} + +textarea { + overflow: auto; + padding: 2px 6px; + line-height: 1.4; + resize: vertical; +} + +.wp-admin input[type="file"] { + padding: 3px 0; + cursor: pointer; +} + +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; +} + +input.readonly, +input[readonly], +textarea.readonly, +textarea[readonly] { + background-color: #eee; +} + +::-webkit-input-placeholder { + color: #72777c; +} + +::-moz-placeholder { + color: #72777c; + opacity: 1; +} + +:-ms-input-placeholder { + color: #72777c; +} + +.form-invalid input, .form-invalid input:focus, +.form-invalid select, .form-invalid select:focus { + border-color: #dc3232 !important; + box-shadow: 0 0 2px rgba( 204, 0, 0, 0.8 ); +} + +.form-table .form-required.form-invalid td:after { + content: "\f534"; + font: normal 20px/1 dashicons; + color: #dc3232; + margin-left: -25px; + vertical-align: middle; +} + +/* Adjust error indicator for password layout */ +.form-table .form-required.user-pass1-wrap.form-invalid td:after { + content: ''; +} + +.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after { + content: '\f534'; + font: normal 20px/1 dashicons; + color: #dc3232; + margin: 0 6px 0 -29px; + vertical-align: middle; +} + +.form-input-tip { + color: #666; +} + +input:disabled, +input.disabled, +select:disabled, +select.disabled, +textarea:disabled, +textarea.disabled { + background: rgba( 255, 255, 255, 0.5 ); + border-color: rgba( 222, 222, 222, 0.75 ); + box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 ); + color: rgba( 51, 51, 51, 0.5 ); +} + +input[type="file"]:disabled, +input[type="file"].disabled, +input[type="range"]:disabled, +input[type="range"].disabled { + background: none; + box-shadow: none; + cursor: default; +} + +input[type="checkbox"]:disabled, +input[type="checkbox"].disabled, +input[type="radio"]:disabled, +input[type="radio"].disabled, +input[type="checkbox"]:disabled:checked:before, +input[type="checkbox"].disabled:checked:before, +input[type="radio"]: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; + border-bottom-left-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%; +} + +.regular-text { + width: 25em; +} + +input.small-text { + width: 50px; + padding: 1px 6px; +} + +input[type="number"].small-text { + width: 65px; +} + +input.tiny-text { + width: 35px; +} + +input[type="number"].tiny-text { + width: 45px; +} + +#doaction, +#doaction2, +#post-query-submit { + margin: 1px 8px 0 0; +} + +.tablenav #changeit, +.tablenav #delete_all, +.tablenav #clear-recent-list, +.wp-filter #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; +} + +button.wp-hide-pw > .dashicons { + position: relative; + top: 3px; +} + +label, +#your-profile label + a { + vertical-align: middle; +} + +fieldset label, +#your-profile label + a { + vertical-align: middle; +} + +.options-media-php [for*="_size_"] { + min-width: 10em; + vertical-align: baseline; +} + +.options-media-php .small-text[name*="_size_"] { + margin: 0 0 1em; +} + +#misc-publishing-actions label { + vertical-align: baseline; +} + +#pass-strength-result { + background-color: #eee; + border: 1px solid #ddd; + color: #23282d; + margin: -2px 5px 5px 1px; + padding: 3px 5px; + text-align: center; + width: 25em; + box-sizing: border-box; + opacity: 0; +} + +#pass-strength-result.short { + background-color: #f1adad; + border-color: #e35b5b; + opacity: 1; +} + +#pass-strength-result.bad { + background-color: #fbc5a9; + border-color: #f78b53; + opacity: 1; +} + +#pass-strength-result.good { + background-color: #ffe399; + border-color: #ffc733; + opacity: 1; +} + +#pass-strength-result.strong { + background-color: #c1e1b9; + border-color: #83c373; + opacity: 1; +} + +#pass1.short, #pass1-text.short { + border-color: #e35b5b; +} + +#pass1.bad, #pass1-text.bad { + border-color: #f78b53; +} + +#pass1.good, #pass1-text.good { + border-color: #ffc733; +} + +#pass1.strong, #pass1-text.strong { + border-color: #83c373; +} + +.pw-weak { + display:none; +} + +.indicator-hint { + padding-top: 8px; +} + +#pass1-text, +.show-password #pass1 { + display: none; +} + +.show-password #pass1-text +{ + display: inline-block; +} + +.form-table span.description.important { + font-size: 12px; +} + +p.search-box { + float: right; + margin: 0; +} + +.network-admin.themes-php p.search-box { + clear: left; +} + +.search-box input[name="s"], +.tablenav .search-plugins input[name="s"], +.tagsdiv .newtag { + float: left; + height: 28px; + margin: 0 4px 0 0; +} + +.js.plugins-php .search-box .wp-filter-search { + margin: 0; + width: 280px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + padding: 3px 5px; + height: 32px; +} + +input[type="text"].ui-autocomplete-loading, +input[type="email"].ui-autocomplete-loading { + background-image: url(../images/loading.gif); + background-repeat: no-repeat; + background-position: right center; + visibility: visible; +} + +input.ui-autocomplete-input.open { + border-bottom-color: transparent; +} + +ul#add-to-blog-users { + margin: 0 0 0 14px; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + border: 1px solid #5b9dd9; + box-shadow: 0 1px 2px rgba( 30, 140, 190, 0.8 ); + background-color: #fff; +} + +.ui-autocomplete li { + margin-bottom: 0; + padding: 4px 10px; + white-space: nowrap; + text-align: left; + cursor: pointer; +} + +/* Colors for the wplink toolbar autocomplete. */ +.ui-autocomplete .ui-state-focus { + background-color: #ddd; +} + +/* Colors for the tags autocomplete. */ +.wp-tags-autocomplete .ui-state-focus { + background-color: #0073aa; + color: #fff; +} + +/*------------------------------------------------------------------------------ + 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 { + 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: #23282d; + 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, /* Not used by core. Back-compat for pre-4.8 */ +.form-table .td-full { + width: auto; + padding: 20px 10px 20px 0; + font-weight: 400; +} + +.form-table td p { + margin-top: 4px; + margin-bottom: 0; +} + +.form-table .date-time-doc { + margin-top: 1em; +} + +.form-table p.timezone-info { + margin: 1em 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; +} + +table.form-table td .updated p { + font-size: 13px; + margin: 0.3em 0; +} + +/*------------------------------------------------------------------------------ + 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; +} + +#adduser .form-field input, +#createuser .form-field input { + width: 25em; +} + +.color-option { + display: inline-block; + width: 24%; + padding: 5px 15px 15px; + 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: 400; + line-height: 24px; +} + +.label-responsive { + vertical-align: middle; +} + +#export-filters p { + margin: 0 0 1em; +} + +#export-filters p.submit { + margin: 7px 0 5px; +} + +/* Card styles */ + +.card { + position: relative; + margin-top: 20px; + padding: 0.7em 2em 1em; + min-width: 255px; + max-width: 520px; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; +} + +/* Press this styles */ + +.pressthis h4 { + margin: 2em 0 1em; +} + +.pressthis textarea { + width: 100%; + font-size: 1em; +} + +#pressthis-code-wrap { + overflow: auto; +} + +.pressthis-bookmarklet-wrapper { + margin: 20px 0 8px; + vertical-align: top; + position: relative; + z-index: 1; +} + +.pressthis-bookmarklet, +.pressthis-bookmarklet:hover, +.pressthis-bookmarklet:focus, +.pressthis-bookmarklet:active { + display: inline-block; + position: relative; + cursor: move; + color: #32373c; + background: #e5e5e5; + border-radius: 5px; + border: 1px solid #b4b9be; + font-style: normal; + line-height: 16px; + font-size: 14px; + text-decoration: none; +} + +.pressthis-bookmarklet:active { + outline: none; +} + +.pressthis-bookmarklet:after { + content: ""; + width: 70%; + height: 55%; + z-index: -1; + position: absolute; + right: 10px; + bottom: 9px; + background: transparent; + -webkit-transform: skew(20deg) rotate(6deg); + transform: skew(20deg) rotate(6deg); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +.pressthis-bookmarklet:hover:after { + -webkit-transform: skew(20deg) rotate(9deg); + transform: skew(20deg) rotate(9deg); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); +} + +.pressthis-bookmarklet span { + display: inline-block; + margin: 0px 0 0; + padding: 0px 12px 8px 9px; +} + +.pressthis-bookmarklet span:before { + color: #72777c; + font: normal 20px/1 dashicons; + content: "\f157"; + position: relative; + display: inline-block; + top: 4px; + margin-right: 4px; +} + +.pressthis-js-toggle { + margin-left: 10px; + padding: 0; + height: auto; + vertical-align: top; +} + +/* to override the button class being applied */ +.pressthis-js-toggle.button.button { + margin-left: 10px; + padding: 0; + height: auto; + vertical-align: top; +} + +.pressthis-js-toggle .dashicons { + margin: 5px 8px 6px 7px; + color: #555d66; +} + +/*------------------------------------------------------------------------------ + 20.0 - Settings +------------------------------------------------------------------------------*/ + +.timezone-info code { + white-space: nowrap; +} + +.defaultavatarpicker .avatar { + margin: 2px 0; + vertical-align: middle; +} + +.options-general-php .date-time-text { + display: inline-block; + min-width: 10em; +} + +.options-general-php input.small-text { + width: 56px; +} + +.options-general-php .spinner { + float: none; + margin: -3px 3px 0; +} + +.settings-php .language-install-spinner, +.options-general-php .language-install-spinner { + display: inline-block; + float: none; + margin: -3px 5px 0; + vertical-align: middle; +} + +.form-table.permalink-structure .available-structure-tags li { + float: left; + margin-right: 5px; +} + +/*------------------------------------------------------------------------------ + 21.0 - Network Admin +------------------------------------------------------------------------------*/ + +.setup-php textarea { + max-width: 100%; +} + +.form-field #site-address { + max-width: 25em; +} + +.form-field #domain { + max-width: 22em; +} + +.form-field #site-title, +.form-field #admin-email, +.form-field #path, +.form-field #blog_registered, +.form-field #blog_last_updated { + max-width: 25em; +} + +.form-field #path { + margin-bottom: 5px; +} + +#search-users, +#search-sites { + max-width: 100%; +} + +/*------------------------------------------------------------------------------ + Credentials check dialog for Install and Updates +------------------------------------------------------------------------------*/ + +.request-filesystem-credentials-dialog { + display: none; + /* The customizer uses visibility: hidden on the body for full-overlays. */ + visibility: visible; +} + +.request-filesystem-credentials-dialog .notification-dialog { + top: 10%; + max-height: 85%; +} + +.request-filesystem-credentials-dialog-content { + margin: 25px; +} + +#request-filesystem-credentials-title { + font-size: 1.3em; + margin: 1em 0; +} + +.request-filesystem-credentials-form legend { + font-size: 1em; + padding: 1.33em 0; + font-weight: 600; +} + +.request-filesystem-credentials-form input[type="text"], +.request-filesystem-credentials-form input[type="password"] { + display: block; +} + +.request-filesystem-credentials-dialog input[type="text"], +.request-filesystem-credentials-dialog input[type="password"] { + width: 100%; +} + +.request-filesystem-credentials-form .field-title { + font-weight: 600; +} + +.request-filesystem-credentials-dialog label[for="hostname"], +.request-filesystem-credentials-dialog label[for="public_key"], +.request-filesystem-credentials-dialog label[for="private_key"] { + display: block; + margin-bottom: 1em; +} + +.request-filesystem-credentials-dialog .ftp-username, +.request-filesystem-credentials-dialog .ftp-password { + float: left; + width: 48%; +} + +.request-filesystem-credentials-dialog .ftp-password { + margin-left: 4%; +} + +.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons { + text-align: right; +} + +.request-filesystem-credentials-dialog label[for="ftp"] { + margin-right: 10px; +} + +.request-filesystem-credentials-dialog #auth-keys-desc { + margin-bottom: 0; +} + +#request-filesystem-credentials-dialog .button:not(:last-child) { + margin-right: 10px; +} + +#request-filesystem-credentials-form .cancel-button { + display: none; +} + +#request-filesystem-credentials-dialog .cancel-button { + display: inline; +} + +.request-filesystem-credentials-dialog .ftp-username, +.request-filesystem-credentials-dialog .ftp-password { + float: none; + width: auto; +} + +.request-filesystem-credentials-dialog .ftp-username { + margin-bottom: 1em; +} + +.request-filesystem-credentials-dialog .ftp-password { + margin: 0; +} + +.request-filesystem-credentials-dialog .ftp-password em { + color: #888; +} + +.request-filesystem-credentials-dialog label { + display: block; + line-height: 1.5; + margin-bottom: 1em; +} + +.request-filesystem-credentials-form legend { + padding-bottom: 0; +} + +.request-filesystem-credentials-form #ssh-keys legend { + font-size: 1.3em; +} + +.request-filesystem-credentials-form .notice { + margin: 0 0 20px 0; + clear: both; +} + +/*------------------------------------------------------------------------------ + Privacy Policy settings screen +------------------------------------------------------------------------------*/ +.tools-privacy-policy-page form { + margin-bottom: 1.3em; +} + +.tools-privacy-policy-page input.button, +.tools-privacy-policy-page select { + margin-left: 6px; +} + +.tools-privacy-edit { + margin: 1.5em 0; +} + +.tools-privacy-policy-page span { + line-height: 2em; +} + +.privacy_requests .column-email { + width: 40%; +} + +.privacy_requests .column-type { + text-align: center; +} + +.privacy_requests thead td:first-child, +.privacy_requests tfoot td:first-child { + border-left: 4px solid #fff; +} + +.privacy_requests tbody th { + border-left: 4px solid #fff; + background: #fff; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.privacy_requests tbody .has-request-results th { + box-shadow: none; +} + +.privacy_requests tbody .request-results th .notice { + margin: 0 0 5px; +} + +.privacy_requests tbody td { + background: #fff; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.privacy_requests tbody .has-request-results td { + box-shadow: none; +} + +.privacy_requests .next_steps .button { + height: auto; + line-height: 1.5; + padding: 4px 10px; + word-break: break-all; + white-space: unset; +} + +.privacy_requests .status-request-confirmed th, +.privacy_requests .status-request-confirmed td { + background-color: #f7fcfe; + border-left-color: #00a0d2; +} + +.privacy_requests .status-request-failed th, +.privacy_requests .status-request-failed td { + background-color: #fef7f1; + border-left-color: #d64d21; +} + +.privacy_requests .export_personal_data_failed a { + vertical-align: baseline; +} + +.status-label { + font-weight: bold; +} + +.status-label.status-request-pending { + font-weight: normal; + font-style: italic; + color: #6c7781; +} + +.status-label.status-request-failed { + color: #aa0000; + font-weight: bold; +} + +.wp-privacy-request-form { + clear: both; +} + +.wp-privacy-request-form-field { + margin: 1.5em 0; +} + +.wp-privacy-request-form label { + font-weight: bold; + line-height: 1.5; + padding-bottom: .5em; + display: block; +} + +.wp-privacy-request-form input { + line-height: 1.5; + margin: 0; +} + +.email-personal-data::before { + display: inline-block; + font: normal 20px/1 dashicons; + margin: 3px 5px 0 -2px; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.email-personal-data--sending::before { + color: #f56e28; + content: "\f463"; + -webkit-animation: rotation 2s infinite linear; + animation: rotation 2s infinite linear; +} + +.email-personal-data--sent::before { + color: #79ba49; + content: "\f147"; +} + + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + /* Input Elements */ + textarea { + -webkit-appearance: none; + } + + input[type="text"], + input[type="email"], + input[type="search"], + input[type="password"], + input[type="number"] { + -webkit-appearance: none; + padding: 6px 10px; + } + + input[type="number"] { + height: 40px; + } + + input.code { + padding-bottom: 5px; + padding-top: 10px; + } + + input[type="checkbox"], + .widefat th input[type="checkbox"], + .widefat thead td input[type="checkbox"], + .widefat tfoot td input[type="checkbox"] { + -webkit-appearance: none; + padding: 10px; + } + + .widefat th input[type="checkbox"], + .widefat thead td input[type="checkbox"], + .widefat tfoot td input[type="checkbox"] { + margin-bottom: 8px; + } + + input[type="checkbox"]:checked:before, + .widefat th input[type="checkbox"]:before, + .widefat thead td input[type="checkbox"]:before, + .widefat tfoot td 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; + } + + #adduser .form-field input, + #createuser .form-field input { + width: 100%; + } + + .form-table { + box-sizing: border-box; + } + + .form-table th, + .form-table td, + .label-responsive { + display: block; + width: auto; + vertical-align: middle; + } + + .label-responsive { + margin: 0.5em 0; + } + + .export-filters li { + margin-bottom: 0; + } + + .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="email"], + .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; + box-sizing: border-box; + } + + .form-table .form-required.form-invalid td:after { + float: right; + margin: -30px 3px 0 0; + } + + #wpbody .form-table td select { + height: 40px; + } + + 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: 4.375em; /* 70px, enough for 4 digits to fit comfortably */ + display: inline; + padding: 3px 6px; + margin: 0 3px; + } + + #pass-strength-result { + width: 100%; + 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 { + display: inline; + padding: 4px 0 0; + line-height: 1.4em; + font-size: 14px; + } + + .form-table th { + padding-top: 10px; + padding-bottom: 0; + border-bottom: 0; + } + + .form-table td { + margin-bottom: 0; + padding-bottom: 6px; + padding-top: 4px; + padding-left: 0; + } + + .form-table.permalink-structure td code { + margin-left: 32px; + } + + .form-table.permalink-structure td input[type="text"] { + margin-left: 32px; + margin-top: 4px; + width: 96%; + } + + .form-table input.regular-text { + width: 100%; + } + + .form-table label { + font-size: 14px; + } + + .form-table fieldset label { + display: block; + } + + #utc-time, + #local-time { + display: block; + float: none; + margin-top: 0.5em; + } + + .form-field #domain { + max-width: none; + } + + /* New Password */ + .wp-pwd { + position: relative; + } + + .wp-pwd [type="text"], + .wp-pwd [type="password"] { + padding-right: 40px; + } + + .wp-pwd button.button { + background: transparent; + border: none; + box-shadow: none; + line-height: 2; + margin: 0; + padding: 5px 10px; + position: absolute; + right: 0; + top: 0; + } + + .wp-pwd button.button:hover, + .wp-pwd button.button:focus, + .wp-pwd button.button:active { + background: transparent; + } + + .wp-pwd .button .text { + display: none; + } + + .options-general-php input[type="text"].small-text { + max-width: 6.25em; + margin: 0; + } + + /* Privacy Policy settings screen */ + .tools-privacy-policy-page form.wp-create-privacy-page { + margin-bottom: 1em; + } + + .tools-privacy-policy-page input#set-page, + .tools-privacy-policy-page select { + margin: 10px 0 0; + } + + .tools-privacy-policy-page .wp-create-privacy-page span { + display: block; + margin-bottom: 1em; + } + + .tools-privacy-policy-page .wp-create-privacy-page .button { + margin-left: 0; + } + + .wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column) { + display: table-cell; + } + + .wp-list-table.privacy_requests.widefat th input, + .wp-list-table.privacy_requests.widefat thead td input { + margin-left: 5px; + } +} + +@media only screen and (max-width: 768px) { + .form-field input[type="text"], + .form-field input[type="email"], + .form-field input[type="password"], + .form-field select, + .form-field textarea { + width: 99%; + } + + .form-wrap .form-field { + padding:0; + } + + /* users */ + #profile-page .form-table textarea { + max-width: 400px; + width: auto; + } +} + +@media only screen and (max-height: 480px), screen and (max-width: 450px) { + /* Request Credentials / File Editor Warning */ + .request-filesystem-credentials-dialog .notification-dialog, + .file-editor-warning .notification-dialog { + width: 100%; + height: 100%; + max-height: 100%; + position: fixed; + top: 0; + margin: 0; + left: 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Color Picker Options */ + .color-option { + width: 49%; + } +} + +@media only screen and (max-width: 320px) { + .options-general-php .date-time-text.date-time-custom-text { + min-width: 0; + margin-right: 0.5em; + } +} + +@-webkit-keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/wp-admin/css/forms.min.css b/wp-admin/css/forms.min.css new file mode 100644 index 0000000..fa1a6c2 --- /dev/null +++ b/wp-admin/css/forms.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;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;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],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]{border-radius:50%;margin-right:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]: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}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{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;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}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.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-left:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 6px 0 -29px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.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;border-bottom-left-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+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;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%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #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}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 5px 5px 1px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:right center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:left;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{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:#23282d;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 .td-full,.form-table th.th-full{width:auto;padding:20px 10px 20px 0;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 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}table.form-table td .updated p{font-size:13px;margin:.3em 0}#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}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.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:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-left:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-left:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 8px 6px 7px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:left;margin-right:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:right}.request-filesystem-credentials-dialog label[for=ftp]{margin-right:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-right:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-left:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests .column-type{text-align:center}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-left-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-left-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px 5px 0 -2px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{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}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.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=text],.form-table td input[type=password],.form-table td input[type=email],.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;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:right;margin:-30px 3px 0 0}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;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{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-left:0}.form-table.permalink-structure td code{margin-left:32px}.form-table.permalink-structure td input[type=text]{margin-left:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-right:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;right:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-left:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-left:5px}}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;left:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-right:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} \ No newline at end of file diff --git a/wp-admin/css/ie-rtl.css b/wp-admin/css/ie-rtl.css new file mode 100644 index 0000000..1e748c2 --- /dev/null +++ b/wp-admin/css/ie-rtl.css @@ -0,0 +1,770 @@ +/* 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%; +} + +#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 { + 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 #ddd; +} + +#wpbody-content .postbox .hndle { + 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 .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 { + display: inline; +} + +#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 > li, .tagchecklist .ntdelbutton { + display: inline-block; + display: block; +} + +.tagchecklist .ntdelbutton:focus .remove-tag-icon:before { + outline: 1px solid #5b9dd9; +} + +.tablenav .button, +.nav .button { + 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, +.widefat thead td, +.widefat tfoot td { + margin-bottom: 0; + border-spacing: 0; +} + +.widefat th input, +.widefat thead td input, +.widefat tfoot td 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 { + 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: 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: #a0a5aa; +} + +.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-right: 0; +} + +* html .stuffbox, +* html .stuffbox input, +* html .stuffbox textarea { + border: 1px solid #ddd; +} + +* 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 #ddd; +} + +* 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..d7a680f --- /dev/null +++ b/wp-admin/css/ie-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#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;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%}#adminmenuback{right:0;background-image:none}#adminmenu .wp-submenu,.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{right:110px}#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 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 .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}#wpbody-content .postbox,* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea,* html input{border:1px solid #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{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 .hndle{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 .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=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}#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}#submitdiv a.button,#submitdiv input,#submitdiv select,.inactive-sidebar .widget,.revisions.pinned .revisions-controls,.widget-liquid-right .widget{position:relative}#widget-list .widget{display:inline}#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}#bh{margin:7px 0 0 10px;float:left}div#dashboard-widgets{padding-left:1px}.tagchecklist .ntdelbutton,.tagchecklist>li{display:inline-block;display:block}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{outline:#5b9dd9 solid 1px}.nav .button,.tablenav .button{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 tfoot td,.widefat th,.widefat thead td,.widefat tr{margin-bottom:0;border-spacing:0}.widefat tfoot td input,.widefat th input,.widefat thead td 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{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{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}.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:#a0a5aa}.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-right:0}* 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 .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..e3dc913 --- /dev/null +++ b/wp-admin/css/ie.css @@ -0,0 +1,770 @@ +/* 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%; +} + +#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 { + 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 #ddd; +} + +#wpbody-content .postbox .hndle { + 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 .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 { + display: inline; +} + +#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 > li, .tagchecklist .ntdelbutton { + display: inline-block; + display: block; +} + +.tagchecklist .ntdelbutton:focus .remove-tag-icon:before { + outline: 1px solid #5b9dd9; +} + +.tablenav .button, +.nav .button { + 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, +.widefat thead td, +.widefat tfoot td { + margin-bottom: 0; + border-spacing: 0; +} + +.widefat th input, +.widefat thead td input, +.widefat tfoot td 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 { + 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: 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: #a0a5aa; +} + +.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 #ddd; +} + +* 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 #ddd; +} + +* 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..c942844 --- /dev/null +++ b/wp-admin/css/ie.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#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;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%}#adminmenuback{left:0;background-image:none}#adminmenu .wp-submenu,.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{left:110px}#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 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 .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}#wpbody-content .postbox,* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea,* html input{border:1px solid #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{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 .hndle{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 .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=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}#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}#submitdiv a.button,#submitdiv input,#submitdiv select,.inactive-sidebar .widget,.revisions.pinned .revisions-controls,.widget-liquid-right .widget{position:relative}#widget-list .widget{display:inline}#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}#bh{margin:7px 10px 0 0;float:right}div#dashboard-widgets{padding-right:1px}.tagchecklist .ntdelbutton,.tagchecklist>li{display:inline-block;display:block}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{outline:#5b9dd9 solid 1px}.nav .button,.tablenav .button{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 tfoot td,.widefat th,.widefat thead td,.widefat tr{margin-bottom:0;border-spacing:0}.widefat tfoot td input,.widefat th input,.widefat thead td 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{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{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}.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:#a0a5aa}.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 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 .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..a045ebf --- /dev/null +++ b/wp-admin/css/install-rtl.css @@ -0,0 +1,451 @@ +html { + background: #f1f1f1; + margin: 0 20px; +} + +body { + background: #fff; + color: #444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + margin: 140px auto 25px; + padding: 20px 20px 10px 20px; + max-width: 700px; + -webkit-font-smoothing: subpixel-antialiased; + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +a { + color: #0073aa; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus { + color: #124964; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +h1, h2 { + border-bottom: 1px solid #ddd; + clear: both; + color: #666; + font-size: 24px; + padding: 0; + padding-bottom: 7px; + font-weight: 400; +} + +h3 { + 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; +} + +fieldset { + border: 0; + padding: 0; + margin: 0; +} + +label { + cursor: pointer; +} + +#logo { + margin: 6px 0 14px 0; + padding: 0 0 7px 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); + background-size: 84px; + background-position: center top; + background-repeat: no-repeat; + color: #444; /* same as login.css */ + height: 84px; + font-size: 20px; + font-weight: 400; + line-height: 1.3em; + margin: -130px auto 25px; + padding: 0; + text-decoration: none; + width: 84px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#logo a:focus { + box-shadow: none; +} + +.step { + margin: 20px 0 15px; +} +.step, th { + text-align: right; + padding: 0; +} +.language-chooser.wp-core-ui .step .button.button-large { + height: 36px; + font-size: 14px; + line-height: 33px; + vertical-align: middle; +} +textarea { + border: 1px solid #ddd; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + width: 100%; + 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; + font-size: 14px; + vertical-align: top +} + +.form-table th { + font-size: 14px; + text-align: right; + padding: 10px 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; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +input, +submit { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +.form-table input[type=text], +.form-table input[type=email], +.form-table input[type=url], +.form-table input[type=password] { + width: 206px; +} + +.form-table th p { + font-weight: 400; +} + +.form-table.install-success th, +.form-table.install-success td { + vertical-align: middle; + padding: 16px 0 16px 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; +} + +.wp-hide-pw > .dashicons { + line-height: inherit; +} + +#pass-strength-result { + background-color: #eee; + border: 1px solid #ddd; + color: #23282d; + margin: -2px 0px 5px 5px; + padding: 3px 5px; + text-align: center; + width: 218px; + box-sizing: border-box; + opacity: 0; +} + +#pass-strength-result.short { + background-color: #f1adad; + border-color: #e35b5b; + opacity: 1; +} + +#pass-strength-result.bad { + background-color: #fbc5a9; + border-color: #f78b53; + opacity: 1; +} + +#pass-strength-result.good { + background-color: #ffe399; + border-color: #ffc733; + opacity: 1; +} + +#pass-strength-result.strong { + background-color: #c1e1b9; + border-color: #83c373; + opacity: 1; +} + +#pass1.short, #pass1-text.short { + border-color: #e35b5b; +} + +#pass1.bad, #pass1-text.bad { + border-color: #f78b53; +} + +#pass1.good, #pass1-text.good { + border-color: #ffc733; +} + +#pass1.strong, #pass1-text.strong { + border-color: #83c373; +} + +.pw-weak { + display: none; +} + +.message { + border-right: 4px solid #dc3232; + padding: .7em .6em; + background-color: #fbeaea; +} + +/* rtl:ignore */ +#dbname, +#uname, +#pwd, +#dbhost, +#prefix, +#user_login, +#admin_email, +#pass1, +#pass2 { + direction: ltr; +} + +#pass1-text, +.show-password #pass1 { + display: none; +} + +.show-password #pass1-text +{ + display: inline-block; +} + +.form-table span.description.important { + font-size: 12px; +} + + +/* 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="email"], + .form-table td input[type="url"], + .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; + box-sizing: border-box; + } + +} + +body.language-chooser { + max-width: 300px; +} + +.language-chooser select { + padding: 8px; + width: 100%; + display: block; + border: 1px solid #ddd; + background-color: #fff; + color: #32373c; + font-size: 16px; + font-family: Arial, sans-serif; + font-weight: 400; +} + +.language-chooser p { + text-align: left; +} + +.screen-reader-input, +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + word-wrap: normal !important; +} + +.spinner { + background: url(../images/spinner.gif) no-repeat; + background-size: 20px 20px; + visibility: hidden; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 2px 5px 0; +} + +.step .spinner { + display: inline-block; + vertical-align: middle; + margin-left: 15px; +} + +.button.hide-if-no-js, +.hide-if-no-js { + display: none; +} + +/** + * HiDPI Displays + */ +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .spinner { + background-image: url(../images/spinner-2x.gif); + } + +} diff --git a/wp-admin/css/install-rtl.min.css b/wp-admin/css/install-rtl.min.css new file mode 100644 index 0000000..fe0f98a --- /dev/null +++ b/wp-admin/css/install-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +a img,abbr,fieldset{border:0}#logo,h1,h2{padding:0 0 7px}#pass-strength-result,textarea{border:1px solid #ddd;box-sizing:border-box}#logo a,.form-table th p,h1,h2{font-weight:400}html{background:#f1f1f1;margin:0 20px}body{background:#fff;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0073aa}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}h1,h2{border-bottom:1px solid #ddd;clear:both;color:#666;font-size:24px}h3{font-size:16px}dd,dt,li,p{padding-bottom:2px;font-size:14px;line-height:1.5}.code,code{font-family:Consolas,Monaco,monospace}input,submit,textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}dl,ol,ul{padding:5px 22px 5px 5px}abbr{font-variant:normal}fieldset{padding:0;margin:0}label{cursor:pointer}#logo{margin:6px 0 14px;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);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:84px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#pass1-text,.pw-weak,.show-password #pass1{display:none}#logo a:focus{box-shadow:none}.step{margin:20px 0 15px}.step,th{text-align:right;padding:0}.language-chooser.wp-core-ui .step .button.button-large{height:36px;font-size:14px;line-height:33px;vertical-align:middle}.form-table td,.form-table th{padding:10px 0 10px 20px;vertical-align:top;font-size:14px}textarea{width:100%}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px}.form-table th{text-align:right;width:140px}.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;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}.form-table input[type=email],.form-table input[type=password],.form-table input[type=text],.form-table input[type=url]{width:206px}.form-table.install-success td,.form-table.install-success th{vertical-align:middle;padding:16px 0 16px 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}.wp-hide-pw>.dashicons{line-height:inherit}#pass-strength-result{background-color:#eee;color:#23282d;margin:-2px 0 5px 5px;padding:3px 5px;text-align:center;width:218px;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.message{border-right:4px solid #dc3232;padding:.7em .6em;background-color:#fbeaea}#admin_email,#dbhost,#dbname,#pass1,#pass2,#prefix,#pwd,#uname,#user_login{direction:ltr}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}.language-chooser select,: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=text],.form-table td input[type=email],.form-table td input[type=url],.form-table td input[type=password],.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;box-sizing:border-box}}body.language-chooser{max-width:300px}.language-chooser select{padding:8px;width:100%;display:block;border:1px solid #ddd;background-color:#fff;color:#32373c;font-size:16px;font-weight:400}.language-chooser p{text-align:left}.screen-reader-input,.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;visibility:hidden;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}.step .spinner{display:inline-block;vertical-align:middle;margin-left:15px}.button.hide-if-no-js,.hide-if-no-js{display:none}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.spinner{background-image:url(../images/spinner-2x.gif)}} \ 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..84c2f5e --- /dev/null +++ b/wp-admin/css/install.css @@ -0,0 +1,451 @@ +html { + background: #f1f1f1; + margin: 0 20px; +} + +body { + background: #fff; + color: #444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + margin: 140px auto 25px; + padding: 20px 20px 10px 20px; + max-width: 700px; + -webkit-font-smoothing: subpixel-antialiased; + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +a { + color: #0073aa; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus { + color: #124964; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +h1, h2 { + border-bottom: 1px solid #ddd; + clear: both; + color: #666; + font-size: 24px; + padding: 0; + padding-bottom: 7px; + font-weight: 400; +} + +h3 { + 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; +} + +fieldset { + border: 0; + padding: 0; + margin: 0; +} + +label { + cursor: pointer; +} + +#logo { + margin: 6px 0 14px 0; + padding: 0 0 7px 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); + background-size: 84px; + background-position: center top; + background-repeat: no-repeat; + color: #444; /* same as login.css */ + height: 84px; + font-size: 20px; + font-weight: 400; + line-height: 1.3em; + margin: -130px auto 25px; + padding: 0; + text-decoration: none; + width: 84px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#logo a:focus { + box-shadow: none; +} + +.step { + margin: 20px 0 15px; +} +.step, th { + text-align: left; + padding: 0; +} +.language-chooser.wp-core-ui .step .button.button-large { + height: 36px; + font-size: 14px; + line-height: 33px; + vertical-align: middle; +} +textarea { + border: 1px solid #ddd; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + width: 100%; + 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; + font-size: 14px; + vertical-align: top +} + +.form-table th { + font-size: 14px; + text-align: left; + padding: 10px 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; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +input, +submit { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +.form-table input[type=text], +.form-table input[type=email], +.form-table input[type=url], +.form-table input[type=password] { + width: 206px; +} + +.form-table th p { + font-weight: 400; +} + +.form-table.install-success th, +.form-table.install-success td { + vertical-align: middle; + padding: 16px 20px 16px 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; +} + +.wp-hide-pw > .dashicons { + line-height: inherit; +} + +#pass-strength-result { + background-color: #eee; + border: 1px solid #ddd; + color: #23282d; + margin: -2px 5px 5px 0px; + padding: 3px 5px; + text-align: center; + width: 218px; + box-sizing: border-box; + opacity: 0; +} + +#pass-strength-result.short { + background-color: #f1adad; + border-color: #e35b5b; + opacity: 1; +} + +#pass-strength-result.bad { + background-color: #fbc5a9; + border-color: #f78b53; + opacity: 1; +} + +#pass-strength-result.good { + background-color: #ffe399; + border-color: #ffc733; + opacity: 1; +} + +#pass-strength-result.strong { + background-color: #c1e1b9; + border-color: #83c373; + opacity: 1; +} + +#pass1.short, #pass1-text.short { + border-color: #e35b5b; +} + +#pass1.bad, #pass1-text.bad { + border-color: #f78b53; +} + +#pass1.good, #pass1-text.good { + border-color: #ffc733; +} + +#pass1.strong, #pass1-text.strong { + border-color: #83c373; +} + +.pw-weak { + display: none; +} + +.message { + border-left: 4px solid #dc3232; + padding: .7em .6em; + background-color: #fbeaea; +} + +/* rtl:ignore */ +#dbname, +#uname, +#pwd, +#dbhost, +#prefix, +#user_login, +#admin_email, +#pass1, +#pass2 { + direction: ltr; +} + +#pass1-text, +.show-password #pass1 { + display: none; +} + +.show-password #pass1-text +{ + display: inline-block; +} + +.form-table span.description.important { + font-size: 12px; +} + + +/* 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="email"], + .form-table td input[type="url"], + .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; + box-sizing: border-box; + } + +} + +body.language-chooser { + max-width: 300px; +} + +.language-chooser select { + padding: 8px; + width: 100%; + display: block; + border: 1px solid #ddd; + background-color: #fff; + color: #32373c; + font-size: 16px; + font-family: Arial, sans-serif; + font-weight: 400; +} + +.language-chooser p { + text-align: right; +} + +.screen-reader-input, +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + word-wrap: normal !important; +} + +.spinner { + background: url(../images/spinner.gif) no-repeat; + background-size: 20px 20px; + visibility: hidden; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 2px 5px 0; +} + +.step .spinner { + display: inline-block; + vertical-align: middle; + margin-right: 15px; +} + +.button.hide-if-no-js, +.hide-if-no-js { + display: none; +} + +/** + * HiDPI Displays + */ +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .spinner { + background-image: url(../images/spinner-2x.gif); + } + +} diff --git a/wp-admin/css/install.min.css b/wp-admin/css/install.min.css new file mode 100644 index 0000000..e9dfb67 --- /dev/null +++ b/wp-admin/css/install.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +a img,abbr,fieldset{border:0}#logo,h1,h2{padding:0 0 7px}#pass-strength-result,textarea{border:1px solid #ddd;box-sizing:border-box}#logo a,.form-table th p,h1,h2{font-weight:400}html{background:#f1f1f1;margin:0 20px}body{background:#fff;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0073aa}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}h1,h2{border-bottom:1px solid #ddd;clear:both;color:#666;font-size:24px}h3{font-size:16px}dd,dt,li,p{padding-bottom:2px;font-size:14px;line-height:1.5}.code,code{font-family:Consolas,Monaco,monospace}input,submit,textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}dl,ol,ul{padding:5px 5px 5px 22px}abbr{font-variant:normal}fieldset{padding:0;margin:0}label{cursor:pointer}#logo{margin:6px 0 14px;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);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:84px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#pass1-text,.pw-weak,.show-password #pass1{display:none}#logo a:focus{box-shadow:none}.step{margin:20px 0 15px}.step,th{text-align:left;padding:0}.language-chooser.wp-core-ui .step .button.button-large{height:36px;font-size:14px;line-height:33px;vertical-align:middle}.form-table td,.form-table th{padding:10px 20px 10px 0;vertical-align:top;font-size:14px}textarea{width:100%}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px}.form-table th{text-align:left;width:140px}.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;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}.form-table input[type=email],.form-table input[type=password],.form-table input[type=text],.form-table input[type=url]{width:206px}.form-table.install-success td,.form-table.install-success th{vertical-align:middle;padding:16px 20px 16px 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}.wp-hide-pw>.dashicons{line-height:inherit}#pass-strength-result{background-color:#eee;color:#23282d;margin:-2px 5px 5px 0;padding:3px 5px;text-align:center;width:218px;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.message{border-left:4px solid #dc3232;padding:.7em .6em;background-color:#fbeaea}#admin_email,#dbhost,#dbname,#pass1,#pass2,#prefix,#pwd,#uname,#user_login{direction:ltr}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}.language-chooser select,: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=text],.form-table td input[type=email],.form-table td input[type=url],.form-table td input[type=password],.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;box-sizing:border-box}}body.language-chooser{max-width:300px}.language-chooser select{padding:8px;width:100%;display:block;border:1px solid #ddd;background-color:#fff;color:#32373c;font-size:16px;font-weight:400}.language-chooser p{text-align:right}.screen-reader-input,.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;visibility:hidden;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}.step .spinner{display:inline-block;vertical-align:middle;margin-right:15px}.button.hide-if-no-js,.hide-if-no-js{display:none}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.spinner{background-image:url(../images/spinner-2x.gif)}} \ 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..82ea545 --- /dev/null +++ b/wp-admin/css/l10n-rtl.css @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ + 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; +} + +/* Arial is best for RTL headings. */ +.rtl h1, +.rtl h2, +.rtl h3, +.rtl h4, +.rtl h5, +.rtl h6 { + font-family: Arial, sans-serif; + font-weight: 600; +} + +/* 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: 600; +} + +/* 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%; } + +/* 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 #customize-header-actions .button, +.locale-de-de-formal #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-de-de #customize-header-actions .spinner, +.locale-de-de-formal #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru #adminmenu { + width: inherit; /* back-compat for pre-3.2 */ +} +.locale-ru-ru #adminmenu, +.locale-ru-ru #wpbody { + margin-right: 0; /* back-compat for pre-3.2 */ +} +.locale-ru-ru .inline-edit-row fieldset label span.title, +.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend { + width: 8em; /* default 6em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap, +.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap { + margin-right: 8em; /* default 6em */ +} +.locale-ru-ru.post-php .tagsdiv .newtag, +.locale-ru-ru.post-new-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, +.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend { + width: 8em; /* default 6em */ +} +.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap, +.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap { + margin-right: 8em; /* default 6em */ +} + +@media screen and (max-width: 782px) { + .locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap, + .locale-ru-ru .inline-edit-row fieldset .timestamp-wrap, + .locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap, + .locale-lt-lt .inline-edit-row fieldset .timestamp-wrap { + margin-right: 0; + } +} diff --git a/wp-admin/css/l10n-rtl.min.css b/wp-admin/css/l10n-rtl.min.css new file mode 100644 index 0000000..c22eeb3 --- /dev/null +++ b/wp-admin/css/l10n-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.locale-he-il em,.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-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-right:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.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 .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:0}} \ No newline at end of file diff --git a/wp-admin/css/l10n.css b/wp-admin/css/l10n.css new file mode 100644 index 0000000..967fb4c --- /dev/null +++ b/wp-admin/css/l10n.css @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ + 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; +} + +/* Arial is best for RTL headings. */ +.rtl h1, +.rtl h2, +.rtl h3, +.rtl h4, +.rtl h5, +.rtl h6 { + font-family: Arial, sans-serif; + font-weight: 600; +} + +/* 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: 600; +} + +/* 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%; } + +/* 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 #customize-header-actions .button, +.locale-de-de-formal #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-de-de #customize-header-actions .spinner, +.locale-de-de-formal #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru #adminmenu { + width: inherit; /* back-compat for pre-3.2 */ +} +.locale-ru-ru #adminmenu, +.locale-ru-ru #wpbody { + margin-left: 0; /* back-compat for pre-3.2 */ +} +.locale-ru-ru .inline-edit-row fieldset label span.title, +.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend { + width: 8em; /* default 6em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap, +.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap { + margin-left: 8em; /* default 6em */ +} +.locale-ru-ru.post-php .tagsdiv .newtag, +.locale-ru-ru.post-new-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, +.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend { + width: 8em; /* default 6em */ +} +.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap, +.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap { + margin-left: 8em; /* default 6em */ +} + +@media screen and (max-width: 782px) { + .locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap, + .locale-ru-ru .inline-edit-row fieldset .timestamp-wrap, + .locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap, + .locale-lt-lt .inline-edit-row fieldset .timestamp-wrap { + margin-left: 0; + } +} diff --git a/wp-admin/css/l10n.min.css b/wp-admin/css/l10n.min.css new file mode 100644 index 0000000..76dc704 --- /dev/null +++ b/wp-admin/css/l10n.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.locale-he-il em,.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-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-left:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.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 .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:0}} \ No newline at end of file diff --git a/wp-admin/css/list-tables-rtl.css b/wp-admin/css/list-tables-rtl.css new file mode 100644 index 0000000..fa32892 --- /dev/null +++ b/wp-admin/css/list-tables-rtl.css @@ -0,0 +1,2145 @@ +.response-links { + display: block; + margin-bottom: 1em; +} + +.response-links a { + display: block; +} + +.response-links a.comments-edit-item-link { + font-weight: 600; +} + +.response-links a.comments-view-item-link { + font-size: 12px; +} + +.post-com-count-wrapper strong { + font-weight: 400; +} + +.comments-view-item-link { + display: inline-block; + clear: both; +} + +.column-response .post-com-count-wrapper, +.column-comments .post-com-count-wrapper { + white-space: nowrap; + word-wrap: normal; +} + +/* comments bubble common */ +.column-response .post-com-count, +.column-comments .post-com-count { + display: inline-block; + vertical-align: top; +} + +/* comments bubble approved */ +.column-response .post-com-count-no-comments, +.column-response .post-com-count-approved, +.column-comments .post-com-count-no-comments, +.column-comments .post-com-count-approved { + margin-top: 5px; +} + +.column-response .comment-count-no-comments, +.column-response .comment-count-approved, +.column-comments .comment-count-no-comments, +.column-comments .comment-count-approved { + box-sizing: border-box; + display: block; + padding: 0 8px; + min-width: 24px; + height: 2em; + border-radius: 5px; + background-color: #72777c; + color: #fff; + font-size: 11px; + line-height: 21px; + text-align: center; +} + +.ie8 .column-response .comment-count-no-comments, +.ie8 .column-response .comment-count-approved, +.ie8 .column-comments .comment-count-no-comments, +.ie8 .column-comments .comment-count-approved { + min-width: 0; +} + +.column-response .post-com-count-no-comments:after, +.column-response .post-com-count-approved:after, +.column-comments .post-com-count-no-comments:after, +.column-comments .post-com-count-approved:after { + content: ""; + display: block; + margin-right: 8px; + width: 0; + height: 0; + border-top: 5px solid #72777c; + border-left: 5px solid transparent; +} + +.column-response .post-com-count-approved:hover .comment-count-approved, +.column-response .post-com-count-approved:focus .comment-count-approved, +.column-comments .post-com-count-approved:hover .comment-count-approved, +.column-comments .post-com-count-approved:focus .comment-count-approved { + background: #0073aa; +} + +.column-response .post-com-count-approved:hover:after, +.column-response .post-com-count-approved:focus:after, +.column-comments .post-com-count-approved:hover:after, +.column-comments .post-com-count-approved:focus:after { + border-top-color: #0073aa; +} + +/* @todo: consider to use a single rule for these counters and the admin menu counters. */ +.column-response .post-com-count-pending, +.column-comments .post-com-count-pending { + position: relative; + right: -3px; + padding: 0 5px; + min-width: 7px; + height: 17px; + border: 2px solid #fff; + border-radius: 11px; + background: #ca4a1f; + color: #fff; + font-size: 9px; + line-height: 17px; + text-align: center; +} + +.column-response .post-com-count-no-pending, +.column-comments .post-com-count-no-pending { + display: none; +} + +/* 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: #555d66; +} + +/* reply to comments */ +#replyrow td { + padding: 2px; +} + +#replysubmit { + margin: 0; + padding: 5px 7px 10px; + overflow: hidden; +} + +#replysubmit .button { + margin-left: 5px; +} + +#replyrow.inline-edit-row fieldset.comment-reply { + font-size: inherit; + line-height: inherit; +} + +#replyrow legend { + margin: 0; + padding: .2em 5px 0; + font-size: 13px; + line-height: 1.4; + font-weight: 600; +} + +#replyrow.inline-edit-row label { + display: inline; + vertical-align: baseline; + line-height: inherit; +} + +#edithead .inside, +#commentsdiv #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; + box-shadow: none; +} + +#replyerror { + border-color: #ddd; + background-color: #f9f9f9; +} + +/* @todo: is this used? */ +.commentlist .avatar { + vertical-align: text-top; +} + +#the-comment-list tr.undo, +#the-comment-list div.undo { + background-color: #f5f5f5; +} + +#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 { + 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 { + 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-posts { + width: 74px; +} + +.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: 5.5em; + padding: 8px 0; + text-align: right; +} + +.fixed .column-comments .vers { + padding-right: 3px; +} + +td.column-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; + font-size: 14px; +} + +td.column-title p, +td.plugin-title p { + margin: 6px 0; +} + +/* Media file column */ +table.media .column-title .media-icon { + float: right; + min-height: 60px; + margin: 0 0 0 9px; +} + +table.media .column-title .media-icon img { + max-width: 60px; + height: auto; + vertical-align: top; /* Remove descender white-space. */ +} + +table.media .column-title .has-media-icon ~ .row-actions { + margin-right: 70px; /* 60px image + margin */ +} + +table.media .column-title .filename { + margin-bottom: 0.2em; +} + +/* @todo: pick a consistent list table selector */ +.wp-list-table a { + transition: none; +} + +#the-list tr:last-child td, +#the-list tr:last-child th { + border-bottom: none !important; + box-shadow: none; +} + +#comments-form .fixed .column-author { + width: 20%; +} + +#comments-form .fixed .column-date { + width: 14%; +} + +#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, +#commentsdiv .comments-box thead td { + background: transparent; + padding: 0 7px 4px; + font-style: italic; +} + +#commentsdiv .comments-box tr:last-child td { + border-bottom: 0 none; +} + +#commentsdiv #edithead .inside input { + width: 160px; +} + +.sorting-indicator { + display: block; + visibility: hidden; + width: 10px; + height: 4px; + margin-top: 8px; + margin-right: 7px; +} + +.sorting-indicator:before { + 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, +th.desc a:focus span.sorting-indicator:before { + content: "\f142"; +} + +th.sorted.desc .sorting-indicator:before, +th.asc:hover span.sorting-indicator:before, +th.asc a:focus span.sorting-indicator:before { + content: "\f140"; +} + +.wp-list-table .toggle-row { + position: absolute; + left: 8px; + top: 10px; + display: none; + padding: 0; + width: 40px; + height: 40px; + border: none; + outline: none; + background: transparent; +} + +.wp-list-table .toggle-row:hover { + cursor: pointer; +} + +.wp-list-table .toggle-row:focus:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 .wp-list-table .toggle-row:focus:before { + outline: #5b9dd9 solid 1px; +} + +.wp-list-table .toggle-row:active { + box-shadow: none; +} + +.wp-list-table .toggle-row:before { + position: absolute; + top: -5px; + right: 10px; + border-radius: 50%; + display: block; + padding: 1px 0 1px 2px; + color: #444; /* same as table headers sort arrows */ + content: "\f140"; + font: normal 20px/1 dashicons; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; +} + +.wp-list-table .is-expanded .toggle-row:before { + content: "\f142"; +} + +tr.wp-locked .locked-indicator { + margin-right: 6px; + height: 20px; + width: 16px; +} + +tr.wp-locked .locked-indicator-icon:before { + color: #82878c; + content: "\f160"; + display: inline-block; + font: normal 20px/1 dashicons; + speak: none; + vertical-align: middle; + -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: 4px; + height: auto; + opacity: 1; +} + +.locked-text { + vertical-align: top; +} + +tr.locked-info, tr.wp-locked .locked-info { + 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: 8px; +} + +.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 .sorting-indicator, +th.desc:hover span.sorting-indicator, +th.desc a:focus span.sorting-indicator, +th.asc:hover span.sorting-indicator, +th.asc a:focus span.sorting-indicator { + visibility: visible; +} + +/* Bulk Actions */ +.tablenav-pages a, +.tablenav-pages-navspan { + font-weight: 600; + padding: 0 2px; +} + +.tablenav-pages .current-page { + margin: 0 0 0 2px; + padding-bottom: 5px; + font-size: 13px; + text-align: center; +} + +.tablenav .total-pages { + margin-left: 2px; +} + +.tablenav #table-paging { + margin-right: 2px; +} + +.tablenav a.button, +.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; + height: 28px; + margin-top: 3px; + cursor: default; + color: #555; +} + +.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, +.tablenav-pages-navspan { + display: inline-block; + min-width: 17px; + border: 1px solid #ccc; /* same color as buttons border */ + padding: 3px 5px 7px; + background: #e5e5e5; + font-size: 16px; + line-height: 1; + font-weight: 400; + text-align: center; +} + +.tablenav-pages-navspan { + height: 16px; + border-color: #ddd; /* same as disabled buttons */ + background: #f7f7f7; /* same as disabled buttons */ + color: #a0a5aa; /* same as disabled buttons */ +} + +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + border-color: #5b9dd9; + color: #fff; + background: #00a0d2; + box-shadow: none; + outline: none; /* IE8 */ +} + +.tablenav .displaying-num { + margin-left: 7px; +} + +.tablenav .one-page .displaying-num { + display: inline-block; + margin-top: 5px; + margin-left: 0; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 0 0 8px; +} + +.wp-filter .actions { + display: inline-block; + vertical-align: middle; +} + +.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: #0073aa; +} + +.tablenav .next:hover, +.tablenav .prev:hover { + border-color: transparent; + color: #00a0d2; +} + +.tablenav .view-switch { + float: left; + margin: 0 5px; + padding-top: 3px; +} + +.wp-filter .view-switch { + display: inline-block; + vertical-align: middle; + padding: 12px 0; + margin: 0 2px 0 8px; +} + +.media-toolbar.wp-filter .view-switch { + margin: 0 2px 0 12px; +} + +.view-switch a { + float: right; + width: 28px; + height: 28px; + text-align: center; + line-height: 24px; + text-decoration: none; +} + +.view-switch a:before { + color: #b4b9be; + display: inline-block; + font: normal 20px/1 dashicons; + speak: none; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.view-switch a:hover:before, +.view-switch a:focus:before { + color: #727272; +} + +.view-switch a.current:before { + color: #0073aa; +} + +.view-switch .view-list:before { + content: "\f163"; +} + +.view-switch .view-excerpt:before { + content: "\f164"; +} + +.view-switch .view-grid:before { + content: "\f509"; +} + +.filter { + float: right; + margin: -5px 10px 0 0; +} + +.filter .subsubsub { + margin-right: -10px; + margin-top: 13px; +} +.screen-per-page { + width: 4em; +} + +#posts-filter .wp-filter { + margin-bottom: 0; +} + +#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; + padding: 2px 0 0; + position: relative; + right: -9999em; +} + +/* ticket #34150 */ +.rtl .row-actions a { + display: inline-block; +} + +.row-actions .network_only, +.row-actions .network_active { + color: #000; +} + +.no-js .row-actions, +tr:hover .row-actions, +.mobile .row-actions, +.row-actions.visible, +.comment-item:hover .row-actions { + position: static; +} + +/* 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-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; + line-height: 2.5; +} + +.inline-edit-row .submit { + clear: both; + padding: 0.5em; + margin: 0.5em 0 0; +} + +.inline-edit-row .notice-error { + margin-top: 1em; +} + +.inline-edit-row .notice-error .error { + margin: 0.5em 0; + padding: 2px; +} + +/* Positioning */ + +/* Needs higher specificity for the padding */ +#the-list .inline-edit-row .inline-edit-legend { + margin: 0; + padding: 0.2em 0.5em 0; + line-height: 2.5; + font-weight: 600; +} + +#the-list #bulk-edit.inline-edit-row .inline-edit-legend { + padding: 0.2em 0.5em; +} + +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + margin: 0; + padding: 0; +} + +.inline-edit-row fieldset label, +.inline-edit-row fieldset span.inline-edit-categories-label { + display: block; + margin: .2em 0; + line-height: 2.5; +} + +.inline-edit-row fieldset.inline-edit-date label { + display: inline-block; + margin: 0; + line-height: 1.5; + vertical-align: baseline; +} + +.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, +.inline-edit-row fieldset.inline-edit-date legend { + display: block; + float: right; + width: 6em; + line-height: 2.5; +} + +#posts-filter fieldset.inline-edit-date legend { + padding: 0; +} + +.inline-edit-row fieldset.inline-edit-date select { + margin: 1px; + line-height: 28px; +} + +.inline-edit-row fieldset label span.input-text-wrap, +.inline-edit-row fieldset .timestamp-wrap { + display: block; + margin-right: 6em; +} + +.quick-edit-row-post fieldset.inline-edit-col-right label span.title { + width: auto; + padding-left: 0.5em; +} + +.inline-edit-row .inline-edit-or { + margin: .2em 0 .2em 6px; + line-height: 2.5; +} + +.inline-edit-row .input-text-wrap input[type=text] { + width: 100%; +} + +.inline-edit-row fieldset label input[type=checkbox] { + vertical-align: middle; +} + +.inline-edit-row fieldset label textarea { + width: 100%; + height: 4em; + vertical-align: top; +} + +#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; +} + +/* Styling */ +.inline-edit-row .inline-edit-legend { + text-transform: uppercase; +} + +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + font-style: italic; +} + +/* 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.3em; +} + +.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; +} + +.updates-table .plugin-title p { + margin-top: 0; +} + +.plugins thead td.check-column, +.plugins tfoot td.check-column, +.plugins .inactive th.check-column { + padding-right: 6px; +} + +.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; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th, +.plugin-install #the-list td, +.upgrade .plugins td, +.upgrade .plugins th { + 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); + 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, +.plugins .updated td, +.plugins .updated th, +.plugins tr.active + tr.inactive.updated th, +.plugins tr.active + tr.inactive.updated td { + box-shadow: none; +} + +.plugins .active th.check-column, +.plugin-update-tr.active td { + border-right: 4px solid #00a0d2; +} + +.wp-list-table.plugins .plugin-title, +.wp-list-table.plugins .theme-title { + padding-left: 12px; + white-space: nowrap; +} + +.plugins .plugin-title img, +.plugins .plugin-title .dashicons { + float: right; + padding: 0 0 0 10px; + width: 64px; + height: 64px; +} + +.plugins .plugin-title .dashicons:before { + padding: 2px; + background-color: #eee; + box-shadow: inset 0 0 10px rgba(160,165,170,.15); + font-size: 60px; + color: #B4B9BE; +} + +#update-themes-table .plugin-title img, +#update-themes-table .plugin-title .dashicons { + width: 85px; +} + +.plugins .inactive .plugin-title strong { + font-weight: 400; +} + +.plugins .second, +.plugins .row-actions { + padding: 0 0 5px; +} + +.plugins .update .second, +.plugins .update .row-actions, +.plugins .updated .second, +.plugins .updated .row-actions { + padding-bottom: 0; +} + +.plugins-php .widefat tfoot th, +.plugins-php .widefat tfoot td { + border-top-style: solid; + border-top-width: 1px; +} + +.plugins .plugin-update-tr .plugin-update { + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + overflow: hidden; /* clearfix */ + padding: 0; +} + +.plugins .plugin-update-tr .notice, +.plugins .plugin-update-tr div[class="update-message"] { /* back-compat for pre-4.6 */ + margin: 5px 40px 15px 20px; +} + +.plugins .notice p { + margin: 0.5em 0; +} + +.plugin-card .update-now:before { + color: #f56e28; + content: "\f463"; + display: inline-block; + font: normal 20px/1 dashicons; + margin: 3px -2px 0 5px; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.plugin-card .updating-message:before { + content: "\f463"; + -webkit-animation: rotation 2s infinite linear; + animation: rotation 2s infinite linear; +} + +@-webkit-keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} + +@keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} + +.plugin-card .updated-message:before { + color: #79ba49; + content: "\f147"; +} + +.plugin-install-php h2 { + clear: both; +} + +.plugin-install-php h3 { + margin: 2.5em 0 8px; +} + +.plugin-install-php .wp-filter { + margin-bottom: 0; +} + +/* Plugin card table view */ +.plugin-group { + overflow: hidden; /* clearfix */ + margin-top: 1.5em; +} + +.plugin-group h3 { + margin-top: 0; +} + +.plugin-card { + float: right; + margin: 0 8px 16px; + width: 48.5%; + width: calc( 50% - 8px ); + background-color: #fff; + border: 1px solid #ddd; + box-sizing: border-box; +} + +.plugin-card:nth-child(odd) { + clear: both; + margin-right: 0; +} + +.plugin-card:nth-child(even) { + margin-left: 0; +} + +@media screen and ( min-width: 1600px ) { + .plugin-card { + width: 30%; + width: calc( 33.1% - 8px ); + } + + .plugin-card:nth-child(odd) { + clear: none; + margin-right: 8px; + } + + .plugin-card:nth-child(even) { + margin-left: 8px; + } + + .plugin-card:nth-child(3n+1) { + clear: both; + margin-right: 0; + } + + .plugin-card:nth-child(3n) { + margin-left: 0; + } +} + +.plugin-card-top { + position: relative; + padding: 20px 20px 10px; + min-height: 135px; +} + +div.action-links, +.plugin-action-buttons { + margin: 0; /* Override existing margins */ +} + +.plugin-card h3 { + margin: 0 0 12px; + font-size: 18px; + line-height: 1.3; +} + +.plugin-card .name, +.plugin-card .desc { + margin-right: 148px; /* icon + margin */ + margin-left: 120px; /* action links */ +} + +.plugin-card .action-links { + position: absolute; + top: 20px; + left: 20px; + width: 120px; +} + +.plugin-action-buttons { + clear: left; + float: left; + margin-right: 2em; + margin-bottom: 1em; + text-align: left; +} + +.plugin-action-buttons li { + margin-bottom: 10px; +} + +.plugin-card-bottom { + clear: both; + padding: 12px 20px; + background-color: #fafafa; + border-top: 1px solid #ddd; + overflow: hidden; +} + +.plugin-card-bottom .star-rating { + display: inline; +} + +.plugin-card-update-failed .update-now { + font-weight: 600; +} + +.plugin-card-update-failed .notice-error { + margin: 0; + padding-right: 16px; + box-shadow: 0 -1px 0 #ddd; +} + +.plugin-card-update-failed .plugin-card-bottom { + display: none; +} + +.plugin-card .column-rating { + line-height: 23px; +} + +.plugin-card .column-rating, +.plugin-card .column-updated { + margin-bottom: 4px; +} + +.plugin-card .column-rating, +.plugin-card .column-downloaded { + float: right; + clear: right; + max-width: 180px; +} + +.plugin-card .column-updated, +.plugin-card .column-compatibility { + text-align: left; + float: left; + clear: left; + width: 65%; + width: calc( 100% - 180px ); +} + +.plugin-card .column-compatibility span:before { + font: normal 20px/.5 dashicons; + speak: none; + display: inline-block; + padding: 0; + top: 4px; + right: -2px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #444; +} + +.plugin-card .compatibility-incompatible:before { + content: "\f158"; +} + +.plugin-card .compatibility-compatible:before { + content: "\f147"; +} + +.plugin-icon { + position: absolute; + top: 20px; + right: 20px; + width: 128px; + height: 128px; + margin: 0 0 20px 20px; +} + +.no-plugin-results { + color: #666; /* same as no themes and no media */ + font-size: 18px; + font-style: normal; + margin: 0; + padding: 100px 0 0; + text-align: center; +} + +/* ms */ +/* Background Color for Site Status */ +.wp-list-table .site-deleted, +.wp-list-table tr.site-deleted { + background: #ff8573; +} +.wp-list-table .site-spammed, +.wp-list-table tr.site-spammed { + background: #faafaa; +} +.wp-list-table .site-archived, +.wp-list-table tr.site-archived { + background: #ffebe8; +} +.wp-list-table .site-mature, +.wp-list-table tr.site-mature { + background: #fecac2; +} + +.sites.fixed .column-lastupdated, +.sites.fixed .column-registered { + width: 20%; +} + +.sites.fixed .column-users { + width: 80px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 1100px ) and ( min-width: 782px ), ( max-width: 480px ) { + .plugin-card .action-links { + position: static; + margin-right: 148px; + width: auto; + } + + .plugin-action-buttons { + float: none; + margin: 1em 0 0; + text-align: right; + } + + .plugin-action-buttons li { + display: inline-block; + vertical-align: middle; + } + + .plugin-action-buttons li .button { + margin-left: 20px; + } + + .plugin-card .name, + .plugin-card .desc { + margin-left: 0; + } + + .plugin-card .desc p:first-of-type { + margin-top: 0; + } + + .fixed .column-date { + width: 14%; + } +} + +@media screen and ( max-width: 782px ) { + /* WP List Table Options & Filters */ + .tablenav { + height: auto; + } + + .tablenav.top { + margin: 20px 0 5px 0; + } + + .tablenav.bottom { + position: relative; + margin-top: 15px; + } + + .tablenav br { + display: none; + } + + .tablenav br.clear { + display: block; + } + + .tablenav.top .actions, + .tablenav .view-switch { + display: none; + } + + .view-switch a { + width: 36px; + height: 36px; + line-height: 33px; + } + + /* Pagination */ + .tablenav.top .displaying-num { + display: none; + } + + .tablenav.bottom .displaying-num { + position: absolute; + left: 0; + top: 11px; + margin: 0; + font-size: 14px; + } + + .tablenav .tablenav-pages { + width: 100%; + height: auto; + 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 { + font-size: 16px; + } + + .tablenav-pages .pagination-links a, + .tablenav-pages-navspan { + padding: 9px 11px 12px; + font-size: 18px; + } + + .tablenav-pages-navspan { + height: 18px; + } + + .tablenav-pages .pagination-links .current-page { + padding: 8px 9px 9px; + font-size: 16px; + } + + /* WP List Table Adjustments: General */ + .form-wrap > p { + display: none; + } + + .comment-count { + font-size: 14px; + } + + .wp-list-table th.column-primary ~ th, + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td:not(.check-column) { + display: none; + } + + .wp-list-table thead th.column-primary { + width: 100%; + } + + /* Checkboxes need to show */ + .wp-list-table tr th.check-column { + display: table-cell; + width: 35px; + } + + .wp-list-table .column-primary .toggle-row { + display: block; + } + + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.check-column) { + position: relative; + clear: both; + display: block; + width: auto !important; /* needs to override some columns that are more specifically targeted */ + } + + .wp-list-table td.column-primary { + padding-left: 50px; /* space for toggle button */ + } + + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td:not(.check-column) { + padding: 3px 35% 3px 8px; + } + + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary)::before { + position: absolute; + right: 10px; /* match padding of regular table cell */ + display: block; + overflow: hidden; + width: 32%; /* leave a little space for a gutter */ + content: attr(data-colname); + white-space: nowrap; + text-overflow: ellipsis; + } + + .wp-list-table .is-expanded td:not(.hidden) { + display: block !important; + overflow: hidden; /* clearfix */ + } + + /* Special cases */ + .widefat .num, + .column-posts { + text-align: right; + } + + #comments-form .fixed .column-author, + #commentsdiv .fixed .column-author { + display: none !important; + } + + .fixed .column-comment .comment-author { + display: block; + } + + #the-comment-list .is-expanded td { + box-shadow: none; + } + + #the-comment-list .is-expanded td:last-child { + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + } + + /* Show comment bubble as text instead */ + .post-com-count .screen-reader-text { + position: static; + -webkit-clip-path: none; + clip-path: none; + width: auto; + height: auto; + margin: 0; + } + + .column-response .post-com-count-no-comments:after, + .column-response .post-com-count-approved:after, + .column-comments .post-com-count-no-comments:after, + .column-comments .post-com-count-approved:after { + content: none; + } + + .column-response .post-com-count [aria-hidden="true"], + .column-comments .post-com-count [aria-hidden="true"] { + display: none; + } + + .column-response .post-com-count-wrapper, + .column-comments .post-com-count-wrapper { + white-space: normal; + } + + .column-response .post-com-count-wrapper > a, + .column-comments .post-com-count-wrapper > a { + display: block; + } + + .column-response .post-com-count-no-comments, + .column-response .post-com-count-approved, + .column-comments .post-com-count-no-comments, + .column-comments .post-com-count-approved { + margin-top: 0; + margin-left: 0.5em; + } + + .column-response .post-com-count-pending, + .column-comments .post-com-count-pending { + position: static; + height: auto; + min-width: 0; + padding: 0; + border: none; + border-radius: 0; + background: none; + color: #bb2a2a; + font-size: inherit; + line-height: inherit; + text-align: right; + } + + .column-response .post-com-count-pending:hover, + .column-comments .post-com-count-pending:hover { + color: #dc3232; + } + + .widefat thead td.check-column, + .widefat tfoot td.check-column { + padding-top: 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; + 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, + .inline-edit-row fieldset.inline-edit-date legend { + 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, + .inline-edit-row fieldset .timestamp-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; + } + + .inline-edit-row .inline-edit-or { + margin: 0 0 0 6px; + } + + #edithead .inside, + #commentsdiv #edithead .inside { + float: none; + text-align: right; + padding: 3px 5px; + } + + #commentsdiv #edithead .inside input, + #edithead .inside input { + width: 100%; + } + + #edithead label { + display: block; + } + + #bulk-titles div { + margin: 0.8em 0.3em; + } + + #bulk-titles div a { + height: 22px; + } + + /* Updates */ + #wpbody-content .updates-table .plugin-title { + width: auto; + white-space: normal; + } + + /* Links */ + .link-manager-php #posts-filter { + margin-top: 25px; + } + + .link-manager-php .tablenav.bottom { + overflow: hidden; + } + + /* List tables that don't toggle rows */ + .comments-box .toggle-row, + .wp-list-table.plugins .toggle-row { + display: none; + } + + /* Plugin/Theme Management */ + #wpbody-content .wp-list-table.plugins td { + display: block; + width: auto; + padding: 10px 9px; /* reset from other list tables that have a label at this width */ + } + + #wpbody-content .wp-list-table.plugins .column-description { + padding-top: 2px; + } + + #wpbody-content .wp-list-table.plugins .plugin-title, + #wpbody-content .wp-list-table.plugins .theme-title { + padding-left: 12px; + white-space: normal; + } + + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-top: 13px; + padding-bottom: 4px; + } + + .plugins #the-list tr > td:not(:last-child), + .plugins #the-list .update th, + .plugins #the-list .update td, + .wp-list-table.plugins #the-list .theme-title { + box-shadow: none; + border-top: none; + } + + .plugins #the-list tr td { + border-top: none; + } + + .plugins tbody { + padding: 1px 0 0; + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td.column-description, + .plugins .plugin-update-tr:before { + 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; + } + + /* mimic the checkbox th */ + .plugins .plugin-update-tr:before { + content: ""; + display: table-cell; + } + + .plugins .active.update + .plugin-update-tr:before { + border-right: 4px solid #d54e21; + background-color: #fef7f1; + } + + .plugins #the-list .plugin-update-tr .plugin-update { + border-right: none; + } + + .plugin-update-tr .update-message { + margin-right: 0; + } + + .plugins .active.update + .plugin-update-tr:before { + background-color: #f7fcfe; + border-right: 4px solid #00a0d2; + } + + .plugins .plugin-update-tr .update-message { + margin-right: 0; + } + + .wp-list-table.plugins .plugin-title strong, + .wp-list-table.plugins .theme-title strong { + font-size: 1.4em; + line-height: 1.5; + } + + /* 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 { + box-shadow: none; + } + + table.plugin-install #the-list tr { + display: block; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + } + + .plugin-card { + margin-right: 0; + margin-left: 0; + width: 100%; + } +} + +@media screen and ( max-width: 480px ) { + .tablenav-pages .current-page { + margin: 0; + } + + .tablenav-pages .tablenav-paging-text { + float: right; + width: 100%; + padding-top: 0.5em; + } +} diff --git a/wp-admin/css/list-tables-rtl.min.css b/wp-admin/css/list-tables-rtl.min.css new file mode 100644 index 0000000..ca27e7c --- /dev/null +++ b/wp-admin/css/list-tables-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.response-links{display:block;margin-bottom:1em}.response-links a{display:block}.response-links a.comments-edit-item-link{font-weight:600}.response-links a.comments-view-item-link{font-size:12px}.post-com-count-wrapper strong{font-weight:400}.comments-view-item-link{display:inline-block;clear:both}.column-comments .post-com-count-wrapper,.column-response .post-com-count-wrapper{white-space:nowrap;word-wrap:normal}.column-comments .post-com-count,.column-response .post-com-count{display:inline-block;vertical-align:top}.column-comments .post-com-count-approved,.column-comments .post-com-count-no-comments,.column-response .post-com-count-approved,.column-response .post-com-count-no-comments{margin-top:5px}.column-comments .comment-count-approved,.column-comments .comment-count-no-comments,.column-response .comment-count-approved,.column-response .comment-count-no-comments{box-sizing:border-box;display:block;padding:0 8px;min-width:24px;height:2em;border-radius:5px;background-color:#72777c;color:#fff;font-size:11px;line-height:21px;text-align:center}.ie8 .column-comments .comment-count-approved,.ie8 .column-comments .comment-count-no-comments,.ie8 .column-response .comment-count-approved,.ie8 .column-response .comment-count-no-comments{min-width:0}.column-comments .post-com-count-approved:after,.column-comments .post-com-count-no-comments:after,.column-response .post-com-count-approved:after,.column-response .post-com-count-no-comments:after{content:"";display:block;margin-right:8px;width:0;height:0;border-top:5px solid #72777c;border-left:5px solid transparent}.column-comments .post-com-count-approved:focus .comment-count-approved,.column-comments .post-com-count-approved:hover .comment-count-approved,.column-response .post-com-count-approved:focus .comment-count-approved,.column-response .post-com-count-approved:hover .comment-count-approved{background:#0073aa}.column-comments .post-com-count-approved:focus:after,.column-comments .post-com-count-approved:hover:after,.column-response .post-com-count-approved:focus:after,.column-response .post-com-count-approved:hover:after{border-top-color:#0073aa}.column-comments .post-com-count-pending,.column-response .post-com-count-pending{position:relative;right:-3px;padding:0 5px;min-width:7px;height:17px;border:2px solid #fff;border-radius:11px;background:#ca4a1f;color:#fff;font-size:9px;line-height:17px;text-align:center}.column-comments .post-com-count-no-pending,.column-response .post-com-count-no-pending{display:none}.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:#555d66}#replyrow td{padding:2px}#replysubmit{margin:0;padding:5px 7px 10px;overflow:hidden}#replysubmit .button{margin-left:5px}#replyrow.inline-edit-row fieldset.comment-reply{font-size:inherit;line-height:inherit}#replyrow legend{margin:0;padding:.2em 5px 0;font-size:13px;line-height:1.4;font-weight:600}#replyrow.inline-edit-row label{display:inline;vertical-align:baseline;line-height:inherit}#commentsdiv #edithead .inside,#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;box-shadow:none}#replyerror{border-color:#ddd;background-color:#f9f9f9}.commentlist .avatar{vertical-align:text-top}#the-comment-list div.undo,#the-comment-list tr.undo{background-color:#f5f5f5}#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{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{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-posts{width:74px}.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:5.5em;padding:8px 0;text-align:right}.fixed .column-comments .vers{padding-right:3px}td.column-title strong,td.plugin-title strong{display:block;margin-bottom:.2em;font-size:14px}td.column-title p,td.plugin-title p{margin:6px 0}table.media .column-title .media-icon{float:right;min-height:60px;margin:0 0 0 9px}table.media .column-title .media-icon img{max-width:60px;height:auto;vertical-align:top}table.media .column-title .has-media-icon~.row-actions{margin-right:70px}table.media .column-title .filename{margin-bottom:.2em}.wp-list-table a{transition:none}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:none!important;box-shadow:none}#comments-form .fixed .column-author{width:20%}#comments-form .fixed .column-date{width:14%}#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}#commentsdiv .comments-box thead td,#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 #edithead .inside input{width:160px}.sorting-indicator{display:block;visibility:hidden;width:10px;height:4px;margin-top:8px;margin-right:7px}.sorting-indicator:before{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 a:focus span.sorting-indicator:before,th.desc:hover span.sorting-indicator:before,th.sorted.asc .sorting-indicator:before{content:"\f142"}th.asc a:focus span.sorting-indicator:before,th.asc:hover span.sorting-indicator:before,th.sorted.desc .sorting-indicator:before{content:"\f140"}.wp-list-table .toggle-row{position:absolute;left:8px;top:10px;display:none;padding:0;width:40px;height:40px;border:none;outline:0;background:0 0}.wp-list-table .toggle-row:hover{cursor:pointer}.wp-list-table .toggle-row:focus:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .wp-list-table .toggle-row:focus:before{outline:#5b9dd9 solid 1px}.wp-list-table .toggle-row:active{box-shadow:none}.wp-list-table .toggle-row:before{position:absolute;top:-5px;right:10px;border-radius:50%;display:block;padding:1px 0 1px 2px;color:#444;content:"\f140";font:400 20px/1 dashicons;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.wp-list-table .is-expanded .toggle-row:before{content:"\f142"}tr.wp-locked .locked-indicator{margin-right:6px;height:20px;width:16px}tr.wp-locked .locked-indicator-icon:before{color:#82878c;content:"\f160";display:inline-block;font:400 20px/1 dashicons;speak:none;vertical-align:middle;-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:4px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{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:8px}.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.asc a:focus span.sorting-indicator,th.asc:hover span.sorting-indicator,th.desc a:focus span.sorting-indicator,th.desc:hover span.sorting-indicator,th.sorted .sorting-indicator{visibility:visible}.tablenav-pages a,.tablenav-pages-navspan{font-weight:600;padding:0 2px}.tablenav-pages .current-page{margin:0 0 0 2px;padding-bottom:5px;font-size:13px;text-align:center}.tablenav .total-pages{margin-left:2px}.tablenav #table-paging{margin-right:2px}.tablenav a.button,.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;height:28px;margin-top:3px;cursor:default;color:#555}.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,.tablenav-pages-navspan{display:inline-block;min-width:17px;border:1px solid #ccc;padding:3px 5px 7px;background:#e5e5e5;font-size:16px;line-height:1;font-weight:400;text-align:center}.tablenav-pages-navspan{height:16px;border-color:#ddd;background:#f7f7f7;color:#a0a5aa}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover{border-color:#5b9dd9;color:#fff;background:#00a0d2;box-shadow:none;outline:0}.tablenav .displaying-num{margin-left:7px}.tablenav .one-page .displaying-num{display:inline-block;margin-top:5px;margin-left:0}.tablenav .actions{overflow:hidden;padding:2px 0 0 8px}.wp-filter .actions{display:inline-block;vertical-align:middle}.tablenav .delete{margin-left:20px}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0073aa}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#00a0d2}.tablenav .view-switch{float:left;margin:0 5px;padding-top:3px}.wp-filter .view-switch{display:inline-block;vertical-align:middle;padding:12px 0;margin:0 2px 0 8px}.media-toolbar.wp-filter .view-switch{margin:0 2px 0 12px}.view-switch a{float:right;width:28px;height:28px;text-align:center;line-height:24px;text-decoration:none}.view-switch a:before{color:#b4b9be;display:inline-block;font:400 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch a:focus:before,.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0073aa}.view-switch .view-list:before{content:"\f163"}.view-switch .view-excerpt:before{content:"\f164"}.view-switch .view-grid:before{content:"\f509"}.filter{float:right;margin:-5px 10px 0 0}.filter .subsubsub{margin-right:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter .wp-filter{margin-bottom:0}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex;padding:0}#posts-filter fieldset legend{padding:0 1px .2em 0}.row-actions,.row-actions-visible{padding:2px 0 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;position:relative;right:-9999em}.plugins,.plugins td,.plugins th,.row-actions .network_active,.row-actions .network_only{color:#000}.rtl .row-actions a{display:inline-block}.comment-item:hover .row-actions,.mobile .row-actions,.no-js .row-actions,.row-actions.visible,tr:hover .row-actions{position:static}#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-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;line-height:2.5}.inline-edit-row .submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row .notice-error{margin-top:1em}.inline-edit-row .notice-error .error{margin:.5em 0;padding:2px}#the-list .inline-edit-row .inline-edit-legend{margin:0;padding:.2em .5em 0;line-height:2.5;font-weight:600}#the-list #bulk-edit.inline-edit-row .inline-edit-legend{padding:.2em .5em}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{margin:0;padding:0;font-style:italic}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0;line-height:2.5}.inline-edit-row fieldset.inline-edit-date label{display:inline-block;margin:0;line-height:1.5;vertical-align:baseline}.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,.inline-edit-row fieldset.inline-edit-date legend{display:block;float:right;width:6em;line-height:2.5}#posts-filter fieldset.inline-edit-date legend{padding:0}.inline-edit-row fieldset.inline-edit-date select{margin:1px;line-height:28px}.inline-edit-row fieldset .timestamp-wrap,.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-right:6em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-left:.5em}.inline-edit-row .inline-edit-or{margin:.2em 0 .2em 6px;line-height:2.5}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:middle}.inline-edit-row fieldset label textarea{width:100%;height:4em;vertical-align:top}#bulk-titles,ul.cat-checklist{height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px}#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-row .inline-edit-legend{text-transform:uppercase}.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.3em}.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{margin:0;background-color:#fff}#bulk-titles{display:block;margin:0 0 5px;line-height:140%}.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 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}.updates-table .plugin-title p{margin-top:0}.plugins .inactive th.check-column,.plugins tfoot td.check-column,.plugins thead td.check-column{padding-right:6px}.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-install #the-list td,.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th,.upgrade .plugins td,.upgrade .plugins th{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);box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins .update td,.plugins .update th,.plugins .updated td,.plugins .updated th,.plugins tr.active+tr.inactive.update td,.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.updated td,.plugins tr.active+tr.inactive.updated th,.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{box-shadow:none}.plugin-update-tr.active td,.plugins .active th.check-column{border-right:4px solid #00a0d2}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-left:12px;white-space:nowrap}.plugins .plugin-title .dashicons,.plugins .plugin-title img{float:right;padding:0 0 0 10px;width:64px;height:64px}.plugins .plugin-title .dashicons:before{padding:2px;background-color:#eee;box-shadow:inset 0 0 10px rgba(160,165,170,.15);font-size:60px;color:#B4B9BE}#update-themes-table .plugin-title .dashicons,#update-themes-table .plugin-title img{width:85px}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .row-actions,.plugins .second{padding:0 0 5px}.plugins .update .row-actions,.plugins .update .second,.plugins .updated .row-actions,.plugins .updated .second{padding-bottom:0}.plugins-php .widefat tfoot td,.plugins-php .widefat tfoot th{border-top-style:solid;border-top-width:1px}.plugins .plugin-update-tr .plugin-update{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;padding:0}.plugins .plugin-update-tr .notice,.plugins .plugin-update-tr div[class=update-message]{margin:5px 40px 15px 20px}.plugins .notice p{margin:.5em 0}.plugin-card .update-now:before{color:#f56e28;content:"\f463";display:inline-block;font:400 20px/1 dashicons;margin:3px -2px 0 5px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugin-card .updating-message:before{content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}.plugin-card .updated-message:before{color:#79ba49;content:"\f147"}.plugin-install-php h2{clear:both}.plugin-install-php h3{margin:2.5em 0 8px}.plugin-install-php .wp-filter{margin-bottom:0}.plugin-group{overflow:hidden;margin-top:1.5em}.plugin-group h3{margin-top:0}.plugin-card{float:right;margin:0 8px 16px;width:48.5%;width:calc(50% - 8px);background-color:#fff;border:1px solid #ddd;box-sizing:border-box}.plugin-card:nth-child(odd){clear:both;margin-right:0}.plugin-card:nth-child(even){margin-left:0}@media screen and (min-width:1600px){.plugin-card{width:30%;width:calc(33.1% - 8px)}.plugin-card:nth-child(odd){clear:none;margin-right:8px}.plugin-card:nth-child(even){margin-left:8px}.plugin-card:nth-child(3n+1){clear:both;margin-right:0}.plugin-card:nth-child(3n){margin-left:0}}.plugin-card-top{position:relative;padding:20px 20px 10px;min-height:135px}.plugin-action-buttons,div.action-links{margin:0}.plugin-card h3{margin:0 0 12px;font-size:18px;line-height:1.3}.plugin-card .desc,.plugin-card .name{margin-right:148px;margin-left:120px}.plugin-card .action-links{position:absolute;top:20px;left:20px;width:120px}.plugin-action-buttons{clear:left;float:left;margin-right:2em;margin-bottom:1em;text-align:left}.plugin-action-buttons li{margin-bottom:10px}.plugin-card-bottom{clear:both;padding:12px 20px;background-color:#fafafa;border-top:1px solid #ddd;overflow:hidden}.plugin-card-bottom .star-rating{display:inline}.plugin-card-update-failed .update-now{font-weight:600}.plugin-card-update-failed .notice-error{margin:0;padding-right:16px;box-shadow:0 -1px 0 #ddd}.plugin-card-update-failed .plugin-card-bottom{display:none}.plugin-card .column-rating{line-height:23px}.plugin-card .column-rating,.plugin-card .column-updated{margin-bottom:4px}.plugin-card .column-downloaded,.plugin-card .column-rating{float:right;clear:right;max-width:180px}.plugin-card .column-compatibility,.plugin-card .column-updated{text-align:left;float:left;clear:left;width:65%;width:calc(100% - 180px)}.plugin-card .column-compatibility span:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-2px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.plugin-card .compatibility-incompatible:before{content:"\f158"}.plugin-card .compatibility-compatible:before{content:"\f147"}.plugin-icon{position:absolute;top:20px;right:20px;width:128px;height:128px;margin:0 0 20px 20px}.no-plugin-results{color:#666;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.wp-list-table .site-deleted,.wp-list-table tr.site-deleted{background:#ff8573}.wp-list-table .site-spammed,.wp-list-table tr.site-spammed{background:#faafaa}.wp-list-table .site-archived,.wp-list-table tr.site-archived{background:#ffebe8}.wp-list-table .site-mature,.wp-list-table tr.site-mature{background:#fecac2}.sites.fixed .column-lastupdated,.sites.fixed .column-registered{width:20%}.sites.fixed .column-users{width:80px}@media screen and (max-width:1100px) and (min-width:782px),(max-width:480px){.plugin-card .action-links{position:static;margin-right:148px;width:auto}.plugin-action-buttons{float:none;margin:1em 0 0;text-align:right}.plugin-action-buttons li{display:inline-block;vertical-align:middle}.plugin-action-buttons li .button{margin-left:20px}.plugin-card .desc,.plugin-card .name{margin-left:0}.plugin-card .desc p:first-of-type{margin-top:0}.fixed .column-date{width:14%}}@media screen and (max-width:782px){.plugins #the-list tr td,.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:none}.tablenav{height:auto}.tablenav.top{margin:20px 0 5px}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}.form-wrap>p,.tablenav .view-switch,.tablenav.top .actions,.tablenav.top .displaying-num,.tablenav.top .tablenav-pages.one-page{display:none}.view-switch a{width:36px;height:36px;line-height:33px}.tablenav.bottom .displaying-num{position:absolute;left:0;top:11px;margin:0;font-size:14px}.tablenav .tablenav-pages{width:100%;height:auto;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links{font-size:16px}.tablenav-pages .pagination-links a,.tablenav-pages-navspan{padding:9px 11px 12px;font-size:18px}.tablenav-pages-navspan{height:18px}.tablenav-pages .pagination-links .current-page{padding:8px 9px 9px;font-size:16px}.comment-count{font-size:14px}.wp-list-table th.column-primary~th,.wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary~td:not(.check-column){display:none}.wp-list-table thead th.column-primary{width:100%}.wp-list-table tr th.check-column{display:table-cell;width:35px}.wp-list-table .column-primary .toggle-row{display:block}.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.check-column){position:relative;clear:both;display:block;width:auto!important}.wp-list-table td.column-primary{padding-left:50px}.wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary~td:not(.check-column){padding:3px 35% 3px 8px}.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary)::before{position:absolute;right:10px;display:block;overflow:hidden;width:32%;content:attr(data-colname);white-space:nowrap;text-overflow:ellipsis}.wp-list-table .is-expanded td:not(.hidden){display:block!important;overflow:hidden}.column-posts,.widefat .num{text-align:right}#comments-form .fixed .column-author,#commentsdiv .fixed .column-author{display:none!important}.fixed .column-comment .comment-author{display:block}#the-comment-list .is-expanded td{box-shadow:none}#the-comment-list .is-expanded td:last-child{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.post-com-count .screen-reader-text{position:static;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}.column-comments .post-com-count-approved:after,.column-comments .post-com-count-no-comments:after,.column-response .post-com-count-approved:after,.column-response .post-com-count-no-comments:after{content:none}.column-comments .post-com-count [aria-hidden=true],.column-response .post-com-count [aria-hidden=true]{display:none}#edithead label,.column-comments .post-com-count-wrapper>a,.column-response .post-com-count-wrapper>a{display:block}.column-comments .post-com-count-wrapper,.column-response .post-com-count-wrapper{white-space:normal}.column-comments .post-com-count-approved,.column-comments .post-com-count-no-comments,.column-response .post-com-count-approved,.column-response .post-com-count-no-comments{margin-top:0;margin-left:.5em}.column-comments .post-com-count-pending,.column-response .post-com-count-pending{position:static;height:auto;min-width:0;padding:0;border:none;border-radius:0;background:0 0;color:#bb2a2a;font-size:inherit;line-height:inherit;text-align:right}.column-comments .post-com-count-pending:hover,.column-response .post-com-count-pending:hover{color:#dc3232}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:10px}.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;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,.inline-edit-row fieldset.inline-edit-date legend{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 .timestamp-wrap,.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}.inline-edit-row .inline-edit-or{margin:0 0 0 6px}#commentsdiv #edithead .inside,#edithead .inside{float:none;text-align:right;padding:3px 5px}#commentsdiv #edithead .inside input,#edithead .inside input{width:100%}#bulk-titles div{margin:.8em .3em}.plugin-card,.plugin-update-tr .update-message,.plugins .plugin-update-tr .update-message{margin-right:0}#bulk-titles div a{height:22px}#wpbody-content .updates-table .plugin-title{width:auto;white-space:normal}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.comments-box .toggle-row,.wp-list-table.plugins .toggle-row{display:none}#wpbody-content .wp-list-table.plugins td{display:block;width:auto;padding:10px 9px}#wpbody-content .wp-list-table.plugins .column-description{padding-top:2px}#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .theme-title{padding-left:12px;white-space:normal}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins #the-list .update td,.plugins #the-list .update th,.plugins #the-list tr>td:not(:last-child),.wp-list-table.plugins #the-list .theme-title{box-shadow:none;border-top:none}.plugins tbody{padding:1px 0 0}.plugins .plugin-update-tr:before,.plugins tr.active+tr.inactive td.column-description,.plugins tr.active+tr.inactive th.check-column{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .plugin-update-tr:before{content:"";display:table-cell}.plugins #the-list .plugin-update-tr .plugin-update{border-right:none}.plugins .active.update+.plugin-update-tr:before{background-color:#f7fcfe;border-right:4px solid #00a0d2}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.5}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{box-shadow:none}table.plugin-install #the-list tr{display:block;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-card{margin-left:0;width:100%}}@media screen and (max-width:480px){.tablenav-pages .current-page{margin:0}.tablenav-pages .tablenav-paging-text{float:right;width:100%;padding-top:.5em}} \ No newline at end of file diff --git a/wp-admin/css/list-tables.css b/wp-admin/css/list-tables.css new file mode 100644 index 0000000..495c49b --- /dev/null +++ b/wp-admin/css/list-tables.css @@ -0,0 +1,2145 @@ +.response-links { + display: block; + margin-bottom: 1em; +} + +.response-links a { + display: block; +} + +.response-links a.comments-edit-item-link { + font-weight: 600; +} + +.response-links a.comments-view-item-link { + font-size: 12px; +} + +.post-com-count-wrapper strong { + font-weight: 400; +} + +.comments-view-item-link { + display: inline-block; + clear: both; +} + +.column-response .post-com-count-wrapper, +.column-comments .post-com-count-wrapper { + white-space: nowrap; + word-wrap: normal; +} + +/* comments bubble common */ +.column-response .post-com-count, +.column-comments .post-com-count { + display: inline-block; + vertical-align: top; +} + +/* comments bubble approved */ +.column-response .post-com-count-no-comments, +.column-response .post-com-count-approved, +.column-comments .post-com-count-no-comments, +.column-comments .post-com-count-approved { + margin-top: 5px; +} + +.column-response .comment-count-no-comments, +.column-response .comment-count-approved, +.column-comments .comment-count-no-comments, +.column-comments .comment-count-approved { + box-sizing: border-box; + display: block; + padding: 0 8px; + min-width: 24px; + height: 2em; + border-radius: 5px; + background-color: #72777c; + color: #fff; + font-size: 11px; + line-height: 21px; + text-align: center; +} + +.ie8 .column-response .comment-count-no-comments, +.ie8 .column-response .comment-count-approved, +.ie8 .column-comments .comment-count-no-comments, +.ie8 .column-comments .comment-count-approved { + min-width: 0; +} + +.column-response .post-com-count-no-comments:after, +.column-response .post-com-count-approved:after, +.column-comments .post-com-count-no-comments:after, +.column-comments .post-com-count-approved:after { + content: ""; + display: block; + margin-left: 8px; + width: 0; + height: 0; + border-top: 5px solid #72777c; + border-right: 5px solid transparent; +} + +.column-response .post-com-count-approved:hover .comment-count-approved, +.column-response .post-com-count-approved:focus .comment-count-approved, +.column-comments .post-com-count-approved:hover .comment-count-approved, +.column-comments .post-com-count-approved:focus .comment-count-approved { + background: #0073aa; +} + +.column-response .post-com-count-approved:hover:after, +.column-response .post-com-count-approved:focus:after, +.column-comments .post-com-count-approved:hover:after, +.column-comments .post-com-count-approved:focus:after { + border-top-color: #0073aa; +} + +/* @todo: consider to use a single rule for these counters and the admin menu counters. */ +.column-response .post-com-count-pending, +.column-comments .post-com-count-pending { + position: relative; + left: -3px; + padding: 0 5px; + min-width: 7px; + height: 17px; + border: 2px solid #fff; + border-radius: 11px; + background: #ca4a1f; + color: #fff; + font-size: 9px; + line-height: 17px; + text-align: center; +} + +.column-response .post-com-count-no-pending, +.column-comments .post-com-count-no-pending { + display: none; +} + +/* 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: #555d66; +} + +/* reply to comments */ +#replyrow td { + padding: 2px; +} + +#replysubmit { + margin: 0; + padding: 5px 7px 10px; + overflow: hidden; +} + +#replysubmit .button { + margin-right: 5px; +} + +#replyrow.inline-edit-row fieldset.comment-reply { + font-size: inherit; + line-height: inherit; +} + +#replyrow legend { + margin: 0; + padding: .2em 5px 0; + font-size: 13px; + line-height: 1.4; + font-weight: 600; +} + +#replyrow.inline-edit-row label { + display: inline; + vertical-align: baseline; + line-height: inherit; +} + +#edithead .inside, +#commentsdiv #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; + box-shadow: none; +} + +#replyerror { + border-color: #ddd; + background-color: #f9f9f9; +} + +/* @todo: is this used? */ +.commentlist .avatar { + vertical-align: text-top; +} + +#the-comment-list tr.undo, +#the-comment-list div.undo { + background-color: #f5f5f5; +} + +#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 { + 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 { + 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-posts { + width: 74px; +} + +.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: 5.5em; + padding: 8px 0; + text-align: left; +} + +.fixed .column-comments .vers { + padding-left: 3px; +} + +td.column-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; + font-size: 14px; +} + +td.column-title p, +td.plugin-title p { + margin: 6px 0; +} + +/* Media file column */ +table.media .column-title .media-icon { + float: left; + min-height: 60px; + margin: 0 9px 0 0; +} + +table.media .column-title .media-icon img { + max-width: 60px; + height: auto; + vertical-align: top; /* Remove descender white-space. */ +} + +table.media .column-title .has-media-icon ~ .row-actions { + margin-left: 70px; /* 60px image + margin */ +} + +table.media .column-title .filename { + margin-bottom: 0.2em; +} + +/* @todo: pick a consistent list table selector */ +.wp-list-table a { + transition: none; +} + +#the-list tr:last-child td, +#the-list tr:last-child th { + border-bottom: none !important; + box-shadow: none; +} + +#comments-form .fixed .column-author { + width: 20%; +} + +#comments-form .fixed .column-date { + width: 14%; +} + +#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, +#commentsdiv .comments-box thead td { + background: transparent; + padding: 0 7px 4px; + font-style: italic; +} + +#commentsdiv .comments-box tr:last-child td { + border-bottom: 0 none; +} + +#commentsdiv #edithead .inside input { + width: 160px; +} + +.sorting-indicator { + display: block; + visibility: hidden; + width: 10px; + height: 4px; + margin-top: 8px; + margin-left: 7px; +} + +.sorting-indicator:before { + 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, +th.desc a:focus span.sorting-indicator:before { + content: "\f142"; +} + +th.sorted.desc .sorting-indicator:before, +th.asc:hover span.sorting-indicator:before, +th.asc a:focus span.sorting-indicator:before { + content: "\f140"; +} + +.wp-list-table .toggle-row { + position: absolute; + right: 8px; + top: 10px; + display: none; + padding: 0; + width: 40px; + height: 40px; + border: none; + outline: none; + background: transparent; +} + +.wp-list-table .toggle-row:hover { + cursor: pointer; +} + +.wp-list-table .toggle-row:focus:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 .wp-list-table .toggle-row:focus:before { + outline: #5b9dd9 solid 1px; +} + +.wp-list-table .toggle-row:active { + box-shadow: none; +} + +.wp-list-table .toggle-row:before { + position: absolute; + top: -5px; + left: 10px; + border-radius: 50%; + display: block; + padding: 1px 2px 1px 0; + color: #444; /* same as table headers sort arrows */ + content: "\f140"; + font: normal 20px/1 dashicons; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; +} + +.wp-list-table .is-expanded .toggle-row:before { + content: "\f142"; +} + +tr.wp-locked .locked-indicator { + margin-left: 6px; + height: 20px; + width: 16px; +} + +tr.wp-locked .locked-indicator-icon:before { + color: #82878c; + content: "\f160"; + display: inline-block; + font: normal 20px/1 dashicons; + speak: none; + vertical-align: middle; + -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: 4px; + height: auto; + opacity: 1; +} + +.locked-text { + vertical-align: top; +} + +tr.locked-info, tr.wp-locked .locked-info { + 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: 8px; +} + +.fixed .column-comments.sortable a, +.fixed .column-comments.sorted a { + padding: 8px 0; +} + +th.sortable a span, +th.sorted a span { + float: left; + cursor: pointer; +} + +th.sorted .sorting-indicator, +th.desc:hover span.sorting-indicator, +th.desc a:focus span.sorting-indicator, +th.asc:hover span.sorting-indicator, +th.asc a:focus span.sorting-indicator { + visibility: visible; +} + +/* Bulk Actions */ +.tablenav-pages a, +.tablenav-pages-navspan { + font-weight: 600; + padding: 0 2px; +} + +.tablenav-pages .current-page { + margin: 0 2px 0 0; + padding-bottom: 5px; + font-size: 13px; + text-align: center; +} + +.tablenav .total-pages { + margin-right: 2px; +} + +.tablenav #table-paging { + margin-left: 2px; +} + +.tablenav a.button, +.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; + height: 28px; + margin-top: 3px; + cursor: default; + color: #555; +} + +.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, +.tablenav-pages-navspan { + display: inline-block; + min-width: 17px; + border: 1px solid #ccc; /* same color as buttons border */ + padding: 3px 5px 7px; + background: #e5e5e5; + font-size: 16px; + line-height: 1; + font-weight: 400; + text-align: center; +} + +.tablenav-pages-navspan { + height: 16px; + border-color: #ddd; /* same as disabled buttons */ + background: #f7f7f7; /* same as disabled buttons */ + color: #a0a5aa; /* same as disabled buttons */ +} + +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + border-color: #5b9dd9; + color: #fff; + background: #00a0d2; + box-shadow: none; + outline: none; /* IE8 */ +} + +.tablenav .displaying-num { + margin-right: 7px; +} + +.tablenav .one-page .displaying-num { + display: inline-block; + margin-top: 5px; + margin-right: 0; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 8px 0 0; +} + +.wp-filter .actions { + display: inline-block; + vertical-align: middle; +} + +.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: #0073aa; +} + +.tablenav .next:hover, +.tablenav .prev:hover { + border-color: transparent; + color: #00a0d2; +} + +.tablenav .view-switch { + float: right; + margin: 0 5px; + padding-top: 3px; +} + +.wp-filter .view-switch { + display: inline-block; + vertical-align: middle; + padding: 12px 0; + margin: 0 8px 0 2px; +} + +.media-toolbar.wp-filter .view-switch { + margin: 0 12px 0 2px; +} + +.view-switch a { + float: left; + width: 28px; + height: 28px; + text-align: center; + line-height: 24px; + text-decoration: none; +} + +.view-switch a:before { + color: #b4b9be; + display: inline-block; + font: normal 20px/1 dashicons; + speak: none; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.view-switch a:hover:before, +.view-switch a:focus:before { + color: #727272; +} + +.view-switch a.current:before { + color: #0073aa; +} + +.view-switch .view-list:before { + content: "\f163"; +} + +.view-switch .view-excerpt:before { + content: "\f164"; +} + +.view-switch .view-grid:before { + content: "\f509"; +} + +.filter { + float: left; + margin: -5px 0 0 10px; +} + +.filter .subsubsub { + margin-left: -10px; + margin-top: 13px; +} +.screen-per-page { + width: 4em; +} + +#posts-filter .wp-filter { + margin-bottom: 0; +} + +#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; + padding: 2px 0 0; + position: relative; + left: -9999em; +} + +/* ticket #34150 */ +.rtl .row-actions a { + display: inline-block; +} + +.row-actions .network_only, +.row-actions .network_active { + color: #000; +} + +.no-js .row-actions, +tr:hover .row-actions, +.mobile .row-actions, +.row-actions.visible, +.comment-item:hover .row-actions { + position: static; +} + +/* 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-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; + line-height: 2.5; +} + +.inline-edit-row .submit { + clear: both; + padding: 0.5em; + margin: 0.5em 0 0; +} + +.inline-edit-row .notice-error { + margin-top: 1em; +} + +.inline-edit-row .notice-error .error { + margin: 0.5em 0; + padding: 2px; +} + +/* Positioning */ + +/* Needs higher specificity for the padding */ +#the-list .inline-edit-row .inline-edit-legend { + margin: 0; + padding: 0.2em 0.5em 0; + line-height: 2.5; + font-weight: 600; +} + +#the-list #bulk-edit.inline-edit-row .inline-edit-legend { + padding: 0.2em 0.5em; +} + +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + margin: 0; + padding: 0; +} + +.inline-edit-row fieldset label, +.inline-edit-row fieldset span.inline-edit-categories-label { + display: block; + margin: .2em 0; + line-height: 2.5; +} + +.inline-edit-row fieldset.inline-edit-date label { + display: inline-block; + margin: 0; + line-height: 1.5; + vertical-align: baseline; +} + +.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, +.inline-edit-row fieldset.inline-edit-date legend { + display: block; + float: left; + width: 6em; + line-height: 2.5; +} + +#posts-filter fieldset.inline-edit-date legend { + padding: 0; +} + +.inline-edit-row fieldset.inline-edit-date select { + margin: 1px; + line-height: 28px; +} + +.inline-edit-row fieldset label span.input-text-wrap, +.inline-edit-row fieldset .timestamp-wrap { + display: block; + margin-left: 6em; +} + +.quick-edit-row-post fieldset.inline-edit-col-right label span.title { + width: auto; + padding-right: 0.5em; +} + +.inline-edit-row .inline-edit-or { + margin: .2em 6px .2em 0; + line-height: 2.5; +} + +.inline-edit-row .input-text-wrap input[type=text] { + width: 100%; +} + +.inline-edit-row fieldset label input[type=checkbox] { + vertical-align: middle; +} + +.inline-edit-row fieldset label textarea { + width: 100%; + height: 4em; + vertical-align: top; +} + +#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; +} + +/* Styling */ +.inline-edit-row .inline-edit-legend { + text-transform: uppercase; +} + +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + font-style: italic; +} + +/* 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.3em; +} + +.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; +} + +.updates-table .plugin-title p { + margin-top: 0; +} + +.plugins thead td.check-column, +.plugins tfoot td.check-column, +.plugins .inactive th.check-column { + padding-left: 6px; +} + +.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; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th, +.plugin-install #the-list td, +.upgrade .plugins td, +.upgrade .plugins th { + 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); + 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, +.plugins .updated td, +.plugins .updated th, +.plugins tr.active + tr.inactive.updated th, +.plugins tr.active + tr.inactive.updated td { + box-shadow: none; +} + +.plugins .active th.check-column, +.plugin-update-tr.active td { + border-left: 4px solid #00a0d2; +} + +.wp-list-table.plugins .plugin-title, +.wp-list-table.plugins .theme-title { + padding-right: 12px; + white-space: nowrap; +} + +.plugins .plugin-title img, +.plugins .plugin-title .dashicons { + float: left; + padding: 0 10px 0 0; + width: 64px; + height: 64px; +} + +.plugins .plugin-title .dashicons:before { + padding: 2px; + background-color: #eee; + box-shadow: inset 0 0 10px rgba(160,165,170,.15); + font-size: 60px; + color: #B4B9BE; +} + +#update-themes-table .plugin-title img, +#update-themes-table .plugin-title .dashicons { + width: 85px; +} + +.plugins .inactive .plugin-title strong { + font-weight: 400; +} + +.plugins .second, +.plugins .row-actions { + padding: 0 0 5px; +} + +.plugins .update .second, +.plugins .update .row-actions, +.plugins .updated .second, +.plugins .updated .row-actions { + padding-bottom: 0; +} + +.plugins-php .widefat tfoot th, +.plugins-php .widefat tfoot td { + border-top-style: solid; + border-top-width: 1px; +} + +.plugins .plugin-update-tr .plugin-update { + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + overflow: hidden; /* clearfix */ + padding: 0; +} + +.plugins .plugin-update-tr .notice, +.plugins .plugin-update-tr div[class="update-message"] { /* back-compat for pre-4.6 */ + margin: 5px 20px 15px 40px; +} + +.plugins .notice p { + margin: 0.5em 0; +} + +.plugin-card .update-now:before { + color: #f56e28; + content: "\f463"; + display: inline-block; + font: normal 20px/1 dashicons; + margin: 3px 5px 0 -2px; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.plugin-card .updating-message:before { + content: "\f463"; + -webkit-animation: rotation 2s infinite linear; + animation: rotation 2s infinite linear; +} + +@-webkit-keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes rotation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.plugin-card .updated-message:before { + color: #79ba49; + content: "\f147"; +} + +.plugin-install-php h2 { + clear: both; +} + +.plugin-install-php h3 { + margin: 2.5em 0 8px; +} + +.plugin-install-php .wp-filter { + margin-bottom: 0; +} + +/* Plugin card table view */ +.plugin-group { + overflow: hidden; /* clearfix */ + margin-top: 1.5em; +} + +.plugin-group h3 { + margin-top: 0; +} + +.plugin-card { + float: left; + margin: 0 8px 16px; + width: 48.5%; + width: calc( 50% - 8px ); + background-color: #fff; + border: 1px solid #ddd; + box-sizing: border-box; +} + +.plugin-card:nth-child(odd) { + clear: both; + margin-left: 0; +} + +.plugin-card:nth-child(even) { + margin-right: 0; +} + +@media screen and ( min-width: 1600px ) { + .plugin-card { + width: 30%; + width: calc( 33.1% - 8px ); + } + + .plugin-card:nth-child(odd) { + clear: none; + margin-left: 8px; + } + + .plugin-card:nth-child(even) { + margin-right: 8px; + } + + .plugin-card:nth-child(3n+1) { + clear: both; + margin-left: 0; + } + + .plugin-card:nth-child(3n) { + margin-right: 0; + } +} + +.plugin-card-top { + position: relative; + padding: 20px 20px 10px; + min-height: 135px; +} + +div.action-links, +.plugin-action-buttons { + margin: 0; /* Override existing margins */ +} + +.plugin-card h3 { + margin: 0 0 12px; + font-size: 18px; + line-height: 1.3; +} + +.plugin-card .name, +.plugin-card .desc { + margin-left: 148px; /* icon + margin */ + margin-right: 120px; /* action links */ +} + +.plugin-card .action-links { + position: absolute; + top: 20px; + right: 20px; + width: 120px; +} + +.plugin-action-buttons { + clear: right; + float: right; + margin-left: 2em; + margin-bottom: 1em; + text-align: right; +} + +.plugin-action-buttons li { + margin-bottom: 10px; +} + +.plugin-card-bottom { + clear: both; + padding: 12px 20px; + background-color: #fafafa; + border-top: 1px solid #ddd; + overflow: hidden; +} + +.plugin-card-bottom .star-rating { + display: inline; +} + +.plugin-card-update-failed .update-now { + font-weight: 600; +} + +.plugin-card-update-failed .notice-error { + margin: 0; + padding-left: 16px; + box-shadow: 0 -1px 0 #ddd; +} + +.plugin-card-update-failed .plugin-card-bottom { + display: none; +} + +.plugin-card .column-rating { + line-height: 23px; +} + +.plugin-card .column-rating, +.plugin-card .column-updated { + margin-bottom: 4px; +} + +.plugin-card .column-rating, +.plugin-card .column-downloaded { + float: left; + clear: left; + max-width: 180px; +} + +.plugin-card .column-updated, +.plugin-card .column-compatibility { + text-align: right; + float: right; + clear: right; + width: 65%; + width: calc( 100% - 180px ); +} + +.plugin-card .column-compatibility span:before { + font: normal 20px/.5 dashicons; + speak: none; + display: inline-block; + padding: 0; + top: 4px; + left: -2px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #444; +} + +.plugin-card .compatibility-incompatible:before { + content: "\f158"; +} + +.plugin-card .compatibility-compatible:before { + content: "\f147"; +} + +.plugin-icon { + position: absolute; + top: 20px; + left: 20px; + width: 128px; + height: 128px; + margin: 0 20px 20px 0; +} + +.no-plugin-results { + color: #666; /* same as no themes and no media */ + font-size: 18px; + font-style: normal; + margin: 0; + padding: 100px 0 0; + text-align: center; +} + +/* ms */ +/* Background Color for Site Status */ +.wp-list-table .site-deleted, +.wp-list-table tr.site-deleted { + background: #ff8573; +} +.wp-list-table .site-spammed, +.wp-list-table tr.site-spammed { + background: #faafaa; +} +.wp-list-table .site-archived, +.wp-list-table tr.site-archived { + background: #ffebe8; +} +.wp-list-table .site-mature, +.wp-list-table tr.site-mature { + background: #fecac2; +} + +.sites.fixed .column-lastupdated, +.sites.fixed .column-registered { + width: 20%; +} + +.sites.fixed .column-users { + width: 80px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 1100px ) and ( min-width: 782px ), ( max-width: 480px ) { + .plugin-card .action-links { + position: static; + margin-left: 148px; + width: auto; + } + + .plugin-action-buttons { + float: none; + margin: 1em 0 0; + text-align: left; + } + + .plugin-action-buttons li { + display: inline-block; + vertical-align: middle; + } + + .plugin-action-buttons li .button { + margin-right: 20px; + } + + .plugin-card .name, + .plugin-card .desc { + margin-right: 0; + } + + .plugin-card .desc p:first-of-type { + margin-top: 0; + } + + .fixed .column-date { + width: 14%; + } +} + +@media screen and ( max-width: 782px ) { + /* WP List Table Options & Filters */ + .tablenav { + height: auto; + } + + .tablenav.top { + margin: 20px 0 5px 0; + } + + .tablenav.bottom { + position: relative; + margin-top: 15px; + } + + .tablenav br { + display: none; + } + + .tablenav br.clear { + display: block; + } + + .tablenav.top .actions, + .tablenav .view-switch { + display: none; + } + + .view-switch a { + width: 36px; + height: 36px; + line-height: 33px; + } + + /* Pagination */ + .tablenav.top .displaying-num { + display: none; + } + + .tablenav.bottom .displaying-num { + position: absolute; + right: 0; + top: 11px; + margin: 0; + font-size: 14px; + } + + .tablenav .tablenav-pages { + width: 100%; + height: auto; + 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 { + font-size: 16px; + } + + .tablenav-pages .pagination-links a, + .tablenav-pages-navspan { + padding: 9px 11px 12px; + font-size: 18px; + } + + .tablenav-pages-navspan { + height: 18px; + } + + .tablenav-pages .pagination-links .current-page { + padding: 8px 9px 9px; + font-size: 16px; + } + + /* WP List Table Adjustments: General */ + .form-wrap > p { + display: none; + } + + .comment-count { + font-size: 14px; + } + + .wp-list-table th.column-primary ~ th, + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td:not(.check-column) { + display: none; + } + + .wp-list-table thead th.column-primary { + width: 100%; + } + + /* Checkboxes need to show */ + .wp-list-table tr th.check-column { + display: table-cell; + width: 35px; + } + + .wp-list-table .column-primary .toggle-row { + display: block; + } + + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.check-column) { + position: relative; + clear: both; + display: block; + width: auto !important; /* needs to override some columns that are more specifically targeted */ + } + + .wp-list-table td.column-primary { + padding-right: 50px; /* space for toggle button */ + } + + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td:not(.check-column) { + padding: 3px 8px 3px 35%; + } + + .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary)::before { + position: absolute; + left: 10px; /* match padding of regular table cell */ + display: block; + overflow: hidden; + width: 32%; /* leave a little space for a gutter */ + content: attr(data-colname); + white-space: nowrap; + text-overflow: ellipsis; + } + + .wp-list-table .is-expanded td:not(.hidden) { + display: block !important; + overflow: hidden; /* clearfix */ + } + + /* Special cases */ + .widefat .num, + .column-posts { + text-align: left; + } + + #comments-form .fixed .column-author, + #commentsdiv .fixed .column-author { + display: none !important; + } + + .fixed .column-comment .comment-author { + display: block; + } + + #the-comment-list .is-expanded td { + box-shadow: none; + } + + #the-comment-list .is-expanded td:last-child { + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + } + + /* Show comment bubble as text instead */ + .post-com-count .screen-reader-text { + position: static; + -webkit-clip-path: none; + clip-path: none; + width: auto; + height: auto; + margin: 0; + } + + .column-response .post-com-count-no-comments:after, + .column-response .post-com-count-approved:after, + .column-comments .post-com-count-no-comments:after, + .column-comments .post-com-count-approved:after { + content: none; + } + + .column-response .post-com-count [aria-hidden="true"], + .column-comments .post-com-count [aria-hidden="true"] { + display: none; + } + + .column-response .post-com-count-wrapper, + .column-comments .post-com-count-wrapper { + white-space: normal; + } + + .column-response .post-com-count-wrapper > a, + .column-comments .post-com-count-wrapper > a { + display: block; + } + + .column-response .post-com-count-no-comments, + .column-response .post-com-count-approved, + .column-comments .post-com-count-no-comments, + .column-comments .post-com-count-approved { + margin-top: 0; + margin-right: 0.5em; + } + + .column-response .post-com-count-pending, + .column-comments .post-com-count-pending { + position: static; + height: auto; + min-width: 0; + padding: 0; + border: none; + border-radius: 0; + background: none; + color: #bb2a2a; + font-size: inherit; + line-height: inherit; + text-align: left; + } + + .column-response .post-com-count-pending:hover, + .column-comments .post-com-count-pending:hover { + color: #dc3232; + } + + .widefat thead td.check-column, + .widefat tfoot td.check-column { + padding-top: 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; + 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, + .inline-edit-row fieldset.inline-edit-date legend { + 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, + .inline-edit-row fieldset .timestamp-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; + } + + .inline-edit-row .inline-edit-or { + margin: 0 6px 0 0; + } + + #edithead .inside, + #commentsdiv #edithead .inside { + float: none; + text-align: left; + padding: 3px 5px; + } + + #commentsdiv #edithead .inside input, + #edithead .inside input { + width: 100%; + } + + #edithead label { + display: block; + } + + #bulk-titles div { + margin: 0.8em 0.3em; + } + + #bulk-titles div a { + height: 22px; + } + + /* Updates */ + #wpbody-content .updates-table .plugin-title { + width: auto; + white-space: normal; + } + + /* Links */ + .link-manager-php #posts-filter { + margin-top: 25px; + } + + .link-manager-php .tablenav.bottom { + overflow: hidden; + } + + /* List tables that don't toggle rows */ + .comments-box .toggle-row, + .wp-list-table.plugins .toggle-row { + display: none; + } + + /* Plugin/Theme Management */ + #wpbody-content .wp-list-table.plugins td { + display: block; + width: auto; + padding: 10px 9px; /* reset from other list tables that have a label at this width */ + } + + #wpbody-content .wp-list-table.plugins .column-description { + padding-top: 2px; + } + + #wpbody-content .wp-list-table.plugins .plugin-title, + #wpbody-content .wp-list-table.plugins .theme-title { + padding-right: 12px; + white-space: normal; + } + + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-top: 13px; + padding-bottom: 4px; + } + + .plugins #the-list tr > td:not(:last-child), + .plugins #the-list .update th, + .plugins #the-list .update td, + .wp-list-table.plugins #the-list .theme-title { + box-shadow: none; + border-top: none; + } + + .plugins #the-list tr td { + border-top: none; + } + + .plugins tbody { + padding: 1px 0 0; + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td.column-description, + .plugins .plugin-update-tr:before { + 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; + } + + /* mimic the checkbox th */ + .plugins .plugin-update-tr:before { + content: ""; + display: table-cell; + } + + .plugins .active.update + .plugin-update-tr:before { + border-left: 4px solid #d54e21; + background-color: #fef7f1; + } + + .plugins #the-list .plugin-update-tr .plugin-update { + border-left: none; + } + + .plugin-update-tr .update-message { + margin-left: 0; + } + + .plugins .active.update + .plugin-update-tr:before { + background-color: #f7fcfe; + border-left: 4px solid #00a0d2; + } + + .plugins .plugin-update-tr .update-message { + margin-left: 0; + } + + .wp-list-table.plugins .plugin-title strong, + .wp-list-table.plugins .theme-title strong { + font-size: 1.4em; + line-height: 1.5; + } + + /* 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 { + box-shadow: none; + } + + table.plugin-install #the-list tr { + display: block; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + } + + .plugin-card { + margin-left: 0; + margin-right: 0; + width: 100%; + } +} + +@media screen and ( max-width: 480px ) { + .tablenav-pages .current-page { + margin: 0; + } + + .tablenav-pages .tablenav-paging-text { + float: left; + width: 100%; + padding-top: 0.5em; + } +} diff --git a/wp-admin/css/list-tables.min.css b/wp-admin/css/list-tables.min.css new file mode 100644 index 0000000..821d57f --- /dev/null +++ b/wp-admin/css/list-tables.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.response-links{display:block;margin-bottom:1em}.response-links a{display:block}.response-links a.comments-edit-item-link{font-weight:600}.response-links a.comments-view-item-link{font-size:12px}.post-com-count-wrapper strong{font-weight:400}.comments-view-item-link{display:inline-block;clear:both}.column-comments .post-com-count-wrapper,.column-response .post-com-count-wrapper{white-space:nowrap;word-wrap:normal}.column-comments .post-com-count,.column-response .post-com-count{display:inline-block;vertical-align:top}.column-comments .post-com-count-approved,.column-comments .post-com-count-no-comments,.column-response .post-com-count-approved,.column-response .post-com-count-no-comments{margin-top:5px}.column-comments .comment-count-approved,.column-comments .comment-count-no-comments,.column-response .comment-count-approved,.column-response .comment-count-no-comments{box-sizing:border-box;display:block;padding:0 8px;min-width:24px;height:2em;border-radius:5px;background-color:#72777c;color:#fff;font-size:11px;line-height:21px;text-align:center}.ie8 .column-comments .comment-count-approved,.ie8 .column-comments .comment-count-no-comments,.ie8 .column-response .comment-count-approved,.ie8 .column-response .comment-count-no-comments{min-width:0}.column-comments .post-com-count-approved:after,.column-comments .post-com-count-no-comments:after,.column-response .post-com-count-approved:after,.column-response .post-com-count-no-comments:after{content:"";display:block;margin-left:8px;width:0;height:0;border-top:5px solid #72777c;border-right:5px solid transparent}.column-comments .post-com-count-approved:focus .comment-count-approved,.column-comments .post-com-count-approved:hover .comment-count-approved,.column-response .post-com-count-approved:focus .comment-count-approved,.column-response .post-com-count-approved:hover .comment-count-approved{background:#0073aa}.column-comments .post-com-count-approved:focus:after,.column-comments .post-com-count-approved:hover:after,.column-response .post-com-count-approved:focus:after,.column-response .post-com-count-approved:hover:after{border-top-color:#0073aa}.column-comments .post-com-count-pending,.column-response .post-com-count-pending{position:relative;left:-3px;padding:0 5px;min-width:7px;height:17px;border:2px solid #fff;border-radius:11px;background:#ca4a1f;color:#fff;font-size:9px;line-height:17px;text-align:center}.column-comments .post-com-count-no-pending,.column-response .post-com-count-no-pending{display:none}.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:#555d66}#replyrow td{padding:2px}#replysubmit{margin:0;padding:5px 7px 10px;overflow:hidden}#replysubmit .button{margin-right:5px}#replyrow.inline-edit-row fieldset.comment-reply{font-size:inherit;line-height:inherit}#replyrow legend{margin:0;padding:.2em 5px 0;font-size:13px;line-height:1.4;font-weight:600}#replyrow.inline-edit-row label{display:inline;vertical-align:baseline;line-height:inherit}#commentsdiv #edithead .inside,#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;box-shadow:none}#replyerror{border-color:#ddd;background-color:#f9f9f9}.commentlist .avatar{vertical-align:text-top}#the-comment-list div.undo,#the-comment-list tr.undo{background-color:#f5f5f5}#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{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{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-posts{width:74px}.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:5.5em;padding:8px 0;text-align:left}.fixed .column-comments .vers{padding-left:3px}td.column-title strong,td.plugin-title strong{display:block;margin-bottom:.2em;font-size:14px}td.column-title p,td.plugin-title p{margin:6px 0}table.media .column-title .media-icon{float:left;min-height:60px;margin:0 9px 0 0}table.media .column-title .media-icon img{max-width:60px;height:auto;vertical-align:top}table.media .column-title .has-media-icon~.row-actions{margin-left:70px}table.media .column-title .filename{margin-bottom:.2em}.wp-list-table a{transition:none}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:none!important;box-shadow:none}#comments-form .fixed .column-author{width:20%}#comments-form .fixed .column-date{width:14%}#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}#commentsdiv .comments-box thead td,#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 #edithead .inside input{width:160px}.sorting-indicator{display:block;visibility:hidden;width:10px;height:4px;margin-top:8px;margin-left:7px}.sorting-indicator:before{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 a:focus span.sorting-indicator:before,th.desc:hover span.sorting-indicator:before,th.sorted.asc .sorting-indicator:before{content:"\f142"}th.asc a:focus span.sorting-indicator:before,th.asc:hover span.sorting-indicator:before,th.sorted.desc .sorting-indicator:before{content:"\f140"}.wp-list-table .toggle-row{position:absolute;right:8px;top:10px;display:none;padding:0;width:40px;height:40px;border:none;outline:0;background:0 0}.wp-list-table .toggle-row:hover{cursor:pointer}.wp-list-table .toggle-row:focus:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .wp-list-table .toggle-row:focus:before{outline:#5b9dd9 solid 1px}.wp-list-table .toggle-row:active{box-shadow:none}.wp-list-table .toggle-row:before{position:absolute;top:-5px;left:10px;border-radius:50%;display:block;padding:1px 2px 1px 0;color:#444;content:"\f140";font:400 20px/1 dashicons;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.wp-list-table .is-expanded .toggle-row:before{content:"\f142"}tr.wp-locked .locked-indicator{margin-left:6px;height:20px;width:16px}tr.wp-locked .locked-indicator-icon:before{color:#82878c;content:"\f160";display:inline-block;font:400 20px/1 dashicons;speak:none;vertical-align:middle;-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:4px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{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:8px}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:left;cursor:pointer}th.asc a:focus span.sorting-indicator,th.asc:hover span.sorting-indicator,th.desc a:focus span.sorting-indicator,th.desc:hover span.sorting-indicator,th.sorted .sorting-indicator{visibility:visible}.tablenav-pages a,.tablenav-pages-navspan{font-weight:600;padding:0 2px}.tablenav-pages .current-page{margin:0 2px 0 0;padding-bottom:5px;font-size:13px;text-align:center}.tablenav .total-pages{margin-right:2px}.tablenav #table-paging{margin-left:2px}.tablenav a.button,.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;height:28px;margin-top:3px;cursor:default;color:#555}.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,.tablenav-pages-navspan{display:inline-block;min-width:17px;border:1px solid #ccc;padding:3px 5px 7px;background:#e5e5e5;font-size:16px;line-height:1;font-weight:400;text-align:center}.tablenav-pages-navspan{height:16px;border-color:#ddd;background:#f7f7f7;color:#a0a5aa}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover{border-color:#5b9dd9;color:#fff;background:#00a0d2;box-shadow:none;outline:0}.tablenav .displaying-num{margin-right:7px}.tablenav .one-page .displaying-num{display:inline-block;margin-top:5px;margin-right:0}.tablenav .actions{overflow:hidden;padding:2px 8px 0 0}.wp-filter .actions{display:inline-block;vertical-align:middle}.tablenav .delete{margin-right:20px}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0073aa}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#00a0d2}.tablenav .view-switch{float:right;margin:0 5px;padding-top:3px}.wp-filter .view-switch{display:inline-block;vertical-align:middle;padding:12px 0;margin:0 8px 0 2px}.media-toolbar.wp-filter .view-switch{margin:0 12px 0 2px}.view-switch a{float:left;width:28px;height:28px;text-align:center;line-height:24px;text-decoration:none}.view-switch a:before{color:#b4b9be;display:inline-block;font:400 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch a:focus:before,.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0073aa}.view-switch .view-list:before{content:"\f163"}.view-switch .view-excerpt:before{content:"\f164"}.view-switch .view-grid:before{content:"\f509"}.filter{float:left;margin:-5px 0 0 10px}.filter .subsubsub{margin-left:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter .wp-filter{margin-bottom:0}#posts-filter fieldset{float:left;margin:0 1.5ex 1em 0;padding:0}#posts-filter fieldset legend{padding:0 0 .2em 1px}.row-actions,.row-actions-visible{padding:2px 0 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:left;margin-right:10px;margin-top:1px}.row-actions{color:#ddd;font-size:13px;position:relative;left:-9999em}.plugins,.plugins td,.plugins th,.row-actions .network_active,.row-actions .network_only{color:#000}.rtl .row-actions a{display:inline-block}.comment-item:hover .row-actions,.mobile .row-actions,.no-js .row-actions,.row-actions.visible,tr:hover .row-actions{position:static}#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-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;line-height:2.5}.inline-edit-row .submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row .notice-error{margin-top:1em}.inline-edit-row .notice-error .error{margin:.5em 0;padding:2px}#the-list .inline-edit-row .inline-edit-legend{margin:0;padding:.2em .5em 0;line-height:2.5;font-weight:600}#the-list #bulk-edit.inline-edit-row .inline-edit-legend{padding:.2em .5em}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{margin:0;padding:0;font-style:italic}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0;line-height:2.5}.inline-edit-row fieldset.inline-edit-date label{display:inline-block;margin:0;line-height:1.5;vertical-align:baseline}.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,.inline-edit-row fieldset.inline-edit-date legend{display:block;float:left;width:6em;line-height:2.5}#posts-filter fieldset.inline-edit-date legend{padding:0}.inline-edit-row fieldset.inline-edit-date select{margin:1px;line-height:28px}.inline-edit-row fieldset .timestamp-wrap,.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-left:6em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-right:.5em}.inline-edit-row .inline-edit-or{margin:.2em 6px .2em 0;line-height:2.5}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:middle}.inline-edit-row fieldset label textarea{width:100%;height:4em;vertical-align:top}#bulk-titles,ul.cat-checklist{height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-row .inline-edit-legend{text-transform:uppercase}.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.3em}.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{margin:0;background-color:#fff}#bulk-titles{display:block;margin:0 0 5px;line-height:140%}.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 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}.updates-table .plugin-title p{margin-top:0}.plugins .inactive th.check-column,.plugins tfoot td.check-column,.plugins thead td.check-column{padding-left:6px}.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-install #the-list td,.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th,.upgrade .plugins td,.upgrade .plugins th{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);box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins .update td,.plugins .update th,.plugins .updated td,.plugins .updated th,.plugins tr.active+tr.inactive.update td,.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.updated td,.plugins tr.active+tr.inactive.updated th,.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{box-shadow:none}.plugin-update-tr.active td,.plugins .active th.check-column{border-left:4px solid #00a0d2}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-right:12px;white-space:nowrap}.plugins .plugin-title .dashicons,.plugins .plugin-title img{float:left;padding:0 10px 0 0;width:64px;height:64px}.plugins .plugin-title .dashicons:before{padding:2px;background-color:#eee;box-shadow:inset 0 0 10px rgba(160,165,170,.15);font-size:60px;color:#B4B9BE}#update-themes-table .plugin-title .dashicons,#update-themes-table .plugin-title img{width:85px}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .row-actions,.plugins .second{padding:0 0 5px}.plugins .update .row-actions,.plugins .update .second,.plugins .updated .row-actions,.plugins .updated .second{padding-bottom:0}.plugins-php .widefat tfoot td,.plugins-php .widefat tfoot th{border-top-style:solid;border-top-width:1px}.plugins .plugin-update-tr .plugin-update{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;padding:0}.plugins .plugin-update-tr .notice,.plugins .plugin-update-tr div[class=update-message]{margin:5px 20px 15px 40px}.plugins .notice p{margin:.5em 0}.plugin-card .update-now:before{color:#f56e28;content:"\f463";display:inline-block;font:400 20px/1 dashicons;margin:3px 5px 0 -2px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugin-card .updating-message:before{content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.plugin-card .updated-message:before{color:#79ba49;content:"\f147"}.plugin-install-php h2{clear:both}.plugin-install-php h3{margin:2.5em 0 8px}.plugin-install-php .wp-filter{margin-bottom:0}.plugin-group{overflow:hidden;margin-top:1.5em}.plugin-group h3{margin-top:0}.plugin-card{float:left;margin:0 8px 16px;width:48.5%;width:calc(50% - 8px);background-color:#fff;border:1px solid #ddd;box-sizing:border-box}.plugin-card:nth-child(odd){clear:both;margin-left:0}.plugin-card:nth-child(even){margin-right:0}@media screen and (min-width:1600px){.plugin-card{width:30%;width:calc(33.1% - 8px)}.plugin-card:nth-child(odd){clear:none;margin-left:8px}.plugin-card:nth-child(even){margin-right:8px}.plugin-card:nth-child(3n+1){clear:both;margin-left:0}.plugin-card:nth-child(3n){margin-right:0}}.plugin-card-top{position:relative;padding:20px 20px 10px;min-height:135px}.plugin-action-buttons,div.action-links{margin:0}.plugin-card h3{margin:0 0 12px;font-size:18px;line-height:1.3}.plugin-card .desc,.plugin-card .name{margin-left:148px;margin-right:120px}.plugin-card .action-links{position:absolute;top:20px;right:20px;width:120px}.plugin-action-buttons{clear:right;float:right;margin-left:2em;margin-bottom:1em;text-align:right}.plugin-action-buttons li{margin-bottom:10px}.plugin-card-bottom{clear:both;padding:12px 20px;background-color:#fafafa;border-top:1px solid #ddd;overflow:hidden}.plugin-card-bottom .star-rating{display:inline}.plugin-card-update-failed .update-now{font-weight:600}.plugin-card-update-failed .notice-error{margin:0;padding-left:16px;box-shadow:0 -1px 0 #ddd}.plugin-card-update-failed .plugin-card-bottom{display:none}.plugin-card .column-rating{line-height:23px}.plugin-card .column-rating,.plugin-card .column-updated{margin-bottom:4px}.plugin-card .column-downloaded,.plugin-card .column-rating{float:left;clear:left;max-width:180px}.plugin-card .column-compatibility,.plugin-card .column-updated{text-align:right;float:right;clear:right;width:65%;width:calc(100% - 180px)}.plugin-card .column-compatibility span:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-2px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.plugin-card .compatibility-incompatible:before{content:"\f158"}.plugin-card .compatibility-compatible:before{content:"\f147"}.plugin-icon{position:absolute;top:20px;left:20px;width:128px;height:128px;margin:0 20px 20px 0}.no-plugin-results{color:#666;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.wp-list-table .site-deleted,.wp-list-table tr.site-deleted{background:#ff8573}.wp-list-table .site-spammed,.wp-list-table tr.site-spammed{background:#faafaa}.wp-list-table .site-archived,.wp-list-table tr.site-archived{background:#ffebe8}.wp-list-table .site-mature,.wp-list-table tr.site-mature{background:#fecac2}.sites.fixed .column-lastupdated,.sites.fixed .column-registered{width:20%}.sites.fixed .column-users{width:80px}@media screen and (max-width:1100px) and (min-width:782px),(max-width:480px){.plugin-card .action-links{position:static;margin-left:148px;width:auto}.plugin-action-buttons{float:none;margin:1em 0 0;text-align:left}.plugin-action-buttons li{display:inline-block;vertical-align:middle}.plugin-action-buttons li .button{margin-right:20px}.plugin-card .desc,.plugin-card .name{margin-right:0}.plugin-card .desc p:first-of-type{margin-top:0}.fixed .column-date{width:14%}}@media screen and (max-width:782px){.plugins #the-list tr td,.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:none}.tablenav{height:auto}.tablenav.top{margin:20px 0 5px}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}.form-wrap>p,.tablenav .view-switch,.tablenav.top .actions,.tablenav.top .displaying-num,.tablenav.top .tablenav-pages.one-page{display:none}.view-switch a{width:36px;height:36px;line-height:33px}.tablenav.bottom .displaying-num{position:absolute;right:0;top:11px;margin:0;font-size:14px}.tablenav .tablenav-pages{width:100%;height:auto;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links{font-size:16px}.tablenav-pages .pagination-links a,.tablenav-pages-navspan{padding:9px 11px 12px;font-size:18px}.tablenav-pages-navspan{height:18px}.tablenav-pages .pagination-links .current-page{padding:8px 9px 9px;font-size:16px}.comment-count{font-size:14px}.wp-list-table th.column-primary~th,.wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary~td:not(.check-column){display:none}.wp-list-table thead th.column-primary{width:100%}.wp-list-table tr th.check-column{display:table-cell;width:35px}.wp-list-table .column-primary .toggle-row{display:block}.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.check-column){position:relative;clear:both;display:block;width:auto!important}.wp-list-table td.column-primary{padding-right:50px}.wp-list-table tr:not(.inline-edit-row):not(.no-items) td.column-primary~td:not(.check-column){padding:3px 8px 3px 35%}.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary)::before{position:absolute;left:10px;display:block;overflow:hidden;width:32%;content:attr(data-colname);white-space:nowrap;text-overflow:ellipsis}.wp-list-table .is-expanded td:not(.hidden){display:block!important;overflow:hidden}.column-posts,.widefat .num{text-align:left}#comments-form .fixed .column-author,#commentsdiv .fixed .column-author{display:none!important}.fixed .column-comment .comment-author{display:block}#the-comment-list .is-expanded td{box-shadow:none}#the-comment-list .is-expanded td:last-child{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.post-com-count .screen-reader-text{position:static;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}.column-comments .post-com-count-approved:after,.column-comments .post-com-count-no-comments:after,.column-response .post-com-count-approved:after,.column-response .post-com-count-no-comments:after{content:none}.column-comments .post-com-count [aria-hidden=true],.column-response .post-com-count [aria-hidden=true]{display:none}#edithead label,.column-comments .post-com-count-wrapper>a,.column-response .post-com-count-wrapper>a{display:block}.column-comments .post-com-count-wrapper,.column-response .post-com-count-wrapper{white-space:normal}.column-comments .post-com-count-approved,.column-comments .post-com-count-no-comments,.column-response .post-com-count-approved,.column-response .post-com-count-no-comments{margin-top:0;margin-right:.5em}.column-comments .post-com-count-pending,.column-response .post-com-count-pending{position:static;height:auto;min-width:0;padding:0;border:none;border-radius:0;background:0 0;color:#bb2a2a;font-size:inherit;line-height:inherit;text-align:left}.column-comments .post-com-count-pending:hover,.column-response .post-com-count-pending:hover{color:#dc3232}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:10px}.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;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,.inline-edit-row fieldset.inline-edit-date legend{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 .timestamp-wrap,.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}.inline-edit-row .inline-edit-or{margin:0 6px 0 0}#commentsdiv #edithead .inside,#edithead .inside{float:none;text-align:left;padding:3px 5px}#commentsdiv #edithead .inside input,#edithead .inside input{width:100%}#bulk-titles div{margin:.8em .3em}.plugin-card,.plugin-update-tr .update-message,.plugins .plugin-update-tr .update-message{margin-left:0}#bulk-titles div a{height:22px}#wpbody-content .updates-table .plugin-title{width:auto;white-space:normal}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.comments-box .toggle-row,.wp-list-table.plugins .toggle-row{display:none}#wpbody-content .wp-list-table.plugins td{display:block;width:auto;padding:10px 9px}#wpbody-content .wp-list-table.plugins .column-description{padding-top:2px}#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .theme-title{padding-right:12px;white-space:normal}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins #the-list .update td,.plugins #the-list .update th,.plugins #the-list tr>td:not(:last-child),.wp-list-table.plugins #the-list .theme-title{box-shadow:none;border-top:none}.plugins tbody{padding:1px 0 0}.plugins .plugin-update-tr:before,.plugins tr.active+tr.inactive td.column-description,.plugins tr.active+tr.inactive th.check-column{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .plugin-update-tr:before{content:"";display:table-cell}.plugins #the-list .plugin-update-tr .plugin-update{border-left:none}.plugins .active.update+.plugin-update-tr:before{background-color:#f7fcfe;border-left:4px solid #00a0d2}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.5}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{box-shadow:none}table.plugin-install #the-list tr{display:block;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-card{margin-right:0;width:100%}}@media screen and (max-width:480px){.tablenav-pages .current-page{margin:0}.tablenav-pages .tablenav-paging-text{float:left;width:100%;padding-top:.5em}} \ No newline at end of file diff --git a/wp-admin/css/login-rtl.css b/wp-admin/css/login-rtl.css new file mode 100644 index 0000000..7c7d85b --- /dev/null +++ b/wp-admin/css/login-rtl.css @@ -0,0 +1,283 @@ +@import url(forms-rtl.css); +@import url(l10n-rtl.css); + +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +body { + background: #f1f1f1; + min-width: 0; + color: #444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 13px; + line-height: 1.4em; +} + +a { + color: #0073aa; + transition-property: border, background, color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} + +a { + outline: 0; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus { + color: #124964; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +p { + line-height: 1.5; +} + +.login .message, +.login .success, +.login #login_error { + border-right: 4px solid #00a0d2; + padding: 12px; + margin-right: 0; + margin-bottom: 20px; + background-color: #fff; + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.login .success { + border-right-color: #46b450; +} + +.login #login_error { + border-right-color: #dc3232; +} + +#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 .password-input-wrapper { + display: table; +} + +.login .input.password-input { + display: table-cell; + margin: 0; +} + +.login .pw-weak { + margin-bottom: 15px; +} + +.login .button.button-secondary { + display: table-cell; + border-radius: 0; + vertical-align: middle; +} + +.login form { + margin-top: 20px; + margin-right: 0; + padding: 26px 24px 46px; + font-weight: 400; + overflow: hidden; + background: #fff; + box-shadow: 0 1px 3px rgba(0,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: #72777c; + 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); + background-size: 84px; + background-position: center top; + background-repeat: no-repeat; + color: #444; + height: 84px; + font-size: 20px; + font-weight: 400; + line-height: 1.3em; + margin: 0 auto 25px; + padding: 0; + text-decoration: none; + width: 84px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#login { + width: 320px; + padding: 8% 0 0; + margin: auto; +} + +.login #nav, +.login #backtoblog { + font-size: 13px; + padding: 0 24px 0; +} + +.login #nav { + margin: 24px 0 0 0; +} + +#backtoblog { + margin: 16px 0; +} + +.login #nav a, +.login #backtoblog a { + text-decoration: none; + color: #555d66; +} + +.login #nav a:hover, +.login #backtoblog a:hover, +.login h1 a:hover { + color: #00a0d2; +} + +.login #nav a:focus, +.login #backtoblog a:focus, +.login h1 a:focus { + color: #124964; +} + +.login .privacy-policy-page-link { + text-align: center; + width: 100%; + margin: 5em 0 2em; +} + +.login form .input, +.login input[type="text"] { + font-size: 24px; + 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-action-rp input[type="text"] { + box-shadow: none; + margin: 0; +} + +.login #pass-strength-result { + font-weight: 600; + margin: -1px 0 16px 5px; + padding: 6px 5px; + text-align: center; + width: 100%; +} + +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-height: 550px ) { + #login { + padding: 20px 0; + } +} + +@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; + } +} diff --git a/wp-admin/css/login-rtl.min.css b/wp-admin/css/login-rtl.min.css new file mode 100644 index 0000000..1106a8a --- /dev/null +++ b/wp-admin/css/login-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}.login h1 a,form p.submit a.cancel:hover{text-decoration:none}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;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;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],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]{border-radius:50%;margin-left:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]: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}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{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;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}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.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-right:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 -29px 0 6px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.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;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border: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+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;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%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #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}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 1px 5px 5px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:left center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:right;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{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:#23282d;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 .td-full,.form-table th.th-full{width:auto;padding:20px 0 20px 10px;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 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}table.form-table td .updated p{font-size:13px;margin:.3em 0}#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}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.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:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.login form,.login h1 a{overflow:hidden;font-weight:400}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-right:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(-20deg) rotate(-6deg);transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(-20deg) rotate(-9deg);transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-right:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 7px 6px 8px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:right;margin-left:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:left}.login #pass-strength-result,.login h1,.privacy_requests .column-type{text-align:center}.request-filesystem-credentials-dialog label[for=ftp]{margin-left:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-left:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-right:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-right-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-right-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px -2px 0 5px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{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}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.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=text],.form-table td input[type=password],.form-table td input[type=email],.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;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:left;margin:-30px 0 0 3px}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;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{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-right:0}.form-table.permalink-structure td code{margin-right:32px}.form-table.permalink-structure td input[type=text]{margin-right:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-left:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;left:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-right:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-right:5px}}.locale-he-il em,.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}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;right:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-left:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-right:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.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 .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:0}}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;min-width:0;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}p{line-height:1.5}.login #login_error,.login .message,.login .success{border-right:4px solid #00a0d2;padding:12px;margin-right:0;margin-bottom:20px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login .success{border-right-color:#46b450}.login #login_error{border-right-color:#dc3232}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login .password-input-wrapper{display:table}.login .input.password-input{display:table-cell;margin:0}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{display:table-cell;border-radius:0;vertical-align:middle}.login form{margin-top:20px;margin-right:0;padding:26px 24px 46px;background:#fff;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:#72777c;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:0 auto 25px;padding:0;width:84px;text-indent:-9999px;outline:0;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#555d66}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#00a0d2}.login #backtoblog a:focus,.login #nav a:focus,.login h1 a:focus{color:#124964}.login .privacy-policy-page-link{text-align:center;width:100%;margin:5em 0 2em}.login form .input,.login input[type=text]{font-size:24px;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-action-rp input[type=text]{box-shadow:none;margin:0}.login #pass-strength-result{font-weight:600;margin:-1px 0 16px 5px;padding:6px 5px;width:100%}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-height:550px){#login{padding:20px 0}}@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..686be7d --- /dev/null +++ b/wp-admin/css/login.css @@ -0,0 +1,283 @@ +@import url(forms.css); +@import url(l10n.css); + +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +body { + background: #f1f1f1; + min-width: 0; + color: #444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 13px; + line-height: 1.4em; +} + +a { + color: #0073aa; + transition-property: border, background, color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} + +a { + outline: 0; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus { + color: #124964; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +p { + line-height: 1.5; +} + +.login .message, +.login .success, +.login #login_error { + border-left: 4px solid #00a0d2; + padding: 12px; + margin-left: 0; + margin-bottom: 20px; + background-color: #fff; + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.login .success { + border-left-color: #46b450; +} + +.login #login_error { + border-left-color: #dc3232; +} + +#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 .password-input-wrapper { + display: table; +} + +.login .input.password-input { + display: table-cell; + margin: 0; +} + +.login .pw-weak { + margin-bottom: 15px; +} + +.login .button.button-secondary { + display: table-cell; + border-radius: 0; + vertical-align: middle; +} + +.login form { + margin-top: 20px; + margin-left: 0; + padding: 26px 24px 46px; + font-weight: 400; + overflow: hidden; + background: #fff; + box-shadow: 0 1px 3px rgba(0,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: #72777c; + 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); + background-size: 84px; + background-position: center top; + background-repeat: no-repeat; + color: #444; + height: 84px; + font-size: 20px; + font-weight: 400; + line-height: 1.3em; + margin: 0 auto 25px; + padding: 0; + text-decoration: none; + width: 84px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#login { + width: 320px; + padding: 8% 0 0; + margin: auto; +} + +.login #nav, +.login #backtoblog { + font-size: 13px; + padding: 0 24px 0; +} + +.login #nav { + margin: 24px 0 0 0; +} + +#backtoblog { + margin: 16px 0; +} + +.login #nav a, +.login #backtoblog a { + text-decoration: none; + color: #555d66; +} + +.login #nav a:hover, +.login #backtoblog a:hover, +.login h1 a:hover { + color: #00a0d2; +} + +.login #nav a:focus, +.login #backtoblog a:focus, +.login h1 a:focus { + color: #124964; +} + +.login .privacy-policy-page-link { + text-align: center; + width: 100%; + margin: 5em 0 2em; +} + +.login form .input, +.login input[type="text"] { + font-size: 24px; + 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-action-rp input[type="text"] { + box-shadow: none; + margin: 0; +} + +.login #pass-strength-result { + font-weight: 600; + margin: -1px 5px 16px 0; + padding: 6px 5px; + text-align: center; + width: 100%; +} + +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-height: 550px ) { + #login { + padding: 20px 0; + } +} + +@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; + } +} diff --git a/wp-admin/css/login.min.css b/wp-admin/css/login.min.css new file mode 100644 index 0000000..e672055 --- /dev/null +++ b/wp-admin/css/login.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}.login h1 a,form p.submit a.cancel:hover{text-decoration:none}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;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;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],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]{border-radius:50%;margin-right:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]: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}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{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;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}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.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-left:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 6px 0 -29px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.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;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border: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+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;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%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #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}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 5px 5px 1px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:right center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:left;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{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:#23282d;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 .td-full,.form-table th.th-full{width:auto;padding:20px 10px 20px 0;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 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}table.form-table td .updated p{font-size:13px;margin:.3em 0}#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}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.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:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.login form,.login h1 a{overflow:hidden;font-weight:400}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-left:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-left:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 8px 6px 7px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:left;margin-right:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:right}.login #pass-strength-result,.login h1,.privacy_requests .column-type{text-align:center}.request-filesystem-credentials-dialog label[for=ftp]{margin-right:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-right:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-left:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-left-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-left-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px 5px 0 -2px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{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}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.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=text],.form-table td input[type=password],.form-table td input[type=email],.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;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:right;margin:-30px 3px 0 0}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;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{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-left:0}.form-table.permalink-structure td code{margin-left:32px}.form-table.permalink-structure td input[type=text]{margin-left:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-right:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;right:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-left:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-left:5px}}.locale-he-il em,.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}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;left:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-right:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-left:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.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 .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:0}}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;min-width:0;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}p{line-height:1.5}.login #login_error,.login .message,.login .success{border-left:4px solid #00a0d2;padding:12px;margin-left:0;margin-bottom:20px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login .success{border-left-color:#46b450}.login #login_error{border-left-color:#dc3232}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login .password-input-wrapper{display:table}.login .input.password-input{display:table-cell;margin:0}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{display:table-cell;border-radius:0;vertical-align:middle}.login form{margin-top:20px;margin-left:0;padding:26px 24px 46px;background:#fff;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:#72777c;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:0 auto 25px;padding:0;width:84px;text-indent:-9999px;outline:0;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#555d66}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#00a0d2}.login #backtoblog a:focus,.login #nav a:focus,.login h1 a:focus{color:#124964}.login .privacy-policy-page-link{text-align:center;width:100%;margin:5em 0 2em}.login form .input,.login input[type=text]{font-size:24px;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-action-rp input[type=text]{box-shadow:none;margin:0}.login #pass-strength-result{font-weight:600;margin:-1px 5px 16px 0;padding:6px 5px;width:100%}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-height:550px){#login{padding:20px 0}}@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..eb7a65d --- /dev/null +++ b/wp-admin/css/media-rtl.css @@ -0,0 +1,1270 @@ +/*------------------------------------------------------------------------------ + 14.0 - Media Screen +------------------------------------------------------------------------------*/ + +.media-item .describe { + border-collapse: collapse; + width: 100%; + border-top: 1px solid #ddd; + 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; + margin-left: 10px; +} + +.media-item .describe-toggle-off, +.media-item.open .describe-toggle-on { + display: none; +} + +.media-item.open .describe-toggle-off { + display: block; +} + +.media-upload-form .media-item { + min-height: 36px; + margin-bottom: 1px; + position: relative; + width: 100%; + background: #fff; +} + +.media-upload-form .media-item, +.media-upload-form .media-item .error { + box-shadow: 0 1px 0 #ddd; +} + +#media-items:empty { + border: 0 none; +} + +.media-item .filename { + line-height: 36px; + overflow: hidden; + margin-right: 6px; +} + +.media-item .pinkynail { + float: right; + margin: 2px 3px 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 6px; + width: 200px; + line-height: 2em; + padding: 0; + overflow: hidden; + border-radius: 22px; + background: #ddd; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); +} + +.media-item .bar { + z-index: 9; + width: 0; + height: 100%; + margin-top: -22px; + border-radius: 22px; + background-color: #0073aa; + 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: 0 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, +.media-upload-form .media-item .error { + width: auto; + margin: 0 0 1px 0; +} + +.media-upload-form .media-item .error { + padding: 10px 14px 10px 0; +} + +.media-item .error-div a.dismiss { + display: block; + float: left; + margin: 0 15px 0 10px; +} + +/*------------------------------------------------------------------------------ + 14.1 - Media Library +------------------------------------------------------------------------------*/ + +.find-box { + background-color: #fff; + 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 #ddd; + 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%; + box-sizing: border-box; +} + +.find-box-search { + padding-bottom: 16px; +} + +.find-box-search .spinner { + float: none; + right: 105px; + position: absolute; +} + +.find-box-search, +#find-posts-response { + position: relative; /* RTL fix, #WP28010 */ +} + +#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; + border: none; + padding: 0; + position: absolute; + top: 0; + left: 0; + cursor: pointer; + text-align: center; + background: none; + color: #666; +} + +#find-posts-close:hover, +#find-posts-close:focus { + color: #00a0d2; +} + +#find-posts-close:focus { + outline: none; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +#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 #ddd; + 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; +} + +.drag-drop #drag-drop-area { + border: 4px dashed #b4b9be; + height: 200px; +} + +.drag-drop .drag-drop-inside { + margin: 70px auto 0; + width: 250px; +} + +.drag-drop-inside p { + color: #a0a5aa; + 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; +} + +/** + * Media Library grid view + */ + +.media-frame.mode-grid, +.media-frame.mode-grid .media-frame-content, +.media-frame.mode-grid .attachments-browser .attachments, +.media-frame.mode-grid .uploader-inline-content { + position: static; +} + +/* Regions we don't use at all */ +.media-frame.mode-grid .media-frame-title, +.media-frame.mode-grid .media-frame-router, +.media-frame.mode-grid .media-frame-menu { + display: none; +} + +.media-frame.mode-grid .media-frame-content { + background-color: transparent; + border: none; +} + +.upload-php .mode-grid .media-sidebar { + position: relative; + width: auto; + margin-top: 12px; + padding: 0 16px; + border-right: 4px solid #dd3d36; + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); + background-color: #fff; +} + +.upload-php .mode-grid .hide-sidebar .media-sidebar { + display: none; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status { + border-bottom: none; + padding-bottom: 0; + max-width: 100%; +} + +.upload-php .mode-grid .media-sidebar .upload-error { + margin: 12px 0; + padding: 4px 0 0; + border: none; + box-shadow: none; + background: none; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors { + top: -10px; + left: -14px; + padding: 10px; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before { + content: "\f153"; + display: block; + font: normal 16px/1 dashicons; + color: #72777c; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before, +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before { + color: #c00; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3, /* Back-compat for pre-4.4 */ +.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h2 { + display: none; +} + +.media-frame.mode-grid .uploader-inline { + position: relative; + top: auto; + left: auto; + right: auto; + bottom: auto; + padding-top: 0; + margin-top: 20px; + border: 4px dashed #b4b9be; +} + +.media-frame.mode-select .attachments-browser.fixed .attachments { + position: relative; + top: 94px; /* prevent jumping up when the toolbar becomes fixed */ + padding-bottom: 94px; /* offset for above so the bottom doesn't get cut off */ +} + +.media-frame.mode-grid .attachment:focus, +.media-frame.mode-grid .selected.attachment:focus, +.media-frame.mode-grid .attachment.details:focus { + box-shadow: + inset 0 0 2px 3px #f1f1f1, + inset 0 0 0 7px #5b9dd9; + outline: none; +} + +.media-frame.mode-grid .selected.attachment { + box-shadow: + inset 0 0 0 5px #f1f1f1, + inset 0 0 0 7px #ccc; +} + +.media-frame.mode-grid .attachment.details { + box-shadow: + inset 0 0 0 3px #f1f1f1, + inset 0 0 0 7px #1e8cbe; +} + +.media-frame.mode-grid.mode-select .attachment .thumbnail { + opacity: 0.65; +} + +.media-frame.mode-select .attachment.selected .thumbnail { + opacity: 1; +} + +.media-frame.mode-grid .media-toolbar { + margin-bottom: 15px; + height: auto; +} + +.media-frame.mode-grid .media-toolbar select { + margin: 0 0 0 10px; + font-size: 14px; +} + +.media-frame.mode-grid.mode-edit .media-toolbar-secondary > .select-mode-toggle-button { + margin: 0 0 0 8px; + vertical-align: middle; +} + +.media-frame.mode-grid .attachments-browser .bulk-select { + display: inline-block; + margin: 0 0 0 10px; +} + +.media-frame.mode-grid .search { + margin-top: 0; +} + +.media-frame.mode-grid .spinner { + margin-top: 16px; +} + +.attachments-browser .media-toolbar-secondary > .media-button { + margin-left: 10px; +} + +.media-frame.mode-select .attachments-browser.fixed .media-toolbar { + position: fixed; + top: 32px; + right: auto; + left: 20px; + margin-top: 0; +} + +.media-frame.mode-grid .attachments-browser { + padding: 0; +} + +.media-frame.mode-grid .attachments-browser .attachments { + padding: 2px; +} + +.media-frame.mode-grid .attachments-browser .no-media { + color: #666; /* same as no plugins and no themes */ + font-size: 18px; + font-style: normal; + margin: 0; + padding: 100px 0 0; + text-align: center; +} + +/** + * Attachment details modal + */ + +.edit-attachment-frame { + display: block; + height: 100%; + width: 100%; +} + +.edit-attachment-frame .edit-media-header { + overflow: hidden; +} + +.upload-php .media-modal-close .media-modal-icon:before { + content: "\f335"; + font-size: 22px; +} + +.upload-php .media-modal-close, +.edit-attachment-frame .edit-media-header .left, +.edit-attachment-frame .edit-media-header .right { + cursor: pointer; + color: #72777c; + background-color: transparent; + height: 50px; + width: 50px; + padding: 0; + position: absolute; + text-align: center; + border: 0; + border-right: 1px solid #ddd; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.upload-php .media-modal-close { + top: 0; + left: 0; +} + +.edit-attachment-frame .edit-media-header .left { + left: 102px; +} + +.edit-attachment-frame .edit-media-header .right { + left: 51px; +} + +.edit-attachment-frame .media-frame-title { + right: 0; + left: 150px; /* leave space for prev/next/close */ +} + +.edit-attachment-frame .edit-media-header .right:before, +.edit-attachment-frame .edit-media-header .left:before { + font: normal 20px/50px dashicons !important; + display: inline; + font-weight: 300; +} + +.upload-php .media-modal-close:hover, +.upload-php .media-modal-close:focus, +.edit-attachment-frame .edit-media-header .left:hover, +.edit-attachment-frame .edit-media-header .right:hover, +.edit-attachment-frame .edit-media-header .left:focus, +.edit-attachment-frame .edit-media-header .right:focus { + background: #ddd; + border-color: #ccc; + color: #000; + outline: none; + box-shadow: none; +} + +.upload-php .media-modal-close:focus .media-modal-icon:before, +.upload-php .media-modal-close:hover .media-modal-icon:before { + color: #000; +} + +.edit-attachment-frame .edit-media-header .left:before, +.rtl .edit-attachment-frame .edit-media-header .right:before { + content: "\f345"; +} + +.edit-attachment-frame .edit-media-header .right:before, +.rtl .edit-attachment-frame .edit-media-header .left:before { + content: "\f341"; +} + +.edit-attachment-frame .edit-media-header .left.disabled, +.edit-attachment-frame .edit-media-header .right.disabled, +.edit-attachment-frame .edit-media-header .left.disabled:hover, +.edit-attachment-frame .edit-media-header .right.disabled:hover { + color: #ccc; + background: inherit; + cursor: default; + pointer-events: none; +} + +.edit-attachment-frame .media-frame-content, +.edit-attachment-frame .media-frame-router { + right: 0; +} + +.edit-attachment-frame .media-frame-content { + border-bottom: none; + bottom: 0; + top: 50px; +} + +.edit-attachment-frame .attachment-details { + position: absolute; + overflow: auto; + top: 0; + bottom: 0; + left: 0; + right: 0; + box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1); +} + +.edit-attachment-frame .attachment-media-view { + float: right; + width: 65%; + height: 100%; +} + +.edit-attachment-frame .attachment-media-view .thumbnail { + box-sizing: border-box; + padding: 16px; + height: 100%; +} + +.edit-attachment-frame .attachment-media-view .details-image { + display: block; + margin: 0 auto 16px; + max-width: 100%; + max-height: 90%; + max-height: calc( 100% - 42px ); /* leave space for actions underneath */ + background-image: linear-gradient(-45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4), linear-gradient(-45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4); + background-position: 100% 0, 10px 10px; + background-size: 20px 20px; +} + +.edit-attachment-frame .attachment-media-view .attachment-actions { + text-align: center; +} + +.edit-attachment-frame .wp-media-wrapper { + margin-bottom: 12px; +} + +.edit-attachment-frame input, +.edit-attachment-frame textarea { + padding: 6px 8px; + line-height: 16px; +} + +.edit-attachment-frame .attachment-info { + overflow: auto; + box-sizing: border-box; + margin-bottom: 0; + padding: 12px 16px 0; + width: 35%; + height: 100%; + box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1); + border-bottom: 0; + border-right: 1px solid #ddd; + background: #f3f3f3; +} + +.edit-attachment-frame .attachment-info .details, +.edit-attachment-frame .attachment-info .settings { + position: relative; /* RTL fix, #WP29352 */ + overflow: hidden; + float: none; + margin-bottom: 15px; + padding-bottom: 15px; + border-bottom: 1px solid #ddd; +} + +.edit-attachment-frame .attachment-info .filename { + font-weight: 400; + color: #666; +} + +.edit-attachment-frame .attachment-info .thumbnail { + margin-bottom: 12px; +} + +.attachment-info .actions { + margin-bottom: 16px; +} + +.attachment-info .actions a { + display: inline; + text-decoration: none; +} + + +/*------------------------------------------------------------------------------ + 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; + padding-top: 10px; +} + +.imgedit-settings p, +.imgedit-settings fieldset { + margin: 8px 0; +} + +.imgedit-settings legend { + margin-bottom: 5px; +} + +.describe .imgedit-wrap .imgedit-settings { + padding: 0 5px; +} + +.wp_attachment_holder div.updated { + margin-top: 0; +} + +.wp_attachment_holder .imgedit-wrap > div { + height: auto; +} + +.wp_attachment_holder .imgedit-wrap .imgedit-panel-content { + padding: 3px 0 0 16px; + float: right; +} + +.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; + bottom: 0; + width: 100%; + background: #fff; + opacity: 0.7; + filter: alpha(opacity=70); + display: none; +} + +.imgedit-wait:before { + content: ""; + display: block; + width: 20px; + height: 20px; + position: absolute; + right: 50%; + top: 50%; + margin: -10px -10px 0 0; + background: transparent url(../images/spinner.gif) no-repeat center; + background-size: 20px 20px; + -webkit-transform: translateZ(0); + transform: translateZ(0); +} + +.no-float { + float: none; +} + +.media-disabled, +.imgedit-settings .disabled { + /* WCAG 1.4.3 Text or images of text that are part of an inactive user + interface component ... have no contrast requirement. */ + color: #a0a5aa; +} + +.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; +} + +.imgedit-menu { + min-width: 300px; + margin: 0 0 12px; +} + +.imgedit-menu .note-no-rotate { + clear: both; + margin: 0; + padding: 1em 0 0; +} + +.image-editor .imgedit-menu .button { + float: right; + width: 32px; + height: 32px; + margin: 0 0 0 8px; + padding: 0; + background: #f1f1f1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: 16px; + color: #72777c; +} + +.imgedit-menu .button:before { + font: normal 20px/1 dashicons; + speak: none; + vertical-align: middle; +} + +.imgedit-menu .button.disabled { + border-color: #ccc; + background-color: #ddd; + color: #72777c; + 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-wrap img { + background-image: linear-gradient(-45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4), linear-gradient(-45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4); + background-position: 100% 0, 10px 10px; + background-size: 20px 20px; +} + +.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-thumbnail-preview { + margin: 10px 0 0 8px; +} + +.imgedit-thumbnail-preview-caption { + display: block; +} + +#poststuff .imgedit-group-top h3, /* Back-compat for pre-4.4 */ +#poststuff .imgedit-group-top h2 { + display: inline-block; + margin: 0; + padding: 0; + font-size: 14px; + line-height: 1.4; +} + +#poststuff .imgedit-group-top .button-link { + text-decoration: none; + color: #23282d; +} + +.imgedit-applyto .imgedit-label { + display: block; + padding: .5em 0 0; +} + +.imgedit-help { + display: none; + font-style: italic; +} + +/* higher specificity than buttons */ +.image-editor .imgedit-settings .imgedit-help-toggle, +.image-editor .imgedit-settings .imgedit-help-toggle:hover, +.image-editor .imgedit-settings .imgedit-help-toggle:active { + border: 1px solid transparent; + margin: -1px -1px 0 0; + padding: 0; + background: transparent; + color: #0074a2; + font-size: 20px; + line-height: 1; + cursor: pointer; + box-sizing: content-box; + box-shadow: none; +} + +.image-editor .imgedit-settings .imgedit-help-toggle:focus { + color: #0074a2; + border-color: #5b9dd9; + outline: none; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); +} + +.form-table td.imgedit-response { + padding: 0; +} + +.imgedit-submit { + margin: 8px 0 0; +} + +.imgedit-submit-btn { + margin-right: 20px; +} + +.imgedit-wrap .nowrap { + white-space: nowrap; + font-size: 12px; + line-height: inherit; +} + +span.imgedit-scale-warn { + color: #dc3232; + font-size: 20px; + font-style: normal; + visibility: hidden; + vertical-align: middle; +} + +.imgedit-save-target { + margin: 8px 0; +} + +.imgedit-group { + margin-bottom: 8px; + padding: 10px; +} + +.imgedit-settings .imgedit-scale input[type="text"], +.imgedit-settings .imgedit-crop-ratio input[type="text"], +.imgedit-settings .imgedit-crop-sel input[type="text"] { + width: 50px; + font-size: 14px; + padding: 5px 8px; +} + +.imgedit-separator { + display: inline-block; + width: 7px; + text-align: center; + vertical-align: middle; + font-size: 13px; + color: #444; +} + +.imgedit-settings .imgedit-scale .button { + margin-bottom: 0; +} + +audio, video { + display: inline-block; + max-width: 100%; +} + +.mejs-container { + width: 100%; + max-width: 100%; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .imgedit-wait:before { + 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; + } + + .media-upload-form .media-item.error, + .media-upload-form .media-item .error { + font-size: 13px; + line-height: 1.5; + } + + .media-upload-form .media-item.error { + padding: 1px 10px; + } + + .media-upload-form .media-item .error { + padding: 10px 12px 10px 0; + } + + .imgedit-settings .imgedit-scale input[type="text"], + .imgedit-settings .imgedit-crop-ratio input[type="text"], + .imgedit-settings .imgedit-crop-sel input[type="text"] { + width: 60px; + font-size: 16px; + padding: 6px 10px; + } + + .imgedit-applyto .imgedit-label { + vertical-align: middle; + } +} + +/** + * Media queries for media grid. + */ + +@media only screen and (max-width: 1120px) { + /* override for media-views.css */ + #wp-media-grid .wp-filter .attachment-filters { + max-width: 100%; + } +} + +@media only screen and ( max-width: 782px ) { + .media-frame.mode-select .attachments-browser.fixed .media-toolbar { + top: 46px; + left: 10px; + } +} + +@media only screen and (max-width: 600px) { + .media-frame.mode-select .attachments-browser.fixed .media-toolbar { + top: 0; + } +} + +@media only screen and (max-width: 480px) { + .edit-attachment-frame .media-frame-title { + left: 110px; + } + + .upload-php .media-modal-close, + .edit-attachment-frame .edit-media-header .left, + .edit-attachment-frame .edit-media-header .right { + width: 40px; + height: 40px; + } + + .upload-php .media-modal-close .media-modal-icon { + margin: 9px 10px; + } + + .edit-attachment-frame .edit-media-header .right:before, + .edit-attachment-frame .edit-media-header .left:before { + line-height: 40px !important; + } + + .edit-attachment-frame .edit-media-header .left { + left: 82px; + } + + .edit-attachment-frame .edit-media-header .right { + left: 41px; + } + + .edit-attachment-frame .media-frame-content { + top: 40px; + } + + .edit-attachment-frame .attachment-media-view { + float: none; + height: auto; + width: 100%; + } + + .edit-attachment-frame .attachment-info { + height: auto; + width: 100%; + } +} + +@media only screen and (max-width: 640px), screen and (max-height: 400px) { + .upload-php .mode-grid .media-sidebar{ + max-width: 100%; + } +} diff --git a/wp-admin/css/media-rtl.min.css b/wp-admin/css/media-rtl.min.css new file mode 100644 index 0000000..6ac72cc --- /dev/null +++ b/wp-admin/css/media-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.media-item .describe{border-collapse:collapse;width:100%;border-top:1px solid #ddd;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;margin-left:10px}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}.js .html-uploader #plupload-upload-ui,.media-item .startclosed,.media-item .startopen{display:none}.media-upload-form .media-item{min-height:36px;margin-bottom:1px;position:relative;width:100%;background:#fff}.media-upload-form .media-item,.media-upload-form .media-item .error{box-shadow:0 1px 0 #ddd}#media-items:empty{border:0}.media-item .filename{line-height:36px;overflow:hidden;margin-right:6px}.media-item .pinkynail{float:right;margin:2px 3px 0 10px;max-width:40px;max-height:32px}.media-item .original{position:relative;height:34px}.media-item .progress{float:left;height:22px;margin:7px 6px;width:200px;line-height:2em;padding:0;overflow:hidden;border-radius:22px;background:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;border-radius:22px;background-color:#0073aa;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 #html-upload-ui{display:block}.media-upload-form .media-item .error,.media-upload-form .media-item.error{width:auto;margin:0 0 1px}.media-upload-form .media-item .error{padding:10px 14px 10px 0}.media-item .error-div a.dismiss{display:block;float:left;margin:0 15px 0 10px}.find-box{background-color:#fff;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 #ddd;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%;box-sizing:border-box}.find-box-search{padding-bottom:16px}.find-box-search .spinner{float:none;right:105px;position:absolute}#find-posts-response,.find-box-search{position:relative}#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;border:none;padding:0;position:absolute;top:0;left:0;cursor:pointer;text-align:center;background:0 0;color:#666}#find-posts-close:focus,#find-posts-close:hover{color:#00a0d2}#find-posts-close:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#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 #ddd;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}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px}.drag-drop #drag-drop-area{border:4px dashed #b4b9be;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#a0a5aa;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}.media-frame.mode-grid .media-frame-menu,.media-frame.mode-grid .media-frame-router,.media-frame.mode-grid .media-frame-title,.upload-php .mode-grid .hide-sidebar .media-sidebar{display:none}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.media-frame.mode-grid,.media-frame.mode-grid .attachments-browser .attachments,.media-frame.mode-grid .media-frame-content,.media-frame.mode-grid .uploader-inline-content{position:static}.media-frame.mode-grid .media-frame-content{background-color:transparent;border:none}.upload-php .mode-grid .media-sidebar{position:relative;width:auto;margin-top:12px;padding:0 16px;border-right:4px solid #dd3d36;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);background-color:#fff}.upload-php .mode-grid .media-sidebar .media-uploader-status{border-bottom:none;padding-bottom:0;max-width:100%}.upload-php .mode-grid .media-sidebar .upload-error{margin:12px 0;padding:4px 0 0;border:none;box-shadow:none;background:0 0}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors{top:-10px;left:-14px;padding:10px}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before{content:"\f153";display:block;font:400 16px/1 dashicons;color:#72777c}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before{color:#c00}.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h2,.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3{display:none}.media-frame.mode-grid .uploader-inline{position:relative;top:auto;left:auto;right:auto;bottom:auto;padding-top:0;margin-top:20px;border:4px dashed #b4b9be}.media-frame.mode-select .attachments-browser.fixed .attachments{position:relative;top:94px;padding-bottom:94px}.media-frame.mode-grid .attachment.details:focus,.media-frame.mode-grid .attachment:focus,.media-frame.mode-grid .selected.attachment:focus{box-shadow:inset 0 0 2px 3px #f1f1f1,inset 0 0 0 7px #5b9dd9;outline:0}.media-frame.mode-grid .selected.attachment{box-shadow:inset 0 0 0 5px #f1f1f1,inset 0 0 0 7px #ccc}.media-frame.mode-grid .attachment.details{box-shadow:inset 0 0 0 3px #f1f1f1,inset 0 0 0 7px #1e8cbe}.media-frame.mode-grid.mode-select .attachment .thumbnail{opacity:.65}.media-frame.mode-select .attachment.selected .thumbnail{opacity:1}.media-frame.mode-grid .media-toolbar{margin-bottom:15px;height:auto}.media-frame.mode-grid .media-toolbar select{margin:0 0 0 10px;font-size:14px}.media-frame.mode-grid.mode-edit .media-toolbar-secondary>.select-mode-toggle-button{margin:0 0 0 8px;vertical-align:middle}.media-frame.mode-grid .attachments-browser .bulk-select{display:inline-block;margin:0 0 0 10px}.media-frame.mode-grid .search{margin-top:0}.media-frame.mode-grid .spinner{margin-top:16px}.attachments-browser .media-toolbar-secondary>.media-button{margin-left:10px}.media-frame.mode-select .attachments-browser.fixed .media-toolbar{position:fixed;top:32px;right:auto;left:20px;margin-top:0}.media-frame.mode-grid .attachments-browser{padding:0}.media-frame.mode-grid .attachments-browser .attachments{padding:2px}.media-frame.mode-grid .attachments-browser .no-media{color:#666;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.edit-attachment-frame{display:block;height:100%;width:100%}.edit-attachment-frame .edit-media-header{overflow:hidden}.upload-php .media-modal-close .media-modal-icon:before{content:"\f335";font-size:22px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{cursor:pointer;color:#72777c;background-color:transparent;height:50px;width:50px;padding:0;position:absolute;text-align:center;border:0;border-right:1px solid #ddd;transition:color .1s ease-in-out,background .1s ease-in-out}.upload-php .media-modal-close{top:0;left:0}.edit-attachment-frame .edit-media-header .left{left:102px}.edit-attachment-frame .edit-media-header .right{left:51px}.edit-attachment-frame .media-frame-title{right:0;left:150px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.edit-attachment-frame .edit-media-header .left:focus,.edit-attachment-frame .edit-media-header .left:hover,.edit-attachment-frame .edit-media-header .right:focus,.edit-attachment-frame .edit-media-header .right:hover,.upload-php .media-modal-close:focus,.upload-php .media-modal-close:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;box-shadow:none}.upload-php .media-modal-close:focus .media-modal-icon:before,.upload-php .media-modal-close:hover .media-modal-icon:before{color:#000}.edit-attachment-frame .edit-media-header .left:before,.rtl .edit-attachment-frame .edit-media-header .right:before{content:"\f345"}.edit-attachment-frame .edit-media-header .right:before,.rtl .edit-attachment-frame .edit-media-header .left:before{content:"\f341"}.edit-attachment-frame .edit-media-header .left.disabled,.edit-attachment-frame .edit-media-header .left.disabled:hover,.edit-attachment-frame .edit-media-header .right.disabled,.edit-attachment-frame .edit-media-header .right.disabled:hover{color:#ccc;background:inherit;cursor:default;pointer-events:none}.edit-attachment-frame .media-frame-content,.edit-attachment-frame .media-frame-router{right:0}.edit-attachment-frame .media-frame-content{border-bottom:none;bottom:0;top:50px}.edit-attachment-frame .attachment-details{position:absolute;overflow:auto;top:0;bottom:0;left:0;right:0;box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1)}.edit-attachment-frame .attachment-media-view{float:right;width:65%;height:100%}.edit-attachment-frame .attachment-media-view .thumbnail{box-sizing:border-box;padding:16px;height:100%}.edit-attachment-frame .attachment-media-view .details-image{display:block;margin:0 auto 16px;max-width:100%;max-height:90%;max-height:calc(100% - 42px);background-image:linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:100% 0,10px 10px;background-size:20px 20px}.edit-attachment-frame .attachment-media-view .attachment-actions{text-align:center}.edit-attachment-frame .wp-media-wrapper{margin-bottom:12px}.edit-attachment-frame input,.edit-attachment-frame textarea{padding:6px 8px;line-height:16px}.edit-attachment-frame .attachment-info{overflow:auto;box-sizing:border-box;margin-bottom:0;padding:12px 16px 0;width:35%;height:100%;box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);border-bottom:0;border-right:1px solid #ddd;background:#f3f3f3}.edit-attachment-frame .attachment-info .details,.edit-attachment-frame .attachment-info .settings{position:relative;overflow:hidden;float:none;margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ddd}.edit-attachment-frame .attachment-info .filename{font-weight:400;color:#666}.edit-attachment-frame .attachment-info .thumbnail{margin-bottom:12px}.attachment-info .actions{margin-bottom:16px}.attachment-info .actions a{display:inline;text-decoration:none}.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;padding-top:10px}.imgedit-settings fieldset,.imgedit-settings p{margin:8px 0}.imgedit-settings legend{margin-bottom:5px}.describe .imgedit-wrap .imgedit-settings{padding:0 5px}.wp_attachment_holder div.updated{margin-top:0}.wp_attachment_holder .imgedit-wrap>div{height:auto}.wp_attachment_holder .imgedit-wrap .imgedit-panel-content{padding:3px 0 0 16px;float:right}.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;bottom:0;width:100%;background:#fff;opacity:.7;filter:alpha(opacity=70);display:none}.imgedit-wait:before{content:"";display:block;width:20px;height:20px;position:absolute;right:50%;top:50%;margin:-10px -10px 0 0;background:url(../images/spinner.gif) center no-repeat;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.no-float{float:none}.A1B1 .button,.A1B1 .spinner,.wp_attachment_image .button,.wp_attachment_image .spinner{float:right}.imgedit-settings .disabled,.media-disabled{color:#a0a5aa}.A1B1{overflow:hidden}.no-js .wp_attachment_image .button{display:none}.imgedit-menu{min-width:300px;margin:0 0 12px}.imgedit-menu .note-no-rotate{clear:both;margin:0;padding:1em 0 0}.image-editor .imgedit-menu .button{float:right;width:32px;height:32px;margin:0 0 0 8px;padding:0;background:#f1f1f1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:16px;color:#72777c}.imgedit-menu .button:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-menu .button.disabled{border-color:#ccc;background-color:#ddd;color:#72777c;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-wrap img{background-image:linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:100% 0,10px 10px;background-size:20px 20px}.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-thumbnail-preview{margin:10px 0 0 8px}.imgedit-thumbnail-preview-caption{display:block}#poststuff .imgedit-group-top h2,#poststuff .imgedit-group-top h3{display:inline-block;margin:0;padding:0;font-size:14px;line-height:1.4}#poststuff .imgedit-group-top .button-link{text-decoration:none;color:#23282d}.imgedit-applyto .imgedit-label{display:block;padding:.5em 0 0}.imgedit-help{display:none;font-style:italic}.image-editor .imgedit-settings .imgedit-help-toggle,.image-editor .imgedit-settings .imgedit-help-toggle:active,.image-editor .imgedit-settings .imgedit-help-toggle:hover{border:1px solid transparent;margin:-1px -1px 0 0;padding:0;background:0 0;color:#0074a2;font-size:20px;line-height:1;cursor:pointer;box-sizing:content-box;box-shadow:none}.image-editor .imgedit-settings .imgedit-help-toggle:focus{color:#0074a2;border-color:#5b9dd9;outline:0;box-shadow:0 0 3px rgba(0,115,170,.8)}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0 0}.imgedit-submit-btn{margin-right:20px}.imgedit-wrap .nowrap{white-space:nowrap;font-size:12px;line-height:inherit}span.imgedit-scale-warn{color:#dc3232;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-save-target{margin:8px 0}.imgedit-group{margin-bottom:8px;padding:10px}.imgedit-settings .imgedit-crop-ratio input[type=text],.imgedit-settings .imgedit-crop-sel input[type=text],.imgedit-settings .imgedit-scale input[type=text]{width:50px;font-size:14px;padding:5px 8px}.imgedit-separator{display:inline-block;width:7px;text-align:center;vertical-align:middle;font-size:13px;color:#444}.imgedit-settings .imgedit-scale .button{margin-bottom:0}audio,video{display:inline-block;max-width:100%}.mejs-container{width:100%;max-width:100%}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.imgedit-wait:before{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}.media-upload-form .media-item .error,.media-upload-form .media-item.error{font-size:13px;line-height:1.5}.media-upload-form .media-item.error{padding:1px 10px}.media-upload-form .media-item .error{padding:10px 12px 10px 0}.imgedit-settings .imgedit-crop-ratio input[type=text],.imgedit-settings .imgedit-crop-sel input[type=text],.imgedit-settings .imgedit-scale input[type=text]{width:60px;font-size:16px;padding:6px 10px}.imgedit-applyto .imgedit-label{vertical-align:middle}}@media only screen and (max-width:1120px){#wp-media-grid .wp-filter .attachment-filters{max-width:100%}}@media only screen and (max-width:782px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:46px;left:10px}}@media only screen and (max-width:600px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:0}}@media only screen and (max-width:480px){.edit-attachment-frame .media-frame-title{left:110px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{width:40px;height:40px}.upload-php .media-modal-close .media-modal-icon{margin:9px 10px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{line-height:40px!important}.edit-attachment-frame .edit-media-header .left{left:82px}.edit-attachment-frame .edit-media-header .right{left:41px}.edit-attachment-frame .media-frame-content{top:40px}.edit-attachment-frame .attachment-media-view{float:none;height:auto;width:100%}.edit-attachment-frame .attachment-info{height:auto;width:100%}}@media only screen and (max-width:640px),screen and (max-height:400px){.upload-php .mode-grid .media-sidebar{max-width:100%}} \ No newline at end of file diff --git a/wp-admin/css/media.css b/wp-admin/css/media.css new file mode 100644 index 0000000..95e52ac --- /dev/null +++ b/wp-admin/css/media.css @@ -0,0 +1,1270 @@ +/*------------------------------------------------------------------------------ + 14.0 - Media Screen +------------------------------------------------------------------------------*/ + +.media-item .describe { + border-collapse: collapse; + width: 100%; + border-top: 1px solid #ddd; + 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; + margin-right: 10px; +} + +.media-item .describe-toggle-off, +.media-item.open .describe-toggle-on { + display: none; +} + +.media-item.open .describe-toggle-off { + display: block; +} + +.media-upload-form .media-item { + min-height: 36px; + margin-bottom: 1px; + position: relative; + width: 100%; + background: #fff; +} + +.media-upload-form .media-item, +.media-upload-form .media-item .error { + box-shadow: 0 1px 0 #ddd; +} + +#media-items:empty { + border: 0 none; +} + +.media-item .filename { + line-height: 36px; + overflow: hidden; + margin-left: 6px; +} + +.media-item .pinkynail { + float: left; + margin: 2px 10px 0 3px; + 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 6px; + width: 200px; + line-height: 2em; + padding: 0; + overflow: hidden; + border-radius: 22px; + background: #ddd; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); +} + +.media-item .bar { + z-index: 9; + width: 0; + height: 100%; + margin-top: -22px; + border-radius: 22px; + background-color: #0073aa; + 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: 0 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, +.media-upload-form .media-item .error { + width: auto; + margin: 0 0 1px 0; +} + +.media-upload-form .media-item .error { + padding: 10px 0 10px 14px; +} + +.media-item .error-div a.dismiss { + display: block; + float: right; + margin: 0 10px 0 15px; +} + +/*------------------------------------------------------------------------------ + 14.1 - Media Library +------------------------------------------------------------------------------*/ + +.find-box { + background-color: #fff; + 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 #ddd; + 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%; + box-sizing: border-box; +} + +.find-box-search { + padding-bottom: 16px; +} + +.find-box-search .spinner { + float: none; + left: 105px; + position: absolute; +} + +.find-box-search, +#find-posts-response { + position: relative; /* RTL fix, #WP28010 */ +} + +#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; + border: none; + padding: 0; + position: absolute; + top: 0; + right: 0; + cursor: pointer; + text-align: center; + background: none; + color: #666; +} + +#find-posts-close:hover, +#find-posts-close:focus { + color: #00a0d2; +} + +#find-posts-close:focus { + outline: none; + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +#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 #ddd; + 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; +} + +.drag-drop #drag-drop-area { + border: 4px dashed #b4b9be; + height: 200px; +} + +.drag-drop .drag-drop-inside { + margin: 70px auto 0; + width: 250px; +} + +.drag-drop-inside p { + color: #a0a5aa; + 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; +} + +/** + * Media Library grid view + */ + +.media-frame.mode-grid, +.media-frame.mode-grid .media-frame-content, +.media-frame.mode-grid .attachments-browser .attachments, +.media-frame.mode-grid .uploader-inline-content { + position: static; +} + +/* Regions we don't use at all */ +.media-frame.mode-grid .media-frame-title, +.media-frame.mode-grid .media-frame-router, +.media-frame.mode-grid .media-frame-menu { + display: none; +} + +.media-frame.mode-grid .media-frame-content { + background-color: transparent; + border: none; +} + +.upload-php .mode-grid .media-sidebar { + position: relative; + width: auto; + margin-top: 12px; + padding: 0 16px; + border-left: 4px solid #dd3d36; + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); + background-color: #fff; +} + +.upload-php .mode-grid .hide-sidebar .media-sidebar { + display: none; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status { + border-bottom: none; + padding-bottom: 0; + max-width: 100%; +} + +.upload-php .mode-grid .media-sidebar .upload-error { + margin: 12px 0; + padding: 4px 0 0; + border: none; + box-shadow: none; + background: none; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors { + top: -10px; + right: -14px; + padding: 10px; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before { + content: "\f153"; + display: block; + font: normal 16px/1 dashicons; + color: #72777c; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before, +.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before { + color: #c00; +} + +.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3, /* Back-compat for pre-4.4 */ +.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h2 { + display: none; +} + +.media-frame.mode-grid .uploader-inline { + position: relative; + top: auto; + right: auto; + left: auto; + bottom: auto; + padding-top: 0; + margin-top: 20px; + border: 4px dashed #b4b9be; +} + +.media-frame.mode-select .attachments-browser.fixed .attachments { + position: relative; + top: 94px; /* prevent jumping up when the toolbar becomes fixed */ + padding-bottom: 94px; /* offset for above so the bottom doesn't get cut off */ +} + +.media-frame.mode-grid .attachment:focus, +.media-frame.mode-grid .selected.attachment:focus, +.media-frame.mode-grid .attachment.details:focus { + box-shadow: + inset 0 0 2px 3px #f1f1f1, + inset 0 0 0 7px #5b9dd9; + outline: none; +} + +.media-frame.mode-grid .selected.attachment { + box-shadow: + inset 0 0 0 5px #f1f1f1, + inset 0 0 0 7px #ccc; +} + +.media-frame.mode-grid .attachment.details { + box-shadow: + inset 0 0 0 3px #f1f1f1, + inset 0 0 0 7px #1e8cbe; +} + +.media-frame.mode-grid.mode-select .attachment .thumbnail { + opacity: 0.65; +} + +.media-frame.mode-select .attachment.selected .thumbnail { + opacity: 1; +} + +.media-frame.mode-grid .media-toolbar { + margin-bottom: 15px; + height: auto; +} + +.media-frame.mode-grid .media-toolbar select { + margin: 0 10px 0 0; + font-size: 14px; +} + +.media-frame.mode-grid.mode-edit .media-toolbar-secondary > .select-mode-toggle-button { + margin: 0 8px 0 0; + vertical-align: middle; +} + +.media-frame.mode-grid .attachments-browser .bulk-select { + display: inline-block; + margin: 0 10px 0 0; +} + +.media-frame.mode-grid .search { + margin-top: 0; +} + +.media-frame.mode-grid .spinner { + margin-top: 16px; +} + +.attachments-browser .media-toolbar-secondary > .media-button { + margin-right: 10px; +} + +.media-frame.mode-select .attachments-browser.fixed .media-toolbar { + position: fixed; + top: 32px; + left: auto; + right: 20px; + margin-top: 0; +} + +.media-frame.mode-grid .attachments-browser { + padding: 0; +} + +.media-frame.mode-grid .attachments-browser .attachments { + padding: 2px; +} + +.media-frame.mode-grid .attachments-browser .no-media { + color: #666; /* same as no plugins and no themes */ + font-size: 18px; + font-style: normal; + margin: 0; + padding: 100px 0 0; + text-align: center; +} + +/** + * Attachment details modal + */ + +.edit-attachment-frame { + display: block; + height: 100%; + width: 100%; +} + +.edit-attachment-frame .edit-media-header { + overflow: hidden; +} + +.upload-php .media-modal-close .media-modal-icon:before { + content: "\f335"; + font-size: 22px; +} + +.upload-php .media-modal-close, +.edit-attachment-frame .edit-media-header .left, +.edit-attachment-frame .edit-media-header .right { + cursor: pointer; + color: #72777c; + background-color: transparent; + height: 50px; + width: 50px; + padding: 0; + position: absolute; + text-align: center; + border: 0; + border-left: 1px solid #ddd; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.upload-php .media-modal-close { + top: 0; + right: 0; +} + +.edit-attachment-frame .edit-media-header .left { + right: 102px; +} + +.edit-attachment-frame .edit-media-header .right { + right: 51px; +} + +.edit-attachment-frame .media-frame-title { + left: 0; + right: 150px; /* leave space for prev/next/close */ +} + +.edit-attachment-frame .edit-media-header .right:before, +.edit-attachment-frame .edit-media-header .left:before { + font: normal 20px/50px dashicons !important; + display: inline; + font-weight: 300; +} + +.upload-php .media-modal-close:hover, +.upload-php .media-modal-close:focus, +.edit-attachment-frame .edit-media-header .left:hover, +.edit-attachment-frame .edit-media-header .right:hover, +.edit-attachment-frame .edit-media-header .left:focus, +.edit-attachment-frame .edit-media-header .right:focus { + background: #ddd; + border-color: #ccc; + color: #000; + outline: none; + box-shadow: none; +} + +.upload-php .media-modal-close:focus .media-modal-icon:before, +.upload-php .media-modal-close:hover .media-modal-icon:before { + color: #000; +} + +.edit-attachment-frame .edit-media-header .left:before, +.rtl .edit-attachment-frame .edit-media-header .right:before { + content: "\f341"; +} + +.edit-attachment-frame .edit-media-header .right:before, +.rtl .edit-attachment-frame .edit-media-header .left:before { + content: "\f345"; +} + +.edit-attachment-frame .edit-media-header .left.disabled, +.edit-attachment-frame .edit-media-header .right.disabled, +.edit-attachment-frame .edit-media-header .left.disabled:hover, +.edit-attachment-frame .edit-media-header .right.disabled:hover { + color: #ccc; + background: inherit; + cursor: default; + pointer-events: none; +} + +.edit-attachment-frame .media-frame-content, +.edit-attachment-frame .media-frame-router { + left: 0; +} + +.edit-attachment-frame .media-frame-content { + border-bottom: none; + bottom: 0; + top: 50px; +} + +.edit-attachment-frame .attachment-details { + position: absolute; + overflow: auto; + top: 0; + bottom: 0; + right: 0; + left: 0; + box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1); +} + +.edit-attachment-frame .attachment-media-view { + float: left; + width: 65%; + height: 100%; +} + +.edit-attachment-frame .attachment-media-view .thumbnail { + box-sizing: border-box; + padding: 16px; + height: 100%; +} + +.edit-attachment-frame .attachment-media-view .details-image { + display: block; + margin: 0 auto 16px; + max-width: 100%; + max-height: 90%; + max-height: calc( 100% - 42px ); /* leave space for actions underneath */ + background-image: linear-gradient(45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4), linear-gradient(45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4); + background-position: 0 0, 10px 10px; + background-size: 20px 20px; +} + +.edit-attachment-frame .attachment-media-view .attachment-actions { + text-align: center; +} + +.edit-attachment-frame .wp-media-wrapper { + margin-bottom: 12px; +} + +.edit-attachment-frame input, +.edit-attachment-frame textarea { + padding: 6px 8px; + line-height: 16px; +} + +.edit-attachment-frame .attachment-info { + overflow: auto; + box-sizing: border-box; + margin-bottom: 0; + padding: 12px 16px 0; + width: 35%; + height: 100%; + box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1); + border-bottom: 0; + border-left: 1px solid #ddd; + background: #f3f3f3; +} + +.edit-attachment-frame .attachment-info .details, +.edit-attachment-frame .attachment-info .settings { + position: relative; /* RTL fix, #WP29352 */ + overflow: hidden; + float: none; + margin-bottom: 15px; + padding-bottom: 15px; + border-bottom: 1px solid #ddd; +} + +.edit-attachment-frame .attachment-info .filename { + font-weight: 400; + color: #666; +} + +.edit-attachment-frame .attachment-info .thumbnail { + margin-bottom: 12px; +} + +.attachment-info .actions { + margin-bottom: 16px; +} + +.attachment-info .actions a { + display: inline; + text-decoration: none; +} + + +/*------------------------------------------------------------------------------ + 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; + padding-top: 10px; +} + +.imgedit-settings p, +.imgedit-settings fieldset { + margin: 8px 0; +} + +.imgedit-settings legend { + margin-bottom: 5px; +} + +.describe .imgedit-wrap .imgedit-settings { + padding: 0 5px; +} + +.wp_attachment_holder div.updated { + margin-top: 0; +} + +.wp_attachment_holder .imgedit-wrap > div { + height: auto; +} + +.wp_attachment_holder .imgedit-wrap .imgedit-panel-content { + padding: 3px 16px 0 0; + float: left; +} + +.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; + bottom: 0; + width: 100%; + background: #fff; + opacity: 0.7; + filter: alpha(opacity=70); + display: none; +} + +.imgedit-wait:before { + content: ""; + display: block; + width: 20px; + height: 20px; + position: absolute; + left: 50%; + top: 50%; + margin: -10px 0 0 -10px; + background: transparent url(../images/spinner.gif) no-repeat center; + background-size: 20px 20px; + -webkit-transform: translateZ(0); + transform: translateZ(0); +} + +.no-float { + float: none; +} + +.media-disabled, +.imgedit-settings .disabled { + /* WCAG 1.4.3 Text or images of text that are part of an inactive user + interface component ... have no contrast requirement. */ + color: #a0a5aa; +} + +.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; +} + +.imgedit-menu { + min-width: 300px; + margin: 0 0 12px; +} + +.imgedit-menu .note-no-rotate { + clear: both; + margin: 0; + padding: 1em 0 0; +} + +.image-editor .imgedit-menu .button { + float: left; + width: 32px; + height: 32px; + margin: 0 8px 0 0; + padding: 0; + background: #f1f1f1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: 16px; + color: #72777c; +} + +.imgedit-menu .button:before { + font: normal 20px/1 dashicons; + speak: none; + vertical-align: middle; +} + +.imgedit-menu .button.disabled { + border-color: #ccc; + background-color: #ddd; + color: #72777c; + 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-wrap img { + background-image: linear-gradient(45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4), linear-gradient(45deg, #c4c4c4 25%, transparent 25%, transparent 75%, #c4c4c4 75%, #c4c4c4); + background-position: 0 0, 10px 10px; + background-size: 20px 20px; +} + +.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-thumbnail-preview { + margin: 10px 8px 0 0; +} + +.imgedit-thumbnail-preview-caption { + display: block; +} + +#poststuff .imgedit-group-top h3, /* Back-compat for pre-4.4 */ +#poststuff .imgedit-group-top h2 { + display: inline-block; + margin: 0; + padding: 0; + font-size: 14px; + line-height: 1.4; +} + +#poststuff .imgedit-group-top .button-link { + text-decoration: none; + color: #23282d; +} + +.imgedit-applyto .imgedit-label { + display: block; + padding: .5em 0 0; +} + +.imgedit-help { + display: none; + font-style: italic; +} + +/* higher specificity than buttons */ +.image-editor .imgedit-settings .imgedit-help-toggle, +.image-editor .imgedit-settings .imgedit-help-toggle:hover, +.image-editor .imgedit-settings .imgedit-help-toggle:active { + border: 1px solid transparent; + margin: -1px 0 0 -1px; + padding: 0; + background: transparent; + color: #0074a2; + font-size: 20px; + line-height: 1; + cursor: pointer; + box-sizing: content-box; + box-shadow: none; +} + +.image-editor .imgedit-settings .imgedit-help-toggle:focus { + color: #0074a2; + border-color: #5b9dd9; + outline: none; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); +} + +.form-table td.imgedit-response { + padding: 0; +} + +.imgedit-submit { + margin: 8px 0 0; +} + +.imgedit-submit-btn { + margin-left: 20px; +} + +.imgedit-wrap .nowrap { + white-space: nowrap; + font-size: 12px; + line-height: inherit; +} + +span.imgedit-scale-warn { + color: #dc3232; + font-size: 20px; + font-style: normal; + visibility: hidden; + vertical-align: middle; +} + +.imgedit-save-target { + margin: 8px 0; +} + +.imgedit-group { + margin-bottom: 8px; + padding: 10px; +} + +.imgedit-settings .imgedit-scale input[type="text"], +.imgedit-settings .imgedit-crop-ratio input[type="text"], +.imgedit-settings .imgedit-crop-sel input[type="text"] { + width: 50px; + font-size: 14px; + padding: 5px 8px; +} + +.imgedit-separator { + display: inline-block; + width: 7px; + text-align: center; + vertical-align: middle; + font-size: 13px; + color: #444; +} + +.imgedit-settings .imgedit-scale .button { + margin-bottom: 0; +} + +audio, video { + display: inline-block; + max-width: 100%; +} + +.mejs-container { + width: 100%; + max-width: 100%; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .imgedit-wait:before { + 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; + } + + .media-upload-form .media-item.error, + .media-upload-form .media-item .error { + font-size: 13px; + line-height: 1.5; + } + + .media-upload-form .media-item.error { + padding: 1px 10px; + } + + .media-upload-form .media-item .error { + padding: 10px 0 10px 12px; + } + + .imgedit-settings .imgedit-scale input[type="text"], + .imgedit-settings .imgedit-crop-ratio input[type="text"], + .imgedit-settings .imgedit-crop-sel input[type="text"] { + width: 60px; + font-size: 16px; + padding: 6px 10px; + } + + .imgedit-applyto .imgedit-label { + vertical-align: middle; + } +} + +/** + * Media queries for media grid. + */ + +@media only screen and (max-width: 1120px) { + /* override for media-views.css */ + #wp-media-grid .wp-filter .attachment-filters { + max-width: 100%; + } +} + +@media only screen and ( max-width: 782px ) { + .media-frame.mode-select .attachments-browser.fixed .media-toolbar { + top: 46px; + right: 10px; + } +} + +@media only screen and (max-width: 600px) { + .media-frame.mode-select .attachments-browser.fixed .media-toolbar { + top: 0; + } +} + +@media only screen and (max-width: 480px) { + .edit-attachment-frame .media-frame-title { + right: 110px; + } + + .upload-php .media-modal-close, + .edit-attachment-frame .edit-media-header .left, + .edit-attachment-frame .edit-media-header .right { + width: 40px; + height: 40px; + } + + .upload-php .media-modal-close .media-modal-icon { + margin: 9px 10px; + } + + .edit-attachment-frame .edit-media-header .right:before, + .edit-attachment-frame .edit-media-header .left:before { + line-height: 40px !important; + } + + .edit-attachment-frame .edit-media-header .left { + right: 82px; + } + + .edit-attachment-frame .edit-media-header .right { + right: 41px; + } + + .edit-attachment-frame .media-frame-content { + top: 40px; + } + + .edit-attachment-frame .attachment-media-view { + float: none; + height: auto; + width: 100%; + } + + .edit-attachment-frame .attachment-info { + height: auto; + width: 100%; + } +} + +@media only screen and (max-width: 640px), screen and (max-height: 400px) { + .upload-php .mode-grid .media-sidebar{ + max-width: 100%; + } +} diff --git a/wp-admin/css/media.min.css b/wp-admin/css/media.min.css new file mode 100644 index 0000000..3256b80 --- /dev/null +++ b/wp-admin/css/media.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.media-item .describe{border-collapse:collapse;width:100%;border-top:1px solid #ddd;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;margin-right:10px}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}.js .html-uploader #plupload-upload-ui,.media-item .startclosed,.media-item .startopen{display:none}.media-upload-form .media-item{min-height:36px;margin-bottom:1px;position:relative;width:100%;background:#fff}.media-upload-form .media-item,.media-upload-form .media-item .error{box-shadow:0 1px 0 #ddd}#media-items:empty{border:0}.media-item .filename{line-height:36px;overflow:hidden;margin-left:6px}.media-item .pinkynail{float:left;margin:2px 10px 0 3px;max-width:40px;max-height:32px}.media-item .original{position:relative;height:34px}.media-item .progress{float:right;height:22px;margin:7px 6px;width:200px;line-height:2em;padding:0;overflow:hidden;border-radius:22px;background:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;border-radius:22px;background-color:#0073aa;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 #html-upload-ui{display:block}.media-upload-form .media-item .error,.media-upload-form .media-item.error{width:auto;margin:0 0 1px}.media-upload-form .media-item .error{padding:10px 0 10px 14px}.media-item .error-div a.dismiss{display:block;float:right;margin:0 10px 0 15px}.find-box{background-color:#fff;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 #ddd;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%;box-sizing:border-box}.find-box-search{padding-bottom:16px}.find-box-search .spinner{float:none;left:105px;position:absolute}#find-posts-response,.find-box-search{position:relative}#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;border:none;padding:0;position:absolute;top:0;right:0;cursor:pointer;text-align:center;background:0 0;color:#666}#find-posts-close:focus,#find-posts-close:hover{color:#00a0d2}#find-posts-close:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#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 #ddd;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}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px}.drag-drop #drag-drop-area{border:4px dashed #b4b9be;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#a0a5aa;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}.media-frame.mode-grid .media-frame-menu,.media-frame.mode-grid .media-frame-router,.media-frame.mode-grid .media-frame-title,.upload-php .mode-grid .hide-sidebar .media-sidebar{display:none}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.media-frame.mode-grid,.media-frame.mode-grid .attachments-browser .attachments,.media-frame.mode-grid .media-frame-content,.media-frame.mode-grid .uploader-inline-content{position:static}.media-frame.mode-grid .media-frame-content{background-color:transparent;border:none}.upload-php .mode-grid .media-sidebar{position:relative;width:auto;margin-top:12px;padding:0 16px;border-left:4px solid #dd3d36;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);background-color:#fff}.upload-php .mode-grid .media-sidebar .media-uploader-status{border-bottom:none;padding-bottom:0;max-width:100%}.upload-php .mode-grid .media-sidebar .upload-error{margin:12px 0;padding:4px 0 0;border:none;box-shadow:none;background:0 0}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors{top:-10px;right:-14px;padding:10px}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before{content:"\f153";display:block;font:400 16px/1 dashicons;color:#72777c}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before{color:#c00}.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h2,.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3{display:none}.media-frame.mode-grid .uploader-inline{position:relative;top:auto;right:auto;left:auto;bottom:auto;padding-top:0;margin-top:20px;border:4px dashed #b4b9be}.media-frame.mode-select .attachments-browser.fixed .attachments{position:relative;top:94px;padding-bottom:94px}.media-frame.mode-grid .attachment.details:focus,.media-frame.mode-grid .attachment:focus,.media-frame.mode-grid .selected.attachment:focus{box-shadow:inset 0 0 2px 3px #f1f1f1,inset 0 0 0 7px #5b9dd9;outline:0}.media-frame.mode-grid .selected.attachment{box-shadow:inset 0 0 0 5px #f1f1f1,inset 0 0 0 7px #ccc}.media-frame.mode-grid .attachment.details{box-shadow:inset 0 0 0 3px #f1f1f1,inset 0 0 0 7px #1e8cbe}.media-frame.mode-grid.mode-select .attachment .thumbnail{opacity:.65}.media-frame.mode-select .attachment.selected .thumbnail{opacity:1}.media-frame.mode-grid .media-toolbar{margin-bottom:15px;height:auto}.media-frame.mode-grid .media-toolbar select{margin:0 10px 0 0;font-size:14px}.media-frame.mode-grid.mode-edit .media-toolbar-secondary>.select-mode-toggle-button{margin:0 8px 0 0;vertical-align:middle}.media-frame.mode-grid .attachments-browser .bulk-select{display:inline-block;margin:0 10px 0 0}.media-frame.mode-grid .search{margin-top:0}.media-frame.mode-grid .spinner{margin-top:16px}.attachments-browser .media-toolbar-secondary>.media-button{margin-right:10px}.media-frame.mode-select .attachments-browser.fixed .media-toolbar{position:fixed;top:32px;left:auto;right:20px;margin-top:0}.media-frame.mode-grid .attachments-browser{padding:0}.media-frame.mode-grid .attachments-browser .attachments{padding:2px}.media-frame.mode-grid .attachments-browser .no-media{color:#666;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.edit-attachment-frame{display:block;height:100%;width:100%}.edit-attachment-frame .edit-media-header{overflow:hidden}.upload-php .media-modal-close .media-modal-icon:before{content:"\f335";font-size:22px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{cursor:pointer;color:#72777c;background-color:transparent;height:50px;width:50px;padding:0;position:absolute;text-align:center;border:0;border-left:1px solid #ddd;transition:color .1s ease-in-out,background .1s ease-in-out}.upload-php .media-modal-close{top:0;right:0}.edit-attachment-frame .edit-media-header .left{right:102px}.edit-attachment-frame .edit-media-header .right{right:51px}.edit-attachment-frame .media-frame-title{left:0;right:150px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.edit-attachment-frame .edit-media-header .left:focus,.edit-attachment-frame .edit-media-header .left:hover,.edit-attachment-frame .edit-media-header .right:focus,.edit-attachment-frame .edit-media-header .right:hover,.upload-php .media-modal-close:focus,.upload-php .media-modal-close:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;box-shadow:none}.upload-php .media-modal-close:focus .media-modal-icon:before,.upload-php .media-modal-close:hover .media-modal-icon:before{color:#000}.edit-attachment-frame .edit-media-header .left:before,.rtl .edit-attachment-frame .edit-media-header .right:before{content:"\f341"}.edit-attachment-frame .edit-media-header .right:before,.rtl .edit-attachment-frame .edit-media-header .left:before{content:"\f345"}.edit-attachment-frame .edit-media-header .left.disabled,.edit-attachment-frame .edit-media-header .left.disabled:hover,.edit-attachment-frame .edit-media-header .right.disabled,.edit-attachment-frame .edit-media-header .right.disabled:hover{color:#ccc;background:inherit;cursor:default;pointer-events:none}.edit-attachment-frame .media-frame-content,.edit-attachment-frame .media-frame-router{left:0}.edit-attachment-frame .media-frame-content{border-bottom:none;bottom:0;top:50px}.edit-attachment-frame .attachment-details{position:absolute;overflow:auto;top:0;bottom:0;right:0;left:0;box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1)}.edit-attachment-frame .attachment-media-view{float:left;width:65%;height:100%}.edit-attachment-frame .attachment-media-view .thumbnail{box-sizing:border-box;padding:16px;height:100%}.edit-attachment-frame .attachment-media-view .details-image{display:block;margin:0 auto 16px;max-width:100%;max-height:90%;max-height:calc(100% - 42px);background-image:linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:0 0,10px 10px;background-size:20px 20px}.edit-attachment-frame .attachment-media-view .attachment-actions{text-align:center}.edit-attachment-frame .wp-media-wrapper{margin-bottom:12px}.edit-attachment-frame input,.edit-attachment-frame textarea{padding:6px 8px;line-height:16px}.edit-attachment-frame .attachment-info{overflow:auto;box-sizing:border-box;margin-bottom:0;padding:12px 16px 0;width:35%;height:100%;box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);border-bottom:0;border-left:1px solid #ddd;background:#f3f3f3}.edit-attachment-frame .attachment-info .details,.edit-attachment-frame .attachment-info .settings{position:relative;overflow:hidden;float:none;margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ddd}.edit-attachment-frame .attachment-info .filename{font-weight:400;color:#666}.edit-attachment-frame .attachment-info .thumbnail{margin-bottom:12px}.attachment-info .actions{margin-bottom:16px}.attachment-info .actions a{display:inline;text-decoration:none}.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;padding-top:10px}.imgedit-settings fieldset,.imgedit-settings p{margin:8px 0}.imgedit-settings legend{margin-bottom:5px}.describe .imgedit-wrap .imgedit-settings{padding:0 5px}.wp_attachment_holder div.updated{margin-top:0}.wp_attachment_holder .imgedit-wrap>div{height:auto}.wp_attachment_holder .imgedit-wrap .imgedit-panel-content{padding:3px 16px 0 0;float:left}.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;bottom:0;width:100%;background:#fff;opacity:.7;filter:alpha(opacity=70);display:none}.imgedit-wait:before{content:"";display:block;width:20px;height:20px;position:absolute;left:50%;top:50%;margin:-10px 0 0 -10px;background:url(../images/spinner.gif) center no-repeat;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.no-float{float:none}.A1B1 .button,.A1B1 .spinner,.wp_attachment_image .button,.wp_attachment_image .spinner{float:left}.imgedit-settings .disabled,.media-disabled{color:#a0a5aa}.A1B1{overflow:hidden}.no-js .wp_attachment_image .button{display:none}.imgedit-menu{min-width:300px;margin:0 0 12px}.imgedit-menu .note-no-rotate{clear:both;margin:0;padding:1em 0 0}.image-editor .imgedit-menu .button{float:left;width:32px;height:32px;margin:0 8px 0 0;padding:0;background:#f1f1f1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:16px;color:#72777c}.imgedit-menu .button:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-menu .button.disabled{border-color:#ccc;background-color:#ddd;color:#72777c;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-wrap img{background-image:linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:0 0,10px 10px;background-size:20px 20px}.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-thumbnail-preview{margin:10px 8px 0 0}.imgedit-thumbnail-preview-caption{display:block}#poststuff .imgedit-group-top h2,#poststuff .imgedit-group-top h3{display:inline-block;margin:0;padding:0;font-size:14px;line-height:1.4}#poststuff .imgedit-group-top .button-link{text-decoration:none;color:#23282d}.imgedit-applyto .imgedit-label{display:block;padding:.5em 0 0}.imgedit-help{display:none;font-style:italic}.image-editor .imgedit-settings .imgedit-help-toggle,.image-editor .imgedit-settings .imgedit-help-toggle:active,.image-editor .imgedit-settings .imgedit-help-toggle:hover{border:1px solid transparent;margin:-1px 0 0 -1px;padding:0;background:0 0;color:#0074a2;font-size:20px;line-height:1;cursor:pointer;box-sizing:content-box;box-shadow:none}.image-editor .imgedit-settings .imgedit-help-toggle:focus{color:#0074a2;border-color:#5b9dd9;outline:0;box-shadow:0 0 3px rgba(0,115,170,.8)}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0 0}.imgedit-submit-btn{margin-left:20px}.imgedit-wrap .nowrap{white-space:nowrap;font-size:12px;line-height:inherit}span.imgedit-scale-warn{color:#dc3232;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-save-target{margin:8px 0}.imgedit-group{margin-bottom:8px;padding:10px}.imgedit-settings .imgedit-crop-ratio input[type=text],.imgedit-settings .imgedit-crop-sel input[type=text],.imgedit-settings .imgedit-scale input[type=text]{width:50px;font-size:14px;padding:5px 8px}.imgedit-separator{display:inline-block;width:7px;text-align:center;vertical-align:middle;font-size:13px;color:#444}.imgedit-settings .imgedit-scale .button{margin-bottom:0}audio,video{display:inline-block;max-width:100%}.mejs-container{width:100%;max-width:100%}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.imgedit-wait:before{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}.media-upload-form .media-item .error,.media-upload-form .media-item.error{font-size:13px;line-height:1.5}.media-upload-form .media-item.error{padding:1px 10px}.media-upload-form .media-item .error{padding:10px 0 10px 12px}.imgedit-settings .imgedit-crop-ratio input[type=text],.imgedit-settings .imgedit-crop-sel input[type=text],.imgedit-settings .imgedit-scale input[type=text]{width:60px;font-size:16px;padding:6px 10px}.imgedit-applyto .imgedit-label{vertical-align:middle}}@media only screen and (max-width:1120px){#wp-media-grid .wp-filter .attachment-filters{max-width:100%}}@media only screen and (max-width:782px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:46px;right:10px}}@media only screen and (max-width:600px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:0}}@media only screen and (max-width:480px){.edit-attachment-frame .media-frame-title{right:110px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{width:40px;height:40px}.upload-php .media-modal-close .media-modal-icon{margin:9px 10px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{line-height:40px!important}.edit-attachment-frame .edit-media-header .left{right:82px}.edit-attachment-frame .edit-media-header .right{right:41px}.edit-attachment-frame .media-frame-content{top:40px}.edit-attachment-frame .attachment-media-view{float:none;height:auto;width:100%}.edit-attachment-frame .attachment-info{height:auto;width:100%}}@media only screen and (max-width:640px),screen and (max-height:400px){.upload-php .mode-grid .media-sidebar{max-width:100%}} \ No newline at end of file diff --git a/wp-admin/css/nav-menus-rtl.css b/wp-admin/css/nav-menus-rtl.css new file mode 100644 index 0000000..dd99b5a --- /dev/null +++ b/wp-admin/css/nav-menus-rtl.css @@ -0,0 +1,901 @@ +/* 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 4px 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; +} + +.has-no-menu-item .button-controls { + display: none; +} + +#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-settings { + border: none; + margin-top: 0; + padding-top: 0; + overflow: hidden; +} + +.is-submenu { + color: #555d66; /* #fafafa background */ + font-style: italic; + font-weight: 400; + margin-right: 4px; +} + +.manage-menus { + margin-top: 23px; + padding: 10px; + overflow: hidden; + background: #fbfbfb; +} + +.manage-menus .selected-menu, +.manage-menus select, +.manage-menus .submit-btn, +.nav-menus-php .add-new-menu-action { + display: inline-block; + margin-left: 3px; + vertical-align: middle; +} + +.manage-menus select, +.menu-location-menus select { + max-width: 100%; +} + +.menu-edit #post-body-content h3 { + margin: 1em 0 10px; +} + +.menu-settings { + border-top: 1px solid #eee; + margin-top: 2em; +} + +.menu-settings-group { + margin: 0 0 10px; + overflow: hidden; + padding-right: 20%; +} + +.menu-settings-group:last-of-type { + margin-bottom: 0; +} + +.menu-settings-input { + float: right; + margin: 0; + width: 100%; +} + +.menu-settings-group-name { + float: right; + clear: both; + width: 25%; + padding: 3px 0 0; + margin-right: -25%; /* 20 container left padding x ( 100 container % width / 80 this % width ) */ +} + +.menu-settings label { + vertical-align: baseline; +} + +.menu-edit .checkbox-input { + margin-top: 4px; +} + +.theme-location-set { + color: #72777c; + font-size: 11px; +} + +/* Menu Container */ + +/* @todo: responsive view. */ +#menu-management-liquid { + float: right; + min-width: 100%; + margin-top: 3px; +} + +/* @todo: responsive view. */ +#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 #ddd; + background: #fff; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; +} + +#nav-menu-header { + border-bottom: 1px solid #ddd; + margin-bottom: 0; +} + +#nav-menu-header .menu-name-label { + display: inline-block; + vertical-align: middle; + margin-left: 7px; + font-style: italic; +} + +.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 .menu-locations .menu-location-title { + padding: 13px 10px 0; +} + +.menu-location-title label { + font-weight: 600; +} + +.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; +} + +#menu-management .inside { + padding: 0 10px; +} + +/* Add Menu Item Boxes */ +.postbox .howto input, +.customlinkdiv .menu-item-textbox { + width: 180px; + float: left; +} + +.accordion-container .outer-border { + margin: 0; +} + +.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; +} + +/* @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; +} + +.button-controls { + clear:both; + margin: 10px 0; +} + +.show-all, +.hide-all { + cursor: pointer; +} + +.hide-all { + display: none; +} + +/* Create Menu */ +#menu-name { + width: 270px; + vertical-align: middle; +} + +#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; +} + +.customlinkdiv label, +.nav-menus-php .howto span { + float: right; + margin-top: 6px; +} + +/* Menu item types */ +.quick-search { + width: 190px; +} + +.quick-search-wrap .spinner { + float: none; + margin: -3px 0 0 -10px; +} + +.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 #ddd; + position: relative; + padding: 10px 15px; + height: auto; + min-height: 20px; + 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; + /* @todo: responsive view. */ + margin-left: 13em; +} + +.menu-item-handle .menu-item-title.no-title { + color: #72777c; +} + +/* Sortables */ +li.menu-item.ui-sortable-helper .menu-item-bar { + margin-top: 0; +} + +li.menu-item.ui-sortable-helper .menu-item-transport .menu-item-bar { + margin-top: 13px; +} + +.menu .sortable-placeholder { + height: 35px; + width: 410px; + margin-top: 13px; +} + +/* Hide the transport list when it's empty */ +.menu-item .menu-item-transport:empty { + display: none; +} + +/* 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 { + display: inline-block; + padding: 12px 16px; + color: #666; + font-size: 12px; + line-height: 18px; +} + +.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; + outline: none; +} + +.no-js.nav-menus-php .item-edit { + position: static; + float: left; + width: auto; + height: auto; + margin: 12px 0 12px -10px; + padding: 0; + color: #0073aa; + text-decoration: underline; + font-size: 12px; + line-height: 18px; +} + +.no-js.nav-menus-php .item-edit .screen-reader-text { + position: static; + -webkit-clip-path: none; + clip-path: none; + width: auto; + height: auto; + margin: 0; +} + +.nav-menus-php .item-edit:before { + margin-top: 10px; + margin-right: 4px; + width: 20px; + border-radius: 50%; + text-indent: -1px; /* account for the dashicon alignment */ +} + +.no-js.nav-menus-php .item-edit:before { + display: none; +} + +.rtl .nav-menus-php .item-edit:before { + text-indent: 1px; /* account for the dashicon alignment */ +} + +.js.nav-menus-php .item-edit:focus { + box-shadow: none; +} + +.nav-menus-php .item-edit:focus:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +/* 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; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +.menu-item-settings .field-move { + margin: 3px 0 5px; + line-height: 1.5; +} + +.field-move-visual-label { + float: right; + margin-left: 4px; + font-style: italic; +} + +.menu-item-settings .field-move .button-link { + display: none; + margin: 0 2px; + font-style: italic; +} + +.menu-item-edit-active .menu-item-settings { + display: block; +} + +.menu-item-edit-inactive .menu-item-settings { + display: none; +} + +.add-menu-item-pagelinks { + margin: .5em -10px; + text-align: center; +} + +.add-menu-item-pagelinks .page-numbers { + display: inline-block; + min-width: 20px; +} + +.add-menu-item-pagelinks .page-numbers.dots { + min-width: 0; +} + +.link-to-original { + display: block; + margin: 0 0 15px; + padding: 3px 5px 5px; + border: 1px solid #ddd; + color: #72777c; + 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; +} + +.description-wide { + width: 390px; +} + +.menu-item-actions { + padding-top: 15px; + padding-bottom: 7px; +} + +#cancel-save { + cursor: pointer; +} + +/* Major/minor publishing actions (classes) */ +.nav-menus-php .major-publishing-actions { + clear: both; + padding: 10px 0; + line-height: 28px; +} + +.nav-menus-php .major-publishing-actions .publishing-action { + text-align: left; + float: left; +} + +.nav-menus-php .blank-slate .menu-settings { + display: none; +} + +/* Same as the Publish Meta Box #delete-action */ +.nav-menus-php .delete-action { + float: right; + line-height: 28px; +} + +.nav-menus-php .major-publishing-actions .form-invalid { + padding-right: 4px; + margin-right: -4px; +} + +#nav-menus-frame, +.button-controls, +#menu-item-url-wrap, +#menu-item-name-wrap { + display: block; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media only screen and (min-width: 769px) and (max-width: 1000px){ + body.menu-max-depth-0 { + min-width: 0 !important; + } + + #menu-management-liquid{ + width: 100%; + } + + .nav-menus-php #post-body-content{ + min-width: 0; + } + + .menu-item-bar .menu-item-handle{ + width: 90%; + } +} + +@media screen and ( max-width: 782px ) { + body.nav-menus-php, + body.wp-customizer { + 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 .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 { + width: 100%; + } + + .nav-menus-php .major-publishing-actions .publishing-action { + padding-top: 1em; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 30px; + } + + .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%; + } + + .menu-item-settings input { + width: 100%; + } + + .menu-item-settings input[type="checkbox"], + .menu-item-settings input[type="radio"] { + width: 25px; + } + + .menu-settings-group { + padding-right: 0; + } + + .menu-settings-group-name { + float: none; + width: auto; + margin-right: 0; + margin-bottom: 15px; + } + + .menu-settings-input { + float: none; + margin-bottom: 15px; + } + + .menu-edit .checkbox-input { + margin-top: 0; + } + + .manage-menus select { + margin: 0.5em 0; + } + + .widefat .menu-locations .menu-location-title { + padding-top: 16px; + } +} + +@media only screen and (max-width: 768px) { + /* menu locations */ + #menu-locations-wrap .widefat { + width: 100%; + } +} diff --git a/wp-admin/css/nav-menus-rtl.min.css b/wp-admin/css/nav-menus-rtl.min.css new file mode 100644 index 0000000..388d1bd --- /dev/null +++ b/wp-admin/css/nav-menus-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.no-js #message{display:block}ul.add-menu-item-tabs li{padding:3px 8px 4px 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}.has-no-menu-item .button-controls{display:none}#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-settings{border:none;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{color:#555d66;font-style:italic;font-weight:400;margin-right:4px}#menu-management .menu-add-new abbr,.menu-location-title label{font-weight:600}.manage-menus{margin-top:23px;padding:10px;overflow:hidden;background:#fbfbfb}.manage-menus .selected-menu,.manage-menus .submit-btn,.manage-menus select,.nav-menus-php .add-new-menu-action{display:inline-block;margin-left:3px;vertical-align:middle}.manage-menus select,.menu-location-menus select{max-width:100%}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top:1px solid #eee;margin-top:2em}.menu-settings-group{margin:0 0 10px;overflow:hidden;padding-right:20%}.menu-settings-group:last-of-type{margin-bottom:0}.menu-settings-input{float:right;margin:0;width:100%}.menu-settings-group-name{float:right;clear:both;width:25%;padding:3px 0 0;margin-right:-25%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{color:#72777c;font-size:11px}#add-custom-link .howto,#cancel-save{font-size:12px}#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 #ddd;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px}#nav-menu-header{border-bottom:1px solid #ddd;margin-bottom:0}#nav-menu-header .menu-name-label{display:inline-block;vertical-align:middle;margin-left:7px;font-style:italic}.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}#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 .menu-locations .menu-location-title{padding:13px 10px 0}.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}#menu-management .inside{padding:0 10px}.customlinkdiv .menu-item-textbox,.postbox .howto input{width:180px;float:left}.accordion-container .outer-border{margin:0}.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}#cancel-save{text-decoration:underline;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}.button-controls{clear:both;margin:10px 0}.hide-all,.show-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px;vertical-align:middle}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link label span{display:block;float:right;margin-top:5px;padding-left:5px}.menu-item-textbox{width:180px}.customlinkdiv label,.nav-menus-php .howto span{float:right;margin-top:6px}.quick-search{width:190px}.quick-search-wrap .spinner{float:none;margin:-3px 0 0 -10px}.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 0 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 #ddd;position:relative;padding:10px 15px;height:auto;min-height:20px;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}#cancel-save,.item-controls a:hover{cursor:pointer}.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}.menu-item-handle .menu-item-title.no-title{color:#72777c}li.menu-item.ui-sortable-helper .menu-item-bar{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport .menu-item-bar{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item .menu-item-transport:empty{display:none}.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{display:inline-block;padding:12px 16px;color:#666;font-size:12px;line-height:18px}.item-controls{font-size:12px;position:absolute;left:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls .item-order{padding-left:10px}.nav-menus-php .item-edit{position:absolute;left:-20px;top:0;display:block;width:30px;height:40px;outline:0}.no-js.nav-menus-php .item-edit{position:static;float:left;width:auto;height:auto;margin:12px 0 12px -10px;padding:0;color:#0073aa;text-decoration:underline;font-size:12px;line-height:18px}.no-js.nav-menus-php .item-edit .screen-reader-text{position:static;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}.nav-menus-php .item-edit:before{margin-top:10px;margin-right:4px;width:20px;border-radius:50%;text-indent:-1px}.no-js.nav-menus-php .item-edit:before{display:none}.rtl .nav-menus-php .item-edit:before{text-indent:1px}.js.nav-menus-php .item-edit:focus{box-shadow:none}.nav-menus-php .item-edit:focus:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.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:none;box-shadow:0 1px 1px rgba(0,0,0,.04)}.menu-item-settings .field-move{margin:3px 0 5px;line-height:1.5}.field-move-visual-label{float:right;margin-left:4px;font-style:italic}.menu-item-settings .field-move .button-link{display:none;margin:0 2px;font-style:italic}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em -10px;text-align:center}.add-menu-item-pagelinks .page-numbers{display:inline-block;min-width:20px}.add-menu-item-pagelinks .page-numbers.dots{min-width:0}.link-to-original{display:block;margin:0 0 15px;padding:3px 5px 5px;border:1px solid #ddd;color:#72777c;font-size:12px;font-style:italic}.hidden-field,.nav-menus-php .blank-slate .menu-settings{display:none}.link-to-original a{padding-right:4px;font-style:normal}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-left:10px;float:right}.description-thin{width:190px}.description-wide{width:390px}.menu-item-actions{padding-top:15px;padding-bottom:7px}.nav-menus-php .major-publishing-actions{clear:both;padding:10px 0;line-height:28px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:left;float:left}.nav-menus-php .delete-action{float:right;line-height:28px}.nav-menus-php .major-publishing-actions .form-invalid{padding-right:4px;margin-right:-4px}#menu-item-name-wrap,#menu-item-url-wrap,#nav-menus-frame,.button-controls{display:block}@media only screen and (min-width:769px) and (max-width:1000px){body.menu-max-depth-0{min-width:0!important}#menu-management-liquid{width:100%}.nav-menus-php #post-body-content{min-width:0}.menu-item-bar .menu-item-handle{width:90%}}@media screen and (max-width:782px){body.nav-menus-php,body.wp-customizer{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}.menu-settings-group-name,.menu-settings-input{float:none;margin-bottom:15px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.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{width:100%}.nav-menus-php .major-publishing-actions .publishing-action{padding-top:1em}.nav-menus-php .delete-action{font-size:14px;line-height:30px}.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,.menu-item-settings input{width:100%}.menu-item-settings input[type=checkbox],.menu-item-settings input[type=radio]{width:25px}.menu-settings-group{padding-right:0}.menu-settings-group-name{width:auto;margin-right:0}.menu-edit .checkbox-input{margin-top:0}.manage-menus select{margin:.5em 0}.widefat .menu-locations .menu-location-title{padding-top:16px}}@media only screen and (max-width:768px){#menu-locations-wrap .widefat{width:100%}} \ No newline at end of file diff --git a/wp-admin/css/nav-menus.css b/wp-admin/css/nav-menus.css new file mode 100644 index 0000000..4021b03 --- /dev/null +++ b/wp-admin/css/nav-menus.css @@ -0,0 +1,901 @@ +/* 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 4px 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; +} + +.has-no-menu-item .button-controls { + display: none; +} + +#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-settings { + border: none; + margin-top: 0; + padding-top: 0; + overflow: hidden; +} + +.is-submenu { + color: #555d66; /* #fafafa background */ + font-style: italic; + font-weight: 400; + margin-left: 4px; +} + +.manage-menus { + margin-top: 23px; + padding: 10px; + overflow: hidden; + background: #fbfbfb; +} + +.manage-menus .selected-menu, +.manage-menus select, +.manage-menus .submit-btn, +.nav-menus-php .add-new-menu-action { + display: inline-block; + margin-right: 3px; + vertical-align: middle; +} + +.manage-menus select, +.menu-location-menus select { + max-width: 100%; +} + +.menu-edit #post-body-content h3 { + margin: 1em 0 10px; +} + +.menu-settings { + border-top: 1px solid #eee; + margin-top: 2em; +} + +.menu-settings-group { + margin: 0 0 10px; + overflow: hidden; + padding-left: 20%; +} + +.menu-settings-group:last-of-type { + margin-bottom: 0; +} + +.menu-settings-input { + float: left; + margin: 0; + width: 100%; +} + +.menu-settings-group-name { + float: left; + clear: both; + width: 25%; + padding: 3px 0 0; + margin-left: -25%; /* 20 container left padding x ( 100 container % width / 80 this % width ) */ +} + +.menu-settings label { + vertical-align: baseline; +} + +.menu-edit .checkbox-input { + margin-top: 4px; +} + +.theme-location-set { + color: #72777c; + font-size: 11px; +} + +/* Menu Container */ + +/* @todo: responsive view. */ +#menu-management-liquid { + float: left; + min-width: 100%; + margin-top: 3px; +} + +/* @todo: responsive view. */ +#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 #ddd; + background: #fff; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; +} + +#nav-menu-header { + border-bottom: 1px solid #ddd; + margin-bottom: 0; +} + +#nav-menu-header .menu-name-label { + display: inline-block; + vertical-align: middle; + margin-right: 7px; + font-style: italic; +} + +.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 .menu-locations .menu-location-title { + padding: 13px 10px 0; +} + +.menu-location-title label { + font-weight: 600; +} + +.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; +} + +#menu-management .inside { + padding: 0 10px; +} + +/* Add Menu Item Boxes */ +.postbox .howto input, +.customlinkdiv .menu-item-textbox { + width: 180px; + float: right; +} + +.accordion-container .outer-border { + margin: 0; +} + +.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; +} + +/* @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; +} + +.button-controls { + clear:both; + margin: 10px 0; +} + +.show-all, +.hide-all { + cursor: pointer; +} + +.hide-all { + display: none; +} + +/* Create Menu */ +#menu-name { + width: 270px; + vertical-align: middle; +} + +#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; +} + +.customlinkdiv label, +.nav-menus-php .howto span { + float: left; + margin-top: 6px; +} + +/* Menu item types */ +.quick-search { + width: 190px; +} + +.quick-search-wrap .spinner { + float: none; + margin: -3px -10px 0 0; +} + +.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 #ddd; + position: relative; + padding: 10px 15px; + height: auto; + min-height: 20px; + 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; + /* @todo: responsive view. */ + margin-right: 13em; +} + +.menu-item-handle .menu-item-title.no-title { + color: #72777c; +} + +/* Sortables */ +li.menu-item.ui-sortable-helper .menu-item-bar { + margin-top: 0; +} + +li.menu-item.ui-sortable-helper .menu-item-transport .menu-item-bar { + margin-top: 13px; +} + +.menu .sortable-placeholder { + height: 35px; + width: 410px; + margin-top: 13px; +} + +/* Hide the transport list when it's empty */ +.menu-item .menu-item-transport:empty { + display: none; +} + +/* 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 { + display: inline-block; + padding: 12px 16px; + color: #666; + font-size: 12px; + line-height: 18px; +} + +.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; + outline: none; +} + +.no-js.nav-menus-php .item-edit { + position: static; + float: right; + width: auto; + height: auto; + margin: 12px -10px 12px 0; + padding: 0; + color: #0073aa; + text-decoration: underline; + font-size: 12px; + line-height: 18px; +} + +.no-js.nav-menus-php .item-edit .screen-reader-text { + position: static; + -webkit-clip-path: none; + clip-path: none; + width: auto; + height: auto; + margin: 0; +} + +.nav-menus-php .item-edit:before { + margin-top: 10px; + margin-left: 4px; + width: 20px; + border-radius: 50%; + text-indent: -1px; /* account for the dashicon alignment */ +} + +.no-js.nav-menus-php .item-edit:before { + display: none; +} + +.rtl .nav-menus-php .item-edit:before { + text-indent: 1px; /* account for the dashicon alignment */ +} + +.js.nav-menus-php .item-edit:focus { + box-shadow: none; +} + +.nav-menus-php .item-edit:focus:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +/* 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; + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +.menu-item-settings .field-move { + margin: 3px 0 5px; + line-height: 1.5; +} + +.field-move-visual-label { + float: left; + margin-right: 4px; + font-style: italic; +} + +.menu-item-settings .field-move .button-link { + display: none; + margin: 0 2px; + font-style: italic; +} + +.menu-item-edit-active .menu-item-settings { + display: block; +} + +.menu-item-edit-inactive .menu-item-settings { + display: none; +} + +.add-menu-item-pagelinks { + margin: .5em -10px; + text-align: center; +} + +.add-menu-item-pagelinks .page-numbers { + display: inline-block; + min-width: 20px; +} + +.add-menu-item-pagelinks .page-numbers.dots { + min-width: 0; +} + +.link-to-original { + display: block; + margin: 0 0 15px; + padding: 3px 5px 5px; + border: 1px solid #ddd; + color: #72777c; + 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; +} + +.description-wide { + width: 390px; +} + +.menu-item-actions { + padding-top: 15px; + padding-bottom: 7px; +} + +#cancel-save { + cursor: pointer; +} + +/* Major/minor publishing actions (classes) */ +.nav-menus-php .major-publishing-actions { + clear: both; + padding: 10px 0; + line-height: 28px; +} + +.nav-menus-php .major-publishing-actions .publishing-action { + text-align: right; + float: right; +} + +.nav-menus-php .blank-slate .menu-settings { + display: none; +} + +/* Same as the Publish Meta Box #delete-action */ +.nav-menus-php .delete-action { + float: left; + line-height: 28px; +} + +.nav-menus-php .major-publishing-actions .form-invalid { + padding-left: 4px; + margin-left: -4px; +} + +#nav-menus-frame, +.button-controls, +#menu-item-url-wrap, +#menu-item-name-wrap { + display: block; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media only screen and (min-width: 769px) and (max-width: 1000px){ + body.menu-max-depth-0 { + min-width: 0 !important; + } + + #menu-management-liquid{ + width: 100%; + } + + .nav-menus-php #post-body-content{ + min-width: 0; + } + + .menu-item-bar .menu-item-handle{ + width: 90%; + } +} + +@media screen and ( max-width: 782px ) { + body.nav-menus-php, + body.wp-customizer { + 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 .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 { + width: 100%; + } + + .nav-menus-php .major-publishing-actions .publishing-action { + padding-top: 1em; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 30px; + } + + .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%; + } + + .menu-item-settings input { + width: 100%; + } + + .menu-item-settings input[type="checkbox"], + .menu-item-settings input[type="radio"] { + width: 25px; + } + + .menu-settings-group { + padding-left: 0; + } + + .menu-settings-group-name { + float: none; + width: auto; + margin-left: 0; + margin-bottom: 15px; + } + + .menu-settings-input { + float: none; + margin-bottom: 15px; + } + + .menu-edit .checkbox-input { + margin-top: 0; + } + + .manage-menus select { + margin: 0.5em 0; + } + + .widefat .menu-locations .menu-location-title { + padding-top: 16px; + } +} + +@media only screen and (max-width: 768px) { + /* menu locations */ + #menu-locations-wrap .widefat { + width: 100%; + } +} diff --git a/wp-admin/css/nav-menus.min.css b/wp-admin/css/nav-menus.min.css new file mode 100644 index 0000000..94d637a --- /dev/null +++ b/wp-admin/css/nav-menus.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.no-js #message{display:block}ul.add-menu-item-tabs li{padding:3px 5px 4px 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}.has-no-menu-item .button-controls{display:none}#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-settings{border:none;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{color:#555d66;font-style:italic;font-weight:400;margin-left:4px}#menu-management .menu-add-new abbr,.menu-location-title label{font-weight:600}.manage-menus{margin-top:23px;padding:10px;overflow:hidden;background:#fbfbfb}.manage-menus .selected-menu,.manage-menus .submit-btn,.manage-menus select,.nav-menus-php .add-new-menu-action{display:inline-block;margin-right:3px;vertical-align:middle}.manage-menus select,.menu-location-menus select{max-width:100%}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top:1px solid #eee;margin-top:2em}.menu-settings-group{margin:0 0 10px;overflow:hidden;padding-left:20%}.menu-settings-group:last-of-type{margin-bottom:0}.menu-settings-input{float:left;margin:0;width:100%}.menu-settings-group-name{float:left;clear:both;width:25%;padding:3px 0 0;margin-left:-25%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{color:#72777c;font-size:11px}#add-custom-link .howto,#cancel-save{font-size:12px}#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 #ddd;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px}#nav-menu-header{border-bottom:1px solid #ddd;margin-bottom:0}#nav-menu-header .menu-name-label{display:inline-block;vertical-align:middle;margin-right:7px;font-style:italic}.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}#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 .menu-locations .menu-location-title{padding:13px 10px 0}.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}#menu-management .inside{padding:0 10px}.customlinkdiv .menu-item-textbox,.postbox .howto input{width:180px;float:right}.accordion-container .outer-border{margin:0}.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}#cancel-save{text-decoration:underline;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}.button-controls{clear:both;margin:10px 0}.hide-all,.show-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px;vertical-align:middle}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px}.menu-item-textbox{width:180px}.customlinkdiv label,.nav-menus-php .howto span{float:left;margin-top:6px}.quick-search{width:190px}.quick-search-wrap .spinner{float:none;margin:-3px -10px 0 0}.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 0 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 #ddd;position:relative;padding:10px 15px;height:auto;min-height:20px;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}#cancel-save,.item-controls a:hover{cursor:pointer}.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}.menu-item-handle .menu-item-title.no-title{color:#72777c}li.menu-item.ui-sortable-helper .menu-item-bar{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport .menu-item-bar{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item .menu-item-transport:empty{display:none}.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{display:inline-block;padding:12px 16px;color:#666;font-size:12px;line-height:18px}.item-controls{font-size:12px;position:absolute;right:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls .item-order{padding-right:10px}.nav-menus-php .item-edit{position:absolute;right:-20px;top:0;display:block;width:30px;height:40px;outline:0}.no-js.nav-menus-php .item-edit{position:static;float:right;width:auto;height:auto;margin:12px -10px 12px 0;padding:0;color:#0073aa;text-decoration:underline;font-size:12px;line-height:18px}.no-js.nav-menus-php .item-edit .screen-reader-text{position:static;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}.nav-menus-php .item-edit:before{margin-top:10px;margin-left:4px;width:20px;border-radius:50%;text-indent:-1px}.no-js.nav-menus-php .item-edit:before{display:none}.rtl .nav-menus-php .item-edit:before{text-indent:1px}.js.nav-menus-php .item-edit:focus{box-shadow:none}.nav-menus-php .item-edit:focus:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.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:none;box-shadow:0 1px 1px rgba(0,0,0,.04)}.menu-item-settings .field-move{margin:3px 0 5px;line-height:1.5}.field-move-visual-label{float:left;margin-right:4px;font-style:italic}.menu-item-settings .field-move .button-link{display:none;margin:0 2px;font-style:italic}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em -10px;text-align:center}.add-menu-item-pagelinks .page-numbers{display:inline-block;min-width:20px}.add-menu-item-pagelinks .page-numbers.dots{min-width:0}.link-to-original{display:block;margin:0 0 15px;padding:3px 5px 5px;border:1px solid #ddd;color:#72777c;font-size:12px;font-style:italic}.hidden-field,.nav-menus-php .blank-slate .menu-settings{display:none}.link-to-original a{padding-left:4px;font-style:normal}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left}.description-thin{width:190px}.description-wide{width:390px}.menu-item-actions{padding-top:15px;padding-bottom:7px}.nav-menus-php .major-publishing-actions{clear:both;padding:10px 0;line-height:28px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right}.nav-menus-php .delete-action{float:left;line-height:28px}.nav-menus-php .major-publishing-actions .form-invalid{padding-left:4px;margin-left:-4px}#menu-item-name-wrap,#menu-item-url-wrap,#nav-menus-frame,.button-controls{display:block}@media only screen and (min-width:769px) and (max-width:1000px){body.menu-max-depth-0{min-width:0!important}#menu-management-liquid{width:100%}.nav-menus-php #post-body-content{min-width:0}.menu-item-bar .menu-item-handle{width:90%}}@media screen and (max-width:782px){body.nav-menus-php,body.wp-customizer{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}.menu-settings-group-name,.menu-settings-input{float:none;margin-bottom:15px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.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{width:100%}.nav-menus-php .major-publishing-actions .publishing-action{padding-top:1em}.nav-menus-php .delete-action{font-size:14px;line-height:30px}.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,.menu-item-settings input{width:100%}.menu-item-settings input[type=checkbox],.menu-item-settings input[type=radio]{width:25px}.menu-settings-group{padding-left:0}.menu-settings-group-name{width:auto;margin-left:0}.menu-edit .checkbox-input{margin-top:0}.manage-menus select{margin:.5em 0}.widefat .menu-locations .menu-location-title{padding-top:16px}}@media only screen and (max-width:768px){#menu-locations-wrap .widefat{width:100%}} \ No newline at end of file diff --git a/wp-admin/css/revisions-rtl.css b/wp-admin/css/revisions-rtl.css new file mode 100644 index 0000000..537d993 --- /dev/null +++ b/wp-admin/css/revisions-rtl.css @@ -0,0 +1,578 @@ +/*------------------------------------------------------------------------------ + 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; + 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%; + box-sizing: border-box; + background-color: #fff; +} + +.revisions-tickmarks > div { + position: absolute; + height: 100%; + border-right: 1px solid #a0a5aa; + 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: absolute; + vertical-align: middle; + opacity: 0; + width: 100%; + width: calc( 100% - 30px ); + top: 50%; + top: calc( 50% - 10px ); + 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 { + 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; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions.pinned .revisions-meta { + 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: #72777c; +} + +.revisions-controls .author-card.autosave { + color: #d54e21; +} + +.revisions-controls .author-card .author-name { + font-weight: 600; +} + +.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; + 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); + 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 #ddd; + 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; + 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); + 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 #ddd; + text-align: right; + cursor: pointer; +} + +.wp-slider .ui-slider-handle { + border-radius: 50%; + height: 18px; + margin-top: -5px; + outline: none; + padding: 2px; + position: absolute; + width: 18px; + z-index: 2; + touch-action: none; +} + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.focus { + background: #f7f7f7; + border: 1px solid #ccc; + box-shadow: 0 1px 0 #cccccc; +} + +.wp-slider .ui-slider-handle:hover, +.wp-slider .ui-slider-handle.ui-state-hover { + background: #fafafa; + border-color: #999; +} + +.wp-slider .ui-slider-handle:active, +.wp-slider .ui-slider-handle.ui-state-active { + background: #eee; + border-color: #999; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + -webkit-transform: translateY(1px); + transform: translateY(1px); +} + + +.wp-slider .ui-slider-handle:before { + background: none; + position: absolute; + top: 2px; + right: 2px; + color: #555; + content: "\f229"; + font: normal 18px/1 dashicons; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-slider .ui-slider-handle:hover:before, +.wp-slider .ui-slider-handle.ui-state-hover:before { + color: #23282d; +} + +.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: "\f141"; +} + +.wp-slider .ui-slider-handle.to-handle:before { + content: "\f139"; +} + +.rtl .wp-slider .ui-slider-handle.from-handle:before { + content: "\f139"; +} + +.rtl .wp-slider .ui-slider-handle.to-handle:before { + content: "\f141"; + 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, + (-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-rtl.min.css b/wp-admin/css/revisions-rtl.min.css new file mode 100644 index 0000000..0f6f251 --- /dev/null +++ b/wp-admin/css/revisions-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;box-sizing:border-box;background-color:#fff}.revisions-tickmarks>div{position:absolute;height:100%;border-right:1px solid #a0a5aa;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:absolute;vertical-align:middle;opacity:0;width:100%;width:calc(100% - 30px);top:50%;top:calc(50% - 10px);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{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;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions.pinned .revisions-meta{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:#72777c}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:600}.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;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);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 #ddd;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.top{top:-16px;bottom:auto}.arrow.left{right:20%}.arrow:after{z-index:9999;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1);content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-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 #ddd;text-align:right;cursor:pointer}.wp-slider .ui-slider-handle{border-radius:50%;height:18px;margin-top:-5px;outline:0;padding:2px;position:absolute;width:18px;z-index:2;touch-action:none}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus{background:#f7f7f7;border:1px solid #ccc;box-shadow:0 1px 0 #ccc}.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle:hover{background:#fafafa;border-color:#999}.wp-slider .ui-slider-handle.ui-state-active,.wp-slider .ui-slider-handle:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:2px;right:2px;color:#555;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.ui-state-hover:before,.wp-slider .ui-slider-handle:hover:before{color:#23282d}.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:"\f141"}.wp-slider .ui-slider-handle.to-handle:before{content:"\f139"}.rtl .wp-slider .ui-slider-handle.from-handle:before{content:"\f139"}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:"\f141";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,(-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}} \ No newline at end of file diff --git a/wp-admin/css/revisions.css b/wp-admin/css/revisions.css new file mode 100644 index 0000000..236d762 --- /dev/null +++ b/wp-admin/css/revisions.css @@ -0,0 +1,578 @@ +/*------------------------------------------------------------------------------ + 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; + 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%; + box-sizing: border-box; + background-color: #fff; +} + +.revisions-tickmarks > div { + position: absolute; + height: 100%; + border-left: 1px solid #a0a5aa; + 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: absolute; + vertical-align: middle; + opacity: 0; + width: 100%; + width: calc( 100% - 30px ); + top: 50%; + top: calc( 50% - 10px ); + 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 { + 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; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions.pinned .revisions-meta { + 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: #72777c; +} + +.revisions-controls .author-card.autosave { + color: #d54e21; +} + +.revisions-controls .author-card .author-name { + font-weight: 600; +} + +.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; + 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); + 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 #ddd; + 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; + 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); + 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 #ddd; + text-align: left; + cursor: pointer; +} + +.wp-slider .ui-slider-handle { + border-radius: 50%; + height: 18px; + margin-top: -5px; + outline: none; + padding: 2px; + position: absolute; + width: 18px; + z-index: 2; + touch-action: none; +} + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.focus { + background: #f7f7f7; + border: 1px solid #ccc; + box-shadow: 0 1px 0 #cccccc; +} + +.wp-slider .ui-slider-handle:hover, +.wp-slider .ui-slider-handle.ui-state-hover { + background: #fafafa; + border-color: #999; +} + +.wp-slider .ui-slider-handle:active, +.wp-slider .ui-slider-handle.ui-state-active { + background: #eee; + border-color: #999; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + -webkit-transform: translateY(1px); + transform: translateY(1px); +} + + +.wp-slider .ui-slider-handle:before { + background: none; + position: absolute; + top: 2px; + left: 2px; + color: #555; + content: "\f229"; + font: normal 18px/1 dashicons; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-slider .ui-slider-handle:hover:before, +.wp-slider .ui-slider-handle.ui-state-hover:before { + color: #23282d; +} + +.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, + (-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.min.css b/wp-admin/css/revisions.min.css new file mode 100644 index 0000000..9192e4a --- /dev/null +++ b/wp-admin/css/revisions.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;box-sizing:border-box;background-color:#fff}.revisions-tickmarks>div{position:absolute;height:100%;border-left:1px solid #a0a5aa;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:absolute;vertical-align:middle;opacity:0;width:100%;width:calc(100% - 30px);top:50%;top:calc(50% - 10px);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{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;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions.pinned .revisions-meta{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:#72777c}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:600}.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;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);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 #ddd;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.top{top:-16px;bottom:auto}.arrow.left{left:20%}.arrow:after{z-index:9999;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1);content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-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 #ddd;text-align:left;cursor:pointer}.wp-slider .ui-slider-handle{border-radius:50%;height:18px;margin-top:-5px;outline:0;padding:2px;position:absolute;width:18px;z-index:2;touch-action:none}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus{background:#f7f7f7;border:1px solid #ccc;box-shadow:0 1px 0 #ccc}.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle:hover{background:#fafafa;border-color:#999}.wp-slider .ui-slider-handle.ui-state-active,.wp-slider .ui-slider-handle:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:2px;left:2px;color:#555;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.ui-state-hover:before,.wp-slider .ui-slider-handle:hover:before{color:#23282d}.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 print,(-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}} \ No newline at end of file diff --git a/wp-admin/css/site-icon-rtl.css b/wp-admin/css/site-icon-rtl.css new file mode 100644 index 0000000..29211f3 --- /dev/null +++ b/wp-admin/css/site-icon-rtl.css @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ + 28.0 - Site Icon +------------------------------------------------------------------------------*/ + +.site-icon-preview .favicon-preview { + margin: 5px 0 20px; + overflow: hidden; + position: relative; + max-width: 180px; +} + +.site-icon-preview .favicon, +.site-icon-preview .browser-title { + height: 16px; + right: 88px; + overflow: hidden; + position: absolute; + top: 16px; +} + +.site-icon-preview .favicon { + width: 16px; +} + +.site-icon-preview .browser-title { + right: 109px; + width: 72px; + white-space: nowrap; +} + +.site-icon-preview .app-icon-preview { + background-color: #000; + border-radius: 16px; + height: 64px; + overflow: hidden; + width: 64px; + margin-top: 5px; +} + +/* rtl:ignore */ +.site-icon-preview .favicon, +.site-icon-preview .app-icon-preview { + direction: ltr; +} + +.customize-control-site_icon .favicon-preview { + float: right; + margin-left: 12px; + margin-bottom: 0; +} + +.customize-control-site_icon .app-icon-preview { + margin-top: 9px; +} diff --git a/wp-admin/css/site-icon-rtl.min.css b/wp-admin/css/site-icon-rtl.min.css new file mode 100644 index 0000000..901a1eb --- /dev/null +++ b/wp-admin/css/site-icon-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.site-icon-preview .favicon-preview{margin:5px 0 20px;overflow:hidden;position:relative;max-width:180px}.site-icon-preview .browser-title,.site-icon-preview .favicon{height:16px;right:88px;overflow:hidden;position:absolute;top:16px}.site-icon-preview .favicon{width:16px}.site-icon-preview .browser-title{right:109px;width:72px;white-space:nowrap}.site-icon-preview .app-icon-preview{background-color:#000;border-radius:16px;height:64px;overflow:hidden;width:64px;margin-top:5px}.site-icon-preview .app-icon-preview,.site-icon-preview .favicon{direction:ltr}.customize-control-site_icon .favicon-preview{float:right;margin-left:12px;margin-bottom:0}.customize-control-site_icon .app-icon-preview{margin-top:9px} \ No newline at end of file diff --git a/wp-admin/css/site-icon.css b/wp-admin/css/site-icon.css new file mode 100644 index 0000000..eae9a57 --- /dev/null +++ b/wp-admin/css/site-icon.css @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ + 28.0 - Site Icon +------------------------------------------------------------------------------*/ + +.site-icon-preview .favicon-preview { + margin: 5px 0 20px; + overflow: hidden; + position: relative; + max-width: 180px; +} + +.site-icon-preview .favicon, +.site-icon-preview .browser-title { + height: 16px; + left: 88px; + overflow: hidden; + position: absolute; + top: 16px; +} + +.site-icon-preview .favicon { + width: 16px; +} + +.site-icon-preview .browser-title { + left: 109px; + width: 72px; + white-space: nowrap; +} + +.site-icon-preview .app-icon-preview { + background-color: #000; + border-radius: 16px; + height: 64px; + overflow: hidden; + width: 64px; + margin-top: 5px; +} + +/* rtl:ignore */ +.site-icon-preview .favicon, +.site-icon-preview .app-icon-preview { + direction: ltr; +} + +.customize-control-site_icon .favicon-preview { + float: left; + margin-right: 12px; + margin-bottom: 0; +} + +.customize-control-site_icon .app-icon-preview { + margin-top: 9px; +} diff --git a/wp-admin/css/site-icon.min.css b/wp-admin/css/site-icon.min.css new file mode 100644 index 0000000..5287d07 --- /dev/null +++ b/wp-admin/css/site-icon.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.site-icon-preview .favicon-preview{margin:5px 0 20px;overflow:hidden;position:relative;max-width:180px}.site-icon-preview .browser-title,.site-icon-preview .favicon{height:16px;left:88px;overflow:hidden;position:absolute;top:16px}.site-icon-preview .favicon{width:16px}.site-icon-preview .browser-title{left:109px;width:72px;white-space:nowrap}.site-icon-preview .app-icon-preview{background-color:#000;border-radius:16px;height:64px;overflow:hidden;width:64px;margin-top:5px}.site-icon-preview .app-icon-preview,.site-icon-preview .favicon{direction:ltr}.customize-control-site_icon .favicon-preview{float:left;margin-right:12px;margin-bottom:0}.customize-control-site_icon .app-icon-preview{margin-top:9px} \ No newline at end of file diff --git a/wp-admin/css/themes-rtl.css b/wp-admin/css/themes-rtl.css new file mode 100644 index 0000000..e6c5ee7 --- /dev/null +++ b/wp-admin/css/themes-rtl.css @@ -0,0 +1,1929 @@ +/*------------------------------------------------------------------------------ + 16.0 - Themes +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 16.1 - Manage Themes +------------------------------------------------------------------------------*/ + +body.js .theme-browser.search-loading { + display: none; +} + +.theme-browser .themes { + clear: both; +} + +.themes-php:not(.network-admin) .wrap h1 { + margin-bottom: 15px; +} + +.themes-php .wrap h1 .button { + margin-right: 20px; +} + +/* Search form */ +.themes-php .search-form { + display: inline; +} + +.themes-php .wp-filter-search { + position: relative; + top: -2px; + right: 20px; + margin: 0; + width: 280px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; +} + +/* Position admin messages */ +.theme .notice, +.theme .notice.is-dismissible { + right: 0; + margin: 0; + position: absolute; + left: 0; + top: 0; +} + +/** + * 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 #ddd; + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + 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; + 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; + transition: opacity 0.1s ease-in-out; + height: auto; + 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 { + 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-backface-visibility: hidden; /* Prevents flicker of the screenshot on hover. */ + 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%; + 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: 20%; + right: 20%; + background: #23282d; + 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; + border-radius: 3px; + transition: opacity 0.1s ease-in-out; +} + +.theme-browser .theme:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 ); +} + +.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; +} + +/** + * The currently active theme + */ +.theme-browser .theme.active .theme-name { + background: #23282d; + color: #fff; + padding-left: 110px; + font-weight: 300; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); +} + +.theme-browser .customize-control .theme.active .theme-name { + padding-left: 15px; +} + +.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-id-container { + position: relative; +} + +.theme-browser .theme.active .theme-actions, +.theme-browser .theme .theme-actions { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + left: 0; + padding: 10px 15px; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); +} + +.theme-browser .theme.active .theme-actions .button-primary { + margin-left: 0; +} + +.theme-browser .theme .theme-author { + background: #23282d; + 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; + box-shadow: none; +} + +.theme-browser .theme.add-new-theme a { + text-decoration: none; + display: block; + position: relative; + z-index: 1; +} + +.theme-browser .theme.add-new-theme a:after { + display: block; + content: ""; + background: transparent; + background: rgba(0, 0, 0, 0); + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + padding: 0; + text-shadow: none; + border: 5px dashed #d5d2ca; + border: 5px dashed rgba(0, 0, 0, 0.1); + box-sizing: border-box; +} + +.theme-browser .theme.add-new-theme span:after { + background: #e5e5e5; + background: rgba(153, 153, 153, 0.1); + 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 a:hover .theme-screenshot, +.theme-browser .theme.add-new-theme a:focus .theme-screenshot { + background: none; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + background: #fff; + color: #0073aa; +} + +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + border-color: transparent; + color: #fff; + background: #0073aa; + content: ""; +} + +.theme-browser .theme.add-new-theme .theme-name { + background: none; + text-align: center; + box-shadow: none; + font-weight: 400; + position: relative; + top: 0; + margin-top: -18px; + padding-top: 0; + padding-bottom: 48px; +} + +.theme-browser .theme.add-new-theme a:hover .theme-name, +.theme-browser .theme.add-new-theme a:focus .theme-name { + color: #fff; + z-index: 2; +} + +/** + * 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: 10000; /* Over WP Pointers. */ +} + +.theme-overlay .theme-header { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 48px; + border-bottom: 1px solid #ddd; +} + +.theme-overlay .theme-header button { + padding: 0; +} + +.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; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.theme-overlay .theme-header .close:before { + font: normal 22px/50px dashicons !important; + color: #72777c; + 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: #72777c; + background-color: transparent; + height: 48px; + width: 54px; + float: right; + text-align: center; + border: 0; + border-left: 1px solid #ddd; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:focus, +.theme-overlay .theme-header .left:hover { + background: #ddd; + border-color: #ccc; + color: #000; +} + +.theme-overlay .theme-header .close:focus:before, +.theme-overlay .theme-header .close:hover:before { + color: #000; +} + +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .left:focus { + box-shadow: none; + outline: none; +} + +.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: "\f345"; +} + +.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; + box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + z-index: 10000; /* Over WP Pointers. */ + box-sizing: border-box; + -webkit-overflow-scrolling: touch; +} + +body.folded .theme-browser ~ .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-actions { + position: absolute; + text-align: center; + bottom: 0; + right: 0; + left: 0; + padding: 10px 25px 5px; + background: #f3f3f3; + z-index: 30; + 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; +} + +/* Hide-if-customize for items we can't add classes to */ +.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"], +.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"] { + display: none; +} + +.broken-themes a.delete-theme, +.theme-overlay .theme-actions .delete-theme { + color: #a00; + text-decoration: none; + border-color: transparent; + box-shadow: none; + background: transparent; +} + +.theme-overlay .theme-actions .delete-theme { + position: absolute; + left: 10px; + bottom: 5px; +} + +.broken-themes a.delete-theme:hover, +.broken-themes a.delete-theme:focus, +.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: 1200px; /* Recommended theme screenshot width, set here to avoid stretching */ + text-align: center; +} + +/* First screenshot, shown big */ +.theme-overlay .screenshot { + border: 1px solid #fff; + box-sizing: border-box; + overflow: hidden; + position: relative; + 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 #00a0d2; +} + +.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: #32373c; + color: #fff; + font-size: 11px; + display: inline-block; + padding: 2px 8px; + 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: #23282d; + font-size: 32px; + font-weight: 100; + margin: 10px 0 0; + line-height: 1.3; + word-wrap: break-word; + overflow-wrap: break-word; +} + +.theme-overlay .theme-version { + color: #72777c; + font-size: 13px; + font-weight: 400; + float: none; + display: inline-block; + margin-right: 10px; +} + +.theme-overlay .theme-author { + margin: 15px 0 25px; + color: #72777c; + font-size: 16px; + font-weight: 400; + line-height: inherit; +} + +.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: #82878c; + font-size: 13px; + font-weight: 400; + margin: 30px 0 0 0; + padding-top: 20px; +} + +.theme-overlay .theme-tags span { + color: #444; + font-weight: 600; + margin-left: 5px; +} + +.theme-overlay .parent-theme { + background: #f7fcfe; + border: 1px solid #eee; + border-right: 4px solid #00a0d2; + font-size: 14px; + font-weight: 400; + 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; + z-index: 10; +} + +.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: 100000; /* should overlap #wpadminbar. */ + 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-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 .wp-filter-search { + float: none; + clear: both; + right: 0; + left: 0; + margin: -5px 0 20px 0; + width: 100%; + max-width: 280px; + } + + .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: #0073aa; +} +.theme-browser .theme .notice-success p:before { + color: #79ba49; + content: "\f147"; + display: inline-block; + font: normal 20px/1 'dashicons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.theme-install.updated-message:before { + content: ''; +} + +.theme-install-php .wp-filter { + padding-right: 20px; +} + +.theme-install-php a.upload, +.theme-install-php a.browse-themes { + cursor: pointer; +} + +.upload-view-toggle .browse, +.plugin-install-tab-upload .upload-view-toggle .upload { + display: none; +} + +.plugin-install-tab-upload .upload-view-toggle .browse { + display: inline; +} + +.upload-theme, +.upload-plugin { + box-sizing: border-box; + display: none; + margin: 0; + padding: 50px 0; + width: 100%; + overflow: hidden; + position: relative; + top: 10px; +} + +.upload-plugin-wrap { + display: none; +} + +.show-upload-view .upload-theme, +.show-upload-view .upload-plugin, +.show-upload-view .upload-plugin-wrap, +.plugin-install-tab-upload .upload-plugin { + display: block; +} + +.upload-theme .wp-upload-form, +.upload-plugin .wp-upload-form { + background: #fafafa; + border: 1px solid #e5e5e5; + padding: 30px; + margin: 30px auto; + max-width: 380px; +} +.upload-theme .install-help, +.upload-plugin .install-help { + color: #555d66; /* #f1f1f1 background */ + font-size: 18px; + font-style: normal; + margin: 0; + padding: 0; + text-align: center; +} + +p.no-themes, +p.no-themes-local { + clear: both; + color: #666; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 100px 0; + text-align: center; + display: none; +} + +.no-results p.no-themes { + display: block; +} + +.theme-install-php .add-new-theme { + display: none !important; +} + +@media only screen and (max-width: 1120px) { + .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; + } +} + +.theme-details .theme-rating { + line-height: 23px; +} + +.theme-details .star-rating { + display: inline; +} + +.theme-details .num-ratings, +.theme-details .no-rating { + font-size: 11px; + color: #72777c; +} + +.theme-details .no-rating { + display: block; + line-height: 20px; +} + +/*------------------------------------------------------------------------------ + 16.3 - Custom Header Screen +------------------------------------------------------------------------------*/ + +.appearance_page_custom-header #headimg { + border: 1px solid #ddd; + 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 #ddd; +} + +div#custom-background-image img { + max-width: 400px; + max-height: 300px; +} + +.background-position-control input[type="radio"]:checked ~ .button { + background: #eee; + border-color: #999; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, .5 ); + z-index: 1; +} + +.background-position-control input[type="radio"]:focus ~ .button { + border-color: #5b9dd9; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, .5 ), 0 0 3px rgba( 0, 115, 170, .8 ); + color: #23282d; +} + +.background-position-control .background-position-center-icon, +.background-position-control .background-position-center-icon:before { + display: inline-block; + line-height: 1; + text-align: center; + transition: background-color .1s ease-in 0; +} + +.background-position-control .background-position-center-icon { + height: 20px; + margin-top: 13px; + vertical-align: top; + width: 20px; +} + +.background-position-control .background-position-center-icon:before { + background-color: #555; + border-radius: 50%; + content: ""; + height: 12px; + width: 12px; +} + +.background-position-control .button:hover .background-position-center-icon:before, +.background-position-control input[type="radio"]:focus ~ .button .background-position-center-icon:before { + background-color: #23282d; +} + +.background-position-control .button-group { + display: block; +} + +.background-position-control .button-group .button { + border-radius: 0; + box-shadow: none; + /* Following properties are overridden by buttons responsive styles (see: wp-includes/css/buttons.css). */ + height: 40px !important; + line-height: 37px !important; + margin: 0 0 0 -1px !important; + padding: 0 10px 1px !important; + position: relative; +} + +.background-position-control .button-group .button:active, +.background-position-control .button-group .button:hover, +.background-position-control .button-group .button:focus { + z-index: 1; +} + +.background-position-control .button-group:last-child .button { + box-shadow: 0 1px 0 #ccc; +} + +.background-position-control .button-group > label { + margin: 0 !important; +} + +.background-position-control .button-group:first-child > label:first-child .button { + border-radius: 0 3px 0 0; +} + +.background-position-control .button-group:first-child > label:first-child .dashicons { + -webkit-transform: rotate( -45deg ); + transform: rotate( -45deg ); +} + +.background-position-control .button-group:first-child > label:last-child .button { + border-radius: 3px 0 0 0; +} + +.background-position-control .button-group:first-child > label:last-child .dashicons { + -webkit-transform: rotate( 45deg ); + transform: rotate( 45deg ); +} + +.background-position-control .button-group:last-child > label:first-child .button { + border-radius: 0 0 3px 0; +} + +.background-position-control .button-group:last-child > label:first-child .dashicons { + -webkit-transform: rotate( 45deg ); + transform: rotate( 45deg ); +} + +.background-position-control .button-group:last-child > label:last-child .button { + border-radius: 0 0 0 3px; +} + +.background-position-control .button-group:last-child > label:last-child .dashicons { + -webkit-transform: rotate( -45deg ); + transform: rotate( -45deg ); +} + +.background-position-control .button-group .dashicons { + margin-top: 9px; +} + +.background-position-control .button-group + .button-group { + margin-top: -1px; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; + /* Hide all the content, the Customizer overlay is then made visible to be the only available content. */ + visibility: 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 { + box-sizing: border-box; + position: fixed; + min-width: 300px; + max-width: 600px; + width: 18%; + height: 100%; + top: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + z-index: 10; + 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; +} + +@media screen and (min-width: 1667px) { + .wp-full-overlay.expanded { + margin-right: 18%; + } + + .wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-right: -18%; + } +} + +@media screen and (min-width: 3333px) { + .wp-full-overlay.expanded { + margin-right: 600px; + } + + .wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-right: -600px; + } +} + +.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; + 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; + 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 & Navigation Links */ +.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header { + padding: 0; +} + +.theme-install-overlay .close-full-overlay, +.theme-install-overlay .previous-theme, +.theme-install-overlay .next-theme { + display: block; + position: relative; + float: right; + width: 45px; + height: 45px; + padding-left: 2px; + background: #eee; + border-left: 1px solid #ddd; + color: #444; + cursor: pointer; + text-decoration: none; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.theme-install-overlay .close-full-overlay:hover, +.theme-install-overlay .close-full-overlay:focus, +.theme-install-overlay .previous-theme:hover, +.theme-install-overlay .previous-theme:focus, +.theme-install-overlay .next-theme:hover, +.theme-install-overlay .next-theme:focus { + background: #ddd; + border-color: #ccc; + color: #000; + outline: none; + box-shadow: none; +} + +.theme-install-overlay .close-full-overlay:before { + font: normal 22px/1 dashicons; + content: "\f335"; + position: relative; + top: 7px; + right: 13px; +} + +.theme-install-overlay .previous-theme:before { + font: normal 20px/1 dashicons; + content: "\f345"; + position: relative; + top: 6px; + right: 14px; +} + +.theme-install-overlay .next-theme:before { + font: normal 20px/1 dashicons; + content: "\f341"; + position: relative; + top: 6px; + right: 13px; +} + +.theme-install-overlay .previous-theme.disabled, +.theme-install-overlay .next-theme.disabled, +.theme-install-overlay .previous-theme.disabled:hover, +.theme-install-overlay .previous-theme.disabled:focus, +.theme-install-overlay .next-theme.disabled:hover, +.theme-install-overlay .next-theme.disabled:focus { + color: #b4b9be; + background: #eee; + cursor: default; + pointer-events: none; +} + +.theme-install-overlay .close-full-overlay, +.theme-install-overlay .previous-theme, +.theme-install-overlay .next-theme { + border-right: 0; + border-top: 0; + border-bottom: 0; +} + +.theme-install-overlay .close-full-overlay:before, +.theme-install-overlay .previous-theme:before, +.theme-install-overlay .next-theme:before { + top: 2px; + right: 0; +} + +/* Collapse Button */ +.wp-core-ui .wp-full-overlay .collapse-sidebar { + position: fixed; + bottom: 0; + right: 0; + padding: 9px 10px 9px 0; + height: 45px; + color: #656a6f; + outline: 0; + line-height: 1; + background-color: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: 0 !important; +} + +.wp-core-ui .wp-full-overlay .collapse-sidebar:hover, +.wp-core-ui .wp-full-overlay .collapse-sidebar:focus { + color: #0073aa; +} + +.wp-full-overlay .collapse-sidebar-arrow, +.wp-full-overlay .collapse-sidebar-label { + display: inline-block; + vertical-align: middle; + line-height: 20px; +} + +.wp-full-overlay .collapse-sidebar-arrow { + width: 20px; + height: 20px; + margin: 0 2px; /* avoid the focus box-shadow to be cut-off */ + border-radius: 50%; + overflow: hidden; +} + +.wp-full-overlay .collapse-sidebar:hover .collapse-sidebar-arrow, +.wp-full-overlay .collapse-sidebar:focus .collapse-sidebar-arrow { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.wp-full-overlay .collapse-sidebar-label { + margin-right: 3px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + display: block; + content: "\f148"; + background: #eee; + font: normal 20px/1 dashicons; + speak: none; + padding: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-core-ui .wp-full-overlay.collapsed .collapse-sidebar { + padding: 9px 10px; +} + +/* rtl:ignore */ +.wp-full-overlay.collapsed .collapse-sidebar-arrow:before, +.rtl .wp-full-overlay .collapse-sidebar-arrow:before { + -webkit-transform: rotate(180.001deg); + transform: rotate(180.001deg); /* Firefox: promoting to its own layer to trigger anti-aliasing */ +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + -webkit-transform: none; + transform: none; +} + +/* Animations */ +.wp-full-overlay, +.wp-full-overlay-sidebar, +.wp-full-overlay .collapse-sidebar, +.wp-full-overlay-main { + transition-property: right, left, top, bottom, width, margin; + transition-duration: 0.2s; +} + +/* Device/preview size toggles */ + +.wp-full-overlay { + background: #191e23; +} + +.wp-full-overlay-main { + background-color: #f1f1f1; +} + +.expanded .wp-full-overlay-footer { + position: fixed; + bottom: 0; + right: 0; + min-width: 299px; + max-width: 599px; + width: 18%; + width: calc( 18% - 1px ); + height: 45px; + border-top: 1px solid #ddd; + background: #eee; +} + +.wp-full-overlay-footer .devices-wrapper { + float: left; +} + +.wp-full-overlay-footer .devices { + position: relative; + background: #eee; + box-shadow: 20px 0 10px -5px #eee; +} + +.wp-full-overlay-footer .devices button { + cursor: pointer; + background: transparent; + border: none; + height: 45px; + padding: 0 3px; + margin: 0 -4px 0 0; + box-shadow: none; + border-top: 1px solid transparent; + border-bottom: 4px solid transparent; + transition: .15s color ease-in-out, + .15s background-color ease-in-out, + .15s border-color ease-in-out; +} + +.wp-full-overlay-footer .devices button:focus { + box-shadow: none; + outline: none; +} + +.wp-full-overlay-footer .devices button:before { + display: inline-block; + -webkit-font-smoothing: antialiased; + font: normal 20px/30px "dashicons"; + vertical-align: top; + margin: 3px 0; + padding: 4px 8px; + color: #656a6f; +} + +.wp-full-overlay-footer .devices button.active { + border-bottom-color: #191e23; +} + +.wp-full-overlay-footer .devices button:hover, +.wp-full-overlay-footer .devices button:focus { + background-color: #fff; +} + +.wp-full-overlay-footer .devices button:focus, +.wp-full-overlay-footer .devices button.active:hover { + border-bottom-color: #0073aa; +} + +.wp-full-overlay-footer .devices button.active:before { + color: #191e23; +} + +.wp-full-overlay-footer .devices button:hover:before, +.wp-full-overlay-footer .devices button:focus:before { + color: #0073aa; +} + +.wp-full-overlay-footer .devices .preview-desktop:before { + content: "\f472"; +} + +.wp-full-overlay-footer .devices .preview-tablet:before { + content: "\f471"; +} + +.wp-full-overlay-footer .devices .preview-mobile:before { + content: "\f470"; +} + +@media screen and (max-width:1024px) { + .wp-full-overlay-footer .devices { + display: none; + } +} + +.collapsed .wp-full-overlay-footer .devices button:before { + display: none; +} + +.preview-mobile .wp-full-overlay-main { + margin: auto -160px auto 0; + width: 320px; + height: 480px; + max-height: 100%; + max-width: 100%; + right: 50%; +} + +.preview-tablet .wp-full-overlay-main { + margin: auto -360px auto 0; + width: 720px; /* Size is loosely based on a typical "tablet" device size. Intentionally ambiguous - this does not represent any particular device precisely. */ + height: 1080px; + max-height: 100%; + max-width: 100%; + right: 50%; +} + + +/*------------------------------------------------------------------------------ + 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, +#customize-controls .notice.notification-overlay { + background: #eee; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + right: 0; + left: 0; + height: 100%; +} +#customize-container { + display: none; +} + +/* Make the Customizer and Theme installer overlays the only available content. */ +#customize-container, +.theme-install-overlay { + visibility: visible; +} + +.customize-loading #customize-container iframe { + opacity: 0; +} + +#customize-container iframe, +.theme-install-overlay iframe { + height: 100%; + width: 100%; + z-index: 20; + transition: opacity 0.3s; +} + +#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: 15px 0; + width: 258px; + border: 1px solid #ccc; +} + +.install-theme-info .theme-details { + overflow: hidden; +} + +.theme-details .theme-version { + margin: 15px 0; +} + +.theme-details .theme-description { + float: right; + color: #72777c; + line-height: 20px; + max-width: 100%; +} + +.theme-install-overlay .wp-full-overlay-header .button { + float: left; + margin: 8px 0 0 10px; + /* 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-sidebar-content { + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.theme-install-overlay .wp-full-overlay-main { + position: absolute; + z-index: 0; + background-color: #f1f1f1; +} + +.customize-loading #customize-container { + background-color: #f1f1f1; +} + +#customize-preview.wp-full-overlay-main:before, +.customize-loading #customize-container:before, +#customize-controls .notice.notification-overlay.notification-loading:before, +.theme-install-overlay .wp-full-overlay-main:before { + content: ""; + display: block; + width: 20px; + height: 20px; + position: absolute; + right: 50%; + top: 50%; + z-index: -1; + margin: -10px -10px 0 0; + -webkit-transform: translateZ(0); + transform: translateZ(0); + background: transparent url(../images/spinner.gif) no-repeat center center; + background-size: 20px 20px; +} + +#customize-preview.wp-full-overlay-main.iframe-ready:before, +.theme-install-overlay.iframe-ready .wp-full-overlay-main:before { + background-image: none; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-full-overlay .collapse-sidebar-arrow { + background-image: url(../images/arrows-2x.png); + background-size: 15px 123px; + } + + #customize-preview.wp-full-overlay-main:before, + .customize-loading #customize-container:before, + #customize-controls .notice.notification-overlay.notification-loading:before, + .theme-install-overlay .wp-full-overlay-main:before { + 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; + } + + .broken-themes table { + width: 100%; + } + + .theme-install-overlay .wp-full-overlay-header .theme-install { + margin-top: 6px; + line-height: normal; + } + + .theme-browser .theme .theme-actions .button { + margin-bottom: 0; + } + + .theme-browser .theme.active .theme-actions, + .theme-browser .theme .theme-actions { + padding-top: 8px; + padding-bottom: 8px; + } +} + +@media aural { + .theme .notice:before, + .theme-info .updating-message:before, + .theme-info .updated-message:before, + .theme-install.updating-message:before { + speak: none; + } +} diff --git a/wp-admin/css/themes-rtl.min.css b/wp-admin/css/themes-rtl.min.css new file mode 100644 index 0000000..d9af4ae --- /dev/null +++ b/wp-admin/css/themes-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body.js .theme-browser.search-loading{display:none}.theme-browser .themes{clear:both}.themes-php:not(.network-admin) .wrap h1{margin-bottom:15px}.themes-php .wrap h1 .button{margin-right:20px}.themes-php .search-form{display:inline}.themes-php .wp-filter-search{position:relative;top:-2px;right:20px;margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5}.theme .notice,.theme .notice.is-dismissible{right:0;margin:0;position:absolute;left:0;top:0}.theme-browser .theme{cursor:pointer;float:right;margin:0 0 4% 4%;position:relative;width:30.6%;border:1px solid #ddd;box-shadow:0 1px 1px -1px rgba(0,0,0,.1);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;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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;transition:opacity .1s ease-in-out;height:auto;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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-left:3px}.theme-browser .theme .theme-actions .button{float:none;margin-right:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-backface-visibility:hidden;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%;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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;position:absolute;top:35%;left:20%;right:20%;background:#23282d;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;border-radius:3px;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}.theme-browser .theme.active .theme-name{background:#23282d;color:#fff;padding-left:110px;font-weight:300;box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .customize-control .theme.active .theme-name{padding-left:15px}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-right:none;opacity:1}.theme-id-container{position:relative}.theme-browser .theme .theme-actions,.theme-browser .theme.active .theme-actions{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:0;padding:10px 15px;box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}.theme-browser .theme.active .theme-actions .button-primary{margin-left:0}.theme-browser .theme .theme-author{background:#23282d;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:none;box-shadow:none}.theme-browser .theme.add-new-theme a{text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme a:after{display:block;content:"";background:0 0;background:rgba(0,0,0,0);position:absolute;top:0;right:0;left:0;bottom:0;padding:0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);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 a:focus .theme-screenshot,.theme-browser .theme.add-new-theme a:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{background:#fff;color:#0073aa}.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{border-color:transparent;color:#fff;background:#0073aa;content:""}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-18px;padding-top:0;padding-bottom:48px}.theme-browser .theme.add-new-theme a:focus .theme-name,.theme-browser .theme.add-new-theme a:hover .theme-name{color:#fff;z-index:2}.theme-overlay .theme-backdrop{position:absolute;right:-20px;left:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10000}.theme-overlay .theme-header .close,.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{cursor:pointer;background-color:transparent;height:48px;transition:color .1s ease-in-out,background .1s ease-in-out;text-align:center}.theme-overlay .theme-header{position:absolute;top:0;right:0;left:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header button{padding:0}.theme-overlay .theme-header .close{width:50px;float:left;border:0;border-right:1px solid #ddd}.theme-overlay .theme-header .close:before{font:400 22px/50px dashicons!important;color:#72777c;display:inline-block;content:"\f335";font-weight:300}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{color:#72777c;width:54px;float:right;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:#ddd;border-color:#ccc;color:#000}.theme-overlay .theme-header .close:focus:before,.theme-overlay .theme-header .close:hover:before{color:#000}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .right:focus{box-shadow:none;outline:0}.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}.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"],.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"],.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-header .left:before{content:"\f345"}.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;box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:10000;box-sizing:border-box;-webkit-overflow-scrolling:touch}body.folded .theme-browser~.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-actions{position:absolute;text-align:center;bottom:0;right:0;left:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;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}.broken-themes a.delete-theme,.theme-overlay .theme-actions .delete-theme{color:#a00;text-decoration:none;border-color:transparent;box-shadow:none;background:0 0}.theme-overlay .theme-actions .delete-theme{position:absolute;left:10px;bottom:5px}.broken-themes a.delete-theme:focus,.broken-themes a.delete-theme:hover,.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 .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:1200px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;box-sizing:border-box;overflow:hidden;position:relative;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 #00a0d2}.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:#32373c;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;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:#23282d;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3;word-wrap:break-word;overflow-wrap:break-word}.theme-overlay .theme-version{color:#72777c;font-size:13px;font-weight:400;float:none;display:inline-block;margin-right:10px}.theme-overlay .theme-author{margin:15px 0 25px;color:#72777c;font-size:16px;font-weight:400;line-height:inherit}.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:#82878c;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:600;margin-left:5px}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-right:4px solid #00a0d2;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;z-index:10}.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:none;z-index:100000;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{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 .wp-filter-search{float:none;clear:both;right:0;left:0;margin:-5px 0 20px;width:100%;max-width:280px}.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:#0073aa}.theme-browser .theme .notice-success p:before{color:#79ba49;content:"\f147";display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.theme-install.updated-message:before{content:''}.theme-install-php .wp-filter{padding-right:20px}.theme-install-php a.browse-themes,.theme-install-php a.upload{cursor:pointer}.plugin-install-tab-upload .upload-view-toggle .upload,.upload-view-toggle .browse{display:none}.plugin-install-tab-upload .upload-view-toggle .browse{display:inline}.upload-plugin,.upload-theme{box-sizing:border-box;display:none;margin:0;padding:50px 0;width:100%;overflow:hidden;position:relative;top:10px}.upload-plugin-wrap{display:none}.plugin-install-tab-upload .upload-plugin,.show-upload-view .upload-plugin,.show-upload-view .upload-plugin-wrap,.show-upload-view .upload-theme{display:block}.upload-plugin .wp-upload-form,.upload-theme .wp-upload-form{background:#fafafa;border:1px solid #e5e5e5;padding:30px;margin:30px auto;max-width:380px}.upload-plugin .install-help,.upload-theme .install-help{color:#555d66;font-size:18px;font-style:normal;margin:0;padding:0;text-align:center}p.no-themes,p.no-themes-local{clear:both;color:#666;font-size:18px;font-style:normal;margin:0;padding:100px 0;text-align:center;display:none}.no-results p.no-themes{display:block}.theme-install-php .add-new-theme{display:none!important}@media only screen and (max-width:1120px){.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}}.theme-details .theme-rating{line-height:23px}.theme-details .star-rating{display:inline}.theme-details .no-rating,.theme-details .num-ratings{font-size:11px;color:#72777c}.theme-details .no-rating{display:block;line-height:20px}.appearance_page_custom-header #headimg{border:1px solid #ddd;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 #ddd}div#custom-background-image img{max-width:400px;max-height:300px}.background-position-control input[type=radio]:checked~.button{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);z-index:1}.background-position-control input[type=radio]:focus~.button{border-color:#5b9dd9;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 3px rgba(0,115,170,.8);color:#23282d}.background-position-control .background-position-center-icon,.background-position-control .background-position-center-icon:before{display:inline-block;line-height:1;text-align:center;transition:background-color .1s ease-in 0}.background-position-control .background-position-center-icon{height:20px;margin-top:13px;vertical-align:top;width:20px}.background-position-control .background-position-center-icon:before{background-color:#555;border-radius:50%;content:"";height:12px;width:12px}.background-position-control .button:hover .background-position-center-icon:before,.background-position-control input[type=radio]:focus~.button .background-position-center-icon:before{background-color:#23282d}.background-position-control .button-group{display:block}.background-position-control .button-group .button{border-radius:0;box-shadow:none;height:40px!important;line-height:37px!important;margin:0 0 0 -1px!important;padding:0 10px 1px!important;position:relative}.wp-full-overlay,.wp-full-overlay-sidebar{position:fixed;top:0;height:100%;bottom:0;right:0}.background-position-control .button-group .button:active,.background-position-control .button-group .button:focus,.background-position-control .button-group .button:hover{z-index:1}.background-position-control .button-group:last-child .button{box-shadow:0 1px 0 #ccc}.background-position-control .button-group>label{margin:0!important}.background-position-control .button-group:first-child>label:first-child .button{border-radius:0 3px 0 0}.background-position-control .button-group:first-child>label:first-child .dashicons{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.background-position-control .button-group:first-child>label:last-child .button{border-radius:3px 0 0}.background-position-control .button-group:first-child>label:last-child .dashicons{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.background-position-control .button-group:last-child>label:first-child .button{border-radius:0 0 3px}.background-position-control .button-group:last-child>label:first-child .dashicons{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.background-position-control .button-group:last-child>label:last-child .button{border-radius:0 0 0 3px}.background-position-control .button-group:last-child>label:last-child .dashicons{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.background-position-control .button-group .dashicons{margin-top:9px}.background-position-control .button-group+.button-group{margin-top:-1px}body.full-overlay-active{overflow:hidden;visibility:hidden}.wp-full-overlay{z-index:500000;overflow:visible;left:0;min-width:0}.wp-full-overlay-sidebar{box-sizing:border-box;min-width:300px;max-width:600px;width:18%;padding:0;margin:0;z-index:10;background:#eee;border-left:none}.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{overflow:visible;margin-right:-300px}@media screen and (min-width:1667px){.wp-full-overlay.expanded{margin-right:18%}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-right:-18%}}@media screen and (min-width:3333px){.wp-full-overlay.expanded{margin-right:600px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-right:-600px}}.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;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;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;right:0;left:0;overflow:auto}.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header{padding:0}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{display:block;position:relative;float:right;width:45px;height:45px;padding-left:2px;background:#eee;border-left:1px solid #ddd;color:#444;cursor:pointer;text-decoration:none;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-install-overlay .close-full-overlay:focus,.theme-install-overlay .close-full-overlay:hover,.theme-install-overlay .next-theme:focus,.theme-install-overlay .next-theme:hover,.theme-install-overlay .previous-theme:focus,.theme-install-overlay .previous-theme:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;box-shadow:none}.theme-install-overlay .close-full-overlay:before{font:400 22px/1 dashicons;content:"\f335";position:relative;top:7px;right:13px}.theme-install-overlay .previous-theme:before{font:400 20px/1 dashicons;content:"\f345";position:relative;top:6px;right:14px}.theme-install-overlay .next-theme:before{font:400 20px/1 dashicons;content:"\f341";position:relative;top:6px;right:13px}.theme-install-overlay .next-theme.disabled,.theme-install-overlay .next-theme.disabled:focus,.theme-install-overlay .next-theme.disabled:hover,.theme-install-overlay .previous-theme.disabled,.theme-install-overlay .previous-theme.disabled:focus,.theme-install-overlay .previous-theme.disabled:hover{color:#b4b9be;background:#eee;cursor:default;pointer-events:none}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{border-right:0;border-top:0;border-bottom:0}.theme-install-overlay .close-full-overlay:before,.theme-install-overlay .next-theme:before,.theme-install-overlay .previous-theme:before{top:2px;right:0}.wp-core-ui .wp-full-overlay .collapse-sidebar{position:fixed;bottom:0;right:0;padding:9px 10px 9px 0;height:45px;color:#656a6f;outline:0;line-height:1;background-color:transparent!important;border:none!important;box-shadow:none!important;border-radius:0!important}.wp-core-ui .wp-full-overlay .collapse-sidebar:focus,.wp-core-ui .wp-full-overlay .collapse-sidebar:hover{color:#0073aa}.wp-full-overlay .collapse-sidebar-arrow,.wp-full-overlay .collapse-sidebar-label{display:inline-block;vertical-align:middle;line-height:20px}.wp-full-overlay .collapse-sidebar-arrow{width:20px;height:20px;margin:0 2px;border-radius:50%;overflow:hidden}.wp-full-overlay .collapse-sidebar:focus .collapse-sidebar-arrow,.wp-full-overlay .collapse-sidebar:hover .collapse-sidebar-arrow{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-full-overlay .collapse-sidebar-label{margin-right:3px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay .collapse-sidebar-arrow:before{display:block;content:"\f148";background:#eee;font:400 20px/1 dashicons;speak:none;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-core-ui .wp-full-overlay.collapsed .collapse-sidebar{padding:9px 10px}.rtl .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:rotate(180.001deg);transform:rotate(180.001deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:none;transform:none}.wp-full-overlay,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main,.wp-full-overlay-sidebar{transition-property:right,left,top,bottom,width,margin;transition-duration:.2s}.wp-full-overlay{background:#191e23}.wp-full-overlay-main{background-color:#f1f1f1}.expanded .wp-full-overlay-footer{position:fixed;bottom:0;right:0;min-width:299px;max-width:599px;width:18%;width:calc(18% - 1px);height:45px;border-top:1px solid #ddd;background:#eee}.wp-full-overlay-footer .devices-wrapper{float:left}.wp-full-overlay-footer .devices{position:relative;background:#eee;box-shadow:20px 0 10px -5px #eee}.wp-full-overlay-footer .devices button{cursor:pointer;background:0 0;border:none;height:45px;padding:0 3px;margin:0 -4px 0 0;box-shadow:none;border-top:1px solid transparent;border-bottom:4px solid transparent;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}.wp-full-overlay-footer .devices button:focus{box-shadow:none;outline:0}.wp-full-overlay-footer .devices button:before{display:inline-block;-webkit-font-smoothing:antialiased;font:400 20px/30px dashicons;vertical-align:top;margin:3px 0;padding:4px 8px;color:#656a6f}#customize-container,.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,.theme-install-overlay{display:none}.wp-full-overlay-footer .devices button.active{border-bottom-color:#191e23}.wp-full-overlay-footer .devices button:focus,.wp-full-overlay-footer .devices button:hover{background-color:#fff}.wp-full-overlay-footer .devices button.active:hover,.wp-full-overlay-footer .devices button:focus{border-bottom-color:#0073aa}.wp-full-overlay-footer .devices button.active:before{color:#191e23}.wp-full-overlay-footer .devices button:focus:before,.wp-full-overlay-footer .devices button:hover:before{color:#0073aa}.wp-full-overlay-footer .devices .preview-desktop:before{content:"\f472"}.wp-full-overlay-footer .devices .preview-tablet:before{content:"\f471"}.wp-full-overlay-footer .devices .preview-mobile:before{content:"\f470"}@media screen and (max-width:1024px){.wp-full-overlay-footer .devices{display:none}}.collapsed .wp-full-overlay-footer .devices button:before{display:none}.preview-mobile .wp-full-overlay-main{margin:auto -160px auto 0;width:320px;height:480px;max-height:100%;max-width:100%;right:50%}.preview-tablet .wp-full-overlay-main{margin:auto -360px auto 0;width:720px;height:1080px;max-height:100%;max-width:100%;right:50%}#customize-container,#customize-controls .notice.notification-overlay{background:#eee;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%}#customize-container,.theme-install-overlay{visibility:visible}.customize-loading #customize-container iframe{opacity:0}#customize-container iframe,.theme-install-overlay iframe{height:100%;width:100%;z-index:20;transition:opacity .3s}#customize-controls{margin-top:0}.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:15px 0;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0}.theme-details .theme-description{float:right;color:#72777c;line-height:20px;max-width:100%}.theme-install-overlay .wp-full-overlay-header .button{float:left;margin:8px 0 0 10px;line-height:26px}.theme-install-overlay .wp-full-overlay-sidebar{background:#eee;border-left:1px solid #ddd}.theme-install-overlay .wp-full-overlay-sidebar-content{background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.theme-install-overlay .wp-full-overlay-main{position:absolute;z-index:0;background-color:#f1f1f1}.customize-loading #customize-container{background-color:#f1f1f1}#customize-controls .notice.notification-overlay.notification-loading:before,#customize-preview.wp-full-overlay-main:before,.customize-loading #customize-container:before,.theme-install-overlay .wp-full-overlay-main:before{content:"";display:block;width:20px;height:20px;position:absolute;right:50%;top:50%;z-index:-1;margin:-10px -10px 0 0;-webkit-transform:translateZ(0);transform:translateZ(0);background:url(../images/spinner.gif) center center no-repeat;background-size:20px 20px}#customize-preview.wp-full-overlay-main.iframe-ready:before,.theme-install-overlay.iframe-ready .wp-full-overlay-main:before{background-image:none}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);background-size:15px 123px}#customize-controls .notice.notification-overlay.notification-loading:before,#customize-preview.wp-full-overlay-main:before,.customize-loading #customize-container:before,.theme-install-overlay .wp-full-overlay-main:before{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}.broken-themes table{width:100%}.theme-install-overlay .wp-full-overlay-header .theme-install{margin-top:6px;line-height:normal}.theme-browser .theme .theme-actions .button{margin-bottom:0}.theme-browser .theme .theme-actions,.theme-browser .theme.active .theme-actions{padding-top:8px;padding-bottom:8px}}@media aural{.theme .notice:before,.theme-info .updated-message:before,.theme-info .updating-message:before,.theme-install.updating-message:before{speak:none}} \ No newline at end of file diff --git a/wp-admin/css/themes.css b/wp-admin/css/themes.css new file mode 100644 index 0000000..eece216 --- /dev/null +++ b/wp-admin/css/themes.css @@ -0,0 +1,1929 @@ +/*------------------------------------------------------------------------------ + 16.0 - Themes +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 16.1 - Manage Themes +------------------------------------------------------------------------------*/ + +body.js .theme-browser.search-loading { + display: none; +} + +.theme-browser .themes { + clear: both; +} + +.themes-php:not(.network-admin) .wrap h1 { + margin-bottom: 15px; +} + +.themes-php .wrap h1 .button { + margin-left: 20px; +} + +/* Search form */ +.themes-php .search-form { + display: inline; +} + +.themes-php .wp-filter-search { + position: relative; + top: -2px; + left: 20px; + margin: 0; + width: 280px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; +} + +/* Position admin messages */ +.theme .notice, +.theme .notice.is-dismissible { + left: 0; + margin: 0; + position: absolute; + right: 0; + top: 0; +} + +/** + * 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 #ddd; + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + 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; + 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; + transition: opacity 0.1s ease-in-out; + height: auto; + 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 { + 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-backface-visibility: hidden; /* Prevents flicker of the screenshot on hover. */ + 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%; + 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: 20%; + left: 20%; + background: #23282d; + 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; + border-radius: 3px; + transition: opacity 0.1s ease-in-out; +} + +.theme-browser .theme:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 ); +} + +.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; +} + +/** + * The currently active theme + */ +.theme-browser .theme.active .theme-name { + background: #23282d; + color: #fff; + padding-right: 110px; + font-weight: 300; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); +} + +.theme-browser .customize-control .theme.active .theme-name { + padding-right: 15px; +} + +.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-id-container { + position: relative; +} + +.theme-browser .theme.active .theme-actions, +.theme-browser .theme .theme-actions { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 0; + padding: 10px 15px; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); +} + +.theme-browser .theme.active .theme-actions .button-primary { + margin-right: 0; +} + +.theme-browser .theme .theme-author { + background: #23282d; + 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; + box-shadow: none; +} + +.theme-browser .theme.add-new-theme a { + text-decoration: none; + display: block; + position: relative; + z-index: 1; +} + +.theme-browser .theme.add-new-theme a:after { + display: block; + content: ""; + background: transparent; + background: rgba(0, 0, 0, 0); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 0; + text-shadow: none; + border: 5px dashed #d5d2ca; + border: 5px dashed rgba(0, 0, 0, 0.1); + box-sizing: border-box; +} + +.theme-browser .theme.add-new-theme span:after { + background: #e5e5e5; + background: rgba(153, 153, 153, 0.1); + 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 a:hover .theme-screenshot, +.theme-browser .theme.add-new-theme a:focus .theme-screenshot { + background: none; +} + +.theme-browser .theme.add-new-theme a:hover span:after, +.theme-browser .theme.add-new-theme a:focus span:after { + background: #fff; + color: #0073aa; +} + +.theme-browser .theme.add-new-theme a:hover:after, +.theme-browser .theme.add-new-theme a:focus:after { + border-color: transparent; + color: #fff; + background: #0073aa; + content: ""; +} + +.theme-browser .theme.add-new-theme .theme-name { + background: none; + text-align: center; + box-shadow: none; + font-weight: 400; + position: relative; + top: 0; + margin-top: -18px; + padding-top: 0; + padding-bottom: 48px; +} + +.theme-browser .theme.add-new-theme a:hover .theme-name, +.theme-browser .theme.add-new-theme a:focus .theme-name { + color: #fff; + z-index: 2; +} + +/** + * 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: 10000; /* Over WP Pointers. */ +} + +.theme-overlay .theme-header { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 48px; + border-bottom: 1px solid #ddd; +} + +.theme-overlay .theme-header button { + padding: 0; +} + +.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; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.theme-overlay .theme-header .close:before { + font: normal 22px/50px dashicons !important; + color: #72777c; + 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: #72777c; + background-color: transparent; + height: 48px; + width: 54px; + float: left; + text-align: center; + border: 0; + border-right: 1px solid #ddd; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:focus, +.theme-overlay .theme-header .left:hover { + background: #ddd; + border-color: #ccc; + color: #000; +} + +.theme-overlay .theme-header .close:focus:before, +.theme-overlay .theme-header .close:hover:before { + color: #000; +} + +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .left:focus { + box-shadow: none; + outline: none; +} + +.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: "\f341"; +} + +.theme-overlay .theme-header .right:before { + content: "\f345"; +} + +.theme-overlay .theme-wrap { + clear: both; + position: fixed; + top: 9%; + left: 190px; + right: 30px; + bottom: 3%; + background: #fff; + box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + z-index: 10000; /* Over WP Pointers. */ + box-sizing: border-box; + -webkit-overflow-scrolling: touch; +} + +body.folded .theme-browser ~ .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-actions { + position: absolute; + text-align: center; + bottom: 0; + left: 0; + right: 0; + padding: 10px 25px 5px; + background: #f3f3f3; + z-index: 30; + 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; +} + +/* Hide-if-customize for items we can't add classes to */ +.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"], +.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"] { + display: none; +} + +.broken-themes a.delete-theme, +.theme-overlay .theme-actions .delete-theme { + color: #a00; + text-decoration: none; + border-color: transparent; + box-shadow: none; + background: transparent; +} + +.theme-overlay .theme-actions .delete-theme { + position: absolute; + right: 10px; + bottom: 5px; +} + +.broken-themes a.delete-theme:hover, +.broken-themes a.delete-theme:focus, +.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: 1200px; /* Recommended theme screenshot width, set here to avoid stretching */ + text-align: center; +} + +/* First screenshot, shown big */ +.theme-overlay .screenshot { + border: 1px solid #fff; + box-sizing: border-box; + overflow: hidden; + position: relative; + 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 #00a0d2; +} + +.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: #32373c; + color: #fff; + font-size: 11px; + display: inline-block; + padding: 2px 8px; + 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: #23282d; + font-size: 32px; + font-weight: 100; + margin: 10px 0 0; + line-height: 1.3; + word-wrap: break-word; + overflow-wrap: break-word; +} + +.theme-overlay .theme-version { + color: #72777c; + font-size: 13px; + font-weight: 400; + float: none; + display: inline-block; + margin-left: 10px; +} + +.theme-overlay .theme-author { + margin: 15px 0 25px; + color: #72777c; + font-size: 16px; + font-weight: 400; + line-height: inherit; +} + +.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: #82878c; + font-size: 13px; + font-weight: 400; + margin: 30px 0 0 0; + padding-top: 20px; +} + +.theme-overlay .theme-tags span { + color: #444; + font-weight: 600; + margin-right: 5px; +} + +.theme-overlay .parent-theme { + background: #f7fcfe; + border: 1px solid #eee; + border-left: 4px solid #00a0d2; + font-size: 14px; + font-weight: 400; + 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; + z-index: 10; +} + +.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: 100000; /* should overlap #wpadminbar. */ + 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-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 .wp-filter-search { + float: none; + clear: both; + left: 0; + right: 0; + margin: -5px 0 20px 0; + width: 100%; + max-width: 280px; + } + + .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: #0073aa; +} +.theme-browser .theme .notice-success p:before { + color: #79ba49; + content: "\f147"; + display: inline-block; + font: normal 20px/1 'dashicons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.theme-install.updated-message:before { + content: ''; +} + +.theme-install-php .wp-filter { + padding-left: 20px; +} + +.theme-install-php a.upload, +.theme-install-php a.browse-themes { + cursor: pointer; +} + +.upload-view-toggle .browse, +.plugin-install-tab-upload .upload-view-toggle .upload { + display: none; +} + +.plugin-install-tab-upload .upload-view-toggle .browse { + display: inline; +} + +.upload-theme, +.upload-plugin { + box-sizing: border-box; + display: none; + margin: 0; + padding: 50px 0; + width: 100%; + overflow: hidden; + position: relative; + top: 10px; +} + +.upload-plugin-wrap { + display: none; +} + +.show-upload-view .upload-theme, +.show-upload-view .upload-plugin, +.show-upload-view .upload-plugin-wrap, +.plugin-install-tab-upload .upload-plugin { + display: block; +} + +.upload-theme .wp-upload-form, +.upload-plugin .wp-upload-form { + background: #fafafa; + border: 1px solid #e5e5e5; + padding: 30px; + margin: 30px auto; + max-width: 380px; +} +.upload-theme .install-help, +.upload-plugin .install-help { + color: #555d66; /* #f1f1f1 background */ + font-size: 18px; + font-style: normal; + margin: 0; + padding: 0; + text-align: center; +} + +p.no-themes, +p.no-themes-local { + clear: both; + color: #666; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 100px 0; + text-align: center; + display: none; +} + +.no-results p.no-themes { + display: block; +} + +.theme-install-php .add-new-theme { + display: none !important; +} + +@media only screen and (max-width: 1120px) { + .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; + } +} + +.theme-details .theme-rating { + line-height: 23px; +} + +.theme-details .star-rating { + display: inline; +} + +.theme-details .num-ratings, +.theme-details .no-rating { + font-size: 11px; + color: #72777c; +} + +.theme-details .no-rating { + display: block; + line-height: 20px; +} + +/*------------------------------------------------------------------------------ + 16.3 - Custom Header Screen +------------------------------------------------------------------------------*/ + +.appearance_page_custom-header #headimg { + border: 1px solid #ddd; + 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 #ddd; +} + +div#custom-background-image img { + max-width: 400px; + max-height: 300px; +} + +.background-position-control input[type="radio"]:checked ~ .button { + background: #eee; + border-color: #999; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, .5 ); + z-index: 1; +} + +.background-position-control input[type="radio"]:focus ~ .button { + border-color: #5b9dd9; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, .5 ), 0 0 3px rgba( 0, 115, 170, .8 ); + color: #23282d; +} + +.background-position-control .background-position-center-icon, +.background-position-control .background-position-center-icon:before { + display: inline-block; + line-height: 1; + text-align: center; + transition: background-color .1s ease-in 0; +} + +.background-position-control .background-position-center-icon { + height: 20px; + margin-top: 13px; + vertical-align: top; + width: 20px; +} + +.background-position-control .background-position-center-icon:before { + background-color: #555; + border-radius: 50%; + content: ""; + height: 12px; + width: 12px; +} + +.background-position-control .button:hover .background-position-center-icon:before, +.background-position-control input[type="radio"]:focus ~ .button .background-position-center-icon:before { + background-color: #23282d; +} + +.background-position-control .button-group { + display: block; +} + +.background-position-control .button-group .button { + border-radius: 0; + box-shadow: none; + /* Following properties are overridden by buttons responsive styles (see: wp-includes/css/buttons.css). */ + height: 40px !important; + line-height: 37px !important; + margin: 0 -1px 0 0 !important; + padding: 0 10px 1px !important; + position: relative; +} + +.background-position-control .button-group .button:active, +.background-position-control .button-group .button:hover, +.background-position-control .button-group .button:focus { + z-index: 1; +} + +.background-position-control .button-group:last-child .button { + box-shadow: 0 1px 0 #ccc; +} + +.background-position-control .button-group > label { + margin: 0 !important; +} + +.background-position-control .button-group:first-child > label:first-child .button { + border-radius: 3px 0 0; +} + +.background-position-control .button-group:first-child > label:first-child .dashicons { + -webkit-transform: rotate( 45deg ); + transform: rotate( 45deg ); +} + +.background-position-control .button-group:first-child > label:last-child .button { + border-radius: 0 3px 0 0; +} + +.background-position-control .button-group:first-child > label:last-child .dashicons { + -webkit-transform: rotate( -45deg ); + transform: rotate( -45deg ); +} + +.background-position-control .button-group:last-child > label:first-child .button { + border-radius: 0 0 0 3px; +} + +.background-position-control .button-group:last-child > label:first-child .dashicons { + -webkit-transform: rotate( -45deg ); + transform: rotate( -45deg ); +} + +.background-position-control .button-group:last-child > label:last-child .button { + border-radius: 0 0 3px 0; +} + +.background-position-control .button-group:last-child > label:last-child .dashicons { + -webkit-transform: rotate( 45deg ); + transform: rotate( 45deg ); +} + +.background-position-control .button-group .dashicons { + margin-top: 9px; +} + +.background-position-control .button-group + .button-group { + margin-top: -1px; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; + /* Hide all the content, the Customizer overlay is then made visible to be the only available content. */ + visibility: 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 { + box-sizing: border-box; + position: fixed; + min-width: 300px; + max-width: 600px; + width: 18%; + height: 100%; + top: 0; + bottom: 0; + left: 0; + padding: 0; + margin: 0; + z-index: 10; + 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; +} + +@media screen and (min-width: 1667px) { + .wp-full-overlay.expanded { + margin-left: 18%; + } + + .wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-left: -18%; + } +} + +@media screen and (min-width: 3333px) { + .wp-full-overlay.expanded { + margin-left: 600px; + } + + .wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-left: -600px; + } +} + +.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; + 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; + 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 & Navigation Links */ +.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header { + padding: 0; +} + +.theme-install-overlay .close-full-overlay, +.theme-install-overlay .previous-theme, +.theme-install-overlay .next-theme { + display: block; + position: relative; + float: left; + width: 45px; + height: 45px; + padding-right: 2px; + background: #eee; + border-right: 1px solid #ddd; + color: #444; + cursor: pointer; + text-decoration: none; + transition: color .1s ease-in-out, background .1s ease-in-out; +} + +.theme-install-overlay .close-full-overlay:hover, +.theme-install-overlay .close-full-overlay:focus, +.theme-install-overlay .previous-theme:hover, +.theme-install-overlay .previous-theme:focus, +.theme-install-overlay .next-theme:hover, +.theme-install-overlay .next-theme:focus { + background: #ddd; + border-color: #ccc; + color: #000; + outline: none; + box-shadow: none; +} + +.theme-install-overlay .close-full-overlay:before { + font: normal 22px/1 dashicons; + content: "\f335"; + position: relative; + top: 7px; + left: 13px; +} + +.theme-install-overlay .previous-theme:before { + font: normal 20px/1 dashicons; + content: "\f341"; + position: relative; + top: 6px; + left: 14px; +} + +.theme-install-overlay .next-theme:before { + font: normal 20px/1 dashicons; + content: "\f345"; + position: relative; + top: 6px; + left: 13px; +} + +.theme-install-overlay .previous-theme.disabled, +.theme-install-overlay .next-theme.disabled, +.theme-install-overlay .previous-theme.disabled:hover, +.theme-install-overlay .previous-theme.disabled:focus, +.theme-install-overlay .next-theme.disabled:hover, +.theme-install-overlay .next-theme.disabled:focus { + color: #b4b9be; + background: #eee; + cursor: default; + pointer-events: none; +} + +.theme-install-overlay .close-full-overlay, +.theme-install-overlay .previous-theme, +.theme-install-overlay .next-theme { + border-left: 0; + border-top: 0; + border-bottom: 0; +} + +.theme-install-overlay .close-full-overlay:before, +.theme-install-overlay .previous-theme:before, +.theme-install-overlay .next-theme:before { + top: 2px; + left: 0; +} + +/* Collapse Button */ +.wp-core-ui .wp-full-overlay .collapse-sidebar { + position: fixed; + bottom: 0; + left: 0; + padding: 9px 0 9px 10px; + height: 45px; + color: #656a6f; + outline: 0; + line-height: 1; + background-color: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: 0 !important; +} + +.wp-core-ui .wp-full-overlay .collapse-sidebar:hover, +.wp-core-ui .wp-full-overlay .collapse-sidebar:focus { + color: #0073aa; +} + +.wp-full-overlay .collapse-sidebar-arrow, +.wp-full-overlay .collapse-sidebar-label { + display: inline-block; + vertical-align: middle; + line-height: 20px; +} + +.wp-full-overlay .collapse-sidebar-arrow { + width: 20px; + height: 20px; + margin: 0 2px; /* avoid the focus box-shadow to be cut-off */ + border-radius: 50%; + overflow: hidden; +} + +.wp-full-overlay .collapse-sidebar:hover .collapse-sidebar-arrow, +.wp-full-overlay .collapse-sidebar:focus .collapse-sidebar-arrow { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.wp-full-overlay .collapse-sidebar-label { + margin-left: 3px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + display: block; + content: "\f148"; + background: #eee; + font: normal 20px/1 dashicons; + speak: none; + padding: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-core-ui .wp-full-overlay.collapsed .collapse-sidebar { + padding: 9px 10px; +} + +/* rtl:ignore */ +.wp-full-overlay.collapsed .collapse-sidebar-arrow:before, +.rtl .wp-full-overlay .collapse-sidebar-arrow:before { + -webkit-transform: rotate(180.001deg); + transform: rotate(180.001deg); /* Firefox: promoting to its own layer to trigger anti-aliasing */ +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + -webkit-transform: none; + transform: none; +} + +/* Animations */ +.wp-full-overlay, +.wp-full-overlay-sidebar, +.wp-full-overlay .collapse-sidebar, +.wp-full-overlay-main { + transition-property: left, right, top, bottom, width, margin; + transition-duration: 0.2s; +} + +/* Device/preview size toggles */ + +.wp-full-overlay { + background: #191e23; +} + +.wp-full-overlay-main { + background-color: #f1f1f1; +} + +.expanded .wp-full-overlay-footer { + position: fixed; + bottom: 0; + left: 0; + min-width: 299px; + max-width: 599px; + width: 18%; + width: calc( 18% - 1px ); + height: 45px; + border-top: 1px solid #ddd; + background: #eee; +} + +.wp-full-overlay-footer .devices-wrapper { + float: right; +} + +.wp-full-overlay-footer .devices { + position: relative; + background: #eee; + box-shadow: -20px 0 10px -5px #eee; +} + +.wp-full-overlay-footer .devices button { + cursor: pointer; + background: transparent; + border: none; + height: 45px; + padding: 0 3px; + margin: 0 0 0 -4px; + box-shadow: none; + border-top: 1px solid transparent; + border-bottom: 4px solid transparent; + transition: .15s color ease-in-out, + .15s background-color ease-in-out, + .15s border-color ease-in-out; +} + +.wp-full-overlay-footer .devices button:focus { + box-shadow: none; + outline: none; +} + +.wp-full-overlay-footer .devices button:before { + display: inline-block; + -webkit-font-smoothing: antialiased; + font: normal 20px/30px "dashicons"; + vertical-align: top; + margin: 3px 0; + padding: 4px 8px; + color: #656a6f; +} + +.wp-full-overlay-footer .devices button.active { + border-bottom-color: #191e23; +} + +.wp-full-overlay-footer .devices button:hover, +.wp-full-overlay-footer .devices button:focus { + background-color: #fff; +} + +.wp-full-overlay-footer .devices button:focus, +.wp-full-overlay-footer .devices button.active:hover { + border-bottom-color: #0073aa; +} + +.wp-full-overlay-footer .devices button.active:before { + color: #191e23; +} + +.wp-full-overlay-footer .devices button:hover:before, +.wp-full-overlay-footer .devices button:focus:before { + color: #0073aa; +} + +.wp-full-overlay-footer .devices .preview-desktop:before { + content: "\f472"; +} + +.wp-full-overlay-footer .devices .preview-tablet:before { + content: "\f471"; +} + +.wp-full-overlay-footer .devices .preview-mobile:before { + content: "\f470"; +} + +@media screen and (max-width:1024px) { + .wp-full-overlay-footer .devices { + display: none; + } +} + +.collapsed .wp-full-overlay-footer .devices button:before { + display: none; +} + +.preview-mobile .wp-full-overlay-main { + margin: auto 0 auto -160px; + width: 320px; + height: 480px; + max-height: 100%; + max-width: 100%; + left: 50%; +} + +.preview-tablet .wp-full-overlay-main { + margin: auto 0 auto -360px; + width: 720px; /* Size is loosely based on a typical "tablet" device size. Intentionally ambiguous - this does not represent any particular device precisely. */ + height: 1080px; + max-height: 100%; + max-width: 100%; + left: 50%; +} + + +/*------------------------------------------------------------------------------ + 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, +#customize-controls .notice.notification-overlay { + background: #eee; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; +} +#customize-container { + display: none; +} + +/* Make the Customizer and Theme installer overlays the only available content. */ +#customize-container, +.theme-install-overlay { + visibility: visible; +} + +.customize-loading #customize-container iframe { + opacity: 0; +} + +#customize-container iframe, +.theme-install-overlay iframe { + height: 100%; + width: 100%; + z-index: 20; + transition: opacity 0.3s; +} + +#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: 15px 0; + width: 258px; + border: 1px solid #ccc; +} + +.install-theme-info .theme-details { + overflow: hidden; +} + +.theme-details .theme-version { + margin: 15px 0; +} + +.theme-details .theme-description { + float: left; + color: #72777c; + line-height: 20px; + max-width: 100%; +} + +.theme-install-overlay .wp-full-overlay-header .button { + float: right; + margin: 8px 10px 0 0; + /* 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-sidebar-content { + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.theme-install-overlay .wp-full-overlay-main { + position: absolute; + z-index: 0; + background-color: #f1f1f1; +} + +.customize-loading #customize-container { + background-color: #f1f1f1; +} + +#customize-preview.wp-full-overlay-main:before, +.customize-loading #customize-container:before, +#customize-controls .notice.notification-overlay.notification-loading:before, +.theme-install-overlay .wp-full-overlay-main:before { + content: ""; + display: block; + width: 20px; + height: 20px; + position: absolute; + left: 50%; + top: 50%; + z-index: -1; + margin: -10px 0 0 -10px; + -webkit-transform: translateZ(0); + transform: translateZ(0); + background: transparent url(../images/spinner.gif) no-repeat center center; + background-size: 20px 20px; +} + +#customize-preview.wp-full-overlay-main.iframe-ready:before, +.theme-install-overlay.iframe-ready .wp-full-overlay-main:before { + background-image: none; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-full-overlay .collapse-sidebar-arrow { + background-image: url(../images/arrows-2x.png); + background-size: 15px 123px; + } + + #customize-preview.wp-full-overlay-main:before, + .customize-loading #customize-container:before, + #customize-controls .notice.notification-overlay.notification-loading:before, + .theme-install-overlay .wp-full-overlay-main:before { + 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; + } + + .broken-themes table { + width: 100%; + } + + .theme-install-overlay .wp-full-overlay-header .theme-install { + margin-top: 6px; + line-height: normal; + } + + .theme-browser .theme .theme-actions .button { + margin-bottom: 0; + } + + .theme-browser .theme.active .theme-actions, + .theme-browser .theme .theme-actions { + padding-top: 8px; + padding-bottom: 8px; + } +} + +@media aural { + .theme .notice:before, + .theme-info .updating-message:before, + .theme-info .updated-message:before, + .theme-install.updating-message:before { + speak: none; + } +} diff --git a/wp-admin/css/themes.min.css b/wp-admin/css/themes.min.css new file mode 100644 index 0000000..952e8d5 --- /dev/null +++ b/wp-admin/css/themes.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +body.js .theme-browser.search-loading{display:none}.theme-browser .themes{clear:both}.themes-php:not(.network-admin) .wrap h1{margin-bottom:15px}.themes-php .wrap h1 .button{margin-left:20px}.themes-php .search-form{display:inline}.themes-php .wp-filter-search{position:relative;top:-2px;left:20px;margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5}.theme .notice,.theme .notice.is-dismissible{left:0;margin:0;position:absolute;right:0;top:0}.theme-browser .theme{cursor:pointer;float:left;margin:0 4% 4% 0;position:relative;width:30.6%;border:1px solid #ddd;box-shadow:0 1px 1px -1px rgba(0,0,0,.1);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;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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;transition:opacity .1s ease-in-out;height:auto;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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-right:3px}.theme-browser .theme .theme-actions .button{float:none;margin-left:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-backface-visibility:hidden;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%;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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;position:absolute;top:35%;right:20%;left:20%;background:#23282d;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;border-radius:3px;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.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:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}.theme-browser .theme.active .theme-name{background:#23282d;color:#fff;padding-right:110px;font-weight:300;box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .customize-control .theme.active .theme-name{padding-right:15px}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-left:none;opacity:1}.theme-id-container{position:relative}.theme-browser .theme .theme-actions,.theme-browser .theme.active .theme-actions{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:0;padding:10px 15px;box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}.theme-browser .theme.active .theme-actions .button-primary{margin-right:0}.theme-browser .theme .theme-author{background:#23282d;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:none;box-shadow:none}.theme-browser .theme.add-new-theme a{text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme a:after{display:block;content:"";background:0 0;background:rgba(0,0,0,0);position:absolute;top:0;left:0;right:0;bottom:0;padding:0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);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 a:focus .theme-screenshot,.theme-browser .theme.add-new-theme a:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{background:#fff;color:#0073aa}.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{border-color:transparent;color:#fff;background:#0073aa;content:""}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-18px;padding-top:0;padding-bottom:48px}.theme-browser .theme.add-new-theme a:focus .theme-name,.theme-browser .theme.add-new-theme a:hover .theme-name{color:#fff;z-index:2}.theme-overlay .theme-backdrop{position:absolute;left:-20px;right:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10000}.theme-overlay .theme-header .close,.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{cursor:pointer;background-color:transparent;height:48px;transition:color .1s ease-in-out,background .1s ease-in-out;text-align:center}.theme-overlay .theme-header{position:absolute;top:0;left:0;right:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header button{padding:0}.theme-overlay .theme-header .close{width:50px;float:right;border:0;border-left:1px solid #ddd}.theme-overlay .theme-header .close:before{font:400 22px/50px dashicons!important;color:#72777c;display:inline-block;content:"\f335";font-weight:300}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{color:#72777c;width:54px;float:left;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:#ddd;border-color:#ccc;color:#000}.theme-overlay .theme-header .close:focus:before,.theme-overlay .theme-header .close:hover:before{color:#000}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .right:focus{box-shadow:none;outline:0}.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}.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"],.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"],.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-header .left:before{content:"\f341"}.theme-overlay .theme-header .right:before{content:"\f345"}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;left:190px;right:30px;bottom:3%;background:#fff;box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:10000;box-sizing:border-box;-webkit-overflow-scrolling:touch}body.folded .theme-browser~.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-actions{position:absolute;text-align:center;bottom:0;left:0;right:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;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}.broken-themes a.delete-theme,.theme-overlay .theme-actions .delete-theme{color:#a00;text-decoration:none;border-color:transparent;box-shadow:none;background:0 0}.theme-overlay .theme-actions .delete-theme{position:absolute;right:10px;bottom:5px}.broken-themes a.delete-theme:focus,.broken-themes a.delete-theme:hover,.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 .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:1200px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;box-sizing:border-box;overflow:hidden;position:relative;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 #00a0d2}.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:#32373c;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;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:#23282d;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3;word-wrap:break-word;overflow-wrap:break-word}.theme-overlay .theme-version{color:#72777c;font-size:13px;font-weight:400;float:none;display:inline-block;margin-left:10px}.theme-overlay .theme-author{margin:15px 0 25px;color:#72777c;font-size:16px;font-weight:400;line-height:inherit}.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:#82878c;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:600;margin-right:5px}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-left:4px solid #00a0d2;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;z-index:10}.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:none;z-index:100000;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{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 .wp-filter-search{float:none;clear:both;left:0;right:0;margin:-5px 0 20px;width:100%;max-width:280px}.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:#0073aa}.theme-browser .theme .notice-success p:before{color:#79ba49;content:"\f147";display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.theme-install.updated-message:before{content:''}.theme-install-php .wp-filter{padding-left:20px}.theme-install-php a.browse-themes,.theme-install-php a.upload{cursor:pointer}.plugin-install-tab-upload .upload-view-toggle .upload,.upload-view-toggle .browse{display:none}.plugin-install-tab-upload .upload-view-toggle .browse{display:inline}.upload-plugin,.upload-theme{box-sizing:border-box;display:none;margin:0;padding:50px 0;width:100%;overflow:hidden;position:relative;top:10px}.upload-plugin-wrap{display:none}.plugin-install-tab-upload .upload-plugin,.show-upload-view .upload-plugin,.show-upload-view .upload-plugin-wrap,.show-upload-view .upload-theme{display:block}.upload-plugin .wp-upload-form,.upload-theme .wp-upload-form{background:#fafafa;border:1px solid #e5e5e5;padding:30px;margin:30px auto;max-width:380px}.upload-plugin .install-help,.upload-theme .install-help{color:#555d66;font-size:18px;font-style:normal;margin:0;padding:0;text-align:center}p.no-themes,p.no-themes-local{clear:both;color:#666;font-size:18px;font-style:normal;margin:0;padding:100px 0;text-align:center;display:none}.no-results p.no-themes{display:block}.theme-install-php .add-new-theme{display:none!important}@media only screen and (max-width:1120px){.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}}.theme-details .theme-rating{line-height:23px}.theme-details .star-rating{display:inline}.theme-details .no-rating,.theme-details .num-ratings{font-size:11px;color:#72777c}.theme-details .no-rating{display:block;line-height:20px}.appearance_page_custom-header #headimg{border:1px solid #ddd;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 #ddd}div#custom-background-image img{max-width:400px;max-height:300px}.background-position-control input[type=radio]:checked~.button{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);z-index:1}.background-position-control input[type=radio]:focus~.button{border-color:#5b9dd9;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 3px rgba(0,115,170,.8);color:#23282d}.background-position-control .background-position-center-icon,.background-position-control .background-position-center-icon:before{display:inline-block;line-height:1;text-align:center;transition:background-color .1s ease-in 0}.background-position-control .background-position-center-icon{height:20px;margin-top:13px;vertical-align:top;width:20px}.background-position-control .background-position-center-icon:before{background-color:#555;border-radius:50%;content:"";height:12px;width:12px}.background-position-control .button:hover .background-position-center-icon:before,.background-position-control input[type=radio]:focus~.button .background-position-center-icon:before{background-color:#23282d}.background-position-control .button-group{display:block}.background-position-control .button-group .button{border-radius:0;box-shadow:none;height:40px!important;line-height:37px!important;margin:0 -1px 0 0!important;padding:0 10px 1px!important;position:relative}.wp-full-overlay,.wp-full-overlay-sidebar{position:fixed;top:0;height:100%;bottom:0;left:0}.background-position-control .button-group .button:active,.background-position-control .button-group .button:focus,.background-position-control .button-group .button:hover{z-index:1}.background-position-control .button-group:last-child .button{box-shadow:0 1px 0 #ccc}.background-position-control .button-group>label{margin:0!important}.background-position-control .button-group:first-child>label:first-child .button{border-radius:3px 0 0}.background-position-control .button-group:first-child>label:first-child .dashicons{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.background-position-control .button-group:first-child>label:last-child .button{border-radius:0 3px 0 0}.background-position-control .button-group:first-child>label:last-child .dashicons{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.background-position-control .button-group:last-child>label:first-child .button{border-radius:0 0 0 3px}.background-position-control .button-group:last-child>label:first-child .dashicons{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.background-position-control .button-group:last-child>label:last-child .button{border-radius:0 0 3px}.background-position-control .button-group:last-child>label:last-child .dashicons{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.background-position-control .button-group .dashicons{margin-top:9px}.background-position-control .button-group+.button-group{margin-top:-1px}body.full-overlay-active{overflow:hidden;visibility:hidden}.wp-full-overlay{z-index:500000;overflow:visible;right:0;min-width:0}.wp-full-overlay-sidebar{box-sizing:border-box;min-width:300px;max-width:600px;width:18%;padding:0;margin:0;z-index:10;background:#eee;border-right:none}.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{overflow:visible;margin-left:-300px}@media screen and (min-width:1667px){.wp-full-overlay.expanded{margin-left:18%}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-left:-18%}}@media screen and (min-width:3333px){.wp-full-overlay.expanded{margin-left:600px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-left:-600px}}.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;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;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;left:0;right:0;overflow:auto}.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header{padding:0}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{display:block;position:relative;float:left;width:45px;height:45px;padding-right:2px;background:#eee;border-right:1px solid #ddd;color:#444;cursor:pointer;text-decoration:none;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-install-overlay .close-full-overlay:focus,.theme-install-overlay .close-full-overlay:hover,.theme-install-overlay .next-theme:focus,.theme-install-overlay .next-theme:hover,.theme-install-overlay .previous-theme:focus,.theme-install-overlay .previous-theme:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;box-shadow:none}.theme-install-overlay .close-full-overlay:before{font:400 22px/1 dashicons;content:"\f335";position:relative;top:7px;left:13px}.theme-install-overlay .previous-theme:before{font:400 20px/1 dashicons;content:"\f341";position:relative;top:6px;left:14px}.theme-install-overlay .next-theme:before{font:400 20px/1 dashicons;content:"\f345";position:relative;top:6px;left:13px}.theme-install-overlay .next-theme.disabled,.theme-install-overlay .next-theme.disabled:focus,.theme-install-overlay .next-theme.disabled:hover,.theme-install-overlay .previous-theme.disabled,.theme-install-overlay .previous-theme.disabled:focus,.theme-install-overlay .previous-theme.disabled:hover{color:#b4b9be;background:#eee;cursor:default;pointer-events:none}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{border-left:0;border-top:0;border-bottom:0}.theme-install-overlay .close-full-overlay:before,.theme-install-overlay .next-theme:before,.theme-install-overlay .previous-theme:before{top:2px;left:0}.wp-core-ui .wp-full-overlay .collapse-sidebar{position:fixed;bottom:0;left:0;padding:9px 0 9px 10px;height:45px;color:#656a6f;outline:0;line-height:1;background-color:transparent!important;border:none!important;box-shadow:none!important;border-radius:0!important}.wp-core-ui .wp-full-overlay .collapse-sidebar:focus,.wp-core-ui .wp-full-overlay .collapse-sidebar:hover{color:#0073aa}.wp-full-overlay .collapse-sidebar-arrow,.wp-full-overlay .collapse-sidebar-label{display:inline-block;vertical-align:middle;line-height:20px}.wp-full-overlay .collapse-sidebar-arrow{width:20px;height:20px;margin:0 2px;border-radius:50%;overflow:hidden}.wp-full-overlay .collapse-sidebar:focus .collapse-sidebar-arrow,.wp-full-overlay .collapse-sidebar:hover .collapse-sidebar-arrow{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-full-overlay .collapse-sidebar-label{margin-left:3px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay .collapse-sidebar-arrow:before{display:block;content:"\f148";background:#eee;font:400 20px/1 dashicons;speak:none;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-core-ui .wp-full-overlay.collapsed .collapse-sidebar{padding:9px 10px}.rtl .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:rotate(180.001deg);transform:rotate(180.001deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:none;transform:none}.wp-full-overlay,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main,.wp-full-overlay-sidebar{transition-property:left,right,top,bottom,width,margin;transition-duration:.2s}.wp-full-overlay{background:#191e23}.wp-full-overlay-main{background-color:#f1f1f1}.expanded .wp-full-overlay-footer{position:fixed;bottom:0;left:0;min-width:299px;max-width:599px;width:18%;width:calc(18% - 1px);height:45px;border-top:1px solid #ddd;background:#eee}.wp-full-overlay-footer .devices-wrapper{float:right}.wp-full-overlay-footer .devices{position:relative;background:#eee;box-shadow:-20px 0 10px -5px #eee}.wp-full-overlay-footer .devices button{cursor:pointer;background:0 0;border:none;height:45px;padding:0 3px;margin:0 0 0 -4px;box-shadow:none;border-top:1px solid transparent;border-bottom:4px solid transparent;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}.wp-full-overlay-footer .devices button:focus{box-shadow:none;outline:0}.wp-full-overlay-footer .devices button:before{display:inline-block;-webkit-font-smoothing:antialiased;font:400 20px/30px dashicons;vertical-align:top;margin:3px 0;padding:4px 8px;color:#656a6f}#customize-container,.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,.theme-install-overlay{display:none}.wp-full-overlay-footer .devices button.active{border-bottom-color:#191e23}.wp-full-overlay-footer .devices button:focus,.wp-full-overlay-footer .devices button:hover{background-color:#fff}.wp-full-overlay-footer .devices button.active:hover,.wp-full-overlay-footer .devices button:focus{border-bottom-color:#0073aa}.wp-full-overlay-footer .devices button.active:before{color:#191e23}.wp-full-overlay-footer .devices button:focus:before,.wp-full-overlay-footer .devices button:hover:before{color:#0073aa}.wp-full-overlay-footer .devices .preview-desktop:before{content:"\f472"}.wp-full-overlay-footer .devices .preview-tablet:before{content:"\f471"}.wp-full-overlay-footer .devices .preview-mobile:before{content:"\f470"}@media screen and (max-width:1024px){.wp-full-overlay-footer .devices{display:none}}.collapsed .wp-full-overlay-footer .devices button:before{display:none}.preview-mobile .wp-full-overlay-main{margin:auto 0 auto -160px;width:320px;height:480px;max-height:100%;max-width:100%;left:50%}.preview-tablet .wp-full-overlay-main{margin:auto 0 auto -360px;width:720px;height:1080px;max-height:100%;max-width:100%;left:50%}#customize-container,#customize-controls .notice.notification-overlay{background:#eee;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%}#customize-container,.theme-install-overlay{visibility:visible}.customize-loading #customize-container iframe{opacity:0}#customize-container iframe,.theme-install-overlay iframe{height:100%;width:100%;z-index:20;transition:opacity .3s}#customize-controls{margin-top:0}.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:15px 0;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0}.theme-details .theme-description{float:left;color:#72777c;line-height:20px;max-width:100%}.theme-install-overlay .wp-full-overlay-header .button{float:right;margin:8px 10px 0 0;line-height:26px}.theme-install-overlay .wp-full-overlay-sidebar{background:#eee;border-right:1px solid #ddd}.theme-install-overlay .wp-full-overlay-sidebar-content{background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.theme-install-overlay .wp-full-overlay-main{position:absolute;z-index:0;background-color:#f1f1f1}.customize-loading #customize-container{background-color:#f1f1f1}#customize-controls .notice.notification-overlay.notification-loading:before,#customize-preview.wp-full-overlay-main:before,.customize-loading #customize-container:before,.theme-install-overlay .wp-full-overlay-main:before{content:"";display:block;width:20px;height:20px;position:absolute;left:50%;top:50%;z-index:-1;margin:-10px 0 0 -10px;-webkit-transform:translateZ(0);transform:translateZ(0);background:url(../images/spinner.gif) center center no-repeat;background-size:20px 20px}#customize-preview.wp-full-overlay-main.iframe-ready:before,.theme-install-overlay.iframe-ready .wp-full-overlay-main:before{background-image:none}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);background-size:15px 123px}#customize-controls .notice.notification-overlay.notification-loading:before,#customize-preview.wp-full-overlay-main:before,.customize-loading #customize-container:before,.theme-install-overlay .wp-full-overlay-main:before{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}.broken-themes table{width:100%}.theme-install-overlay .wp-full-overlay-header .theme-install{margin-top:6px;line-height:normal}.theme-browser .theme .theme-actions .button{margin-bottom:0}.theme-browser .theme .theme-actions,.theme-browser .theme.active .theme-actions{padding-top:8px;padding-bottom:8px}}@media aural{.theme .notice:before,.theme-info .updated-message:before,.theme-info .updating-message:before,.theme-install.updating-message:before{speak:none}} \ No newline at end of file diff --git a/wp-admin/css/widgets-rtl.css b/wp-admin/css/widgets-rtl.css new file mode 100644 index 0000000..f90b6cb --- /dev/null +++ b/wp-admin/css/widgets-rtl.css @@ -0,0 +1,834 @@ +/* General Widgets Styles */ + +.widget { + margin: 0 auto 10px; + position: relative; + box-sizing: border-box; +} + +.widget-top { + font-size: 13px; + font-weight: 600; + background: #f7f7f7; +} + +.widget-top .widget-action { + border: 0; + margin: 0; + padding: 10px; + background: none; + cursor: pointer; + outline: none; +} + +.widget-title h3, +.widget-title h4 { + margin: 0; + padding: 15px; + font-size: 1em; + 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; +} + +.widget.widget-dirty .widget-control-close-wrapper { + display: none; +} + +.in-widget-title, +#widgets-right a.widget-control-edit, +#available-widgets .widget-description { + color: #666; +} + +.deleting .widget-title, +.deleting .widget-top .widget-action .toggle-indicator:before { + color: #a0a5aa; +} + +/* Media Widgets */ +.wp-core-ui .media-widget-control.selected .placeholder, +.wp-core-ui .media-widget-control.selected .not-selected, +.wp-core-ui .media-widget-control .selected { + display: none; +} + +.media-widget-control.selected .selected { + display: inline-block; +} + +.media-widget-buttons { + text-align: right; + margin-top: 0; +} + +.media-widget-control .media-widget-buttons .button { + width: auto; + height: auto; + margin-top: 12px; + white-space: normal; +} + +.media-widget-buttons .button:first-child { + margin-left: 8px; +} + +.media-widget-control .placeholder { + border: 1px dashed #b4b9be; + box-sizing: border-box; + cursor: pointer; + line-height: 20px; + padding: 9px 0; + position: relative; + text-align: center; + width: 100%; +} + +.media-widget-control .media-widget-preview { + background: transparent; + text-align: center; +} +.media-widget-control .media-widget-preview .notice { + text-align: initial; +} +.media-frame .media-widget-embed-notice p code, +.media-widget-control .notice p code { + padding: 0 0 0 3px; +} +.media-frame .media-widget-embed-notice { + margin-top: 16px; +} +.media-widget-control .media-widget-preview img { + max-width: 100%; + vertical-align: middle; +} +.media-widget-control .media-widget-preview .wp-video-shortcode { + background: #000; +} + +.media-frame.media-widget .media-toolbar-secondary { + min-width: 300px; +} + +.media-frame.media-widget .image-details .embed-media-settings .setting.align, +.media-frame.media-widget .attachment-display-settings .setting.align, +.media-frame.media-widget .embed-media-settings .setting.align, +.media-frame.media-widget .embed-link-settings .setting.link-text, +.media-frame.media-widget .replace-attachment, +.media-frame.media-widget .checkbox-setting.autoplay { + display: none; +} + +.media-widget-video-preview { + width: 100%; +} + +.media-widget-video-link { + display: inline-block; + min-height: 132px; + width: 100%; + background: black; +} + +.media-widget-video-link .dashicons { + font: normal 60px/1 'dashicons'; + position: relative; + width: 100%; + top: -90px; + color: white; + text-decoration: none; +} + +.media-widget-video-link.no-poster .dashicons { + top: 30px; +} + +.media-frame #embed-url-field.invalid, +.media-widget-image-link > .link:invalid { + border: 1px solid #dc3232; +} + +.media-widget-image-link { + margin: 1em 0; +} + +.media-widget-gallery-preview { + display: -webkit-box; + display: flex; + -webkit-box-pack: start; + justify-content: flex-start; + flex-wrap: wrap; + margin: -1.79104477%; +} + +.media-widget-preview.media_gallery, +.media-widget-preview.media_image { + cursor: pointer; +} + +.media-widget-preview .placeholder { + background: #f1f1f1; +} + +.media-widget-gallery-preview .gallery-item { + box-sizing: border-box; + width: 50%; + margin: 0; + background: transparent; +} + +.media-widget-gallery-preview .gallery-item .gallery-icon { + margin: 4.5%; +} + +/* + * Use targeted nth-last-child selectors to control the size of each image + * based on how many gallery items are present in the grid. + * See: https://alistapart.com/article/quantity-queries-for-css + */ +.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child, +.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child ~ .gallery-item, +.media-widget-gallery-preview .gallery-item:nth-last-child(n+5), +.media-widget-gallery-preview .gallery-item:nth-last-child(n+5) ~ .gallery-item, +.media-widget-gallery-preview .gallery-item:nth-last-child(n+6), +.media-widget-gallery-preview .gallery-item:nth-last-child(n+6) ~ .gallery-item { + max-width: 33.33%; +} + +.media-widget-gallery-preview .gallery-item img { + height: auto; + vertical-align: bottom; +} + +.media-widget-gallery-preview .gallery-icon { + position: relative; +} + +.media-widget-gallery-preview .gallery-icon-placeholder { + position: absolute; + top: 0; + bottom: 0; + width: 100%; + box-sizing: border-box; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + background-color: rgba( 0, 0, 0, .5 ); +} + +.media-widget-gallery-preview .gallery-icon-placeholder-text { + font-weight: 600; + font-size: 2em; + color: white; +} + + +/* Widget Dragging Helpers */ +.widget.ui-draggable-dragging { + min-width: 100%; +} + +.widget.ui-sortable-helper { + opacity: 0.8; +} + +.widget-placeholder { + border: 1px dashed #b4b9be; + margin: 0 auto 10px; + height: 45px; + width: 100%; + 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; + box-sizing: border-box; +} + +.js .sidebar-name { + cursor: pointer; +} + +.sidebar-name .handlediv { + float: left; + width: 38px; + height: 38px; + border: 0; + margin: 0; + padding: 8px; + background: none; + cursor: pointer; + outline: none; +} + +#widgets-right .sidebar-name .handlediv { + margin: 5px 0 0 3px; +} + +.sidebar-name .handlediv:focus { + box-shadow: none; + outline: none; +} + +#widgets-left .sidebar-name .toggle-indicator { + display: none; +} + +#widgets-left .widgets-holder-wrap.closed .sidebar-name .toggle-indicator, +#widgets-left .sidebar-name:hover .toggle-indicator, +#widgets-left .sidebar-name .handlediv:focus .toggle-indicator { + display: block; +} + +.sidebar-name .toggle-indicator:before { + padding: 1px 0 1px 2px; + border-radius: 50%; +} + +.sidebar-name .handlediv:focus .toggle-indicator:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.sidebar-name h2, +.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: #72777c; +} + +.widget-holder .description, +.inactive-sidebar .description { + color: #555d66; +} + +#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 h2, +div#widgets-left .sidebar-name h3 { + padding: 10px 0; + margin: 0 0 0 10px; +} + +#widgets-left .widgets-holder-wrap, +div#widgets-left .widget-holder { + background: transparent; + border: none; +} + +#widgets-left .widgets-holder-wrap { + border: 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; + overflow-wrap: break-word; + word-wrap: break-word; + -ms-word-break: break-all; + word-break: break-word; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +#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; + 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 .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 h2, +div#widgets-right .sidebar-name h3 { + padding: 15px 7px; +} + +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, +.remove-inactive-widgets .spinner { + float: none; + position: relative; + top: -2px; + margin: -5px 5px; +} + +/* Dragging a widget over a closed sidebar */ +#widgets-right .widgets-holder-wrap.widget-hover { + border-color: #72777c; + 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 .widgets-holder-wrap.closed .remove-inactive-widgets, +.js .widgets-holder-wrap.closed .description, +.js .closed br.clear { + display: none; +} + +.js .widgets-holder-wrap.closed .widget.ui-sortable-helper { + display: block; +} + +/* 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: 400; + padding-right: 15px; + font-size: 12px; + line-height: 1; + color: black; +} + +.js #removing-widget { + color: #00a0d2; +} + +.widget-control-noform, +#access-off, +.widgets_access .widget-action, +.widgets_access .handlediv, +.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 { + 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; + 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; + transition: background 0.2s ease-in-out; +} + + /* @todo looks like these hover/focus states are overridden by .widgets-chooser-selected */ +.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: #555d66; + position: absolute; + top: 7px; + right: 5px; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser li.widgets-chooser-selected { + background: #00a0d2; + 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; +} + +#available-widgets .widget.ui-draggable-dragging .widget-top { + cursor: move; +} + +/* =Specific widget styling +-------------------------------------------------------------- */ +.text-widget-fields { + position: relative; +} +.text-widget-fields [hidden] { + display: none; +} +.text-widget-fields .wp-pointer.wp-pointer-top { + position: absolute; + z-index: 3; + top: 100px; + left: 10px; + right: 10px; +} +.text-widget-fields .wp-pointer .wp-pointer-arrow { + right: auto; + left: 15px; +} +.text-widget-fields .wp-pointer .wp-pointer-buttons { + line-height: 1.4em; +} + +.custom-html-widget-fields > p > .CodeMirror { + border: 1px solid #e5e5e5; +} +.custom-html-widget-fields code { + padding-top: 1px; + padding-bottom: 1px; +} +ul.CodeMirror-hints { + z-index: 101; /* Due to z-index 100 set on .widget.open */ +} +.widget-control-actions .custom-html-widget-save-button.button.validation-blocked { + cursor: not-allowed; +} + +/* =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 !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-rtl.min.css b/wp-admin/css/widgets-rtl.min.css new file mode 100644 index 0000000..8889b84 --- /dev/null +++ b/wp-admin/css/widgets-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.widget.widget-dirty .widget-control-close-wrapper,.wp-core-ui .media-widget-control .selected,.wp-core-ui .media-widget-control.selected .not-selected,.wp-core-ui .media-widget-control.selected .placeholder{display:none}.widget{margin:0 auto 10px;position:relative;box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top .widget-action{border:0;margin:0;padding:10px;background:0 0;cursor:pointer;outline:0}.widget-title h3,.widget-title h4{margin:0;padding:15px;font-size:1em;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;line-height:16px}#available-widgets .widget-description,#widgets-right a.widget-control-edit,.in-widget-title{color:#666}.deleting .widget-title,.deleting .widget-top .widget-action .toggle-indicator:before{color:#a0a5aa}.media-widget-control.selected .selected{display:inline-block}.media-widget-buttons{text-align:right;margin-top:0}.media-widget-control .media-widget-buttons .button{width:auto;height:auto;margin-top:12px;white-space:normal}.media-widget-buttons .button:first-child{margin-left:8px}.media-widget-control .placeholder{border:1px dashed #b4b9be;box-sizing:border-box;cursor:pointer;line-height:20px;padding:9px 0;position:relative;text-align:center;width:100%}.media-widget-control .media-widget-preview{background:0 0;text-align:center}.media-widget-control .media-widget-preview .notice{text-align:initial}.media-frame .media-widget-embed-notice p code,.media-widget-control .notice p code{padding:0 0 0 3px}.media-frame .media-widget-embed-notice{margin-top:16px}.media-widget-control .media-widget-preview img{max-width:100%;vertical-align:middle}.media-widget-control .media-widget-preview .wp-video-shortcode{background:#000}.media-frame.media-widget .media-toolbar-secondary{min-width:300px}.media-frame.media-widget .attachment-display-settings .setting.align,.media-frame.media-widget .checkbox-setting.autoplay,.media-frame.media-widget .embed-link-settings .setting.link-text,.media-frame.media-widget .embed-media-settings .setting.align,.media-frame.media-widget .image-details .embed-media-settings .setting.align,.media-frame.media-widget .replace-attachment{display:none}.media-widget-video-preview{width:100%}.media-widget-video-link{display:inline-block;min-height:132px;width:100%;background:#000}.media-widget-video-link .dashicons{font:400 60px/1 dashicons;position:relative;width:100%;top:-90px;color:#fff;text-decoration:none}.media-widget-video-link.no-poster .dashicons{top:30px}.media-frame #embed-url-field.invalid,.media-widget-image-link>.link:invalid{border:1px solid #dc3232}.media-widget-image-link{margin:1em 0}.media-widget-gallery-preview{display:-webkit-box;display:flex;-webkit-box-pack:start;justify-content:flex-start;flex-wrap:wrap;margin:-1.79104477%}.media-widget-preview.media_gallery,.media-widget-preview.media_image{cursor:pointer}.media-widget-preview .placeholder{background:#f1f1f1}.media-widget-gallery-preview .gallery-item{box-sizing:border-box;width:50%;margin:0;background:0 0}.media-widget-gallery-preview .gallery-item .gallery-icon{margin:4.5%}.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child,.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child~.gallery-item,.media-widget-gallery-preview .gallery-item:nth-last-child(n+5),.media-widget-gallery-preview .gallery-item:nth-last-child(n+5)~.gallery-item,.media-widget-gallery-preview .gallery-item:nth-last-child(n+6),.media-widget-gallery-preview .gallery-item:nth-last-child(n+6)~.gallery-item{max-width:33.33%}.media-widget-gallery-preview .gallery-item img{height:auto;vertical-align:bottom}.media-widget-gallery-preview .gallery-icon{position:relative}.media-widget-gallery-preview .gallery-icon-placeholder{position:absolute;top:0;bottom:0;width:100%;box-sizing:border-box;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;background-color:rgba(0,0,0,.5)}.media-widget-gallery-preview .gallery-icon-placeholder-text{font-weight:600;font-size:2em;color:#fff}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #b4b9be;margin:0 auto 10px;height:45px;width:100%;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;box-sizing:border-box}.js .sidebar-name{cursor:pointer}.sidebar-name .handlediv{float:left;width:38px;height:38px;border:0;margin:0;padding:8px;background:0 0;cursor:pointer;outline:0}#widgets-right .sidebar-name .handlediv{margin:5px 0 0 3px}.sidebar-name .handlediv:focus{box-shadow:none;outline:0}#widgets-left .sidebar-name .toggle-indicator{display:none}#widgets-left .sidebar-name .handlediv:focus .toggle-indicator,#widgets-left .sidebar-name:hover .toggle-indicator,#widgets-left .widgets-holder-wrap.closed .sidebar-name .toggle-indicator{display:block}.sidebar-name .toggle-indicator:before{padding:1px 0 1px 2px;border-radius:50%}.sidebar-name .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sidebar-name h2,.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:#72777c}.inactive-sidebar .description,.widget-holder .description{color:#555d66}#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 h2,div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 0 0 10px}#widgets-left .widgets-holder-wrap,div#widgets-left .widget-holder{background:0 0;border:none}#widgets-left .widgets-holder-wrap{border: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;overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:0 0;padding:0;margin:0 0 20px;border: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 .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 h2,div#widgets-right .sidebar-name h3{padding:15px 7px}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}.remove-inactive-widgets .spinner,.sidebar-name .spinner{float:none;position:relative;top:-2px;margin:-5px 5px}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#72777c;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}.editwidget .widget-inside,.widget-control-edit{display:block;padding:0 15px}.widget-control-edit{color:#666;background:#EEE;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:#444 solid 1px}.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-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .description,.js .widgets-holder-wrap.closed .remove-inactive-widgets,.js .widgets-holder-wrap.closed .sidebar-description,.js .widgets-holder-wrap.closed .widget{display:none}.js .widgets-holder-wrap.closed .widget.ui-sortable-helper{display:block}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widget-description,.widget-inside,.widgets_access #access-on,.widgets_access .handlediv,.widgets_access .widget-action,.widgets_access .widget-holder .description{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:#00a0d2}.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{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;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;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:#555d66;position:absolute;top:7px;right:5px}.widgets-chooser li:last-child{border:none}.widgets-chooser li.widgets-chooser-selected{background:#00a0d2;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}#available-widgets .widget.ui-draggable-dragging .widget-top{cursor:move}.text-widget-fields{position:relative}.text-widget-fields [hidden]{display:none}.text-widget-fields .wp-pointer.wp-pointer-top{position:absolute;z-index:3;top:100px;left:10px;right:10px}.text-widget-fields .wp-pointer .wp-pointer-arrow{right:auto;left:15px}.text-widget-fields .wp-pointer .wp-pointer-buttons{line-height:1.4em}.custom-html-widget-fields>p>.CodeMirror{border:1px solid #e5e5e5}.custom-html-widget-fields code{padding-top:1px;padding-bottom:1px}ul.CodeMirror-hints{z-index:101}.widget-control-actions .custom-html-widget-save-button.button.validation-blocked{cursor:not-allowed}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-left:none;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!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}} \ No newline at end of file diff --git a/wp-admin/css/widgets.css b/wp-admin/css/widgets.css new file mode 100644 index 0000000..a4d314a --- /dev/null +++ b/wp-admin/css/widgets.css @@ -0,0 +1,834 @@ +/* General Widgets Styles */ + +.widget { + margin: 0 auto 10px; + position: relative; + box-sizing: border-box; +} + +.widget-top { + font-size: 13px; + font-weight: 600; + background: #f7f7f7; +} + +.widget-top .widget-action { + border: 0; + margin: 0; + padding: 10px; + background: none; + cursor: pointer; + outline: none; +} + +.widget-title h3, +.widget-title h4 { + margin: 0; + padding: 15px; + font-size: 1em; + 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; +} + +.widget.widget-dirty .widget-control-close-wrapper { + display: none; +} + +.in-widget-title, +#widgets-right a.widget-control-edit, +#available-widgets .widget-description { + color: #666; +} + +.deleting .widget-title, +.deleting .widget-top .widget-action .toggle-indicator:before { + color: #a0a5aa; +} + +/* Media Widgets */ +.wp-core-ui .media-widget-control.selected .placeholder, +.wp-core-ui .media-widget-control.selected .not-selected, +.wp-core-ui .media-widget-control .selected { + display: none; +} + +.media-widget-control.selected .selected { + display: inline-block; +} + +.media-widget-buttons { + text-align: left; + margin-top: 0; +} + +.media-widget-control .media-widget-buttons .button { + width: auto; + height: auto; + margin-top: 12px; + white-space: normal; +} + +.media-widget-buttons .button:first-child { + margin-right: 8px; +} + +.media-widget-control .placeholder { + border: 1px dashed #b4b9be; + box-sizing: border-box; + cursor: pointer; + line-height: 20px; + padding: 9px 0; + position: relative; + text-align: center; + width: 100%; +} + +.media-widget-control .media-widget-preview { + background: transparent; + text-align: center; +} +.media-widget-control .media-widget-preview .notice { + text-align: initial; +} +.media-frame .media-widget-embed-notice p code, +.media-widget-control .notice p code { + padding: 0 3px 0 0; +} +.media-frame .media-widget-embed-notice { + margin-top: 16px; +} +.media-widget-control .media-widget-preview img { + max-width: 100%; + vertical-align: middle; +} +.media-widget-control .media-widget-preview .wp-video-shortcode { + background: #000; +} + +.media-frame.media-widget .media-toolbar-secondary { + min-width: 300px; +} + +.media-frame.media-widget .image-details .embed-media-settings .setting.align, +.media-frame.media-widget .attachment-display-settings .setting.align, +.media-frame.media-widget .embed-media-settings .setting.align, +.media-frame.media-widget .embed-link-settings .setting.link-text, +.media-frame.media-widget .replace-attachment, +.media-frame.media-widget .checkbox-setting.autoplay { + display: none; +} + +.media-widget-video-preview { + width: 100%; +} + +.media-widget-video-link { + display: inline-block; + min-height: 132px; + width: 100%; + background: black; +} + +.media-widget-video-link .dashicons { + font: normal 60px/1 'dashicons'; + position: relative; + width: 100%; + top: -90px; + color: white; + text-decoration: none; +} + +.media-widget-video-link.no-poster .dashicons { + top: 30px; +} + +.media-frame #embed-url-field.invalid, +.media-widget-image-link > .link:invalid { + border: 1px solid #dc3232; +} + +.media-widget-image-link { + margin: 1em 0; +} + +.media-widget-gallery-preview { + display: -webkit-box; + display: flex; + -webkit-box-pack: start; + justify-content: flex-start; + flex-wrap: wrap; + margin: -1.79104477%; +} + +.media-widget-preview.media_gallery, +.media-widget-preview.media_image { + cursor: pointer; +} + +.media-widget-preview .placeholder { + background: #f1f1f1; +} + +.media-widget-gallery-preview .gallery-item { + box-sizing: border-box; + width: 50%; + margin: 0; + background: transparent; +} + +.media-widget-gallery-preview .gallery-item .gallery-icon { + margin: 4.5%; +} + +/* + * Use targeted nth-last-child selectors to control the size of each image + * based on how many gallery items are present in the grid. + * See: https://alistapart.com/article/quantity-queries-for-css + */ +.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child, +.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child ~ .gallery-item, +.media-widget-gallery-preview .gallery-item:nth-last-child(n+5), +.media-widget-gallery-preview .gallery-item:nth-last-child(n+5) ~ .gallery-item, +.media-widget-gallery-preview .gallery-item:nth-last-child(n+6), +.media-widget-gallery-preview .gallery-item:nth-last-child(n+6) ~ .gallery-item { + max-width: 33.33%; +} + +.media-widget-gallery-preview .gallery-item img { + height: auto; + vertical-align: bottom; +} + +.media-widget-gallery-preview .gallery-icon { + position: relative; +} + +.media-widget-gallery-preview .gallery-icon-placeholder { + position: absolute; + top: 0; + bottom: 0; + width: 100%; + box-sizing: border-box; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + background-color: rgba( 0, 0, 0, .5 ); +} + +.media-widget-gallery-preview .gallery-icon-placeholder-text { + font-weight: 600; + font-size: 2em; + color: white; +} + + +/* Widget Dragging Helpers */ +.widget.ui-draggable-dragging { + min-width: 100%; +} + +.widget.ui-sortable-helper { + opacity: 0.8; +} + +.widget-placeholder { + border: 1px dashed #b4b9be; + margin: 0 auto 10px; + height: 45px; + width: 100%; + 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; + box-sizing: border-box; +} + +.js .sidebar-name { + cursor: pointer; +} + +.sidebar-name .handlediv { + float: right; + width: 38px; + height: 38px; + border: 0; + margin: 0; + padding: 8px; + background: none; + cursor: pointer; + outline: none; +} + +#widgets-right .sidebar-name .handlediv { + margin: 5px 3px 0 0; +} + +.sidebar-name .handlediv:focus { + box-shadow: none; + outline: none; +} + +#widgets-left .sidebar-name .toggle-indicator { + display: none; +} + +#widgets-left .widgets-holder-wrap.closed .sidebar-name .toggle-indicator, +#widgets-left .sidebar-name:hover .toggle-indicator, +#widgets-left .sidebar-name .handlediv:focus .toggle-indicator { + display: block; +} + +.sidebar-name .toggle-indicator:before { + padding: 1px 2px 1px 0; + border-radius: 50%; +} + +.sidebar-name .handlediv:focus .toggle-indicator:before { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, .8); +} + +.sidebar-name h2, +.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: #72777c; +} + +.widget-holder .description, +.inactive-sidebar .description { + color: #555d66; +} + +#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 h2, +div#widgets-left .sidebar-name h3 { + padding: 10px 0; + margin: 0 10px 0 0; +} + +#widgets-left .widgets-holder-wrap, +div#widgets-left .widget-holder { + background: transparent; + border: none; +} + +#widgets-left .widgets-holder-wrap { + border: 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; + overflow-wrap: break-word; + word-wrap: break-word; + -ms-word-break: break-all; + word-break: break-word; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +#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; + 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 .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 h2, +div#widgets-right .sidebar-name h3 { + padding: 15px 7px; +} + +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, +.remove-inactive-widgets .spinner { + float: none; + position: relative; + top: -2px; + margin: -5px 5px; +} + +/* Dragging a widget over a closed sidebar */ +#widgets-right .widgets-holder-wrap.widget-hover { + border-color: #72777c; + 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 .widgets-holder-wrap.closed .remove-inactive-widgets, +.js .widgets-holder-wrap.closed .description, +.js .closed br.clear { + display: none; +} + +.js .widgets-holder-wrap.closed .widget.ui-sortable-helper { + display: block; +} + +/* 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: 400; + padding-left: 15px; + font-size: 12px; + line-height: 1; + color: black; +} + +.js #removing-widget { + color: #00a0d2; +} + +.widget-control-noform, +#access-off, +.widgets_access .widget-action, +.widgets_access .handlediv, +.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 { + 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; + 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; + transition: background 0.2s ease-in-out; +} + + /* @todo looks like these hover/focus states are overridden by .widgets-chooser-selected */ +.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: #555d66; + position: absolute; + top: 7px; + left: 5px; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser li.widgets-chooser-selected { + background: #00a0d2; + 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; +} + +#available-widgets .widget.ui-draggable-dragging .widget-top { + cursor: move; +} + +/* =Specific widget styling +-------------------------------------------------------------- */ +.text-widget-fields { + position: relative; +} +.text-widget-fields [hidden] { + display: none; +} +.text-widget-fields .wp-pointer.wp-pointer-top { + position: absolute; + z-index: 3; + top: 100px; + right: 10px; + left: 10px; +} +.text-widget-fields .wp-pointer .wp-pointer-arrow { + left: auto; + right: 15px; +} +.text-widget-fields .wp-pointer .wp-pointer-buttons { + line-height: 1.4em; +} + +.custom-html-widget-fields > p > .CodeMirror { + border: 1px solid #e5e5e5; +} +.custom-html-widget-fields code { + padding-top: 1px; + padding-bottom: 1px; +} +ul.CodeMirror-hints { + z-index: 101; /* Due to z-index 100 set on .widget.open */ +} +.widget-control-actions .custom-html-widget-save-button.button.validation-blocked { + cursor: not-allowed; +} + +/* =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 !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/widgets.min.css b/wp-admin/css/widgets.min.css new file mode 100644 index 0000000..6021b87 --- /dev/null +++ b/wp-admin/css/widgets.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.widget.widget-dirty .widget-control-close-wrapper,.wp-core-ui .media-widget-control .selected,.wp-core-ui .media-widget-control.selected .not-selected,.wp-core-ui .media-widget-control.selected .placeholder{display:none}.widget{margin:0 auto 10px;position:relative;box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top .widget-action{border:0;margin:0;padding:10px;background:0 0;cursor:pointer;outline:0}.widget-title h3,.widget-title h4{margin:0;padding:15px;font-size:1em;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;line-height:16px}#available-widgets .widget-description,#widgets-right a.widget-control-edit,.in-widget-title{color:#666}.deleting .widget-title,.deleting .widget-top .widget-action .toggle-indicator:before{color:#a0a5aa}.media-widget-control.selected .selected{display:inline-block}.media-widget-buttons{text-align:left;margin-top:0}.media-widget-control .media-widget-buttons .button{width:auto;height:auto;margin-top:12px;white-space:normal}.media-widget-buttons .button:first-child{margin-right:8px}.media-widget-control .placeholder{border:1px dashed #b4b9be;box-sizing:border-box;cursor:pointer;line-height:20px;padding:9px 0;position:relative;text-align:center;width:100%}.media-widget-control .media-widget-preview{background:0 0;text-align:center}.media-widget-control .media-widget-preview .notice{text-align:initial}.media-frame .media-widget-embed-notice p code,.media-widget-control .notice p code{padding:0 3px 0 0}.media-frame .media-widget-embed-notice{margin-top:16px}.media-widget-control .media-widget-preview img{max-width:100%;vertical-align:middle}.media-widget-control .media-widget-preview .wp-video-shortcode{background:#000}.media-frame.media-widget .media-toolbar-secondary{min-width:300px}.media-frame.media-widget .attachment-display-settings .setting.align,.media-frame.media-widget .checkbox-setting.autoplay,.media-frame.media-widget .embed-link-settings .setting.link-text,.media-frame.media-widget .embed-media-settings .setting.align,.media-frame.media-widget .image-details .embed-media-settings .setting.align,.media-frame.media-widget .replace-attachment{display:none}.media-widget-video-preview{width:100%}.media-widget-video-link{display:inline-block;min-height:132px;width:100%;background:#000}.media-widget-video-link .dashicons{font:400 60px/1 dashicons;position:relative;width:100%;top:-90px;color:#fff;text-decoration:none}.media-widget-video-link.no-poster .dashicons{top:30px}.media-frame #embed-url-field.invalid,.media-widget-image-link>.link:invalid{border:1px solid #dc3232}.media-widget-image-link{margin:1em 0}.media-widget-gallery-preview{display:-webkit-box;display:flex;-webkit-box-pack:start;justify-content:flex-start;flex-wrap:wrap;margin:-1.79104477%}.media-widget-preview.media_gallery,.media-widget-preview.media_image{cursor:pointer}.media-widget-preview .placeholder{background:#f1f1f1}.media-widget-gallery-preview .gallery-item{box-sizing:border-box;width:50%;margin:0;background:0 0}.media-widget-gallery-preview .gallery-item .gallery-icon{margin:4.5%}.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child,.media-widget-gallery-preview .gallery-item:nth-last-child(3):first-child~.gallery-item,.media-widget-gallery-preview .gallery-item:nth-last-child(n+5),.media-widget-gallery-preview .gallery-item:nth-last-child(n+5)~.gallery-item,.media-widget-gallery-preview .gallery-item:nth-last-child(n+6),.media-widget-gallery-preview .gallery-item:nth-last-child(n+6)~.gallery-item{max-width:33.33%}.media-widget-gallery-preview .gallery-item img{height:auto;vertical-align:bottom}.media-widget-gallery-preview .gallery-icon{position:relative}.media-widget-gallery-preview .gallery-icon-placeholder{position:absolute;top:0;bottom:0;width:100%;box-sizing:border-box;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;background-color:rgba(0,0,0,.5)}.media-widget-gallery-preview .gallery-icon-placeholder-text{font-weight:600;font-size:2em;color:#fff}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #b4b9be;margin:0 auto 10px;height:45px;width:100%;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;box-sizing:border-box}.js .sidebar-name{cursor:pointer}.sidebar-name .handlediv{float:right;width:38px;height:38px;border:0;margin:0;padding:8px;background:0 0;cursor:pointer;outline:0}#widgets-right .sidebar-name .handlediv{margin:5px 3px 0 0}.sidebar-name .handlediv:focus{box-shadow:none;outline:0}#widgets-left .sidebar-name .toggle-indicator{display:none}#widgets-left .sidebar-name .handlediv:focus .toggle-indicator,#widgets-left .sidebar-name:hover .toggle-indicator,#widgets-left .widgets-holder-wrap.closed .sidebar-name .toggle-indicator{display:block}.sidebar-name .toggle-indicator:before{padding:1px 2px 1px 0;border-radius:50%}.sidebar-name .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sidebar-name h2,.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:#72777c}.inactive-sidebar .description,.widget-holder .description{color:#555d66}#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 h2,div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 10px 0 0}#widgets-left .widgets-holder-wrap,div#widgets-left .widget-holder{background:0 0;border:none}#widgets-left .widgets-holder-wrap{border: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;overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:0 0;padding:0;margin:0 0 20px;border: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 .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 h2,div#widgets-right .sidebar-name h3{padding:15px 7px}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}.remove-inactive-widgets .spinner,.sidebar-name .spinner{float:none;position:relative;top:-2px;margin:-5px 5px}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#72777c;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}.editwidget .widget-inside,.widget-control-edit{display:block;padding:0 15px}.widget-control-edit{color:#666;background:#EEE;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:#444 solid 1px}.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-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .description,.js .widgets-holder-wrap.closed .remove-inactive-widgets,.js .widgets-holder-wrap.closed .sidebar-description,.js .widgets-holder-wrap.closed .widget{display:none}.js .widgets-holder-wrap.closed .widget.ui-sortable-helper{display:block}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widget-description,.widget-inside,.widgets_access #access-on,.widgets_access .handlediv,.widgets_access .widget-action,.widgets_access .widget-holder .description{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:#00a0d2}.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{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;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;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:#555d66;position:absolute;top:7px;left:5px}.widgets-chooser li:last-child{border:none}.widgets-chooser li.widgets-chooser-selected{background:#00a0d2;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}#available-widgets .widget.ui-draggable-dragging .widget-top{cursor:move}.text-widget-fields{position:relative}.text-widget-fields [hidden]{display:none}.text-widget-fields .wp-pointer.wp-pointer-top{position:absolute;z-index:3;top:100px;right:10px;left:10px}.text-widget-fields .wp-pointer .wp-pointer-arrow{left:auto;right:15px}.text-widget-fields .wp-pointer .wp-pointer-buttons{line-height:1.4em}.custom-html-widget-fields>p>.CodeMirror{border:1px solid #e5e5e5}.custom-html-widget-fields code{padding-top:1px;padding-bottom:1px}ul.CodeMirror-hints{z-index:101}.widget-control-actions .custom-html-widget-save-button.button.validation-blocked{cursor:not-allowed}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-right:none;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!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}} \ No newline at end of file diff --git a/wp-admin/css/wp-admin-rtl.css b/wp-admin/css/wp-admin-rtl.css new file mode 100644 index 0000000..5e7c37d --- /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(about-rtl.css); +@import url(nav-menus-rtl.css); +@import url(widgets-rtl.css); +@import url(site-icon-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..486af53 --- /dev/null +++ b/wp-admin/css/wp-admin-rtl.min.css @@ -0,0 +1,15 @@ +/*! This file is auto-generated */ +@import url(common-rtl.min.css); +@import url(forms-rtl.min.css); +@import url(admin-menu-rtl.min.css); +@import url(dashboard-rtl.min.css); +@import url(list-tables-rtl.min.css); +@import url(edit-rtl.min.css); +@import url(revisions-rtl.min.css); +@import url(media-rtl.min.css); +@import url(themes-rtl.min.css); +@import url(about-rtl.min.css); +@import url(nav-menus-rtl.min.css); +@import url(widgets-rtl.min.css); +@import url(site-icon-rtl.min.css); +@import url(l10n-rtl.min.css); diff --git a/wp-admin/css/wp-admin.css b/wp-admin/css/wp-admin.css new file mode 100644 index 0000000..14c10f9 --- /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(about.css); +@import url(nav-menus.css); +@import url(widgets.css); +@import url(site-icon.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..e139523 --- /dev/null +++ b/wp-admin/css/wp-admin.min.css @@ -0,0 +1,15 @@ +/*! This file is auto-generated */ +@import url(common.min.css); +@import url(forms.min.css); +@import url(admin-menu.min.css); +@import url(dashboard.min.css); +@import url(list-tables.min.css); +@import url(edit.min.css); +@import url(revisions.min.css); +@import url(media.min.css); +@import url(themes.min.css); +@import url(about.min.css); +@import url(nav-menus.min.css); +@import url(widgets.min.css); +@import url(site-icon.min.css); +@import url(l10n.min.css); diff --git a/wp-admin/custom-background.php b/wp-admin/custom-background.php new file mode 100644 index 0000000..7326f7e --- /dev/null +++ b/wp-admin/custom-background.php @@ -0,0 +1,559 @@ +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_custom-background-add', array( $this, 'ajax_background_add' ) ); + + // Unused since 3.5.0. + 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 + */ + public function init() { + $page = add_theme_page( __( 'Background' ), __( 'Background' ), 'edit_theme_options', 'custom-background', array( $this, 'admin_page' ) ); + if ( ! $page ) { + return; + } + + 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 + */ + public 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 + */ + public 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-preset'] ) ) { + check_admin_referer( 'custom-background' ); + + if ( in_array( $_POST['background-preset'], array( 'default', 'fill', 'fit', 'repeat', 'custom' ), true ) ) { + $preset = $_POST['background-preset']; + } else { + $preset = 'default'; + } + + set_theme_mod( 'background_preset', $preset ); + } + + if ( isset( $_POST['background-position'] ) ) { + check_admin_referer( 'custom-background' ); + + $position = explode( ' ', $_POST['background-position'] ); + + if ( in_array( $position[0], array( 'left', 'center', 'right' ), true ) ) { + $position_x = $position[0]; + } else { + $position_x = 'left'; + } + + if ( in_array( $position[1], array( 'top', 'center', 'bottom' ), true ) ) { + $position_y = $position[1]; + } else { + $position_y = 'top'; + } + + set_theme_mod( 'background_position_x', $position_x ); + set_theme_mod( 'background_position_y', $position_y ); + } + + if ( isset( $_POST['background-size'] ) ) { + check_admin_referer( 'custom-background' ); + + if ( in_array( $_POST['background-size'], array( 'auto', 'contain', 'cover' ), true ) ) { + $size = $_POST['background-size']; + } else { + $size = 'auto'; + } + + set_theme_mod( 'background_size', $size ); + } + + if ( isset( $_POST['background-repeat'] ) ) { + check_admin_referer( 'custom-background' ); + + $repeat = $_POST['background-repeat']; + + if ( 'no-repeat' !== $repeat ) { + $repeat = 'repeat'; + } + + set_theme_mod( 'background_repeat', $repeat ); + } + + if ( isset( $_POST['background-attachment'] ) ) { + check_admin_referer( 'custom-background' ); + + $attachment = $_POST['background-attachment']; + + if ( 'fixed' !== $attachment ) { + $attachment = 'scroll'; + } + + 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 + */ + public function admin_page() { +?> +
    +

    + + +
    +

    + Customizer.' ), + admin_url( 'customize.php?autofocus[control]=background_image' ) + ); + ?> +

    +
    + + +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 . ';'; + + $background_image_thumb = get_background_image(); + if ( $background_image_thumb ) { + $background_image_thumb = esc_url( set_url_scheme( get_theme_mod( 'background_image_thumb', str_replace( '%', '%%', $background_image_thumb ) ) ) ); + $background_position_x = get_theme_mod( 'background_position_x', get_theme_support( 'custom-background', 'default-position-x' ) ); + $background_position_y = get_theme_mod( 'background_position_y', get_theme_support( 'custom-background', 'default-position-y' ) ); + $background_size = get_theme_mod( 'background_size', get_theme_support( 'custom-background', 'default-size' ) ); + $background_repeat = get_theme_mod( 'background_repeat', get_theme_support( 'custom-background', 'default-repeat' ) ); + $background_attachment = get_theme_mod( 'background_attachment', get_theme_support( 'custom-background', 'default-attachment' ) ); + + // Background-image URL must be single quote, see below. + $background_styles .= " background-image: url('$background_image_thumb');" + . " background-size: $background_size;" + . " background-position: $background_position_x $background_position_y;" + . " background-repeat: $background_repeat;" + . " background-attachment: $background_attachment;"; + } + ?> +
    + +
    + + +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +

    +
    + + + + +

    +

    +
    + +

    +
    +
    + +

    +
    + + + + + + array( 'label' => __( 'Top Left' ), 'icon' => 'dashicons dashicons-arrow-left-alt' ), + 'center top' => array( 'label' => __( 'Top' ), 'icon' => 'dashicons dashicons-arrow-up-alt' ), + 'right top' => array( 'label' => __( 'Top Right' ), 'icon' => 'dashicons dashicons-arrow-right-alt' ), + ), + array( + 'left center' => array( 'label' => __( 'Left' ), 'icon' => 'dashicons dashicons-arrow-left-alt' ), + 'center center' => array( 'label' => __( 'Center' ), 'icon' => 'background-position-center-icon' ), + 'right center' => array( 'label' => __( 'Right' ), 'icon' => 'dashicons dashicons-arrow-right-alt' ), + ), + array( + 'left bottom' => array( 'label' => __( 'Bottom Left' ), 'icon' => 'dashicons dashicons-arrow-left-alt' ), + 'center bottom' => array( 'label' => __( 'Bottom' ), 'icon' => 'dashicons dashicons-arrow-down-alt' ), + 'right bottom' => array( 'label' => __( 'Bottom Right' ), 'icon' => 'dashicons dashicons-arrow-right-alt' ), + ), +); +?> + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + $input ) : ?> + + +
    + +
    +
    + +
    + + +
    + + +
    + +> +
    + + + +
    + +
    + false); + + $uploaded_file = $_FILES['import']; + $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'] ); + 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; + } + + /** + * Ajax handler for adding custom background context to an attachment. + * + * Triggered when the user adds a new background image from the + * Media Manager. + * + * @since 4.1.0 + */ + public function ajax_background_add() { + check_ajax_referer( 'background-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(); + } + + update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_stylesheet() ); + + wp_send_json_success(); + } + + /** + * + * @since 3.4.0 + * @deprecated 3.5.0 + * + * @param array $form_fields + * @return array $form_fields + */ + public function attachment_fields_to_edit( $form_fields ) { + return $form_fields; + } + + /** + * + * @since 3.4.0 + * @deprecated 3.5.0 + * + * @param array $tabs + * @return array $tabs + */ + public function filter_upload_tabs( $tabs ) { + return $tabs; + } + + /** + * + * @since 3.4.0 + * @deprecated 3.5.0 + */ + 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..d345766 --- /dev/null +++ b/wp-admin/custom-header.php @@ -0,0 +1,1445 @@ +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 + */ + public function init() { + $page = add_theme_page( __( 'Header' ), __( 'Header' ), 'edit_theme_options', 'custom-header', array( $this, 'admin_page' ) ); + if ( ! $page ) { + return; + } + + 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 + */ + public 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 + */ + public 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 + */ + public 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 + */ + public 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 + */ + public 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 + * + * @global array $_wp_default_headers + */ + public function process_default_headers() { + global $_wp_default_headers; + + 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 + * + * @param string $type The header type. One of 'default' (for the Uploaded Images control) + * or 'uploaded' (for the Uploaded Images control). + */ + public 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_alt_text = empty( $header['alt_text'] ) ? '' : $header['alt_text']; + echo '
    '; + echo ''; + echo '
    '; + } + echo '
    '; + } + + /** + * Execute JavaScript depending on step. + * + * @since 2.1.0 + */ + public 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 + */ + public function js_1() { + $default_color = ''; + if ( current_theme_supports( 'custom-header', 'default-text-color' ) ) { + $default_color = get_theme_support( 'custom-header', 'default-text-color' ); + if ( $default_color && false === strpos( $default_color, '#' ) ) { + $default_color = '#' . $default_color; + } + } + ?> + + + +process_default_headers(); +?> + +
    +

    + + +
    +

    + Customizer.' ), + admin_url( 'customize.php?autofocus[control]=header_image' ) + ); + ?> +

    +
    + + +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 = get_header_image(); + + if ( $header_image ) { + $header_image_style = 'background-image:url(' . esc_url( $header_image ) . ');'; + } else { + $header_image_style = ''; + } + + 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( + /* translators: %s: size in pixels */ + __( 'Images should be at least %s wide.' ) . ' ', + sprintf( + /* translators: %d: custom header width */ + '' . __( '%d pixels' ) . '', + get_theme_support( 'custom-header', 'width' ) + ) + ); + } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) { + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) + printf( + /* translators: %s: size in pixels */ + __( 'Images should be at least %s tall.' ) . ' ', + sprintf( + /* translators: %d: custom header height */ + '' . __( '%d pixels' ) . '', + 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( + /* translators: %s: size in pixels */ + __( 'Suggested width is %s.' ) . ' ', + sprintf( + /* translators: %d: custom header width */ + '' . __( '%d pixels' ) . '', + get_theme_support( 'custom-header', 'width' ) + ) + ); + if ( current_theme_supports( 'custom-header', 'height' ) ) + printf( + /* translators: %s: size in pixels */ + __( 'Suggested height is %s.' ) . ' ', + sprintf( + /* translators: %d: custom header height */ + '' . __( '%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' ), esc_html( $default_color ) ) . ''; + } + ?> +

    +
    + + + +
    +
    + +' . __( 'Something went wrong.' ) . '' . + '

    ' . __( 'The current theme does not support uploading a custom header image.' ) . '

    ', + 403 + ); + } + + if ( empty( $_POST ) && isset( $_GET['file'] ) ) { + $attachment_id = absint( $_GET['file'] ); + $file = get_attached_file( $attachment_id, true ); + $url = wp_get_attachment_image_src( $attachment_id, 'full' ); + $url = $url[0]; + } elseif ( isset( $_POST ) ) { + $data = $this->step_2_manage_upload(); + $attachment_id = $data['attachment_id']; + $file = $data['file']; + $url = $data['url']; + } + + 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'] ); + 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 + * @since 4.4.0 Switched to using wp_get_attachment_url() instead of the guid + * for retrieving the header image URL. + */ + public function step_3() { + check_admin_referer( 'custom-header-crop-image' ); + + if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) { + wp_die( + '

    ' . __( 'Something went wrong.' ) . '

    ' . + '

    ' . __( 'The current theme does not support uploading a custom header image.' ) . '

    ', + 403 + ); + } + + if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) { + wp_die( + '

    ' . __( 'Something went wrong.' ) . '

    ' . + '

    ' . __( 'The current theme does not support a flexible sized header image.' ) . '

    ', + 403 + ); + } + + 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 = wp_get_attachment_url( $attachment_id ); + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); + + // Cleanup. + $medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original ); + if ( file_exists( $medium ) ) { + wp_delete_file( $medium ); + } + + if ( empty( $_POST['create-new-attachment'] ) && empty( $_POST['skip-cropping'] ) ) { + wp_delete_file( $original ); + } + + return $this->finished(); + } + + /** + * Display last step of custom header image page. + * + * @since 2.1.0 + */ + public function finished() { + $this->updated = true; + $this->step_1(); + } + + /** + * Display the page based on the current step. + * + * @since 2.1.0 + */ + public function admin_page() { + if ( ! current_user_can('edit_theme_options') ) + wp_die(__('Sorry, you are not allowed 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 + * + * @param array $form_fields + * @return array $form_fields + */ + public function attachment_fields_to_edit( $form_fields ) { + return $form_fields; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + * + * @param array $tabs + * @return array $tabs + */ + public 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). + * + * @since 3.4.0 + * + * @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 attachment ID of the image). + * Or an array of arguments: attachment_id, url, width, height. All are required. + */ + 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() { + $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 ) { + $this->remove_header_image(); + return; + } + $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. + * + * @since 3.9.0 + * + * @param array $dimensions + * @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_width' => 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'. + * + * @since 3.9.0 + * + * @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 = wp_get_attachment_url( $parent->ID ); + $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_mime_type' => $image_type, + 'guid' => $url, + 'context' => 'custom-header', + 'post_parent' => $parent_attachment_id, + ); + + return $object; + } + + /** + * Insert an attachment and its metadata. + * + * @since 3.9.0 + * + * @param array $object Attachment object. + * @param string $cropped Cropped image URL. + * @return int Attachment ID. + */ + final public function insert_attachment( $object, $cropped ) { + $parent_id = isset( $object['post_parent'] ) ? $object['post_parent'] : null; + unset( $object['post_parent'] ); + + $attachment_id = wp_insert_attachment( $object, $cropped ); + $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped ); + + // If this is a crop, save the original attachment ID as metadata. + if ( $parent_id ) { + $metadata['attachment_parent'] = $parent_id; + } + + /** + * Filters the header image attachment metadata. + * + * @since 3.9.0 + * + * @see wp_generate_attachment_metadata() + * + * @param array $metadata Attachment metadata. + */ + $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. + * + * @since 3.9.0 + */ + public 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.' ) ) ); + } + + /** 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 ); + + $previous = $this->get_previous_crop( $object ); + + if ( $previous ) { + $object['ID'] = $previous; + } else { + unset( $object['ID'] ); + } + + $new_attachment_id = $this->insert_attachment( $object, $cropped ); + + $object['attachment_id'] = $new_attachment_id; + $object['url'] = wp_get_attachment_url( $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. + * + * @since 3.9.0 + */ + public 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. + * + * @since 3.9.0 + */ + public 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(); + } + + /** + * Updates the last-used postmeta on a header image attachment after saving a new header image via the Customizer. + * + * @since 3.9.0 + * + * @param WP_Customize_Manager $wp_customize Customize manager. + */ + public function customize_set_last_used( $wp_customize ) { + + $header_image_data_setting = $wp_customize->get_setting( 'header_image_data' ); + if ( ! $header_image_data_setting ) { + return; + } + $data = $header_image_data_setting->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() ); + } + + /** + * Gets the details of default header images if defined. + * + * @since 3.9.0 + * + * @return array Default header images. + */ + 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. + return array_merge( $header_images, $this->default_headers ); + } + + /** + * Gets the previously uploaded header images. + * + * @since 3.9.0 + * + * @return array Uploaded 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; + } + + /** + * Get the ID of a previous crop from the same base image. + * + * @since 4.9.0 + * + * @param array $object A crop attachment object. + * @return int|false An attachment ID if one exists. False if none. + */ + public function get_previous_crop( $object ) { + $header_images = $this->get_uploaded_header_images(); + + // Bail early if there are no header images. + if ( empty( $header_images ) ) { + return false; + } + + $previous = false; + + foreach ( $header_images as $image ) { + if ( $image['attachment_parent'] === $object['post_parent'] ) { + $previous = $image['attachment_id']; + break; + } + } + + return $previous; + } +} diff --git a/wp-admin/customize.php b/wp-admin/customize.php new file mode 100644 index 0000000..d98c2a1 --- /dev/null +++ b/wp-admin/customize.php @@ -0,0 +1,262 @@ +' . __( 'You need a higher level of permission.' ) . '' . + '

    ' . __( 'Sorry, you are not allowed to customize this site.' ) . '

    ', + 403 + ); +} + +/** + * @global WP_Scripts $wp_scripts + * @global WP_Customize_Manager $wp_customize + */ +global $wp_scripts, $wp_customize; + +if ( $wp_customize->changeset_post_id() ) { + $changeset_post = get_post( $wp_customize->changeset_post_id() ); + + if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->edit_post, $changeset_post->ID ) ) { + wp_die( + '

    ' . __( 'You need a higher level of permission.' ) . '

    ' . + '

    ' . __( 'Sorry, you are not allowed to edit this changeset.' ) . '

    ', + 403 + ); + } + + $missed_schedule = ( + 'future' === $changeset_post->post_status && + get_post_time( 'G', true, $changeset_post ) < time() + ); + if ( $missed_schedule ) { + /* + * Note that an Ajax request spawns here instead of just calling `wp_publish_post( $changeset_post->ID )`. + * + * Because WP_Customize_Manager is not instantiated for customize.php with the `settings_previewed=false` + * argument, settings cannot be reliably saved. Some logic short-circuits if the current value is the + * same as the value being saved. This is particularly true for options via `update_option()`. + * + * By opening an Ajax request, this is avoided and the changeset is published. See #39221. + */ + $nonces = $wp_customize->get_nonces(); + $request_args = array( + 'nonce' => $nonces['save'], + 'customize_changeset_uuid' => $wp_customize->changeset_uuid(), + 'wp_customize' => 'on', + 'customize_changeset_status' => 'publish', + ); + ob_start(); + ?> + + + ' . __( 'Your scheduled changes just published' ) . '' . + '

    ' . __( 'Customize New Changes' ) . '

    ' . $script, + 200 + ); + } + + if ( in_array( get_post_status( $changeset_post->ID ), array( 'publish', 'trash' ), true ) ) { + wp_die( + '

    ' . __( 'Something went wrong.' ) . '

    ' . + '

    ' . __( 'This changeset cannot be further modified.' ) . '

    ' . + '

    ' . __( 'Customize New Changes' ) . '

    ', + 403 + ); + } +} + + +wp_reset_vars( array( 'url', 'return', 'autofocus' ) ); +if ( ! empty( $url ) ) { + $wp_customize->set_preview_url( wp_unslash( $url ) ); +} +if ( ! empty( $return ) ) { + $wp_customize->set_return_url( wp_unslash( $return ) ); +} +if ( ! empty( $autofocus ) && is_array( $autofocus ) ) { + $wp_customize->set_autofocus( wp_unslash( $autofocus ) ); +} + +$registered = $wp_scripts->registered; +$wp_scripts = new WP_Scripts; +$wp_scripts->registered = $registered; + +add_action( 'customize_controls_print_scripts', 'print_head_scripts', 20 ); +add_action( 'customize_controls_print_footer_scripts', '_wp_footer_scripts' ); +add_action( 'customize_controls_print_styles', 'print_admin_styles', 20 ); + +/** + * Fires when Customizer controls are initialized, before scripts are enqueued. + * + * @since 3.4.0 + */ +do_action( 'customize_controls_init' ); + +wp_enqueue_script( 'heartbeat' ); +wp_enqueue_script( 'customize-controls' ); +wp_enqueue_style( 'customize-controls' ); + +/** + * 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'; + + ?>is_ios() ) { + $body_class .= ' ios'; +} + +if ( is_rtl() ) { + $body_class .= ' rtl'; +} +$body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); + +$admin_title = sprintf( $wp_customize->get_document_title_template(), __( 'Loading…' ) ); + +?><?php echo $admin_title; ?> + + + + + + +
    +
    +
    + is_theme_active() ? __( 'Publish' ) : __( 'Activate & Publish' ); ?> +
    + + +
    + + + + + +
    + +
    +
    +
    +
    +
    + +
    +
    +
      +
      +
      +
      +
      + ' . get_bloginfo( 'name', 'display' ) . '' ); + ?> + +
      +
      +
      + +
      +
      +
      +
      +
      + + +
      +
      + +
      + + diff --git a/wp-admin/edit-comments.php b/wp-admin/edit-comments.php new file mode 100644 index 0000000..4076bf2 --- /dev/null +++ b/wp-admin/edit-comments.php @@ -0,0 +1,334 @@ +' . __( 'You need a higher level of permission.' ) . '' . + '

      ' . __( 'Sorry, you are not allowed to edit comments.' ) . '

      ', + 403 + ); +} + +$wp_list_table = _get_list_table('WP_Comments_List_Table'); +$pagenum = $wp_list_table->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 ); + + wp_defer_comment_counting( true ); + + 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 ( ! in_array( $doaction, array( 'approve', 'unapprove', 'spam', 'unspam', 'trash', 'delete' ), true ) ) { + $screen = get_current_screen()->id; + + /** + * Fires when a custom bulk action should be handled. + * + * The redirect link should be modified with success or failure feedback + * from the action to be used to display feedback to the user. + * + * The dynamic portion of the hook name, `$screen`, refers to the current screen ID. + * + * @since 4.7.0 + * + * @param string $redirect_url The redirect URL. + * @param string $doaction The action being taken. + * @param array $items The items to take the action on. + */ + $redirect_to = apply_filters( "handle_bulk_actions-{$screen}", $redirect_to, $doaction, $comment_ids ); + } + + wp_defer_comment_counting( false ); + + 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 ) { + $comments_count = wp_count_comments( $post_id ); + $draft_or_post_title = wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ); + if ( $comments_count->moderated > 0 ) { + /* translators: 1: comments count 2: post title */ + $title = sprintf( __( 'Comments (%1$s) on “%2$s”' ), + number_format_i18n( $comments_count->moderated ), + $draft_or_post_title + ); + } else { + /* translators: %s: post title */ + $title = sprintf( __( 'Comments on “%s”' ), + $draft_or_post_title + ); + } +} else { + $comments_count = wp_count_comments(); + if ( $comments_count->moderated > 0 ) { + /* translators: %s: comments count */ + $title = sprintf( __( 'Comments (%s)' ), + number_format_i18n( $comments_count->moderated ) + ); + } else { + $title = __( 'Comments' ); + } +} + +add_screen_option( 'per_page' ); + +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, 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 there are pending comments, a red notification circle with the number of pending comments is displayed. Clicking the notification circle will filter the comments screen to show only pending comments on that post.' ) . '

      ' . + '

      ' . __( 'In the Submitted On column, the date and time the comment was left on your site appears. Clicking on the date/time link will take you to that comment on your live site.' ) . '

      ' . + '

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

      ' +); + +get_current_screen()->set_screen_reader_content( array( + 'heading_views' => __( 'Filter comments list' ), + 'heading_pagination' => __( 'Comments list navigation' ), + 'heading_list' => __( 'Comments list' ), +) ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
      +

      %2$s', + get_edit_post_link( $post_id ), + wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) + ) + ); +} else { + _e( 'Comments' ); +} +?>

      + +'; + /* translators: %s: search keywords */ + printf( __( 'Search results for “%s”' ), + wp_html_excerpt( esc_html( wp_unslash( $_REQUEST['s'] ) ), 50, '…' ) + ); + echo ''; +} +?> + +
      + +

      ' . $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 ) { + /* translators: %s: number of comments approved */ + $messages[] = sprintf( _n( '%s comment approved', '%s comments approved', $approved ), $approved ); + } + + if ( $spammed > 0 ) { + $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; + /* translators: %s: number of comments marked as spam */ + $messages[] = sprintf( _n( '%s comment marked as spam.', '%s comments marked as spam.', $spammed ), $spammed ) . ' ' . __('Undo') . '
      '; + } + + if ( $unspammed > 0 ) { + /* translators: %s: number of comments restored from the spam */ + $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; + /* translators: %s: number of comments moved to the Trash */ + $messages[] = sprintf( _n( '%s comment moved to the Trash.', '%s comments moved to the Trash.', $trashed ), $trashed ) . ' ' . __('Undo') . '
      '; + } + + if ( $untrashed > 0 ) { + /* translators: %s: number of comments restored from the Trash */ + $messages[] = sprintf( _n( '%s comment restored from the Trash', '%s comments restored from the Trash', $untrashed ), $untrashed ); + } + + if ( $deleted > 0 ) { + /* translators: %s: number of comments permanently deleted */ + $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..2400521 --- /dev/null +++ b/wp-admin/edit-form-advanced.php @@ -0,0 +1,768 @@ + 'ID', 'number' => 2 ) ); + + if ( count( $check_users ) > 1 ) + add_action( 'admin_footer', '_admin_notice_post_locked' ); + + unset( $check_users ); +} + +wp_enqueue_script('post'); +$_wp_editor_expand = $_content_editor_dfw = false; + +/** + * Filters whether to enable the 'expand' functionality in the post editor. + * + * @since 4.0.0 + * @since 4.1.0 Added the `$post_type` parameter. + * + * @param bool $expand Whether to enable the 'expand' functionality. Default true. + * @param string $post_type Post type. + */ +if ( post_type_supports( $post_type, 'editor' ) && ! wp_is_mobile() && + ! ( $is_IE && preg_match( '/MSIE [5678]/', $_SERVER['HTTP_USER_AGENT'] ) ) && + apply_filters( 'wp_editor_expand', true, $post_type ) ) { + + wp_enqueue_script('editor-expand'); + $_content_editor_dfw = true; + $_wp_editor_expand = ( get_user_setting( 'editor_expand', 'on' ) === 'on' ); +} + +if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); + +/** + * Post ID global + * @name $post_ID + * @var int + */ +$post_ID = isset($post_ID) ? (int) $post_ID : 0; +$user_ID = isset($user_ID) ? (int) $user_ID : 0; +$action = isset($action) ? $action : ''; + +if ( $post_ID == get_option( 'page_for_posts' ) && empty( $post->post_content ) ) { + add_action( 'edit_form_after_title', '_wp_posts_page_notice' ); + remove_post_type_support( $post_type, 'editor' ); +} + +$thumbnail_support = current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' ); +if ( ! $thumbnail_support && 'attachment' === $post_type && $post->post_mime_type ) { + if ( wp_attachment_is( 'audio', $post ) ) { + $thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' ); + } elseif ( wp_attachment_is( 'video', $post ) ) { + $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). + */ +$permalink = get_permalink( $post_ID ); +if ( ! $permalink ) { + $permalink = ''; +} + +$messages = array(); + +$preview_post_link_html = $scheduled_post_link_html = $view_post_link_html = ''; +$preview_page_link_html = $scheduled_page_link_html = $view_page_link_html = ''; + +$preview_url = get_preview_post_link( $post ); + +$viewable = is_post_type_viewable( $post_type_object ); + +if ( $viewable ) { + + // Preview post link. + $preview_post_link_html = sprintf( ' %2$s', + esc_url( $preview_url ), + __( 'Preview post' ) + ); + + // Scheduled post preview link. + $scheduled_post_link_html = sprintf( ' %2$s', + esc_url( $permalink ), + __( 'Preview post' ) + ); + + // View post link. + $view_post_link_html = sprintf( ' %2$s', + esc_url( $permalink ), + __( 'View post' ) + ); + + // Preview page link. + $preview_page_link_html = sprintf( ' %2$s', + esc_url( $preview_url ), + __( 'Preview page' ) + ); + + // Scheduled page preview link. + $scheduled_page_link_html = sprintf( ' %2$s', + esc_url( $permalink ), + __( 'Preview page' ) + ); + + // View page link. + $view_page_link_html = sprintf( ' %2$s', + esc_url( $permalink ), + __( 'View page' ) + ); + +} + +/* translators: Publish box date format, see https://secure.php.net/date */ +$scheduled_date = date_i18n( __( 'M j, Y @ H:i' ), strtotime( $post->post_date ) ); + +$messages['post'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Post updated.' ) . $view_post_link_html, + 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 => __( 'Post published.' ) . $view_post_link_html, + 7 => __( 'Post saved.' ), + 8 => __( 'Post submitted.' ) . $preview_post_link_html, + 9 => sprintf( __( 'Post scheduled for: %s.' ), '' . $scheduled_date . '' ) . $scheduled_post_link_html, + 10 => __( 'Post draft updated.' ) . $preview_post_link_html, +); +$messages['page'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Page updated.' ) . $view_page_link_html, + 2 => __( 'Custom field updated.' ), + 3 => __( 'Custom field deleted.' ), + 4 => __( 'Page updated.' ), + /* translators: %s: date and time of the revision */ + 5 => isset($_GET['revision']) ? sprintf( __( 'Page restored to revision from %s.' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + 6 => __( 'Page published.' ) . $view_page_link_html, + 7 => __( 'Page saved.' ), + 8 => __( 'Page submitted.' ) . $preview_page_link_html, + 9 => sprintf( __( 'Page scheduled for: %s.' ), '' . $scheduled_date . '' ) . $scheduled_page_link_html, + 10 => __( 'Page draft updated.' ) . $preview_page_link_html, +); +$messages['attachment'] = array_fill( 1, 10, __( 'Media file updated.' ) ); // Hack, for now. + +/** + * Filters 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( $post ) 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 meta box 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 ( wp_attachment_is( 'audio', $post ) ) { + 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' ) || count( get_page_templates( $post ) ) > 0 ) { + add_meta_box( 'pageparentdiv', $post_type_object->labels->attributes, 'page_attributes_meta_box', null, 'side', 'core' ); +} + +if ( $thumbnail_support && current_user_can( 'upload_files' ) ) + add_meta_box('postimagediv', esc_html( $post_type_object->labels->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 ); + +// Allow the Discussion meta box to show up if the post type supports comments, +// or if comments or pings are open. +if ( comments_open( $post ) || pings_open( $post ) || post_type_supports( $post_type, 'comments' ) ) { + add_meta_box( 'commentstatusdiv', __( 'Discussion' ), 'post_comment_status_meta_box', null, 'normal', 'core' ); +} + +$stati = get_post_stati( array( 'public' => true ) ); +if ( empty( $stati ) ) { + $stati = array( 'publish' ); +} +$stati[] = 'private'; + +if ( in_array( get_post_status( $post ), $stati ) ) { + // If the post type support comments, or the post has comments, allow the + // Comments meta box. + if ( comments_open( $post ) || pings_open( $post ) || $post->comment_count > 0 || 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' ) && 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.' ) . '

      '; + $title_and_editor .= '

      ' . __( 'Visual mode gives you an editor that is similar to a word processor. Click the Toolbar Toggle button to get a second row of controls.' ) . '

      '; + $title_and_editor .= '

      ' . __( 'The Text mode allows you to enter HTML along with your post text. Note that <p> and <br> tags are converted to line breaks when switching to the Text editor to make it less cluttered. When you type, a single line break can be used instead of typing <br>, and two line breaks instead of paragraph tags. The line breaks are converted back to tags automatically.' ) . '

      '; + $title_and_editor .= '

      ' . __( 'You can insert media files by clicking the icons above the post editor and following the directions. You can align or edit images using the inline formatting toolbar available in Visual mode.' ) . '

      '; + $title_and_editor .= '

      ' . __( 'You can enable distraction-free writing mode using the icon to the right. This feature is not available for old browsers or devices with small screens, and requires that the full-height editor be enabled in Screen Options.' ) . '

      '; + $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.'), 'tools.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). The Password protected option allows you to set an arbitrary password for each post. The Private option hides the post from everyone except editors and administrators. 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' ) ) { + /* translators: %s: Featured Image */ + $publish_box .= '
      • ' . sprintf( __( '%s — 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 image as a post thumbnail on the home page, a custom header, etc.' ), esc_html( $post_type_object->labels->featured_image ) ) . '
      • '; + } + + $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 ) . ''; +} +?> + +
      + + +

      + + +

      + + +
      > + + + + + + + + + + + + + + +
      +
      +
      + + +
      +
      + + + +
      + +
      +public ? get_sample_permalink_html($post->ID) : ''; + +// As of 4.4, the Get Shortlink button is hidden by default. +if ( has_filter( 'pre_get_shortlink' ) || has_filter( 'get_shortlink' ) ) { + $shortlink = wp_get_shortlink($post->ID, 'post'); + + if ( !empty( $shortlink ) && $shortlink !== $permalink && $permalink !== home_url('?page_id=' . $post->ID) ) { + $sample_permalink_html .= ''; + } +} + +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( + '_content_editor_dfw' => $_content_editor_dfw, + 'drag_drop_upload' => true, + 'tabfocus_elements' => 'content-html,save-post', + 'editor_height' => 300, + 'tinymce' => array( + 'resize' => false, + 'wp_autoresize_on' => $_wp_editor_expand, + 'add_unload_trigger' => false, + 'wp_keep_scroll_position' => ! $is_IE, + ), +) ); ?> + + + + +
      0' ); ?> +   +post_status ) { + echo ''; + if ( $last_user = get_userdata( get_post_meta( $post_ID, '_edit_last', true ) ) ) { + /* translators: 1: Name of most recent post author, 2: Post edited date, 3: Post edited time */ + printf( __( 'Last edited by %1$s on %2$s at %3$s' ), esc_html( $last_user->display_name ), mysql2date( __( 'F j, Y' ), $post->post_modified ), mysql2date( __( 'g:i a' ), $post->post_modified ) ); + } else { + /* translators: 1: Post edited date, 2: Post edited time */ + printf( __( 'Last edited on %1$s at %2$s' ), mysql2date( __( 'F j, Y' ), $post->post_modified ), mysql2date( __( 'g:i a' ), $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..2ae7957 --- /dev/null +++ b/wp-admin/edit-form-comment.php @@ -0,0 +1,209 @@ + +
      +comment_ID) ?> +
      +

      + +
      + + + + +
      +
      +comment_post_ID > 0 ) : + $comment_link = get_comment_link( $comment ); +?> +
      + +
      + +
      +
      +
      + + + + + + + + + + + + + + + + +
      + +
      + +
      +
      +
      +
      +
      + +
      +' . __( 'Comment' ) . ''; + $quicktags_settings = array( 'buttons' => '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 ); ?> +
      +
      + +
      +
      +

      +
      +
      +
      + +
      + +
      + +
      +
      + +
      + +
      + +' . date_i18n( $datef, strtotime( $comment->comment_date ) ) . '' +); +?> + +
      + + +
      +
      + +comment_post_ID; +if ( current_user_can( 'edit_post', $post_id ) ) { + $post_link = ""; + $post_link .= esc_html( get_the_title( $post_id ) ) . ''; +} else { + $post_link = esc_html( get_the_title( $post_id ) ); +} +?> + +
      + ' . $post_link . '' + ); ?> +
      + +comment_parent ) : + $parent = get_comment( $comment->comment_parent ); + if ( $parent ) : + $parent_link = esc_url( get_comment_link( $parent ) ); + $name = get_comment_author( $parent ); + ?> +
      + ' . $name . '' + ); ?> +
      + + + + +
      +
      +
      + +
      +
      +comment_ID&_wp_original_http_referer=" . urlencode(wp_get_referer()), 'delete-comment_' . $comment->comment_ID) . "'>" . ( !EMPTY_TRASH_DAYS ? __('Delete Permanently') : __('Move to Trash') ) . "\n"; ?> +
      +
      + +
      +
      +
      +
      +
      +
      +
      + +
      + +
      + + + + + + + +
      +
      +
      +
      + + + +Links / Edit Link' ), 'link-manager.php' ); + $submit_text = __('Update Link'); + $form_name = 'editlink'; + $nonce_action = 'update-bookmark_' . $link_id; +} else { + $heading = sprintf( __( 'Links / Add New Link' ), 'link-manager.php' ); + $submit_text = __('Add Link'); + $form_name = 'addlink'; + $nonce_action = 'add-bookmark'; +} + +require_once( ABSPATH . 'wp-admin/includes/meta-boxes.php' ); + +add_meta_box('linksubmitdiv', __('Save'), 'link_submit_meta_box', null, 'side', 'core'); +add_meta_box('linkcategorydiv', __('Categories'), 'link_categories_meta_box', null, 'normal', 'core'); +add_meta_box('linktargetdiv', __('Target'), 'link_target_meta_box', null, 'normal', 'core'); +add_meta_box('linkxfndiv', __('Link Relationship (XFN)'), 'link_xfn_meta_box', null, 'normal', 'core'); +add_meta_box('linkadvanceddiv', __('Advanced'), 'link_advanced_meta_box', null, 'normal', 'core'); + +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'add_meta_boxes', 'link', $link ); + +/** + * Fires when link-specific meta boxes are added. + * + * @since 3.0.0 + * + * @param object $link Link object. + */ +do_action( 'add_meta_boxes_link', $link ); + +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', 'link', 'normal', $link ); +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', 'link', 'advanced', $link ); +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', 'link', 'side', $link ); + +add_screen_option('layout_columns', array('max' => 2, 'default' => 2) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

      ' . __( 'You can add or edit links on this screen by entering information in each of the boxes. Only the link’s web address and name (the text you want to display on your site as the link) are required fields.' ) . '

      ' . + '

      ' . __( 'The boxes for link name, web address, and description have fixed positions, while the others may be repositioned using drag and drop. You can also hide boxes you don’t use in the Screen Options tab, or minimize boxes by clicking on the title bar of the box.' ) . '

      ' . + '

      ' . __( 'XFN stands for XHTML Friends Network, which is optional. WordPress allows the generation of XFN attributes to show how you are related to the authors/owners of the site to which you are linking.' ) . '

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

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

      ' . + '

      ' . __( 'Documentation on Creating Links' ) . '

      ' . + '

      ' . __( 'Support Forums' ) . '

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

      + + + +
      + + +

      + + +
      + + +
      + +
      +
      +
      +

      +
      + +

      +
      +
      + +
      +

      +
      + +

      http://wordpress.org/ — don’t forget the http://'); ?>

      +
      +
      + +
      +

      +
      + +

      +
      +
      +
      + +
      + +
      +
      + +
      + + + + + + + + +
      +
      + +
      +
      diff --git a/wp-admin/edit-tag-form.php b/wp-admin/edit-tag-form.php new file mode 100644 index 0000000..81e62a6 --- /dev/null +++ b/wp-admin/edit-tag-form.php @@ -0,0 +1,277 @@ + + +
      +

      labels->edit_item; ?>

      + + + + + +
      + +
      > + + + + + + + + + + + + + slug ) ? apply_filters( 'editable_slug', $tag->slug, $tag ) : ''; + ?> + + + + + + + + + + + + + + +
      +

      +

      + 0, + 'hide_if_empty' => false, + 'taxonomy' => $taxonomy, + 'name' => 'parent', + 'orderby' => 'name', + 'selected' => $tag->parent, + 'exclude_tree' => $tag->term_id, + 'hierarchical' => true, + 'show_option_none' => __( 'None' ), + ); + + /** This filter is documented in wp-admin/edit-tags.php */ + $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy, 'edit' ); + wp_dropdown_categories( $dropdown_args ); ?> + +

      + +

      + +
      +

      + + +
      + + + + term_id ) ) : ?> + + term_id", 'delete-tag_' . $tag->term_id ) ) ?>"> + + + +
      + +
      +
      + + + +name, get_taxonomies( array( 'show_ui' => true ) ) ) ) { + wp_die( __( 'Sorry, you are not allowed to edit terms in this taxonomy.' ) ); +} + +if ( ! current_user_can( $tax->cap->manage_terms ) ) { + wp_die( + '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . + '

      ' . __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ) . '

      ', + 403 + ); +} + +/** + * $post_type is set when the WP_Terms_List_Table instance is created + * + * @global string $post_type + */ +global $post_type; + +$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"; +} elseif ( '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( 'default' => 20, 'option' => 'edit_' . $tax->name . '_per_page' ) ); + +get_current_screen()->set_screen_reader_content( array( + 'heading_pagination' => $tax->labels->items_list_navigation, + 'heading_list' => $tax->labels->items_list, +) ); + +$location = false; +$referer = wp_get_referer(); +if ( ! $referer ) { // For POST requests. + $referer = wp_unslash( $_SERVER['REQUEST_URI'] ); +} +$referer = remove_query_arg( array( '_wp_http_referer', '_wpnonce', 'error', 'message', 'paged' ), $referer ); +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( + '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . + '

      ' . __( 'Sorry, you are not allowed to create terms in this taxonomy.' ) . '

      ', + 403 + ); + } + + $ret = wp_insert_term( $_POST['tag-name'], $taxonomy, $_POST ); + if ( $ret && !is_wp_error( $ret ) ) + $location = add_query_arg( 'message', 1, $referer ); + else + $location = add_query_arg( array( 'error' => true, 'message' => 4 ), $referer ); + + break; + +case 'delete': + if ( ! isset( $_REQUEST['tag_ID'] ) ) { + break; + } + + $tag_ID = (int) $_REQUEST['tag_ID']; + check_admin_referer( 'delete-tag_' . $tag_ID ); + + if ( ! current_user_can( 'delete_term', $tag_ID ) ) { + wp_die( + '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . + '

      ' . __( 'Sorry, you are not allowed to delete this item.' ) . '

      ', + 403 + ); + } + + wp_delete_term( $tag_ID, $taxonomy ); + + $location = add_query_arg( 'message', 2, $referer ); + + // When deleting a term, prevent the action from redirecting back to a term that no longer exists. + $location = remove_query_arg( array( 'tag_ID', 'action' ), $location ); + + break; + +case 'bulk-delete': + check_admin_referer( 'bulk-tags' ); + + if ( ! current_user_can( $tax->cap->delete_terms ) ) { + wp_die( + '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . + '

      ' . __( 'Sorry, you are not allowed to delete these items.' ) . '

      ', + 403 + ); + } + + $tags = (array) $_REQUEST['delete_tags']; + foreach ( $tags as $tag_ID ) { + wp_delete_term( $tag_ID, $taxonomy ); + } + + $location = add_query_arg( 'message', 6, $referer ); + + break; + +case 'edit': + if ( ! isset( $_REQUEST['tag_ID'] ) ) { + break; + } + + $term_id = (int) $_REQUEST['tag_ID']; + $term = get_term( $term_id ); + + if ( ! $term instanceof WP_Term ) { + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + } + + wp_redirect( esc_url_raw( get_edit_term_link( $term_id, $taxonomy, $post_type ) ) ); + exit; + +case 'editedtag': + $tag_ID = (int) $_POST['tag_ID']; + check_admin_referer( 'update-tag_' . $tag_ID ); + + if ( ! current_user_can( 'edit_term', $tag_ID ) ) { + wp_die( + '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . + '

      ' . __( 'Sorry, you are not allowed to edit this item.' ) . '

      ', + 403 + ); + } + + $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 ); + + if ( $ret && ! is_wp_error( $ret ) ) { + $location = add_query_arg( 'message', 3, $referer ); + } else { + $location = add_query_arg( array( 'error' => true, 'message' => 5 ), $referer ); + } + break; +default: + if ( ! $wp_list_table->current_action() || ! isset( $_REQUEST['delete_tags'] ) ) { + break; + } + check_admin_referer( 'bulk-tags' ); + $tags = (array) $_REQUEST['delete_tags']; + /** This action is documented in wp-admin/edit-comments.php */ + $location = apply_filters( 'handle_bulk_actions-' . get_current_screen()->id, $location, $wp_list_table->current_action(), $tags ); + break; +} + +if ( ! $location && ! empty( $_REQUEST['_wp_http_referer'] ) ) { + $location = remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ); +} + +if ( $location ) { + if ( $pagenum > 1 ) { + $location = add_query_arg( 'paged', $pagenum, $location ); // $pagenum takes care of $total_pages. + } + + /** + * Filters the taxonomy redirect destination URL. + * + * @since 4.6.0 + * + * @param string $location The destination URL. + * @param object $tax The taxonomy object. + */ + wp_redirect( apply_filters( 'redirect_term_location', $location, $tax ) ); + 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' ); + +/** Also used by the Edit Tag form */ +require_once( ABSPATH . 'wp-admin/includes/edit-tag-messages.php' ); + +$class = ( isset( $_REQUEST['error'] ) ) ? 'error' : 'updated'; + +if ( is_plugin_active( 'wpcat2tag-importer/wpcat2tag-importer.php' ) ) { + $import_link = admin_url( 'admin.php?import=wpcat2tag' ); +} else { + $import_link = admin_url( 'import.php' ); +} + +?> + +
      +

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

      + +
      + +
      + + + +search_box( $tax->labels->search_items, 'tag' ); ?> + +
      + +
      + +
      +
      + +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' ), + ); + + /** + * Filters the taxonomy parent drop-down on the Edit Term page. + * + * @since 3.7.0 + * @since 4.2.0 Added `$context` parameter. + * + * @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. + * @param string $context Filter context. Accepts 'new' or 'edit'. + */ + $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy, 'new' ); + + 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 ); +?> +
      + + +
      +
      + +
      +
      + +views(); ?> + +
      + + + +display(); ?> + +
      + + +
      +

      + ' . __( 'Note:' ) . '
      '; + printf( + /* translators: %s: default category */ + __( '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.' ), + /** This filter is documented in wp-includes/category-template.php */ + '' . apply_filters( 'the_category', get_cat_name( get_option( 'default_category') ), '', '' ) . '' + ); + ?> +

      + +

      category to tag converter.' ), esc_url( $import_link ) ) ?>

      + +
      + +
      +

      tag to category converter.' ), esc_url( $import_link ) ) ;?>

      +
      + + +
      +
      + +
      +
      + + + +inline_edit(); + +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/edit.php b/wp-admin/edit.php new file mode 100644 index 0000000..258952e --- /dev/null +++ b/wp-admin/edit.php @@ -0,0 +1,376 @@ + true ) ) ) ) { + wp_die( __( 'Sorry, you are not allowed to edit posts in this post type.' ) ); +} + +if ( 'attachment' === $typenow ) { + if ( wp_redirect( admin_url( 'upload.php' ) ) ) { + exit; + } +} + +/** + * @global string $post_type + * @global WP_Post_Type $post_type_object + */ +global $post_type, $post_type_object; + +$post_type = $typenow; +$post_type_object = get_post_type_object( $post_type ); + +if ( ! $post_type_object ) + wp_die( __( 'Invalid post type.' ) ); + +if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) { + wp_die( + '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . + '

      ' . __( 'Sorry, you are not allowed to edit posts in this post type.' ) . '

      ', + 403 + ); +} + +$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 ) { + // Prepare for deletion of all posts with a specified post status (i.e. Empty trash). + $post_status = preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['post_status']); + // Validate the post status exists. + if ( get_post_status_object( $post_status ) ) { + $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( __('Sorry, 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( __('Sorry, 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( __('Sorry, 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; + default: + /** This action is documented in wp-admin/edit-comments.php */ + $sendback = apply_filters( 'handle_bulk_actions-' . get_current_screen()->id, $sendback, $doaction, $post_ids ); + 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'); +wp_enqueue_script('heartbeat'); + +$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 above the posts list to only show posts with that status. The default view is to show all posts.' ) . '
      • ' . + '
      • ' . __('You can view posts in a simple title list or with an excerpt using the Screen Options tab.') . '
      • ' . + '
      • ' . __('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') . '

      ' + ); + +} + +get_current_screen()->set_screen_reader_content( array( + 'heading_views' => $post_type_object->labels->filter_items_list, + 'heading_pagination' => $post_type_object->labels->items_list_navigation, + 'heading_list' => $post_type_object->labels->items_list, +) ); + +add_screen_option( 'per_page', array( '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' => ( 1 == $bulk_counts['locked'] ) ? __( '1 post not updated, somebody is editing it.' ) : + _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' => ( 1 == $bulk_counts['locked'] ) ? __( '1 page not updated, somebody is editing it.' ) : + _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'] ), +); + +/** + * Filters 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 ); +?>

      + +cap->create_posts ) ) { + echo ' ' . esc_html( $post_type_object->labels->add_new ) . ''; +} + +if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) { + /* translators: %s: search keywords */ + 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 the 'download' URL parameter is set, a WXR export file is baked and returned. +if ( isset( $_GET['download'] ) ) { + $args = array(); + + if ( ! isset( $_GET['content'] ) || 'all' == $_GET['content'] ) { + $args['content'] = 'all'; + } elseif ( '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']; + } elseif ( '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']; + } elseif ( 'attachment' == $_GET['content'] ) { + $args['content'] = 'attachment'; + + if ( $_GET['attachment_start_date'] || $_GET['attachment_end_date'] ) { + $args['start_date'] = $_GET['attachment_start_date']; + $args['end_date'] = $_GET['attachment_end_date']; + } + } + else { + $args['content'] = $_GET['content']; + } + + /** + * Filters 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 abstraction 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 ''; + } +} +?> + +
      +

      + +

      +

      +

      + +

      +
      +
      + + +

      +

      + +

      +
        +
      • + +
      • +
      • + +
      • +
      • +
        + + + + + +
        +
      • +
      • + + +
      • +
      + +

      +
        +
      • + +
      • +
      • +
        + + + + + +
        +
      • +
      • + + +
      • +
      + + 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..229137a --- /dev/null +++ b/wp-admin/freedoms.php @@ -0,0 +1,71 @@ + +
      + +

      + +

      + +
      + + + + + +
      +

      + +

      WordPress.org stats page.' ), 'https://wordpress.org/about/stats/' ); ?>

      + +

      WordPress.org/about/privacy.' ), 'https://wordpress.org/about/privacy/' ); ?>

      +
      + + +
      +

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

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

      check out our trademark guidelines first.' ), 'https://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 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

      hc z$66Ag$9nn^cRg?^drVW!M3~xlkDEX24cVS1PA}~aJ^icqT{c{DMlQf~x^T8KOB7EG zzOA4|n;96ceij{PRjVAQCe+hW3Ds)5a~r2W#wQ8owuD&Y{d858gqFV#ob}i!Mj^lN z*p5;3)NNM8E&ObbmIhGll$I2MKA=t@956MJo|!gV>@PtN5i3wuXMX9`No@Ce$>-!{ zK)B|9E7cfiGo%l7Ij(*sB(U;m1=91Z8jl3cPUby=M|l!6yuA5?5R`EFY>~i#j=OPx z%te&zWpz(vL|WzsEk`1IVyTN-XBx3{!jNAPk|FDA=S;n|drhv%R~CJ9>#JGT1D=Li zbH18dF_~H6gBo0aZvtpD5YDn-4WXtwuNuU% zCVS(dN$1-^z=a>%*R0K_=d2Ib39_Gz9jDgDwD=Y{N=zkZwH@oFOGcX$IEw0ZWqneq z{+BFmCHRAcJB5$U8S)1X->C`u5&hilobg}jfy|kQcKuVw$X7Mpo(l{_|E$TwY5uZ+ z0_s17nD=3C;y8;TtW6D7&z2Q+S)f@-?C!9k_3z~4OaH1tBo%z?D*LCXb;-B=5z#%h zJavS2(C1@F@Bo&n=Bs^MX1K%6>yV-BeHugqmEOyU`!-r135!M_5$8Ktuj^60JO&=s zjuPRl3%w;a`YlQ((IEZ%m}vWDM_-7j%kUbQq)7N|Qt zMn1j3${XRf3Jd$t;nw&yq;o}ez!E*d*c(jkc;~&c=UcQW0JzJB-!qxYy8eVeiG5RC zThv>g)$x>$nqsQUu%!7sh1`QIbQSG>`@{7+Que6uXDli!3N2(TWDC15JYSCPMOl)< z5`oHwFiTfG@(?}{Bc&uEq?zqe*e*XY;g;#*Q?F{WXhvu_JIUwA!H{Cdtk%*iFFFUy zLKgIqE~+hc6v75Iphh7}MBXLu#~Q=x>!l4Q1!awIMq!TlQ{*2}`mVr@3#SX%wz!{I zr+5|)JYRs)Yp`9;RbPrZ6){+ET4s6`O>UVzM&SaO#FIND?Dlt=A z2x}k>1ImxeVv60}+A~>s?61Tv-ZC}_bdfRxt}$6l%nCJhBv%Xf!emx_h!1T7Cst4) z4lW`F`ue5CZjM<}7tY9~$*X0SH-sQR<~epOtHd2t6mCRT!=va0i~?(VKivY3bWQBu zytOe_rPh*R*a=nP=BQ4RFTPJ2ulT08$K4KPzMNEpkRDZIC zd-PTBHZQVL8P~+`d88;_0k_0-iZ*|0M7~xDTb^e-s8c(N>!q|VoPa(1&Tq^leAk-V z(?HO+cyh_(hs|on@!DfcC-|$b+n>ftIZ|r_l$8y|M9Y^ty2b*JI~VTAPKxm=XXNjC z*LL}bEMZ5NTlnk5uNQ~-gFK+u0+EoAGUYyjkO>2MC# zc3F~r`$_~7lEbfT7C!AA&9oxZ3O@|yrB7|JnJug{CXT*uAHV#B2Mg`N>S64;nlkss zPDIJ@S*jDf7!P{6D|_-J3Noe`6`*=t^#hbywDjJ$*J_u-3&eNNO=zuJq}){xbHeR_ zty-eK+;<;ycruLZ0faK>EwmiL_Do%eFng**VU&vxrb!}Ztm^Jzj8>*$FH+DW(J9Q3 z2CYu~x*A_^yu|;6j@5`>OURNZ>i6x(xPr3Pl^hSu`&Dgk{nN>lr2QQL$Hk{m5*W(-0Vgb z3sF>W?3VS|lNkg@T`Kzc75caB}lot^7Hp^?B;lJ^Fvg+qyODr(^l*JJsUn zk=Je(^TG<~ZVTVm{SI#Ot~(-O)E$q}PCQnDZVJiCcQiikFWf{Xc7eY-;`@1B+`YtDveI~qEw{5yuBPE&k13yFbVSpXa zG4Ye!UiI$1Zso=*c{ zSP>s%dWt543pf6nd|Q^nyEWeK57v=oK;#@lzLUya{5O1{ZmxOztk+Dc%9z@ zbiO=J#TKt&9BNbF|H1Ha^4FPdLO?oBM}aFQBwk0Jck6*G{{Ml!M0;;tSy2xuTqFjR zyd=&uCm3o~{Y_lhJ7Y2#!WQKkhRk--NAIkI5SXJL*{QKdam?aw5lOP>tjCc~^Nw0+ zLtG=Y7zOa8B(3J&eb*ZE1VlpOi`l^KLj%8=(q8s>TrSx%NgP*8Sehg-w+L^(6x?_u z<*ya8_PaAZJq-i%$LtqqZ^^Zx^;Yc1Otq^WWk~}}rM)K9aauV`mmOnn0N=#~ZC2A( z%c$E5I6v(>Z+B^BS)YIb{#0jplNFt#gsJY7k8tvka9Oo3hBJj z%W6lX=>@s`Kfrr$evEe983nwNf9L3Y;T4 zZ>~r}17M?;a3>@_U#~<>{qD?Y4_$UgwvM9(yvUAI6?dD)D<;e7m|`7<7Ji_s7P7^L zHmKHx_}1xZ`r}*d_iADzp~o&#N}|}qm}}ug{3DqXR%gEs-BdM<5)(iKh->)XOdC}9IdBQ%Xk@0?G8$)F8wVH zi_HC1qn!MouT2|0R+W6qD!>K9sNZ7kz&G+3maZL5P4@4gp#479-@ZWsl%twcj3evI ze5A!Crlx|6tco}?szOZ7ZxzV@rkdWzE#S5}zw)u7!pr^s=C5KkVQ0RNYm|AT0Q8+% zt=DF{<`(y0$>xxUvT)NG*#ei&MwnR{hd|)l71tdpr0eH{`J8z{g}n8-A9@lN|C5s+ zw3_~BlZ^T~`|S)-o&pjC+!FNPN&K0hzGmzIMGTaBz;y4bZ-!qD=o-15-KcTi6b=Mp zalv})Ks#?kywDFTjp6<$orp+cJ$T{^8+-=g&jTxkJV-~GW&DI^j#=m`^>nv*Z1~sv zKdx?q8)}KWX}s5cS)7@*FP3-9JYt<+bzbh!;-yhE!b35I!*JQaVwrB^q3#jmBr;40 zUbgr7XmX@h{nSgr*yJg{bEIxOW>}fSSVTTHDoj``zowRzu~-& zr(FaOwEvd~R@J@}e@bQR?{4`uhTtkgC9~pqyngjq!+sNc@`n;8tZ_7AmP;>FU<~)1 zQ9+qhu7znD+vVJ7n>Ft29^ue{U;^z5apg@T-vP!m;!PZC$z z*f^=0+l_69LRMnE6$`M|BatNuD~V^Q@cm*0bM<2N1*4G6z-!-fpg}`NgjKY<#iUZ)6j5!1zzm=C<`CE}Fw(xUhNu8~5Vl37S6a<>VKqgUihaX<5CaHElO zNxhcUqkCgtYRjOg&Qh`>Zz{Q?tkLZd%O&7i{#u5qDqBg$$FJ)F{W)R>ZJhnc8rJr% zw_;^zIEdkFv%A+Gc3ypJ^IQ}|)k2qr#xcgiK!ZCkOM=1H8lud%m0pUUM$lF!nG)sQ zYsh=fU3sa?WXjDWot$@_u3}@0!wJlq7Y=0rZ9*kyhgd7(J~8Bfq-!`fr_?)YDZWx- zE*uTYIu2at0v`-3uIhv7xqjqiiMN~t=Bl0!8)>r$v(UTL_Eldi+4mYjg-)40j?XxK zz-os&Q&a(Xx-RzSnL>4%sJIg``}F;;awno77U?3P5PV@0>hW2YJ zBjLt{bi*EWnvIlttUP6fD(M*vBB$}ZdBdB5h5_(T#!bcvs%vj%2{xun#T`T#H&9hK zVZ0wLB1ksnuEsL#E=l@!ipV(0>|?~0A$H^nQ;EPAgV4>&R5X^OY+M1U zC>HgrSrvV`!fkfRFM3=Z7nXTEa~^#>vbg`a%hK48h9kW*_;S@&RpOx}2v1Pj#?Pk$%M(hq}JhUi!|n1rePPvVdg_Ls*^0_&(k zuzRAQUW6X@!dRmAJmeyBqK(Y!d*xV5iU$npKja)1VQ)4bw%+1~y#I=c9p;uoN&y-Y zh-P*C3^wcz6m7Oh?p5UvWe!nOrby10B=JMm#hG-(pq}A%Ze>(Q8=#0>_xn)e?E~$J zPNb1BGt6+EVXa_x)vzbQvLG*2SwP#})K5_0%L5yi=>&L>yu*r7U9=elbkmZu9+3vl zzaSK$%D&Z_qSPCm_2FUhD=M)$ZaD{1$pwlm{>r$;zs@6#7jznkltcM;D|F@uapGvz z3qBT+z+hLbvf{izIp*N1tjg=&s!n@&wb1ie>-MtA_tIO^qsQD`#rlniK45-v11piv z7maK^D(C?6jkkeFBpX0>9X2m6#%}O7w`rcr@0WkjHt?jA4&oPw_Qf;xx znnNGm-biSODu#J&#Aq{1T9%}P;7Vp;axRAOSYxY(k{Kg6M(DI3QS=JVTfGLaQ1yd% zq3&3r;%CbSvqnNop3a6f-py0LLVLOPk6LePPpImq^uhl`q>hsriRi|#q)u)R5g<54 z=~D+;xmIW%efN4!th}b>&snQ51^PsNQ*78H0mh12V^8^f4sj7d78mN_JISQRSp znec}()EMsChlhYa9>J4z4%No{cZcLQ?C?nGm|tOH`l(^oR?fFCzmsFR5JY@9)}pOc zv!8>BIOnpQa~~x-c@fHUzkp853l3q>tcYOK$rs}-|038x_nybd{8{BSCm8iNv_$$h z?IJp3j%O7q&OFcV&G@*`Fd<|;@-uV6Pg+Q)R|nrBeX{vr$Im~sUkPJ##;Y?BX%mIl z-=$d#b$s(04c3JAch98FX^(IxXWRTaUM`z%*FK1cWw6$~qGB8SQQU$+l;e4OCq>8n zjb!->t?W30puJm}NXi6jyHuNDeNogYysv%T5ybK633syh^wwYkI zb#rdt4LZ_2;BOy$hS^L^BDAv!W|e@#OYsM~ndmQu!ijI}3d;VzVW7yn%#V$$ySF_o zonpzu#a>Un#g1du)gob}hHC(!z2W}7$}{nSa+cF?>cz+$x@xHM%bmvDCfi8j;|q|c zK`SY)qLk--^L{ZW2y4(k!S`;ld5-U=$ENh~&fMt@UDnVyzsFS(s`rwP9HO94CCS^K z&w`=!7V&y(?UuXuxePM*4dCF}mGNGIAll&%$ETrpG+SK@xygcL?@9WWXOEAj(#fgI znJqM%HT>yjkkCsJ3@@{Gaxd11Ys}@4Sd&5Ms%O2by_`^HU=Vt~DwFp*DStu<{;Wf4 zab$}bS&tQE*aV(*tMTaQW4~w zi$;Mp>)C=Yd_VP`2-u(~al%V~vXv9q@jtEFD2XkcV{AE*aNT(li1_`R*ILNt$Ur%6 zicm_qs>xoBj|l$l!LILy5Z1|Cifa<-S{zA7vh4>#7vUwv(A)i6Ua3$4_v63e|;mYXP3bH5Nl&qx1Ev-?FB;|Dw3k$FVQwz-*{go=*zUc0s?r>)~o;;9s(@+RI81}rQMsQUDq$WH*>@UiyX}2OT?kF>;^+@<5Zrp z^+_t5;4es{adeK}%0!L+M=DaxhAHRV>bm%`HU&d!GZLD?{nsh7w;kQ#Dt1r#zpwmu zz%HbzLb>k9m?5!F*#=*wfD=)PFW1vQr=ui}i*c)Rn=1-e=`joZ2|9{J>A|gTV01MY zj!vUB0H(uRWUiLM0X$X%IajZLJv70R%(s4w#}^B-NTUEcgAgiz&JC6HQG(-nPJqV@ zz<`~>>~a6Z#z?t4Pj`lIomF^xDv$y3NUuro>#fu00E|j+O1sp(l2M5+3Rh}XU_I&) z=F97YXvD>OD4QOZS;cYrls@4hyI#YcjZI8gkCvL|Q49_kL zi2#;V2}T{tA2}Oj-kKRh984{NNf4$!2$qez*)JFR+CfR`IRazim(Qg?mljo@UxcCb z4O5)_Vi#Py9wVd3eA;E}r{&|XA})3U5XPxI&eoW@wFm+~w7`nBC?W@|zF|TZV0B&5 zj*)sY1ZAcjccC1X^s` z;+dj^Pv${MR#V_NpLIT~SYGAk$w0eYD3IAKcBaZyR%%R<`tPJ)65gUtaI6uJ+s}yo zJX|dCnr1P;yo7clgv$hh|8vzu{<&(tz5fcqMNItmN?4EmwEU&G6AKZjTR#p3YAZBK zLs!%Xh-Z*w9Ku3AGja>85c444Q>e1w-ah+mRrKTlb-a}&kNQMmfwou3p}DS#U3N{c z-sPVd_Pm>EO?QqNTCR1$J;Y)!A{GIQU{lIP5t6M6DZaq^l&%UFLcO)=1Oe{d#;W&F z#Xa9NR~9#5aS5(3X0n($XKcN8b^N0YKIpGP#5{XK1)VDN+$WS_+A_r6bMoWzISnbc?mohSXkSll z?o(0VH(TIW;Hfa^UMkjV(W+&Ve;Z#l+RNWdF|d{Qr?%_; z8In{o?l;RjBv)g~1+E3OMgH6+&Yt2aIMtVhx3=WodF45O*1%s-oH9Zp4ld#rZByv0 z@bK>HqP=O6MO|aBtxKtox){!X2vDLJ7b6T#{!Z~?GlHyC3$3wJ9WM;+2A8v0jxumX z#%htU9`N}YbAQ3mO&hS4_`OBref z^T*n!Yo*7?5+5Zv%@U*u78Q%$&R=?^W!+L`u>y^8ytVynCr>X;<8tDqDsKLZZn&48 z&5tE3z_H^N=gwHBz3cvLWT0UJ>~F**hj>F0hN*ldSZ!&Ry*t`$!mdd~Y$1UM6v+H3 z{BrnC2fz&ofIJ7VssVa5WG=-ijsxl=9ceI}1`6D&vG!#oKv9N{8A8(+TsU)&OLz2FHZpDOY$)CwdDuRcK+X?g=t#cu7bv^S}5S zA7_USsWljbX^9!l6h&s@*Mm>eyf^!9Q5E@{3`})NxyTB%7mY(zdgu zHaFpwf$$EdUX|o4T;d}~GC$_`D;Luhr>kTV>rrvnX*83+OIK7G?6b_G>67+GrbxGZ z&rN7hjgYH8qa!UI$I%Ppb#iaNrB)&`vSXKXtFwG+>JTIYYt8<(*ytZMR@F9Ot_AJp zt9O7_h%QEv8S{_Op0(~2>Y~;XkN3kiS8(R?Kb713trHUK^)vlt!fBJYdSacxy1E>- zTbPD+e`W@(;Wzi6Y+7{k&cvV^1uPo{?^*rppPyY)Z-GTX3*k3?OrE3Tf&*~x^-%m+ z-Adk*+$rJe`8E%2!(xF|Gf2z%=aTF0^ufXR%( zjLrqJ*HR7z%{B;vSK46$H)tpEKdEG%aT^G7>cA;LRJ+9j!%+vEMH=G{CEjGoPrVdl z#5%6viK9mnWLniOJ+o4R;SL?%cASqZjrWgCn@~_9YBkXpvq*Z)XY2t&8fK{PU+*Yt zdm^dW+6R7Ouq#QGPL9jE@U+kuDiP`?u@lH0bqkY(+g%HqwhOubwo1yoM9a_6OpqvgW;pWXazwe)`~TesqCtf?5R3 z=*>Dbc+=D5Cw%ookkOvMiWJCwf)1N4-SOB6n;kTlRVW`K;+b}Q_M4^HbqY>ex)rkT z`fq~{#Iybr0b%djh?il52_nZWmK~@4lndjsZzEm9GW0)!VP0$lFUAn>OBp3gU`-vr zmh918u?5KE0dEGaDoX_Bz2vk~mYJF44ILvJv`yopjSx2mJpfWPIn9?1g-hcTO@OL8 z8Ma)g;A{5~;xgxN0^_Ak6{e2UB?tBv-tM&h20e*EwjFM5=@i{Ug5fhis)|Sd>XqHS zGxeO3guGw;2uTpYnGqCgD3EpE=O}`Bcyu-8&2G?DR6H<)QAL@L26@a3)xSY=!DH$xr9K@8P?|$2~z2|W4 zz3g#zP&*^z5qA8!+pGvIqh8890x`APm!MdlX~tiz|I8T7*^o*k)8gy}NR-_0gq2RtQl%B8(vXsQj<*5&eRZ%ADGd+|HC)>Vqna7j9KZZP zRCUttm5UM=zP_U&3Q2}9WXFEz(aj3$VCphkw$P*L(neJ40%E*i z(FLJKY15Vc^4ZdXYDaLEjJavWRLLf@KXISg%yRlU#8+#S{D!Va&--j#n-)w&y3TV? zs9v3uo1!qu+LA`rmiuK7^_)(7Qsh+0bY|4!5YlE~GL)Z~hb`i|ER259cq?_)FIOvy zM6PElGe1oT7_9W|C?W#6VY*uw;Pn=1)Op7a86a}{>n3x@v4n@iV#zkFC3&MHXR0WX zh@>i}@`fN^u_6_4Cy^)T;*#`tB~iKGG5V@sI~k%FF_0m5yu{u`O_#lMLi&wPIV__EToJQ#dgfBP< z50P*(2}>&Tx~y^u14gkW-~C1toL9&LplBz(JBq>#4WWW+RN~llhgNw<8SUI`2+BE! zAj!_rJYVqrM(<}m@0=1~K_SzlVD$79&Z$jp>{S5VsfutEbS+Tg{$p0h3k^oiQbH&#*CZbPP%{N9kPQ|Lo)@)vj2{}QL!Ju|?SlY7ut6o;3(@5b1)3jBGoQmMCub>cmh+`yU$KO@;Bi!I9I~s$#)30tYDNZ9$VT>;$thw}++0lyd*)*m9k2WDD$|R3^31uSs%1 zflql8iJNCdvr=ohIVZ_@0c_D9^Rd^TLT&{S6%scjlv+Ur8B&$)$N*#sSP>pl)@SC# zT8YGE$SJKg34)re%sg?!$IZ=#RULuB!wNJh5ys!*yt>jT%;!VN3nvwEO4%jjbbmR! z4kCR75KdBBzT}ROh2_{0i$*4zPy38VIFfm+PAV*TPP?wi(%IxlN<|Y)N0wL)vu;Hp z&vWd&V)9TS1$LxIt_-PUIjl8gHc+WojpL7x z;z%~G8$;#+0}ht`jkfSkQ#Ht15-@#P(71=_Nt8%akZFm1xd>_PrL7@TxvYqrTB&TP_uji+N~=kT3W0qi31WrB7rzPgBv_58Q_P(~H?C$G<_p|626 z@7o5_0vEuF3?fBEuQ3Kg9M?_P%H!;mTt7xO{#k`jmwtVp_`)k$zv2~94#uBmhGgp) z!8K-;M_J9cIzPR%(T=~?qmRjB)(?C-Du2L#8?mqBJ5C~%G!aW{I;4ONsQ%2M^{L!S zOgpuIoF7IV_}m(Kx?CEUk{BUIb5-VZeDvG^d3^$>x_pqm4N4|=ya}|ld}>MUT3KA( zqNef(`XZF8Mn?f(=s z*B}9GNUTX;t__FlEd zCc#Qye_7EjzRh&C;AleUN9WF!%*Y8vY5e{04ROnF0k&ZPgo85PP`4j^ObvJD`Ex$Lad zv}Eao0zh$O_~0xyC+*;$<#!PgI{s(`>*TS?qtF)b_SWxN3cq}m3&7f0qZ(~SkiZ&z zgI*c7xECm@bzf3*sOhS8EtF^Ham(D5Ima3cT8we!l^Ko``ge}l+YFe%xAa!YuSP$o z?c_nlFa5WhLp#kALOTn^4&&{qR1kI)a_wMP;|GPb>$uikW^i@9o$!e|NwGeJ*ih=QhlxO2IZ zPM&A#_0!xZeUZjU;_6|2V{dK&@5zs~>$Dgs$hW2>qnte{Z^FH;8z_Oagk=e>+; zXzsBAxou{VCp5ivEURKNH-5*{c}Qjt#jrlAEgjCZm%>78dO=<4#vfN~Pj$5Z+{q_& zh*|g{8Uu~vjhCeUNDA9X8ih(GwWhvJ?wi2skvhev9mQM<-J+QSxzh|;n`pj_0)i$g z+Pxe_COzZfSj2`r!T$rkKtaC|-#4{aTxwMf9T!a*I4H{!t9i>CE2)cNb+m4j+Jv^D zO*AFZ9+(o1uFbYoStpVL(Kcc+)Te4q3T}9VJ}IS_ zp}p*AwlkZJt<1bi{ngq#UNt4#&WDMKRI07$7dkr7=Gv=%Rq{bLo*=dRhy$Mku~L1w z2i#Yw0m0*2F`p*r-pLeLx7Z#hA^I4D8s=xELCp!sNrGonvb5CkDh?t}WS%2!v}wz6 z8b{MOn#R%Yjw3N_=s9RyAL4 z6U6;O=RxU}UJntBiw+bpq_ULh$-z{~%v#^Cb;?@dN1Ali+6lxyWM63Fk%_R)n*3x> zm^gHRX;5GikUv|(-eet5;Ui)_Q z1qayqFVz+KYBIdBe9+#_=@`B#oiDKU+uiZT^5_=;hu+r;dO33!+}43FBpEvbl z`w)A-EEg~Ajd~Ab-}{Z?+%`6@U!R6|IQCJm8dK4^eGG1=-(iWmSm)qlqTZ<9t9`v+ zSH>Or_`P-lO18U;@Il;R-HLk%u*bO>IVib72y-GJR^UPJt^b+E!9) zD(#pk`iA2yPb1OX#O17~~ZQ?yv((_nxt5JTt}2pLyn<@r?BUJ$q6Nefqp7#n7Lz zH~l>`eV2a6arnC@{XJvPUVWG9*z1`4z5YMWXTA7;I(P3LpPS0wGg55+-ZND%uamCp zzkAMb;ct7_?K_j_p&fe^+rLM3pLxb!){R*IJvbk~z%nr_l9=w^*x@s*L}zP)jgewe%Pz?&*1;n z4`>_vbZ@@DJ#M@1L%+Lk*Q_9$#bc9-XJKzFLDs?4T4Qsl>Rze&i)K%PB3U zSJK`}pF^P?45QU#sU4t?N!mI9yfqkb!ZZRPf0j-v4BXJ)(n^|O# zHbsVFGXz=~O^8Zbkywn_3MO0AR%=GY&?nz_ojvJ6lcI7=DNPkHpGqbvz%p-QBj#hq zR$FgtY~t08uhFp2DtqKh>SX}yQtZwq587Sw-lcQp{Rx-?OwcyFf>~^{RVHJwmt1C3 zo0BT2d6m*V8?*6B&qHQ*OFw|<9Cb2Vk+Nq+(B@Mcw5i6nD zoQ|VuSjf~QGjtddzN0B!3xFu%moojSt6{L#){KgpCNfJprYNMBRYkg9Et47(prrOy zQ`>5&O-TnUDw*T>y{Kg_7Yx%W<=_C*qP8VwMeu9H&`LT)H1NSr3p)eqvJe9$7!<4% zZ768&HrA&~IZGOu&ZV=%_+48NjOiuj1WWBJS_2clD+ovgEwq>SAf`+Ph<+|GInf6N z+d#m>#83TIr1POu0!V7~7p_-ixj@XTBp4Pl`RT|i2r>ows*vLZAXXYU>nh!IAuz-J zp-&1rq8gq9Mp)F+A2MWw)vp;6N~I@9`FI+J`@ZbY%*N{wW z?36f_@6RHqBXv^`lv)!Glds~ymv_6UDhv3P9U~IqIk>I8HjY`Oeo6;O$;kr-S0qrt zfGjYXaXpx-X;4xdE$l3y*B4r*CKeqijWj^&nE;MT-q^A>8?|$UY->H?r3cb%tYrE# z^NACy;KYRKSz=POHf>8WuF@dNHerGh7)ya^p;%8kM999RTi`Z5%XO^ak$DI4h46v5h8^BWd7=RNdKUgLwYEg?llA(cVroROyZ=uOp zh>4WhV_dXko^>nJ765<=R^;|KVrT@2rnFY7$yND#YQL4hl@qO!$DAf@QL#TTQ86jY zQY@)$#N^P<7NE$=6i3MeV!enfmGF#fbrdeN=mK5a87qe}7F9bMF$W~^xL8W%Tkrlz@<$X6~ zpO7|qJvx~xN)M$$t8N5%wKJy3xC-mLssCw)Lq2I0=}~6KU7;|h(h(YDssNpIy`q(= zPMHFA(2Q@b^;QHL?qPxFP1afn)Yy-;on^JbM9iD_Q%EY2&RUDjV@$M#>$y0B))L5hJ3 z)4q|02eXtWI0kPe#@LwQKt^a$z-SC?WL=I3K$~ki$6A}YHcM&lmv-EU(YDqM;q)qT zO*`2tJD+N6wzw9-vyr2Zkr;){ey}+L#o8Qh33!ktC~MRLW+oKm=!;g&luoolU_j@g zHcEB(GG zDl@y1pG)ezHFaH@%&4ncNFp#>1PCl@$p(w8UoOz@1wpEIg2AH5PMlg%7iiz2*7s?$ zEojy%3WN1QMkumFs$v^85gW3cDz}fx6pAM<>IE6w0+IwxW$2*`MpP_t4b+oDa_T~| z0FE!y@8v>mWqK``)k4}fo<+StN&UGfC@T~;v!SiBJqA*;^Fr6F(2mlYa80~7#gWPg}+Hl=Bv z0~`U0i&E!MOO#xIiHHe;`@?-#WO$l1oaBYTv$g|jQLEmC|Ie7{vRpf{XvQWmKwlD! ztUZEd0X%4q=lXCz=*L>XTM}GxO#u|0RA5^GEIx}u-=nQ)SJQZ(0{08rfqSSG-I1Mv znPp0UF38gHYzh9^(dI(aA7G8=gnFs176RJTo&_ZZG07(NDZvOjEk0KQ`)M292uLUFvYN-X!TP!q**S1c#7F-$W?_Z5X)Mhq zX|^|Fc3{Z_69R6@xZXvzkOPb0QVHlPwGF^Zy|-QvAc`u7iWyk#G%METd?o#v(GLP@ z$ts06t5FzR(MZQFz>2HJn(jj3e5HV;sTYo1Dc3rAZPo~uSCBD^$y1AVymV6u%%*X4 ze8v$r{J-Rr7f*owbOdZM0cWr^c9f7AG!9v+Wtx&vr2)gRqy@jLtrs$`v=pOZ9gV!* zmE&i@b{d<-CACqRwThV)b7RPv!`{ebN=;UJ)-l*^zQZJi`C53=&|IhXx}Zr+a~%_m z>}o+KSm#~C3Nu&MFa1~SwXmL95P(Wb2j$v~#f0N=rCBlVzZ7sVM2v3&v2IGBYy`a2 zeG6&MW#f=FF;Lu>KvQgz&Mlh7?mtI00MHi9gp_#h>>0Bc%QHu2Kn=D=T+G*y}0P%flN zR?^~_II;H3d;7xLNh4KFRz`DpAsv>C&}K4OU7<(_vMq-=6$C3MMHEWeF0DxttO_wl zGR{h-s^VY^wH10UOyfcz;0T756Bx*}YU!|?aL5!yJM8c)oViEM);ev$ zYn7G~v|VIQ^e7lbP?7P{ga#1f+R$7JeFj@ZTZ_Vs6`%?bETwHTzPC|m*@6tQ5hHF4 zObY=yp7o-X^HZ_b*-0joUiXpZk&4WYY_^c8FF8Ovm@)JYY1RyhQ{oDptCSobeH>K| zziXW|^JK;m7Y#}w3jv_D_Tx2ys0542pO?c_7_&-C-7S=nxH6(!nreh-D%HVBS;-Mb zFs!xVllGWU@(CwnVaK5-GtKX{BTlA1&GlMNL}}pGe5(c7rlK(vk6kVFdr>K^U2)9T zdD*UtixWY=D9jd}tkG;Iax~VHb94v5o6<)HsQlWa{MM0m)}l6&3f^-gRN)chsPg_B zeEvC9@ClA1S{j9(Z=EwJOJ_WKKjNJlM>Qpg+8LSEdK~2){Th#3Mb9Y0WjDsrIteO` zQ|yL!$tOR_9qXRVKV(J%e4psQkA3W8<9pxx-YJ~$L;^NF>kKI?)+{)7GKjw>>`d78X)o4|{7?YZM&7Xn`DuXKD#8d%WOmU$|jSZ$$`uCn7O*G*G( z&f|)CI&Lmcd`Vqb6MaFJH>duXCpWE;h5IG7t(aG2h=?wbR$HX|)`TNdOvhjK#jDb8 zY8Q>?U3lSm;&7SW1(H1`COT=ivW^WCWZ)ceDiiFNfrL>(T44zbWlrcEH6FxCp}Y+%^es=1m4CQNLBgWeuWl}N*h@H#83Rh_^f9=i+?GZ zl=Y5}BP~1&FFxtIiCJHK(M3-hu(9XJ``>>KKO^zxXi5g`?|kRG6KJ1kz{Y@*-X^Ar z&vTfxg(h0PQ0P{jCNc*N0AeB5n)N@jw7EbEED?3hYfYjuzji1M_CNj8KO3L-yyuTE zd)dpzm%sew;|pH+!to7n_%pv%Bb@`CaUrJ>CTf{MBwce3P+H7A(6yk<$%qzYMztdx zbRUW~pm~qF=DJ5s%!2L0B&o~7%qQK;ybw^N$uB~PoUU%Jf>GL(?r!M{Uc=Z>*CFH z25M=)43(=T>FB=HZw%F|bpK?vrP>1^nO94 z>i@t8&l!LDmtQ*m&l`XCXMcA5 z$)EbE@l~&S_4tJ=uJ9flV!dr8fPVX1Pal8$$A8??Kz-EXXkK{x)5_5xbA>=EvZa*f zPuXj6%;TtBTVd_^j<>yie0SO^vvzi(GCLJZ{^E4suYBbzdH+pbfOdEsX`xX&(GRdj zKY8KBI|A4M;G-#r1NH>kCo-(BwobaJ&Elk;mNZXG>7AvWPHT-jO`^FRPQ`q_X4^WZ zuw!ZAa4c_}lLq)3|NM>Pi(d4iG?`yDp7Q!r##2st{rKv{%zp6~e{r16=3+5mo^!L_ z9LGDC-iravuq^1XW{qHl_-<}iLY4%xbYXz2#HtB|Ij)rsy*U9JfCuIVb9r7kd~G4~ zlna?RUSb5sLh-aXrTR7TbVU1Pnn7^g|y8N@B8E?P+*72@8?;P(;<(6B%G+uuB zXUA)=xmsY=NQ(s^;~vN)D{Hcg!$RTg?Bl|j*`jq~UcVOTEeytUIJ6eEL*7(Rkr_Dp zk&z4wX|w=nI}sN-gv~MuSmZTVUzLFRmuV6G%CG#&_`ARRyL^VPdChCa*S_|(EPwpR zf6V{?L1Ns$^;^G1Ap4o0`I+(G{kzk~`|kVpI)dZvZ+-iC(n%+c&ws)5wP{sZ9o0B0 z=OPhgo~54uoIpF5oW_rCWVu)lLuWgD=!zneh& zghYurfn&bVD$b;VQcPtbt&`yAuqB#{^TI$bwg*PRIN~`>^_uLZE^>r{^w_`r%fA|5 z^x_wdC!c)s`1;qsemw28Q&TxD0r%_2-}sH+828O)+Wg*tBJ;Mim)$JcTAu1x`^cua z;4BpGRcC;cb~uL|Q_UUKAak|^SQj#1=cOkw8S6H{V`5=%Vah)YEt@L=!{KW(S@Zr6 z_&cXrzc6#EtjAt)#plL5@3?EcEA6g!_g(jn_uh5qc>684kDvLw%g5`lxnZ4=H!pk* zXBzVU%&swk%XtpJlLLwiEC2@*0VI%8=C{o11sNW}j^8aPouCh>fzP!tFjB=@HRX^> z>@$bjp)DW$@P`Q0zw}GLH2(hY|Ni*8*S&5$_0&_xQ`56M?bK7(&vE@XefRpb5Cgyg z?9Y4t^9bHwy8ZU?t#5s60_*3Jk^bth{;Ffeo5vkTN`%pvsGMX{co##CQ|rHUc2?U- zDNkk`asQJ_FK&3(yWTav-~}&WdtdR2SJ0xk^wLYjq$|Zv6R=M+U{~64a5u&go?o`W z0^+bQy6~6)`|Pvd$Ipijednl32JDA_KY{k~juM&AJz>NMiiN_Il=uKGbM8qX6O%e3 zK)seJy6_+Z;8XK1WV%9Gtn+CJa6Z_OO$-&D0;xGQ=dIR{%tOS5M zFEvoX(B}&$T5z$LJ1k2eO(znZcypV;SpzH$#Fe7}YOyZJ4P-&M7dn#WN*4xzF9hK8 zLX3^fZei`SmL^?TKP@vD5M0d=D@6vt48}ekx7~8{c*D&%CBVLCyyxD#$9ung?|5hW zeDiHLkDvPV<>PfX+^E=HN>Zwu_lO0ko+~5IA#-z@@N-3)REpRD=rHUI{f^D+i@72V z3P~Pl2SB`D2o!NX!^!4$j8zINL_g2xPF|_xSbX36&rV?dY)V(JO#poAsjnAErvl){ zvwL_s<&;y%I8m@L<2zVT0K4a<0`SB4zxHdtrZK{etsZ?GDZwU(AgZ4sC(R2>cIY>b zgNlnD7p_J9q{a~}B5od)#=*PZ^|!PFe((2wk7E{X251Ao|L*VqZta8xP`^I?j=xN% z@ot4XIgS|L4hyUjTgU6PE>3%i>z8xI5u5(ZjG>5%y=)eLI6Mq6&I$0 zI;hNJnWLOI<&2YeHY??9TR4sv_2C-nxS7p$ZK5=nj8H5n4Q087*O`gYqP9B)cs{;5x0Hr|+i<04neJf;JRx^imoT-rA8 zDc$32=7~P{|M6__Ih7gu0-%li#6mmI_nYMuG4dSRhdx0c@L0)!D4 zf_A(pIkA_^<&y^Nv(oFt@bBQkLq}CIU_aXL6KEeVzy|ovG;#B4KC_uv*bJY+v`nB@ z6*CT)nVpX_Xuvaj?8%Jg&al%iYiGRsZ>zJY4Sc9f~F(RNH=UTZEVZ)Ttin%UC2(S8DXr9Pme zayBz_o2yU3y3_s4tmoqzkb_D*znS!QrJ~o2+JPexj$u5vyvUw>@~g);z3ENkSHAM) zamkmU`n`j2DyP4Fa)vF_OH{A?!j%N;lM_H^wvGRvYO4zJ2>_cCKsxtG<46v`lI^Y1 z^P90>DuTNf-2ALeE-FRCZ~=dU~a=kyr+M= zsbK@CW@0SdGod=%`Ienf>9^TjCS;*OH7^w6H>WnUz3)Hq#>Tlma-m6%!Zd+SDc}7^#*$M-i{v?C{uVh!m{LB&F{PaezH?BYCZQXr<`iQuD$c!!^hEVrU(u$#0hlq9P#|f zRMGd47s!ei1msyMCSEyN=824>MVa5UQzo!}$M}NhzhEtcoOYNssG`rX9stm|hp&9~ z-t?yMe*C}(KCq5!->q?kMH>rr2w>Qse9|v30ARo8J@4h`0|yQqb-C}p`yRF6zEJ1% z_M2S>Y&vGZoC|5F)l8-&OnFRhOb!g5c_rClL3S-b;CVFNG`Mm|)H&yza~N2kvNkCJ z+JBU^Q0Sj`-+iwV5*qJnmN&rRE_7n)-2SunUJu;=+3)l#oCM=Hbj;A!YNoX6LZMMJ zN&+%N7jv1vb4Rxj*ek_5&lycn64YRN7xM)t5`bb}$PudvE-3}F10y-e_za#bldFmRQV`HV)vu@%qHHZ@Y;=jdIVuca3)>;JzVg*_T}Usqwbkzr;*T>e&l9 zq~@g=8o+q2wCK4P8i2vf4q}GlQR0|UkEZNHlV9dHnJ7SEq34VCmFPQXIKl~d-vbYh zzm&ilW`1VH0PE9FKRvO@;LVs4D7o(-r7&!5A;y|BINx)|nUoLYU_NaP*r%GY60rU9 zgu};C!M4vNQ!ONEFd_*+TS*q6-cC?1rMo+-X^|x)#$t<=6SNmv=m7eV0CBDPTp*dp z(L3L97_(l>Ag3L+(44kr+E~Q?_>W)9dw6+@i23F>zn(xlYHNV9+|_Y}G1Mog<0mgV zHo!jf%=hr~*4BX?DfovvpRBIF{&%1mzxB0mu`IeHznr0aApQO=9aF51%;>wtx5uyf zm}YfgZ1OqZT8!U)tm{73G2iXBk9nXOzq>1K{qExfHYUl!i5fGSW^ycYP-At+gmL5n zCz8X;$QJCp<4a)Eu^;>BM>y~iA#e%@{X3LfWbL*ZTatwDw(+ z)sPw4DO*>0aq;V&{N@#gcNO0Ip{X3YrTv@pmZ7!ZAqZyrU~1cSH{M7M`_8mz-J7J5 zd+vcF@=M79dBb>FdQab%?)Z{2;JlddZ{DPdPAP8*TFLq$I2Up_G8%@!lpT)?_QTv@ zK?%%J3p2`G^$B%z?JNf%p;Nk2T=VH~ zduxide;z~s@^jCQ=F=QuLZ_o+)$=%7K(a#r%@p}E11VSth$(5zXSVVj_s-)-77u#WiSU4|AlE}^g_STM+odWDD z|Lhq6CY3i`dxRq%82|Jc+sFLq={FzYm}Wfvuw%};`r_?6pYhD`$|Gd-FaGY|KjfHe zk8n(P?VGlbdG1-`r+1^R_ij86V9ypDSOkDs)(B;abJENUo4Nw7#lqWZF2w3)&dviX zJogiyScCQJv-WwKL%^(EVsIm-7l{`?{nJ0qEU_n3PWt(i#qX-Q=by)N{<-Im=bv}p zc-{r+Z~Fha=bxXPZs(4l_(b}AZu=e!oHt$h@LIn+UiqibJPfd(F`j;wy|%v zk3fJGo{o;$jFQ59zR%fNY4GgZH}1ngg5&^md@jj>F~eza!f^&x^*g`wJKND9r=5D3 z_NQ{n>rNpEU_w9Hf&~GNA6#$Go_A}9x>782-#*;WBDFPvz`mIrS;f8tGPAX#rzoIb zrtk1QSSEpc&d+p6;`3}Ka7$oxZ`6AuTRp&^~phaLt@D{Chhsg1ioO* z_zr(>O3@NGU6;O3di9Mr;Fwf!>{I zxh^dZ7hinw_~kEugeLpn>Y4ZEF48sTjGWk~^ltt>=X1>({i58b#feOM#$)J@ zDE8UUf_9eUKIp~eKBv2jbi6%j)@!gn%(;5Fzhyms&9v7RLtcnrfu#HU|J(bz9=Wb7 zJO3dI@KXT$MY7+5i3tPo+)lG_QvL%ioM-*JyYps2&s+(Vm*v(*~YM@ZnRrj8I z&bj-nv-aBioQu@OhaP%JglBjt!kis}6ji%V6_b&Tx2~7hz)95mpt>i4y5gR#*L7;` zTK6E230}f^W7t3W$y2uk*gyEef8poLm;Y%;Uid?qw=9YLZgq0c9MgSzd}SLG{*POL z^%I}C^C~txKJxJN_q&|=u0CwXYba*vUl&cpp`Gq0C?k?+_3(ffUK^`J;oqkqfV>nJb|rqwhdNh16gbo1G-Zd zMz5vb<6f%{s~rP3|CyuD5`3XKpE-HbYwaLth=qO^GaH0+|b!%~gNLUhlqx_jm05vfk}=*?xcb@@4+6m93ftFro4t zlWAYsHp*1=CVT-*Cw7eXl5vlf4#w05`&ES<8 zKA0(`gDNlv1Mpl}y3GUturX()_CAJ@dB6~i>8oFTU>c~IkFM|Cd#z~uY#?j_=LhFB z&uxG{ORv(g$PfO)7rx+&bhLV`&J9wgPmw{}V5z;@u&(^^b!dg10Bg-x{SARrxUrSd z`AXOI*(1+PUOoAm1qW9N$OPC^kT6yiJX}3#pnXQNhJ6NDBajFHUOlbg;^{N?-5CM= zsng2C257S^`~UQ+{f_d^2)ti=Wo2^Y=SRo}IZ1jT7>to}Kqoi5x)e~?b??@D4epAJ zh^pV2sW4;#jiu`XAn0{~d5(PtIs=-Ser=PYy^x1}&Nm06OhJaI9q%gGEweTRLT5eW zV|-TIq@G*T{?Kdw)E7QAW~{w2&aL}oPh!w1*w!omm????HlJjeN?K)$_zs^r(bQhv zhkXb3%50}j@9P9`50I}{2kf)dhrjQsdzg%{=gHnVupVR(d>-`s``k--aF9&qfPJq6 z_`UajnNkwAUU#1EBiYV~_LmyYF7!kr)0@=B)#^sk+b4X~p*)o(llZvD{C7atfe#J~GEl zuY}3IDM0R83+sE0r7M ztdn)qpfE_QK%77hQ0Egzs#e{Zaqio<&oV&1vSr!w_RN62SAp){t625ky;~XfpdrpP z^&tTCfB_4#PR{uTQ*?*dRKIm+kC=Qq4E$b9r(cu%Ee0oVL5psjF=AkmNm@Vnekm{f z!wZv@S6;KsmeT}b0yo(7sgnd>0PU)=WiaPcr%(F6AxhZ;7_X9fpB6Y{@yr>p?9==W zEF5K?@)SROkFsBW^%V<3zC^&&Vi*PC2uQsL(AMP@)#?(*`jCG zo)(F|s-C6L^`5P9mLR4Tjq3Md+W<-zo%h|E^0;vxgPC;iZ_SRzzA8}p^i^Os{LgzL z9iAitWP$g}wRGRu3jhvQP03_Ua*-AjX**W#=WYxedvRR8{H}Qdm${(p!FeX_!N#u< ztiL?@Z$JL=w z;5(SHeSgwc{hcBpYgOZ!K`J>ZR*ejhlcxmOCr_T1tl}wtXRQ2_E4D$DO%5-b79QG2 zKrV2fJLL|eU1i+SlVJTZA>lhP=vw&#FyI{Cqpmu@51-d`uh-N*f&(Ozb)}Tuci;VU z_i!)sjbC}?6~-ypzW|+LJa z905xE{}?{M#MHfCop_lWLanR_paJ4y>e?9U#bYl{nx%V*QD4uF za1X|qg!;lslzl{-Tw|Y7_Nl5Py_c?fJI0)h&}Os`+p8Y3$>df5`>+4{Kl|r*cI1UW zl({p2y)_uOXaCB!ERB8Cpx;}WW5drg3OIRU&j6nHOjh5!QJUR7la=?jW@+p@3=R6- z$^JcC+3Qk_l*l=Viz{-82fzQe!FO|^R_bWf(7L88$jTgf&Iyq z6_-^`F$en$nDwi#O^(^V*>Ak{rl*E!j}OQgte3ZEi~(O=k|=AEJ}?0}2p0$8t{3Bm z=P>S-6@&W*eZTU2Wnq9VkNp7%2M#PT5I5X6FiLcGUISfDJ}nWYBamduIrANyoF4H_wNybY(r8WKBR(dIf*Z_1H)Ff-U}d znxOq}zqWmOukx_L+J5<~m$X&ucwk`K)ClqlS5^9hO}U_8-M4=Ar^jHQXMWG+=V!&J zz|=hDtsmIcng+in6}jRa-1**vR~Qs!JWX>O8<>(Qx=YWElB&Q?dukWz-Abz~nj8Rv zwVyJ?TD4aRSk)RO0Hs1=9}8@9_1w`TlNXJJpYgyW>;!a%Xh3Akrub7QuZOwQ{HaOkUo%45$<2Mbi+^vn`zY;Tu) z?w+y82h3Z-9@vjO@?Gh&XSMAo%By}Jvoq%GXpIlMJ;$`V|7siML-&3B@y92{7T>J- zR;bsrBY+aYw)%?A@sL6)uoFY=DH&+_ccHw+i5KLe6FXJE6dpHB;;e6##y!~446x^d z<-T3&u$`?^KedIej^BH2hQ033Cf!9lg1iE9@YLZ$(*-NH2H2N&nX+M%DppTyXR+5Pb#?z78$LEU_Sl{o6TWiwF^?Qu-J(B_Z)07r3D_LW zFpTk_GrC;hySUY=K~84i;K%HWaqmGSci)OiSj`OU;Ek?!^X~S2xMWe zieLTmSK2kLcQ>&Ln0imiD~$SUqaF^#BE}D9T!z#`xXN7GTxQF)?Q`KdE)#GyXC;uW zRi!C{Q5Q--W0m1q28DWO#{t&?B#M~(*fS95+5#x5f@Y{&A?x(>JJ(}9+lG^%4bstD z&E%*53C(gKQ*M3hN#lA8#2ZKWb4s3F*k`}n!feQxr% zfBR$IueD)CsWjs?rlS?*f&1g+pgr%~_t50ipZ+xSQZCHSGCtmnNnL7vATQf86`uttjWVx$T_It-< z&*z5}yFHT=*UONb&&;^vuF0LB^w0a|Snlsuruo%(?D_mOc(~`WmD^j_Ycp)H%uH4Q zm#yR~)gGrQ~?yFD1uSZK(ASWC@!S1Hdy~a z`oOEAZM_CL+K_$g+cDaWJ{)HSTCHz0S$0+cvU-*W`&%m{!JglE^VbaM4)+Z???_q0 zb2$IvKmEm|vApbIgC(4Ewma(^>~~!Dj?_eWQUGe?%0m(?}dKCO7Jt z=jT=|UOR_+o-xm*0>1gX+fdgllVkfIp4@NbW}mH|{r1wzwzNI~tVjIwAdU3Oq)=u; z5o^If2e311K`a&Ll&Z)zG6CqSLr>%eL+jix1bgUy>E17CL!CJTf51Q+83=HPhMSl zMOh-RK?+&nipLiWtbe`wYwlWy!3_xq1GN?f^CW9vg7R#NUJsQh1fD|h!lX2=&PIzs z0h1H&A11D`TyugRCMdLT2w-M0?Mjwjw3OZCC@jPOlP~?r?0#A70V_;D``OPDc)xE8 zPmY^c5JKXXwV_RuXYA2ucxES_>&QpJ-8=KJzGB7)5a*L~1`p>Zc7(c*DGvy^D+8;_ zuE71FR*rtJ0zlsDD*L&a9r4L8{rU|7cg=+)=CgHobStYQt+UV7W@bSb1z4aNcp1Ha)*G z^200}-?_TJyS1FTtQ0MrDZQsvRk1P~3^^-BD?6w${iqZHA^soB^~__X%n=~Q0u^Rw z6i<`GcB>cOwyh_BL`{3Uk^kve|C9@E?!E8c>27mky$TG9B^$uN_03|Om4U9T>y14? zGh`T$QTEDWaIls;je(NsIS}~3-l~H^aW?0fCGaw|k3&_N9$YJ)T>wxl##kAM0-$sn zbjmyd*?G-f98Mj2_-Mv@^}=7_J_ zT>H>=qzPAE5oMoFea=NQ)Zir=#}8hh958L&cI@{HkuwMtIu>849gsdT#usAC5e z=H7}e{p{!ebMoqm6E1_CWbQQ<*BrA=p0L;k8z7B6PaJMD!6p|nEHE)?x5`ujfKlfp zs7c=8J*%GS(F?E;NG0G^fj0V+eTII8p33$}BL;AeJ53aQQMqL7cJJ^6k;m<6;rDKn zwfJ~2ORxOnKlkcEbcFkJ^JjkCX;DfQC|1|!j9-sIh(FU_Y__N^X+N7 zsy9KJsdD+IcEnAVtS@g2z}jLMeR`G)d~PC%AftpkUhb?Naon*VBpHceKQ(=@z^wuH zg&leA7GQ5(Hh%Sf9R$iB-9H1kyPufce8Ijg34i#mEqjYxx#6BBv;6Aauj@9z-m?v` zQ|}B0#$y1OGuTKnV@l5Cr2kg?uG*7G`Xn7YftA_7;CERrcJd5{+-H{~vhsm#@L#Z% zh(G+{53gd{U}1mwhyP|0a#V_$4bnuwP4?bN159H0sY^8WWY>hAhkEmv1Ryr!P8tZ= z&ZU-{I{V$~kqnUR9Oeh7!m@J)!%PJ3l3laUcFk1yeMg|P^X)Us#`zWflvTe@+GKAV z_2c`*Xn$e)Tgf;t(-nW#_91!s!`kCOZ#(kN&P! zW|zb=69Io5faB|i0i4vgEVuBw9ovNO?6dVvs%k3&Yni~%(OW{>&?m`(xn#**#jc6= z5gd8n3!gSqU1!GqIKS~W1IPg0YfZS7>h5)>-U?A*>+H$=KBk#1$!A{!|?j<|}l$or~*n9in z;pJNb?C*T%5iRhrtgfAS;SXi*IAAaSwrSV^YYt)rJd$gu3P948q|sC|04yAU;X{(B zgVvZkXAlaslup2&@}R|bTyl$GBpy(T^sa%i0j%*E(d8jEOu<73qNE7~ZY7v84cG^F zbs)=Rq>?=lc&Z*aO=y=Livb`lQPK`x)NoM-27ogj46@>b1p_UU5heDGv|(wya;Sfp~iLsMGVFENw^EG=~_;FhZ^O`+P=CxN}wmj<>`2_Lxw>>p3O9Dy$8Q@aE zh;t%%qTXz0(gd24()1+zB#%2(o|^})x6cG|_D$arpfDj&e!wKwNw?1Sy?`O}K6gc+ zfqnzet+tA#_DKv4gSaP)1v5*tMISy{B@g&y*SISI zEGqz%iZjz*g9@OMd_ZNfb!v=O2LL0=#>4_G5)Whmn?A->kH_o@Gp{of1AUczg=MB> z(W|VafE55YRe>6qFag@LCd9Zhy`JJr?Qy?SFR*5QFD5MlgW6tDcI{NZq7{R^GxSs( z%)M>6f60#L1nwF-^4<|dPBwA;)Pktr``-5^-}uJYC3zS?1H7@9_TSiJqOjB81zX&K z_yxCq#bT8mvLj}L;C{jT!2e+C+3!uSzTrK+i5+2|ncg+&FLMR0zkHP~^QsXbg=CYk zk(PE$#P|12kDZ+-fY%nOJ8eh3-3Llt=s)`nk6^?8>%-H`Zw0V-@^1myw*jy*fD#8& z;^0Y?Koocs8v#3zD+!~|9<-s1kOhj_mwYqLj$l*7VgQ;nN*QSNXX;(B8Tr!Y#mOam zkSlVw$K1bpOv4qpxSJ2ggoy-`z>YZkNZe03gJ9JhDvl{$xda0yuNkrfbT$CtSYW35d|Qyf;4h;So`Fx-8VLR1J?_A;_y=W^^H|(BX zFx{IAfB2O5bx9RFY)1fc23j4M#YClVlW~6tJ7SiRf$KY1SSHl%2IQ^2Scd(swe_7#@9JFpy!nn+T#rFBW4RonptL?auK|!k8Nf#f2cw~N^0ziCq3c3;ySx!>!bJhgX4;~40Nicuv zmWlmQ$daT_)6LCd$GJL?R+o3OYnPqm8%j~GapqoHXm$yRIlh>jlII#{1rjB5Nb96b zQtC92m~!!nsZ-$5nK=WIQ;lC5YH{%EtE7dJB)x$BaTVWK8}N^PV%Nnq%U`=~ zN7W^r-us+wE9FDmQT7E_88hNa4Sk?C<7xi zql-xl!M=<54gr?f5ji`1T!8KMgr{oMPS!M{eI}9QiZFCTciQrIeKt}$r zfre`Xj2N7WE(avl4=fODF@k|1AQz?oRv#3xIA|md1i7SUl0f9t5tc2;hz zuB{J!TRd=B#mou=RfYY9HbvG$#|sE6uiHhr-$UOc&==#N8AnMjtaH@)MSYQz{_nj1 zBH3)zeaq6t6WT}lX<ELq=A3s$`t}Dy^0-tp-hy$_}fi}4TGr| zB$3QDWk~~c+0F1G43(~NCb%Hl%`Apa;6tsDMwmUtEQwY4;J_e*u@8}P1i2VEwAFGL zOfX0oFoJCyAOs#CJYbatgHeN-x!@Q`Rlyk?Potkk(Z#%T6iWm70Kk$2_y8+vpXdjxV@L2x zK1o!zpMlS$drXF1W_?Ks0&aR##t?t2E}>Orl@w=^3p=_!c68oW7UG$q9~H0{fB%dD zyTZt`v@;EO1tA&qDq=%0A~FdWG53;=O0n}`5g7^wp)nN$XurW-k~=`52jTGgTueAhV>B6!#<`oQ9#%*0E$QuN=zRVd#(NcK824piN4L$6koWxLp#@-nECCygkBot{w=)aZ zF_|@zHRzc)>f4bf0t)~@E~!|fpUdOL1|!|=GG!S|cZzkY(RI$|@Er$#l1nRhw@!nF zk_D7O0QWv7v8KcTR>uLwOcA(}Ik}sxv^X-(A|{!-fuR=9mT>ui;FzRsMjwDx?TC~R zB0*)40a))&;H#h=26`oPq83c8UF^1W(eta-mO{2$J(oQ5JINMNOtPx4l>U}^yj*hW z+RQ0WO8rYyDWiINpj`b~`O?8-a`&8ooaMq3V8!OBnKLfXP0J~`PhfhKX*Ai?X=Y9( zkf{7fP+Hj0?Xx3n-+O5J$pv74EF}>zfaq*x?o~OvR{{hV0nm-Zv0#OP4`z*YF~w$J za3Q*m2R+k{$sQ;xb}Wn+g8(29L-9eF$xNc{M}a{L_aDEd5IK-T)H%^vAz2jISCUIF z)*9*JhnO6QD$fIp$yN?ERhJb|Z?RW=7bXF0F9v5l(j&>pl3Zp02+E)o5wZsemA5P= ztm_aE$?y^fWeSoVP@fRI?~(>7+6OjTQE#gQ-qBw6jnxkT7jXTU*q^BeULWm6S!9n{ zE`G4OQ%mKta%)f4qMH&50k;P9SK$35!zSYko}Ci;dr3j}Itftd-s5@}M5%+jOt{BOX$Sh#AWmuSyaIU8H}ouI;ew32Ok4m)*nH=sDYodCI$jG`&21*lu$zDB!Ocv8L%B_caW~i>!V)* zB1wRo38s<#u&|@sXGeH|!Qq2XGL>-g_i+R4SUuP!;|qf;R>VjME>%oMOeYdZH~`FO z0|#m(s6dkiBT5{6MeGZM3C0~YSn2i+0jnr&G^U_(pxuEr;aF#(3@SyjGnA9KVo_NK zA?do6zqu}HufQOa0|Ns;!3VE1Gmq43gR!C5Z%=d0MH<2$i*$e2XkVZ zz{F7R5VC`n+-_z*IH(ek(7)^#0fn?#?;G}a=3pl1#2{&)C=-KV5B5C(h`ZIQiIch@#~Y8D4b zp!*ITmaN8rj-ZqV{ZMQ#02BxuuB)OPXIKKKKo_)<(TPDqau_l;SYLnub>pDG86^g3 zwqS3?Q@pZg6$}!A-0nnBRt7-ez(bqKG^vI9`BMg~`Z1L+I~!xrP?-&4*V3PP41;R| zGv245^CCe>seia<>^BG7Ffg|$c?5l@d*|+daQ&9|rxHl1$A%zKj=lvz@Qjv)9o-f? z!jo`*^PATvM~?h_@=up9FOclx1lSl1kt`?spjI{kU25j5%E)1W*;kOkumV^Q*Z>SO z$jxJv+;z}G%}uO~84qy(;m#(x+0+xskXj9%tSCDNPHN4tTj`&<6$oT8OK#YdT7C}~ zw(>V{@8nV9#yK!O{Y3V3=*7 zF}ED-?Q{S^ziX4S9~58-98j$d8ZfqC?{EQIxV|3rX|22#1FZ#n@#F}#Rln@ZFD^n z1CPNgWnr+*tz7>$NXHFqM`WM0t%7BN=eD-Ff9AP3FEH39{TDhY7!}JZ&JgX`7X5-g zBWSi{V1sOd{)i}#Y^!x0Hn1M8r;_11g>APwwZ+}{1Ls3T%~bx|rbrv~BYK zDTQU1VPZgA*&Z=)9Mhuy3p={4c7zq9c;N5Rqt8s9wSC4%_MnV+?LpS>UwMD>!3Q5K zUjHAy1lTmvOx+ADr)}NHv$HJ>3TSmOQnIzEReLsQXs}6)MTUf90|zz+XGqHbWl$>$ zROrrvS;0ka<5SJYs+Y^sLVS2rYmiC~YqI zpeE}=zo9MJGa5Y8LD?HY3qVl!R(fb?XAG5kHLl4Zq_rsuu*e>RK$7wZWs<-^UE2=e z)RHB0l4y%(m^iq(ZXJglXiO^6>ym~*oB>Iate}2Pw244TrJXG7==R%D?Xdmr1$!3g zZze~NJU4mrsV6OaP6%gd7kO9!~vX4!r_Xx|^S;||y({0`Xv zOZaSg-3JaXO_p)KeUFut%eG(1p+i>IfrFE!CHvpbKe)VP$D%AdXX()NdIy%5b*>$I zz+TIT^gmyy%d*bLHI|kS>HC8?-oCf857;q>Y*V=9Wjp_%%D{DS-Ge;V%Ea#najio< zXPIp{pmXfE1FQ$?ga4OVH-2aBIk>dM^M<~`Z%eG-vaV%I{SPduUk-ZRkcq=`4(Y{q z;yh~u&RN25%c%FE$r9STq`IR_mb>hAKtJL8gX*7yEJJ;advOSTihE(_Eb*QkWS<|j zat|#Z;KEv`MS)1NS+Y|P_<4YngSoZBpY9sg@#NXyB9W#M|QYsm{c`hQ|a$S7I2hbG{u zFL)U4#Y=c$V>NqW$v8IXy0pRX@WTI_o0le+@P27?dMr2ax`<;o`9GhAZe?wvyo);S zA|AMVN$29bjZ50VP5=A5UF#B`q`qO-+Ti2|F;I|EZMw?X5Mb#0Tyxm+2Cir z&-X3+#m~F6fooo5nZr}$H!lsp;e7Agi{4*$?B<5|*9PvB*J)Z0UF*_N5Bm<+mxdi& z+vDJEIFQ@i(CEdEqI5N~3b?UR(RjLN(%HlmaeU)}oW=o3u4KgbaOsLz9s#2D++7SD zxTAD6TNyRVryDyMXyAEdY8=cq2wK-`i@=0hYuj?bwNqEvUGAjc!B!c70^>>=I71*w z?9S8FaC}r=G}#vixwKPe4uqD>PjZIX7a5tglR%S|ikHY9txrQE4bpxm%VYbrj62%z z#eNstZ5^ar-)=Jz1kpap7}83kYuA)e$m$yQE#A|>&_eWUNE6KtS~+|EHq+)>p5FpA zJi`Kg7_#3F+|wWzAFeyWJPLRV?^&RxEFE}ZM+-Yz*wJpgMHgemd+)=Oy zF@=^!(b(^y$z%l5D_j27r0DK@X2X+LiZ{Yp4>eBQtQN=P_eR+Wo=dCp>>6M?t-I;Y zBHJcV&qLYhIKDSZ`x;ncXd0eR{jaeytvzg0>nsb$fH6*`fL1}ew&9>@lbB89O-f!5 zH-0;&VVPo1O^cWJ8;!Z)wb)-x^0YR;aj|vgC)O8Rx#nQ6u|YYBeZux81@@H3+i;+w zjqSi>bL)#eBHMy`wN`%P?5qjWYS|8F)&pZ>T3-y#7!$8cu(016XNIAXPTJ&#WuqUc zFN4`yn<2sQp2Fy@e*7*CgMML03p-la(Qew22OWj-)Z)<5!3#yY8QtrajiK9y3edgv z@1g=`3_M{58g3+Y!k~`C#dy;qE1I*)LB(*b#{O^EXc<)N@7c;nXGUu*jl9*2+_swO z7^FcxTitwg2xiWP>0pgqQy2{fgc$|d3$BTJaRyJWmnIrc1A~p~AZnNm3{h?@I-KcQ zO{8JtJ>%sa+3-eqt}xoyv@*)9V{ik+EFu|JaHf?pfUPbVAky`O?Rv^y% zAN_%QlxVQY2OSJq?c-p_APzF1w($XlI%04TB(hjo@VcTrl-o!n4({Uf9)Y1?fS|rX zK`;j4TGv_II9b@y!j2Ypw7YgBNhGRZb_i~2@`hPwfdOz9 z-dL~%bOL7-=%7J)yRByr@ViE<+!WlA3)Etk2Qz3qu;Q~3X3*#j!pu3i6J!It39j{~ z!D!R8@ifpzk$uhLuEl0$YtYCr!&>{AEcY@wYhl_|_6!aj6U7eFpqsWb8ZsRWKr)0@ zhB{?IfvzlWG;?TMUulRz43`bxH*T!xub?c6mMaw_`;=}OX4|M47kVjwcNY)_qAB zR_pp3H5$-<7$9ad=w`Ul>`2{gG&Y9O)X0N<&aHI5NSDEHM9^%_1q*fz8jt^jr8v=T zYeuSjE7xSEk2M?|nJl2?&0!F!Z9Gj&Wx@4n+)YA9wpn#(@`(CVa2-x;MA;K<)NG1# znYoY~&hpgGa5Hdi&d73mPzMY)2H@2R8-_X;WwY@Te@d5sHV}Z+tT=?AB|9dI~TKd9ElB# z>^dW~q0#5YXSZm_1*^xX#d)oCtTxf8(2hYnVw+oKBjEZCZW=mo)Y4Tb{(I^ zsb>wdWtiQRQDVopaijs^%qQj|na1ndhy}nFtQ{lV2lNyAGvT`Kwo`MAY)>48 zscXEjqlFzU>}YrGh=3h@sWDL;fe;ji&KZr^fRX3PO0*xj8vz4LG>FD$p%LAQMwN)V zICUx-f*muG9>ofVA;LPMUe=_M>rt&6c*|LvojX#erRa+mSbktfVP8VrpyB)WF37|{sKU=;lOhW)_$H*T!< z`v}Iu0pjI&umZC=t}$xGqWGergKdoD_MyKp;2NLh(@>8_y4pxC7nn=ygAmMNgdh#; z6?IR72a|?n*3cHgMn)qaRB|PQg9^2`k%CmXCnFe5a)YFiY3X%L(kpS^h;1587Iw6- zqlF#qt{qK-j+{wGY6vO`BVvTJ)xr(U)Cv%Y9q7B1R9QxKTc3?_bK1y?W41@-d4usA zBIR@~8qO-xv!p%ISb~g*Wuo$}N5i95?V(YO&{Ch0TNTM(wD3fRIRrx*-F(dG9;L<2 zz;TSIV^9Rm!k9UO&zemdX7q+L@W@$Ch$D6!1`yeU>tm{4L!+gu7j%PAzu3rSZ03SR zFj#6=jn~@;B$<#in`Sy&+xIY#q*R|~4jiR%PM(%I&h&=jxBz86o zSZap2ZlmKg*b-R*jl6AU5q#WJ)_Vw?4KAYeN3xBD9WCr=VMn`aN1s^yE&djNi@(L+ cKcBz<1FFC>FGv>DlmGw#07*qoM6N<$f~1m0p8x;= literal 0 HcmV?d00001 diff --git a/wp-admin/images/bubble_bg-2x.gif b/wp-admin/images/bubble_bg-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..77ac312180c227d318e19a4b3090bcc40094cb84 GIT binary patch literal 507 zcmVNk%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..f3bfdcdc2be6c49fb1a292fd0e393a583cb007f2 GIT binary patch literal 398 zcmZ?wbhEHb6kiAVZMb+lDua-}^{^G;_{rhjF*cx|lI&f``~Uxc28w~= zPZm}Y22BPXkVzmvIk2rhFr~mlN2=drNrL8vDU&X&xWci5Noo1YveT}7dUp%1CwO$6 z4?4(r){n{RZAGDjyn@Xqv&#NcznA-XD`a}JL@CvGMumlP2ZixP$#+euFD+3HDiw`V zoI2mFI)x`_QRGtL1*=vkHD| rpEX_WVyVCtX6fJ(#%K=K3lAO^En-tyx=7|ZTWv7gl4vPUM+R#EM$V)! 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..f658b5154ad3f8ae11207f0fbda7494e06986a1e GIT binary patch literal 996 zcmcK1c~6=L9Ki7(mmI=Gz)2U@0#$2TmpQX+b*3%dbal~gNVW4o1g|P8UX5|dnou$9 zY1cAnHdd{6Pv+V9f*@X~c;m^^7qRaf`26v`^u_0ABV|0` z!Zv`{>uqRgC@LzNn3zaSO+7j~8X6i}SXekXI4CbKKRi6t>2#%~rF(mOX0v&Je}7|R zL!nU2&CTuZ?(XdDtgf!k&d#o_t)-=57Vq`T2SHKjZD!#uPo9$aJRV#|E20gb`xnGYfqF3$&|pYTXyDEVbea9nUA zeFO&4E*t@XE_-C{GS{V7juryy!{@^3M5UX1t%DeN-}&N{6cQhSl3RumeD@alTwM#+ zof+p>mq-M5selB5i1#sQTRtQFT~}HDY2T|IECa3___O2NjJ9qy^XeS|7DK*%mmQ@R z>$E-)0eQm8$PMRhG6!)EVxQAV@0~>?%gSf@!-klKAeJLG$d8>lfXITb#9IFRX8$|` z@9%d;Cqny7oEVC}zvf!W@t2ez6p>7yyz1fr^BqGyeiE3mgzd4*%^Ug=HlL z^5VfnU|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^8LW0027xEC2ui01yBW06+$)p%4Ku1pvDon19(JE2@igN4*(iM7XS_uP&6@&1sDJqLLLB@ zn3kWA3`YrGbIo>4kO|aIRGg_83OL_@a`EqK>#~w`m%!n 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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 n0000000000000000RO-{)1@R(K735+00000NkvXXu0mjfxlSSx 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..54e2fb2f5fbb483b6d396fae843568c41f110dee GIT binary patch literal 21396 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�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 P28p!Q^`BQivy1p2jwOXc 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..e46d6bebb78eb85988ad28bd4c9e3f6e98bc6118 GIT binary patch literal 8007 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 C-$~~H literal 0 HcmV?d00001 diff --git a/wp-admin/images/icons32.png b/wp-admin/images/icons32.png new file mode 100644 index 0000000000000000000000000000000000000000..e491b1a8d28b3b3a0b8594166455b931281a0414 GIT binary patch literal 8023 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 BHO~M5 literal 0 HcmV?d00001 diff --git a/wp-admin/images/imgedit-icons-2x.png b/wp-admin/images/imgedit-icons-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..98dd4124047bff2b12a5d491281e09c009b2f3b3 GIT binary patch literal 7664 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 G2=+hKXu@Lv 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..0d544ee9b83b478c4fe73f6a9c7b02db3fadfd3e GIT binary patch literal 4055 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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..1e9dea9b456ec5bc8c3f9298a99739dadccfeb66 GIT binary patch literal 2254 zcmb`|{ZkWn9>DQ$vd_EU-G(%UkfJ6Vf+>TLV6fpq33)&a(uPM7u*HxH2#7qEodBE>&?`L=J$}}eLmjDU)0f2;rgx1#9;o;%)=g&`0PEJox&(6*+EiGNYe*M<1TX*i< zxqtuug9i^DJ$m$b_1V6Cds9%iqkc#E~<|{0-&qS?{L7vj6T5pApY_%J_{R_41C|FSUgT zW-LLFLyAHiC+bPZwj5akSxB*vj-_<&HZ|vbhCucyT~acp%@VeT15e5pj+e#-97z&nAs0*2 z6)@uOOot8Rz1#fQocTKmez>04x0jOaVHr(!n3Szyw;~B3-JsL61dhLwNEh(C)SNAq zpoVCirK)QHYv7szfz<0;`E(6ipjyuv2syLJC!LD}hR&eUN2&E;V%gL&?%_>Q_xqb) z0}{u?kOfYetTvf9-7IG>SGWrun)NgLkY4JmKq>L)E?qO*SJczMX(X7md zaU_n{wrxMHhJE@hwGkm%BK54GJP-&e8wF*ZzL_7m7tb2-1uaP-fvZ2CIgXp017ZVt<1%n8Yn>i!EVl7|MUUvN zvGGeB{nW}IlyGg6yWo$e|l>XKKP zkcxaaskTU9wt|w=v28KhqQZ5NZ$E{caTxB&x^BwJi&`}EpXO>Hn_5(QXJiJl-xFmG&h7-Yu|W_ap0Fja6)tNR$`SgcXaxas6lh>%6hnzR#@MNs>M z>*Ll#t8nhL3t*M}i~dm4W`$j$5U>TM;M4Nh&KT{{^{vBCS(o9U!MGYUjy6{WYC=}e z+})^cUEiv(Dhc!;B9DB|$)JVJrg6o-;5F4(S)Y$#qEEguhCg51pIh#t1S%cNbO=$m z9*lk6MT);`@<_gs@NhA>Vp2k>U3Jc(R5FO|vZp*w=35ef4P-J8(xap`W&)@K zsNsWZG0+!VMGV@R>+C-v%*?YkuQS>dG6`7QPo(xXOqd~t_x-u^2 zeE%*N&G!AvOx0UhBswg_EwwXzJ&tlMUG_Zq`jB9?6K6<-Zi7f=x$UhSczl>ZY5^ZM zeaaWYn&~VDebmhDfrSu$E>K_f@$SLbi`$1Yf6q3pTlI-C7_N@_spB0;Q}m4%jzv9oT0=IY0f9-462&MA zkr9@$QF|iU?f`)t1c)zY)Dg-`SQxS$&~KPIBoc$dB7mVk6|&cx&$TooeU3n87GUc$ HKgDlmm+ghLI1)k}bhc1c_^uB6J z0hP7Z9B06gl7}eHE_H{pRcUq{*Qq=tFe#MQci|3PkMgjDS;flAQl)_it{Zt6<0DV= zg*x@cQZj~XPabS;9HIo$YLd^=WavH*4)gM{$a{eaQ+=Qr^=LrJ(ETPD^4RiG!#2(n zX+~)$LX12Z?ikb;8d;%;q0HfoA^pTK8LlYt#1V1o^>?4M`P)VWqP@`o0000rIT>_nGyL#U7biEZvI|%Tu{Yuh0$6T>SyOO&;c5wX+h-1=j zhh&lFwFY3T!m)E!*6!+a$+gFUM4tiRBxoneJ)+lL0@`8apTiTQ=ga7GC-|=dLeyqY z6<1^cv$2v)ss&}0wPb$;b12}BjZA}_*NVnRjaNvyLZGYHsEoJ3fL2Cf3$L?XqE|LW zcG2%9cuf}ptQ;))&dTsOuurg}w=sP?LSx1g>;So@kb;f{3QBgaSpnG&7+;wbBZOtZ zRDo9s%Cya79GgBWQI_eG**uyMx>|%x%$u3t7Qdr$%@iq>qx_S=y~5ll<^1-qHCcR@ zqLv6fzxm&3+gDFn?O4&Z*o%zK7|KbRx1=yf4Gd9NgBbNSqS&xRq&P;_ij?PLhY=`P zB}+-VM$Ykd!xmkO+Oqnj=6D2zsJmJw1hAG{QE(=Y2iHz`L+YBcc^n0Rx~)kiCh|&! zNF$08s~A~y_QjUVswY4MdQ~NQl7y`B?E0(5Ns$ue304>-q_G=0g{%l5pO8AsCmxVr z0p2p<%Yvin0qq8vD!e5_fhR1vA|ndFFXv&yml0=KR%pw#vt;fnEZ>ki^PUV@>i@$; zpM3~H0XVBj1{j6}BZ;Vb{&J4Y<}oUX?c!^;$OU)F1ktdJB_#`fR2ZBfgeeL8_==Lj{dwdrH79h;x ze$^v7z09MMm??oRQB_qEI1{>7L6oZ_x#>GqJ-JYhdNMRI#5$3*)j8$O z;|NZUm784b{rjEp5Gu3^L9>wOqV>B%^dnIjG56lp;^5?Qh$q96C$D)SCsCv@UkEkA zQl6FUoXa0|cS9yilNFgUiT z6JZumPnOdx*%T=#TE?!#%#@ay61M9Y#S3x+!ZFL62(Gf22i1~8KcDI*5{;1n!kWG# z<(;S$&}BCbhr<&cz-7AA|p?~)&uQ%(r%V*Q@g(grtkGnHR z??@2V33gWA5qS!uXmnJP1p&nRD3Es7ZDlZb9^Wo_;^UOk8B%Z&DOUBA?0sqb`)Rum z^!aWWhLorZQ!Nw3F?%NvcM!ll7qETq>ur(7IN-l=Y(J(LIPTh9);g!TlisUh)2pHg>&f_(IZ}R3)(~6Fb%fQCO(+Di0_6<{7wM z+Ye7c!IC@2R)Oz)(-4aKsj^K=;_N~I|4yxrm!v7bQ?o{@K9u=9{ zYh#w^)fhgA9FtKBFER%kQrl!+c}hj7-#q3O*lc{d{o-9 z^Y6mmXdwCSeoWsHkrL$(X2C(0p&-^^<){L8=Qt{ST`ADX`K)2=xIo{r+NZqY$8Io& jJ3hkz{D;5KOMU(U$~kl8WzRKR00000NkvXXu0mjfeC@PD 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..56a974731dcc63d22873564380beda339ac766c1 GIT binary patch literal 200 zcmZ?wbh9u|({UH^75LRnn#Zw-Mo3Tu(0s!*RLNxe*E#{$G30aK7amv z{`~n>t5)sXx9`}oW81cE+puB7zkmPUy?giP&!6n<>^E=TG&D3Y;08J%DUe+btiB6W z`&1--GFB~WT&fYEb9}wV-HN(yj!S^0ZTwev{w>APvV gObiDc^(G%}a!NUyx1PK0RKtc9w>g`;6j>Oo0S|Or$p8QV literal 0 HcmV?d00001 diff --git a/wp-admin/images/media-button-music.gif b/wp-admin/images/media-button-music.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e65b248a540ea7efa2490dada00c0d5f0b6767 GIT binary patch literal 206 zcmV;<05ShZNk%w1VGIBa0Q3L=m6et1>gt!5m#?p{v9YoH`}_3t^w-zdd3kxXw6ueR zgUZUvfq{Xir>C>Cv(nPiSy@@XzrU)gs)>n-`T6V!YA^8LW0018VEC2ui01N;O06+yx;3s|sc6f=@Z2`?j{W z@$vEO?Cj^~=l}ozA^8LW0018VEC2ui01W^Q06+zG;3tY2F^+;mXhY#@Ug9KQz-UDU zR7DnHpF;ycFkp@b0-#g)P&NUG1>k^eHWbmru;_Tb8G+>_X>1}JOyqPDL)ag|1@QoI y0FTRs_VGv-9)W=a4g((w7Yhd*jEn;l7YZL7ViOsc8V&|cBM1l#0G<~kApkooM|BAR 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..405083b0b36e3c399aaa2865b0cb4023f4843310 GIT binary patch literal 133 zcmV;00DAvNNk%v~VGRHb0P_F+9=xcX!p*)qH$>;NalT&(D5- zers!Mr>CcYfPnx1{{R30EC2ui01W^P06+vfu*pehaSmXeacNkHF$^Y&A!#;b>yphP n&-4tUj_RDa&ZEAAVn{414gyR-$#e(?1cV_$r5X@~K?DFhH;_3a 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..7131763a5932500d0d8ff100554cdaca45809c42 GIT binary patch literal 12672 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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..99b382369ff8f15046cdb9c025f8c8f75c6a60c5 GIT binary patch literal 12453 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 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..fe281087de4f54d09286042dc6476d58ecb1ea61 GIT binary patch literal 5086 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 AHUIzs literal 0 HcmV?d00001 diff --git a/wp-admin/images/menu.png b/wp-admin/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d15af82be524a392fa4a0104693f87315d859d GIT binary patch literal 5039 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 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..d77f91c06464aa2c880cd4f3a25e89385b6d1802 GIT binary patch literal 2450 zcmXX|2{e>#8y*ZHYWgaB_)*qkNFoZ^mm$lPl&oXlRU(W*H7aI?)MT5i*#=`I+eDV3 zep_TGB7}*-jAb&ux4-{6@44UWT+jX7%XOdUoCj?SGZo|);|GC2g63vMcEBG30&%GE zasdd<fxIng64#rl#pv z_pCo|z$w69!;yg$Fl-gz8Ei3 zAaWXEm>Q3qdWRRa^R!LV$Hm48`9Kihvv^h!S=#3Gst$-2SKSd`-5p;=MUuKvmDE2C zg2CqKGQh_;vA{j2QQh^vcF+?mEGe}3BT%_pc7v7=(k=T>aG(;vc26x@VQZ{0)qfhn z)KvCPStOT|`=?8~M}bgAsC?tZeAk?Ykp-GHmIN>(3#$MFlyN04{Vy;{%nL7Wv&Ypw zsHOrX@k4~Q{1UVS9=T^V{-iTj);6KH?=I09h}m~&THf*B zSJ#1z0I3_1q8<2{I<*MHkbuGfg%N<-{};Iik=^J?XaaPQ3&bw`+B8ngs~?>GD~Pa? z)>%hC=>2GxM`;{0DQF)jPXP+uHs#z4V>7F|oAf^M*3Jx-sy51>4v^`Exz7 z<`e7pKG4_Pug#{f-fhgM{|s!THtNfp7Vpqn^3V z#Gc9Gt}&p&g|)5K&F!+!6IH!aF+{3g{)Y_8m-OZVVCZz_E~#%iuBywwpyfeDXL4Q7 zw-vfwdTsW{uXTen@RxPtOKT$wzkqQ&X1q(O@7rgyZPUmtqx1Dcvyo*Tk8A%6j5VmR z)d~MTvvufRX?p>66p)=dx%k;c?GZ4Tw-I(Qdr-ytIVlN^lk_tp6}o%88}SOVO8Sh= z_GA1>6s}E8;`>uar)-xW%hT4_@Yhft_JWnZd9Rl8sX19BEv!RfC4O0BpTX2%2}&tx z8Cs}mb#_*rO{QL9d)|4Jdt;c6_w`uM!;2vC7q17OMi%Sg3x5a@+Pclng$1m7NM%V^ zuLoxg*sheOXkan}ceh&6$P6TMAnrxG?lt5gd_11XaBXL9s;plaR&D@p6gS@7$iU%7 z8|~Ho8^^sRs7F1Ou0pPnhxKe7CY`~i**^XiH~niX?vCg+(59o;_H|?G4?9UFViLg~ zBL9&~1QrOjdYU+{Gfr8HuAe+@A;pTL^!?ai#k}9v+F<82f>BG?Vpw}S5d&>5Gl3u< z)eYF0r97$m-!CtW6FE;??#1pPxM(Ejni7`i2hkIY;*>FZu z5g~R0L^q=5QKe$!KE13n(Xo{=D&0K|1>Y*dn?QcYmT5Oh-c zpDK5b;%5`$%s%Rrf*Y*;EiE?=y7d{mFB;N-Y6|HL$oI-Fo{~;Ic{uDwHKBs}eaz3m zqvNj7vs-Fgb2fFU$*eDbF_t($@}rFm1Ho8P%~cbx2NKTcK9F5D!D0NVJ4>nfsm6dsJW$W?0i(bcN z^7;^<7yCkPWc9apIh>KUP*_~IstLZ}LugY4jv%k8N8@(TyVXr;p`2z{C!sXw%g;#}wm zIQzD|>vLI)sz4sYu+Z7CNe(&8_k4-&d15)FKM8$4GXr+($>CXk@d*z`!uLZD63iTR z7X?H>m6356t@SU-FUsJRcy+H&ufLYTiIL-11nbZn|4cjQsA1@dtxh?=n!w~c*a3LB zbLLnl==Mt-A7S+iw8aIEc(;FbB6w7kF!EMn2`lr3yadGz;ctIhWja@>*dKDq!>r8P zI>gXoj?=Syy!3L*u$Bs)i_2=z%Okg_?ULiEVxyN7imscPscsz~IbduN&xfziJl-*B zhkVXYg=9g0({b!=nOx0Bj@i)ysv+XX;!X&*UG~>?la7<$>0Bz83G3>Y*PgR^Ulzu) zZx0#XIsD{lhf_WpU+%`K?nI2xg=T4*WOz4{I_7v&p>7W;1(X1RR?&Q+Eh#OYedjih z9iIVqcKDSjyfmzt)je5%XZ&RTXnLElXl2Ew3;brV7CA6ie zQCt)czb10{qgaDItf=;0REu32{1wjcLXG7aD>z33D^K)L(rzp&7X33Sd`2Lv@1{SB zJzr=gIva0dStqo2eDtBCc8Q|lIC&_olA=lTwAi*Lg1nW@EGv}eEXwU}1!=m>YPlVM s8hA0cnD#Ap|HmR%cyWP1=Eg81qM7lJ@aQF*8>5J4YmtG;FwmwdTh;{ZkN zgzH4m&hppO8cyu}GLD>@LdT=xbb#fNm# zK~wI*gWuc#SO?+(KiK(apr503^2gkRn|sMY&MUlh4Vged+$l_n`{>p8z3dmV}t;aDfvQR?F0V7X@(hQm>$+n2eQ}%*~|{M5cIiiviTtG3UY&-st8Ouz}bqx*^ilv zkI1IXlJjMb)W|%!O0JhWsgvvFDw!uWGDpsrS=G9z0v~sO$ODz$#*l<0-v3{e1#Um1PIq|u@f z<6PqfW5gIWY~K(MtfZGL8!>i?@zRTANV5tf-~r)g0D3VJVkG+jXvSFY0S(WPCc}#u zFN?AFHL{#yCB}UoaE|eUF=mV!e=^P$<10q1F=g}_zbMQoKL>uC*w!pOW0KtAlg2Y)%yv#X6 z5JZB!&LJ{o&N>ggR#BD%3|ExfLxy9n-k{rSA1lO=@&0LS))DpYe87M!8=D}_^fACd z0T^b`RsQSYO$He(#4tkAmE+#Q5J{4ZfMdyfpN~b+D6)IpJ6-?OfgYb zQ+eQ}^10+C2aro-t}K)rWRct|cgS6GhukWQw3*ohSy#G016RoF+z$9GVgU_RvW;-5j9{$^m<6r;Qd`*##x>h$hDX1H_3F z&ky0o(}hlm&UO_A*~MyxNbqkG zZcZBxP*9D&UH@25>~?^f3fa_kdU#J(Gef%db@~zgHv|zmN6wQua+!QtE|rVq3o=K( zB$vyj@_9K|KC7#BQ3a+0`br(q>7rdCtt0wM7tpmjd4O!uPj!|9=%lW7fJl@aZq;ow#t^b~$OFO^^zny)e{zr`L}_L_TiMEX+Wf#2C+X$`pSn58Q~{Xe9k#HAZM5+o zQFibq?=V>avc!m!@O~qPh;f>10hnMX+iB;0POz7^-9@rkSr{V2IFpRK(u}g1rzRV| z>H;}BXl55ji80Ou+I2Tbg>|r8cSEIQt;BKXfg&{&2@ynQ$pvz;Tp_m$AhW7y#Fh`RX&4xqOB+(i~qFLz?2zU~8xETZBg9Kc3pR772jP-2lkxb-;B4%A-| zbxE;Bo(0a3;tV6G7^1E%wul9Mz!8p;L!CubO|eDPvE!VeofC|q5(p(0QTM9chfFZa z7SxjnB^E){Qq`_T)sXs~`m{SypXH;onF#a-b_I3@-VdaHnUb`mZy)@5cc3lsZeU;F zWFQf!zV=n10$}E^^UY0W+Dw@dbAB1XTvVTYn>d5CQlB*Emvm^(uTSlvg#ZCEv|w&5 z1tMG6#`3s%BRtL!W~LNKucML1!Nw(KT?4(C88N-!5M;%eML#_>#+JvovmG;1^nBy} zRxS=iY2;P5Q=c+xeG^+T>bMVK@gy7gP10P1xD$JeH?VNsxfNq(#*CN?5Jb%R^{Fm) z(@4MTZoIE(CCx|+hglwP9PA;A#fmZi(wQP=dXxsty2d4qiAJ8s%#`H9%%o`m%o~@- zTlhO>q!ifLLWTg3)5SsRQ)X=`P+OmDWsEUe-HB1Obb^=*%-4T5ymai2wt36sTXK`! jDA&qDnJYCiM=tyi*Y&K|2F|4n00000NkvXXu0mjf)jA24 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..f5653407321f2b8a3aca0d260e1aa7470d56a54f GIT binary patch literal 5111 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 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..51edc79a820f50c4fe836c3be22a53e8ea366449 GIT binary patch literal 233 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 Q{Z3{xg2nZ3Ku*p78>bi5j{pDw literal 0 HcmV?d00001 diff --git a/wp-admin/images/spinner.gif b/wp-admin/images/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..209d10b6bb1a443fa7488d5238b32b93a2bd8b8d GIT binary patch literal 4162 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 LsoI7F?dpF4ttiU7 literal 0 HcmV?d00001 diff --git a/wp-admin/images/stars-2x.png b/wp-admin/images/stars-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..15aa9debfdf568eda42fcbb0e2c70c680b4b020e GIT binary patch literal 1257 zcmV=P)7t~6(Y2Y=kfwmVZ$Q7I`Q?|9n*`!t0J*88 zenlnkG2|`)p~KjCUGv%WCz|)~M0SECKLUalApRwg{VS+HQOWxivgd)D2f)yKF{)O5 ziDv&SAoK~ay8kwbZ$P7bMIWMt@OI>;9mtFWEBh)D*Ck&!wcD(%XyKNXKuz)ik~vFK zZv%nONO+$9{~iq0RJ265&Rg`ui%h+|N8XU5dv6#T^&{rg8CC! z)t{s3Uxx_bhPgQc`#}8&dbL|j=`$VzSb9Y{lurz3zv@$`y@(6~*IsNG$`v?UQ=XDP zTL=k(4}q(u`boG!d7jqR(S*l==y$;Ub9F;Gf;}x3{mG8lDBydhZYW34)mqW`NiUYW zflE8;Cp-kobG1%1J!wGf1Tbf8jQQQ5ym0G8<7eJM^haR!sm2j`$v;f35skWC2o3@> zPu|HwC+M@=%%Sc&j3=)K_c${RXvCfo$Da+GsQ?Nbv5ZABw)JHjJ?|5MPbz)hI%)fs*M z9x+J(iyxHoq8^L3qTyjLf%0p;U&gsT#7a5;q;{f-^9I}+&Ja!QdMLl2$Y>`TIaM)& z%4Lrk5&Pw}_K#$3(f_?@WNh<;q%GPO)mn7h!ysxRK$!I|>LO64Q?H^%0y2KntEiJe zcIgNbQ!lXWF1?8wcqEJK8Az+&vgoMZMC}B!iv!q*VnIkU&+0{V3riLAF>vIToh&+} z7tuZfnFSl}h;>Oms@os5Xa~!zXP0nyWUqh5q7JP@jl}zP&_f`7`7o+Qv5;g@a84a` zG$M*dD5PdkD>94y+^!Ki8WE+DI(T0S$$xOakXFC1r!SVYG%}(Vmd*JGp>@#IVM(Ww z#bjeyDLA5?KUrTlnh9y;Yq_LN^(T{jznPiufs&w|m0Yr4%SWhLww-HcG>0^O z*7K;wFFXw;L5q<^uWK#Z%R42dK{v^=MlD6paZOdBcJ^u|x|M)H?BJCK-6V^i(@M09 z3;(@hJ?E!C5~@b!F=eY3qAo)0gsKZ>=E2WxK8@B2x>;`5rMBoM7AUTTD@G`DwXf>F zGBNeMC`nbfeY_D-Thv4#aq*>Ek3z;ybd=k>_u9oPd z1ft{HxMSuJ(dda)NZ~HLYKiV8AY*{%l|r82J+2Ic8lo&~=MGh37ct5UN{Q&d=ZrL2 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..ed5efcdc000195ceb5f2860e7c211972468e251b GIT binary patch literal 5395 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 Xx8)O1RUP(k;sL0sXhFV%t-}8Y-l_Fu literal 0 HcmV?d00001 diff --git a/wp-admin/images/wheel.png b/wp-admin/images/wheel.png new file mode 100644 index 0000000000000000000000000000000000000000..9b9fdf4a37ade27ecdc9d7536f40e2b292855a5f GIT binary patch literal 6047 zcmbt&X*iT^*#B*2WH6Yq8{5oS8cTMPr3RyH$*!Url6`+<3E2jdE!k3$U6!&}h%CcX zqU<3&mTW~#Lbm4qPygfn@_v5rd)Bnyk2N<^WX%KYK-iJNm2eA^M z`Co*Hm?WqM@(Ig}f*?N!9twW@42Xg3AjFVE1O$O+0O(!9^?n3fJI>UABF>X0XhIbfnDIwPhjZ)@BqPX07M9bz;$5hcN+-6K|}`t{@Mm? z7=>g3^&kL%{{UbU0KNvYK;Qv*46H{oB!ek{LFWvBX+Sp!ID@tf3j$dJ0eT;B2Np@9-2RIpf`GNgU!`}Au?B*nATY#GIKi2}P77ZKc$T5G02B~x z0DuvY@Hbr^SOdXtf42oI0ProNZU%;tVFWP7^9}?VZTJ2EVu5pvj|2i5){LyDfC&gV zfWXL2weyT$A|=Sm+#2AgUZ9Pv({~S77H&J%RA6Ro%^&8oJV=6md^e#L->%T;C*oY} z)=bb)m6b-_VdM0SrbnVUMb!~e@nRY>P3DrBS4)d+LV7~9=3?jYUj3F^;WiJub*(fe zKBS*s@6CAgFg&X%ggpAMeL?xq(9~4xZj;H1+3eKTY~M}KZ-tHPJq`|m-@m;6y6&Z# zIrAR{ZU z7umn@RO+JU2m3`6Fhl9^Z!ojAbaoLAVV<_QUO8?AR#~b?TJi+f6wwsjaP)L;HH=GK zRR!~8A3WiM6YVGfR}WU63}g1wxen3~E=sCuE6T~qC6>0e<epLR2;fYK?c(jc@)XX_o!%Lp7M@+2{Ha_sc-LN(P*?7Kii;En49qg2Cn87D8a5UpP+n&?1mjO&1;tbhK9vR zY$_JwGVF(SdnEYw^f6HDnMhJCRJ<%Pj}R!`N)Q-5-rU?Q+QcfEHll;Lt_5?oB^=4K zHwZkEnrQV1;-Y?5>M9HV(G+022ulmysaUgddHZhds>A8iK_#gK!{+dL#nC<6Z$)Bd z7vz6wTRb}OQ9F;KJ2ljrUi(jMbIv{~ETV;y!Cgx5?Lmr3-|td3`8Pg0mAiI9z3n8W&A`Ez!!|!3<6M&zK2hz6Yzh+-ug6vOo>-DYu(Y$yr@uUp*;P_i z%{+WT$r&4^pb02yjgyt>A1;)a=zL^Cl^&{M;g+Ru)hdOD$m5e{%5#;ny1XG8bY0_; zSa`^_nyo9lT7m*nGKG}xtWP}o5~ynU&D`=nhn2RC0m_j^eU_1k+>Z*U6)EHI*J{tQ<8e-)_5*(>KCH3oB{(? z)CH#S5@X3Y3$9sDY=T?{y%hJl32vUDYm}vQP^H97ale~SAs877Pkv8o3;CAU#wD+> z-gXzpk(ntH;JHbbeyt~9`5^mX^U{s0u&pebiUm`jBZ@pUW-~!X?aq(islX}z<2!A4 zwbZrGF~NR-Rz+LPW4-9gGe3TK)p%v5R>+2lm6Y!O-`jjso>-DP_O})vq{tr)b5ejC z)|KDG)-1b~f9JzfuAgdv*YYm>coJerG`V{9@zoi)b93Iq5$*mNRg%z-WczZ$>8;>< zW#k-bzME23S7OolHz%-|%E*V+Apz{k?!`5%>H#ezG2g8cw>+3{sCBkZaiL+)OCA|T zJ)3}+{{PN)D@xk-(d%#7nZ`QfdzLf8j+Pc|P@ztt$s8Sy#tokvK7Y=!y8=7!sE|8& z2|3tCTz}3i`7C34^|M`Sr~R|A#}c}iK1&94j*Z#)s0ciR=+z;AnUhQx+?|r7?q$D! z?z>!%I$)<+F81m>0k9aOP$}H47caz!eX$Yc;Z?Nk>i9|l#d7Xz_ZC-HKD%0XA*I-N zrVcCh?b#KLxFah2+s0Cmt@kpRkJg!D>r6>48IzLgjqdT@vD|j@L_vKtW73E3A3T|q zbRy@KM||l%Y3#~;mRlpeH{le8`_M>%$o-_$wUNz)l-aBzS@2%MxO^1p7;zJMC|FeM zx91`2NE30v>L<)3-1cdzu#A% zr@0n2l$cHH9teYS*5}%~r)!d${DPW1bK+}!-J{_qg-JQiKRK!`az@_;iujsToHE4; zZvR(lH~3%x-#7Y!7Vn!rd~FDAvUIw%^0|qFp}0}gOxj0FVDFYzH1_?A-fE=}@RE`u zuT!1`irqHe8XP^5-^AhJkxMpYHTD;k3q>8)Kwozl(HJWkEaG%NQ1%*U=m z5-JdtG4Cph5f!hi`8D6NI4WGLNBm^~o{Emf%#q0UR_tE;x zW;Q76YnRn6sM5=m8(u{1ojda?&t);)hu7pRnc~!z-kF4FxkPuM((S%be52)!al&T$IhHL+lDNFf0%EMMKM7ggD9gZl7kA8km;)3cmMieRJ0u z{#AkZ(cX`O?a5StQo!^E$(D*Vob32fkG38 z0!!s#vfTm8=h*4TQwNzB&WV-BhC0fsl??oJjFLV`_V?xrAj<~vNq2iyjENfQMS)zQ zqKhi^%~qP{WiGcL-k0QuX^vgiOK@<)bR!<1Z__cTo1%*pJ&~WM(pC?h)squKMboh# z05&L7lE3hp(rz4^k=XCw)av!&n9vA7hC)?0=~_^97fDk(Vb?jk0=FT*vzWTC6>4_> zoj;cCg!>{CzKAX({obTX!WRRL5@tAbt%CU~;2LJ1LfqBiolt>A7!N!?NaVKe_@{jB zkS$l_=z{a)Eq`W0sR5CKZLYa=gIkPhPZ@=(1lYdwSXF&-r7`o?YX#yUUjQQL z{#_;^bZv?euVZavknXuN9kMub6-j?*<3x?Fy)@F z6KY1Z&XwyA@LZ_ya5ki|XTI}qpGa$KzB`KV7Tu^G{-tyDJL-I_i1`Tx1N<@EuE#r} zku$EXnO_Z!y%?(SqALc6r7JQE5^0aN6n! z`uU9xdh`O2lA6oJ8}X*BoACZ+xglA2|6b-!lK4{o`aMa6cJM}S{(?oFSC$yQWeS0P z=AmIAbBItt+C)q#9JYYE|w48`sO^s(yhp%6A~YWMh#dg z3t{)zImL9EiDy!@c9Kd|nqzC@^G@>UB^OeO0^MGkn@SNZ9F9ecsv=rJ6xC>|^M>Iq zLVQ)M?<)e$V}!b-E^@T_DZe0Tobm|5c8#$OW!{i11aYn_<~WDGFxZzKHO9pINu>gZDEjx_2CSgG zMc6!}QA6BVFz5Yxmeb@DPiTIb+x$*J%oVKz32mR9ns!oqWMbotm#Q6UAt zA3k!+sOWRanf1fzx`;fzbgpAd^=8vvKJL!G&gH1^uR{WJaId+TOEgMiEf+hNZ)^wM z)vwu={IX+uN>AK%U+4IkK$StnFx5Pf7pK=Zsv=v@_Gm&bIBh-P*w|?MTK%q%{3-6| z{{B8~A9E6?6uK=P6zMPKq1gusS66uPmQCCiwEEp2w~N2vIPoE^(ceQ>|e2#|DjKSYXZpE=W#u1Rp-)`KDdZNioD?!~S%SSM+M_k>=65k?E2 zEn8-#BOh7E8skC@6wgLIybqVnHo-}XrDQ^-A!n827S4JX_PD{J(a(FR!z}9n`5zKu zTJ>A2do;#Iw$dV$k}67~KvCV>3a2FGI>X8mi@1!SG4p~6As*7!o%mO;URhyjfZ7ti zhqa`RPolUsOOn|EU%U8cD=xc#8PB{GU-HGzim!&mel80ayGKe{4pd==30eP{ZZOJ| z!*G*w79%&~Tvv?*nMLrXkz5bvVK7`r_Tb4T`W>T{&}Meq63gl--uflIfwy~D&(%OS zw*D>lCfl$-6ih+LR&Cdvy1*LJ3F?+8yR}~WZ!_z{NKAb2o4P-9@s760rC+A5b2`Ky z`bC9>O2-|&H@XCx5=+Cf&Fk3!{pzQpj?+n_1k~k#0QI9VYY0MO3jX{~O zx+y<&j3Zz02#E?gJ?sTPbtW`C{I(RypYJn|>lIUVso2PjYw5(cXK>5ajlCSgMhoV| z%}Zx8pCZ*aRN0k&m9!HD&lw8xOZ(CSx9vKHjwwx?H=gq6Fj~T(6*{7R2TmONYulUsI)9SuKiK zvQrjyjV5dXR`^0zGVZorjXFw0UleiojPMF&o9&?v!xyvDg=owv`+|pbf4P* zc=Qx~r;nEp3rU>E`Lgzyq5z_aG~Sv$Wnp_;Mf*@*$RM+Edb$_)%YUs#y)^U;Bp!d{ z*-Sq0x#PL?>>0$&`zxIHKa+u;*1(@ak?W$8J)J1hO8I%Mmqkp`63Fv}^2*IhVh9pR z4h{H<7K9P^VJfeWO&vIW+yep^88-+NeYhBm4WTUdW^!xlK_4IG~dsH%U0NoyCZJ+Gs;7R+GF%l9$7$e55FN`a z9VXQ}5xgcZ1k0!T=2>aicE*~Xac;hmVu}gZ%prRFU4o6d>>9N{N>@oCW X)9&Ogyvk+9EhAuTXilurC&m6he)eAo literal 0 HcmV?d00001 diff --git a/wp-admin/images/wordpress-logo-white.svg b/wp-admin/images/wordpress-logo-white.svg new file mode 100644 index 0000000..682e80b --- /dev/null +++ b/wp-admin/images/wordpress-logo-white.svg @@ -0,0 +1 @@ + \ No newline at end of file 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..392e82ff71b8c22a401d7c6b85943c0adfe4a98a GIT binary patch literal 9133 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 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..3a72ee1a232fa93ffe65b1e68a2b95e35adb0604 GIT binary patch literal 825 zcmdVX=}(ez0KoAdJX~^w8k(77Ihj}CT+2uyBi?$}(o7Q2aYb)0XQeN05 zCG)Bf!7_PhS!zhW2@pfr#NoWffpcygvWXlIDbV~g`u+!>eaksz`2}^EfB^ykXti2z zXXnh!42q&YsWj~M`UVD!Mq@A-4DaqnA`z?A8dR%Moh}-QEH5vcOeUR9=X5$94u^ku zcy@Mne|6PtHve5&@hcS3gM+Zg69@#nU0uGx!M)zz{k65Nt*ycMizSW9qG;X(h zeSIC(YVCIW#>Pg-Yz~=BE|<$@v!QxDYA}S1#;K{P>FH^oOy(7f0}~VBot?$S#ehn+ z*VD5nkr)gHzu&Ld>z9_6qR}Y$pGytlFaW^d^daK#2~3RgU_PImPEUx7OQ5Hd1s#GT zEGi=}k3nS}5yb)tz(OJzBK89!6N6xIcsZV+#1Qxt3FY&UR0SvnaRn9*Gc2t zlJDHKo76s=0~A(aE#vcf7+p3L45_~q(*f?=diOun9RSypK0 z=;g)lim^ z-I{kF;kJ0FEP}d-Tv8%+X7NeoZ)=<8ekq{#YjVaITB)hVr?5xLn}L?lTElq40~a%6 GLE%4BQA4r- literal 0 HcmV?d00001 diff --git a/wp-admin/images/xit.gif b/wp-admin/images/xit.gif new file mode 100644 index 0000000000000000000000000000000000000000..d288954d9fc2fd93eb25e6bb09a2d654b40c873e GIT binary patch literal 181 zcmZ?wbhEHb6k*_E_{_lYY4YUH^X7fqzWv9E6F)Cs{&nNV|NsAAzI^%Y*|P@^9$dS2 z?Zk-_hYlSA3NnC!;!hSv1_oXR9S{#>h678|hOLXQ1-YM6auR5rW{@(|gL%O^=gkv3 z5*3~Zt!VLCaq!?71Lns83=(AxG7ArrT_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:') . '

      ' . + '

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

      ' . + '

      ' . __('Support Forums') . '

      ' +); + +if ( current_user_can( 'install_plugins' ) ) { + // List of popular importer plugins from the WordPress.org API. + $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' ); +wp_enqueue_script( 'updates' ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +$parent_file = 'tools.php'; +?> + +
      +

      + +
      +

      ' . esc_html( $_GET['invalid'] ) . '' ); + ?>

      +
      + +

      + + $pop_data ) { + if ( isset( $importers[ $pop_importer ] ) ) + continue; + if ( isset( $importers[ $pop_data['importer-id'] ] ) ) + continue; + + // Fill the array of registered (already installed) importers with data of the popular importers from the WordPress.org API. + $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 ) { + $plugin_slug = $action = ''; + $is_plugin_installed = false; + + if ( isset( $data['install'] ) ) { + $plugin_slug = $data['install']; + + if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) { + // Looks like an importer is installed, but not active. + $plugins = get_plugins( '/' . $plugin_slug ); + if ( ! empty( $plugins ) ) { + $keys = array_keys( $plugins ); + $plugin_file = $plugin_slug . '/' . $keys[0]; + $url = wp_nonce_url( add_query_arg( array( + 'action' => 'activate', + 'plugin' => $plugin_file, + 'from' => 'import', + ), admin_url( 'plugins.php' ) ), 'activate-plugin_' . $plugin_file ); + $action = sprintf( + '%s', + esc_url( $url ), + /* translators: %s: Importer name */ + esc_attr( sprintf( __( 'Run %s' ), $data[0] ) ), + __( 'Run Importer' ) + ); + + $is_plugin_installed = true; + } + } + + if ( empty( $action ) ) { + if ( is_main_site() ) { + $url = wp_nonce_url( add_query_arg( array( + 'action' => 'install-plugin', + 'plugin' => $plugin_slug, + 'from' => 'import', + ), self_admin_url( 'update.php' ) ), 'install-plugin_' . $plugin_slug ); + $action = sprintf( + '%5$s', + esc_url( $url ), + esc_attr( $plugin_slug ), + esc_attr( $data[0] ), + /* translators: %s: Importer name */ + esc_attr( sprintf( __( 'Install %s' ), $data[0] ) ), + __( 'Install Now' ) + ); + } else { + $action = sprintf( + /* translators: URL to wp-admin/import.php */ + __( 'This importer is not installed. Please install importers from the main site.' ), + get_admin_url( get_current_network_id(), 'import.php' ) + ); + } + } + } else { + $url = add_query_arg( array( + 'import' => $importer_id, + ), self_admin_url( 'admin.php' ) ); + $action = sprintf( + '%3$s', + esc_url( $url ), + /* translators: %s: Importer name */ + esc_attr( sprintf( __( 'Run %s' ), $data[0] ) ), + __( 'Run Importer' ) + ); + + $is_plugin_installed = true; + } + + if ( ! $is_plugin_installed && is_main_site() ) { + $url = add_query_arg( array( + 'tab' => 'plugin-information', + 'plugin' => $plugin_slug, + 'from' => 'import', + 'TB_iframe' => 'true', + 'width' => 600, + 'height' => 550, + ), network_admin_url( 'plugin-install.php' ) ); + $action .= sprintf( + ' | %3$s', + esc_url( $url ), + /* translators: %s: Importer name */ + esc_attr( sprintf( __( 'More information about %s' ), $data[0] ) ), + __( 'Details' ) + ); + } + + echo " + + + + "; + } + ?> +
      + {$data[0]} + {$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'] ); + + /** + * Filters 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 ); + } + + /** + * Filters 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. +// + +/** + * Ajax handler for fetching a list table. + * + * @since 3.1.0 + */ +function wp_ajax_fetch_list() { + $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 ); +} + +/** + * Ajax handler for tag search. + * + * @since 3.1.0 + */ +function wp_ajax_ajax_tag_search() { + if ( ! isset( $_GET['tax'] ) ) { + wp_die( 0 ); + } + + $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 ); + } + + $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 ); + + /** + * Filters the minimum number of characters required to fire a tag search via Ajax. + * + * @since 4.0.0 + * + * @param int $characters The minimum number of characters required. Default 2. + * @param WP_Taxonomy $tax The taxonomy object. + * @param string $s The search term. + */ + $term_search_min_chars = (int) apply_filters( 'term_search_min_chars', 2, $tax, $s ); + + /* + * Require $term_search_min_chars chars for matching (default: 2) + * ensure it's a non-negative, non-zero integer. + */ + if ( ( $term_search_min_chars == 0 ) || ( strlen( $s ) < $term_search_min_chars ) ){ + wp_die(); + } + + $results = get_terms( $taxonomy, array( 'name__like' => $s, 'fields' => 'names', 'hide_empty' => false ) ); + + echo join( $results, "\n" ); + wp_die(); +} + +/** + * Ajax handler for compression testing. + * + * @since 3.1.0 + */ +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('Content-Type: application/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'] ) { + check_ajax_referer( 'update_can_compress_scripts' ); + update_site_option('can_compress_scripts', 0); + } elseif ( 'yes' == $_GET['test'] ) { + check_ajax_referer( 'update_can_compress_scripts' ); + update_site_option('can_compress_scripts', 1); + } + } + + wp_die( 0 ); +} + +/** + * Ajax handler for image editor previews. + * + * @since 3.1.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(); +} + +/** + * Ajax handler for oEmbed caching. + * + * @since 3.1.0 + * + * @global WP_Embed $wp_embed + */ +function wp_ajax_oembed_cache() { + $GLOBALS['wp_embed']->cache_oembed( $_GET['post'] ); + wp_die( 0 ); +} + +/** + * Ajax handler for user autocomplete. + * + * @since 3.4.0 + */ +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 ( ! current_user_can( 'manage_network_users' ) && ! 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( _x( '%1$s (%2$s)', 'user autocomplete result' ), $user->user_login, $user->user_email ), + 'value' => $user->$field, + ); + } + + wp_die( wp_json_encode( $return ) ); +} + +/** + * Handles AJAX requests for community events + * + * @since 4.8.0 + */ +function wp_ajax_get_community_events() { + require_once( ABSPATH . 'wp-admin/includes/class-wp-community-events.php' ); + + check_ajax_referer( 'community_events' ); + + $search = isset( $_POST['location'] ) ? wp_unslash( $_POST['location'] ) : ''; + $timezone = isset( $_POST['timezone'] ) ? wp_unslash( $_POST['timezone'] ) : ''; + $user_id = get_current_user_id(); + $saved_location = get_user_option( 'community-events-location', $user_id ); + $events_client = new WP_Community_Events( $user_id, $saved_location ); + $events = $events_client->get_events( $search, $timezone ); + $ip_changed = false; + + if ( is_wp_error( $events ) ) { + wp_send_json_error( array( + 'error' => $events->get_error_message(), + ) ); + } else { + if ( empty( $saved_location['ip'] ) && ! empty( $events['location']['ip'] ) ) { + $ip_changed = true; + } elseif ( isset( $saved_location['ip'] ) && ! empty( $events['location']['ip'] ) && $saved_location['ip'] !== $events['location']['ip'] ) { + $ip_changed = true; + } + + /* + * The location should only be updated when it changes. The API doesn't always return + * a full location; sometimes it's missing the description or country. The location + * that was saved during the initial request is known to be good and complete, though. + * It should be left in tact until the user explicitly changes it (either by manually + * searching for a new location, or by changing their IP address). + * + * If the location were updated with an incomplete response from the API, then it could + * break assumptions that the UI makes (e.g., that there will always be a description + * that corresponds to a latitude/longitude location). + * + * The location is stored network-wide, so that the user doesn't have to set it on each site. + */ + if ( $ip_changed || $search ) { + update_user_option( $user_id, 'community-events-location', $events['location'], true ); + } + + wp_send_json_success( $events ); + } +} + +/** + * Ajax handler for dashboard widgets. + * + * @since 3.4.0 + */ +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(); +} + +/** + * Ajax handler for Customizer preview logged-in status. + * + * @since 3.4.0 + */ +function wp_ajax_logged_in() { + wp_die( 1 ); +} + +// +// Ajax helpers. +// + +/** + * 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. + * + * @access private + * @since 2.7.0 + * + * @param int $comment_id + * @param int $delta + */ +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 ) { + $time = time(); + $comment = get_comment( $comment_id ); + $comment_status = ''; + $comment_link = ''; + + if ( $comment ) { + $comment_status = $comment->comment_approved; + } + + if ( 1 === (int) $comment_status ) { + $comment_link = get_comment_link( $comment ); + } + + $counts = wp_count_comments(); + + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + // Here for completeness - not used. + 'id' => $comment_id, + 'supplemental' => array( + 'status' => $comment_status, + 'postId' => $comment ? $comment->comment_post_ID : '', + 'time' => $time, + 'in_moderation' => $counts->moderated, + 'i18n_comments_text' => sprintf( + _n( '%s Comment', '%s Comments', $counts->approved ), + number_format_i18n( $counts->approved ) + ), + 'i18n_moderation_text' => sprintf( + _nx( '%s in moderation', '%s in moderation', $counts->moderated, 'comments' ), + number_format_i18n( $counts->moderated ) + ), + 'comment_link' => $comment_link, + ) + ) ); + $x->send(); + } + + $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; + // What type of comment count are we looking for? + $status = 'all'; + $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']; + if ( ! empty( $query_vars['comment_type'] ) ) + $type = $query_vars['comment_type']; + } + + if ( empty( $type ) ) { + // Only use the comment count if not filtering by a comment_type. + $comment_count = wp_count_comments($post_id); + + // We're looking for a known type of comment count. + if ( isset( $comment_count->$status ) ) { + $total = $comment_count->$status; + } + } + // Else use the decremented value from above. + } + + // The time since the last comment count. + $time = time(); + $comment = get_comment( $comment_id ); + + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + // Here for completeness - not used. + 'id' => $comment_id, + 'supplemental' => array( + 'status' => $comment ? $comment->comment_approved : '', + 'postId' => $comment ? $comment->comment_post_ID : '', + 'total_items_i18n' => sprintf( _n( '%s 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. +// + +/** + * Ajax handler for adding a hierarchical term. + * + * @access private + * @since 3.1.0 + */ +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; + + $cat_id = wp_insert_term( $cat_name, $taxonomy->name, array( 'parent' => $parent ) ); + if ( ! $cat_id || is_wp_error( $cat_id ) ) { + continue; + } else { + $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_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_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_clean(); + + $add['supplemental'] = array( 'newcat_parent' => $sup ); + + $x = new WP_Ajax_Response( $add ); + $x->send(); +} + +/** + * Ajax handler for deleting a comment. + * + * @since 3.1.0 + */ +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 ); + + $delta = -1; + if ( isset($_POST['trash']) && 1 == $_POST['trash'] ) { + if ( 'trash' == $status ) + wp_die( time() ); + $r = wp_trash_comment( $comment ); + } elseif ( isset($_POST['untrash']) && 1 == $_POST['untrash'] ) { + if ( 'trash' != $status ) + wp_die( time() ); + $r = wp_untrash_comment( $comment ); + 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 ); + } elseif ( isset($_POST['unspam']) && 1 == $_POST['unspam'] ) { + if ( 'spam' != $status ) + wp_die( time() ); + $r = wp_unspam_comment( $comment ); + 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 ); + } 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 ); +} + +/** + * Ajax handler for deleting a tag. + * + * @since 3.1.0 + */ +function wp_ajax_delete_tag() { + $tag_id = (int) $_POST['tag_ID']; + check_ajax_referer( "delete-tag_$tag_id" ); + + if ( ! current_user_can( 'delete_term', $tag_id ) ) { + wp_die( -1 ); + } + + $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; + $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 ); +} + +/** + * Ajax handler for deleting a link. + * + * @since 3.1.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 ); +} + +/** + * Ajax handler for deleting meta. + * + * @since 3.1.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 ); +} + +/** + * Ajax handler for deleting a post. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +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 ); +} + +/** + * Ajax handler for sending a post to the trash. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +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 ); +} + +/** + * Ajax handler to restore a post from the trash. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +function wp_ajax_untrash_post( $action ) { + if ( empty( $action ) ) + $action = 'untrash-post'; + wp_ajax_trash_post( $action ); +} + +/** + * @since 3.1.0 + * + * @param string $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 ); +} + +/** + * Ajax handler to dim a comment. + * + * @since 3.1.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 ); + 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, 'approve', true ); + } else { + $result = wp_set_comment_status( $comment, '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 ); +} + +/** + * Ajax handler for adding a link category. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +function wp_ajax_add_link_category( $action ) { + if ( empty( $action ) ) + $action = 'add-link-category'; + check_ajax_referer( $action ); + $tax = get_taxonomy( 'link_category' ); + if ( ! current_user_can( $tax->cap->manage_terms ) ) { + 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; + + $cat_id = wp_insert_term( $cat_name, 'link_category' ); + if ( ! $cat_id || is_wp_error( $cat_id ) ) { + continue; + } else { + $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(); +} + +/** + * Ajax handler to add a tag. + * + * @since 3.1.0 + */ +function wp_ajax_add_tag() { + check_ajax_referer( 'add-tag', '_wpnonce_add-tag' ); + $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, '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(); +} + +/** + * Ajax handler for getting a tagcloud. + * + * @since 3.1.0 + */ +function wp_ajax_get_tagcloud() { + if ( ! isset( $_POST['tax'] ) ) { + wp_die( 0 ); + } + + $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 ); + } + + $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, 'format' => 'list' ) ); + + if ( empty($return) ) + wp_die( 0 ); + + echo $return; + + wp_die(); +} + +/** + * Ajax handler for getting comments. + * + * @since 3.1.0 + * + * @global int $post_id + * + * @param string $action Action to perform. + */ +function wp_ajax_get_comments( $action ) { + global $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 ) && 0 === $comment->comment_approved ) + continue; + get_comment( $comment ); + $wp_list_table->single_row( $comment ); + } + $comment_list_item = ob_get_clean(); + + $x->add( array( + 'what' => 'comments', + 'data' => $comment_list_item + ) ); + $x->send(); +} + +/** + * Ajax handler for replying to a comment. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +function wp_ajax_replyto_comment( $action ) { + 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'] ); + $comment_type = isset( $_POST['comment_type'] ) ? trim( $_POST['comment_type'] ) : ''; + 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 ( ! current_user_can( 'edit_comment', $parent->comment_ID ) ) { + wp_die( -1 ); + } + + if ( wp_set_comment_status( $parent, 'approve' ) ) + $comment_auto_approved = true; + } + } + + $comment_id = wp_new_comment( $commentdata ); + + if ( is_wp_error( $comment_id ) ) { + wp_die( $comment_id->get_error_message() ); + } + + $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 + ); + + $counts = wp_count_comments(); + $response['supplemental'] = array( + 'in_moderation' => $counts->moderated, + 'i18n_comments_text' => sprintf( + _n( '%s Comment', '%s Comments', $counts->approved ), + number_format_i18n( $counts->approved ) + ), + 'i18n_moderation_text' => sprintf( + _nx( '%s in moderation', '%s in moderation', $counts->moderated, 'comments' ), + number_format_i18n( $counts->moderated ) + ) + ); + + if ( $comment_auto_approved ) { + $response['supplemental']['parent_approved'] = $parent->comment_ID; + $response['supplemental']['parent_post_id'] = $parent->comment_post_ID; + } + + $x = new WP_Ajax_Response(); + $x->add( $response ); + $x->send(); +} + +/** + * Ajax handler for editing a comment. + * + * @since 3.1.0 + */ +function wp_ajax_edit_comment() { + 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'; + $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(); +} + +/** + * Ajax handler for adding a menu item. + * + * @since 3.1.0 + */ +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 'post_type_archive' : + $_object = get_post_type_object( $menu_item_data['menu-item-object'] ); + 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 = reset( $_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; + } + } + + /** This filter is documented in wp-admin/includes/nav-menu.php */ + $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(); +} + +/** + * Ajax handler for adding meta. + * + * @since 3.1.0 + */ +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 the post is an autodraft, save the post as a draft and then attempt to save the meta. + if ( $post->post_status == 'auto-draft' ) { + $post_data = array(); + $post_data['action'] = 'draft'; // Warning fix + $post_data['post_ID'] = $pid; + $post_data['post_type'] = $post->post_type; + $post_data['post_status'] = 'draft'; + $now = current_time('timestamp', 1); + /* translators: 1: Post creation date, 2: Post creation time */ + $post_data['post_title'] = sprintf( __( 'Draft created on %1$s at %2$s' ), date( __( 'F j, Y' ), $now ), date( __( 'g:i a' ), $now ) ); + + $pid = edit_post( $post_data ); + if ( $pid ) { + if ( is_wp_error( $pid ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'data' => $pid + ) ); + $x->send(); + } + + if ( !$mid = add_meta( $pid ) ) + wp_die( __( 'Please provide a custom field value.' ) ); + } else { + wp_die( 0 ); + } + } elseif ( ! $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(); +} + +/** + * Ajax handler for adding a user. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +function wp_ajax_add_user( $action ) { + 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( + /* translators: %s: the new user */ + __( 'User %s added' ), + '' . $user_object->user_login . '' + ), + 'role' => $role, + ) + ) ); + $x->send(); +} + +/** + * Ajax handler for closed post boxes. + * + * @since 3.1.0 + */ +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 ); +} + +/** + * Ajax handler for hidden columns. + * + * @since 3.1.0 + */ +function wp_ajax_hidden_columns() { + check_ajax_referer( 'screen-options-nonce', 'screenoptionnonce' ); + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + $hidden = ! empty( $_POST['hidden'] ) ? explode( ',', $_POST['hidden'] ) : array(); + update_user_option( $user->ID, "manage{$page}columnshidden", $hidden, true ); + + wp_die( 1 ); +} + +/** + * Ajax handler for updating whether to display the welcome panel. + * + * @since 3.1.0 + */ +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 ); +} + +/** + * Ajax handler for retrieving menu meta boxes. + * + * @since 3.1.0 + */ +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'] ]; + + /** This filter is documented in wp-admin/includes/nav-menu.php */ + $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 wp_json_encode(array( + 'replace-id' => $type . '-' . $item->name, + 'markup' => $markup, + )); + } + + wp_die(); +} + +/** + * Ajax handler for internal linking. + * + * @since 3.1.0 + */ +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'] ); + } + + if ( isset( $_POST['term'] ) ) { + $args['s'] = wp_unslash( $_POST['term'] ); + } + + $args['pagenum'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1; + + if ( ! class_exists( '_WP_Editors', false ) ) { + require( ABSPATH . WPINC . '/class-wp-editor.php' ); + } + + $results = _WP_Editors::wp_link_query( $args ); + + if ( ! isset( $results ) ) + wp_die( 0 ); + + echo wp_json_encode( $results ); + echo "\n"; + + wp_die(); +} + +/** + * Ajax handler for menu locations save. + * + * @since 3.1.0 + */ +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 ); +} + +/** + * Ajax handler for saving the meta box order. + * + * @since 3.1.0 + */ +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 ); +} + +/** + * Ajax handler for menu quick searching. + * + * @since 3.1.0 + */ +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(); +} + +/** + * Ajax handler to retrieve a permalink. + * + * @since 3.1.0 + */ +function wp_ajax_get_permalink() { + check_ajax_referer( 'getpermalink', 'getpermalinknonce' ); + $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; + wp_die( get_preview_post_link( $post_id ) ); +} + +/** + * Ajax handler to retrieve a sample permalink. + * + * @since 3.1.0 + */ +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 ) ); +} + +/** + * Ajax handler for Quick Edit saving a post from a list table. + * + * @since 3.1.0 + * + * @global string $mode List table view mode. + */ +function wp_ajax_inline_save() { + global $mode; + + 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( __( 'Sorry, you are not allowed to edit this page.' ) ); + } else { + if ( ! current_user_can( 'edit_post', $post_ID ) ) + wp_die( __( 'Sorry, 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 ); + + // Since it's coming from the database. + $post = wp_slash($post); + + $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['visibility'] = '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'; + + // Exclude terms from taxonomies that are not supposed to appear in Quick Edit. + if ( ! empty( $data['tax_input'] ) ) { + foreach ( $data['tax_input'] as $taxonomy => $terms ) { + $tax_object = get_taxonomy( $taxonomy ); + /** This filter is documented in wp-admin/includes/class-wp-posts-list-table.php */ + if ( ! apply_filters( 'quick_edit_show_taxonomy', $tax_object->show_in_quick_edit, $taxonomy, $post['post_type'] ) ) { + unset( $data['tax_input'][ $taxonomy ] ); + } + } + } + + // 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'] === 'excerpt' ? 'excerpt' : 'list'; + + $level = 0; + if ( is_post_type_hierarchical( $wp_list_table->screen->post_type ) ) { + $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(); +} + +/** + * Ajax handler for quick edit saving for a term. + * + * @since 3.1.0 + */ +function wp_ajax_inline_save_tax() { + check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' ); + + $taxonomy = sanitize_key( $_POST['taxonomy'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + + if ( ! isset( $_POST['tax_ID'] ) || ! ( $id = (int) $_POST['tax_ID'] ) ) { + wp_die( -1 ); + } + + if ( ! current_user_can( 'edit_term', $id ) ) { + wp_die( -1 ); + } + + $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-' . $taxonomy ) ); + + $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(); +} + +/** + * Ajax handler for querying posts for the Find Posts modal. + * + * @see window.findPosts + * + * @since 3.1.0 + */ +function wp_ajax_find_posts() { + check_ajax_referer( 'find-posts' ); + + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + unset( $post_types['attachment'] ); + + $s = wp_unslash( $_POST['ps'] ); + $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_send_json_error( __( '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 https://secure.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 ); +} + +/** + * Ajax handler for saving the widgets order. + * + * @since 3.1.0 + */ +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 ( wp_unslash( $_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 ); +} + +/** + * Ajax handler for saving a widget. + * + * @since 3.1.0 + * + * @global array $wp_registered_widgets + * @global array $wp_registered_widget_controls + * @global array $wp_registered_widget_updates + */ +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 = wp_unslash( $_POST['id_base'] ); + $widget_id = wp_unslash( $_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'); + + /** This action is documented in wp-admin/widgets.php */ + do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base ); + + } elseif ( $settings && preg_match( '/__i__|%i%/', key($settings) ) ) { + if ( !$multi_number ) + wp_die( $error ); + + $_POST[ 'widget-' . $id_base ] = array( $multi_number => reset( $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(); +} + +/** + * Ajax handler for saving a widget. + * + * @since 3.9.0 + * + * @global WP_Customize_Manager $wp_customize + */ +function wp_ajax_update_widget() { + global $wp_customize; + $wp_customize->widgets->wp_ajax_update_widget(); +} + +/** + * Ajax handler for removing inactive widgets. + * + * @since 4.4.0 + */ +function wp_ajax_delete_inactive_widgets() { + check_ajax_referer( 'remove-inactive-widgets', 'removeinactivewidgets' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) { + wp_die( -1 ); + } + + unset( $_POST['removeinactivewidgets'], $_POST['action'] ); + /** This action is documented in wp-admin/includes/ajax-actions.php */ + do_action( 'load-widgets.php' ); + /** This action is documented in wp-admin/includes/ajax-actions.php */ + do_action( 'widgets.php' ); + /** This action is documented in wp-admin/widgets.php */ + do_action( 'sidebar_admin_setup' ); + + $sidebars_widgets = wp_get_sidebars_widgets(); + + foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) { + $pieces = explode( '-', $widget_id ); + $multi_number = array_pop( $pieces ); + $id_base = implode( '-', $pieces ); + $widget = get_option( 'widget_' . $id_base ); + unset( $widget[$multi_number] ); + update_option( 'widget_' . $id_base, $widget ); + unset( $sidebars_widgets['wp_inactive_widgets'][$key] ); + } + + wp_set_sidebars_widgets( $sidebars_widgets ); + + wp_die(); +} + +/** + * Ajax handler for uploading attachments + * + * @since 3.3.0 + */ +function wp_ajax_upload_attachment() { + check_ajax_referer( 'media-form' ); + /* + * This function does not use wp_send_json_success() / wp_send_json_error() + * as the html4 Plupload handler requires a text/html content-type for older IE. + * See https://core.trac.wordpress.org/ticket/31037 + */ + + if ( ! current_user_can( 'upload_files' ) ) { + echo wp_json_encode( array( + 'success' => false, + 'data' => array( + 'message' => __( 'Sorry, you are not allowed to upload files.' ), + 'filename' => $_FILES['async-upload']['name'], + ) + ) ); + + wp_die(); + } + + if ( isset( $_REQUEST['post_id'] ) ) { + $post_id = $_REQUEST['post_id']; + if ( ! current_user_can( 'edit_post', $post_id ) ) { + echo wp_json_encode( array( + 'success' => false, + 'data' => array( + 'message' => __( 'Sorry, you are not allowed to attach files to this post.' ), + 'filename' => $_FILES['async-upload']['name'], + ) + ) ); + + 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'] ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) { + echo wp_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 wp_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 wp_json_encode( array( + 'success' => true, + 'data' => $attachment, + ) ); + + wp_die(); +} + +/** + * Ajax handler for image editing. + * + * @since 3.1.0 + */ +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 = wp_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(); +} + +/** + * Ajax handler for setting the featured image. + * + * @since 3.1.0 + */ +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 ); +} + +/** + * Ajax handler for retrieving HTML for the featured image. + * + * @since 4.6.0 + */ +function wp_ajax_get_post_thumbnail_html() { + $post_ID = intval( $_POST['post_id'] ); + + check_ajax_referer( "update-post_$post_ID" ); + + if ( ! current_user_can( 'edit_post', $post_ID ) ) { + wp_die( -1 ); + } + + $thumbnail_id = intval( $_POST['thumbnail_id'] ); + + // For backward compatibility, -1 refers to no featured image. + if ( -1 === $thumbnail_id ) { + $thumbnail_id = null; + } + + $return = _wp_post_thumbnail_html( $thumbnail_id, $post_ID ); + wp_send_json_success( $return ); +} + +/** + * Ajax handler for setting the featured image for an attachment. + * + * @since 4.0.0 + * + * @see set_post_thumbnail() + */ +function wp_ajax_set_attachment_thumbnail() { + if ( empty( $_POST['urls'] ) || ! is_array( $_POST['urls'] ) ) { + wp_send_json_error(); + } + + $thumbnail_id = (int) $_POST['thumbnail_id']; + if ( empty( $thumbnail_id ) ) { + wp_send_json_error(); + } + + $post_ids = array(); + // For each URL, try to find its corresponding post ID. + foreach ( $_POST['urls'] as $url ) { + $post_id = attachment_url_to_postid( $url ); + if ( ! empty( $post_id ) ) { + $post_ids[] = $post_id; + } + } + + if ( empty( $post_ids ) ) { + wp_send_json_error(); + } + + $success = 0; + // For each found attachment, set its thumbnail. + foreach ( $post_ids as $post_id ) { + if ( ! current_user_can( 'edit_post', $post_id ) ) { + continue; + } + + if ( set_post_thumbnail( $post_id, $thumbnail_id ) ) { + $success++; + } + } + + if ( 0 === $success ) { + wp_send_json_error(); + } else { + wp_send_json_success(); + } + + wp_send_json_error(); +} + +/** + * Ajax handler for date formatting. + * + * @since 3.1.0 + */ +function wp_ajax_date_format() { + wp_die( date_i18n( sanitize_option( 'date_format', wp_unslash( $_POST['date'] ) ) ) ); +} + +/** + * Ajax handler for time formatting. + * + * @since 3.1.0 + */ +function wp_ajax_time_format() { + wp_die( date_i18n( sanitize_option( 'time_format', wp_unslash( $_POST['date'] ) ) ) ); +} + +/** + * Ajax handler for saving posts from the fullscreen editor. + * + * @since 3.1.0 + * @deprecated 4.3.0 + */ +function wp_ajax_wp_fullscreen_save_post() { + $post_id = isset( $_POST['post_ID'] ) ? (int) $_POST['post_ID'] : 0; + + $post = null; + + if ( $post_id ) + $post = get_post( $post_id ); + + 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( __( 'F j, Y' ), $post->post_modified ); + $last_time = mysql2date( __( 'g:i a' ), $post->post_modified ); + } else { + $last_date = date_i18n( __( 'F j, Y' ) ); + $last_time = date_i18n( __( 'g:i a' ) ); + } + + 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 ) ); +} + +/** + * Ajax handler for removing a post lock. + * + * @since 3.1.0 + */ +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 ); + + /** + * Filters 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 ); +} + +/** + * Ajax handler for dismissing a WordPress pointer. + * + * @since 3.1.0 + */ +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 ); +} + +/** + * Ajax handler for getting 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 ); +} + +/** + * Ajax handler for querying 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(); + $keys = array( + 's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type', + 'post_parent', 'author', 'post__in', 'post__not_in', 'year', 'monthnum' + ); + foreach ( get_taxonomies_for_attachments( 'objects' ) as $t ) { + if ( $t->query_var && isset( $query[ $t->query_var ] ) ) { + $keys[] = $t->query_var; + } + } + + $query = array_intersect_key( $query, array_flip( $keys ) ); + $query['post_type'] = 'attachment'; + if ( MEDIA_TRASH + && ! empty( $_REQUEST['query']['post_status'] ) + && 'trash' === $_REQUEST['query']['post_status'] ) { + $query['post_status'] = 'trash'; + } else { + $query['post_status'] = 'inherit'; + } + + if ( current_user_can( get_post_type_object( 'attachment' )->cap->read_private_posts ) ) + $query['post_status'] .= ',private'; + + // Filter query clauses to include filenames. + if ( isset( $query['s'] ) ) { + add_filter( 'posts_clauses', '_filter_query_attachment_filenames' ); + } + + /** + * Filters 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 ); +} + +/** + * Ajax handler for updating 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['parent'] ) ) + $post['post_parent'] = $changes['parent']; + + 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 ( MEDIA_TRASH && isset( $changes['status'] ) ) + $post['post_status'] = $changes['status']; + + 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 ) ); + } + } + + if ( wp_attachment_is( 'audio', $post['ID'] ) ) { + $changed = false; + $id3data = wp_get_attachment_metadata( $post['ID'] ); + if ( ! is_array( $id3data ) ) { + $changed = true; + $id3data = array(); + } + foreach ( wp_get_attachment_id3_keys( (object) $post, 'edit' ) as $key => $label ) { + if ( isset( $changes[ $key ] ) ) { + $changed = true; + $id3data[ $key ] = sanitize_text_field( wp_unslash( $changes[ $key ] ) ); + } + } + + if ( $changed ) { + wp_update_attachment_metadata( $id, $id3data ); + } + } + + if ( MEDIA_TRASH && isset( $changes['status'] ) && 'trash' === $changes['status'] ) { + wp_delete_post( $id ); + } else { + wp_update_post( $post ); + } + + wp_send_json_success(); +} + +/** + * Ajax handler for saving backward 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 ); +} + +/** + * Ajax handler for saving the attachment order. + * + * @since 3.5.0 + */ +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(); + + 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(); +} + +/** + * Ajax handler for sending an attachment to the editor. + * + * Generates the HTML to send an attachment to the editor. + * Backward compatible with the {@see '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 ) ); + } + } + + $url = empty( $attachment['url'] ) ? '' : $attachment['url']; + $rel = ( strpos( $url, 'attachment_id') || get_attachment_link( $id ) == $url ); + + 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'] : ''; + + // No whitespace-only captions. + $caption = isset( $attachment['post_excerpt'] ) ? $attachment['post_excerpt'] : ''; + if ( '' === trim( $caption ) ) { + $caption = ''; + } + + $title = ''; // We no longer insert title tags into tags, as they are redundant. + $html = get_image_send_to_editor( $id, $caption, $title, $align, $url, $rel, $size, $alt ); + } elseif ( wp_attachment_is( 'video', $post ) || wp_attachment_is( 'audio', $post ) ) { + $html = stripslashes_deep( $_POST['html'] ); + } else { + $html = isset( $attachment['post_title'] ) ? $attachment['post_title'] : ''; + $rel = $rel ? ' rel="attachment wp-att-' . $id . '"' : ''; // Hard-coded string, $id is already sanitized + + if ( ! empty( $url ) ) { + $html = '' . $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 ); +} + +/** + * Ajax handler for sending a link to the editor. + * + * Generates the HTML to send a non-image embed link to the editor. + * + * Backward compatible with the following filters: + * - file_send_to_editor_url + * - audio_send_to_editor_url + * - video_send_to_editor_url + * + * @since 3.5.0 + * + * @global WP_Post $post + * @global WP_Embed $wp_embed + */ +function wp_ajax_send_link_to_editor() { + global $post, $wp_embed; + + 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 ( ! $link_text = trim( wp_unslash( $_POST['link_text'] ) ) ) + $link_text = wp_basename( $src ); + + $post = get_post( isset( $_POST['post_id'] ) ? $_POST['post_id'] : 0 ); + + // Ping WordPress for an embed. + $check_embed = $wp_embed->run_shortcode( '[embed]'. $src .'[/embed]' ); + + // Fallback that WordPress creates when no oEmbed was found. + $fallback = $wp_embed->maybe_make_link( $src ); + + if ( $check_embed !== $fallback ) { + // TinyMCE view for [embed] will parse this + $html = '[embed]' . $src . '[/embed]'; + } elseif ( $link_text ) { + $html = '' . $link_text . ''; + } else { + $html = ''; + } + + // 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, $link_text ); + + wp_send_json_success( $html ); +} + +/** + * Ajax handler for the Heartbeat API. + * + * Runs when the user is logged in. + * + * @since 3.6.0 + */ +function wp_ajax_heartbeat() { + if ( empty( $_POST['_nonce'] ) ) { + wp_send_json_error(); + } + + $response = $data = array(); + $nonce_state = wp_verify_nonce( $_POST['_nonce'], 'heartbeat-nonce' ); + + // 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'] ); + } + + if ( 1 !== $nonce_state ) { + $response = apply_filters( 'wp_refresh_nonces', $response, $data, $screen_id ); + + if ( false === $nonce_state ) { + // User is logged in but nonces have expired. + $response['nonces_expired'] = true; + wp_send_json( $response ); + } + } + + if ( ! empty( $data ) ) { + /** + * Filters the Heartbeat response received. + * + * @since 3.6.0 + * + * @param array $response The Heartbeat response. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_received', $response, $data, $screen_id ); + } + + /** + * Filters the Heartbeat response sent. + * + * @since 3.6.0 + * + * @param array $response The Heartbeat response. + * @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 $response The Heartbeat response. + * @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 ); +} + +/** + * Ajax handler for getting revision diffs. + * + * @since 3.6.0 + */ +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( 'edit_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 ); +} + +/** + * Ajax handler for auto-saving the selected color scheme for + * a user's own profile. + * + * @since 3.8.0 + * + * @global array $_wp_admin_css_colors + */ +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(); + } + + $previous_color_scheme = get_user_meta( get_current_user_id(), 'admin_color', true ); + update_user_meta( get_current_user_id(), 'admin_color', $color_scheme ); + + wp_send_json_success( array( + 'previousScheme' => 'admin-color-' . $previous_color_scheme, + 'currentScheme' => 'admin-color-' . $color_scheme + ) ); +} + +/** + * Ajax handler for getting themes from themes_api(). + * + * @since 3.9.0 + * + * @global array $themes_allowedtags + * @global array $theme_field_defaults + */ +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 + ) ); + + if ( isset( $args['browse'] ) && 'favorites' === $args['browse'] && ! isset( $args['user'] ) ) { + $user = get_user_option( 'wporg_favorites' ); + if ( $user ) { + $args['user'] = $user; + } + } + + $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 ); + + if ( current_user_can( 'switch_themes' ) ) { + if ( is_multisite() ) { + $theme->activate_url = add_query_arg( array( + 'action' => 'enable', + '_wpnonce' => wp_create_nonce( 'enable-theme_' . $theme->slug ), + 'theme' => $theme->slug, + ), network_admin_url( 'themes.php' ) ); + } else { + $theme->activate_url = add_query_arg( array( + 'action' => 'activate', + '_wpnonce' => wp_create_nonce( 'switch-theme_' . $theme->slug ), + 'stylesheet' => $theme->slug, + ), admin_url( 'themes.php' ) ); + } + } + + if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $theme->customize_url = add_query_arg( array( + 'return' => urlencode( network_admin_url( 'theme-install.php', 'relative' ) ), + ), wp_customize_url( $theme->slug ) ); + } + + $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->stars = wp_star_rating( array( 'rating' => $theme->rating, 'type' => 'percent', 'number' => $theme->num_ratings, 'echo' => false ) ); + $theme->num_ratings = number_format_i18n( $theme->num_ratings ); + $theme->preview_url = set_url_scheme( $theme->preview_url ); + } + + wp_send_json_success( $api ); +} + +/** + * Apply [embed] Ajax handlers to a string. + * + * @since 4.0.0 + * + * @global WP_Post $post Global $post. + * @global WP_Embed $wp_embed Embed API instance. + * @global WP_Scripts $wp_scripts + * @global int $content_width + */ +function wp_ajax_parse_embed() { + global $post, $wp_embed, $content_width; + + if ( empty( $_POST['shortcode'] ) ) { + wp_send_json_error(); + } + $post_id = isset( $_POST[ 'post_ID' ] ) ? intval( $_POST[ 'post_ID' ] ) : 0; + if ( $post_id > 0 ) { + $post = get_post( $post_id ); + if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) { + wp_send_json_error(); + } + setup_postdata( $post ); + } elseif ( ! current_user_can( 'edit_posts' ) ) { // See WP_oEmbed_Controller::get_proxy_item_permissions_check(). + wp_send_json_error(); + } + + $shortcode = wp_unslash( $_POST['shortcode'] ); + + preg_match( '/' . get_shortcode_regex() . '/s', $shortcode, $matches ); + $atts = shortcode_parse_atts( $matches[3] ); + if ( ! empty( $matches[5] ) ) { + $url = $matches[5]; + } elseif ( ! empty( $atts['src'] ) ) { + $url = $atts['src']; + } else { + $url = ''; + } + + $parsed = false; + $wp_embed->return_false_on_fail = true; + + if ( 0 === $post_id ) { + /* + * Refresh oEmbeds cached outside of posts that are past their TTL. + * Posts are excluded because they have separate logic for refreshing + * their post meta caches. See WP_Embed::cache_oembed(). + */ + $wp_embed->usecache = false; + } + + if ( is_ssl() && 0 === strpos( $url, 'http://' ) ) { + // Admin is ssl and the user pasted non-ssl URL. + // Check if the provider supports ssl embeds and use that for the preview. + $ssl_shortcode = preg_replace( '%^(\\[embed[^\\]]*\\])http://%i', '$1https://', $shortcode ); + $parsed = $wp_embed->run_shortcode( $ssl_shortcode ); + + if ( ! $parsed ) { + $no_ssl_support = true; + } + } + + // Set $content_width so any embeds fit in the destination iframe. + if ( isset( $_POST['maxwidth'] ) && is_numeric( $_POST['maxwidth'] ) && $_POST['maxwidth'] > 0 ) { + if ( ! isset( $content_width ) ) { + $content_width = intval( $_POST['maxwidth'] ); + } else { + $content_width = min( $content_width, intval( $_POST['maxwidth'] ) ); + } + } + + if ( $url && ! $parsed ) { + $parsed = $wp_embed->run_shortcode( $shortcode ); + } + + if ( ! $parsed ) { + wp_send_json_error( array( + 'type' => 'not-embeddable', + 'message' => sprintf( __( '%s failed to embed.' ), '' . esc_html( $url ) . '' ), + ) ); + } + + if ( has_shortcode( $parsed, 'audio' ) || has_shortcode( $parsed, 'video' ) ) { + $styles = ''; + $mce_styles = wpview_media_sandbox_styles(); + foreach ( $mce_styles as $style ) { + $styles .= sprintf( '', $style ); + } + + $html = do_shortcode( $parsed ); + + global $wp_scripts; + if ( ! empty( $wp_scripts ) ) { + $wp_scripts->done = array(); + } + ob_start(); + wp_print_scripts( array( 'mediaelement-vimeo', 'wp-mediaelement' ) ); + $scripts = ob_get_clean(); + + $parsed = $styles . $html . $scripts; + } + + if ( ! empty( $no_ssl_support ) || ( is_ssl() && ( preg_match( '%<(iframe|script|embed) [^>]*src="http://%', $parsed ) || + preg_match( '%]*href="http://%', $parsed ) ) ) ) { + // Admin is ssl and the embed is not. Iframes, scripts, and other "active content" will be blocked. + wp_send_json_error( array( + 'type' => 'not-ssl', + 'message' => __( 'This preview is unavailable in the editor.' ), + ) ); + } + + $return = array( + 'body' => $parsed, + 'attr' => $wp_embed->last_attr + ); + + if ( strpos( $parsed, 'class="wp-embedded-content' ) ) { + if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) { + $script_src = includes_url( 'js/wp-embed.js' ); + } else { + $script_src = includes_url( 'js/wp-embed.min.js' ); + } + + $return['head'] = ''; + $return['sandbox'] = true; + } + + wp_send_json_success( $return ); +} + +/** + * @since 4.0.0 + * + * @global WP_Post $post + * @global WP_Scripts $wp_scripts + */ +function wp_ajax_parse_media_shortcode() { + global $post, $wp_scripts; + + if ( empty( $_POST['shortcode'] ) ) { + wp_send_json_error(); + } + + $shortcode = wp_unslash( $_POST['shortcode'] ); + + if ( ! empty( $_POST['post_ID'] ) ) { + $post = get_post( (int) $_POST['post_ID'] ); + } + + // the embed shortcode requires a post + if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) { + if ( 'embed' === $shortcode ) { + wp_send_json_error(); + } + } else { + setup_postdata( $post ); + } + + $parsed = do_shortcode( $shortcode ); + + if ( empty( $parsed ) ) { + wp_send_json_error( array( + 'type' => 'no-items', + 'message' => __( 'No items found.' ), + ) ); + } + + $head = ''; + $styles = wpview_media_sandbox_styles(); + + foreach ( $styles as $style ) { + $head .= ''; + } + + if ( ! empty( $wp_scripts ) ) { + $wp_scripts->done = array(); + } + + ob_start(); + + echo $parsed; + + if ( 'playlist' === $_REQUEST['type'] ) { + wp_underscore_playlist_templates(); + + wp_print_scripts( 'wp-playlist' ); + } else { + wp_print_scripts( array( 'mediaelement-vimeo', 'wp-mediaelement' ) ); + } + + wp_send_json_success( array( + 'head' => $head, + 'body' => ob_get_clean() + ) ); +} + +/** + * Ajax handler for destroying multiple open sessions for a user. + * + * @since 4.1.0 + */ +function wp_ajax_destroy_sessions() { + $user = get_userdata( (int) $_POST['user_id'] ); + if ( $user ) { + if ( ! current_user_can( 'edit_user', $user->ID ) ) { + $user = false; + } elseif ( ! wp_verify_nonce( $_POST['nonce'], 'update-user_' . $user->ID ) ) { + $user = false; + } + } + + if ( ! $user ) { + wp_send_json_error( array( + 'message' => __( 'Could not log out user sessions. Please try again.' ), + ) ); + } + + $sessions = WP_Session_Tokens::get_instance( $user->ID ); + + if ( $user->ID === get_current_user_id() ) { + $sessions->destroy_others( wp_get_session_token() ); + $message = __( 'You are now logged out everywhere else.' ); + } else { + $sessions->destroy_all(); + /* translators: %s: User's display name. */ + $message = sprintf( __( '%s has been logged out.' ), $user->display_name ); + } + + wp_send_json_success( array( 'message' => $message ) ); +} + +/** + * Ajax handler for cropping an image. + * + * @since 4.3.0 + */ +function wp_ajax_crop_image() { + $attachment_id = absint( $_POST['id'] ); + + check_ajax_referer( 'image_editor-' . $attachment_id, 'nonce' ); + if ( empty( $attachment_id ) || ! current_user_can( 'edit_post', $attachment_id ) ) { + wp_send_json_error(); + } + + $context = str_replace( '_', '-', $_POST['context'] ); + $data = array_map( 'absint', $_POST['cropDetails'] ); + $cropped = wp_crop_image( $attachment_id, $data['x1'], $data['y1'], $data['width'], $data['height'], $data['dst_width'], $data['dst_height'] ); + + if ( ! $cropped || is_wp_error( $cropped ) ) { + wp_send_json_error( array( 'message' => __( 'Image could not be processed.' ) ) ); + } + + switch ( $context ) { + case 'site-icon': + require_once ABSPATH . '/wp-admin/includes/class-wp-site-icon.php'; + $wp_site_icon = new WP_Site_Icon(); + + // Skip creating a new attachment if the attachment is a Site Icon. + if ( get_post_meta( $attachment_id, '_wp_attachment_context', true ) == $context ) { + + // Delete the temporary cropped file, we don't need it. + wp_delete_file( $cropped ); + + // Additional sizes in wp_prepare_attachment_for_js(). + add_filter( 'image_size_names_choose', array( $wp_site_icon, 'additional_sizes' ) ); + break; + } + + /** This filter is documented in wp-admin/custom-header.php */ + $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication. + $object = $wp_site_icon->create_attachment_object( $cropped, $attachment_id ); + unset( $object['ID'] ); + + // Update the attachment. + add_filter( 'intermediate_image_sizes_advanced', array( $wp_site_icon, 'additional_sizes' ) ); + $attachment_id = $wp_site_icon->insert_attachment( $object, $cropped ); + remove_filter( 'intermediate_image_sizes_advanced', array( $wp_site_icon, 'additional_sizes' ) ); + + // Additional sizes in wp_prepare_attachment_for_js(). + add_filter( 'image_size_names_choose', array( $wp_site_icon, 'additional_sizes' ) ); + break; + + default: + + /** + * Fires before a cropped image is saved. + * + * Allows to add filters to modify the way a cropped image is saved. + * + * @since 4.3.0 + * + * @param string $context The Customizer control requesting the cropped image. + * @param int $attachment_id The attachment ID of the original image. + * @param string $cropped Path to the cropped image file. + */ + do_action( 'wp_ajax_crop_image_pre_save', $context, $attachment_id, $cropped ); + + /** This filter is documented in wp-admin/custom-header.php */ + $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication. + + $parent_url = wp_get_attachment_url( $attachment_id ); + $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; + + $object = array( + 'post_title' => basename( $cropped ), + 'post_content' => $url, + 'post_mime_type' => $image_type, + 'guid' => $url, + 'context' => $context, + ); + + $attachment_id = wp_insert_attachment( $object, $cropped ); + $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped ); + + /** + * Filters the cropped image attachment metadata. + * + * @since 4.3.0 + * + * @see wp_generate_attachment_metadata() + * + * @param array $metadata Attachment metadata. + */ + $metadata = apply_filters( 'wp_ajax_cropped_attachment_metadata', $metadata ); + wp_update_attachment_metadata( $attachment_id, $metadata ); + + /** + * Filters the attachment ID for a cropped image. + * + * @since 4.3.0 + * + * @param int $attachment_id The attachment ID of the cropped image. + * @param string $context The Customizer control requesting the cropped image. + */ + $attachment_id = apply_filters( 'wp_ajax_cropped_attachment_id', $attachment_id, $context ); + } + + wp_send_json_success( wp_prepare_attachment_for_js( $attachment_id ) ); +} + +/** + * Ajax handler for generating a password. + * + * @since 4.4.0 + */ +function wp_ajax_generate_password() { + wp_send_json_success( wp_generate_password( 24 ) ); +} + +/** + * Ajax handler for saving the user's WordPress.org username. + * + * @since 4.4.0 + */ +function wp_ajax_save_wporg_username() { + if ( ! current_user_can( 'install_themes' ) && ! current_user_can( 'install_plugins' ) ) { + wp_send_json_error(); + } + + check_ajax_referer( 'save_wporg_username_' . get_current_user_id() ); + + $username = isset( $_REQUEST['username'] ) ? wp_unslash( $_REQUEST['username'] ) : false; + + if ( ! $username ) { + wp_send_json_error(); + } + + wp_send_json_success( update_user_meta( get_current_user_id(), 'wporg_favorites', $username ) ); +} + +/** + * Ajax handler for installing a theme. + * + * @since 4.6.0 + * + * @see Theme_Upgrader + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + */ +function wp_ajax_install_theme() { + check_ajax_referer( 'updates' ); + + if ( empty( $_POST['slug'] ) ) { + wp_send_json_error( array( + 'slug' => '', + 'errorCode' => 'no_theme_specified', + 'errorMessage' => __( 'No theme specified.' ), + ) ); + } + + $slug = sanitize_key( wp_unslash( $_POST['slug'] ) ); + + $status = array( + 'install' => 'theme', + 'slug' => $slug, + ); + + if ( ! current_user_can( 'install_themes' ) ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to install themes on this site.' ); + wp_send_json_error( $status ); + } + + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + include_once( ABSPATH . 'wp-admin/includes/theme.php' ); + + $api = themes_api( 'theme_information', array( + 'slug' => $slug, + 'fields' => array( 'sections' => false ), + ) ); + + if ( is_wp_error( $api ) ) { + $status['errorMessage'] = $api->get_error_message(); + wp_send_json_error( $status ); + } + + $skin = new WP_Ajax_Upgrader_Skin(); + $upgrader = new Theme_Upgrader( $skin ); + $result = $upgrader->install( $api->download_link ); + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + $status['debug'] = $skin->get_upgrade_messages(); + } + + if ( is_wp_error( $result ) ) { + $status['errorCode'] = $result->get_error_code(); + $status['errorMessage'] = $result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( is_wp_error( $skin->result ) ) { + $status['errorCode'] = $skin->result->get_error_code(); + $status['errorMessage'] = $skin->result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( $skin->get_errors()->get_error_code() ) { + $status['errorMessage'] = $skin->get_error_messages(); + wp_send_json_error( $status ); + } elseif ( is_null( $result ) ) { + global $wp_filesystem; + + $status['errorCode'] = 'unable_to_connect_to_filesystem'; + $status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + + wp_send_json_error( $status ); + } + + $status['themeName'] = wp_get_theme( $slug )->get( 'Name' ); + + if ( current_user_can( 'switch_themes' ) ) { + if ( is_multisite() ) { + $status['activateUrl'] = add_query_arg( array( + 'action' => 'enable', + '_wpnonce' => wp_create_nonce( 'enable-theme_' . $slug ), + 'theme' => $slug, + ), network_admin_url( 'themes.php' ) ); + } else { + $status['activateUrl'] = add_query_arg( array( + 'action' => 'activate', + '_wpnonce' => wp_create_nonce( 'switch-theme_' . $slug ), + 'stylesheet' => $slug, + ), admin_url( 'themes.php' ) ); + } + } + + if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $status['customizeUrl'] = add_query_arg( array( + 'return' => urlencode( network_admin_url( 'theme-install.php', 'relative' ) ), + ), wp_customize_url( $slug ) ); + } + + /* + * See WP_Theme_Install_List_Table::_get_theme_status() if we wanted to check + * on post-installation status. + */ + wp_send_json_success( $status ); +} + +/** + * Ajax handler for updating a theme. + * + * @since 4.6.0 + * + * @see Theme_Upgrader + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + */ +function wp_ajax_update_theme() { + check_ajax_referer( 'updates' ); + + if ( empty( $_POST['slug'] ) ) { + wp_send_json_error( array( + 'slug' => '', + 'errorCode' => 'no_theme_specified', + 'errorMessage' => __( 'No theme specified.' ), + ) ); + } + + $stylesheet = preg_replace( '/[^A-z0-9_\-]/', '', wp_unslash( $_POST['slug'] ) ); + $status = array( + 'update' => 'theme', + 'slug' => $stylesheet, + 'oldVersion' => '', + 'newVersion' => '', + ); + + if ( ! current_user_can( 'update_themes' ) ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to update themes for this site.' ); + wp_send_json_error( $status ); + } + + $theme = wp_get_theme( $stylesheet ); + if ( $theme->exists() ) { + $status['oldVersion'] = $theme->get( 'Version' ); + } + + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + + $current = get_site_transient( 'update_themes' ); + if ( empty( $current ) ) { + wp_update_themes(); + } + + $skin = new WP_Ajax_Upgrader_Skin(); + $upgrader = new Theme_Upgrader( $skin ); + $result = $upgrader->bulk_upgrade( array( $stylesheet ) ); + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + $status['debug'] = $skin->get_upgrade_messages(); + } + + if ( is_wp_error( $skin->result ) ) { + $status['errorCode'] = $skin->result->get_error_code(); + $status['errorMessage'] = $skin->result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( $skin->get_errors()->get_error_code() ) { + $status['errorMessage'] = $skin->get_error_messages(); + wp_send_json_error( $status ); + } elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) { + + // Theme is already at the latest version. + if ( true === $result[ $stylesheet ] ) { + $status['errorMessage'] = $upgrader->strings['up_to_date']; + wp_send_json_error( $status ); + } + + $theme = wp_get_theme( $stylesheet ); + if ( $theme->exists() ) { + $status['newVersion'] = $theme->get( 'Version' ); + } + + wp_send_json_success( $status ); + } elseif ( false === $result ) { + global $wp_filesystem; + + $status['errorCode'] = 'unable_to_connect_to_filesystem'; + $status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + + wp_send_json_error( $status ); + } + + // An unhandled error occurred. + $status['errorMessage'] = __( 'Update failed.' ); + wp_send_json_error( $status ); +} + +/** + * Ajax handler for deleting a theme. + * + * @since 4.6.0 + * + * @see delete_theme() + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + */ +function wp_ajax_delete_theme() { + check_ajax_referer( 'updates' ); + + if ( empty( $_POST['slug'] ) ) { + wp_send_json_error( array( + 'slug' => '', + 'errorCode' => 'no_theme_specified', + 'errorMessage' => __( 'No theme specified.' ), + ) ); + } + + $stylesheet = preg_replace( '/[^A-z0-9_\-]/', '', wp_unslash( $_POST['slug'] ) ); + $status = array( + 'delete' => 'theme', + 'slug' => $stylesheet, + ); + + if ( ! current_user_can( 'delete_themes' ) ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to delete themes on this site.' ); + wp_send_json_error( $status ); + } + + if ( ! wp_get_theme( $stylesheet )->exists() ) { + $status['errorMessage'] = __( 'The requested theme does not exist.' ); + wp_send_json_error( $status ); + } + + // Check filesystem credentials. `delete_theme()` will bail otherwise. + $url = wp_nonce_url( 'themes.php?action=delete&stylesheet=' . urlencode( $stylesheet ), 'delete-theme_' . $stylesheet ); + ob_start(); + $credentials = request_filesystem_credentials( $url ); + ob_end_clean(); + if ( false === $credentials || ! WP_Filesystem( $credentials ) ) { + global $wp_filesystem; + + $status['errorCode'] = 'unable_to_connect_to_filesystem'; + $status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + + wp_send_json_error( $status ); + } + + include_once( ABSPATH . 'wp-admin/includes/theme.php' ); + + $result = delete_theme( $stylesheet ); + + if ( is_wp_error( $result ) ) { + $status['errorMessage'] = $result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( false === $result ) { + $status['errorMessage'] = __( 'Theme could not be deleted.' ); + wp_send_json_error( $status ); + } + + wp_send_json_success( $status ); +} + +/** + * Ajax handler for installing a plugin. + * + * @since 4.6.0 + * + * @see Plugin_Upgrader + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + */ +function wp_ajax_install_plugin() { + check_ajax_referer( 'updates' ); + + if ( empty( $_POST['slug'] ) ) { + wp_send_json_error( array( + 'slug' => '', + 'errorCode' => 'no_plugin_specified', + 'errorMessage' => __( 'No plugin specified.' ), + ) ); + } + + $status = array( + 'install' => 'plugin', + 'slug' => sanitize_key( wp_unslash( $_POST['slug'] ) ), + ); + + if ( ! current_user_can( 'install_plugins' ) ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to install plugins on this site.' ); + wp_send_json_error( $status ); + } + + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); + + $api = plugins_api( 'plugin_information', array( + 'slug' => sanitize_key( wp_unslash( $_POST['slug'] ) ), + 'fields' => array( + 'sections' => false, + ), + ) ); + + if ( is_wp_error( $api ) ) { + $status['errorMessage'] = $api->get_error_message(); + wp_send_json_error( $status ); + } + + $status['pluginName'] = $api->name; + + $skin = new WP_Ajax_Upgrader_Skin(); + $upgrader = new Plugin_Upgrader( $skin ); + $result = $upgrader->install( $api->download_link ); + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + $status['debug'] = $skin->get_upgrade_messages(); + } + + if ( is_wp_error( $result ) ) { + $status['errorCode'] = $result->get_error_code(); + $status['errorMessage'] = $result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( is_wp_error( $skin->result ) ) { + $status['errorCode'] = $skin->result->get_error_code(); + $status['errorMessage'] = $skin->result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( $skin->get_errors()->get_error_code() ) { + $status['errorMessage'] = $skin->get_error_messages(); + wp_send_json_error( $status ); + } elseif ( is_null( $result ) ) { + global $wp_filesystem; + + $status['errorCode'] = 'unable_to_connect_to_filesystem'; + $status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + + wp_send_json_error( $status ); + } + + $install_status = install_plugin_install_status( $api ); + $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( $_POST['pagenow'] ) : ''; + + // If installation request is coming from import page, do not return network activation link. + $plugins_url = ( 'import' === $pagenow ) ? admin_url( 'plugins.php' ) : network_admin_url( 'plugins.php' ); + + if ( current_user_can( 'activate_plugin', $install_status['file'] ) && is_plugin_inactive( $install_status['file'] ) ) { + $status['activateUrl'] = add_query_arg( array( + '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $install_status['file'] ), + 'action' => 'activate', + 'plugin' => $install_status['file'], + ), $plugins_url ); + } + + if ( is_multisite() && current_user_can( 'manage_network_plugins' ) && 'import' !== $pagenow ) { + $status['activateUrl'] = add_query_arg( array( 'networkwide' => 1 ), $status['activateUrl'] ); + } + + wp_send_json_success( $status ); +} + +/** + * Ajax handler for updating a plugin. + * + * @since 4.2.0 + * + * @see Plugin_Upgrader + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + */ +function wp_ajax_update_plugin() { + check_ajax_referer( 'updates' ); + + if ( empty( $_POST['plugin'] ) || empty( $_POST['slug'] ) ) { + wp_send_json_error( array( + 'slug' => '', + 'errorCode' => 'no_plugin_specified', + 'errorMessage' => __( 'No plugin specified.' ), + ) ); + } + + $plugin = plugin_basename( sanitize_text_field( wp_unslash( $_POST['plugin'] ) ) ); + + $status = array( + 'update' => 'plugin', + 'slug' => sanitize_key( wp_unslash( $_POST['slug'] ) ), + 'oldVersion' => '', + 'newVersion' => '', + ); + + if ( ! current_user_can( 'update_plugins' ) || 0 !== validate_file( $plugin ) ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to update plugins for this site.' ); + wp_send_json_error( $status ); + } + + $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + $status['plugin'] = $plugin; + $status['pluginName'] = $plugin_data['Name']; + + if ( $plugin_data['Version'] ) { + /* translators: %s: Plugin version */ + $status['oldVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); + } + + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + + wp_update_plugins(); + + $skin = new WP_Ajax_Upgrader_Skin(); + $upgrader = new Plugin_Upgrader( $skin ); + $result = $upgrader->bulk_upgrade( array( $plugin ) ); + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + $status['debug'] = $skin->get_upgrade_messages(); + } + + if ( is_wp_error( $skin->result ) ) { + $status['errorCode'] = $skin->result->get_error_code(); + $status['errorMessage'] = $skin->result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( $skin->get_errors()->get_error_code() ) { + $status['errorMessage'] = $skin->get_error_messages(); + wp_send_json_error( $status ); + } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) { + $plugin_update_data = current( $result ); + + /* + * If the `update_plugins` site transient is empty (e.g. when you update + * two plugins in quick succession before the transient repopulates), + * this may be the return. + * + * Preferably something can be done to ensure `update_plugins` isn't empty. + * For now, surface some sort of error here. + */ + if ( true === $plugin_update_data ) { + $status['errorMessage'] = __( 'Plugin update failed.' ); + wp_send_json_error( $status ); + } + + $plugin_data = get_plugins( '/' . $result[ $plugin ]['destination_name'] ); + $plugin_data = reset( $plugin_data ); + + if ( $plugin_data['Version'] ) { + /* translators: %s: Plugin version */ + $status['newVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); + } + wp_send_json_success( $status ); + } elseif ( false === $result ) { + global $wp_filesystem; + + $status['errorCode'] = 'unable_to_connect_to_filesystem'; + $status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + + wp_send_json_error( $status ); + } + + // An unhandled error occurred. + $status['errorMessage'] = __( 'Plugin update failed.' ); + wp_send_json_error( $status ); +} + +/** + * Ajax handler for deleting a plugin. + * + * @since 4.6.0 + * + * @see delete_plugins() + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + */ +function wp_ajax_delete_plugin() { + check_ajax_referer( 'updates' ); + + if ( empty( $_POST['slug'] ) || empty( $_POST['plugin'] ) ) { + wp_send_json_error( array( + 'slug' => '', + 'errorCode' => 'no_plugin_specified', + 'errorMessage' => __( 'No plugin specified.' ), + ) ); + } + + $plugin = plugin_basename( sanitize_text_field( wp_unslash( $_POST['plugin'] ) ) ); + + $status = array( + 'delete' => 'plugin', + 'slug' => sanitize_key( wp_unslash( $_POST['slug'] ) ), + ); + + if ( ! current_user_can( 'delete_plugins' ) || 0 !== validate_file( $plugin ) ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to delete plugins for this site.' ); + wp_send_json_error( $status ); + } + + $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + $status['plugin'] = $plugin; + $status['pluginName'] = $plugin_data['Name']; + + if ( is_plugin_active( $plugin ) ) { + $status['errorMessage'] = __( 'You cannot delete a plugin while it is active on the main site.' ); + wp_send_json_error( $status ); + } + + // Check filesystem credentials. `delete_plugins()` will bail otherwise. + $url = wp_nonce_url( 'plugins.php?action=delete-selected&verify-delete=1&checked[]=' . $plugin, 'bulk-plugins' ); + ob_start(); + $credentials = request_filesystem_credentials( $url ); + ob_end_clean(); + if ( false === $credentials || ! WP_Filesystem( $credentials ) ) { + global $wp_filesystem; + + $status['errorCode'] = 'unable_to_connect_to_filesystem'; + $status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + + wp_send_json_error( $status ); + } + + $result = delete_plugins( array( $plugin ) ); + + if ( is_wp_error( $result ) ) { + $status['errorMessage'] = $result->get_error_message(); + wp_send_json_error( $status ); + } elseif ( false === $result ) { + $status['errorMessage'] = __( 'Plugin could not be deleted.' ); + wp_send_json_error( $status ); + } + + wp_send_json_success( $status ); +} + +/** + * Ajax handler for searching plugins. + * + * @since 4.6.0 + * + * @global string $s Search term. + */ +function wp_ajax_search_plugins() { + check_ajax_referer( 'updates' ); + + $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( $_POST['pagenow'] ) : ''; + if ( 'plugins-network' === $pagenow || 'plugins' === $pagenow ) { + set_current_screen( $pagenow ); + } + + /** @var WP_Plugins_List_Table $wp_list_table */ + $wp_list_table = _get_list_table( 'WP_Plugins_List_Table', array( + 'screen' => get_current_screen(), + ) ); + + $status = array(); + + if ( ! $wp_list_table->ajax_user_can() ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to manage plugins for this site.' ); + wp_send_json_error( $status ); + } + + // Set the correct requester, so pagination works. + $_SERVER['REQUEST_URI'] = add_query_arg( array_diff_key( $_POST, array( + '_ajax_nonce' => null, + 'action' => null, + ) ), network_admin_url( 'plugins.php', 'relative' ) ); + + $GLOBALS['s'] = wp_unslash( $_POST['s'] ); + + $wp_list_table->prepare_items(); + + ob_start(); + $wp_list_table->display(); + $status['count'] = count( $wp_list_table->items ); + $status['items'] = ob_get_clean(); + + wp_send_json_success( $status ); +} + +/** + * Ajax handler for searching plugins to install. + * + * @since 4.6.0 + */ +function wp_ajax_search_install_plugins() { + check_ajax_referer( 'updates' ); + + $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( $_POST['pagenow'] ) : ''; + if ( 'plugin-install-network' === $pagenow || 'plugin-install' === $pagenow ) { + set_current_screen( $pagenow ); + } + + /** @var WP_Plugin_Install_List_Table $wp_list_table */ + $wp_list_table = _get_list_table( 'WP_Plugin_Install_List_Table', array( + 'screen' => get_current_screen(), + ) ); + + $status = array(); + + if ( ! $wp_list_table->ajax_user_can() ) { + $status['errorMessage'] = __( 'Sorry, you are not allowed to manage plugins for this site.' ); + wp_send_json_error( $status ); + } + + // Set the correct requester, so pagination works. + $_SERVER['REQUEST_URI'] = add_query_arg( array_diff_key( $_POST, array( + '_ajax_nonce' => null, + 'action' => null, + ) ), network_admin_url( 'plugin-install.php', 'relative' ) ); + + $wp_list_table->prepare_items(); + + ob_start(); + $wp_list_table->display(); + $status['count'] = (int) $wp_list_table->get_pagination_arg( 'total_items' ); + $status['items'] = ob_get_clean(); + + wp_send_json_success( $status ); +} + +/** + * Ajax handler for editing a theme or plugin file. + * + * @since 4.9.0 + * @see wp_edit_theme_plugin_file() + */ +function wp_ajax_edit_theme_plugin_file() { + $r = wp_edit_theme_plugin_file( wp_unslash( $_POST ) ); // Validation of args is done in wp_edit_theme_plugin_file(). + if ( is_wp_error( $r ) ) { + wp_send_json_error( array_merge( + array( + 'code' => $r->get_error_code(), + 'message' => $r->get_error_message(), + ), + (array) $r->get_error_data() + ) ); + } else { + wp_send_json_success( array( + 'message' => __( 'File edited successfully.' ), + ) ); + } +} + +/** + * Ajax handler for exporting a user's personal data. + * + * @since 4.9.6 + */ +function wp_ajax_wp_privacy_export_personal_data() { + + if ( empty( $_POST['id'] ) ) { + wp_send_json_error( __( 'Missing request ID.' ) ); + } + $request_id = (int) $_POST['id']; + + if ( $request_id < 1 ) { + wp_send_json_error( __( 'Invalid request ID.' ) ); + } + + if ( ! current_user_can( 'export_others_personal_data' ) ) { + wp_send_json_error( __( 'Invalid request.' ) ); + } + + check_ajax_referer( 'wp-privacy-export-personal-data-' . $request_id, 'security' ); + + // Get the request data. + $request = wp_get_user_request_data( $request_id ); + + if ( ! $request || 'export_personal_data' !== $request->action_name ) { + wp_send_json_error( __( 'Invalid request type.' ) ); + } + + $email_address = $request->email; + if ( ! is_email( $email_address ) ) { + wp_send_json_error( __( 'A valid email address must be given.' ) ); + } + + if ( ! isset( $_POST['exporter'] ) ) { + wp_send_json_error( __( 'Missing exporter index.' ) ); + } + $exporter_index = (int) $_POST['exporter']; + + if ( ! isset( $_POST['page'] ) ) { + wp_send_json_error( __( 'Missing page index.' ) ); + } + $page = (int) $_POST['page']; + + $send_as_email = isset( $_POST['sendAsEmail'] ) ? ( 'true' === $_POST['sendAsEmail'] ) : false; + + /** + * Filters the array of exporter callbacks. + * + * @since 4.9.6 + * + * @param array $args { + * An array of callable exporters of personal data. Default empty array. + * + * @type array { + * Array of personal data exporters. + * + * @type string $callback Callable exporter function that accepts an + * email address and a page and returns an array + * of name => value pairs of personal data. + * @type string $exporter_friendly_name Translated user facing friendly name for the + * exporter. + * } + * } + */ + $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() ); + + if ( ! is_array( $exporters ) ) { + wp_send_json_error( __( 'An exporter has improperly used the registration filter.' ) ); + } + + // Do we have any registered exporters? + if ( 0 < count( $exporters ) ) { + if ( $exporter_index < 1 ) { + wp_send_json_error( __( 'Exporter index cannot be negative.' ) ); + } + + if ( $exporter_index > count( $exporters ) ) { + wp_send_json_error( __( 'Exporter index out of range.' ) ); + } + + if ( $page < 1 ) { + wp_send_json_error( __( 'Page index cannot be less than one.' ) ); + } + + $exporter_keys = array_keys( $exporters ); + $exporter_key = $exporter_keys[ $exporter_index - 1 ]; + $exporter = $exporters[ $exporter_key ]; + + if ( ! is_array( $exporter ) ) { + wp_send_json_error( + /* translators: %s: array index */ + sprintf( __( 'Expected an array describing the exporter at index %s.' ), $exporter_key ) + ); + } + if ( ! array_key_exists( 'exporter_friendly_name', $exporter ) ) { + wp_send_json_error( + /* translators: %s: array index */ + sprintf( __( 'Exporter array at index %s does not include a friendly name.' ), $exporter_key ) + ); + } + if ( ! array_key_exists( 'callback', $exporter ) ) { + wp_send_json_error( + /* translators: %s: exporter friendly name */ + sprintf( __( 'Exporter does not include a callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) ) + ); + } + if ( ! is_callable( $exporter['callback'] ) ) { + wp_send_json_error( + /* translators: %s: exporter friendly name */ + sprintf( __( 'Exporter callback is not a valid callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) ) + ); + } + + $callback = $exporter['callback']; + $exporter_friendly_name = $exporter['exporter_friendly_name']; + + $response = call_user_func( $callback, $email_address, $page ); + if ( is_wp_error( $response ) ) { + wp_send_json_error( $response ); + } + + if ( ! is_array( $response ) ) { + wp_send_json_error( + /* translators: %s: exporter friendly name */ + sprintf( __( 'Expected response as an array from exporter: %s.' ), esc_html( $exporter_friendly_name ) ) + ); + } + if ( ! array_key_exists( 'data', $response ) ) { + wp_send_json_error( + /* translators: %s: exporter friendly name */ + sprintf( __( 'Expected data in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) ) + ); + } + if ( ! is_array( $response['data'] ) ) { + wp_send_json_error( + /* translators: %s: exporter friendly name */ + sprintf( __( 'Expected data array in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) ) + ); + } + if ( ! array_key_exists( 'done', $response ) ) { + wp_send_json_error( + /* translators: %s: exporter friendly name */ + sprintf( __( 'Expected done (boolean) in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) ) + ); + } + } else { + // No exporters, so we're done. + $exporter_key = ''; + + $response = array( + 'data' => array(), + 'done' => true, + ); + } + + /** + * Filters a page of personal data exporter data. Used to build the export report. + * + * Allows the export response to be consumed by destinations in addition to Ajax. + * + * @since 4.9.6 + * + * @param array $response The personal data for the given exporter and page. + * @param int $exporter_index The index of the exporter that provided this data. + * @param string $email_address The email address associated with this personal data. + * @param int $page The page for this response. + * @param int $request_id The privacy request post ID associated with this request. + * @param bool $send_as_email Whether the final results of the export should be emailed to the user. + * @param string $exporter_key The key (slug) of the exporter that provided this data. + */ + $response = apply_filters( 'wp_privacy_personal_data_export_page', $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key ); + + if ( is_wp_error( $response ) ) { + wp_send_json_error( $response ); + } + + wp_send_json_success( $response ); +} + +/** + * Ajax handler for erasing personal data. + * + * @since 4.9.6 + */ +function wp_ajax_wp_privacy_erase_personal_data() { + + if ( empty( $_POST['id'] ) ) { + wp_send_json_error( __( 'Missing request ID.' ) ); + } + + $request_id = (int) $_POST['id']; + + if ( $request_id < 1 ) { + wp_send_json_error( __( 'Invalid request ID.' ) ); + } + + // Both capabilities are required to avoid confusion, see `_wp_personal_data_removal_page()`. + if ( ! current_user_can( 'erase_others_personal_data' ) || ! current_user_can( 'delete_users' ) ) { + wp_send_json_error( __( 'Invalid request.' ) ); + } + + check_ajax_referer( 'wp-privacy-erase-personal-data-' . $request_id, 'security' ); + + // Get the request data. + $request = wp_get_user_request_data( $request_id ); + + if ( ! $request || 'remove_personal_data' !== $request->action_name ) { + wp_send_json_error( __( 'Invalid request ID.' ) ); + } + + $email_address = $request->email; + + if ( ! is_email( $email_address ) ) { + wp_send_json_error( __( 'Invalid email address in request.' ) ); + } + + if ( ! isset( $_POST['eraser'] ) ) { + wp_send_json_error( __( 'Missing eraser index.' ) ); + } + + $eraser_index = (int) $_POST['eraser']; + + if ( ! isset( $_POST['page'] ) ) { + wp_send_json_error( __( 'Missing page index.' ) ); + } + + $page = (int) $_POST['page']; + + /** + * Filters the array of personal data eraser callbacks. + * + * @since 4.9.6 + * + * @param array $args { + * An array of callable erasers of personal data. Default empty array. + * + * @type array { + * Array of personal data exporters. + * + * @type string $callback Callable eraser that accepts an email address and + * a page and returns an array with boolean values for + * whether items were removed or retained and any messages + * from the eraser, as well as if additional pages are + * available. + * @type string $exporter_friendly_name Translated user facing friendly name for the eraser. + * } + * } + */ + $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() ); + + // Do we have any registered erasers? + if ( 0 < count( $erasers ) ) { + + if ( $eraser_index < 1 ) { + wp_send_json_error( __( 'Eraser index cannot be less than one.' ) ); + } + + if ( $eraser_index > count( $erasers ) ) { + wp_send_json_error( __( 'Eraser index is out of range.' ) ); + } + + if ( $page < 1 ) { + wp_send_json_error( __( 'Page index cannot be less than one.' ) ); + } + + $eraser_keys = array_keys( $erasers ); + $eraser_key = $eraser_keys[ $eraser_index - 1 ]; + $eraser = $erasers[ $eraser_key ]; + + if ( ! is_array( $eraser ) ) { + /* translators: %d: array index */ + wp_send_json_error( sprintf( __( 'Expected an array describing the eraser at index %d.' ), $eraser_index ) ); + } + + if ( ! array_key_exists( 'callback', $eraser ) ) { + /* translators: %d: array index */ + wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a callback.' ), $eraser_index ) ); + } + + if ( ! is_callable( $eraser['callback'] ) ) { + /* translators: %d: array index */ + wp_send_json_error( sprintf( __( 'Eraser callback at index %d is not a valid callback.' ), $eraser_index ) ); + } + + if ( ! array_key_exists( 'eraser_friendly_name', $eraser ) ) { + /* translators: %d: array index */ + wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a friendly name.' ), $eraser_index ) ); + } + + $callback = $eraser['callback']; + $eraser_friendly_name = $eraser['eraser_friendly_name']; + + $response = call_user_func( $callback, $email_address, $page ); + + if ( is_wp_error( $response ) ) { + wp_send_json_error( $response ); + } + + if ( ! is_array( $response ) ) { + wp_send_json_error( + sprintf( + /* translators: 1: eraser friendly name, 2: array index */ + __( 'Did not receive array from %1$s eraser (index %2$d).' ), + esc_html( $eraser_friendly_name ), + $eraser_index + ) + ); + } + + if ( ! array_key_exists( 'items_removed', $response ) ) { + wp_send_json_error( + sprintf( + /* translators: 1: eraser friendly name, 2: array index */ + __( 'Expected items_removed key in response array from %1$s eraser (index %2$d).' ), + esc_html( $eraser_friendly_name ), + $eraser_index + ) + ); + } + + if ( ! array_key_exists( 'items_retained', $response ) ) { + wp_send_json_error( + sprintf( + /* translators: 1: eraser friendly name, 2: array index */ + __( 'Expected items_retained key in response array from %1$s eraser (index %2$d).' ), + esc_html( $eraser_friendly_name ), + $eraser_index + ) + ); + } + + if ( ! array_key_exists( 'messages', $response ) ) { + wp_send_json_error( + sprintf( + /* translators: 1: eraser friendly name, 2: array index */ + __( 'Expected messages key in response array from %1$s eraser (index %2$d).' ), + esc_html( $eraser_friendly_name ), + $eraser_index + ) + ); + } + + if ( ! is_array( $response['messages'] ) ) { + wp_send_json_error( + sprintf( + /* translators: 1: eraser friendly name, 2: array index */ + __( 'Expected messages key to reference an array in response array from %1$s eraser (index %2$d).' ), + esc_html( $eraser_friendly_name ), + $eraser_index + ) + ); + } + + if ( ! array_key_exists( 'done', $response ) ) { + wp_send_json_error( + sprintf( + /* translators: 1: eraser friendly name, 2: array index */ + __( 'Expected done flag in response array from %1$s eraser (index %2$d).' ), + esc_html( $eraser_friendly_name ), + $eraser_index + ) + ); + } + } else { + // No erasers, so we're done. + $eraser_key = ''; + + $response = array( + 'items_removed' => false, + 'items_retained' => false, + 'messages' => array(), + 'done' => true, + ); + } + + /** + * Filters a page of personal data eraser data. + * + * Allows the erasure response to be consumed by destinations in addition to Ajax. + * + * @since 4.9.6 + * + * @param array $response The personal data for the given exporter and page. + * @param int $eraser_index The index of the eraser that provided this data. + * @param string $email_address The email address associated with this personal data. + * @param int $page The page for this response. + * @param int $request_id The privacy request post ID associated with this request. + * @param string $eraser_key The key (slug) of the eraser that provided this data. + */ + $response = apply_filters( 'wp_privacy_personal_data_erasure_page', $response, $eraser_index, $email_address, $page, $request_id, $eraser_key ); + + if ( is_wp_error( $response ) ) { + wp_send_json_error( $response ); + } + + wp_send_json_success( $response ); +} diff --git a/wp-admin/includes/bookmark.php b/wp-admin/includes/bookmark.php new file mode 100644 index 0000000..2608af7 --- /dev/null +++ b/wp-admin/includes/bookmark.php @@ -0,0 +1,316 @@ +' . __( 'You need a higher level of permission.' ) . '' . + '

      ' . __( 'Sorry, you are not allowed to edit the links for this site.' ) . '

      ', + 403 + ); + } + + $_POST['link_url'] = esc_html( $_POST['link_url'] ); + $_POST['link_url'] = esc_url($_POST['link_url']); + $_POST['link_name'] = esc_html( $_POST['link_name'] ); + $_POST['link_image'] = esc_html( $_POST['link_image'] ); + $_POST['link_rss'] = esc_url($_POST['link_rss']); + if ( !isset($_POST['link_visible']) || 'N' != $_POST['link_visible'] ) + $_POST['link_visible'] = 'Y'; + + if ( !empty( $link_id ) ) { + $_POST['link_id'] = $link_id; + return wp_update_link( $_POST ); + } else { + return wp_insert_link( $_POST ); + } +} + +/** + * Retrieves the default link for editing. + * + * @since 2.0.0 + * + * @return stdClass Default link object. + */ +function get_default_link_to_edit() { + $link = new stdClass; + if ( isset( $_GET['linkurl'] ) ) + $link->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; +} + +/** + * Deletes a specified link from the database. + * + * @since 2.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $link_id ID of the link to delete + * @return true Always 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 ); +} + +/** + * Retrieves link data based on its ID. + * + * @since 2.0.0 + * + * @param int|stdClass $link Link ID or object to retrieve. + * @return object Link object for editing. + */ +function get_link_to_edit( $link ) { + return get_bookmark( $link, OBJECT, 'edit' ); +} + +/** + * Inserts/updates links into/in the database. + * + * @since 2.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param array $linkdata Elements that make up the link to insert. + * @param bool $wp_error Optional. Whether to return a WP_Error object on failure. Default false. + * @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 ); + + $args = wp_parse_args( $linkdata, $defaults ); + $r = wp_unslash( sanitize_bookmark( $args, 'db' ) ); + + $link_id = $r['link_id']; + $link_name = $r['link_name']; + $link_url = $r['link_url']; + + $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; + } + + $link_rating = ( ! empty( $r['link_rating'] ) ) ? $r['link_rating'] : 0; + $link_image = ( ! empty( $r['link_image'] ) ) ? $r['link_image'] : ''; + $link_target = ( ! empty( $r['link_target'] ) ) ? $r['link_target'] : ''; + $link_visible = ( ! empty( $r['link_visible'] ) ) ? $r['link_visible'] : 'Y'; + $link_owner = ( ! empty( $r['link_owner'] ) ) ? $r['link_owner'] : get_current_user_id(); + $link_notes = ( ! empty( $r['link_notes'] ) ) ? $r['link_notes'] : ''; + $link_description = ( ! empty( $r['link_description'] ) ) ? $r['link_description'] : ''; + $link_rss = ( ! empty( $r['link_rss'] ) ) ? $r['link_rss'] : ''; + $link_rel = ( ! empty( $r['link_rel'] ) ) ? $r['link_rel'] : ''; + $link_category = ( ! empty( $r['link_category'] ) ) ? $r['link_category'] : array(); + + // Make sure we set a valid category. + if ( ! is_array( $link_category ) || 0 == count( $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 the link to update. + * @param array $link_categories Array of link categories to add the link 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 ); +} + +/** + * Updates 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 ); +} + +/** + * Outputs the 'disabled' message for the WordPress Link Manager. + * + * @since 3.5.0 + * @access private + * + * @global string $pagenow + */ +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( __( 'Sorry, you are not allowed to edit the links for this site.' ) ); +} diff --git a/wp-admin/includes/class-automatic-upgrader-skin.php b/wp-admin/includes/class-automatic-upgrader-skin.php new file mode 100644 index 0000000..dd37da9 --- /dev/null +++ b/wp-admin/includes/class-automatic-upgrader-skin.php @@ -0,0 +1,113 @@ +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, $context, $allow_relaxed_file_ownership ); + ob_end_clean(); + return $result; + } + + /** + * + * @return array + */ + public function get_upgrade_messages() { + return $this->messages; + } + + /** + * + * @param string|array|WP_Error $data + */ + public function feedback( $data ) { + if ( is_wp_error( $data ) ) { + $string = $data->get_error_message(); + } elseif ( 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; + } + + /** + */ + public function header() { + ob_start(); + } + + /** + */ + public function footer() { + $output = ob_get_clean(); + if ( ! empty( $output ) ) + $this->feedback( $output ); + } +} diff --git a/wp-admin/includes/class-bulk-plugin-upgrader-skin.php b/wp-admin/includes/class-bulk-plugin-upgrader-skin.php new file mode 100644 index 0000000..34dcbd4 --- /dev/null +++ b/wp-admin/includes/class-bulk-plugin-upgrader-skin.php @@ -0,0 +1,67 @@ +upgrader->strings['skin_before_update_header'] = __('Updating Plugin %1$s (%2$d/%3$d)'); + } + + /** + * + * @param string $title + */ + public function before($title = '') { + parent::before($this->plugin_info['Title']); + } + + /** + * + * @param string $title + */ + public function after($title = '') { + parent::after($this->plugin_info['Title']); + $this->decrement_update_count( 'plugin' ); + } + + /** + */ + public function bulk_footer() { + parent::bulk_footer(); + $update_actions = array( + 'plugins_page' => '' . __( 'Return to Plugins page' ) . '', + 'updates_page' => '' . __( 'Return to WordPress Updates page' ) . '' + ); + if ( ! current_user_can( 'activate_plugins' ) ) + unset( $update_actions['plugins_page'] ); + + /** + * Filters 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)); + } +} diff --git a/wp-admin/includes/class-bulk-theme-upgrader-skin.php b/wp-admin/includes/class-bulk-theme-upgrader-skin.php new file mode 100644 index 0000000..85ee6f2 --- /dev/null +++ b/wp-admin/includes/class-bulk-theme-upgrader-skin.php @@ -0,0 +1,67 @@ +upgrader->strings['skin_before_update_header'] = __('Updating Theme %1$s (%2$d/%3$d)'); + } + + /** + * + * @param string $title + */ + public function before($title = '') { + parent::before( $this->theme_info->display('Name') ); + } + + /** + * + * @param string $title + */ + public function after($title = '') { + parent::after( $this->theme_info->display('Name') ); + $this->decrement_update_count( 'theme' ); + } + + /** + */ + public function bulk_footer() { + parent::bulk_footer(); + $update_actions = array( + 'themes_page' => '' . __( 'Return to Themes page' ) . '', + 'updates_page' => '' . __( 'Return to WordPress Updates page' ) . '' + ); + if ( ! current_user_can( 'switch_themes' ) && ! current_user_can( 'edit_theme_options' ) ) + unset( $update_actions['themes_page'] ); + + /** + * Filters 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)); + } +} diff --git a/wp-admin/includes/class-bulk-upgrader-skin.php b/wp-admin/includes/class-bulk-upgrader-skin.php new file mode 100644 index 0000000..6541de9 --- /dev/null +++ b/wp-admin/includes/class-bulk-upgrader-skin.php @@ -0,0 +1,175 @@ + '', 'nonce' => '' ); + $args = wp_parse_args($args, $defaults); + + parent::__construct($args); + } + + /** + */ + public 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.'); + /* translators: 1: Title of an update, 2: Error message */ + $this->upgrader->strings['skin_update_failed_error'] = __('An error occurred while updating %1$s: %2$s'); + /* translators: 1: Title of an update */ + $this->upgrader->strings['skin_update_failed'] = __('The update of %1$s failed.'); + /* translators: 1: Title of an update */ + $this->upgrader->strings['skin_update_successful'] = __( '%1$s updated successfully.' ); + $this->upgrader->strings['skin_upgrade_end'] = __('All updates have been completed.'); + } + + /** + * + * @param string $string + */ + public 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"; + } + + /** + */ + public function header() { + // Nothing, This will be displayed within a iframe. + } + + /** + */ + public function footer() { + // Nothing, This will be displayed within a iframe. + } + + /** + * + * @param string|WP_Error $error + */ + public function error($error) { + if ( is_string($error) && isset( $this->upgrader->strings[$error] ) ) + $this->error = $this->upgrader->strings[$error]; + + if ( is_wp_error($error) ) { + $messages = array(); + 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 ''; + } + + /** + */ + public function bulk_header() { + $this->feedback('skin_upgrade_start'); + } + + /** + */ + public function bulk_footer() { + $this->feedback('skin_upgrade_end'); + } + + /** + * + * @param string $title + */ + public 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 ''; + // This progress messages div gets moved via JavaScript when clicking on "Show details.". + echo '

      '; + $this->flush_output(); + } + + /** + * + * @param string $title + */ + public 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 ) . + ' ' . + '

      '; + } + + echo ''; + } + + $this->reset(); + $this->flush_output(); + } + + /** + */ + public function reset() { + $this->in_loop = false; + $this->error = false; + } + + /** + */ + public function flush_output() { + wp_ob_end_flush_all(); + flush(); + } +} diff --git a/wp-admin/includes/class-core-upgrader.php b/wp-admin/includes/class-core-upgrader.php new file mode 100644 index 0000000..195e588 --- /dev/null +++ b/wp-admin/includes/class-core-upgrader.php @@ -0,0 +1,362 @@ +strings['up_to_date'] = __('WordPress is at the latest version.'); + $this->strings['locked'] = __('Another update is currently in progress.'); + $this->strings['no_package'] = __('Update package not available.'); + /* translators: %s: package URL */ + $this->strings['downloading_package'] = sprintf( __( 'Downloading update from %s…' ), '%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.' ); + } + + /** + * Upgrade WordPress core. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * @global callable $_wp_filesystem_direct_method + * + * @param object $current Response object for whether WordPress is current. + * @param array $args { + * Optional. Arguments for upgrading WordPress core. Default empty array. + * + * @type bool $pre_check_md5 Whether to check the file checksums before + * attempting the upgrade. Default true. + * @type bool $attempt_rollback Whether to attempt to rollback the chances if + * there is a problem. Default false. + * @type bool $do_rollback Whether to perform this "upgrade" as a rollback. + * Default false. + * } + * @return null|false|WP_Error False or WP_Error on failure, null on success. + */ + public 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, + 'allow_relaxed_file_ownership' => 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 ), $parsed_args['allow_relaxed_file_ownership'] ); + 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 reinstallation. 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'; + + // Lock to prevent multiple Core Updates occurring + $lock = WP_Upgrader::create_lock( 'core_updater', 15 * MINUTE_IN_SECONDS ); + if ( ! $lock ) { + return new WP_Error( 'locked', $this->strings['locked'] ); + } + + $download = $this->download_package( $current->packages->$to_download ); + if ( is_wp_error( $download ) ) { + WP_Upgrader::release_lock( 'core_updater' ); + return $download; + } + + $working_dir = $this->unpack_package( $download ); + if ( is_wp_error( $working_dir ) ) { + WP_Upgrader::release_lock( 'core_updater' ); + 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); + WP_Upgrader::release_lock( 'core_updater' ); + 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' ) ) { + WP_Upgrader::release_lock( 'core_updater' ); + 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' ), + 'fs_method_direct' => !empty( $GLOBALS['_wp_filesystem_direct_method'] ) ? $GLOBALS['_wp_filesystem_direct_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 ); + } + + WP_Upgrader::release_lock( 'core_updater' ); + + return $result; + } + + /** + * Determines if this WordPress Core version should update to an offered version or not. + * + * @since 3.7.0 + * + * @static + * + * @param string $offered_ver The offered version, of the format x.y.z. + * @return bool True if we should update to the offered version, otherwise false. + */ + public static function should_update_to_version( $offered_ver ) { + 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 ) { + + /** + * Filters 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 ) { + + /** + * Filters 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, '>' ) ) { + + /** + * Filters 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; + } + + /** + * Compare the disk file checksums against the expected checksums. + * + * @since 3.7.0 + * + * @global string $wp_version + * @global string $wp_local_package + * + * @return bool True if the checksums match, otherwise false. + */ + public 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; + } +} diff --git a/wp-admin/includes/class-file-upload-upgrader.php b/wp-admin/includes/class-file-upload-upgrader.php new file mode 100644 index 0000000..a182b62 --- /dev/null +++ b/wp-admin/includes/class-file-upload-upgrader.php @@ -0,0 +1,124 @@ + 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 installation. + wp_schedule_single_event( time() + 2 * HOUR_IN_SECONDS, '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 = sanitize_file_name( $_GET[ $urlholder ] ); + $this->package = $uploads['basedir'] . '/' . $this->filename; + + if ( 0 !== strpos( realpath( $this->package ), realpath( $uploads['basedir'] ) ) ) { + wp_die( __( 'Please select a file' ) ); + } + } + } + + /** + * Delete the attachment/uploaded file. + * + * @since 3.2.2 + * + * @return bool Whether the cleanup was successful. + */ + public function cleanup() { + if ( $this->id ) + wp_delete_attachment( $this->id ); + + elseif ( file_exists( $this->package ) ) + return @unlink( $this->package ); + + return true; + } +} diff --git a/wp-admin/includes/class-ftp-pure.php b/wp-admin/includes/class-ftp-pure.php new file mode 100644 index 0000000..38d348b --- /dev/null +++ b/wp-admin/includes/class-ftp-pure.php @@ -0,0 +1,186 @@ + +// +// + + 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(",", preg_replace("/^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*$/s", "\\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..5ca4a2b --- /dev/null +++ b/wp-admin/includes/class-ftp-sockets.php @@ -0,0 +1,246 @@ + +// +// + + 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(",", preg_replace("/^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*$/s", "\\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..35f670f --- /dev/null +++ b/wp-admin/includes/class-ftp.php @@ -0,0 +1,912 @@ +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 ftp_base($port_mode=FALSE) { + $this->__construct($port_mode); + } + +// +// +// + + 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 preg_replace("/^[0-9]{3} \"(.+)\".*$/s", "\\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 preg_replace("/^[0-9]{3} ([0-9]+).*$/s", "\\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 = preg_replace("/^[0-9]{3} ([0-9]+).*$/s", "\\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="", $arg="") { + 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] or $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] or $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? + preg_match( '/' . preg_quote( $pattern, '/' ) . '/', $probe ) : + preg_match( '/' . preg_quote( $pattern, '/' ) . '/i', $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 dirname( __FILE__ ) . "/class-ftp-" . ( $mod_sockets ? "sockets" : "pure" ) . ".php"; + +if ( $mod_sockets ) { + class ftp extends ftp_sockets {} +} else { + class ftp extends ftp_pure {} +} diff --git a/wp-admin/includes/class-language-pack-upgrader-skin.php b/wp-admin/includes/class-language-pack-upgrader-skin.php new file mode 100644 index 0000000..9efc877 --- /dev/null +++ b/wp-admin/includes/class-language-pack-upgrader-skin.php @@ -0,0 +1,84 @@ + '', 'nonce' => '', 'title' => __( 'Update Translations' ), 'skip_header_footer' => false ); + $args = wp_parse_args( $args, $defaults ); + if ( $args['skip_header_footer'] ) { + $this->done_header = true; + $this->done_footer = true; + $this->display_footer_actions = false; + } + parent::__construct( $args ); + } + + /** + */ + public 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 ); + } + + /** + * + * @param string|WP_Error $error + */ + public function error( $error ) { + echo '
      '; + parent::error( $error ); + echo '
      '; + } + + /** + */ + public function after() { + echo '
      '; + } + + /** + */ + public function bulk_footer() { + $this->decrement_update_count( 'translation' ); + $update_actions = array(); + $update_actions['updates_page'] = '' . __( 'Return to WordPress Updates page' ) . ''; + + /** + * Filters 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 ) ); + } +} diff --git a/wp-admin/includes/class-language-pack-upgrader.php b/wp-admin/includes/class-language-pack-upgrader.php new file mode 100644 index 0000000..404c4a2 --- /dev/null +++ b/wp-admin/includes/class-language-pack-upgrader.php @@ -0,0 +1,370 @@ +is_vcs_checkout( WP_CONTENT_DIR ) ) { + return; + } + + foreach ( $language_updates as $key => $language_update ) { + $update = ! empty( $language_update->autoupdate ); + + /** + * Filters whether to asynchronously update translation for core, a plugin, or a theme. + * + * @since 4.0.0 + * + * @param bool $update Whether to update. + * @param object $language_update The update offer. + */ + $update = apply_filters( 'async_update_translation', $update, $language_update ); + + if ( ! $update ) { + unset( $language_updates[ $key ] ); + } + } + + if ( empty( $language_updates ) ) { + return; + } + + // Re-use the automatic upgrader skin if the parent upgrader is using it. + if ( $upgrader && $upgrader->skin instanceof Automatic_Upgrader_Skin ) { + $skin = $upgrader->skin; + } else { + $skin = new Language_Pack_Upgrader_Skin( array( + 'skip_header_footer' => true, + ) ); + } + + $lp_upgrader = new Language_Pack_Upgrader( $skin ); + $lp_upgrader->bulk_upgrade( $language_updates ); + } + + /** + * Initialize the upgrade strings. + * + * @since 3.7.0 + */ + public 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 translations are up to date.' ); + $this->strings['no_package'] = __( 'Update package not available.' ); + /* translators: %s: package URL */ + $this->strings['downloading_package'] = sprintf( __( 'Downloading translation from %s…' ), '%s' ); + $this->strings['unpack_package'] = __( 'Unpacking the update…' ); + $this->strings['process_failed'] = __( 'Translation update failed.' ); + $this->strings['process_success'] = __( 'Translation updated successfully.' ); + } + + /** + * Upgrade a language pack. + * + * @since 3.7.0 + * + * @param string|false $update Optional. Whether an update offer is available. Default false. + * @param array $args Optional. Other optional arguments, see + * Language_Pack_Upgrader::bulk_upgrade(). Default empty array. + * @return array|bool|WP_Error The result of the upgrade, or a WP_Error object instead. + */ + public function upgrade( $update = false, $args = array() ) { + if ( $update ) { + $update = array( $update ); + } + + $results = $this->bulk_upgrade( $update, $args ); + + if ( ! is_array( $results ) ) { + return $results; + } + + return $results[0]; + } + + /** + * Bulk upgrade language packs. + * + * @since 3.7.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param array $language_updates Optional. Language pack updates. Default empty array. + * @param array $args { + * Optional. Other arguments for upgrading multiple language packs. Default empty array + * + * @type bool $clear_update_cache Whether to clear the update cache when done. + * Default true. + * } + * @return array|bool|WP_Error Will return an array of results, or true if there are no updates, + * false or WP_Error for initial errors. + */ + public 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->set_result( true ); + $this->skin->feedback( 'up_to_date' ); + $this->skin->bulk_footer(); + $this->skin->footer(); + return true; + } + + if ( 'upgrader_process_complete' == current_filter() ) + $this->skin->feedback( 'starting_upgrade' ); + + // Remove any existing upgrade filters from the plugin/theme upgraders #WP29425 & #WP29230 + remove_all_filters( 'upgrader_pre_install' ); + remove_all_filters( 'upgrader_clear_destination' ); + remove_all_filters( 'upgrader_post_install' ); + remove_all_filters( 'upgrader_source_selection' ); + + add_filter( 'upgrader_source_selection', array( $this, 'check_package' ), 10, 2 ); + + $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 ); + + $language_updates_results = array(); + + 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; + } + + $language_updates_results[] = array( + 'language' => $language_update->language, + 'type' => $language_update->type, + 'slug' => isset( $language_update->slug ) ? $language_update->slug : 'default', + 'version' => $language_update->version, + ); + } + + // Remove upgrade hooks which are not required for translation updates. + 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' ); + + /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ + do_action( 'upgrader_process_complete', $this, array( + 'action' => 'update', + 'type' => 'translation', + 'bulk' => true, + 'translations' => $language_updates_results + ) ); + + // Re-add upgrade hooks. + add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 ); + add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 ); + add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 ); + add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 ); + + $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' ) ); + + if ( $parsed_args['clear_update_cache'] ) { + wp_clean_update_cache(); + } + + return $results; + } + + /** + * Check the package source to make sure there are .mo and .po files. + * + * Hooked to the {@see 'upgrader_source_selection'} filter by + * Language_Pack_Upgrader::bulk_upgrade(). + * + * @since 3.7.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param string|WP_Error $source + * @param string $remote_source + */ + public 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'], + /* translators: 1: .po 2: .mo */ + sprintf( __( 'The language pack is missing either the %1$s or %2$s files.' ), + '.po', + '.mo' + ) + ); + } + + return $source; + } + + /** + * Get the name of an item being updated. + * + * @since 3.7.0 + * + * @param object $update The data for an update. + * @return string The name of the item being updated. + */ + public function get_name_for_update( $update ) { + switch ( $update->type ) { + case 'core': + return 'WordPress'; // Not translated + + 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 = reset( $plugin_data ); + if ( $plugin_data ) + return $plugin_data['Name']; + break; + } + return ''; + } + +} diff --git a/wp-admin/includes/class-pclzip.php b/wp-admin/includes/class-pclzip.php new file mode 100644 index 0000000..ae0af7a --- /dev/null +++ b/wp-admin/includes/class-pclzip.php @@ -0,0 +1,5692 @@ +zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + + // ----- Return + return; + } + + public function PclZip($p_zipname) { + self::__construct($p_zipname); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // 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); + $v_memory_limit_int = (int) $v_memory_limit; + $last = strtolower(substr($v_memory_limit, -1)); + + if($last == 'g') + //$v_memory_limit_int = $v_memory_limit_int*1024*1024*1024; + $v_memory_limit_int = $v_memory_limit_int*1073741824; + if($last == 'm') + //$v_memory_limit_int = $v_memory_limit_int*1024*1024; + $v_memory_limit_int = $v_memory_limit_int*1048576; + if($last == 'k') + $v_memory_limit_int = $v_memory_limit_int*1024; + + $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit_int*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-plugin-installer-skin.php b/wp-admin/includes/class-plugin-installer-skin.php new file mode 100644 index 0000000..66f4062 --- /dev/null +++ b/wp-admin/includes/class-plugin-installer-skin.php @@ -0,0 +1,98 @@ + '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); + } + + /** + */ + public function before() { + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( __('Successfully installed the plugin %s %s.'), $this->api->name, $this->api->version); + } + + /** + */ + public 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 if ( 'press-this' == $from ) { + $install_actions['activate_plugin'] = '' . __( 'Activate Plugin & Return to Press This' ) . ''; + } 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' ) . ''; + } elseif ( $this->type == 'web' ) { + $install_actions['plugins_page'] = '' . __( 'Return to Plugin Installer' ) . ''; + } elseif ( 'upload' == $this->type && 'plugins' == $from ) { + $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_plugin', $plugin_file ) ) { + unset( $install_actions['activate_plugin'] ); + } + + /** + * Filters 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 ) ); + } + } +} diff --git a/wp-admin/includes/class-plugin-upgrader-skin.php b/wp-admin/includes/class-plugin-upgrader-skin.php new file mode 100644 index 0000000..ba8c30f --- /dev/null +++ b/wp-admin/includes/class-plugin-upgrader-skin.php @@ -0,0 +1,70 @@ + '', '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); + } + + /** + */ + public function after() { + $this->plugin = $this->upgrader->plugin_info(); + if ( !empty($this->plugin) && !is_wp_error($this->result) && $this->plugin_active ){ + // Currently used only when JS is off for a single plugin update? + 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_plugin', $this->plugin ) ) + unset( $update_actions['activate_plugin'] ); + + /** + * Filters 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)); + } +} diff --git a/wp-admin/includes/class-plugin-upgrader.php b/wp-admin/includes/class-plugin-upgrader.php new file mode 100644 index 0000000..3c05353 --- /dev/null +++ b/wp-admin/includes/class-plugin-upgrader.php @@ -0,0 +1,459 @@ +strings['up_to_date'] = __('The plugin is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + /* translators: %s: package URL */ + $this->strings['downloading_package'] = sprintf( __( 'Downloading update from %s…' ), '%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.'); + $this->strings['process_bulk_success'] = __('Plugins updated successfully.'); + } + + /** + * Initialize the installation strings. + * + * @since 2.8.0 + */ + public function install_strings() { + $this->strings['no_package'] = __('Installation package not available.'); + /* translators: %s: package URL */ + $this->strings['downloading_package'] = sprintf( __( 'Downloading installation package from %s…' ), '%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 installation failed.'); + $this->strings['process_success'] = __('Plugin installed successfully.'); + } + + /** + * Install a plugin package. + * + * @since 2.8.0 + * @since 3.7.0 The `$args` parameter was added, making clearing the plugin update cache optional. + * + * @param string $package The full local path or URI of the package. + * @param array $args { + * Optional. Other arguments for installing a plugin package. Default empty array. + * + * @type bool $clear_update_cache Whether to clear the plugin updates cache if successful. + * Default true. + * } + * @return bool|WP_Error True if the installation was successful, false or a WP_Error otherwise. + */ + public 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') ); + if ( $parsed_args['clear_update_cache'] ) { + // Clear cache so wp_update_plugins() knows about the new plugin. + add_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9, 0 ); + } + + $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_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9 ); + 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; + } + + /** + * Upgrade a plugin. + * + * @since 2.8.0 + * @since 3.7.0 The `$args` parameter was added, making clearing the plugin update cache optional. + * + * @param string $plugin The basename path to the main plugin file. + * @param array $args { + * Optional. Other arguments for upgrading a plugin package. Default empty array. + * + * @type bool $clear_update_cache Whether to clear the plugin updates cache if successful. + * Default true. + * } + * @return bool|WP_Error True if the upgrade was successful, false or a WP_Error object otherwise. + */ + public 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. + if ( $parsed_args['clear_update_cache'] ) { + // Clear cache so wp_update_plugins() knows about the new plugin. + add_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9, 0 ); + } + + $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_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9 ); + 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; + } + + /** + * Bulk upgrade several plugins at once. + * + * @since 2.8.0 + * @since 3.7.0 The `$args` parameter was added, making clearing the plugin update cache optional. + * + * @param array $plugins Array of the basename paths of the plugins' main files. + * @param array $args { + * Optional. Other arguments for upgrading several plugins at once. Default empty array. + * + * @type bool $clear_update_cache Whether to clear the plugin updates cache if successful. + * Default true. + * } + * @return array|false An array of results indexed by plugin file, or false if unable to connect to the filesystem. + */ + public 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); + + // Force refresh of plugin update information. + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ + 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')); + + return $results; + } + + /** + * Check a source package to be sure it contains a plugin. + * + * This function is added to the {@see 'upgrader_source_selection'} filter by + * Plugin_Upgrader::install(). + * + * @since 3.3.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param string $source The path to the downloaded package source. + * @return string|WP_Error The source as passed, or a WP_Error object + * if no plugins were found. + */ + public 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, let's not prevent installation. + return $source; + + // Check the folder contains at least 1 valid plugin. + $plugins_found = false; + $files = glob( $working_directory . '*.php' ); + if ( $files ) { + foreach ( $files 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; + } + + /** + * Retrieve the path to the file that contains the plugin info. + * + * This isn't used internally in the class, but is called by the skins. + * + * @since 2.8.0 + * + * @return string|false The full path to the main plugin file, or false. + */ + public 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]; + } + + /** + * Deactivates a plugin before it is upgraded. + * + * Hooked to the {@see 'upgrader_pre_install'} filter by Plugin_Upgrader::upgrade(). + * + * @since 2.8.0 + * @since 4.1.0 Added a return value. + * + * @param bool|WP_Error $return Upgrade offer return. + * @param array $plugin Plugin package arguments. + * @return bool|WP_Error The passed in $return param or WP_Error. + */ + public 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 ( wp_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); + } + + return $return; + } + + /** + * Delete the old plugin during an upgrade. + * + * Hooked to the {@see 'upgrader_clear_destination'} filter by + * Plugin_Upgrader::upgrade() and Plugin_Upgrader::bulk_upgrade(). + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param bool|WP_Error $removed + * @param string $local_destination + * @param string $remote_destination + * @param array $plugin + * @return WP_Error|bool + */ + public 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; + } +} diff --git a/wp-admin/includes/class-theme-installer-skin.php b/wp-admin/includes/class-theme-installer-skin.php new file mode 100644 index 0000000..3d39492 --- /dev/null +++ b/wp-admin/includes/class-theme-installer-skin.php @@ -0,0 +1,103 @@ + '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); + } + + /** + */ + public function before() { + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( $this->upgrader->strings['process_success_specific'], $this->api->name, $this->api->version); + } + + /** + */ + public 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(); + + $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(); + + if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $customize_url = add_query_arg( + array( + 'theme' => urlencode( $stylesheet ), + 'return' => urlencode( admin_url( 'web' === $this->type ? 'theme-install.php' : 'themes.php' ) ), + ), + admin_url( 'customize.php' ) + ); + $install_actions['preview'] = '' . sprintf( __( 'Live Preview “%s”' ), $name ) . ''; + } + $install_actions['activate'] = '' . sprintf( __( 'Activate “%s”' ), $name ) . ''; + + 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'] ); + + /** + * Filters 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)); + } +} diff --git a/wp-admin/includes/class-theme-upgrader-skin.php b/wp-admin/includes/class-theme-upgrader-skin.php new file mode 100644 index 0000000..f923757 --- /dev/null +++ b/wp-admin/includes/class-theme-upgrader-skin.php @@ -0,0 +1,89 @@ + '', 'theme' => '', 'nonce' => '', 'title' => __('Update Theme') ); + $args = wp_parse_args($args, $defaults); + + $this->theme = $args['theme']; + + parent::__construct($args); + } + + /** + */ + public 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(); + + $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 ); + + $customize_url = add_query_arg( + array( + 'theme' => urlencode( $stylesheet ), + 'return' => urlencode( admin_url( 'themes.php' ) ), + ), + admin_url( 'customize.php' ) + ); + if ( get_stylesheet() == $stylesheet ) { + if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $update_actions['preview'] = '' . sprintf( __( 'Customize “%s”' ), $name ) . ''; + } + } elseif ( current_user_can( 'switch_themes' ) ) { + if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $update_actions['preview'] = '' . sprintf( __( 'Live Preview “%s”' ), $name ) . ''; + } + $update_actions['activate'] = '' . sprintf( __( 'Activate “%s”' ), $name ) . ''; + } + + 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' ) . ''; + + /** + * Filters 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)); + } +} diff --git a/wp-admin/includes/class-theme-upgrader.php b/wp-admin/includes/class-theme-upgrader.php new file mode 100644 index 0000000..7e46b5f --- /dev/null +++ b/wp-admin/includes/class-theme-upgrader.php @@ -0,0 +1,593 @@ +strings['up_to_date'] = __('The theme is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + /* translators: %s: package URL */ + $this->strings['downloading_package'] = sprintf( __( 'Downloading update from %s…' ), '%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.'); + } + + /** + * Initialize the installation strings. + * + * @since 2.8.0 + */ + public function install_strings() { + $this->strings['no_package'] = __('Installation package not available.'); + /* translators: %s: package URL */ + $this->strings['downloading_package'] = sprintf( __( 'Downloading installation package from %s…' ), '%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 installation 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.'); + /* translators: %s: theme name */ + $this->strings['parent_theme_not_found'] = sprintf( __( 'The parent theme could not be found. You will need to install the parent theme, %s, before you can use this child theme.' ), '%s' ); + } + + /** + * Check if a child theme is being installed and we need to install its parent. + * + * Hooked to the {@see 'upgrader_post_install'} filter by Theme_Upgrader::install(). + * + * @since 3.4.0 + * + * @param bool $install_result + * @param array $hook_extra + * @param array $child_result + * @return type + */ + public 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, let's 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 installation + 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; + } + + /** + * Don't display the activate and preview actions to the user. + * + * Hooked to the {@see 'install_theme_complete_actions'} filter by + * Theme_Upgrader::check_parent_theme_filter() when installing + * a child theme and installing the parent theme fails. + * + * @since 3.4.0 + * + * @param array $actions Preview actions. + * @return array + */ + public function hide_activate_preview_actions( $actions ) { + unset($actions['activate'], $actions['preview']); + return $actions; + } + + /** + * Install a theme package. + * + * @since 2.8.0 + * @since 3.7.0 The `$args` parameter was added, making clearing the update cache optional. + * + * @param string $package The full local path or URI of the package. + * @param array $args { + * Optional. Other arguments for installing a theme package. Default empty array. + * + * @type bool $clear_update_cache Whether to clear the updates cache if successful. + * Default true. + * } + * + * @return bool|WP_Error True if the installation was successful, false or a WP_Error object otherwise. + */ + public 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); + if ( $parsed_args['clear_update_cache'] ) { + // Clear cache so wp_update_themes() knows about the new theme. + add_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9, 0 ); + } + + $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_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9 ); + 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; + } + + /** + * Upgrade a theme. + * + * @since 2.8.0 + * @since 3.7.0 The `$args` parameter was added, making clearing the update cache optional. + * + * @param string $theme The theme slug. + * @param array $args { + * Optional. Other arguments for upgrading a theme. Default empty array. + * + * @type bool $clear_update_cache Whether to clear the update cache if successful. + * Default true. + * } + * @return bool|WP_Error True if the upgrade was successful, false or a WP_Error object otherwise. + */ + public 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); + if ( $parsed_args['clear_update_cache'] ) { + // Clear cache so wp_update_themes() knows about the new theme. + add_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9, 0 ); + } + + $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_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9 ); + 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; + } + + /** + * Upgrade several themes at once. + * + * @since 3.0.0 + * @since 3.7.0 The `$args` parameter was added, making clearing the update cache optional. + * + * @param array $themes The theme slugs. + * @param array $args { + * Optional. Other arguments for upgrading several themes at once. Default empty array. + * + * @type bool $clear_update_cache Whether to clear the update cache if successful. + * Default true. + * } + * @return array[]|false An array of results, or false if unable to connect to the filesystem. + */ + public 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, + 'is_multi' => 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); + + // Refresh the Theme Update information + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + /** 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')); + + return $results; + } + + /** + * Check that the package source contains a valid theme. + * + * Hooked to the {@see 'upgrader_source_selection'} filter by Theme_Upgrader::install(). + * It will return an error if the theme doesn't have style.css or index.php + * files. + * + * @since 3.3.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param string $source The full path to the package source. + * @return string|WP_Error The source or a WP_Error. + */ + public 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, let's 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'], + /* translators: %s: style.css */ + sprintf( __( 'The theme is missing the %s stylesheet.' ), + 'style.css' + ) + ); + } + + $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'], + /* translators: %s: style.css */ + sprintf( __( 'The %s stylesheet doesn’t contain a valid theme header.' ), + 'style.css' + ) + ); + } + + // 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'], + /* translators: %s: index.php */ + sprintf( __( 'The theme is missing the %s file.' ), + 'index.php' + ) + ); + } + + return $source; + } + + /** + * Turn on maintenance mode before attempting to upgrade the current theme. + * + * Hooked to the {@see 'upgrader_pre_install'} filter by Theme_Upgrader::upgrade() and + * Theme_Upgrader::bulk_upgrade(). + * + * @since 2.8.0 + * + * @param bool|WP_Error $return + * @param array $theme + * @return bool|WP_Error + */ + public 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; + } + + /** + * Turn off maintenance mode after upgrading the current theme. + * + * Hooked to the {@see 'upgrader_post_install'} filter by Theme_Upgrader::upgrade() + * and Theme_Upgrader::bulk_upgrade(). + * + * @since 2.8.0 + * + * @param bool|WP_Error $return + * @param array $theme + * @return bool|WP_Error + */ + public 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; + } + + /** + * Delete the old theme during an upgrade. + * + * Hooked to the {@see 'upgrader_clear_destination'} filter by Theme_Upgrader::upgrade() + * and Theme_Upgrader::bulk_upgrade(). + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param bool $removed + * @param string $local_destination + * @param string $remote_destination + * @param array $theme + * @return bool + */ + public 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; + } + + /** + * Get the WP_Theme object for a theme. + * + * @since 2.8.0 + * @since 3.0.0 The `$theme` argument was added. + * + * @param string $theme The directory name of the theme. This is optional, and if not supplied, + * the directory name from the last result will be used. + * @return WP_Theme|false The theme's info object, or false `$theme` is not supplied + * and the last result isn't set. + */ + public 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 ); + } + +} diff --git a/wp-admin/includes/class-walker-category-checklist.php b/wp-admin/includes/class-walker-category-checklist.php new file mode 100644 index 0000000..cd5e157 --- /dev/null +++ b/wp-admin/includes/class-walker-category-checklist.php @@ -0,0 +1,125 @@ + '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 Used to append additional content (passed by reference). + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + public 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 Used to append additional content (passed by reference). + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + public 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 Used to append additional content (passed by reference). + * @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. + */ + public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { + if ( empty( $args['taxonomy'] ) ) { + $taxonomy = 'category'; + } else { + $taxonomy = $args['taxonomy']; + } + + if ( $taxonomy == 'category' ) { + $name = 'post_category'; + } else { + $name = 'tax_input[' . $taxonomy . ']'; + } + + $args['popular_cats'] = empty( $args['popular_cats'] ) ? array() : $args['popular_cats']; + $class = in_array( $category->term_id, $args['popular_cats'] ) ? ' class="popular-category"' : ''; + + $args['selected_cats'] = empty( $args['selected_cats'] ) ? array() : $args['selected_cats']; + + if ( ! empty( $args['list_only'] ) ) { + $aria_checked = 'false'; + $inner_class = 'category'; + + if ( in_array( $category->term_id, $args['selected_cats'] ) ) { + $inner_class .= ' selected'; + $aria_checked = 'true'; + } + + /** This filter is documented in wp-includes/category-template.php */ + $output .= "\n" . '' . + ''; + } else { + /** 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 Used to append additional content (passed by reference). + * @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() + */ + public function end_el( &$output, $category, $depth = 0, $args = array() ) { + $output .= "
    • \n"; + } +} diff --git a/wp-admin/includes/class-walker-nav-menu-checklist.php b/wp-admin/includes/class-walker-nav-menu-checklist.php new file mode 100644 index 0000000..a4d8018 --- /dev/null +++ b/wp-admin/includes/class-walker-nav-menu-checklist.php @@ -0,0 +1,117 @@ +db_fields = $fields; + } + } + + /** + * Starts the list before the elements are added. + * + * @see Walker_Nav_Menu::start_lvl() + * + * @since 3.0.0 + * + * @param string $output Used to append additional content (passed by reference). + * @param int $depth Depth of page. Used for padding. + * @param array $args Not used. + */ + public function start_lvl( &$output, $depth = 0, $args = array() ) { + $indent = str_repeat( "\t", $depth ); + $output .= "\n$indent
        \n"; + } + + /** + * Ends the list of after the elements are added. + * + * @see Walker_Nav_Menu::end_lvl() + * + * @since 3.0.0 + * + * @param string $output Used to append additional content (passed by reference). + * @param int $depth Depth of page. Used for padding. + * @param array $args Not used. + */ + public function end_lvl( &$output, $depth = 0, $args = array() ) { + $indent = str_repeat( "\t", $depth ); + $output .= "\n$indent
      "; + } + + /** + * Start the element output. + * + * @see Walker_Nav_Menu::start_el() + * + * @since 3.0.0 + * + * @global int $_nav_menu_placeholder + * + * @param string $output Used to append additional content (passed by reference). + * @param object $item Menu item data object. + * @param int $depth Depth of menu item. Used for padding. + * @param array $args Not used. + * @param int $id Not used. + */ + public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { + global $_nav_menu_placeholder; + + $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1; + $possible_object_id = isset( $item->post_type ) && 'nav_menu_item' == $item->post_type ? $item->object_id : $_nav_menu_placeholder; + $possible_db_id = ( ! empty( $item->ID ) ) && ( 0 < $possible_object_id ) ? (int) $item->ID : 0; + + $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; + + $output .= $indent . '
    • '; + $output .= ''; + + // Menu item hidden fields + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + } + +} // Walker_Nav_Menu_Checklist diff --git a/wp-admin/includes/class-walker-nav-menu-edit.php b/wp-admin/includes/class-walker-nav-menu-edit.php new file mode 100644 index 0000000..36ced40 --- /dev/null +++ b/wp-admin/includes/class-walker-nav-menu-edit.php @@ -0,0 +1,241 @@ + $_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 = false; + 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 ); + } elseif ( 'post_type_archive' == $item->type ) { + $original_object = get_post_type_object( $item->object ); + if ( $original_object ) { + $original_title = $original_object->labels->archives; + } + } + + $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;"'; + + ?> +
    • '; + + if ( $comment->comment_parent ) { + $parent = get_comment( $comment->comment_parent ); + if ( $parent ) { + $parent_link = esc_url( get_comment_link( $parent ) ); + $name = get_comment_author( $parent ); + printf( + /* translators: %s: comment link */ + __( 'In reply to %s.' ), + '' . $name . '' + ); + } + } + + comment_text( $comment ); + if ( $this->user_can ) { ?> + + 50 ) { + $author_url_display = wp_html_excerpt( $author_url_display, 49, '…' ); + } + + echo ""; comment_author( $comment ); echo '
      '; + if ( ! empty( $author_url_display ) ) { + printf( '%s
      ', esc_url( $author_url ), esc_html( $author_url_display ) ); + } + + if ( $this->user_can ) { + if ( ! empty( $comment->comment_author_email ) ) { + /** This filter is documented in wp-includes/comment-template.php */ + $email = apply_filters( 'comment_email', $comment->comment_author_email, $comment ); + + if ( ! empty( $email ) && '@' !== $email ) { + printf( '%2$s
      ', esc_url( 'mailto:' . $email ), esc_html( $email ) ); + } + } + + $author_ip = get_comment_author_IP( $comment ); + if ( $author_ip ) { + $author_ip_url = add_query_arg( array( 's' => $author_ip, 'mode' => 'detail' ), admin_url( 'edit-comments.php' ) ); + if ( 'spam' === $comment_status ) { + $author_ip_url = add_query_arg( 'comment_status', 'spam', $author_ip_url ); + } + printf( '%2$s', esc_url( $author_ip_url ), esc_html( $author_ip ) ); + } + } + } + + /** + * + * @param WP_Comment $comment The comment object. + */ + public function column_date( $comment ) { + /* translators: 1: comment date, 2: comment time */ + $submitted = sprintf( __( '%1$s at %2$s' ), + /* translators: comment date format. See https://secure.php.net/date */ + get_comment_date( __( 'Y/m/d' ), $comment ), + get_comment_date( __( 'g:i a' ), $comment ) + ); + + echo ''; + } + + /** + * + * @param WP_Comment $comment The comment object. + */ + public function column_response( $comment ) { + $post = get_post(); + + if ( ! $post ) { + return; + } + + 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 .= esc_html( get_the_title( $post->ID ) ) . ''; + } else { + $post_link = esc_html( get_the_title( $post->ID ) ); + } + + echo ''; + } + + /** + * + * @param WP_Comment $comment The comment object. + * @param string $column_name The custom column's name. + */ + public 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 ); + } +} diff --git a/wp-admin/includes/class-wp-community-events.php b/wp-admin/includes/class-wp-community-events.php new file mode 100644 index 0000000..bbb743d --- /dev/null +++ b/wp-admin/includes/class-wp-community-events.php @@ -0,0 +1,442 @@ +user_id = absint( $user_id ); + $this->user_location = $user_location; + } + + /** + * Gets data about events near a particular location. + * + * Cached events will be immediately returned if the `user_location` property + * is set for the current user, and cached events exist for that location. + * + * Otherwise, this method sends a request to the w.org Events API with location + * data. The API will send back a recognized location based on the data, along + * with nearby events. + * + * The browser's request for events is proxied with this method, rather + * than having the browser make the request directly to api.wordpress.org, + * because it allows results to be cached server-side and shared with other + * users and sites in the network. This makes the process more efficient, + * since increasing the number of visits that get cached data means users + * don't have to wait as often; if the user's browser made the request + * directly, it would also need to make a second request to WP in order to + * pass the data for caching. Having WP make the request also introduces + * the opportunity to anonymize the IP before sending it to w.org, which + * mitigates possible privacy concerns. + * + * @since 4.8.0 + * + * @param string $location_search Optional. City name to help determine the location. + * e.g., "Seattle". Default empty string. + * @param string $timezone Optional. Timezone to help determine the location. + * Default empty string. + * @return array|WP_Error A WP_Error on failure; an array with location and events on + * success. + */ + public function get_events( $location_search = '', $timezone = '' ) { + $cached_events = $this->get_cached_events(); + + if ( ! $location_search && $cached_events ) { + return $cached_events; + } + + // include an unmodified $wp_version + include( ABSPATH . WPINC . '/version.php' ); + + $api_url = 'http://api.wordpress.org/events/1.0/'; + $request_args = $this->get_request_args( $location_search, $timezone ); + $request_args['user-agent'] = 'WordPress/' . $wp_version . '; ' . home_url( '/' ); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + $api_url = set_url_scheme( $api_url, 'https' ); + } + + $response = wp_remote_get( $api_url, $request_args ); + $response_code = wp_remote_retrieve_response_code( $response ); + $response_body = json_decode( wp_remote_retrieve_body( $response ), true ); + $response_error = null; + + if ( is_wp_error( $response ) ) { + $response_error = $response; + } elseif ( 200 !== $response_code ) { + $response_error = new WP_Error( + 'api-error', + /* translators: %d: numeric HTTP status code, e.g. 400, 403, 500, 504, etc. */ + sprintf( __( 'Invalid API response code (%d)' ), $response_code ) + ); + } elseif ( ! isset( $response_body['location'], $response_body['events'] ) ) { + $response_error = new WP_Error( + 'api-invalid-response', + isset( $response_body['error'] ) ? $response_body['error'] : __( 'Unknown API error.' ) + ); + } + + if ( is_wp_error( $response_error ) ) { + return $response_error; + } else { + $expiration = false; + + if ( isset( $response_body['ttl'] ) ) { + $expiration = $response_body['ttl']; + unset( $response_body['ttl'] ); + } + + /* + * The IP in the response is usually the same as the one that was sent + * in the request, but in some cases it is different. In those cases, + * it's important to reset it back to the IP from the request. + * + * For example, if the IP sent in the request is private (e.g., 192.168.1.100), + * then the API will ignore that and use the corresponding public IP instead, + * and the public IP will get returned. If the public IP were saved, though, + * then get_cached_events() would always return `false`, because the transient + * would be generated based on the public IP when saving the cache, but generated + * based on the private IP when retrieving the cache. + */ + if ( ! empty( $response_body['location']['ip'] ) ) { + $response_body['location']['ip'] = $request_args['body']['ip']; + } + + /* + * The API doesn't return a description for latitude/longitude requests, + * but the description is already saved in the user location, so that + * one can be used instead. + */ + if ( $this->coordinates_match( $request_args['body'], $response_body['location'] ) && empty( $response_body['location']['description'] ) ) { + $response_body['location']['description'] = $this->user_location['description']; + } + + $this->cache_events( $response_body, $expiration ); + + $response_body = $this->trim_events( $response_body ); + $response_body = $this->format_event_data_time( $response_body ); + + return $response_body; + } + } + + /** + * Builds an array of args to use in an HTTP request to the w.org Events API. + * + * @since 4.8.0 + * + * @param string $search Optional. City search string. Default empty string. + * @param string $timezone Optional. Timezone string. Default empty string. + * @return array The request args. + */ + protected function get_request_args( $search = '', $timezone = '' ) { + $args = array( + 'number' => 5, // Get more than three in case some get trimmed out. + 'ip' => self::get_unsafe_client_ip(), + ); + + /* + * Include the minimal set of necessary arguments, in order to increase the + * chances of a cache-hit on the API side. + */ + if ( empty( $search ) && isset( $this->user_location['latitude'], $this->user_location['longitude'] ) ) { + $args['latitude'] = $this->user_location['latitude']; + $args['longitude'] = $this->user_location['longitude']; + } else { + $args['locale'] = get_user_locale( $this->user_id ); + + if ( $timezone ) { + $args['timezone'] = $timezone; + } + + if ( $search ) { + $args['location'] = $search; + } + } + + // Wrap the args in an array compatible with the second parameter of `wp_remote_get()`. + return array( + 'body' => $args + ); + } + + /** + * Determines the user's actual IP address and attempts to partially + * anonymize an IP address by converting it to a network ID. + * + * Geolocating the network ID usually returns a similar location as the + * actual IP, but provides some privacy for the user. + * + * $_SERVER['REMOTE_ADDR'] cannot be used in all cases, such as when the user + * is making their request through a proxy, or when the web server is behind + * a proxy. In those cases, $_SERVER['REMOTE_ADDR'] is set to the proxy address rather + * than the user's actual address. + * + * Modified from https://stackoverflow.com/a/2031935/450127, MIT license. + * Modified from https://github.com/geertw/php-ip-anonymizer, MIT license. + * + * SECURITY WARNING: This function is _NOT_ intended to be used in + * circumstances where the authenticity of the IP address matters. This does + * _NOT_ guarantee that the returned address is valid or accurate, and it can + * be easily spoofed. + * + * @since 4.8.0 + * + * @return false|string The anonymized address on success; the given address + * or false on failure. + */ + public static function get_unsafe_client_ip() { + $client_ip = $netmask = false; + + // In order of preference, with the best ones for this purpose first. + $address_headers = array( + 'HTTP_CLIENT_IP', + 'HTTP_X_FORWARDED_FOR', + 'HTTP_X_FORWARDED', + 'HTTP_X_CLUSTER_CLIENT_IP', + 'HTTP_FORWARDED_FOR', + 'HTTP_FORWARDED', + 'REMOTE_ADDR', + ); + + foreach ( $address_headers as $header ) { + if ( array_key_exists( $header, $_SERVER ) ) { + /* + * HTTP_X_FORWARDED_FOR can contain a chain of comma-separated + * addresses. The first one is the original client. It can't be + * trusted for authenticity, but we don't need to for this purpose. + */ + $address_chain = explode( ',', $_SERVER[ $header ] ); + $client_ip = trim( $address_chain[0] ); + + break; + } + } + + if ( ! $client_ip ) { + return false; + } + + $anon_ip = wp_privacy_anonymize_ip( $client_ip, true ); + + if ( '0.0.0.0' === $anon_ip || '::' === $anon_ip ) { + return false; + } + + return $anon_ip; + } + + /** + * Test if two pairs of latitude/longitude coordinates match each other. + * + * @since 4.8.0 + * + * @param array $a The first pair, with indexes 'latitude' and 'longitude'. + * @param array $b The second pair, with indexes 'latitude' and 'longitude'. + * @return bool True if they match, false if they don't. + */ + protected function coordinates_match( $a, $b ) { + if ( ! isset( $a['latitude'], $a['longitude'], $b['latitude'], $b['longitude'] ) ) { + return false; + } + + return $a['latitude'] === $b['latitude'] && $a['longitude'] === $b['longitude']; + } + + /** + * Generates a transient key based on user location. + * + * This could be reduced to a one-liner in the calling functions, but it's + * intentionally a separate function because it's called from multiple + * functions, and having it abstracted keeps the logic consistent and DRY, + * which is less prone to errors. + * + * @since 4.8.0 + * + * @param array $location Should contain 'latitude' and 'longitude' indexes. + * @return bool|string false on failure, or a string on success. + */ + protected function get_events_transient_key( $location ) { + $key = false; + + if ( isset( $location['ip'] ) ) { + $key = 'community-events-' . md5( $location['ip'] ); + } else if ( isset( $location['latitude'], $location['longitude'] ) ) { + $key = 'community-events-' . md5( $location['latitude'] . $location['longitude'] ); + } + + return $key; + } + + /** + * Caches an array of events data from the Events API. + * + * @since 4.8.0 + * + * @param array $events Response body from the API request. + * @param int|bool $expiration Optional. Amount of time to cache the events. Defaults to false. + * @return bool true if events were cached; false if not. + */ + protected function cache_events( $events, $expiration = false ) { + $set = false; + $transient_key = $this->get_events_transient_key( $events['location'] ); + $cache_expiration = $expiration ? absint( $expiration ) : HOUR_IN_SECONDS * 12; + + if ( $transient_key ) { + $set = set_site_transient( $transient_key, $events, $cache_expiration ); + } + + return $set; + } + + /** + * Gets cached events. + * + * @since 4.8.0 + * + * @return false|array false on failure; an array containing `location` + * and `events` items on success. + */ + public function get_cached_events() { + $cached_response = get_site_transient( $this->get_events_transient_key( $this->user_location ) ); + $cached_response = $this->trim_events( $cached_response ); + + return $this->format_event_data_time( $cached_response ); + } + + /** + * Adds formatted date and time items for each event in an API response. + * + * This has to be called after the data is pulled from the cache, because + * the cached events are shared by all users. If it was called before storing + * the cache, then all users would see the events in the localized data/time + * of the user who triggered the cache refresh, rather than their own. + * + * @since 4.8.0 + * + * @param array $response_body The response which contains the events. + * @return array The response with dates and times formatted. + */ + protected function format_event_data_time( $response_body ) { + if ( isset( $response_body['events'] ) ) { + foreach ( $response_body['events'] as $key => $event ) { + $timestamp = strtotime( $event['date'] ); + + /* + * The `date_format` option is not used because it's important + * in this context to keep the day of the week in the formatted date, + * so that users can tell at a glance if the event is on a day they + * are available, without having to open the link. + */ + /* translators: Date format for upcoming events on the dashboard. Include the day of the week. See https://secure.php.net/date. */ + $response_body['events'][ $key ]['formatted_date'] = date_i18n( __( 'l, M j, Y' ), $timestamp ); + $response_body['events'][ $key ]['formatted_time'] = date_i18n( get_option( 'time_format' ), $timestamp ); + } + } + + return $response_body; + } + + /** + * Discards expired events, and reduces the remaining list. + * + * @since 4.8.0 + * + * @param array $response_body The response body which contains the events. + * @return array The response body with events trimmed. + */ + protected function trim_events( $response_body ) { + if ( isset( $response_body['events'] ) ) { + $current_timestamp = current_time( 'timestamp' ); + + foreach ( $response_body['events'] as $key => $event ) { + // Skip WordCamps, because they might be multi-day events. + if ( 'meetup' !== $event['type'] ) { + continue; + } + + $event_timestamp = strtotime( $event['date'] ); + + if ( $current_timestamp > $event_timestamp && ( $current_timestamp - $event_timestamp ) > DAY_IN_SECONDS ) { + unset( $response_body['events'][ $key ] ); + } + } + + $response_body['events'] = array_slice( $response_body['events'], 0, 3 ); + } + + return $response_body; + } + + /** + * Logs responses to Events API requests. + * + * @since 4.8.0 + * @deprecated 4.9.0 Use a plugin instead. See #41217 for an example. + * + * @param string $message A description of what occurred. + * @param array $details Details that provide more context for the + * log entry. + */ + protected function maybe_log_events_response( $message, $details ) { + _deprecated_function( __METHOD__, '4.9.0' ); + + if ( ! WP_DEBUG_LOG ) { + return; + } + + error_log( sprintf( + '%s: %s. Details: %s', + __METHOD__, + trim( $message, '.' ), + wp_json_encode( $details ) + ) ); + } +} diff --git a/wp-admin/includes/class-wp-filesystem-base.php b/wp-admin/includes/class-wp-filesystem-base.php new file mode 100644 index 0000000..0611305 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-base.php @@ -0,0 +1,801 @@ +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( '/' . WPINC ) ) + $folder = '/'; + return $folder; + } + + /** + * Return the path on the remote filesystem of WP_CONTENT_DIR. + * + * @since 2.7.0 + * + * @return string The location of the remote path. + */ + public function wp_content_dir() { + return $this->find_folder(WP_CONTENT_DIR); + } + + /** + * Return the path on the remote filesystem of WP_PLUGIN_DIR. + * + * @since 2.7.0 + * + * @return string The location of the remote path. + */ + public function wp_plugins_dir() { + return $this->find_folder(WP_PLUGIN_DIR); + } + + /** + * Return the path on the remote filesystem of the Themes Directory. + * + * @since 2.7.0 + * + * @param string $theme The Theme stylesheet or template for the directory. + * @return string The location of the remote path. + */ + public 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. + * + * @since 3.2.0 + * + * @return string The location of the remote path. + */ + public function wp_lang_dir() { + return $this->find_folder(WP_LANG_DIR); + } + + /** + * Locate a folder on the remote filesystem. + * + * @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. + */ + public function find_base_dir( $base = '.', $echo = false ) { + _deprecated_function(__FUNCTION__, '2.7.0', 'WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir()' ); + $this->verbose = $echo; + return $this->abspath(); + } + + /** + * Locate a folder on the remote filesystem. + * + * @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. + */ + public function get_base_dir( $base = '.', $echo = false ) { + _deprecated_function(__FUNCTION__, '2.7.0', '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. + * + * @since 2.7.0 + * + * @param string $folder the folder to locate. + * @return string|false The location of the remote path, false on failure. + */ + public 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. + * + * @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|false The location of the remote path, false to cease looping. + */ + public function search_for_folder( $folder, $base = '.', $loop = false ) { + if ( empty( $base ) || '.' == $base ) + $base = trailingslashit($this->cwd()); + + $folder = untrailingslashit($folder); + + if ( $this->verbose ) { + /* translators: 1: folder to locate, 2: folder to start searching from */ + 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 ]) ){ + + // Let's try that folder: + $newdir = trailingslashit(path_join($base, $key)); + if ( $this->verbose ) { + /* translators: %s: directory name */ + 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 ) { + /* translators: %s: directory name */ + 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 https://secure.php.net/manual/en/function.fileperms.php + * + * @since 2.5.0 + * + * @param string $file String filename. + * @return string The *nix-style representation of permissions. + */ + public function gethchmod( $file ){ + $perms = intval( $this->getchmod( $file ), 8 ); + 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; + } + + /** + * Gets the permissions of the specified file or filepath in their octal format + * + * @since 2.5.0 + * @param string $file + * @return string the last 3 characters of the octal number + */ + public function getchmod( $file ) { + return '777'; + } + + /** + * 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 https://secure.php.net/manual/en/function.chmod.php#49614 + * + * @since 2.5.0 + * + * @param string $mode string The *nix-style file permission. + * @return int octal representation + */ + public function getnumchmodfromh( $mode ) { + $realmode = ''; + $legal = array('', 'w', 'r', 'x', '-'); + $attarray = preg_split('//', $mode); + + for ( $i = 0, $c = count( $attarray ); $i < $c; $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. + * + * @since 2.7.0 + * + * @param string $text String to test against. + * @return bool true if string is binary, false otherwise. + */ + public 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. + */ + public function chown( $file, $owner, $recursive = false ) { + return false; + } + + /** + * Connect filesystem. + * + * @since 2.5.0 + * @abstract + * + * @return bool True on success or false on failure (always true for WP_Filesystem_Direct). + */ + public function connect() { + return true; + } + + /** + * Read entire file into a string. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Name of the file to read. + * @return mixed|bool Returns the read data or false on failure. + */ + public function get_contents( $file ) { + return false; + } + + /** + * Read entire file into an array. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @return array|bool the file contents in an array or false on failure. + */ + public function get_contents_array( $file ) { + return false; + } + + /** + * Write a string to a file. + * + * @since 2.5.0 + * @abstract + * + * @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. + */ + public function put_contents( $file, $contents, $mode = false ) { + return false; + } + + /** + * Get the current working directory. + * + * @since 2.5.0 + * @abstract + * + * @return string|bool The current working directory on success, or false on failure. + */ + public function cwd() { + return false; + } + + /** + * Change current directory. + * + * @since 2.5.0 + * @abstract + * + * @param string $dir The new current directory. + * @return bool|string + */ + public function chdir( $dir ) { + return false; + } + + /** + * Change the file group. + * + * @since 2.5.0 + * @abstract + * + * @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|string + */ + public function chgrp( $file, $group, $recursive = false ) { + return false; + } + + /** + * Change filesystem permissions. + * + * @since 2.5.0 + * @abstract + * + * @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|string + */ + public function chmod( $file, $mode = false, $recursive = false ) { + return false; + } + + /** + * Get the file owner. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @return string|bool Username of the user or false on error. + */ + public function owner( $file ) { + return false; + } + + /** + * Get the file's group. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @return string|bool The group or false on error. + */ + public function group( $file ) { + return false; + } + + /** + * Copy a file. + * + * @since 2.5.0 + * @abstract + * + * @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. + */ + public function copy( $source, $destination, $overwrite = false, $mode = false ) { + return false; + } + + /** + * Move a file. + * + * @since 2.5.0 + * @abstract + * + * @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. + */ + public function move( $source, $destination, $overwrite = false ) { + return false; + } + + /** + * Delete a file or directory. + * + * @since 2.5.0 + * @abstract + * + * @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. + */ + public function delete( $file, $recursive = false, $type = false ) { + return false; + } + + /** + * Check if a file or directory exists. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file/directory. + * @return bool Whether $file exists or not. + */ + public function exists( $file ) { + return false; + } + + /** + * Check if resource is a file. + * + * @since 2.5.0 + * @abstract + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + public function is_file( $file ) { + return false; + } + + /** + * Check if resource is a directory. + * + * @since 2.5.0 + * @abstract + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + public function is_dir( $path ) { + return false; + } + + /** + * Check if a file is readable. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + public function is_readable( $file ) { + return false; + } + + /** + * Check if a file or directory is writable. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file. + * @return bool Whether $file is writable. + */ + public function is_writable( $file ) { + return false; + } + + /** + * Gets the file's last access time. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file. + * @return int|bool Unix timestamp representing last access time. + */ + public function atime( $file ) { + return false; + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file. + * @return int|bool Unix timestamp representing modification time. + */ + public function mtime( $file ) { + return false; + } + + /** + * Gets the file size (in bytes). + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file. + * @return int|bool Size of the file in bytes. + */ + public 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 + * @abstract + * + * @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. + */ + public function touch( $file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * Create a directory. + * + * @since 2.5.0 + * @abstract + * + * @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. + */ + public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { + return false; + } + + /** + * Delete a directory. + * + * @since 2.5.0 + * @abstract + * + * @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. + */ + public function rmdir( $path, $recursive = false ) { + return false; + } + + /** + * Get details for files in a directory or a specific file. + * + * @since 2.5.0 + * @abstract + * + * @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. + * } + */ + public 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..42c8fe2 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-direct.php @@ -0,0 +1,489 @@ +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. + */ + public 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. + */ + public 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. + * Default false. + * @return bool False upon failure, true otherwise. + */ + public 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. + */ + public function cwd() { + return @getcwd(); + } + + /** + * Change directory + * + * + * @param string $dir The new current directory. + * @return bool Returns true on success or false on failure. + */ + public 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. Default false. + * @return bool Returns true on success or false on failure. + */ + public 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. Default false. + * @param bool $recursive Optional. If set True changes file group recursively. Default false. + * @return bool Returns true on success or false on failure. + */ + public 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. + * Default false. + * @return bool Returns true on success or false on failure. + */ + public 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. + */ + public 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). + */ + public function getchmod($file) { + return substr( decoct( @fileperms( $file ) ), -3 ); + } + + /** + * + * @param string $file + * @return string|false + */ + public function group($file) { + $gid = @filegroup($file); + if ( ! $gid ) + return false; + if ( ! function_exists('posix_getgrgid') ) + return $gid; + $grouparray = posix_getgrgid($gid); + return $grouparray['name']; + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @param int $mode + * @return bool + */ + public 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; + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @return bool + */ + public 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; + } + } + + /** + * + * @param string $file + * @param bool $recursive + * @param string $type + * @return bool + */ + public 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; + } + /** + * + * @param string $file + * @return bool + */ + public function exists($file) { + return @file_exists($file); + } + /** + * + * @param string $file + * @return bool + */ + public function is_file($file) { + return @is_file($file); + } + /** + * + * @param string $path + * @return bool + */ + public function is_dir($path) { + return @is_dir($path); + } + + /** + * + * @param string $file + * @return bool + */ + public function is_readable($file) { + return @is_readable($file); + } + + /** + * + * @param string $file + * @return bool + */ + public function is_writable($file) { + return @is_writable($file); + } + + /** + * + * @param string $file + * @return int + */ + public function atime($file) { + return @fileatime($file); + } + + /** + * + * @param string $file + * @return int + */ + public function mtime($file) { + return @filemtime($file); + } + + /** + * + * @param string $file + * @return int + */ + public function size($file) { + return @filesize($file); + } + + /** + * + * @param string $file + * @param int $time + * @param int $atime + * @return bool + */ + public function touch($file, $time = 0, $atime = 0) { + if ($time == 0) + $time = time(); + if ($atime == 0) + $atime = time(); + return @touch($file, $time, $atime); + } + + /** + * + * @param string $path + * @param mixed $chmod + * @param mixed $chown + * @param mixed $chgrp + * @return bool + */ + public 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; + } + + /** + * + * @param string $path + * @param bool $recursive + * @return bool + */ + public function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + /** + * + * @param string $path + * @param bool $include_hidden + * @param bool $recursive + * @return bool|array + */ + public 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..52e4357 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -0,0 +1,581 @@ +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; + } + + // 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']; + + // 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; + } + + /** + * + * @return bool + */ + public 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', + /* translators: %s: hostname:port */ + sprintf( __( 'Failed to connect to FTP Server %s' ), + $this->options['hostname'] . ':' . $this->options['port'] + ) + ); + return false; + } + + if ( ! @ftp_login( $this->link,$this->options['username'], $this->options['password'] ) ) { + $this->errors->add( 'auth', + /* translators: %s: username */ + 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; + } + + /** + * Retrieves the file contents. + * + * @since 2.5.0 + * + * @param string $file Filename. + * @return string|false File contents on success, false if no temp file could be opened, + * or if the file couldn't be retrieved. + */ + public function get_contents( $file ) { + $tempfile = wp_tempnam($file); + $temp = fopen($tempfile, 'w+'); + + if ( ! $temp ) { + unlink( $tempfile ); + return false; + } + + if ( ! @ftp_fget( $this->link, $temp, $file, FTP_BINARY ) ) { + fclose( $temp ); + unlink( $tempfile ); + 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; + } + + /** + * + * @param string $file + * @return array + */ + public function get_contents_array($file) { + return explode("\n", $this->get_contents($file)); + } + + /** + * + * @param string $file + * @param string $contents + * @param bool|int $mode + * @return bool + */ + public function put_contents($file, $contents, $mode = false ) { + $tempfile = wp_tempnam($file); + $temp = fopen( $tempfile, 'wb+' ); + + if ( ! $temp ) { + unlink( $tempfile ); + 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; + } + + /** + * + * @return string + */ + public function cwd() { + $cwd = @ftp_pwd($this->link); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + /** + * + * @param string $dir + * @return bool + */ + public function chdir($dir) { + return @ftp_chdir($this->link, $dir); + } + + /** + * + * @param string $file + * @param int $mode + * @param bool $recursive + * @return bool + */ + public 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); + } + + /** + * + * @param string $file + * @return string + */ + public function owner($file) { + $dir = $this->dirlist($file); + return $dir[$file]['owner']; + } + /** + * + * @param string $file + * @return string + */ + public function getchmod($file) { + $dir = $this->dirlist($file); + return $dir[$file]['permsn']; + } + + /** + * + * @param string $file + * @return string + */ + public function group($file) { + $dir = $this->dirlist($file); + return $dir[$file]['group']; + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @param string|bool $mode + * @return bool + */ + public 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); + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @return bool + */ + public function move($source, $destination, $overwrite = false) { + return ftp_rename($this->link, $source, $destination); + } + + /** + * + * @param string $file + * @param bool $recursive + * @param string $type + * @return bool + */ + public 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); + } + + /** + * + * @param string $file + * @return bool + */ + public function exists($file) { + $list = @ftp_nlist($this->link, $file); + + if ( empty( $list ) && $this->is_dir( $file ) ) { + return true; // File is an empty directory. + } + + return !empty($list); //empty list = no file, so invert. + } + + /** + * + * @param string $file + * @return bool + */ + public function is_file($file) { + return $this->exists($file) && !$this->is_dir($file); + } + + /** + * + * @param string $path + * @return bool + */ + public 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; + } + + /** + * + * @param string $file + * @return bool + */ + public function is_readable($file) { + return true; + } + + /** + * + * @param string $file + * @return bool + */ + public function is_writable($file) { + return true; + } + + /** + * + * @param string $file + * @return bool + */ + public function atime($file) { + return false; + } + + /** + * + * @param string $file + * @return int + */ + public function mtime($file) { + return ftp_mdtm($this->link, $file); + } + + /** + * + * @param string $file + * @return int + */ + public function size($file) { + return ftp_size($this->link, $file); + } + + /** + * + * @param string $file + * @return bool + */ + public function touch($file, $time = 0, $atime = 0) { + return false; + } + + /** + * + * @param string $path + * @param mixed $chmod + * @param mixed $chown + * @param mixed $chgrp + * @return bool + */ + public 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); + return true; + } + + /** + * + * @param string $path + * @param bool $recursive + * @return bool + */ + public function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + /** + * + * @staticvar bool $is_windows + * @param string $line + * @return array + */ + public function parselisting($line) { + static $is_windows = null; + 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['permsn'] = $this->getnumchmodfromh( $b['perms'] ); + $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 ( isset( $b['islink'] ) && $b['islink'] ) { + $b['name'] = preg_replace( '/(\s*->\s*.*)$/', '', $b['name'] ); + } + + return $b; + } + + /** + * + * @param string $path + * @param bool $include_hidden + * @param bool $recursive + * @return bool|array + */ + public 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; + } + + /** + */ + public 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..3366554 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -0,0 +1,517 @@ +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; + } + $this->ftp = new ftp(); + + if ( empty($opt['port']) ) + $this->options['port'] = 21; + else + $this->options['port'] = (int) $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('FTP hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + // 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']; + } + + /** + * + * @return bool + */ + public 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', + /* translators: %s: hostname:port */ + sprintf( __( 'Failed to connect to FTP Server %s' ), + $this->options['hostname'] . ':' . $this->options['port'] + ) + ); + return false; + } + + if ( ! $this->ftp->connect() ) { + $this->errors->add( 'connect', + /* translators: %s: hostname:port */ + sprintf( __( 'Failed to connect to FTP Server %s' ), + $this->options['hostname'] . ':' . $this->options['port'] + ) + ); + return false; + } + + if ( ! $this->ftp->login( $this->options['username'], $this->options['password'] ) ) { + $this->errors->add( 'auth', + /* translators: %s: username */ + 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; + } + + /** + * Retrieves the file contents. + * + * @since 2.5.0 + * + * @param string $file Filename. + * @return string|false File contents on success, false if no temp file could be opened, + * or if the file doesn't exist. + */ + public function get_contents( $file ) { + if ( ! $this->exists($file) ) + return false; + + $temp = wp_tempnam( $file ); + + if ( ! $temphandle = fopen( $temp, 'w+' ) ) { + unlink( $temp ); + 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; + } + + /** + * + * @param string $file + * @return array + */ + public function get_contents_array($file) { + return explode("\n", $this->get_contents($file) ); + } + + /** + * + * @param string $file + * @param string $contents + * @param int|bool $mode + * @return bool + */ + public 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; + } + + /** + * + * @return string + */ + public function cwd() { + $cwd = $this->ftp->pwd(); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + /** + * + * @param string $file + * @return bool + */ + public function chdir($file) { + return $this->ftp->chdir($file); + } + + /** + * + * @param string $file + * @param int|bool $mode + * @param bool $recursive + * @return bool + */ + public 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); + } + + /** + * + * @param string $file + * @return string + */ + public function owner($file) { + $dir = $this->dirlist($file); + return $dir[$file]['owner']; + } + + /** + * + * @param string $file + * @return string + */ + public function getchmod($file) { + $dir = $this->dirlist($file); + return $dir[$file]['permsn']; + } + + /** + * + * @param string $file + * @return string + */ + public function group($file) { + $dir = $this->dirlist($file); + return $dir[$file]['group']; + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @param int|bool $mode + * @return bool + */ + public 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); + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @return bool + */ + public function move($source, $destination, $overwrite = false ) { + return $this->ftp->rename($source, $destination); + } + + /** + * + * @param string $file + * @param bool $recursive + * @param string $type + * @return bool + */ + public 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); + } + + /** + * + * @param string $file + * @return bool + */ + public function exists( $file ) { + $list = $this->ftp->nlist( $file ); + + if ( empty( $list ) && $this->is_dir( $file ) ) { + return true; // File is an empty directory. + } + + 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. + } + + /** + * + * @param string $file + * @return bool + */ + public function is_file($file) { + if ( $this->is_dir($file) ) + return false; + if ( $this->exists($file) ) + return true; + return false; + } + + /** + * + * @param string $path + * @return bool + */ + public function is_dir($path) { + $cwd = $this->cwd(); + if ( $this->chdir($path) ) { + $this->chdir($cwd); + return true; + } + return false; + } + + /** + * + * @param string $file + * @return bool + */ + public function is_readable($file) { + return true; + } + + /** + * + * @param string $file + * @return bool + */ + public function is_writable($file) { + return true; + } + + /** + * + * @param string $file + * @return bool + */ + public function atime($file) { + return false; + } + + /** + * + * @param string $file + * @return int + */ + public function mtime($file) { + return $this->ftp->mdtm($file); + } + + /** + * @param string $file + * @return int + */ + public function size($file) { + return $this->ftp->filesize($file); + } + + /** + * + * @param string $file + * @param int $time + * @param int $atime + * @return bool + */ + public function touch($file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * + * @param string $path + * @param mixed $chmod + * @param mixed $chown + * @param mixed $chgrp + * @return bool + */ + public 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); + return true; + } + + /** + * + * @param string $path + * @param bool $recursive + * @return bool + */ + public function rmdir($path, $recursive = false ) { + return $this->delete($path, $recursive); + } + + /** + * + * @param string $path + * @param bool $include_hidden + * @param bool $recursive + * @return bool|array + */ + public 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'] ); + + // Add the Octal representation of the file permissions + $struc['permsn'] = $this->getnumchmodfromh( $struc['perms'] ); + + $ret[ $struc['name'] ] = $struc; + } + + reset_mbstring_encoding(); + + return $ret; + } + + /** + */ + public 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..072fdce --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ssh2.php @@ -0,0 +1,599 @@ +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; + } + if ( !function_exists('stream_get_contents') ) { + $this->errors->add( + 'ssh2_php_requirement', + sprintf( + /* translators: %s: stream_get_contents() */ + __( 'The ssh2 PHP extension is available, however, we require the PHP5 function %s' ), + 'stream_get_contents()' + ) + ); + return; + } + + // 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']; + + // 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']) ) { + // Password can be blank if we are using keys. + if ( !$this->keys ) + $this->errors->add('empty_password', __('SSH2 password is required')); + } else { + $this->options['password'] = $opt['password']; + } + } + + /** + * + * @return bool + */ + public 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', + /* translators: %s: hostname:port */ + sprintf( __( 'Failed to connect to SSH2 Server %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', + /* translators: %s: username */ + 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', + /* translators: %s: username */ + sprintf( __( 'Public and Private keys incorrect for %s' ), + $this->options['username'] + ) + ); + return false; + } + } + + $this->sftp_link = ssh2_sftp( $this->link ); + if ( ! $this->sftp_link ) { + $this->errors->add( 'connect', + /* translators: %s: hostname:port */ + sprintf( __( 'Failed to initialize a SFTP subsystem session with the SSH2 Server %s' ), + $this->options['hostname'] . ':' . $this->options['port'] + ) + ); + return false; + } + + return true; + } + + /** + * Gets the ssh2.sftp PHP stream wrapper path to open for the given file. + * + * This method also works around a PHP bug where the root directory (/) cannot + * be opened by PHP functions, causing a false failure. In order to work around + * this, the path is converted to /./ which is semantically the same as / + * See https://bugs.php.net/bug.php?id=64169 for more details. + * + * + * @since 4.4.0 + * + * @param string $path The File/Directory path on the remote server to return + * @return string The ssh2.sftp:// wrapped path to use. + */ + public function sftp_path( $path ) { + if ( '/' === $path ) { + $path = '/./'; + } + return 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $path, '/' ); + } + + /** + * + * @param string $command + * @param bool $returnbool + * @return bool|string True on success, false on failure. String if the command was executed, `$returnbool` + * is false (default), and data from the resulting stream was retrieved. + */ + public function run_command( $command, $returnbool = false ) { + if ( ! $this->link ) + return false; + + if ( ! ($stream = ssh2_exec($this->link, $command)) ) { + $this->errors->add( 'command', + /* translators: %s: 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; + } + + /** + * + * @param string $file + * @return string|false + */ + public function get_contents( $file ) { + return file_get_contents( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @return array + */ + public function get_contents_array($file) { + return file( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @param string $contents + * @param bool|int $mode + * @return bool + */ + public function put_contents($file, $contents, $mode = false ) { + $ret = file_put_contents( $this->sftp_path( $file ), $contents ); + + if ( $ret !== strlen( $contents ) ) + return false; + + $this->chmod($file, $mode); + + return true; + } + + /** + * + * @return bool + */ + public function cwd() { + $cwd = ssh2_sftp_realpath( $this->sftp_link, '.' ); + if ( $cwd ) { + $cwd = trailingslashit( trim( $cwd ) ); + } + return $cwd; + } + + /** + * + * @param string $dir + * @return bool|string + */ + public function chdir($dir) { + return $this->run_command('cd ' . $dir, true); + } + + /** + * + * @param string $file + * @param string $group + * @param bool $recursive + * + * @return bool + */ + public 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); + } + + /** + * + * @param string $file + * @param int $mode + * @param bool $recursive + * @return bool|string + */ + public 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. + * + * + * @param string $file Path to the file. + * @param string|int $owner A user name or number. + * @param bool $recursive Optional. If set True changes file owner recursivly. Default False. + * @return bool True on success or false on failure. + */ + public 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); + } + + /** + * + * @param string $file + * @return string|false + */ + public function owner($file) { + $owneruid = @fileowner( $this->sftp_path( $file ) ); + if ( ! $owneruid ) + return false; + if ( ! function_exists('posix_getpwuid') ) + return $owneruid; + $ownerarray = posix_getpwuid($owneruid); + return $ownerarray['name']; + } + + /** + * + * @param string $file + * @return string + */ + public function getchmod($file) { + return substr( decoct( @fileperms( $this->sftp_path( $file ) ) ), -3 ); + } + + /** + * + * @param string $file + * @return string|false + */ + public function group($file) { + $gid = @filegroup( $this->sftp_path( $file ) ); + if ( ! $gid ) + return false; + if ( ! function_exists('posix_getgrgid') ) + return $gid; + $grouparray = posix_getgrgid($gid); + return $grouparray['name']; + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @param int|bool $mode + * @return bool + */ + public 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); + } + + /** + * + * @param string $source + * @param string $destination + * @param bool $overwrite + * @return bool + */ + public function move($source, $destination, $overwrite = false) { + return @ssh2_sftp_rename( $this->sftp_link, $source, $destination ); + } + + /** + * + * @param string $file + * @param bool $recursive + * @param string|bool $type + * @return bool + */ + public 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); + } + + /** + * + * @param string $file + * @return bool + */ + public function exists($file) { + return file_exists( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @return bool + */ + public function is_file($file) { + return is_file( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $path + * @return bool + */ + public function is_dir($path) { + return is_dir( $this->sftp_path( $path ) ); + } + + /** + * + * @param string $file + * @return bool + */ + public function is_readable($file) { + return is_readable( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @return bool + */ + public function is_writable($file) { + // PHP will base it's writable checks on system_user === file_owner, not ssh_user === file_owner + return true; + } + + /** + * + * @param string $file + * @return int + */ + public function atime($file) { + return fileatime( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @return int + */ + public function mtime($file) { + return filemtime( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @return int + */ + public function size($file) { + return filesize( $this->sftp_path( $file ) ); + } + + /** + * + * @param string $file + * @param int $time + * @param int $atime + */ + public function touch($file, $time = 0, $atime = 0) { + //Not implemented. + } + + /** + * + * @param string $path + * @param mixed $chmod + * @param mixed $chown + * @param mixed $chgrp + * @return bool + */ + public 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; + } + + /** + * + * @param string $path + * @param bool $recursive + * @return bool + */ + public function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + /** + * + * @param string $path + * @param bool $include_hidden + * @param bool $recursive + * @return bool|array + */ + public 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( $this->sftp_path( $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..c5d400b --- /dev/null +++ b/wp-admin/includes/class-wp-importer.php @@ -0,0 +1,323 @@ +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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param string $importer_name + * @param string $bid + * @return int + */ + public 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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param string $bid + * @return array + */ + public 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; + } + + /** + * + * @param int $blog_id + * @return int|void + */ + public 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'] = '/'; + } + $blogs = get_sites( array( 'domain' => $parsed['host'], 'number' => 1, 'path' => $parsed['path'] ) ); + if ( ! $blogs ) { + fwrite( STDERR, "Error: Could not find blog\n" ); + exit(); + } + $blog = array_shift( $blogs ); + $blog_id = (int) $blog->blog_id; + } + + if ( function_exists( 'is_multisite' ) ) { + if ( is_multisite() ) + switch_to_blog( $blog_id ); + } + + return $blog_id; + } + + /** + * + * @param int $user_id + * @return int|void + */ + public 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 + */ + public 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 + */ + public 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 + */ + public function bump_request_timeout( $val ) { + return 60; + } + + /** + * Check if user has exceeded disk quota + * + * @return bool + */ + public function is_user_over_quota() { + if ( function_exists( 'upload_is_user_over_quota' ) ) { + if ( upload_is_user_over_quota() ) { + return true; + } + } + + return false; + } + + /** + * Replace newlines, tabs, and multiple spaces with a single space + * + * @param string $string + * @return string + */ + public function min_whitespace( $string ) { + return preg_replace( '|[\r\n\t ]+|', ' ', $string ); + } + + /** + * Resets global variables that grow out of control during imports. + * + * @since 3.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global array $wp_actions + */ + public 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; + } elseif ( (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; + } elseif ( $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-internal-pointers.php b/wp-admin/includes/class-wp-internal-pointers.php new file mode 100644 index 0000000..abdb0de --- /dev/null +++ b/wp-admin/includes/class-wp-internal-pointers.php @@ -0,0 +1,203 @@ + pointer callback + * ) + * + * Example: + * array( + * 'themes.php' => 'wp390_widgets' + * ) + */ + $registered_pointers = array( + 'index.php' => 'wp496_privacy', + ); + + // Check if screen related pointer is registered + if ( empty( $registered_pointers[ $hook_suffix ] ) ) + return; + + $pointers = (array) $registered_pointers[ $hook_suffix ]; + + /* + * Specify required capabilities for feature pointers + * + * Format: + * array( + * pointer callback => Array of required capabilities + * ) + * + * Example: + * array( + * 'wp390_widgets' => array( 'edit_theme_options' ) + * ) + */ + $caps_required = array( + 'wp496_privacy' => array( + 'manage_privacy_options', + 'export_others_personal_data', + 'erase_others_personal_data', + ), + ); + + // 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 + * + * @static + * + * @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; + + ?> + + ' . __( 'Personal Data and Privacy' ) . ''; + $content .= '

      ' . __( 'Personal Data Export and Erasure' ) . '

      '; + $content .= '

      ' . __( 'New Tools have been added to help you with personal data export and erasure requests.' ) . '

      '; + $content .= '

      ' . __( 'Privacy Policy' ) . '

      '; + $content .= '

      ' . __( 'Create or select your site’s privacy policy page under Settings > Privacy to keep your users informed and aware.' ) . '

      '; + + if ( is_rtl() ) { + $position = array( + 'edge' => 'right', + 'align' => 'bottom', + ); + } else { + $position = array( + 'edge' => 'left', + 'align' => 'bottom', + ); + } + + $js_args = array( + 'content' => $content, + 'position' => $position, + 'pointerClass' => 'wp-pointer arrow-bottom', + 'pointerWidth' => 420, + ); + self::print_js( 'wp496_privacy', '#menu-tools', $js_args ); + } + + /** + * Prevents new users from seeing existing 'new feature' pointers. + * + * @since 3.3.0 + * + * @static + * + * @param int $user_id User ID. + */ + public static function dismiss_pointers_for_new_users( $user_id ) { + add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp496_privacy' ); + } +} 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..0c24121 --- /dev/null +++ b/wp-admin/includes/class-wp-links-list-table.php @@ -0,0 +1,321 @@ + 'bookmarks', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + /** + * + * @return bool + */ + public function ajax_user_can() { + return current_user_can( 'manage_links' ); + } + + /** + * + * @global int $cat_id + * @global string $s + * @global string $orderby + * @global string $order + */ + public 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 ); + } + + /** + */ + public function no_items() { + _e( 'No links found.' ); + } + + /** + * + * @return array + */ + protected function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete' ); + + return $actions; + } + + /** + * + * @global int $cat_id + * @param string $which + */ + protected function extra_tablenav( $which ) { + global $cat_id; + + if ( 'top' != $which ) + return; +?> +
      + $cat_id, + 'name' => 'cat_id', + 'taxonomy' => 'link_category', + 'show_option_all' => get_taxonomy( 'link_category' )->labels->all_items, + 'hide_empty' => true, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + ); + + echo ''; + wp_dropdown_categories( $dropdown_options ); + submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) ); +?> +
      + '', + 'name' => _x( 'Name', 'link name' ), + 'url' => __( 'URL' ), + 'categories' => __( 'Categories' ), + 'rel' => __( 'Relationship' ), + 'visible' => __( 'Visible' ), + 'rating' => __( 'Rating' ) + ); + } + + /** + * + * @return array + */ + protected function get_sortable_columns() { + return array( + 'name' => 'name', + 'url' => 'url', + 'visible' => 'visible', + 'rating' => 'rating' + ); + } + + /** + * Get the name of the default primary column. + * + * @since 4.3.0 + * + * @return string Name of the default primary column, in this case, 'name'. + */ + protected function get_default_primary_column_name() { + return 'name'; + } + + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param object $link The current link object. + */ + public function column_cb( $link ) { + ?> + + + %s', + $edit_link, + /* translators: %s: link name */ + esc_attr( sprintf( __( 'Edit “%s”' ), $link->link_name ) ), + $link->link_name + ); + } + + /** + * Handles the link URL column output. + * + * @since 4.3.0 + * + * @param object $link The current link object. + */ + public function column_url( $link ) { + $short_url = url_shorten( $link->link_url ); + echo "$short_url"; + } + + /** + * Handles the link categories column output. + * + * @since 4.3.0 + * + * @global int $cat_id + * + * @param object $link The current link object. + */ + public function column_categories( $link ) { + global $cat_id; + + $cat_names = array(); + foreach ( $link->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 ); + } + + /** + * Handles the link relation column output. + * + * @since 4.3.0 + * + * @param object $link The current link object. + */ + public function column_rel( $link ) { + echo empty( $link->link_rel ) ? '
      ' : $link->link_rel; + } + + /** + * Handles the link visibility column output. + * + * @since 4.3.0 + * + * @param object $link The current link object. + */ + public function column_visible( $link ) { + if ( 'Y' === $link->link_visible ) { + _e( 'Yes' ); + } else { + _e( 'No' ); + } + } + + /** + * Handles the link rating column output. + * + * @since 4.3.0 + * + * @param object $link The current link object. + */ + public function column_rating( $link ) { + echo $link->link_rating; + } + + /** + * Handles the default column output. + * + * @since 4.3.0 + * + * @param object $link Link object. + * @param string $column_name Current column name. + */ + public function column_default( $link, $column_name ) { + /** + * Fires for each registered custom link column. + * + * @since 2.1.0 + * + * @param string $column_name Name of the custom column. + * @param int $link_id Link ID. + */ + do_action( 'manage_link_custom_column', $column_name, $link->link_id ); + } + + public function display_rows() { + 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 ); +?> + + single_row_columns( $link ) ?> + +' . __('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') . ""; + return $this->row_actions( $actions ); + } +} diff --git a/wp-admin/includes/class-wp-list-table-compat.php b/wp-admin/includes/class-wp-list-table-compat.php new file mode 100644 index 0000000..b52e04c --- /dev/null +++ b/wp-admin/includes/class-wp-list-table-compat.php @@ -0,0 +1,51 @@ +_screen = $screen; + + if ( !empty( $columns ) ) { + $this->_columns = $columns; + add_filter( 'manage_' . $screen->id . '_columns', array( $this, 'get_columns' ), 0 ); + } + } + + /** + * + * @return array + */ + protected function get_column_info() { + $columns = get_column_headers( $this->_screen ); + $hidden = get_hidden_columns( $this->_screen ); + $sortable = array(); + $primary = $this->get_default_primary_column_name(); + + return array( $columns, $hidden, $sortable, $primary ); + } + + /** + * + * @return array + */ + public function get_columns() { + return $this->_columns; + } +} diff --git a/wp-admin/includes/class-wp-list-table.php b/wp-admin/includes/class-wp-list-table.php new file mode 100644 index 0000000..d47b530 --- /dev/null +++ b/wp-admin/includes/class-wp-list-table.php @@ -0,0 +1,1323 @@ +get_column_info(). + * + * @since 4.1.0 + * @var array + */ + protected $_column_headers; + + /** + * {@internal Missing Summary} + * + * @var array + */ + protected $compat_fields = array( '_args', '_pagination_args', 'screen', '_actions', '_pagination' ); + + /** + * {@internal Missing Summary} + * + * @var array + */ + protected $compat_methods = array( 'set_pagination_args', 'get_views', 'get_bulk_actions', 'bulk_actions', + 'row_actions', 'months_dropdown', 'view_switcher', 'comments_bubble', 'get_items_per_page', 'pagination', + 'get_sortable_columns', 'get_column_info', 'get_table_classes', 'display_tablenav', 'extra_tablenav', + 'single_row_columns' ); + + /** + * Constructor. + * + * The child class should call this constructor from its own constructor to override + * the default $args. + * + * @since 3.1.0 + * + * @param array|string $args { + * Array or string of arguments. + * + * @type string $plural Plural value used for labels and the objects being listed. + * This affects things such as CSS class-names and nonces used + * in the list table, e.g. 'posts'. Default empty. + * @type string $singular Singular label for an object being listed, e.g. 'post'. + * Default empty + * @type bool $ajax Whether the list table supports Ajax. This includes loading + * and sorting data, for example. If true, the class will call + * the _js_vars() method in the footer to provide variables + * to any scripts handling Ajax events. Default false. + * @type string $screen String containing the hook name used to determine the current + * screen. If left null, the current screen will be automatically set. + * Default null. + * } + */ + public function __construct( $args = array() ) { + $args = wp_parse_args( $args, array( + 'plural' => '', + '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' ) ); + } + + if ( empty( $this->modes ) ) { + $this->modes = array( + 'list' => __( 'List View' ), + 'excerpt' => __( 'Excerpt View' ) + ); + } + } + + /** + * Make private properties readable for backward compatibility. + * + * @since 4.0.0 + * + * @param string $name Property to get. + * @return mixed Property. + */ + public function __get( $name ) { + if ( in_array( $name, $this->compat_fields ) ) { + return $this->$name; + } + } + + /** + * Make private properties settable for backward compatibility. + * + * @since 4.0.0 + * + * @param string $name Property to check if set. + * @param mixed $value Property value. + * @return mixed Newly-set property. + */ + public function __set( $name, $value ) { + if ( in_array( $name, $this->compat_fields ) ) { + return $this->$name = $value; + } + } + + /** + * Make private properties checkable for backward compatibility. + * + * @since 4.0.0 + * + * @param string $name Property to check if set. + * @return bool Whether the property is set. + */ + public function __isset( $name ) { + if ( in_array( $name, $this->compat_fields ) ) { + return isset( $this->$name ); + } + } + + /** + * Make private properties un-settable for backward compatibility. + * + * @since 4.0.0 + * + * @param string $name Property to unset. + */ + public function __unset( $name ) { + if ( in_array( $name, $this->compat_fields ) ) { + unset( $this->$name ); + } + } + + /** + * Make private/protected methods readable for backward compatibility. + * + * @since 4.0.0 + * + * @param callable $name Method to call. + * @param array $arguments Arguments to pass when calling. + * @return mixed|bool Return value of the callback, false otherwise. + */ + public function __call( $name, $arguments ) { + if ( in_array( $name, $this->compat_methods ) ) { + return call_user_func_array( array( $this, $name ), $arguments ); + } + return false; + } + + /** + * Checks the current user's permissions + * + * @since 3.1.0 + * @abstract + */ + public 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 + * @abstract + */ + public 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 + * + * @since 3.1.0 + * + * @param array|string $args Array or string of arguments with information about the pagination. + */ + 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() && ! wp_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 + * + * @param string $key Pagination argument to retrieve. Common values include 'total_items', + * 'total_pages', 'per_page', or 'infinite_scroll'. + * @return int Number of items that correspond to the given pagination argument. + */ + public 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 + * + * @return bool + */ + public function has_items() { + return !empty( $this->items ); + } + + /** + * Message to be displayed when there are no items + * + * @since 3.1.0 + */ + public function no_items() { + _e( 'No items found.' ); + } + + /** + * Displays the search box. + * + * @since 3.1.0 + * + * @param string $text The 'submit' button label. + * @param string $input_id ID attribute value for the search input field. + */ + public 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 + * + * @return array + */ + protected function get_views() { + return array(); + } + + /** + * Display the list of views available on this table. + * + * @since 3.1.0 + */ + public function views() { + $views = $this->get_views(); + /** + * Filters 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; + + $this->screen->render_screen_reader_content( 'heading_views' ); + + 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 + * + * @return array + */ + protected function get_bulk_actions() { + return array(); + } + + /** + * Display the bulk actions dropdown. + * + * @since 3.1.0 + * + * @param string $which The location of the bulk actions: 'top' or 'bottom'. + * This is designated as optional for backward compatibility. + */ + protected function bulk_actions( $which = '' ) { + if ( is_null( $this->_actions ) ) { + $this->_actions = $this->get_bulk_actions(); + /** + * Filters 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 ); + $two = ''; + } else { + $two = '2'; + } + + if ( empty( $this->_actions ) ) + return; + + echo ''; + echo '\n"; + + submit_button( __( 'Apply' ), 'action', '', false, array( 'id' => "doaction$two" ) ); + echo "\n"; + } + + /** + * Get the current action selected from the bulk actions dropdown. + * + * @since 3.1.0 + * + * @return string|false The action name or False if no action was selected + */ + public function current_action() { + if ( isset( $_REQUEST['filter_action'] ) && ! empty( $_REQUEST['filter_action'] ) ) + return false; + + 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 + * + * @param array $actions The list of actions + * @param bool $always_visible Whether the actions should be always visible + * @return string + */ + protected 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 .= '
      '; + + $out .= ''; + + return $out; + } + + /** + * Display a monthly dropdown for filtering items + * + * @since 3.1.0 + * + * @global wpdb $wpdb + * @global WP_Locale $wp_locale + * + * @param string $post_type + */ + protected function months_dropdown( $post_type ) { + global $wpdb, $wp_locale; + + /** + * Filters whether to remove the 'Months' drop-down from the post list table. + * + * @since 4.2.0 + * + * @param bool $disable Whether to disable the drop-down. Default false. + * @param string $post_type The post type. + */ + if ( apply_filters( 'disable_months_dropdown', false, $post_type ) ) { + return; + } + + $extra_checks = "AND post_status != 'auto-draft'"; + if ( ! isset( $_GET['post_status'] ) || 'trash' !== $_GET['post_status'] ) { + $extra_checks .= " AND post_status != 'trash'"; + } elseif ( isset( $_GET['post_status'] ) ) { + $extra_checks = $wpdb->prepare( ' AND post_status = %s', $_GET['post_status'] ); + } + + $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 + $extra_checks + ORDER BY post_date DESC + ", $post_type ) ); + + /** + * Filters 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; +?> + + + + +
      +modes as $mode => $title ) { + $classes = array( 'view-' . $mode ); + if ( $current_mode === $mode ) + $classes[] = 'current'; + printf( + "%s\n", + esc_url( add_query_arg( 'mode', $mode ) ), + implode( ' ', $classes ), + $title + ); + } + ?> +
      +%s', + __( 'No comments' ) + ); + // Approved comments have different display depending on some conditions. + } elseif ( $approved_comments ) { + printf( '%s', + esc_url( add_query_arg( array( 'p' => $post_id, 'comment_status' => 'approved' ), admin_url( 'edit-comments.php' ) ) ), + $approved_comments_number, + $pending_comments ? $approved_phrase : $approved_only_phrase + ); + } else { + printf( '%s', + $approved_comments_number, + $pending_comments ? __( 'No approved comments' ) : __( 'No comments' ) + ); + } + + if ( $pending_comments ) { + printf( '%s', + esc_url( add_query_arg( array( 'p' => $post_id, 'comment_status' => 'moderated' ), admin_url( 'edit-comments.php' ) ) ), + $pending_comments_number, + $pending_phrase + ); + } else { + printf( '%s', + $pending_comments_number, + $approved_comments ? __( 'No pending comments' ) : __( 'No comments' ) + ); + } + } + + /** + * Get the current page number + * + * @since 3.1.0 + * + * @return int + */ + public 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 + * + * @param string $option + * @param int $default + * @return int + */ + protected 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; + + /** + * Filters 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 include: 'edit_comments_per_page', + * 'sites_network_per_page', 'site_themes_network_per_page', 'themes_network_per_page', + * 'users_network_per_page', 'edit_post_per_page', 'edit_page_per_page', + * 'edit_{$post_type}_per_page', 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 + * + * @param string $which + */ + protected function pagination( $which ) { + if ( empty( $this->_pagination_args ) ) { + return; + } + + $total_items = $this->_pagination_args['total_items']; + $total_pages = $this->_pagination_args['total_pages']; + $infinite_scroll = false; + if ( isset( $this->_pagination_args['infinite_scroll'] ) ) { + $infinite_scroll = $this->_pagination_args['infinite_scroll']; + } + + if ( 'top' === $which && $total_pages > 1 ) { + $this->screen->render_screen_reader_content( 'heading_pagination' ); + } + + $output = '' . sprintf( _n( '%s item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . ''; + + $current = $this->get_pagenum(); + $removable_query_args = wp_removable_query_args(); + + $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + + $current_url = remove_query_arg( $removable_query_args, $current_url ); + + $page_links = array(); + + $total_pages_before = ''; + $total_pages_after = ''; + + $disable_first = $disable_last = $disable_prev = $disable_next = false; + + if ( $current == 1 ) { + $disable_first = true; + $disable_prev = true; + } + if ( $current == 2 ) { + $disable_first = true; + } + if ( $current == $total_pages ) { + $disable_last = true; + $disable_next = true; + } + if ( $current == $total_pages - 1 ) { + $disable_last = true; + } + + if ( $disable_first ) { + $page_links[] = ''; + } else { + $page_links[] = sprintf( "%s", + esc_url( remove_query_arg( 'paged', $current_url ) ), + __( 'First page' ), + '«' + ); + } + + if ( $disable_prev ) { + $page_links[] = ''; + } else { + $page_links[] = sprintf( "%s", + esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ), + __( 'Previous page' ), + '‹' + ); + } + + if ( 'bottom' === $which ) { + $html_current_page = $current; + $total_pages_before = '' . __( 'Current Page' ) . ''; + } else { + $html_current_page = sprintf( "%s", + '', + $current, + strlen( $total_pages ) + ); + } + $html_total_pages = sprintf( "%s", number_format_i18n( $total_pages ) ); + $page_links[] = $total_pages_before . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . $total_pages_after; + + if ( $disable_next ) { + $page_links[] = ''; + } else { + $page_links[] = sprintf( "%s", + esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ), + __( 'Next page' ), + '›' + ); + } + + if ( $disable_last ) { + $page_links[] = ''; + } else { + $page_links[] = sprintf( "%s", + esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ), + __( 'Last page' ), + '»' + ); + } + + $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 + * @abstract + * + * @return array + */ + public 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 + * + * @return array + */ + protected function get_sortable_columns() { + return array(); + } + + /** + * Gets the name of the default primary column. + * + * @since 4.3.0 + * + * @return string Name of the default primary column, in this case, an empty string. + */ + protected function get_default_primary_column_name() { + $columns = $this->get_columns(); + $column = ''; + + if ( empty( $columns ) ) { + return $column; + } + + // We need a primary defined so responsive views show something, + // so let's fall back to the first non-checkbox column. + foreach ( $columns as $col => $column_name ) { + if ( 'cb' === $col ) { + continue; + } + + $column = $col; + break; + } + + return $column; + } + + /** + * Public wrapper for WP_List_Table::get_default_primary_column_name(). + * + * @since 4.4.0 + * + * @return string Name of the default primary column. + */ + public function get_primary_column() { + return $this->get_primary_column_name(); + } + + /** + * Gets the name of the primary column. + * + * @since 4.3.0 + * + * @return string The name of the primary column. + */ + protected function get_primary_column_name() { + $columns = get_column_headers( $this->screen ); + $default = $this->get_default_primary_column_name(); + + // If the primary column doesn't exist fall back to the + // first non-checkbox column. + if ( ! isset( $columns[ $default ] ) ) { + $default = WP_List_Table::get_default_primary_column_name(); + } + + /** + * Filters the name of the primary column for the current list table. + * + * @since 4.3.0 + * + * @param string $default Column name default for the specific list table, e.g. 'name'. + * @param string $context Screen ID for specific list table, e.g. 'plugins'. + */ + $column = apply_filters( 'list_table_primary_column', $default, $this->screen->id ); + + if ( empty( $column ) || ! isset( $columns[ $column ] ) ) { + $column = $default; + } + + return $column; + } + + /** + * Get a list of all, hidden and sortable columns, with filter applied + * + * @since 3.1.0 + * + * @return array + */ + protected function get_column_info() { + // $_column_headers is already set / cached + if ( isset( $this->_column_headers ) && is_array( $this->_column_headers ) ) { + // Back-compat for list tables that have been manually setting $_column_headers for horse reasons. + // In 4.3, we added a fourth argument for primary column. + $column_headers = array( array(), array(), array(), $this->get_primary_column_name() ); + foreach ( $this->_column_headers as $key => $value ) { + $column_headers[ $key ] = $value; + } + + return $column_headers; + } + + $columns = get_column_headers( $this->screen ); + $hidden = get_hidden_columns( $this->screen ); + + $sortable_columns = $this->get_sortable_columns(); + /** + * Filters 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; + } + + $primary = $this->get_primary_column_name(); + $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); + + return $this->_column_headers; + } + + /** + * Return number of visible columns + * + * @since 3.1.0 + * + * @return int + */ + public 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 + * + * @staticvar int $cb_counter + * + * @param bool $with_id Whether to set the id attribute or not + */ + public function print_column_headers( $with_id = true ) { + list( $columns, $hidden, $sortable, $primary ) = $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" ); + + if ( in_array( $column_key, $hidden ) ) { + $class[] = 'hidden'; + } + + if ( 'cb' === $column_key ) + $class[] = 'check-column'; + elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) ) + $class[] = 'num'; + + if ( $column_key === $primary ) { + $class[] = 'column-primary'; + } + + 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 . ''; + } + + $tag = ( 'cb' === $column_key ) ? 'td' : 'th'; + $scope = ( 'th' === $tag ) ? 'scope="col"' : ''; + $id = $with_id ? "id='$column_key'" : ''; + + if ( !empty( $class ) ) + $class = "class='" . join( ' ', $class ) . "'"; + + echo "<$tag $scope $id $class>$column_display_name"; + } + } + + /** + * Display the table + * + * @since 3.1.0 + */ + public function display() { + $singular = $this->_args['singular']; + + $this->display_tablenav( 'top' ); + + $this->screen->render_screen_reader_content( 'heading_list' ); +?> + + + + print_column_headers(); ?> + + + + > + display_rows_or_placeholder(); ?> + + + + + print_column_headers( false ); ?> + + + +
      +display_tablenav( 'bottom' ); + } + + /** + * Get a list of CSS classes for the WP_List_Table table tag. + * + * @since 3.1.0 + * + * @return array List of CSS classes for the table tag. + */ + protected function get_table_classes() { + return array( 'widefat', 'fixed', 'striped', $this->_args['plural'] ); + } + + /** + * Generate the table navigation above or below the table + * + * @since 3.1.0 + * @param string $which + */ + protected function display_tablenav( $which ) { + if ( 'top' === $which ) { + wp_nonce_field( 'bulk-' . $this->_args['plural'] ); + } + ?> +
      + + has_items() ): ?> +
      + bulk_actions( $which ); ?> +
      + extra_tablenav( $which ); + $this->pagination( $which ); +?> + +
      +
      +has_items() ) { + $this->display_rows(); + } else { + echo ''; + $this->no_items(); + echo ''; + } + } + + /** + * Generate the table rows + * + * @since 3.1.0 + */ + public 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 + * + * @param object $item The current item + */ + public function single_row( $item ) { + echo ''; + $this->single_row_columns( $item ); + echo ''; + } + + /** + * + * @param object $item + * @param string $column_name + */ + protected function column_default( $item, $column_name ) {} + + /** + * + * @param object $item + */ + protected function column_cb( $item ) {} + + /** + * Generates the columns for a single row of the table + * + * @since 3.1.0 + * + * @param object $item The current item + */ + protected function single_row_columns( $item ) { + list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $classes = "$column_name column-$column_name"; + if ( $primary === $column_name ) { + $classes .= ' has-row-actions column-primary'; + } + + if ( in_array( $column_name, $hidden ) ) { + $classes .= ' hidden'; + } + + // Comments column uses HTML in the display name with screen reader text. + // Instead of using esc_attr(), we strip tags to get closer to a user-friendly string. + $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"'; + + $attributes = "class='$classes' $data"; + + if ( 'cb' === $column_name ) { + echo ''; + echo $this->column_cb( $item ); + echo ''; + } elseif ( method_exists( $this, '_column_' . $column_name ) ) { + echo call_user_func( + array( $this, '_column_' . $column_name ), + $item, + $classes, + $data, + $primary + ); + } elseif ( method_exists( $this, 'column_' . $column_name ) ) { + echo ""; + echo call_user_func( array( $this, 'column_' . $column_name ), $item ); + echo $this->handle_row_actions( $item, $column_name, $primary ); + echo ""; + } else { + echo ""; + echo $this->column_default( $item, $column_name ); + echo $this->handle_row_actions( $item, $column_name, $primary ); + echo ""; + } + } + } + + /** + * Generates and display row actions links for the list table. + * + * @since 4.3.0 + * + * @param object $item The item being acted upon. + * @param string $column_name Current column name. + * @param string $primary Primary column name. + * @return string The row actions HTML, or an empty string if the current column is the primary column. + */ + protected function handle_row_actions( $item, $column_name, $primary ) { + return $column_name === $primary ? '' : ''; + } + + /** + * Handle an incoming ajax request (called from admin-ajax.php) + * + * @since 3.1.0 + */ + public function ajax_response() { + $this->prepare_items(); + + 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( $this->_pagination_args['total_items'] ) ) { + $response['total_items_i18n'] = sprintf( + _n( '%s item', '%s items', $this->_pagination_args['total_items'] ), + number_format_i18n( $this->_pagination_args['total_items'] ) + ); + } + if ( isset( $this->_pagination_args['total_pages'] ) ) { + $response['total_pages'] = $this->_pagination_args['total_pages']; + $response['total_pages_i18n'] = number_format_i18n( $this->_pagination_args['total_pages'] ); + } + + die( wp_json_encode( $response ) ); + } + + /** + * Send required variables to JavaScript land + * + */ + public function _js_vars() { + $args = array( + 'class' => get_class( $this ), + 'screen' => array( + 'id' => $this->screen->id, + 'base' => $this->screen->base, + ) + ); + + printf( "\n", wp_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..9cbae42 --- /dev/null +++ b/wp-admin/includes/class-wp-media-list-table.php @@ -0,0 +1,777 @@ +detached = ( isset( $_REQUEST['attachment-filter'] ) && 'detached' === $_REQUEST['attachment-filter'] ); + + $this->modes = array( + 'list' => __( 'List View' ), + 'grid' => __( 'Grid View' ) + ); + + parent::__construct( array( + 'plural' => 'media', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + /** + * + * @return bool + */ + public function ajax_user_can() { + return current_user_can('upload_files'); + } + + /** + * + * @global WP_Query $wp_query + * @global array $post_mime_types + * @global array $avail_post_mime_types + * @global string $mode + */ + public function prepare_items() { + global $wp_query, $post_mime_types, $avail_post_mime_types, $mode; + + list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $_REQUEST ); + + $this->is_trash = isset( $_REQUEST['attachment-filter'] ) && 'trash' === $_REQUEST['attachment-filter']; + + $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; + + $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'], + ) ); + } + + /** + * @global array $post_mime_types + * @global array $avail_post_mime_types + * @return array + */ + protected function get_views() { + global $post_mime_types, $avail_post_mime_types; + + $type_links = array(); + + $filter = empty( $_GET['attachment-filter'] ) ? '' : $_GET['attachment-filter']; + + $type_links['all'] = sprintf( + '', + selected( $filter, true, false ), + __( 'All media items' ) + ); + + foreach ( $post_mime_types as $mime_type => $label ) { + if ( ! wp_match_mime_types( $mime_type, $avail_post_mime_types ) ) { + continue; + } + + $selected = selected( + $filter && 0 === strpos( $filter, 'post_mime_type:' ) && + wp_match_mime_types( $mime_type, str_replace( 'post_mime_type:', '', $filter ) ), + true, + false + ); + + $type_links[$mime_type] = sprintf( + '', + esc_attr( $mime_type ), + $selected, + $label[0] + ); + } + + $type_links['detached'] = ''; + + $type_links['mine'] = sprintf( + '', + selected( 'mine' === $filter, true, false ), + _x( 'Mine', 'media items' ) + ); + + if ( $this->is_trash || ( defined( 'MEDIA_TRASH') && MEDIA_TRASH ) ) { + $type_links['trash'] = sprintf( + '', + selected( 'trash' === $filter, true, false ), + _x( 'Trash', 'attachment filter' ) + ); + } + + return $type_links; + } + + /** + * + * @return array + */ + protected function get_bulk_actions() { + $actions = array(); + if ( MEDIA_TRASH ) { + if ( $this->is_trash ) { + $actions['untrash'] = __( 'Restore' ); + $actions['delete'] = __( 'Delete Permanently' ); + } else { + $actions['trash'] = _x( 'Trash', 'verb' ); + } + } else { + $actions['delete'] = __( 'Delete Permanently' ); + } + + if ( $this->detached ) + $actions['attach'] = __( 'Attach' ); + + return $actions; + } + + /** + * @param string $which + */ + protected function extra_tablenav( $which ) { + if ( 'bar' !== $which ) { + return; + } +?> +
      +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', $this->screen->post_type, $which ); + + submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) ); + } + + if ( $this->is_trash && current_user_can( 'edit_others_posts' ) && $this->has_items() ) { + submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false ); + } ?> +
      +get_views(); + + $this->screen->render_screen_reader_content( 'heading_views' ); +?> +
      +
      + view_switcher( $mode ); ?> + + + + +extra_tablenav( 'bar' ); + + /** This filter is documented in wp-admin/inclues/class-wp-list-table.php */ + $views = apply_filters( "views_{$this->screen->id}", array() ); + + // Back compat for pre-4.0 view links. + if ( ! empty( $views ) ) { + echo ''; + } +?> +
      + +
      + +
      +
      + '; + /* translators: column name */ + $posts_columns['title'] = _x( 'File', 'column name' ); + $posts_columns['author'] = __( 'Author' ); + + $taxonomies = get_taxonomies_for_attachments( 'objects' ); + $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); + + /** + * Filters 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'] = '' . __( 'Comments' ) . ''; + } + /* translators: column name */ + $posts_columns['date'] = _x( 'Date', 'column name' ); + /** + * Filters 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. + */ + return apply_filters( 'manage_media_columns', $posts_columns, $this->detached ); + } + + /** + * + * @return array + */ + protected function get_sortable_columns() { + return array( + 'title' => 'title', + 'author' => 'author', + 'parent' => 'parent', + 'comments' => 'comment_count', + 'date' => array( 'date', true ), + ); + } + + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_cb( $post ) { + if ( current_user_can( 'edit_post', $post->ID ) ) { ?> + + + post_mime_type ); + + $title = _draft_or_post_title(); + $thumb = wp_get_attachment_image( $post->ID, array( 60, 60 ), true, array( 'alt' => '' ) ); + $link_start = $link_end = ''; + + if ( current_user_can( 'edit_post', $post->ID ) && ! $this->is_trash ) { + $link_start = sprintf( + '', + get_edit_post_link( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( '“%s” (Edit)' ), $title ) ) + ); + $link_end = ''; + } + + $class = $thumb ? ' class="has-media-icon"' : ''; + ?> + > + + + + +

      + + ID ); + echo esc_html( wp_basename( $file ) ); + ?> +

      + %s', + esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ), + get_the_author() + ); + } + + /** + * Handles the description column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_desc( $post ) { + echo has_excerpt() ? $post->post_excerpt : ''; + } + + /** + * Handles the date column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_date( $post ) { + if ( '0000-00-00 00:00:00' === $post->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 ); + } + } + + echo $h_time; + } + + /** + * Handles the parent column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_parent( $post ) { + $user_can_edit = current_user_can( 'edit_post', $post->ID ); + + if ( $post->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 ( $parent_type && $parent_type->show_ui && current_user_can( 'edit_post', $post->post_parent ) ) { +?> + + post_parent ) ) { +?> + $post->post_parent, + 'media[]' => $post->ID, + '_wpnonce' => wp_create_nonce( 'bulk-' . $this->_args['plural'] ) + ), 'upload.php' ); + printf( + '
      %s', + $detach_url, + /* translators: %s: title of the post the attachment is attached to */ + esc_attr( sprintf( __( 'Detach from “%s”' ), $title ) ), + __( 'Detach' ) + ); + endif; + } else { + _e( '(Unattached)' ); ?> + post_parent ); + printf( + '
      %s', + $post->ID, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $title ) ), + __( 'Attach' ) + ); + } + } + } + + /** + * Handles the comments column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_comments( $post ) { + echo '
      '; + + if ( isset( $this->comment_pending_count[ $post->ID ] ) ) { + $pending_comments = $this->comment_pending_count[ $post->ID ]; + } else { + $pending_comments = get_pending_comments_num( $post->ID ); + } + + $this->comments_bubble( $post->ID, $pending_comments ); + + echo '
      '; + } + + /** + * Handles output for the default column. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + * @param string $column_name Current column name. + */ + public function column_default( $post, $column_name ) { + if ( 'categories' === $column_name ) { + $taxonomy = 'category'; + } elseif ( 'tags' === $column_name ) { + $taxonomy = 'post_tag'; + } elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) { + $taxonomy = substr( $column_name, 9 ); + } else { + $taxonomy = false; + } + + if ( $taxonomy ) { + $terms = get_the_terms( $post->ID, $taxonomy ); + if ( is_array( $terms ) ) { + $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 '' . get_taxonomy( $taxonomy )->labels->no_terms . ''; + } + + return; + } + + /** + * Fires for each custom column in the Media list table. + * + * Custom columns are registered using the {@see 'manage_media_columns'} filter. + * + * @since 2.5.0 + * + * @param string $column_name Name of the custom column. + * @param int $post_id Attachment ID. + */ + do_action( 'manage_media_custom_column', $column_name, $post->ID ); + } + + /** + * + * @global WP_Post $post + */ + public function display_rows() { + global $post, $wp_query; + + $post_ids = wp_list_pluck( $wp_query->posts, 'ID' ); + reset( $wp_query->posts ); + + $this->comment_pending_count = get_pending_comments_num( $post_ids ); + + add_filter( 'the_title','esc_html' ); + + while ( have_posts() ) : the_post(); + if ( + ( $this->is_trash && $post->post_status != 'trash' ) + || ( ! $this->is_trash && $post->post_status === 'trash' ) + ) { + continue; + } + $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other'; + ?> + + single_row_columns( $post ); ?> + + detached ) { + if ( current_user_can( 'edit_post', $post->ID ) ) { + $actions['edit'] = sprintf( + '%s', + get_edit_post_link( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ), + __( 'Edit' ) + ); + } + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + $actions['trash'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ), + _x( 'Trash', 'verb' ) + ); + } else { + $delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ), + $delete_ays, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Delete “%s” permanently' ), $att_title ) ), + __( 'Delete Permanently' ) + ); + } + } + $actions['view'] = sprintf( + '%s', + get_permalink( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'View “%s”' ), $att_title ) ), + __( 'View' ) + ); + + if ( current_user_can( 'edit_post', $post->ID ) ) { + $actions['attach'] = sprintf( + '%s', + $post->ID, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $att_title ) ), + __( 'Attach' ) + ); + } + } + else { + if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash ) { + $actions['edit'] = sprintf( + '%s', + get_edit_post_link( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ), + __( 'Edit' ) + ); + } + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( $this->is_trash ) { + $actions['untrash'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=untrash&post=$post->ID", 'untrash-post_' . $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Restore “%s” from the Trash' ), $att_title ) ), + __( 'Restore' ) + ); + } elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + $actions['trash'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ), + _x( 'Trash', 'verb' ) + ); + } + if ( $this->is_trash || ! EMPTY_TRASH_DAYS || ! MEDIA_TRASH ) { + $delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ), + $delete_ays, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Delete “%s” permanently' ), $att_title ) ), + __( 'Delete Permanently' ) + ); + } + } + if ( ! $this->is_trash ) { + $actions['view'] = sprintf( + '%s', + get_permalink( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'View “%s”' ), $att_title ) ), + __( 'View' ) + ); + } + } + + /** + * Filters 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. + */ + return apply_filters( 'media_row_actions', $actions, $post, $this->detached ); + } + + /** + * Generates and displays row action links. + * + * @since 4.3.0 + * + * @param object $post Attachment being acted upon. + * @param string $column_name Current column name. + * @param string $primary Primary column name. + * @return string Row actions output for media attachments. + */ + protected function handle_row_actions( $post, $column_name, $primary ) { + if ( $primary !== $column_name ) { + return ''; + } + + $att_title = _draft_or_post_title(); + return $this->row_actions( $this->_get_row_actions( $post, $att_title ) ); + } +} 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..f639b36 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -0,0 +1,559 @@ +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' ) ) + ); + + parent::__construct( array( + 'plural' => 'sites', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + /** + * + * @return bool + */ + public function ajax_user_can() { + return current_user_can( 'manage_sites' ); + } + + /** + * Prepares the list of sites for display. + * + * @since 3.1.0 + * + * @global string $s + * @global string $mode + * @global wpdb $wpdb + */ + public function prepare_items() { + global $s, $mode, $wpdb; + + if ( ! empty( $_REQUEST['mode'] ) ) { + $mode = $_REQUEST['mode'] === 'excerpt' ? 'excerpt' : 'list'; + set_user_setting( 'sites_list_mode', $mode ); + } else { + $mode = get_user_setting( 'sites_list_mode', 'list' ); + } + + $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, '*'); + } + + /* + * If the network is large and a search is not being performed, show only + * the latest sites 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'; + } + + $args = array( + 'number' => intval( $per_page ), + 'offset' => intval( ( $pagenum - 1 ) * $per_page ), + 'network_id' => get_current_network_id(), + ); + + 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 + $sql = $wpdb->prepare( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE %s", $wpdb->esc_like( $s ) . ( ! empty( $wild ) ? '%' : '' ) ); + $reg_blog_ids = $wpdb->get_col( $sql ); + + if ( $reg_blog_ids ) { + $args['site__in'] = $reg_blog_ids; + } + } elseif ( is_numeric( $s ) && empty( $wild ) ) { + $args['ID'] = $s; + } else { + $args['search'] = $s; + + if ( ! is_subdomain_install() ) { + $args['search_columns'] = array( 'path' ); + } + } + + $order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : ''; + if ( 'registered' === $order_by ) { + // registered is a valid field name. + } elseif ( 'lastupdated' === $order_by ) { + $order_by = 'last_updated'; + } elseif ( 'blogname' === $order_by ) { + if ( is_subdomain_install() ) { + $order_by = 'domain'; + } else { + $order_by = 'path'; + } + } elseif ( 'blog_id' === $order_by ) { + $order_by = 'id'; + } elseif ( ! $order_by ) { + $order_by = false; + } + + $args['orderby'] = $order_by; + + if ( $order_by ) { + $args['order'] = ( isset( $_REQUEST['order'] ) && 'DESC' === strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC"; + } + + if ( wp_is_large_network() ) { + $args['no_found_rows'] = true; + } else { + $args['no_found_rows'] = false; + } + + /** + * Filters the arguments for the site query in the sites list table. + * + * @since 4.6.0 + * + * @param array $args An array of get_sites() arguments. + */ + $args = apply_filters( 'ms_sites_list_table_query_args', $args ); + + $_sites = get_sites( $args ); + if ( is_array( $_sites ) ) { + update_site_cache( $_sites ); + + $this->items = array_slice( $_sites, 0, $per_page ); + } + + $total_sites = get_sites( array_merge( $args, array( + 'count' => true, + 'offset' => 0, + 'number' => 0, + ) ) ); + + $this->set_pagination_args( array( + 'total_items' => $total_sites, + 'per_page' => $per_page, + ) ); + } + + /** + */ + public function no_items() { + _e( 'No sites found.' ); + } + + /** + * + * @return array + */ + protected 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; + } + + /** + * @global string $mode List table view mode. + * + * @param string $which + */ + protected function pagination( $which ) { + global $mode; + + parent::pagination( $which ); + + if ( 'top' === $which ) + $this->view_switcher( $mode ); + } + + /** + * @return array + */ + public function get_columns() { + $sites_columns = array( + 'cb' => '', + 'blogname' => __( 'URL' ), + 'lastupdated' => __( 'Last Updated' ), + 'registered' => _x( 'Registered', 'site' ), + 'users' => __( 'Users' ), + ); + + if ( has_filter( 'wpmublogsaction' ) ) { + $sites_columns['plugins'] = __( 'Actions' ); + } + + /** + * Filters the displayed site columns in Sites list table. + * + * @since MU (3.0.0) + * + * @param array $sites_columns An array of displayed site columns. Default 'cb', + * 'blogname', 'lastupdated', 'registered', 'users'. + */ + return apply_filters( 'wpmu_blogs_columns', $sites_columns ); + } + + /** + * @return array + */ + protected function get_sortable_columns() { + return array( + 'blogname' => 'blogname', + 'lastupdated' => 'lastupdated', + 'registered' => 'blog_id', + ); + } + + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param array $blog Current site. + */ + public function column_cb( $blog ) { + if ( ! is_main_site( $blog['blog_id'] ) ) : + $blogname = untrailingslashit( $blog['domain'] . $blog['path'] ); + ?> + + + status_list ); + + foreach ( $this->status_list as $status => $col ) { + if ( $blog[ $status ] == 1 ) { + $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; + $sep = ( $i == $state_count ) ? '' : ', '; + $blog_state .= "$state$sep"; + } + } + + ?> + + + + + '; + printf( + /* translators: 1: site name, 2: site tagline. */ + __( '%1$s – %2$s' ), + get_option( 'blogname' ), + '' . get_option( 'blogdescription ' ) . '' + ); + echo '

      '; + restore_current_blog(); + } + } + + /** + * Handles the lastupdated column output. + * + * @since 4.3.0 + * + * @global string $mode List table view mode. + * + * @param array $blog Current site. + */ + public function column_lastupdated( $blog ) { + global $mode; + + if ( 'list' === $mode ) { + $date = __( 'Y/m/d' ); + } else { + $date = __( 'Y/m/d g:i:s a' ); + } + + echo ( $blog['last_updated'] === '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( $date, $blog['last_updated'] ); + } + + /** + * Handles the registered column output. + * + * @since 4.3.0 + * + * @global string $mode List table view mode. + * + * @param array $blog Current site. + */ + public function column_registered( $blog ) { + global $mode; + + if ( 'list' === $mode ) { + $date = __( 'Y/m/d' ); + } else { + $date = __( 'Y/m/d g:i:s a' ); + } + + if ( $blog['registered'] === '0000-00-00 00:00:00' ) { + echo '—'; + } else { + echo mysql2date( $date, $blog['registered'] ); + } + } + + /** + * Handles the users column output. + * + * @since 4.3.0 + * + * @param array $blog Current site. + */ + public function column_users( $blog ) { + $user_count = wp_cache_get( $blog['blog_id'] . '_user_count', 'blog-details' ); + if ( ! $user_count ) { + $blog_users = get_users( array( 'blog_id' => $blog['blog_id'], 'fields' => 'ID' ) ); + $user_count = count( $blog_users ); + unset( $blog_users ); + wp_cache_set( $blog['blog_id'] . '_user_count', $user_count, 'blog-details', 12 * HOUR_IN_SECONDS ); + } + + printf( + '%s', + esc_url( network_admin_url( 'site-users.php?id=' . $blog['blog_id'] ) ), + number_format_i18n( $user_count ) + ); + } + + /** + * Handles the plugins column output. + * + * @since 4.3.0 + * + * @param array $blog Current site. + */ + public function column_plugins( $blog ) { + if ( has_filter( 'wpmublogsaction' ) ) { + /** + * 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 (3.0.0) + * + * @param int $blog_id The site ID. + */ + do_action( 'wpmublogsaction', $blog['blog_id'] ); + } + } + + /** + * Handles output for the default column. + * + * @since 4.3.0 + * + * @param array $blog Current site. + * @param string $column_name Current column name. + */ + public function column_default( $blog, $column_name ) { + /** + * 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'] ); + } + + /** + * + * @global string $mode + */ + public function display_rows() { + foreach ( $this->items as $blog ) { + $blog = $blog->to_array(); + $class = ''; + reset( $this->status_list ); + + foreach ( $this->status_list as $status => $col ) { + if ( $blog[ $status ] == 1 ) { + $class = " class='{$col[0]}'"; + } + } + + echo ""; + + $this->single_row_columns( $blog ); + + echo ''; + } + } + + /** + * Gets the name of the default primary column. + * + * @since 4.3.0 + * + * @return string Name of the default primary column, in this case, 'blogname'. + */ + protected function get_default_primary_column_name() { + return 'blogname'; + } + + /** + * Generates and displays row action links. + * + * @since 4.3.0 + * + * @param object $blog Site being acted upon. + * @param string $column_name Current column name. + * @param string $primary Primary column name. + * @return string Row actions output. + */ + protected function handle_row_actions( $blog, $column_name, $primary ) { + if ( $primary !== $column_name ) { + return; + } + + $blogname = untrailingslashit( $blog['domain'] . $blog['path'] ); + + // Preordered. + $actions = array( + 'edit' => '', 'backend' => '', + 'activate' => '', 'deactivate' => '', + 'archive' => '', 'unarchive' => '', + 'spam' => '', 'unspam' => '', + 'delete' => '', + 'visit' => '', + ); + + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['backend'] = "" . __( 'Dashboard' ) . ''; + if ( get_network()->site_id != $blog['blog_id'] ) { + if ( $blog['deleted'] == '1' ) { + $actions['activate'] = '' . __( 'Activate' ) . ''; + } else { + $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; + } + + if ( $blog['archived'] == '1' ) { + $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; + } else { + $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; + } + + if ( $blog['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' ) . ''; + + /** + * Filters 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 installation. + */ + $actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname ); + return $this->row_actions( $actions ); + } +} diff --git a/wp-admin/includes/class-wp-ms-themes-list-table.php b/wp-admin/includes/class-wp-ms-themes-list-table.php new file mode 100644 index 0000000..c90d6d5 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-themes-list-table.php @@ -0,0 +1,726 @@ + '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; + } + + /** + * + * @return array + */ + protected function get_table_classes() { + // todo: remove and add CSS for .themes + return array( 'widefat', 'plugins' ); + } + + /** + * + * @return bool + */ + public function ajax_user_can() { + if ( $this->is_site_themes ) + return current_user_can( 'manage_sites' ); + else + return current_user_can( 'manage_network_themes' ); + } + + /** + * + * @global string $status + * @global array $totals + * @global int $page + * @global string $orderby + * @global string $order + * @global string $s + */ + public function prepare_items() { + global $status, $totals, $page, $orderby, $order, $s; + + wp_reset_vars( array( 'orderby', 'order', 's' ) ); + + $themes = array( + /** + * Filters 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 ]; + + wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( + 'themes' => $totals, + 'totals' => wp_get_update_data(), + ) ); + + 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, + ) ); + } + + /** + * @staticvar string $term + * @param WP_Theme $theme + * @return bool + */ + public function _search_callback( $theme ) { + static $term = null; + 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. + /** + * @global string $orderby + * @global string $order + * @param array $theme_a + * @param array $theme_b + * @return int + */ + public 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; + } + + /** + */ + public 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.' ); + } + } + + /** + * + * @return array + */ + public function get_columns() { + return array( + 'cb' => '', + 'name' => __( 'Theme' ), + 'description' => __( 'Description' ), + ); + } + + /** + * + * @return array + */ + protected function get_sortable_columns() { + return array( + 'name' => 'name', + ); + } + + /** + * Gets the name of the primary column. + * + * @since 4.3.0 + * + * @return string Unalterable name of the primary column name, in this case, 'name'. + */ + protected function get_primary_column_name() { + return 'name'; + } + + /** + * + * @global array $totals + * @global string $status + * @return array + */ + protected 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" aria-current="page"' : '', + sprintf( $text, number_format_i18n( $count ) ) + ); + } + } + + return $status_links; + } + + /** + * @global string $status + * + * @return array + */ + protected 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; + } + + /** + */ + public function display_rows() { + foreach ( $this->items as $theme ) + $this->single_row( $theme ); + } + + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param WP_Theme $theme The current WP_Theme object. + */ + public function column_cb( $theme ) { + $checkbox_id = 'checkbox_' . md5( $theme->get('Name') ); + ?> + + + 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' ); + } + + // Pre-order. + $actions = array( + 'enable' => '', + 'disable' => '', + 'delete' => '' + ); + + $stylesheet = $theme->get_stylesheet(); + $theme_key = urlencode( $stylesheet ); + + if ( ! $allowed ) { + if ( ! $theme->errors() ) { + $url = add_query_arg( array( + 'action' => 'enable', + 'theme' => $theme_key, + 'paged' => $page, + 's' => $s, + ), $url ); + + if ( $this->is_site_themes ) { + /* translators: %s: theme name */ + $aria_label = sprintf( __( 'Enable %s' ), $theme->display( 'Name' ) ); + } else { + /* translators: %s: theme name */ + $aria_label = sprintf( __( 'Network Enable %s' ), $theme->display( 'Name' ) ); + } + + $actions['enable'] = sprintf( '%s', + esc_url( wp_nonce_url( $url, 'enable-theme_' . $stylesheet ) ), + esc_attr( $aria_label ), + ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) + ); + } + } else { + $url = add_query_arg( array( + 'action' => 'disable', + 'theme' => $theme_key, + 'paged' => $page, + 's' => $s, + ), $url ); + + if ( $this->is_site_themes ) { + /* translators: %s: theme name */ + $aria_label = sprintf( __( 'Disable %s' ), $theme->display( 'Name' ) ); + } else { + /* translators: %s: theme name */ + $aria_label = sprintf( __( 'Network Disable %s' ), $theme->display( 'Name' ) ); + } + + $actions['disable'] = sprintf( '%s', + esc_url( wp_nonce_url( $url, 'disable-theme_' . $stylesheet ) ), + esc_attr( $aria_label ), + ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) ) + ); + } + + if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $stylesheet != get_option( 'stylesheet' ) && $stylesheet != get_option( 'template' ) ) { + $url = add_query_arg( array( + 'action' => 'delete-selected', + 'checked[]' => $theme_key, + 'theme_status' => $context, + 'paged' => $page, + 's' => $s, + ), 'themes.php' ); + + /* translators: %s: theme name */ + $aria_label = sprintf( _x( 'Delete %s', 'theme' ), $theme->display( 'Name' ) ); + + $actions['delete'] = sprintf( '%s', + esc_url( wp_nonce_url( $url, 'bulk-themes' ) ), + esc_attr( $aria_label ), + __( 'Delete' ) + ); + } + /** + * Filters 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', and 'Delete'. + * + * The default action links for the Site themes list table include + * 'Enable', and 'Disable'. + * + * @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, one of 'all', 'enabled', or 'disabled'. + */ + $actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme, $context ); + + /** + * Filters 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, one of 'all', 'enabled', or 'disabled'. + */ + $actions = apply_filters( "theme_action_links_{$stylesheet}", $actions, $theme, $context ); + + echo $this->row_actions( $actions, true ); + } + + /** + * Handles the description column output. + * + * @since 4.3.0 + * + * @global string $status + * @global array $totals + * + * @param WP_Theme $theme The current WP_Theme object. + */ + public function column_description( $theme ) { + global $status, $totals; + if ( $theme->errors() ) { + $pre = $status === 'broken' ? __( 'Broken Theme:' ) . ' ' : ''; + echo '

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

      '; + } + + if ( $this->is_site_themes ) { + $allowed = $theme->is_allowed( 'site', $this->site_id ); + } else { + $allowed = $theme->is_allowed( 'network' ); + } + + $class = ! $allowed ? 'inactive' : 'active'; + if ( ! empty( $totals['upgrade'] ) && ! empty( $theme->update ) ) + $class .= ' update'; + + echo "

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

      +
      "; + + $stylesheet = $theme->get_stylesheet(); + $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') ) { + /* translators: %s: theme name */ + $aria_label = sprintf( __( 'Visit %s homepage' ), $theme->display( 'Name' ) ); + + $theme_meta[] = sprintf( '%s', + $theme->display( 'ThemeURI' ), + esc_attr( $aria_label ), + __( 'Visit Theme Site' ) + ); + } + /** + * Filters 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 '
      '; + } + + /** + * Handles default column output. + * + * @since 4.3.0 + * + * @param WP_Theme $theme The current WP_Theme object. + * @param string $column_name The current column name. + */ + public function column_default( $theme, $column_name ) { + $stylesheet = $theme->get_stylesheet(); + + /** + * 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 ); + } + + /** + * Handles the output for a single table row. + * + * @since 4.3.0 + * + * @param WP_Theme $item The current WP_Theme object. + */ + public function single_row_columns( $item ) { + list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $extra_classes = ''; + if ( in_array( $column_name, $hidden ) ) { + $extra_classes .= ' hidden'; + } + + switch ( $column_name ) { + case 'cb': + echo ''; + + $this->column_cb( $item ); + + echo ''; + break; + + case 'name': + + $active_theme_label = ''; + + /* The presence of the site_id property means that this is a subsite view and a label for the active theme needs to be added */ + if ( ! empty( $this->site_id ) ) { + $stylesheet = get_blog_option( $this->site_id, 'stylesheet' ); + $template = get_blog_option( $this->site_id, 'template' ); + + /* Add a label for the active template */ + if ( $item->get_template() === $template ) { + $active_theme_label = ' — ' . __( 'Active Theme' ); + } + + /* In case this is a child theme, label it properly */ + if ( $stylesheet !== $template && $item->get_stylesheet() === $stylesheet) { + $active_theme_label = ' — ' . __( 'Active Child Theme' ); + } + } + + echo "" . $item->display( 'Name' ) . $active_theme_label . ''; + + $this->column_name( $item ); + + echo ""; + break; + + case 'description': + echo ""; + + $this->column_description( $item ); + + echo ''; + break; + + default: + echo ""; + + $this->column_default( $item, $column_name ); + + echo ""; + break; + } + } + } + + /** + * @global string $status + * @global array $totals + * + * @param WP_Theme $theme + */ + public function single_row( $theme ) { + global $status, $totals; + + if ( $this->is_site_themes ) { + $allowed = $theme->is_allowed( 'site', $this->site_id ); + } else { + $allowed = $theme->is_allowed( 'network' ); + } + + $stylesheet = $theme->get_stylesheet(); + + $class = ! $allowed ? 'inactive' : 'active'; + if ( ! empty( $totals['upgrade'] ) && ! empty( $theme->update ) ) { + $class .= ' update'; + } + + printf( '', + esc_attr( $class ), + esc_attr( $stylesheet ) + ); + + $this->single_row_columns( $theme ); + + 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..c2216f6 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-users-list-table.php @@ -0,0 +1,457 @@ +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'], '*' ); + } else if ( '' !== $args['search'] ) { + $args['search'] = trim( $args['search'], '*' ); + $args['search'] = '*' . $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']; + + if ( ! empty( $_REQUEST['mode'] ) ) { + $mode = $_REQUEST['mode'] === 'excerpt' ? 'excerpt' : 'list'; + set_user_setting( 'network_users_list_mode', $mode ); + } else { + $mode = get_user_setting( 'network_users_list_mode', 'list' ); + } + + /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ + $args = apply_filters( 'users_list_table_query_args', $args ); + + // 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, + ) ); + } + + /** + * + * @return array + */ + protected 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; + } + + /** + */ + public function no_items() { + _e( 'No users found.' ); + } + + /** + * + * @global string $role + * @return array + */ + protected function get_views() { + global $role; + + $total_users = get_user_count(); + $super_admins = get_super_admins(); + $total_admins = count( $super_admins ); + + $current_link_attributes = $role !== 'super' ? ' class="current" aria-current="page"' : ''; + $role_links = array(); + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + $current_link_attributes = $role === 'super' ? ' class="current" aria-current="page"' : ''; + $role_links['super'] = "" . sprintf( _n( 'Super Admin (%s)', 'Super Admins (%s)', $total_admins ), number_format_i18n( $total_admins ) ) . ''; + + return $role_links; + } + + /** + * @global string $mode List table view mode. + * + * @param string $which + */ + protected function pagination( $which ) { + global $mode; + + parent::pagination ( $which ); + + if ( 'top' === $which ) { + $this->view_switcher( $mode ); + } + } + + /** + * + * @return array + */ + public function get_columns() { + $users_columns = array( + 'cb' => '', + 'username' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'Email' ), + 'registered' => _x( 'Registered', 'user' ), + 'blogs' => __( 'Sites' ) + ); + /** + * Filters the columns displayed in the Network Admin Users list table. + * + * @since MU (3.0.0) + * + * @param array $users_columns An array of user columns. Default 'cb', 'username', + * 'name', 'email', 'registered', 'blogs'. + */ + return apply_filters( 'wpmu_users_columns', $users_columns ); + } + + /** + * + * @return array + */ + protected function get_sortable_columns() { + return array( + 'username' => 'login', + 'name' => 'name', + 'email' => 'email', + 'registered' => 'id', + ); + } + + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_cb( $user ) { + if ( is_super_admin( $user->ID ) ) { + return; + } + ?> + + + ID; + } + + /** + * Handles the username column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_username( $user ) { + $super_admins = get_super_admins(); + $avatar = get_avatar( $user->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 $avatar; + + ?>user_login; ?>user_login, $super_admins ) ) { + echo ' — ' . __( 'Super Admin' ); + } + ?> + first_name && $user->last_name ) { + echo "$user->first_name $user->last_name"; + } elseif ( $user->first_name ) { + echo $user->first_name; + } elseif ( $user->last_name ) { + echo $user->last_name; + } else { + echo '' . _x( 'Unknown', 'name' ) . ''; + } + } + + /** + * Handles the email column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_email( $user ) { + echo "$user->user_email"; + } + + /** + * Handles the registered date column output. + * + * @since 4.3.0 + * + * @global string $mode List table view mode. + * + * @param WP_User $user The current WP_User object. + */ + public function column_registered( $user ) { + global $mode; + if ( 'list' === $mode ) { + $date = __( 'Y/m/d' ); + } else { + $date = __( 'Y/m/d g:i:s a' ); + } + echo mysql2date( $date, $user->user_registered ); + } + + /** + * @since 4.3.0 + * + * @param WP_User $user + * @param string $classes + * @param string $data + * @param string $primary + */ + protected function _column_blogs( $user, $classes, $data, $primary ) { + echo ''; + echo $this->column_blogs( $user ); + echo $this->handle_row_actions( $user, 'blogs', $primary ); + echo ''; + } + + /** + * Handles the sites column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_blogs( $user ) { + $blogs = get_blogs_of_user( $user->ID, true ); + if ( ! is_array( $blogs ) ) { + return; + } + + foreach ( $blogs as $val ) { + if ( ! can_edit_network( $val->site_id ) ) { + continue; + } + + $path = ( $val->path === '/' ) ? '' : $val->path; + echo ''; + echo '' . str_replace( '.' . get_network()->domain, '', $val->domain . $path ) . ''; + echo ' '; + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + + $class = ''; + if ( $val->spam == 1 ) { + $class .= 'site-spammed '; + } + if ( $val->mature == 1 ) { + $class .= 'site-mature '; + } + if ( $val->deleted == 1 ) { + $class .= 'site-deleted '; + } + if ( $val->archived == 1 ) { + $class .= 'site-archived '; + } + + $actions['view'] = '' . __( 'View' ) . ''; + + /** + * Filters 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; + $sep = ( $i == $action_count ) ? '' : ' | '; + echo "$link$sep"; + } + echo '
      '; + } + } + + /** + * Handles the default column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + * @param string $column_name The current column name. + */ + public function column_default( $user, $column_name ) { + /** 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 ); + } + + public function display_rows() { + foreach ( $this->items as $user ) { + $class = ''; + + $status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' ); + + foreach ( $status_list as $status => $col ) { + if ( $user->$status ) { + $class .= " $col"; + } + } + + ?> + + single_row_columns( $user ); ?> + + ID ) ) ); + + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + + if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + /** + * Filters 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 ); + return $this->row_actions( $actions ); + } +} diff --git a/wp-admin/includes/class-wp-plugin-install-list-table.php b/wp-admin/includes/class-wp-plugin-install-list-table.php new file mode 100644 index 0000000..9bcf652 --- /dev/null +++ b/wp-admin/includes/class-wp-plugin-install-list-table.php @@ -0,0 +1,634 @@ +no_update ) ) { + foreach ( $plugin_info->no_update as $plugin ) { + $plugin->upgrade = false; + $plugins[ $plugin->slug ] = $plugin; + } + } + + if ( isset( $plugin_info->response ) ) { + foreach ( $plugin_info->response as $plugin ) { + $plugin->upgrade = true; + $plugins[ $plugin->slug ] = $plugin; + } + } + + return $plugins; + } + + /** + * Return a list of slugs of installed plugins, if known. + * + * Uses the transient data from the updates API to determine the slugs of + * known installed plugins. This might be better elsewhere, perhaps even + * within get_plugins(). + * + * @since 4.0.0 + * + * @return array + */ + protected function get_installed_plugin_slugs() { + return array_keys( $this->get_installed_plugins() ); + } + + /** + * + * @global array $tabs + * @global string $tab + * @global int $paged + * @global string $type + * @global string $term + */ + public function prepare_items() { + include( ABSPATH . 'wp-admin/includes/plugin-install.php' ); + + global $tabs, $tab, $paged, $type, $term; + + wp_reset_vars( array( 'tab' ) ); + + $paged = $this->get_pagenum(); + + $per_page = 30; + + // These are the tabs which are shown on the page + $tabs = array(); + + if ( 'search' === $tab ) { + $tabs['search'] = __( 'Search Results' ); + } + if ( $tab === 'beta' || false !== strpos( get_bloginfo( 'version' ), '-' ) ) { + $tabs['beta'] = _x( 'Beta Testing', 'Plugin Installer' ); + } + $tabs['featured'] = _x( 'Featured', 'Plugin Installer' ); + $tabs['popular'] = _x( 'Popular', 'Plugin Installer' ); + $tabs['recommended'] = _x( 'Recommended', 'Plugin Installer' ); + $tabs['favorites'] = _x( 'Favorites', 'Plugin Installer' ); + if ( current_user_can( 'upload_plugins' ) ) { + // No longer a real tab. Here for filter compatibility. + // Gets skipped in get_views(). + $tabs['upload'] = __( 'Upload Plugin' ); + } + + $nonmenu_tabs = array( 'plugin-information' ); // Valid actions to perform which do not have a Menu item. + + /** + * Filters the tabs shown on the Plugin Install screen. + * + * @since 2.7.0 + * + * @param array $tabs The tabs shown on the Plugin Install screen. Defaults include 'featured', 'popular', + * 'recommended', 'favorites', and 'upload'. + */ + $tabs = apply_filters( 'install_plugins_tabs', $tabs ); + + /** + * Filters 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 ); + + $installed_plugins = $this->get_installed_plugins(); + + $args = array( + 'page' => $paged, + 'per_page' => $per_page, + 'fields' => array( + 'last_updated' => true, + 'icons' => true, + 'active_installs' => true + ), + // Send the locale and installed plugin slugs to the API so it can provide context-sensitive results. + 'locale' => get_user_locale(), + 'installed_plugins' => array_keys( $installed_plugins ), + ); + + 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; + } + + break; + + case 'featured': + $args['fields']['group'] = true; + $this->orderby = 'group'; + // No break! + case 'popular': + case 'new': + case 'beta': + case 'recommended': + $args['browse'] = $tab; + break; + + case 'favorites': + $action = 'save_wporg_username_' . get_current_user_id(); + if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( wp_unslash( $_GET['_wpnonce'] ), $action ) ) { + $user = isset( $_GET['user'] ) ? wp_unslash( $_GET['user'] ) : get_user_option( 'wporg_favorites' ); + update_user_meta( get_current_user_id(), 'wporg_favorites', $user ); + } else { + $user = get_user_option( 'wporg_favorites' ); + } + if ( $user ) + $args['user'] = $user; + else + $args = false; + + add_action( 'install_plugins_favorites', 'install_plugins_favorites_form', 9, 0 ); + break; + + default: + $args = false; + break; + } + + /** + * Filters 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 include 'featured', 'popular', 'recommended', 'favorites', and 'upload'. + * + * @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 ) ) { + $this->error = $api; + return; + } + + $this->items = $api->plugins; + + if ( $this->orderby ) { + uasort( $this->items, array( $this, 'order_callback' ) ); + } + + $this->set_pagination_args( array( + 'total_items' => $api->info['results'], + 'per_page' => $args['per_page'], + ) ); + + if ( isset( $api->info['groups'] ) ) { + $this->groups = $api->info['groups']; + } + + if ( $installed_plugins ) { + $js_plugins = array_fill_keys( + array( 'all', 'search', 'active', 'inactive', 'recently_activated', 'mustuse', 'dropins' ), + array() + ); + + $js_plugins['all'] = array_values( wp_list_pluck( $installed_plugins, 'plugin' ) ); + $upgrade_plugins = wp_filter_object_list( $installed_plugins, array( 'upgrade' => true ), 'and', 'plugin' ); + + if ( $upgrade_plugins ) { + $js_plugins['upgrade'] = array_values( $upgrade_plugins ); + } + + wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( + 'plugins' => $js_plugins, + 'totals' => wp_get_update_data(), + ) ); + } + } + + /** + */ + public function no_items() { + if ( isset( $this->error ) ) { ?> +

      error->get_error_message(); ?>

      +

      +
      + +
      + $text ) { + $current_link_attributes = ( $action === $tab ) ? ' class="current" aria-current="page"' : ''; + $href = self_admin_url('plugin-install.php?tab=' . $action); + $display_tabs['plugin-install-'.$action] = "$text"; + } + // No longer a real tab. + unset( $display_tabs['plugin-install-upload'] ); + + return $display_tabs; + } + + /** + * Override parent views so we can use the filter bar display. + */ + public function views() { + $views = $this->get_views(); + + /** This filter is documented in wp-admin/inclues/class-wp-list-table.php */ + $views = apply_filters( "views_{$this->screen->id}", $views ); + + $this->screen->render_screen_reader_content( 'heading_views' ); +?> +
      + + + +
      +_args['singular']; + + $data_attr = ''; + + if ( $singular ) { + $data_attr = " data-wp-lists='list:$singular'"; + } + + $this->display_tablenav( 'top' ); + +?> +
      +screen->render_screen_reader_content( 'heading_list' ); +?> +
      > + display_rows_or_placeholder(); ?> +
      +
      +display_tablenav( 'bottom' ); + } + + /** + * @global string $tab + * + * @param string $which + */ + protected function display_tablenav( $which ) { + if ( $GLOBALS['tab'] === 'featured' ) { + return; + } + + if ( 'top' === $which ) { + wp_referer_field(); + ?> +
      +
      + +
      + pagination( $which ); ?> +
      +
      + +
      + pagination( $which ); ?> +
      +
      + _args['plural'] ); + } + + /** + * @return array + */ + public function get_columns() { + return array(); + } + + /** + * @param object $plugin_a + * @param object $plugin_b + * @return int + */ + private function order_callback( $plugin_a, $plugin_b ) { + $orderby = $this->orderby; + if ( ! isset( $plugin_a->$orderby, $plugin_b->$orderby ) ) { + return 0; + } + + $a = $plugin_a->$orderby; + $b = $plugin_b->$orderby; + + if ( $a == $b ) { + return 0; + } + + if ( 'DESC' === $this->order ) { + return ( $a < $b ) ? 1 : -1; + } else { + return ( $a < $b ) ? -1 : 1; + } + } + + public 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() + ); + + $plugins_group_titles = array( + 'Performance' => _x( 'Performance', 'Plugin installer group title' ), + 'Social' => _x( 'Social', 'Plugin installer group title' ), + 'Tools' => _x( 'Tools', 'Plugin installer group title' ), + ); + + $group = null; + + foreach ( (array) $this->items as $plugin ) { + if ( is_object( $plugin ) ) { + $plugin = (array) $plugin; + } + + // Display the group heading if there is one + if ( isset( $plugin['group'] ) && $plugin['group'] != $group ) { + if ( isset( $this->groups[ $plugin['group'] ] ) ) { + $group_name = $this->groups[ $plugin['group'] ]; + if ( isset( $plugins_group_titles[ $group_name ] ) ) { + $group_name = $plugins_group_titles[ $group_name ]; + } + } else { + $group_name = $plugin['group']; + } + + // Starting a new group, close off the divs of the last one + if ( ! empty( $group ) ) { + echo ''; + } + + echo '

      ' . esc_html( $group_name ) . '

      '; + // needs an extra wrapping div for nth-child selectors to work + echo '
      '; + + $group = $plugin['group']; + } + $title = wp_kses( $plugin['name'], $plugins_allowedtags ); + + // Remove any HTML from the description. + $description = strip_tags( $plugin['short_description'] ); + $version = wp_kses( $plugin['version'], $plugins_allowedtags ); + + $name = strip_tags( $title . ' ' . $version ); + + $author = wp_kses( $plugin['author'], $plugins_allowedtags ); + if ( ! empty( $author ) ) { + $author = ' ' . sprintf( __( 'By %s' ), $author ) . ''; + } + + $action_links = array(); + + 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'] ) { + /* translators: 1: Plugin name and version. */ + $action_links[] = '' . __( 'Install Now' ) . ''; + } + break; + + case 'update_available': + if ( $status['url'] ) { + /* translators: 1: Plugin name and version */ + $action_links[] = '' . __( 'Update Now' ) . ''; + } + break; + + case 'latest_installed': + case 'newer_installed': + if ( is_plugin_active( $status['file'] ) ) { + $action_links[] = ''; + } elseif ( current_user_can( 'activate_plugin', $status['file'] ) ) { + $button_text = __( 'Activate' ); + /* translators: %s: Plugin name */ + $button_label = _x( 'Activate %s', 'plugin' ); + $activate_url = add_query_arg( array( + '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ), + 'action' => 'activate', + 'plugin' => $status['file'], + ), network_admin_url( 'plugins.php' ) ); + + if ( is_network_admin() ) { + $button_text = __( 'Network Activate' ); + /* translators: %s: Plugin name */ + $button_label = _x( 'Network Activate %s', 'plugin' ); + $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url ); + } + + $action_links[] = sprintf( + '%3$s', + esc_url( $activate_url ), + esc_attr( sprintf( $button_label, $plugin['name'] ) ), + $button_text + ); + } else { + $action_links[] = ''; + } + break; + } + } + + $details_link = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin['slug'] . + '&TB_iframe=true&width=600&height=550' ); + + /* translators: 1: Plugin name and version. */ + $action_links[] = '' . __( 'More Details' ) . ''; + + if ( !empty( $plugin['icons']['svg'] ) ) { + $plugin_icon_url = $plugin['icons']['svg']; + } elseif ( !empty( $plugin['icons']['2x'] ) ) { + $plugin_icon_url = $plugin['icons']['2x']; + } elseif ( !empty( $plugin['icons']['1x'] ) ) { + $plugin_icon_url = $plugin['icons']['1x']; + } else { + $plugin_icon_url = $plugin['icons']['default']; + } + + /** + * Filters 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 ); + + $last_updated_timestamp = strtotime( $plugin['last_updated'] ); + ?> +
      +
      +
      +

      + + + + +

      +
      + +
      +

      +

      +
      +
      +
      +
      + $plugin['rating'], 'type' => 'percent', 'number' => $plugin['num_ratings'] ) ); ?> + +
      +
      + +
      +
      + = 1000000 ) { + $active_installs_text = _x( '1+ Million', 'Active plugin installations' ); + } elseif ( 0 == $plugin['active_installs'] ) { + $active_installs_text = _x( 'Less Than 10', 'Active plugin installations' ); + } else { + $active_installs_text = number_format_i18n( $plugin['active_installs'] ) . '+'; + } + printf( __( '%s Active Installations' ), $active_installs_text ); + ?> +
      +
      + ' ) ) { + echo '' . __( 'Untested with your version of WordPress' ) . ''; + } elseif ( ! empty( $plugin['requires'] ) && version_compare( substr( $wp_version, 0, strlen( $plugin['requires'] ) ), $plugin['requires'], '<' ) ) { + echo '' . __( 'Incompatible with your version of WordPress' ) . ''; + } else { + echo '' . __( 'Compatible with your version of WordPress' ) . ''; + } + ?> +
      +
      +
      +
      '; + } + } +} diff --git a/wp-admin/includes/class-wp-plugins-list-table.php b/wp-admin/includes/class-wp-plugins-list-table.php new file mode 100644 index 0000000..2cc6c77 --- /dev/null +++ b/wp-admin/includes/class-wp-plugins-list-table.php @@ -0,0 +1,872 @@ + '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(); + } + + /** + * @return array + */ + protected function get_table_classes() { + return array( 'widefat', $this->_args['plural'] ); + } + + /** + * @return bool + */ + public function ajax_user_can() { + return current_user_can('activate_plugins'); + } + + /** + * + * @global string $status + * @global array $plugins + * @global array $totals + * @global int $page + * @global string $orderby + * @global string $order + * @global string $s + */ + public function prepare_items() { + global $status, $plugins, $totals, $page, $orderby, $order, $s; + + wp_reset_vars( array( 'orderby', 'order' ) ); + + /** + * Filters the full array of plugins to list in the Plugins list table. + * + * @since 3.0.0 + * + * @see get_plugins() + * + * @param array $all_plugins An array of plugins to display in the list table. + */ + $all_plugins = apply_filters( 'all_plugins', get_plugins() ); + + $plugins = array( + 'all' => $all_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' ) ) ) { + + /** + * Filters 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 ]; + } + } + } + } + + if ( ! $screen->in_admin( 'network' ) ) { + $show = current_user_can( 'manage_network_plugins' ); + /** + * Filters whether to display network-active plugins alongside plugins active for the current site. + * + * This also controls the display of inactive network-only plugins (plugins with + * "Network: true" in the plugin header). + * + * Plugins cannot be network-activated or network-deactivated from this screen. + * + * @since 4.4.0 + * + * @param bool $show Whether to show network-active plugins. Default is whether the current + * user can manage network plugins (ie. a Super Admin). + */ + $show_network_active = apply_filters( 'show_network_active_plugins', $show ); + } + + set_transient( 'plugin_slugs', array_keys( $plugins['all'] ), DAY_IN_SECONDS ); + + if ( $screen->in_admin( 'network' ) ) { + $recently_activated = get_site_option( 'recently_activated', array() ); + } else { + $recently_activated = get_option( 'recently_activated', array() ); + } + + foreach ( $recently_activated as $key => $time ) { + if ( $time + WEEK_IN_SECONDS < time() ) { + unset( $recently_activated[$key] ); + } + } + + if ( $screen->in_admin( 'network' ) ) { + update_site_option( 'recently_activated', $recently_activated ); + } else { + update_option( 'recently_activated', $recently_activated ); + } + + $plugin_info = get_site_transient( 'update_plugins' ); + + foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) { + // Extra info if known. array_merge() ensures $plugin_data has precedence if keys collide. + if ( isset( $plugin_info->response[ $plugin_file ] ) ) { + $plugins['all'][ $plugin_file ] = $plugin_data = array_merge( (array) $plugin_info->response[ $plugin_file ], $plugin_data ); + // Make sure that $plugins['upgrade'] also receives the extra info since it is used on ?plugin_status=upgrade + if ( isset( $plugins['upgrade'][ $plugin_file ] ) ) { + $plugins['upgrade'][ $plugin_file ] = $plugin_data = array_merge( (array) $plugin_info->response[ $plugin_file ], $plugin_data ); + } + + } elseif ( isset( $plugin_info->no_update[ $plugin_file ] ) ) { + $plugins['all'][ $plugin_file ] = $plugin_data = array_merge( (array) $plugin_info->no_update[ $plugin_file ], $plugin_data ); + // Make sure that $plugins['upgrade'] also receives the extra info since it is used on ?plugin_status=upgrade + if ( isset( $plugins['upgrade'][ $plugin_file ] ) ) { + $plugins['upgrade'][ $plugin_file ] = $plugin_data = array_merge( (array) $plugin_info->no_update[ $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 ) ) { + if ( $show_network_active ) { + // On the non-network screen, show inactive network-only plugins if allowed + $plugins['inactive'][ $plugin_file ] = $plugin_data; + } else { + // On the non-network screen, filter out network-only plugins as long as they're not individually active + unset( $plugins['all'][ $plugin_file ] ); + } + } elseif ( ! $screen->in_admin( 'network' ) && is_plugin_active_for_network( $plugin_file ) ) { + if ( $show_network_active ) { + // On the non-network screen, show network-active plugins if allowed + $plugins['active'][ $plugin_file ] = $plugin_data; + } else { + // On the non-network screen, filter out network-active 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 ( isset( $recently_activated[ $plugin_file ] ) ) { + // 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 ( strlen( $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 ]; + + $js_plugins = array(); + foreach ( $plugins as $key => $list ) { + $js_plugins[ $key ] = array_keys( (array) $list ); + } + + wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( + 'plugins' => $js_plugins, + 'totals' => wp_get_update_data(), + ) ); + + if ( ! $orderby ) { + $orderby = 'Name'; + } else { + $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, + ) ); + } + + /** + * @global string $s URL encoded search term. + * + * @param array $plugin + * @return bool + */ + public function _search_callback( $plugin ) { + global $s; + + foreach ( $plugin as $value ) { + if ( is_string( $value ) && false !== stripos( strip_tags( $value ), urldecode( $s ) ) ) { + return true; + } + } + + return false; + } + + /** + * @global string $orderby + * @global string $order + * @param array $plugin_a + * @param array $plugin_b + * @return int + */ + public 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 strcasecmp( $b, $a ); + } else { + return strcasecmp( $a, $b ); + } + } + + /** + * + * @global array $plugins + */ + public function no_items() { + global $plugins; + + if ( ! empty( $_REQUEST['s'] ) ) { + $s = esc_html( wp_unslash( $_REQUEST['s'] ) ); + + printf( __( 'No plugins found for “%s”.' ), $s ); + + // We assume that somebody who can install plugins in multisite is experienced enough to not need this helper link. + if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) { + echo ' ' . __( 'Search for plugins in the WordPress Plugin Directory.' ) . ''; + } + } elseif ( ! empty( $plugins['all'] ) ) + _e( 'No plugins found.' ); + else + _e( 'You do not appear to have any plugins available at this time.' ); + } + + /** + * Displays the search box. + * + * @since 4.6.0 + * + * @param string $text The 'submit' button label. + * @param string $input_id ID attribute value for the search input field. + */ + public 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 ''; + } + ?> + + !in_array( $status, array( 'mustuse', 'dropins' ) ) ? '' : '', + 'name' => __( 'Plugin' ), + 'description' => __( 'Description' ), + ); + } + + /** + * @return array + */ + protected function get_sortable_columns() { + return array(); + } + + /** + * + * @global array $totals + * @global string $status + * @return array + */ + protected 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" aria-current="page"' : '', + sprintf( $text, number_format_i18n( $count ) ) + ); + } + } + + return $status_links; + } + + /** + * + * @global string $status + * @return array + */ + protected 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; + } + + /** + * @global string $status + * @param string $which + */ + public function bulk_actions( $which = '' ) { + global $status; + + if ( in_array( $status, array( 'mustuse', 'dropins' ) ) ) + return; + + parent::bulk_actions( $which ); + } + + /** + * @global string $status + * @param string $which + */ + protected function extra_tablenav( $which ) { + global $status; + + if ( ! in_array($status, array('recently_activated', 'mustuse', 'dropins') ) ) + return; + + echo '
      '; + + if ( 'recently_activated' == $status ) { + submit_button( __( 'Clear List' ), '', 'clear-recent-list', false ); + } elseif ( 'top' === $which && 'mustuse' === $status ) { + /* translators: %s: mu-plugins directory name */ + echo '

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

      '; + } elseif ( 'top' === $which && 'dropins' === $status ) { + /* translators: %s: wp-content directory name */ + echo '

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

      '; + } + echo '
      '; + } + + /** + * @return string + */ + public function current_action() { + if ( isset($_POST['clear-recent-list']) ) + return 'clear-recent-list'; + + return parent::current_action(); + } + + /** + * + * @global string $status + */ + public 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 ) ); + } + + /** + * @global string $status + * @global int $page + * @global string $s + * @global array $totals + * + * @param array $item + */ + public function single_row( $item ) { + global $status, $page, $s, $totals; + + list( $plugin_file, $plugin_data ) = $item; + $context = $status; + $screen = $this->screen; + + // Pre-order. + $actions = array( + 'deactivate' => '', + 'activate' => '', + 'details' => '', + 'delete' => '', + ); + + // Do not restrict by default + $restrict_network_active = false; + $restrict_network_only = false; + + 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:' ) . ' ' . + /* translators: 1: drop-in constant name, 2: wp-config.php */ + sprintf( __( 'Requires %1$s in %2$s file.' ), + "define('" . $dropins[ $plugin_file ][1] . "', true);", + 'wp-config.php' + ) . '

      '; + } + 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 ); + $restrict_network_active = ( is_multisite() && is_plugin_active_for_network( $plugin_file ) ); + $restrict_network_only = ( is_multisite() && is_network_only_plugin( $plugin_file ) && ! $is_active ); + } + + if ( $screen->in_admin( 'network' ) ) { + if ( $is_active ) { + if ( current_user_can( 'manage_network_plugins' ) ) { + /* translators: %s: plugin name */ + $actions['deactivate'] = '' . __( 'Network Deactivate' ) . ''; + } + } else { + if ( current_user_can( 'manage_network_plugins' ) ) { + /* translators: %s: plugin name */ + $actions['activate'] = '' . __( 'Network Activate' ) . ''; + } + if ( current_user_can( 'delete_plugins' ) && ! is_plugin_active( $plugin_file ) ) { + /* translators: %s: plugin name */ + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + } + } else { + if ( $restrict_network_active ) { + $actions = array( + 'network_active' => __( 'Network Active' ), + ); + } elseif ( $restrict_network_only ) { + $actions = array( + 'network_only' => __( 'Network Only' ), + ); + } elseif ( $is_active ) { + if ( current_user_can( 'deactivate_plugin', $plugin_file ) ) { + /* translators: %s: plugin name */ + $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; + } + } else { + if ( current_user_can( 'activate_plugin', $plugin_file ) ) { + /* translators: %s: plugin name */ + $actions['activate'] = '' . __( 'Activate' ) . ''; + } + + if ( ! is_multisite() && current_user_can( 'delete_plugins' ) ) { + /* translators: %s: plugin name */ + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + } // end if $is_active + + } // end if $screen->in_admin( 'network' ) + + } // end if $context + + $actions = array_filter( $actions ); + + if ( $screen->in_admin( 'network' ) ) { + + /** + * Filters the action links displayed for each plugin in the Network Admin Plugins list table. + * + * @since 3.1.0 + * + * @param array $actions An array of plugin action links. By default this can include 'activate', + * 'deactivate', and 'delete'. + * @param string $plugin_file Path to the plugin file relative to the plugins directory. + * @param array $plugin_data An array of plugin data. See `get_plugin_data()`. + * @param string $context The plugin context. By default this can include 'all', 'active', 'inactive', + * 'recently_activated', 'upgrade', 'mustuse', 'dropins', and 'search'. + */ + $actions = apply_filters( 'network_admin_plugin_action_links', $actions, $plugin_file, $plugin_data, $context ); + + /** + * Filters the list of action links displayed for a specific plugin in the Network Admin 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 3.1.0 + * + * @param array $actions An array of plugin action links. By default this can include 'activate', + * 'deactivate', and 'delete'. + * @param string $plugin_file Path to the plugin file relative to the plugins directory. + * @param array $plugin_data An array of plugin data. See `get_plugin_data()`. + * @param string $context The plugin context. By default this can include 'all', 'active', 'inactive', + * 'recently_activated', 'upgrade', 'mustuse', 'dropins', and 'search'. + */ + $actions = apply_filters( "network_admin_plugin_action_links_{$plugin_file}", $actions, $plugin_file, $plugin_data, $context ); + + } else { + + /** + * Filters the action links displayed for each plugin in the Plugins list table. + * + * @since 2.5.0 + * @since 2.6.0 The `$context` parameter was added. + * @since 4.9.0 The 'Edit' link was removed from the list of action links. + * + * @param array $actions An array of plugin action links. By default this can include 'activate', + * 'deactivate', and 'delete'. With Multisite active this can also include + * 'network_active' and 'network_only' items. + * @param string $plugin_file Path to the plugin file relative to the plugins directory. + * @param array $plugin_data An array of plugin data. See `get_plugin_data()`. + * @param string $context The plugin context. By default this can include 'all', 'active', 'inactive', + * 'recently_activated', 'upgrade', 'mustuse', 'dropins', and 'search'. + */ + $actions = apply_filters( 'plugin_action_links', $actions, $plugin_file, $plugin_data, $context ); + + /** + * Filters the list of action links displayed for a specific plugin 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 + * @since 4.9.0 The 'Edit' link was removed from the list of action links. + * + * @param array $actions An array of plugin action links. By default this can include 'activate', + * 'deactivate', and 'delete'. With Multisite active this can also include + * 'network_active' and 'network_only' items. + * @param string $plugin_file Path to the plugin file relative to the plugins directory. + * @param array $plugin_data An array of plugin data. See `get_plugin_data()`. + * @param string $context The plugin context. By default this can include 'all', 'active', 'inactive', + * 'recently_activated', 'upgrade', 'mustuse', 'dropins', and 'search'. + */ + $actions = apply_filters( "plugin_action_links_{$plugin_file}", $actions, $plugin_file, $plugin_data, $context ); + + } + + $class = $is_active ? 'active' : 'inactive'; + $checkbox_id = "checkbox_" . md5($plugin_data['Name']); + if ( $restrict_network_active || $restrict_network_only || in_array( $status, array( 'mustuse', 'dropins' ) ) ) { + $checkbox = ''; + } else { + $checkbox = "" + . ""; + } + if ( 'dropins' != $context ) { + $description = '

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

      '; + $plugin_name = $plugin_data['Name']; + } + + if ( ! empty( $totals['upgrade'] ) && ! empty( $plugin_data['update'] ) ) + $class .= ' update'; + + $plugin_slug = isset( $plugin_data['slug'] ) ? $plugin_data['slug'] : sanitize_title( $plugin_name ); + printf( '', + esc_attr( $class ), + esc_attr( $plugin_slug ), + esc_attr( $plugin_file ) + ); + + list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $extra_classes = ''; + if ( in_array( $column_name, $hidden ) ) { + $extra_classes = ' hidden'; + } + + switch ( $column_name ) { + case 'cb': + echo "$checkbox"; + break; + case 'name': + echo "$plugin_name"; + echo $this->row_actions( $actions, true ); + echo ""; + break; + case 'description': + $classes = 'column-description desc'; + + 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 ); + } + + // Details link using API info, if available + if ( isset( $plugin_data['slug'] ) && current_user_can( 'install_plugins' ) ) { + $plugin_meta[] = sprintf( '%s', + esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin_data['slug'] . + '&TB_iframe=true&width=600&height=550' ) ), + esc_attr( sprintf( __( 'More information about %s' ), $plugin_name ) ), + esc_attr( $plugin_name ), + __( 'View details' ) + ); + } elseif ( ! empty( $plugin_data['PluginURI'] ) ) { + $plugin_meta[] = sprintf( '%s', + esc_url( $plugin_data['PluginURI'] ), + __( 'Visit plugin site' ) + ); + } + + /** + * Filters 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 "
      "; + break; + default: + $classes = "$column_name column-$column_name $class"; + + 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 ""; + } + } + + 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 ); + } + + /** + * Gets the name of the primary column for this specific list table. + * + * @since 4.3.0 + * + * @return string Unalterable name for the primary column, in this case, 'name'. + */ + protected function get_primary_column_name() { + return 'name'; + } +} diff --git a/wp-admin/includes/class-wp-post-comments-list-table.php b/wp-admin/includes/class-wp-post-comments-list-table.php new file mode 100644 index 0000000..719d655 --- /dev/null +++ b/wp-admin/includes/class-wp-post-comments-list-table.php @@ -0,0 +1,77 @@ + __( 'Author' ), + 'comment' => _x( 'Comment', 'column name' ), + ), + array(), + array(), + 'comment', + ); + } + + /** + * + * @return array + */ + protected function get_table_classes() { + $classes = parent::get_table_classes(); + $classes[] = 'wp-list-table'; + $classes[] = 'comments-box'; + return $classes; + } + + /** + * + * @param bool $output_empty + */ + public function display( $output_empty = false ) { + $singular = $this->_args['singular']; + + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); +?> + + > + display_rows_or_placeholder(); + } ?> + + + 'posts', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $post_type = $this->screen->post_type; + $post_type_object = get_post_type_object( $post_type ); + + $exclude_states = get_post_stati( array( + 'show_in_admin_all_list' => false, + ) ); + $this->user_posts_count = intval( $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 && ! current_user_can( $post_type_object->cap->edit_others_posts ) && 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 ) ); + } + } + + /** + * Sets whether the table layout should be hierarchical or not. + * + * @since 4.2.0 + * + * @param bool $display Whether the table layout should be hierarchical. + */ + public function set_hierarchical_display( $display ) { + $this->hierarchical_display = $display; + } + + /** + * + * @return bool + */ + public function ajax_user_can() { + return current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_posts ); + } + + /** + * + * @global array $avail_post_stati + * @global WP_Query $wp_query + * @global int $per_page + * @global string $mode + */ + public function prepare_items() { + global $avail_post_stati, $wp_query, $per_page, $mode; + + // is going to call wp() + $avail_post_stati = wp_edit_posts_query(); + + $this->set_hierarchical_display( is_post_type_hierarchical( $this->screen->post_type ) && 'menu_order title' === $wp_query->query['orderby'] ); + + $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_items = $wp_query->post_count; + } elseif ( $wp_query->found_posts || $this->get_pagenum() === 1 ) { + $total_items = $wp_query->found_posts; + } else { + $post_counts = (array) wp_count_posts( $post_type, 'readable' ); + + if ( isset( $_REQUEST['post_status'] ) && in_array( $_REQUEST['post_status'] , $avail_post_stati ) ) { + $total_items = $post_counts[ $_REQUEST['post_status'] ]; + } elseif ( isset( $_REQUEST['show_sticky'] ) && $_REQUEST['show_sticky'] ) { + $total_items = $this->sticky_posts_count; + } elseif ( isset( $_GET['author'] ) && $_GET['author'] == get_current_user_id() ) { + $total_items = $this->user_posts_count; + } else { + $total_items = array_sum( $post_counts ); + + // 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_items -= $post_counts[ $state ]; + } + } + } + + if ( ! empty( $_REQUEST['mode'] ) ) { + $mode = $_REQUEST['mode'] === 'excerpt' ? 'excerpt' : 'list'; + set_user_setting( 'posts_list_mode', $mode ); + } else { + $mode = get_user_setting( 'posts_list_mode', 'list' ); + } + + $this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] === 'trash'; + + $this->set_pagination_args( array( + 'total_items' => $total_items, + 'per_page' => $per_page + ) ); + } + + /** + * + * @return bool + */ + public function has_items() { + return have_posts(); + } + + /** + */ + public 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; + } + + /** + * Determine if the current view is the "All" view. + * + * @since 4.2.0 + * + * @return bool Whether the current view is the "All" view. + */ + protected function is_base_request() { + $vars = $_GET; + unset( $vars['paged'] ); + + if ( empty( $vars ) ) { + return true; + } elseif ( 1 === count( $vars ) && ! empty( $vars['post_type'] ) ) { + return $this->screen->post_type === $vars['post_type']; + } + + return 1 === count( $vars ) && ! empty( $vars['mode'] ); + } + + /** + * Helper to create links to edit.php with params. + * + * @since 4.4.0 + * + * @param array $args URL parameters for the link. + * @param string $label Link text. + * @param string $class Optional. Class attribute. Default empty string. + * @return string The formatted link string. + */ + protected function get_edit_link( $args, $label, $class = '' ) { + $url = add_query_arg( $args, 'edit.php' ); + + $class_html = $aria_current = ''; + if ( ! empty( $class ) ) { + $class_html = sprintf( + ' class="%s"', + esc_attr( $class ) + ); + + if ( 'current' === $class ) { + $aria_current = ' aria-current="page"'; + } + } + + return sprintf( + '%s', + esc_url( $url ), + $class_html, + $aria_current, + $label + ); + } + + /** + * + * @global array $locked_post_status This seems to be deprecated. + * @global array $avail_post_stati + * @return array + */ + protected 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' ); + $total_posts = array_sum( (array) $num_posts ); + $class = ''; + + $current_user_id = get_current_user_id(); + $all_args = array( 'post_type' => $post_type ); + $mine = ''; + + // 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; + } + + if ( $this->user_posts_count && $this->user_posts_count !== $total_posts ) { + if ( isset( $_GET['author'] ) && ( $_GET['author'] == $current_user_id ) ) { + $class = 'current'; + } + + $mine_args = array( + 'post_type' => $post_type, + 'author' => $current_user_id + ); + + $mine_inner_html = sprintf( + _nx( + 'Mine (%s)', + 'Mine (%s)', + $this->user_posts_count, + 'posts' + ), + number_format_i18n( $this->user_posts_count ) + ); + + $mine = $this->get_edit_link( $mine_args, $mine_inner_html, $class ); + + $all_args['all_posts'] = 1; + $class = ''; + } + + if ( empty( $class ) && ( $this->is_base_request() || isset( $_REQUEST['all_posts'] ) ) ) { + $class = 'current'; + } + + $all_inner_html = sprintf( + _nx( + 'All (%s)', + 'All (%s)', + $total_posts, + 'posts' + ), + number_format_i18n( $total_posts ) + ); + + $status_links['all'] = $this->get_edit_link( $all_args, $all_inner_html, $class ); + if ( $mine ) { + $status_links['mine'] = $mine; + } + + 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 ) || empty( $num_posts->$status_name ) ) { + continue; + } + + if ( isset($_REQUEST['post_status']) && $status_name === $_REQUEST['post_status'] ) { + $class = 'current'; + } + + $status_args = array( + 'post_status' => $status_name, + 'post_type' => $post_type, + ); + + $status_label = sprintf( + translate_nooped_plural( $status->label_count, $num_posts->$status_name ), + number_format_i18n( $num_posts->$status_name ) + ); + + $status_links[ $status_name ] = $this->get_edit_link( $status_args, $status_label, $class ); + } + + if ( ! empty( $this->sticky_posts_count ) ) { + $class = ! empty( $_REQUEST['show_sticky'] ) ? 'current' : ''; + + $sticky_args = array( + 'post_type' => $post_type, + 'show_sticky' => 1 + ); + + $sticky_inner_html = sprintf( + _nx( + 'Sticky (%s)', + 'Sticky (%s)', + $this->sticky_posts_count, + 'posts' + ), + number_format_i18n( $this->sticky_posts_count ) + ); + + $sticky_link = array( + 'sticky' => $this->get_edit_link( $sticky_args, $sticky_inner_html, $class ) + ); + + // 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; + } + + /** + * + * @return array + */ + protected function get_bulk_actions() { + $actions = array(); + $post_type_obj = get_post_type_object( $this->screen->post_type ); + + if ( current_user_can( $post_type_obj->cap->edit_posts ) ) { + if ( $this->is_trash ) { + $actions['untrash'] = __( 'Restore' ); + } else { + $actions['edit'] = __( 'Edit' ); + } + } + + if ( current_user_can( $post_type_obj->cap->delete_posts ) ) { + if ( $this->is_trash || ! EMPTY_TRASH_DAYS ) { + $actions['delete'] = __( 'Delete Permanently' ); + } else { + $actions['trash'] = __( 'Move to Trash' ); + } + } + + return $actions; + } + + /** + * Displays a categories drop-down for filtering on the Posts list table. + * + * @since 4.6.0 + * + * @global int $cat Currently selected category. + * + * @param string $post_type Post type slug. + */ + protected function categories_dropdown( $post_type ) { + global $cat; + + /** + * Filters whether to remove the 'Categories' drop-down from the post list table. + * + * @since 4.6.0 + * + * @param bool $disable Whether to disable the categories drop-down. Default false. + * @param string $post_type Post type slug. + */ + if ( false !== apply_filters( 'disable_categories_dropdown', false, $post_type ) ) { + return; + } + + if ( is_object_in_taxonomy( $post_type, 'category' ) ) { + $dropdown_options = array( + 'show_option_all' => get_taxonomy( 'category' )->labels->all_items, + 'hide_empty' => 0, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + 'selected' => $cat + ); + + echo ''; + wp_dropdown_categories( $dropdown_options ); + } + } + + /** + * @param string $which + */ + protected function extra_tablenav( $which ) { +?> +
      +months_dropdown( $this->screen->post_type ); + $this->categories_dropdown( $this->screen->post_type ); + + /** + * 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 + * @since 4.4.0 The `$post_type` parameter was added. + * @since 4.6.0 The `$which` parameter was added. + * + * @param string $post_type The post type slug. + * @param string $which The location of the extra table nav markup: + * 'top' or 'bottom' for WP_Posts_List_Table, + * 'bar' for WP_Media_List_Table. + */ + do_action( 'restrict_manage_posts', $this->screen->post_type, $which ); + + $output = ob_get_clean(); + + if ( ! empty( $output ) ) { + echo $output; + submit_button( __( 'Filter' ), '', 'filter_action', 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 ) && $this->has_items() ) { + submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false ); + } +?> +
      +screen->post_type ) ? 'pages' : 'posts' ); + } + + /** + * + * @return array + */ + public 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 = get_object_taxonomies( $post_type, 'objects' ); + $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); + + /** + * Filters 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'] = '' . __( 'Comments' ) . ''; + + $posts_columns['date'] = __( 'Date' ); + + if ( 'page' === $post_type ) { + + /** + * Filters 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 { + + /** + * Filters 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 ); + } + + /** + * Filters 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. + */ + return apply_filters( "manage_{$post_type}_posts_columns", $posts_columns ); + } + + /** + * + * @return array + */ + protected function get_sortable_columns() { + return array( + 'title' => 'title', + 'parent' => 'parent', + 'comments' => 'comment_count', + 'date' => array( 'date', true ) + ); + } + + /** + * @global WP_Query $wp_query + * @global int $per_page + * @param array $posts + * @param int $level + */ + public 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 ); + } + } + + /** + * @param array $posts + * @param int $level + */ + private function _display_rows( $posts, $level = 0 ) { + // 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 ); + } + + /** + * @global wpdb $wpdb + * @global WP_Post $post + * @param array $pages + * @param int $pagenum + * @param int $per_page + */ + private 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; + } + + /* + * 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; + $to_display = array(); + + foreach ( $pages as $page ) { + if ( $count >= $end ) + break; + + if ( $count >= $start ) { + $to_display[$page->ID] = $level; + } + + $count++; + + if ( isset( $children_pages ) ) + $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page, $to_display ); + } + + // 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 ) { + $to_display[$op->ID] = 0; + } + + $count++; + } + } + } + + $ids = array_keys( $to_display ); + _prime_post_caches( $ids ); + + if ( ! isset( $GLOBALS['post'] ) ) { + $GLOBALS['post'] = reset( $ids ); + } + + foreach ( $to_display as $page_id => $level ) { + echo "\t"; + $this->single_row( $page_id, $level ); + } + } + + /** + * 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) + * @since 4.2.0 Added the `$to_display` parameter. + * + * @param array $children_pages + * @param int $count + * @param int $parent + * @param int $level + * @param int $pagenum + * @param int $per_page + * @param array $to_display List of pages to be displayed. Passed by reference. + */ + private function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page, &$to_display ) { + 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 ) { + // Get the ID from the list or the attribute if my_parent is an object + $parent_id = $my_parent; + if ( is_object( $my_parent ) ) { + $parent_id = $my_parent->ID; + } + + $my_parent = get_post( $parent_id ); + $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 ) ) { + $to_display[$my_parent->ID] = $level - $num_parents; + $num_parents--; + } + } + + if ( $count >= $start ) { + $to_display[$page->ID] = $level; + } + + $count++; + + $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page, $to_display ); + } + + unset( $children_pages[$parent] ); //required in order to keep track of orphans + } + + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_cb( $post ) { + if ( current_user_can( 'edit_post', $post->ID ) ): ?> + + +
      + + +
      + '; + echo $this->column_title( $post ); + echo $this->handle_row_actions( $post, 'title', $primary ); + echo ''; + } + + /** + * Handles the title column output. + * + * @since 4.3.0 + * + * @global string $mode List table view mode. + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_title( $post ) { + global $mode; + + if ( $this->hierarchical_display ) { + if ( 0 === $this->current_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; + } + + $this->current_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 ); + } + } + } + } + + $can_edit_post = current_user_can( 'edit_post', $post->ID ); + + if ( $can_edit_post && $post->post_status != 'trash' ) { + $lock_holder = wp_check_post_lock( $post->ID ); + + if ( $lock_holder ) { + $lock_holder = get_userdata( $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"; + } + + $pad = str_repeat( '— ', $this->current_level ); + echo ""; + + $format = get_post_format( $post->ID ); + if ( $format ) { + $label = get_post_format_string( $format ); + + $format_class = 'post-state-format post-format-icon post-format-' . $format; + + $format_args = array( + 'post_format' => $format, + 'post_type' => $post->post_type + ); + + echo $this->get_edit_link( $format_args, $label . ':', $format_class ); + } + + $title = _draft_or_post_title(); + + if ( $can_edit_post && $post->post_status != 'trash' ) { + printf( + '%s%s', + get_edit_post_link( $post->ID ), + /* translators: %s: post title */ + esc_attr( sprintf( __( '“%s” (Edit)' ), $title ) ), + $pad, + $title + ); + } else { + echo $pad . $title; + } + _post_states( $post ); + + if ( isset( $parent_name ) ) { + $post_type_object = get_post_type_object( $post->post_type ); + echo ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name ); + } + echo "\n"; + + if ( ! is_post_type_hierarchical( $this->screen->post_type ) && 'excerpt' === $mode && current_user_can( 'read_post', $post->ID ) ) { + if ( post_password_required( $post ) ) { + echo '' . esc_html( get_the_excerpt() ) . ''; + } else { + echo esc_html( get_the_excerpt() ); + } + } + + get_inline_data( $post ); + } + + /** + * Handles the post date column output. + * + * @since 4.3.0 + * + * @global string $mode List table view mode. + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_date( $post ) { + global $mode; + + 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 ); + } + } + + if ( 'publish' === $post->post_status ) { + $status = __( 'Published' ); + } elseif ( 'future' === $post->post_status ) { + if ( $time_diff > 0 ) { + $status = '' . __( 'Missed schedule' ) . ''; + } else { + $status = __( 'Scheduled' ); + } + } else { + $status = __( 'Last Modified' ); + } + + /** + * Filters the status text of the post. + * + * @since 4.8.0 + * + * @param string $status The status text. + * @param WP_Post $post Post object. + * @param string $column_name The column name. + * @param string $mode The list display mode ('excerpt' or 'list'). + */ + $status = apply_filters( 'post_date_column_status', $status, $post, 'date', $mode ); + + if ( $status ) { + echo $status . '
      '; + } + + if ( 'excerpt' === $mode ) { + /** + * Filters 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 string $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, 'date', $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, 'date', $mode ) . ''; + } + } + + /** + * Handles the comments column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + */ + public function column_comments( $post ) { + ?> +
      + comment_pending_count[$post->ID] ) ? $this->comment_pending_count[$post->ID] : 0; + + $this->comments_bubble( $post->ID, $pending_comments ); + ?> +
      + $post->post_type, + 'author' => get_the_author_meta( 'ID' ) + ); + echo $this->get_edit_link( $args, get_the_author() ); + } + + /** + * Handles the default column output. + * + * @since 4.3.0 + * + * @param WP_Post $post The current WP_Post object. + * @param string $column_name The current column name. + */ + public function column_default( $post, $column_name ) { + if ( 'categories' === $column_name ) { + $taxonomy = 'category'; + } elseif ( 'tags' === $column_name ) { + $taxonomy = 'post_tag'; + } elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) { + $taxonomy = substr( $column_name, 9 ); + } else { + $taxonomy = false; + } + if ( $taxonomy ) { + $taxonomy_object = get_taxonomy( $taxonomy ); + $terms = get_the_terms( $post->ID, $taxonomy ); + if ( is_array( $terms ) ) { + $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; + } + + $label = esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ); + $out[] = $this->get_edit_link( $posts_in_term_qv, $label ); + } + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); + } else { + echo '' . $taxonomy_object->labels->no_terms . ''; + } + return; + } + + if ( is_post_type_hierarchical( $post->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 ); + } + + /** + * @global WP_Post $post + * + * @param int|WP_Post $post + * @param int $level + */ + public function single_row( $post, $level = 0 ) { + $global_post = get_post(); + + $post = get_post( $post ); + $this->current_level = $level; + + $GLOBALS['post'] = $post; + setup_postdata( $post ); + + $classes = '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'; + } + + if ( $post->post_parent ) { + $count = count( get_post_ancestors( $post->ID ) ); + $classes .= ' level-'. $count; + } else { + $classes .= ' level-0'; + } + ?> + + single_row_columns( $post ); ?> + + post_type ); + $can_edit_post = current_user_can( 'edit_post', $post->ID ); + $actions = array(); + $title = _draft_or_post_title(); + + if ( $can_edit_post && 'trash' != $post->post_status ) { + $actions['edit'] = sprintf( + '%s', + get_edit_post_link( $post->ID ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Edit “%s”' ), $title ) ), + __( 'Edit' ) + ); + $actions['inline hide-if-no-js'] = sprintf( + '%s', + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Quick edit “%s” inline' ), $title ) ), + __( 'Quick Edit' ) + ); + } + + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( 'trash' === $post->post_status ) { + $actions['untrash'] = sprintf( + '%s', + wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Restore “%s” from the Trash' ), $title ) ), + __( 'Restore' ) + ); + } elseif ( EMPTY_TRASH_DAYS ) { + $actions['trash'] = sprintf( + '%s', + get_delete_post_link( $post->ID ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $title ) ), + _x( 'Trash', 'verb' ) + ); + } + if ( 'trash' === $post->post_status || ! EMPTY_TRASH_DAYS ) { + $actions['delete'] = sprintf( + '%s', + get_delete_post_link( $post->ID, '', true ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Delete “%s” permanently' ), $title ) ), + __( 'Delete Permanently' ) + ); + } + } + + if ( is_post_type_viewable( $post_type_object ) ) { + if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) { + if ( $can_edit_post ) { + $preview_link = get_preview_post_link( $post ); + $actions['view'] = sprintf( + '%s', + esc_url( $preview_link ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ), + __( 'Preview' ) + ); + } + } elseif ( 'trash' != $post->post_status ) { + $actions['view'] = sprintf( + '%s', + get_permalink( $post->ID ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'View “%s”' ), $title ) ), + __( 'View' ) + ); + } + } + + if ( is_post_type_hierarchical( $post->post_type ) ) { + + /** + * Filters 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 { + + /** + * Filters 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 ); + } + + return $this->row_actions( $actions ); + } + + /** + * Outputs the hidden row displayed when inline editing + * + * @since 3.1.0 + * + * @global string $mode List table view mode. + */ + public function inline_edit() { + global $mode; + + $screen = $this->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 ); + + $show_in_quick_edit = $taxonomy->show_in_quick_edit; + + /** + * Filters whether the current taxonomy should be shown in the Quick Edit panel. + * + * @since 4.2.0 + * + * @param bool $show_in_quick_edit Whether to show the current taxonomy in Quick Edit. + * @param string $taxonomy_name Taxonomy name. + * @param string $post_type Post type of current Quick Edit post. + */ + if ( ! apply_filters( 'quick_edit_show_taxonomy', $show_in_quick_edit, $taxonomy_name, $screen->post_type ) ) { + 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 ); + + ?> + +
      + post_type}"; + $quick_edit_classes = "quick-edit-row quick-edit-row-$hclass inline-edit-{$screen->post_type}"; + + $bulk = 0; + while ( $bulk < 2 ) { ?> + + + +
      +post_type; + } + break; + case 'edit-tags' : + case 'term' : + if ( null === $post_type && is_object_in_taxonomy( 'post', $taxonomy ? $taxonomy : 'post_tag' ) ) + $post_type = 'post'; + break; + case 'upload': + $post_type = 'attachment'; + 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' : + case 'term' : + 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 + * + * @global WP_Screen $current_screen + * @global string $taxnow + * @global string $typenow + */ + public 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 + */ + 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 bool 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 backward compatibility. + * + * @since 3.3.0 + * + * @static + * + * @param WP_Screen $screen A screen object. + * @param string $help Help text. + */ + public 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. + */ + public 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 name. + * @param string $key Optional. Specific array key for when the option is an array. + * Default false. + * @return string The option value if set, null otherwise. + */ + 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 + * @since 4.4.0 Help tabs are ordered by their priority. + * + * @return array Help tabs with arguments. + */ + public function get_help_tabs() { + $help_tabs = $this->_help_tabs; + + $priorities = array(); + foreach ( $help_tabs as $help_tab ) { + if ( isset( $priorities[ $help_tab['priority'] ] ) ) { + $priorities[ $help_tab['priority'] ][] = $help_tab; + } else { + $priorities[ $help_tab['priority'] ] = array( $help_tab ); + } + } + + ksort( $priorities ); + + $sorted = array(); + foreach ( $priorities as $list ) { + foreach ( $list as $tab ) { + $sorted[ $tab['id'] ] = $tab; + } + } + + return $sorted; + } + + /** + * 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 + * @since 4.4.0 The `$priority` argument was added. + * + * @param array $args { + * Array of arguments used to display the help tab. + * + * @type string $title Title for the tab. Default false. + * @type string $id Tab ID. Must be HTML-safe. Default false. + * @type string $content Optional. Help tab content in plain text or HTML. Default empty string. + * @type string $callback Optional. A callback to generate the tab content. Default false. + * @type int $priority Optional. The priority of the tab, used for ordering. Default 10. + * } + */ + public function add_help_tab( $args ) { + $defaults = array( + 'title' => false, + 'id' => false, + 'content' => '', + 'callback' => false, + 'priority' => 10, + ); + $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; + } + + /** + * Get the accessible hidden headings and text used in the screen. + * + * @since 4.4.0 + * + * @see set_screen_reader_content() For more information on the array format. + * + * @return array An associative array of screen reader text strings. + */ + public function get_screen_reader_content() { + return $this->_screen_reader_content; + } + + /** + * Get a screen reader text string. + * + * @since 4.4.0 + * + * @param string $key Screen reader text array named key. + * @return string Screen reader text string. + */ + public function get_screen_reader_text( $key ) { + if ( ! isset( $this->_screen_reader_content[ $key ] ) ) { + return null; + } + return $this->_screen_reader_content[ $key ]; + } + + /** + * Add accessible hidden headings and text for the screen. + * + * @since 4.4.0 + * + * @param array $content { + * An associative array of screen reader text strings. + * + * @type string $heading_views Screen reader text for the filter links heading. + * Default 'Filter items list'. + * @type string $heading_pagination Screen reader text for the pagination heading. + * Default 'Items list navigation'. + * @type string $heading_list Screen reader text for the items list heading. + * Default 'Items list'. + * } + */ + public function set_screen_reader_content( $content = array() ) { + $defaults = array( + 'heading_views' => __( 'Filter items list' ), + 'heading_pagination' => __( 'Items list navigation' ), + 'heading_list' => __( 'Items list' ), + ); + $content = wp_parse_args( $content, $defaults ); + + $this->_screen_reader_content = $content; + } + + /** + * Remove all the accessible hidden headings and text for the screen. + * + * @since 4.4.0 + */ + public function remove_screen_reader_content() { + $this->_screen_reader_content = array(); + } + + /** + * Render the screen's help section. + * + * This will trigger the deprecated filters for backward compatibility. + * + * @since 3.3.0 + * + * @global string $screen_layout_columns + */ + public function render_screen_meta() { + + /** + * Filters 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 ] : ''; + + /** + * Filters 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() ) { + + /** + * Filters 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->base ) { + case 'widgets': + $nonce = wp_create_nonce( 'widgets-access' ); + $this->_screen_settings = '

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

      \n"; + break; + case 'post' : + $expand = ''; + $this->_screen_settings = $expand; + break; + default: + $this->_screen_settings = ''; + break; + } + + /** + * Filters 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; + + /** + * Filters 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 + * + * @param array $options { + * @type bool $wrap Whether the screen-options-wrap div will be included. Defaults to true. + * } + */ + public function render_screen_options( $options = array() ) { + $options = wp_parse_args( $options, array( + 'wrap' => true, + ) ); + + $wrapper_start = $wrapper_end = $form_start = $form_end = ''; + + // Output optional wrapper. + if ( $options['wrap'] ) { + $wrapper_start = ''; + } + + // Don't output the form and nonce for the widgets accessibility mode links. + if ( 'widgets' !== $this->base ) { + $form_start = "\n
      \n"; + $form_end = "\n" . wp_nonce_field( 'screen-options-nonce', 'screenoptionnonce', false, false ) . "\n
      \n"; + } + + echo $wrapper_start . $form_start; + + $this->render_meta_boxes_preferences(); + $this->render_list_table_columns_preferences(); + $this->render_screen_layout(); + $this->render_per_page_options(); + $this->render_view_mode(); + echo $this->_screen_settings; + + /** + * Filters whether to show the Screen Options submit button. + * + * @since 4.4.0 + * + * @param bool $show_button Whether to show Screen Options submit button. + * Default false. + * @param WP_Screen $this Current WP_Screen instance. + */ + $show_button = apply_filters( 'screen_options_show_submit', false, $this ); + + if ( $show_button ) { + submit_button( __( 'Apply' ), 'primary', 'screen-options-apply', true ); + } + + echo $form_end . $wrapper_end; + } + + /** + * Render the meta boxes preferences. + * + * @since 4.4.0 + * + * @global array $wp_meta_boxes + */ + public function render_meta_boxes_preferences() { + global $wp_meta_boxes; + + if ( ! isset( $wp_meta_boxes[ $this->id ] ) ) { + return; + } + ?> +
      + + id && has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) { + if ( isset( $_GET['welcome'] ) ) { + $welcome_checked = empty( $_GET['welcome'] ) ? 0 : 1; + update_user_meta( get_current_user_id(), 'show_welcome_panel', $welcome_checked ); + } else { + $welcome_checked = get_user_meta( get_current_user_id(), 'show_welcome_panel', true ); + if ( 2 == $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) { + $welcome_checked = false; + } + } + echo '\n"; + } + ?> +
      + +
      + + $title ) { + // Can't hide these for they are special + if ( in_array( $column, $special ) ) { + continue; + } + + if ( empty( $title ) ) { + continue; + } + + /* + * The Comments column uses HTML in the display name with some screen + * reader text. Make sure to strip tags from the Comments column + * title and any other custom column title plugins might add. + */ + $title = wp_strip_all_tags( $title ); + + $id = "$column-hide"; + echo '\n"; + } + ?> +
      + 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' ); + if ( null === $per_page_label ) { + $per_page_label = __( 'Number of items per page:' ); + } + + $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/post.php */ + $per_page = apply_filters( 'edit_posts_per_page', $per_page, $this->post_type ); + } + + // This needs a submit button + add_filter( 'screen_options_show_submit', '__return_true' ); + + ?> +
      + + + + + + +
      + base ) { + return; + } + + $view_mode_post_types = get_post_types( array( 'hierarchical' => false, 'show_ui' => true ) ); + + /** + * Filters the post types that have different view mode options. + * + * @since 4.4.0 + * + * @param array $view_mode_post_types Array of post types that can change view modes. + * Default non-hierarchical post types with show_ui on. + */ + $view_mode_post_types = apply_filters( 'view_mode_post_types', $view_mode_post_types ); + + if ( ! in_array( $this->post_type, $view_mode_post_types ) ) { + return; + } + + global $mode; + + // This needs a submit button + add_filter( 'screen_options_show_submit', '__return_true' ); +?> +
      + + + +
      +_screen_reader_content[ $key ] ) ) { + return; + } + echo "<$tag class='screen-reader-text'>" . $this->_screen_reader_content[ $key ] . ""; + } +} diff --git a/wp-admin/includes/class-wp-site-icon.php b/wp-admin/includes/class-wp-site-icon.php new file mode 100644 index 0000000..518ebf4 --- /dev/null +++ b/wp-admin/includes/class-wp-site-icon.php @@ -0,0 +1,233 @@ +ID ); + $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' => 'site-icon' + ); + + return $object; + } + + /** + * Inserts an attachment. + * + * @since 4.3.0 + * + * @param array $object Attachment object. + * @param string $file File path of the attached image. + * @return int Attachment ID + */ + public function insert_attachment( $object, $file ) { + $attachment_id = wp_insert_attachment( $object, $file ); + $metadata = wp_generate_attachment_metadata( $attachment_id, $file ); + + /** + * Filters the site icon attachment metadata. + * + * @since 4.3.0 + * + * @see wp_generate_attachment_metadata() + * + * @param array $metadata Attachment metadata. + */ + $metadata = apply_filters( 'site_icon_attachment_metadata', $metadata ); + wp_update_attachment_metadata( $attachment_id, $metadata ); + + return $attachment_id; + } + + /** + * Adds additional sizes to be made when creating the site_icon images. + * + * @since 4.3.0 + * + * @param array $sizes List of additional sizes. + * @return array Additional image sizes. + */ + public function additional_sizes( $sizes = array() ) { + $only_crop_sizes = array(); + + /** + * Filters the different dimensions that a site icon is saved in. + * + * @since 4.3.0 + * + * @param array $site_icon_sizes Sizes available for the Site Icon. + */ + $this->site_icon_sizes = apply_filters( 'site_icon_image_sizes', $this->site_icon_sizes ); + + // Use a natural sort of numbers. + natsort( $this->site_icon_sizes ); + $this->site_icon_sizes = array_reverse( $this->site_icon_sizes ); + + // ensure that we only resize the image into + foreach ( $sizes as $name => $size_array ) { + if ( isset( $size_array['crop'] ) ) { + $only_crop_sizes[ $name ] = $size_array; + } + } + + foreach ( $this->site_icon_sizes as $size ) { + if ( $size < $this->min_size ) { + $only_crop_sizes[ 'site_icon-' . $size ] = array( + 'width ' => $size, + 'height' => $size, + 'crop' => true, + ); + } + } + + return $only_crop_sizes; + } + + /** + * Adds Site Icon sizes to the array of image sizes on demand. + * + * @since 4.3.0 + * + * @param array $sizes List of image sizes. + * @return array List of intermediate image sizes. + */ + public function intermediate_image_sizes( $sizes = array() ) { + /** This filter is documented in wp-admin/includes/class-wp-site-icon.php */ + $this->site_icon_sizes = apply_filters( 'site_icon_image_sizes', $this->site_icon_sizes ); + foreach ( $this->site_icon_sizes as $size ) { + $sizes[] = 'site_icon-' . $size; + } + + return $sizes; + } + + /** + * Deletes the Site Icon when the image file is deleted. + * + * @since 4.3.0 + * + * @param int $post_id Attachment ID. + */ + public function delete_attachment_data( $post_id ) { + $site_icon_id = get_option( 'site_icon' ); + + if ( $site_icon_id && $post_id == $site_icon_id ) { + delete_option( 'site_icon' ); + } + } + + /** + * Adds custom image sizes when meta data for an image is requested, that happens to be used as Site Icon. + * + * @since 4.3.0 + * + * @param null|array|string $value The value get_metadata() should return a single metadata value, or an + * array of values. + * @param int $post_id Post ID. + * @param string $meta_key Meta key. + * @param string|array $single Meta value, or an array of values. + * @return array|null|string The attachment metadata value, array of values, or null. + */ + public function get_post_metadata( $value, $post_id, $meta_key, $single ) { + if ( $single && '_wp_attachment_backup_sizes' === $meta_key ) { + $site_icon_id = get_option( 'site_icon' ); + + if ( $post_id == $site_icon_id ) { + add_filter( 'intermediate_image_sizes', array( $this, 'intermediate_image_sizes' ) ); + } + } + + return $value; + } +} diff --git a/wp-admin/includes/class-wp-terms-list-table.php b/wp-admin/includes/class-wp-terms-list-table.php new file mode 100644 index 0000000..cb2b169 --- /dev/null +++ b/wp-admin/includes/class-wp-terms-list-table.php @@ -0,0 +1,635 @@ + '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'; + + } + + /** + * + * @return bool + */ + public function ajax_user_can() { + return current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->manage_terms ); + } + + /** + */ + public function prepare_items() { + $tags_per_page = $this->get_items_per_page( 'edit_' . $this->screen->taxonomy . '_per_page' ); + + if ( 'post_tag' === $this->screen->taxonomy ) { + /** + * Filters 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 ); + + /** + * Filters 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 ) { + /** + * Filters 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, + ) ); + } + + /** + * + * @return bool + */ + public function has_items() { + // todo: populate $this->items in prepare_items() + return true; + } + + /** + */ + public function no_items() { + echo get_taxonomy( $this->screen->taxonomy )->labels->not_found; + } + + /** + * + * @return array + */ + protected function get_bulk_actions() { + $actions = array(); + + if ( current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->delete_terms ) ) { + $actions['delete'] = __( 'Delete' ); + } + + return $actions; + } + + /** + * + * @return string + */ + public function current_action() { + if ( isset( $_REQUEST['action'] ) && isset( $_REQUEST['delete_tags'] ) && ( 'delete' === $_REQUEST['action'] || 'delete' === $_REQUEST['action2'] ) ) + return 'bulk-delete'; + + return parent::current_action(); + } + + /** + * + * @return array + */ + public 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 { + $columns['posts'] = _x( 'Count', 'Number/count of items' ); + } + + return $columns; + } + + /** + * + * @return array + */ + protected function get_sortable_columns() { + return array( + 'name' => 'name', + 'description' => 'description', + 'slug' => 'slug', + 'posts' => 'count', + 'links' => 'count' + ); + } + + /** + */ + public 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 + ) ); + + $page = $args['page']; + + // Set variable because $args['number'] can be subsequently overridden. + $number = $args['number']; + + $args['offset'] = $offset = ( $page - 1 ) * $number; + + // Convert it to table rows. + $count = 0; + + if ( is_taxonomy_hierarchical( $taxonomy ) && ! isset( $args['orderby'] ) ) { + // We'll need the full set of terms then. + $args['number'] = $args['offset'] = 0; + } + $terms = get_terms( $taxonomy, $args ); + + if ( empty( $terms ) || ! is_array( $terms ) ) { + echo ''; + $this->no_items(); + echo ''; + return; + } + + if ( is_taxonomy_hierarchical( $taxonomy ) && ! isset( $args['orderby'] ) ) { + if ( ! empty( $args['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 { + foreach ( $terms as $term ) { + $this->single_row( $term ); + } + } + } + + /** + * @param string $taxonomy + * @param array $terms + * @param array $children + * @param int $start + * @param int $per_page + * @param int $count + * @param int $parent + * @param int $level + */ + private 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 ); + } + } + + /** + * @global string $taxonomy + * @param WP_Term $tag Term object. + * @param int $level + */ + public function single_row( $tag, $level = 0 ) { + global $taxonomy; + $tag = sanitize_term( $tag, $taxonomy ); + + $this->level = $level; + + echo ''; + $this->single_row_columns( $tag ); + echo ''; + } + + /** + * @param WP_Term $tag Term object. + * @return string + */ + public function column_cb( $tag ) { + if ( current_user_can( 'delete_term', $tag->term_id ) ) { + return '' + . ''; + } + + return ' '; + } + + /** + * @param WP_Term $tag Term object. + * @return string + */ + public function column_name( $tag ) { + $taxonomy = $this->screen->taxonomy; + + $pad = str_repeat( '— ', max( 0, $this->level ) ); + + /** + * Filters 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 WP_Term $tag Term object. + */ + $name = apply_filters( 'term_name', $pad . ' ' . $tag->name, $tag ); + + $qe_data = get_term( $tag->term_id, $taxonomy, OBJECT, 'edit' ); + + $uri = wp_doing_ajax() ? wp_get_referer() : $_SERVER['REQUEST_URI']; + + $edit_link = add_query_arg( + 'wp_http_referer', + urlencode( wp_unslash( $uri ) ), + get_edit_term_link( $tag->term_id, $taxonomy, $this->screen->post_type ) + ); + + $out = sprintf( + '%s
      ', + esc_url( $edit_link ), + /* translators: %s: taxonomy term name */ + esc_attr( sprintf( __( '“%s” (Edit)' ), $tag->name ) ), + $name + ); + + $out .= ''; + + return $out; + } + + /** + * Gets the name of the default primary column. + * + * @since 4.3.0 + * + * @return string Name of the default primary column, in this case, 'name'. + */ + protected function get_default_primary_column_name() { + return 'name'; + } + + /** + * Generates and displays row action links. + * + * @since 4.3.0 + * + * @param WP_Term $tag Tag being acted upon. + * @param string $column_name Current column name. + * @param string $primary Primary column name. + * @return string Row actions output for terms. + */ + protected function handle_row_actions( $tag, $column_name, $primary ) { + if ( $primary !== $column_name ) { + return ''; + } + + $taxonomy = $this->screen->taxonomy; + $tax = get_taxonomy( $taxonomy ); + $uri = wp_doing_ajax() ? wp_get_referer() : $_SERVER['REQUEST_URI']; + + $edit_link = add_query_arg( + 'wp_http_referer', + urlencode( wp_unslash( $uri ) ), + get_edit_term_link( $tag->term_id, $taxonomy, $this->screen->post_type ) + ); + + $actions = array(); + if ( current_user_can( 'edit_term', $tag->term_id ) ) { + $actions['edit'] = sprintf( + '%s', + esc_url( $edit_link ), + /* translators: %s: taxonomy term name */ + esc_attr( sprintf( __( 'Edit “%s”' ), $tag->name ) ), + __( 'Edit' ) + ); + $actions['inline hide-if-no-js'] = sprintf( + '%s', + /* translators: %s: taxonomy term name */ + esc_attr( sprintf( __( 'Quick edit “%s” inline' ), $tag->name ) ), + __( 'Quick Edit' ) + ); + } + if ( current_user_can( 'delete_term', $tag->term_id ) ) { + $actions['delete'] = sprintf( + '%s', + wp_nonce_url( "edit-tags.php?action=delete&taxonomy=$taxonomy&tag_ID=$tag->term_id", 'delete-tag_' . $tag->term_id ), + /* translators: %s: taxonomy term name */ + esc_attr( sprintf( __( 'Delete “%s”' ), $tag->name ) ), + __( 'Delete' ) + ); + } + if ( $tax->public ) { + $actions['view'] = sprintf( + '%s', + get_term_link( $tag ), + /* translators: %s: taxonomy term name */ + esc_attr( sprintf( __( 'View “%s” archive' ), $tag->name ) ), + __( 'View' ) + ); + } + + /** + * Filters 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 WP_Term $tag Term object. + */ + $actions = apply_filters( 'tag_row_actions', $actions, $tag ); + + /** + * Filters 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 WP_Term $tag Term object. + */ + $actions = apply_filters( "{$taxonomy}_row_actions", $actions, $tag ); + + return $this->row_actions( $actions ); + } + + /** + * @param WP_Term $tag Term object. + * @return string + */ + public function column_description( $tag ) { + if ( $tag->description ) { + return $tag->description; + } else { + return '' . __( 'No description' ) . ''; + } + } + + /** + * @param WP_Term $tag Term object. + * @return string + */ + public function column_slug( $tag ) { + /** This filter is documented in wp-admin/edit-tag-form.php */ + return apply_filters( 'editable_slug', $tag->slug, $tag ); + } + + /** + * @param WP_Term $tag Term object. + * @return string + */ + public 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"; + } + + /** + * @param WP_Term $tag Term object. + * @return string + */ + public function column_links( $tag ) { + $count = number_format_i18n( $tag->count ); + if ( $count ) + $count = "$count"; + return $count; + } + + /** + * @param WP_Term $tag Term object. + * @param string $column_name + * @return string + */ + public function column_default( $tag, $column_name ) { + /** + * Filters 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 + */ + public 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', 'themes' ); + //$tabs['popular'] = _x( 'Popular', 'themes' ); + $tabs['new'] = _x( 'Latest', 'themes' ); + $tabs['updated'] = _x( 'Recently Updated', 'themes' ); + + $nonmenu_tabs = array( 'theme-information' ); // Valid actions to perform which do not have a Menu item. + + /** This filter is documented in wp-admin/theme-install.php */ + $tabs = apply_filters( 'install_themes_tabs', $tabs ); + + /** + * Filters 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; + } + + /** + * Filters 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, + ) ); + } + + /** + */ + public function no_items() { + _e( 'No themes match your request.' ); + } + + /** + * + * @global array $tabs + * @global string $tab + * @return array + */ + protected function get_views() { + global $tabs, $tab; + + $display_tabs = array(); + foreach ( (array) $tabs as $action => $text ) { + $current_link_attributes = ( $action === $tab ) ? ' class="current" aria-current="page"' : ''; + $href = self_admin_url('theme-install.php?tab=' . $action); + $display_tabs['theme-install-'.$action] = "$text"; + } + + return $display_tabs; + } + + /** + */ + public function display() { + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); +?> +

      +
      + +
      + pagination( 'top' ); ?> +
      +
      + +
      + display_rows_or_placeholder(); ?> +
      + + tablenav( 'bottom' ); + } + + /** + */ + public function display_rows() { + $themes = $this->items; + foreach ( $themes as $theme ) { + ?> +
      single_row( $theme ); + ?>
      + theme_installer(); + } + + /** + * Prints a theme from the WordPress.org API. + * + * @since 3.1.0 + * + * @global array $themes_allowedtags + * + * @param object $theme { + * An object that contains theme data returned by the WordPress.org API. + * + * @type string $name Theme name, e.g. 'Twenty Seventeen'. + * @type string $slug Theme slug, e.g. 'twentyseventeen'. + * @type string $version Theme version, e.g. '1.1'. + * @type string $author Theme author username, e.g. 'melchoyce'. + * @type string $preview_url Preview URL, e.g. 'http://2017.wordpress.net/'. + * @type string $screenshot_url Screenshot URL, e.g. 'https://wordpress.org/themes/twentyseventeen/'. + * @type float $rating Rating score. + * @type int $num_ratings The number of ratings. + * @type string $homepage Theme homepage, e.g. 'https://wordpress.org/themes/twentyseventeen/'. + * @type string $description Theme description. + * @type string $download_link Theme ZIP download URL. + * } + */ + public 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 ) { + case 'update_available': + $actions[] = '' . __( 'Update' ) . ''; + break; + case 'newer_installed': + case 'latest_installed': + $actions[] = '' . _x( 'Installed', 'theme' ) . ''; + break; + case 'install': + default: + $actions[] = '' . __( 'Install Now' ) . ''; + break; + } + + $actions[] = '' . __( 'Preview' ) . ''; + + /** + * Filters 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. + */ + public function theme_installer() { + ?> +
      +
      +
      + + +
      +
      +
      +
      + +
      +
      +
      + +
      +
      + install_theme_info( $theme ); ?> +
      +
      + +
      +
      + name, $themes_allowedtags ); + $author = wp_kses( $theme->author, $themes_allowedtags ); + + $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 ) ) . '" title="' . esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ) . '">' . __( 'Update' ) . ''; + break; + case 'newer_installed': + case 'latest_installed': + echo '' . _x( 'Installed', 'theme' ) . ''; + break; + case 'install': + default: + echo '' . __( 'Install' ) . ''; + break; + } ?> +

      + + screenshot_url ) ): ?> + + +
      + $theme->rating, 'type' => 'percent', 'number' => $theme->num_ratings ) ); ?> +
      + + version, $themes_allowedtags ); ?> +
      +
      + description, $themes_allowedtags ); ?> +
      +
      + +
      + Install screen + * @global string $type Type of search. + * + * @param array $extra_args Unused. + */ + public 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 + * + * @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..a0e008d --- /dev/null +++ b/wp-admin/includes/class-wp-themes-list-table.php @@ -0,0 +1,302 @@ + true, + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + /** + * + * @return bool + */ + public 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' ); + } + + /** + */ + public 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, + ) ); + } + + /** + */ + public function no_items() { + if ( $this->search_terms || $this->features ) { + _e( 'No items found.' ); + return; + } + + $blog_id = get_current_blog_id(); + 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=' . $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=' . $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 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' ) ); + } + + /** + * @param string $which + */ + public 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 '
      '; + } + } + + /** + */ + public 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 ); + + $actions = array(); + $actions['activate'] = '' . __( 'Activate' ) . ''; + + if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $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, 'all' ); + + /** This filter is documented in wp-admin/includes/class-wp-ms-themes-list-table.php */ + $actions = apply_filters( "theme_action_links_$stylesheet", $actions, $theme, 'all' ); + $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.' ) . '

      ', + __( 'https://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 + * + * @param array $extra_args + */ + public 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", wp_json_encode( $args ) ); + parent::_js_vars(); + } +} diff --git a/wp-admin/includes/class-wp-upgrader-skin.php b/wp-admin/includes/class-wp-upgrader-skin.php new file mode 100644 index 0000000..ad4d8de --- /dev/null +++ b/wp-admin/includes/class-wp-upgrader-skin.php @@ -0,0 +1,203 @@ + '', 'nonce' => '', 'title' => '', 'context' => false ); + $this->options = wp_parse_args($args, $defaults); + } + + /** + * + * @param WP_Upgrader $upgrader + */ + public function set_upgrader(&$upgrader) { + if ( is_object($upgrader) ) + $this->upgrader =& $upgrader; + $this->add_strings(); + } + + /** + */ + public function add_strings() { + } + + /** + * Sets the result of an upgrade. + * + * @since 2.8.0 + * + * @param string|bool|WP_Error $result The result of an upgrade. + */ + public function set_result( $result ) { + $this->result = $result; + } + + /** + * Displays a form to the user to request for their FTP/SSH details in order + * to connect to the filesystem. + * + * @since 2.8.0 + * @since 4.6.0 The `$context` parameter default changed from `false` to an empty string. + * + * @see request_filesystem_credentials() + * + * @param bool $error Optional. Whether the current request has failed to connect. + * Default false. + * @param string $context Optional. Full path to the directory that is tested + * for being writable. Default empty. + * @param bool $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable. Default false. + * @return bool False on failure, true on success. + */ + public function request_filesystem_credentials( $error = false, $context = '', $allow_relaxed_file_ownership = false ) { + $url = $this->options['url']; + if ( ! $context ) { + $context = $this->options['context']; + } + if ( !empty($this->options['nonce']) ) { + $url = wp_nonce_url($url, $this->options['nonce']); + } + + $extra_fields = array(); + + return request_filesystem_credentials( $url, '', $error, $context, $extra_fields, $allow_relaxed_file_ownership ); + } + + /** + */ + public function header() { + if ( $this->done_header ) { + return; + } + $this->done_header = true; + echo '
      '; + echo '

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

      '; + } + + /** + */ + public function footer() { + if ( $this->done_footer ) { + return; + } + $this->done_footer = true; + echo '
      '; + } + + /** + * + * @param string|WP_Error $errors + */ + public 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); + } + } + } + + /** + * + * @param string $string + */ + public 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); + } + + /** + */ + public function before() {} + + /** + */ + public 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; + } + + if ( defined( 'IFRAME_REQUEST' ) ) { + echo ''; + } else { + echo ''; + } + } + + /** + */ + public function bulk_header() {} + + /** + */ + public function bulk_footer() {} +} 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..183a011 --- /dev/null +++ b/wp-admin/includes/class-wp-upgrader-skins.php @@ -0,0 +1,43 @@ +skin = new WP_Upgrader_Skin(); + else + $this->skin = $skin; + } + + /** + * Initialize the upgrader. + * + * This will set the relationship between the skin being used and this upgrader, + * and also add the generic strings to `WP_Upgrader::$strings`. + * + * @since 2.8.0 + */ + public function init() { + $this->skin->set_upgrader($this); + $this->generic_strings(); + } + + /** + * Add the generic strings to WP_Upgrader::$strings. + * + * @since 2.8.0 + */ + public 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['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.' ); + + $this->strings['maintenance_start'] = __('Enabling Maintenance mode…'); + $this->strings['maintenance_end'] = __('Disabling Maintenance mode…'); + } + + /** + * Connect to the filesystem. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param array $directories Optional. A list of directories. If any of these do + * not exist, a WP_Error object will be returned. + * Default empty array. + * @param bool $allow_relaxed_file_ownership Whether to allow relaxed file ownership. + * Default false. + * @return bool|WP_Error True if able to connect, false or a WP_Error otherwise. + */ + public function fs_connect( $directories = array(), $allow_relaxed_file_ownership = false ) { + global $wp_filesystem; + + if ( false === ( $credentials = $this->skin->request_filesystem_credentials( false, $directories[0], $allow_relaxed_file_ownership ) ) ) { + return false; + } + + if ( ! WP_Filesystem( $credentials, $directories[0], $allow_relaxed_file_ownership ) ) { + $error = true; + if ( is_object($wp_filesystem) && $wp_filesystem->errors->get_error_code() ) + $error = $wp_filesystem->errors; + // Failed to connect, Error and request again + $this->skin->request_filesystem_credentials( $error, $directories[0], $allow_relaxed_file_ownership ); + 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(); + + /** + * Download a package. + * + * @since 2.8.0 + * + * @param string $package The URI of the package. If this is the full path to an + * existing local file, it will be returned untouched. + * @return string|WP_Error The full path to the downloaded package file, or a WP_Error object. + */ + public function download_package( $package ) { + + /** + * Filters 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; + } + + /** + * Unpack a compressed package file. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param string $package Full path to the package file. + * @param bool $delete_package Optional. Whether to delete the package file after attempting + * to unpack it. Default true. + * @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure. + */ + public 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 - Strip off any .tmp or .zip suffixes + $working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.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; + } + + /** + * Flatten the results of WP_Filesystem::dirlist() for iterating over. + * + * @since 4.9.0 + * @access protected + * + * @param array $nested_files Array of files as returned by WP_Filesystem::dirlist() + * @param string $path Relative path to prepend to child nodes. Optional. + * @return array $files A flattened array of the $nested_files specified. + */ + protected function flatten_dirlist( $nested_files, $path = '' ) { + $files = array(); + + foreach ( $nested_files as $name => $details ) { + $files[ $path . $name ] = $details; + + // Append children recursively + if ( ! empty( $details['files'] ) ) { + $children = $this->flatten_dirlist( $details['files'], $path . $name . '/' ); + + // Merge keeping possible numeric keys, which array_merge() will reindex from 0..n + $files = $files + $children; + } + } + + return $files; + } + + /** + * Clears the directory where this item is going to be installed into. + * + * @since 4.3.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param string $remote_destination The location on the remote filesystem to be cleared + * @return bool|WP_Error True upon success, WP_Error on failure. + */ + public function clear_destination( $remote_destination ) { + global $wp_filesystem; + + $files = $wp_filesystem->dirlist( $remote_destination, true, true ); + + // False indicates that the $remote_destination doesn't exist. + if ( false === $files ) { + return true; + } + + // Flatten the file list to iterate over + $files = $this->flatten_dirlist( $files ); + + // Check all files are writable before attempting to clear the destination. + $unwritable_files = array(); + + // Check writability. + foreach ( $files as $filename => $file_details ) { + if ( ! $wp_filesystem->is_writable( $remote_destination . $filename ) ) { + // Attempt to alter permissions to allow writes and try again. + $wp_filesystem->chmod( $remote_destination . $filename, ( 'd' == $file_details['type'] ? FS_CHMOD_DIR : FS_CHMOD_FILE ) ); + if ( ! $wp_filesystem->is_writable( $remote_destination . $filename ) ) { + $unwritable_files[] = $filename; + } + } + } + + if ( ! empty( $unwritable_files ) ) { + return new WP_Error( 'files_not_writable', $this->strings['files_not_writable'], implode( ', ', $unwritable_files ) ); + } + + if ( ! $wp_filesystem->delete( $remote_destination, true ) ) { + return new WP_Error( 'remove_old_failed', $this->strings['remove_old_failed'] ); + } + + return true; + } + + /** + * Install a package. + * + * Copies the contents of a package form a source directory, and installs them in + * a destination directory. Optionally removes the source. It can also optionally + * clear out the destination folder if it already exists. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * @global array $wp_theme_directories + * + * @param array|string $args { + * Optional. Array or string of arguments for installing a package. Default empty array. + * + * @type string $source Required path to the package source. Default empty. + * @type string $destination Required path to a folder to install the package in. + * Default empty. + * @type bool $clear_destination Whether to delete any files already in the destination + * folder. Default false. + * @type bool $clear_working Whether to delete the files form the working directory + * after copying to the destination. Default false. + * @type bool $abort_if_destination_exists Whether to abort the installation if + * the destination folder already exists. Default true. + * @type array $hook_extra Extra arguments to pass to the filter hooks called by + * WP_Upgrader::install_package(). Default empty array. + * } + * + * @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure. + */ + public 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); + + // These were previously extract()'d. + $source = $args['source']; + $destination = $args['destination']; + $clear_destination = $args['clear_destination']; + + @set_time_limit( 300 ); + + if ( empty( $source ) || empty( $destination ) ) { + return new WP_Error( 'bad_request', $this->strings['bad_request'] ); + } + $this->skin->feedback( 'installing_package' ); + + /** + * Filters 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, $args['hook_extra'] ); + + if ( is_wp_error( $res ) ) { + return $res; + } + + //Retain the Original source and destinations + $remote_source = $args['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( $args['source'] ) . $source_files[0] . '/' ) ) { //Only one folder? Then we want its contents. + $source = trailingslashit( $args['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 folder name of this file as the destination folder. Folder name is based on zip filename. + $source = trailingslashit( $args['source'] ); + } + + /** + * Filters the source file location for the upgrade package. + * + * @since 2.8.0 + * @since 4.4.0 The $hook_extra parameter became available. + * + * @param string $source File source location. + * @param string $remote_source Remote file source location. + * @param WP_Upgrader $this WP_Upgrader instance. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] ); + + 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 = $this->clear_destination( $remote_destination ); + + /** + * Filters whether the upgrader cleared the destination. + * + * @since 2.8.0 + * + * @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure + * @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, $args['hook_extra'] ); + + if ( is_wp_error( $removed ) ) { + return $removed; + } + } elseif ( $args['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 ( $args['clear_working'] ) { + $wp_filesystem->delete( $remote_source, true ); + } + return $result; + } + + //Clear the Working folder? + if ( $args['clear_working'] ) { + $wp_filesystem->delete( $remote_source, true ); + } + + $destination_name = basename( str_replace($local_destination, '', $destination) ); + if ( '.' == $destination_name ) { + $destination_name = ''; + } + + $this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' ); + + /** + * Filters the installation response after the installation has finished. + * + * @since 2.8.0 + * + * @param bool $response Installation response. + * @param array $hook_extra Extra arguments passed to hooked filters. + * @param array $result Installation result data. + */ + $res = apply_filters( 'upgrader_post_install', true, $args['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; + } + + /** + * Run an upgrade/installation. + * + * Attempts to download the package (if it is not a local file), unpack it, and + * install it in the destination folder. + * + * @since 2.8.0 + * + * @param array $options { + * Array or string of arguments for upgrading/installing a package. + * + * @type string $package The full path or URI of the package to install. + * Default empty. + * @type string $destination The full path to the destination folder. + * Default empty. + * @type bool $clear_destination Whether to delete any files already in the + * destination folder. Default false. + * @type bool $clear_working Whether to delete the files form the working + * directory after copying to the destination. + * Default false. + * @type bool $abort_if_destination_exists Whether to abort the installation if the destination + * folder already exists. When true, `$clear_destination` + * should be false. Default true. + * @type bool $is_multi Whether this run is one of multiple upgrade/installation + * actions being performed in bulk. When true, the skin + * WP_Upgrader::header() and WP_Upgrader::footer() + * aren't called. Default false. + * @type array $hook_extra Extra arguments to pass to the filter hooks called by + * WP_Upgrader::run(). + * } + * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error, + * or false if unable to connect to the filesystem. + */ + public 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 ); + + /** + * Filters the package options before running an update. + * + * See also {@see 'upgrader_process_complete'}. + * + * @since 4.3.0 + * + * @param array $options { + * Options used by the upgrader. + * + * @type string $package Package for update. + * @type string $destination Update location. + * @type bool $clear_destination Clear the destination resource. + * @type bool $clear_working Clear the working resource. + * @type bool $abort_if_destination_exists Abort if the Destination directory exists. + * @type bool $is_multi Whether the upgrader is running multiple times. + * @type array $hook_extra { + * Extra hook arguments. + * + * @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 string $plugin The base plugin path from the plugins directory. + * @type string $theme The stylesheet or template name of the theme. + * @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme', + * or 'core'. + * @type object $language_update The language pack update offer. + * } + * } + */ + $options = apply_filters( 'upgrader_package_options', $options ); + + if ( ! $options['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, $options['destination'] ) ); + // Mainly for non-connected filesystem. + if ( ! $res ) { + if ( ! $options['is_multi'] ) { + $this->skin->footer(); + } + return false; + } + + $this->skin->before(); + + if ( is_wp_error($res) ) { + $this->skin->error($res); + $this->skin->after(); + if ( ! $options['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( $options['package'] ); + if ( is_wp_error($download) ) { + $this->skin->error($download); + $this->skin->after(); + if ( ! $options['is_multi'] ) { + $this->skin->footer(); + } + return $download; + } + + $delete_package = ( $download != $options['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 ( ! $options['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' => $options['destination'], + 'clear_destination' => $options['clear_destination'], + 'abort_if_destination_exists' => $options['abort_if_destination_exists'], + 'clear_working' => $options['clear_working'], + 'hook_extra' => $options['hook_extra'] + ) ); + + $this->skin->set_result($result); + if ( is_wp_error($result) ) { + $this->skin->error($result); + $this->skin->feedback('process_failed'); + } else { + // Installation succeeded. + $this->skin->feedback('process_success'); + } + + $this->skin->after(); + + if ( ! $options['is_multi'] ) { + + /** + * Fires when the upgrader process is complete. + * + * See also {@see 'upgrader_package_options'}. + * + * @since 3.6.0 + * @since 3.7.0 Added to WP_Upgrader::run(). + * @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`. + * + * @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a + * Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance. + * @param array $hook_extra { + * Array of bulk item update data. + * + * @type string $action Type of action. Default 'update'. + * @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'. + * @type bool $bulk Whether the update process is a bulk update. Default true. + * @type array $plugins Array of the basename paths of the plugins' main files. + * @type array $themes The theme slugs. + * @type array $translations { + * Array of translations update data. + * + * @type string $language The locale the translation is for. + * @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'. + * @type string $slug Text domain the translation is for. The slug of a theme/plugin or + * 'default' for core translations. + * @type string $version The version of a theme, plugin, or core. + * } + * } + */ + do_action( 'upgrader_process_complete', $this, $options['hook_extra'] ); + + $this->skin->footer(); + } + + return $result; + } + + /** + * Toggle maintenance mode for the site. + * + * Creates/deletes the maintenance file to enable/disable maintenance mode. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param bool $enable True to enable maintenance mode, false to disable. + */ + public 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); + } elseif ( ! $enable && $wp_filesystem->exists( $file ) ) { + $this->skin->feedback('maintenance_end'); + $wp_filesystem->delete($file); + } + } + + /** + * Creates a lock using WordPress options. + * + * @since 4.5.0 + * @static + * + * @param string $lock_name The name of this unique lock. + * @param int $release_timeout Optional. The duration in seconds to respect an existing lock. + * Default: 1 hour. + * @return bool False if a lock couldn't be created or if the lock is still valid. True otherwise. + */ + public static function create_lock( $lock_name, $release_timeout = null ) { + global $wpdb; + if ( ! $release_timeout ) { + $release_timeout = HOUR_IN_SECONDS; + } + $lock_option = $lock_name . '.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_option, time() ) ); + + if ( ! $lock_result ) { + $lock_result = get_option( $lock_option ); + + // If a lock couldn't be created, and there isn't a lock, bail. + if ( ! $lock_result ) { + return false; + } + + // Check to see if the lock is still valid. If it is, bail. + if ( $lock_result > ( time() - $release_timeout ) ) { + return false; + } + + // There must exist an expired lock, clear it and re-gain it. + WP_Upgrader::release_lock( $lock_name ); + + return WP_Upgrader::create_lock( $lock_name, $release_timeout ); + } + + // Update the lock, as by this point we've definitely got a lock, just need to fire the actions. + update_option( $lock_option, time() ); + + return true; + } + + /** + * Releases an upgrader lock. + * + * @since 4.5.0 + * @static + * + * @see WP_Upgrader::create_lock() + * + * @param string $lock_name The name of this unique lock. + * @return bool True if the lock was successfully released. False on failure. + */ + public static function release_lock( $lock_name ) { + return delete_option( $lock_name . '.lock' ); + } + +} + +/** Plugin_Upgrader class */ +require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php'; + +/** Theme_Upgrader class */ +require_once ABSPATH . 'wp-admin/includes/class-theme-upgrader.php'; + +/** Language_Pack_Upgrader class */ +require_once ABSPATH . 'wp-admin/includes/class-language-pack-upgrader.php'; + +/** Core_Upgrader class */ +require_once ABSPATH . 'wp-admin/includes/class-core-upgrader.php'; + +/** File_Upload_Upgrader class */ +require_once ABSPATH . 'wp-admin/includes/class-file-upload-upgrader.php'; + +/** WP_Automatic_Updater class */ +require_once ABSPATH . 'wp-admin/includes/class-wp-automatic-updater.php'; 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..8dd5793 --- /dev/null +++ b/wp-admin/includes/class-wp-users-list-table.php @@ -0,0 +1,584 @@ + '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 + * + * @return bool + */ + 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 + * + * @global string $role + * @global string $usersearch + */ + 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(); + + if ( 'none' === $role ) { + $args = array( + 'number' => $users_per_page, + 'offset' => ( $paged-1 ) * $users_per_page, + 'include' => wp_get_users_with_no_role( $this->site_id ), + 'search' => $usersearch, + 'fields' => 'all_with_meta' + ); + } else { + $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']; + + /** + * Filters the query arguments used to retrieve users for the current users list table. + * + * @since 4.4.0 + * + * @param array $args Arguments passed to WP_User_Query to retrieve items for the current + * users list table. + */ + $args = apply_filters( 'users_list_table_query_args', $args ); + + // 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 + */ + public function no_items() { + _e( 'No users 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 + * Filtersing of the user table. + * + * @since 3.1.0 + * + * @global string $role + * + * @return array An array of HTML links, one for each view. + */ + protected function get_views() { + global $role; + + $wp_roles = wp_roles(); + + if ( $this->is_site_users ) { + $url = 'site-users.php?id=' . $this->site_id; + switch_to_blog( $this->site_id ); + $users_of_blog = count_users( 'time', $this->site_id ); + 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_link_attributes = empty( $role ) ? ' class="current" aria-current="page"' : ''; + + $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; + + $current_link_attributes = ''; + + if ( $this_role === $role ) { + $current_link_attributes = ' class="current" aria-current="page"'; + } + + $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"; + } + + if ( ! empty( $avail_roles['none' ] ) ) { + + $current_link_attributes = ''; + + if ( 'none' === $role ) { + $current_link_attributes = ' class="current" aria-current="page"'; + } + + $name = __( 'No role' ); + /* translators: User role name with count */ + $name = sprintf( __('%1$s (%2$s)'), $name, number_format_i18n( $avail_roles['none' ] ) ); + $role_links['none'] = "$name"; + + } + + return $role_links; + } + + /** + * Retrieve an associative array of bulk actions available on this table. + * + * @since 3.1.0 + * + * @return array Array of bulk actions. + */ + protected 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 + * + * @param string $which Whether this is being invoked above ("top") + * or below the table ("bottom"). + */ + protected function extra_tablenav( $which ) { + $id = 'bottom' === $which ? 'new_role2' : 'new_role'; + $button_id = 'bottom' === $which ? 'changeit2' : 'changeit'; + ?> +
      + has_items() ) : ?> + + + +
      + '', + 'username' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'Email' ), + '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 + * + * @return array Array of sortable columns. + */ + protected function get_sortable_columns() { + $c = array( + 'username' => 'login', + 'email' => 'email', + ); + + return $c; + } + + /** + * Generate the list table rows. + * + * @since 3.1.0 + */ + 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 ) ); + + foreach ( $this->items as $userid => $user_object ) { + echo "\n\t" . $this->single_row( $user_object, '', '', isset( $post_counts ) ? $post_counts[ $userid ] : 0 ); + } + } + + /** + * Generate HTML for a single row on the users.php admin panel. + * + * @since 3.1.0 + * @since 4.2.0 The `$style` parameter was deprecated. + * @since 4.4.0 The `$role` parameter was deprecated. + * + * @param WP_User $user_object The current user object. + * @param string $style Deprecated. Not used. + * @param string $role Deprecated. Not used. + * @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. + */ + public function single_row( $user_object, $style = '', $role = '', $numposts = 0 ) { + if ( ! ( $user_object instanceof 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?'; + + $user_roles = $this->get_role_list( $user_object ); + + // Set up the hover actions for this user + $actions = array(); + $checkbox = ''; + $super_admin = ''; + + if ( is_multisite() && current_user_can( 'manage_network_users' ) ) { + if ( in_array( $user_object->user_login, get_super_admins(), true ) ) { + $super_admin = ' — ' . __( 'Super Admin' ); + } + } + + // 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 ) ) ); + + if ( current_user_can( 'edit_user', $user_object->ID ) ) { + $edit = "{$user_object->user_login}{$super_admin}
      "; + $actions['edit'] = '' . __( 'Edit' ) . ''; + } else { + $edit = "{$user_object->user_login}{$super_admin}
      "; + } + + 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' ) . ""; + + // Add a link to the user's author archive, if not empty. + $author_posts_url = get_author_posts_url( $user_object->ID ); + if ( $author_posts_url ) { + $actions['view'] = sprintf( + '%s', + esc_url( $author_posts_url ), + /* translators: %s: author's display name */ + esc_attr( sprintf( __( 'View posts by %s' ), $user_object->display_name ) ), + __( 'View' ) + ); + } + + /** + * Filters 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 ); + + // Role classes. + $role_classes = esc_attr( implode( ' ', array_keys( $user_roles ) ) ); + + // Set up the checkbox ( because the user is editable, otherwise it's empty ) + $checkbox = '' + . ""; + + } else { + $edit = "{$user_object->user_login}{$super_admin}"; + } + $avatar = get_avatar( $user_object->ID, 32 ); + + // Comma-separated list of user roles. + $roles_list = implode( ', ', $user_roles ); + + $r = ""; + + list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $classes = "$column_name column-$column_name"; + if ( $primary === $column_name ) { + $classes .= ' has-row-actions column-primary'; + } + if ( 'posts' === $column_name ) { + $classes .= ' num'; // Special case for that column + } + + if ( in_array( $column_name, $hidden ) ) { + $classes .= ' hidden'; + } + + $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"'; + + $attributes = "class='$classes' $data"; + + if ( 'cb' === $column_name ) { + $r .= "$checkbox"; + } else { + $r .= ""; + switch ( $column_name ) { + case 'username': + $r .= "$avatar $edit"; + break; + case 'name': + if ( $user_object->first_name && $user_object->last_name ) { + $r .= "$user_object->first_name $user_object->last_name"; + } elseif ( $user_object->first_name ) { + $r .= $user_object->first_name; + } elseif ( $user_object->last_name ) { + $r .= $user_object->last_name; + } else { + $r .= '' . _x( 'Unknown', 'name' ) . ''; + } + break; + case 'email': + $r .= "$email"; + break; + case 'role': + $r .= esc_html( $roles_list ); + break; + case 'posts': + if ( $numposts > 0 ) { + $r .= ""; + $r .= ''; + $r .= '' . sprintf( _n( '%s post by this author', '%s posts by this author', $numposts ), number_format_i18n( $numposts ) ) . ''; + $r .= ''; + } else { + $r .= 0; + } + break; + default: + /** + * Filters 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 ); + } + + if ( $primary === $column_name ) { + $r .= $this->row_actions( $actions ); + } + $r .= ""; + } + } + $r .= ''; + + return $r; + } + + /** + * Gets the name of the default primary column. + * + * @since 4.3.0 + * + * @return string Name of the default primary column, in this case, 'username'. + */ + protected function get_default_primary_column_name() { + return 'username'; + } + + /** + * Returns an array of user roles for a given user object. + * + * @since 4.4.0 + * + * @param WP_User $user_object The WP_User object. + * @return array An array of user roles. + */ + protected function get_role_list( $user_object ) { + $wp_roles = wp_roles(); + + $role_list = array(); + + foreach ( $user_object->roles as $role ) { + if ( isset( $wp_roles->role_names[ $role ] ) ) { + $role_list[ $role ] = translate_user_role( $wp_roles->role_names[ $role ] ); + } + } + + if ( empty( $role_list ) ) { + $role_list['none'] = _x( 'None', 'no user roles' ); + } + + /** + * Filters the returned array of roles for a user. + * + * @since 4.4.0 + * + * @param array $role_list An array of user roles. + * @param WP_User $user_object A WP_User object. + */ + return apply_filters( 'get_role_list', $role_list, $user_object ); + } + +} diff --git a/wp-admin/includes/comment.php b/wp-admin/includes/comment.php new file mode 100644 index 0000000..87e0a25 --- /dev/null +++ b/wp-admin/includes/comment.php @@ -0,0 +1,196 @@ +get_var( $wpdb->prepare("SELECT comment_post_ID FROM $wpdb->comments + WHERE comment_author = %s AND $date_field = %s", + stripslashes( $comment_author ), + stripslashes( $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 ( __( 'Sorry, 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 WP_Comment object based on comment ID. + * + * @since 2.0.0 + * + * @param int $id ID of comment to retrieve. + * @return WP_Comment|false 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 ); + /** + * Filters 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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @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 + * + * @param string $name User name. + * @return string Avatar with Admin name. + */ +function floated_admin_avatar( $name ) { + $avatar = get_avatar( get_comment(), 32, 'mystery' ); + return "$avatar $name"; +} + +/** + * @since 2.7.0 + */ +function enqueue_comment_hotkeys_js() { + if ( 'true' == get_user_option( 'comment_shortcuts' ) ) + wp_enqueue_script( 'jquery-table-hotkeys' ); +} + +/** + * Display error message at bottom of comments. + * + * @param string $msg Error Message. Assumed to contain HTML and be sanitized. + */ +function comment_footer_die( $msg ) { + echo "

      $msg

      "; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + die; +} \ No newline at end of file diff --git a/wp-admin/includes/continents-cities.php b/wp-admin/includes/continents-cities.php new file mode 100644 index 0000000..2b9d2f2 --- /dev/null +++ b/wp-admin/includes/continents-cities.php @@ -0,0 +1,549 @@ + 'WordPress/' . $wp_version . '; ' . home_url( '/' ) ); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + $url = set_url_scheme( $url, 'https' ); + } + + $response = wp_remote_get( $url, $options ); + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + $results = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( ! is_array( $results ) ) + return false; + + set_site_transient( 'wordpress_credits_' . $locale, $results, DAY_IN_SECONDS ); + } + + return $results; +} + +/** + * Retrieve the link to a contributor's WordPress.org profile page. + * + * @access private + * @since 3.2.0 + * + * @param string $display_name The contributor's display name (passed by reference). + * @param string $username The contributor's username. + * @param string $profiles URL to the contributor's WordPress.org profile page. + */ +function _wp_credits_add_profile_link( &$display_name, $username, $profiles ) { + $display_name = '' . 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). + */ +function _wp_credits_build_object_link( &$data ) { + $data = '' . esc_html( $data[0] ) . ''; +} diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php new file mode 100644 index 0000000..fa1d2ff --- /dev/null +++ b/wp-admin/includes/dashboard.php @@ -0,0 +1,1621 @@ +cap->create_posts ) ) { + $quick_draft_title = sprintf( '%1$s %2$s', __( 'Quick Draft' ), __( 'Your Recent Drafts' ) ); + wp_add_dashboard_widget( 'dashboard_quick_press', $quick_draft_title, 'wp_dashboard_quick_press' ); + } + + // WordPress Events and News + wp_add_dashboard_widget( 'dashboard_primary', __( 'WordPress Events and News' ), 'wp_dashboard_events_news' ); + + 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' ); + + /** + * Filters 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' ); + + /** + * Filters 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' ); + + /** + * Filters 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; + } + + /** 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', '' ); +} + +/** + * Adds a new dashboard widget. + * + * @since 2.7.0 + * + * @global array $wp_dashboard_control_callbacks + * + * @param string $widget_id Widget ID (used in the 'id' attribute for the widget). + * @param string $widget_name Title of the widget. + * @param callable $callback Function that fills the widget with the desired content. + * The function should echo its output. + * @param callable $control_callback Optional. Function that outputs controls for the widget. Default null. + * @param array $callback_args Optional. Data that should be set as the $args property of the widget array + * (which is the second parameter passed to your callback). Default null. + */ +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; + + $private_callback_args = array( '__widget_basename' => $widget_name ); + + if ( is_null( $callback_args ) ) { + $callback_args = $private_callback_args; + } else if ( is_array( $callback_args ) ) { + $callback_args = array_merge( $callback_args, $private_callback_args ); + } + + 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 ); +} + +/** + * Outputs controls for the current dashboard widget. + * + * @access private + * @since 2.7.0 + * + * @param mixed $dashboard + * @param array $meta_box + */ +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', '' ); ?> +
      +
      + + +
      +
        + 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->approved || $num_comm->moderated ) ) { + $text = sprintf( _n( '%s Comment', '%s Comments', $num_comm->approved ), number_format_i18n( $num_comm->approved ) ); + ?> +
      • + moderated ); + /* translators: %s: number of comments in moderation */ + $text = sprintf( _nx( '%s in moderation', '%s in moderation', $num_comm->moderated, 'comments' ), $moderated_comments_count_i18n ); + /* translators: %s: number of comments in moderation */ + $aria_label = sprintf( _nx( '%s comment in moderation', '%s comments in moderation', $num_comm->moderated, 'comments' ), $moderated_comments_count_i18n ); + ?> +
      • + ' . 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(); + + /* translators: %s: number of users on the network */ + $user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) ); + /* translators: %s: number of sites on the network */ + $blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) ); + + /* translators: 1: text indicating the number of sites on the network, 2: text indicating the number of users on the network */ + $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 ( 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' + ); + + /** + * Filters the post query arguments for the 'Recent Drafts' dashboard widget. + * + * @since 4.4.0 + * + * @param array $query_args The query arguments for the 'Recent Drafts' dashboard widget. + */ + $query_args = apply_filters( 'dashboard_recent_drafts_query_args', $query_args ); + + $drafts = get_posts( $query_args ); + if ( ! $drafts ) { + return; + } + } + + echo '
      '; + if ( count( $drafts ) > 3 ) { + echo '

      ' . __( 'View all drafts' ) . "

      \n"; + } + echo '

      ' . __( 'Your Recent 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"; + /* translators: %s: post title */ + echo '
        ' . esc_html( $title ) . ''; + echo '
        '; + if ( $the_content = wp_trim_words( $draft->post_content, 10 ) ) { + echo '

        ' . $the_content . '

        '; + } + echo "
      • \n"; + } + echo "
      \n
      "; +} + +/** + * Outputs a row for the Recent Comments widget. + * + * @access private + * @since 2.7.0 + * + * @global WP_Comment $comment + * + * @param WP_Comment $comment The current comment. + * @param bool $show_date Optional. Whether to display the date. + */ +function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { + $GLOBALS['comment'] = clone $comment; + + if ( $comment->comment_post_ID > 0 ) { + + $comment_post_title = _draft_or_post_title( $comment->comment_post_ID ); + $comment_post_url = get_the_permalink( $comment->comment_post_ID ); + $comment_post_link = "$comment_post_title"; + } else { + $comment_post_link = ''; + } + + $actions_string = ''; + if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) { + // Pre-order it: Approve | Reply | Edit | Spam | Trash. + $actions = array( + 'approve' => '', 'unapprove' => '', + 'reply' => '', + 'edit' => '', + 'spam' => '', + 'trash' => '', 'delete' => '', + 'view' => '', + ); + + $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' ) . ''; + } + + $actions['view'] = '' . __( 'View' ) . ''; + + /** + * Filters 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 WP_Comment $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'; + } + + if ( 'view' === $action && '1' !== $comment->comment_approved ) { + $action .= ' hidden'; + } + $actions_string .= "$sep$link"; + } + } +?> + +
    • > + + + + comment_type || 'comment' == $comment->comment_type ) : ?> + +
      +

      + ' . get_comment_author_link( $comment ) . '', + $comment_post_link, + '' . __( '[Pending]' ) . '' + ); + } else { + printf( + /* translators: 1: comment author, 2: notification if the comment is pending */ + __( 'From %1$s %2$s' ), + '' . get_comment_author_link( $comment ) . '', + '' . __( '[Pending]' ) . '' + ); + } + ?> +

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

      + $type", + $comment_post_link, + '' . __( '[Pending]' ) . '' + ); + } else { + printf( + /* translators: 1: type of comment, 2: notification if the comment is pending */ + _x( '%1$s %2$s', 'dashboard' ), + "$type", + '' . __( '[Pending]' ) . '' + ); + } + ?> +

      +

      + + +

      + +

      + +
      +
    • +'; + + $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', + ); + + /** + * Filters the query arguments used for the Recent Posts widget. + * + * @since 4.2.0 + * + * @param array $query_args The arguments passed to WP_Query to produce the list of posts. + */ + $query_args = apply_filters( 'dashboard_recent_posts_query_args', $query_args ); + $posts = new WP_Query( $query_args ); + + if ( $posts->have_posts() ) { + + echo '
      '; + + echo '

      ' . $args['title'] . '

      '; + + echo '
        '; + + $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' ); + } elseif ( date( 'Y', $time ) !== date( 'Y', current_time( 'timestamp' ) ) ) { + /* translators: date and time format for recent posts on the dashboard, from a different calendar year, see https://secure.php.net/date */ + $relative = date_i18n( __( 'M jS Y' ), $time ); + } else { + /* translators: date and time format for recent posts on the dashboard, see https://secure.php.net/date */ + $relative = date_i18n( __( 'M jS' ), $time ); + } + + // Use the post edit link for those who can edit, the permalink otherwise. + $recent_post_link = current_user_can( 'edit_post', get_the_ID() ) ? get_edit_post_link() : get_permalink(); + + $draft_or_post_title = _draft_or_post_title(); + printf( + '
      • %1$s %4$s
      • ', + /* translators: 1: relative date, 2: time */ + sprintf( _x( '%1$s, %2$s', 'dashboard' ), $relative, get_the_time() ), + $recent_post_link, + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Edit “%s”' ), $draft_or_post_title ) ), + $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 ) { + // Select all comment types and filter out spam later for better query performance. + $comments = array(); + + $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 ) ) { + if ( ! is_array( $possible ) ) { + break; + } + 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 '

      ' . __( 'Recent Comments' ) . '

      '; + + echo '
        '; + foreach ( $comments as $comment ) + _wp_dashboard_recent_comments_row( $comment ); + echo '
      '; + + if ( current_user_can( 'edit_posts' ) ) { + echo '

      ' . __( 'View more comments' ) . '

      '; + _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 callable $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 = wp_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'] ); + } + + $locale = get_user_locale(); + $cache_key = 'dash_v2_' . md5( $widget_id . '_' . $locale ); + 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(), 3 ); + array_unshift( $args, $widget_id, $check_urls ); + 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. + * + * @since 2.5.0 + * + * @global array $wp_dashboard_control_callbacks + * + * @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 ); + $locale = get_user_locale(); + $cache_key = 'dash_v2_' . md5( $widget_id . '_' . $locale ); + delete_transient( $cache_key ); + } + + wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); +} + + +/** + * Renders the Events and News dashboard widget. + * + * @since 4.8.0 + */ +function wp_dashboard_events_news() { + wp_print_community_events_markup(); + + ?> + +
      + +
      + + + + + +
      +

      + +

      + + + + +
      + +
      + +
      + + + + + + + + + + + + + + array( + + /** + * Filters 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', __( 'https://wordpress.org/news/' ) ), + + /** + * Filters 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/' ) ), + + /** + * Filters 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' => 0, + 'show_author' => 0, + 'show_date' => 0, + ), + 'planet' => array( + + /** + * Filters 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', __( 'https://planet.wordpress.org/' ) ), + + /** + * Filters 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', __( 'https://planet.wordpress.org/feed/' ) ), + + /** + * Filters 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' ) ), + + /** + * Filters the number of secondary link items for the 'WordPress News' dashboard widget. + * + * @since 4.4.0 + * + * @param string $items How many items to show in the secondary feed. + */ + 'items' => apply_filters( 'dashboard_secondary_items', 3 ), + '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 + * @since 4.8.0 Removed popular plugins feed. + * + * @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 '
      '; + wp_widget_rss_output( $args['url'], $args ); + echo "
      "; + } +} + +/** + * Display file upload quota on dashboard. + * + * Runs on the {@see 'activity_box_end'} hook in wp_dashboard_right_now(). + * + * @since 3.0.0 + * + * @return bool|null 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 ); + + ?> +

      +
      +
        +
      • + %2$s (%3$s)', + esc_url( admin_url( 'upload.php' ) ), + $text, + __( 'Manage Uploads' ) + ); ?> +
      • + %2$s (%3$s)', + esc_url( admin_url( 'upload.php' ) ), + $text, + __( 'Manage Uploads' ) + ); ?> +
      • +
      +
      + %s', esc_url( $response['update_url'] ), esc_html( $response['name'] ) ) + ); + } else { + /* translators: %s: browser name and link */ + $msg = sprintf( __( "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." ), + sprintf( '%s', esc_url( $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 = 'https://browsehappy.com/'; + $locale = get_user_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 .= '
      '; + } + + /** + * Filters 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 ); +} + +/** + * @since 3.2.0 + * + * @param array $classes + * @return array + */ +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) ) ) { + // include an unmodified $wp_version + include( ABSPATH . WPINC . '/version.php' ); + + $url = 'http://api.wordpress.org/core/browse-happy/1.1/'; + $options = array( + 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ) + ); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + $url = set_url_scheme( $url, 'https' ); + } + + $response = wp_remote_post( $url, $options ); + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + /** + * Response should be an array with: + * 'platform' - string - A user-friendly platform name, if it can be determined + * 'name' - string - A user-friendly browser name + * 'version' - string - The version of the browser the user is using + * 'current_version' - string - The most recent version of the browser + * 'upgrade' - boolean - Whether the browser needs an upgrade + * 'insecure' - boolean - Whether the browser is deemed insecure + * 'update_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' ), $themes_link ); ?>

      + +
      +
      +

      +
        + +
      • ' . __( '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' ) . '', __( 'https://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 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 callable $sanitize_callback A callback function that sanitizes the option's value. + */ +function add_option_update_handler( $option_group, $option_name, $sanitize_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.0.0', 'register_setting()' ); + register_setting( $option_group, $option_name, $sanitize_callback ); +} + +/** + * Unregister a setting + * + * @since 2.7.0 + * @deprecated 3.0.0 Use unregister_setting() + * @see unregister_setting() + * + * @param string $option_group + * @param string $option_name + * @param callable $sanitize_callback + */ +function remove_option_update_handler( $option_group, $option_name, $sanitize_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.0.0', 'unregister_setting()' ); + 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.0' ); +} + +/** + * 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.0' ); +} + +/** + * Determine whether to use CodePress. + * + * @since 2.8.0 + * @deprecated 3.0.0 +**/ +function use_codepress() { + _deprecated_function( __FUNCTION__, '3.0.0' ); +} + +/** + * Get all user IDs. + * + * @deprecated 3.1.0 Use get_users() + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @return array List of user IDs. + */ +function get_author_user_ids() { + _deprecated_function( __FUNCTION__, '3.1.0', '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) ); +} + +/** + * Gets author users who can edit posts. + * + * @deprecated 3.1.0 Use get_users() + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @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.0', '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); +} + +/** + * Gets the IDs of any users who can edit posts. + * + * @deprecated 3.1.0 Use get_users() + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $user_id User ID. + * @param bool $exclude_zeros Optional. Whether to exclude zeroes. Default true. + * @return array Array of editable user IDs, empty array otherwise. + */ +function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) { + _deprecated_function( __FUNCTION__, '3.1.0', '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 ); +} + +/** + * Gets all users who are not authors. + * + * @deprecated 3.1.0 Use get_users() + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function get_nonauthor_user_ids() { + _deprecated_function( __FUNCTION__, '3.1.0', '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', false ) ) : +/** + * WordPress User Search class. + * + * @since 2.1.0 + * @deprecated 3.1.0 Use WP_User_Query + */ +class WP_User_Search { + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var mixed + */ + var $results; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var string + */ + 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 int + */ + 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 WP_Error + */ + var $search_errors; + + /** + * {@internal Missing Description}} + * + * @since 2.7.0 + * @access private + * @var string + */ + var $paging_text; + + /** + * PHP5 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 __construct( $search_term = '', $page = '', $role = '' ) { + _deprecated_function( __FUNCTION__, '3.1.0', '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(); + } + + /** + * 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 + */ + public function WP_User_Search( $search_term = '', $page = '', $role = '' ) { + self::__construct( $search_term, $page, $role ); + } + + /** + * Prepares the user search query (legacy). + * + * @since 2.1.0 + * @access public + */ + 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 ) ); + } + + /** + * Executes the user search query. + * + * @since 2.1.0 + * @access public + */ + 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 users found.')); + } + + /** + * Prepares variables for use in templates. + * + * @since 2.1.0 + * @access public + */ + function prepare_vars_for_template_usage() {} + + /** + * Handles paging for the user search query. + * + * @since 2.1.0 + * @access public + */ + 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 + ); + } + } + } + + /** + * Retrieves the user search query results. + * + * @since 2.1.0 + * @access public + * + * @return array + */ + public 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; + +/** + * Retrieves editable posts from other users. + * + * @since 2.3.0 + * @deprecated 3.1.0 Use get_posts() + * @see get_posts() + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $user_id User ID to not retrieve posts from. + * @param string $type Optional. Post type to retrieve. Accepts 'draft', 'pending' or 'any' (all). + * Default 'any'. + * @return array List of posts from others. + */ +function get_others_unpublished_posts( $user_id, $type = 'any' ) { + _deprecated_function( __FUNCTION__, '3.1.0' ); + + 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 Use get_posts() + * @see get_posts() + * + * @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.0' ); + + return get_others_unpublished_posts($user_id, 'draft'); +} + +/** + * Retrieve pending review posts from other users. + * + * @deprecated 3.1.0 Use get_posts() + * @see get_posts() + * + * @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.0' ); + + return get_others_unpublished_posts($user_id, 'pending'); +} + +/** + * Output the QuickPress dashboard widget. + * + * @since 3.0.0 + * @deprecated 3.2.0 Use wp_dashboard_quick_press() + * @see wp_dashboard_quick_press() + */ +function wp_dashboard_quick_press_output() { + _deprecated_function( __FUNCTION__, '3.2.0', 'wp_dashboard_quick_press()' ); + wp_dashboard_quick_press(); +} + +/** + * Outputs the TinyMCE editor. + * + * @since 2.7.0 + * @deprecated 3.3.0 Use wp_editor() + * @see wp_editor() + * + * @staticvar int $num + */ +function wp_tiny_mce( $teeny = false, $settings = false ) { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_editor()' ); + + static $num = 1; + + if ( ! class_exists( '_WP_Editors', false ) ) + 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); +} + +/** + * Preloads TinyMCE dialogs. + * + * @deprecated 3.3.0 Use wp_editor() + * @see wp_editor() + */ +function wp_preload_dialogs() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_editor()' ); +} + +/** + * Prints TinyMCE editor JS. + * + * @deprecated 3.3.0 Use wp_editor() + * @see wp_editor() + */ +function wp_print_editor_js() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_editor()' ); +} + +/** + * Handles quicktags. + * + * @deprecated 3.3.0 Use wp_editor() + * @see wp_editor() + */ +function wp_quicktags() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_editor()' ); +} + +/** + * Returns the screen layout options. + * + * @since 2.8.0 + * @deprecated 3.3.0 WP_Screen::render_screen_layout() + * @see WP_Screen::render_screen_layout() + */ +function screen_layout( $screen ) { + _deprecated_function( __FUNCTION__, '3.3.0', '$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 Use WP_Screen::render_per_page_options() + * @see WP_Screen::render_per_page_options() + */ +function screen_options( $screen ) { + _deprecated_function( __FUNCTION__, '3.3.0', '$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 Use WP_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 Use WP_Admin_Bar + * @see WP_Admin_Bar + */ +function favorite_actions() { + _deprecated_function( __FUNCTION__, '3.2.0', 'WP_Admin_Bar' ); +} + +/** + * Handles uploading an image. + * + * @deprecated 3.3.0 Use wp_media_upload_handler() + * @see wp_media_upload_handler() + * + * @return null|string + */ +function media_upload_image() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +/** + * Handles uploading an audio file. + * + * @deprecated 3.3.0 Use wp_media_upload_handler() + * @see wp_media_upload_handler() + * + * @return null|string + */ +function media_upload_audio() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +/** + * Handles uploading a video file. + * + * @deprecated 3.3.0 Use wp_media_upload_handler() + * @see wp_media_upload_handler() + * + * @return null|string + */ +function media_upload_video() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +/** + * Handles uploading a generic file. + * + * @deprecated 3.3.0 Use wp_media_upload_handler() + * @see wp_media_upload_handler() + * + * @return null|string + */ +function media_upload_file() { + _deprecated_function( __FUNCTION__, '3.3.0', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +/** + * Handles retrieving the insert-from-URL form for an image. + * + * @deprecated 3.3.0 Use wp_media_insert_url_form() + * @see wp_media_insert_url_form() + * + * @return string + */ +function type_url_form_image() { + _deprecated_function( __FUNCTION__, '3.3.0', "wp_media_insert_url_form('image')" ); + return wp_media_insert_url_form( 'image' ); +} + +/** + * Handles retrieving the insert-from-URL form for an audio file. + * + * @deprecated 3.3.0 Use wp_media_insert_url_form() + * @see wp_media_insert_url_form() + * + * @return string + */ +function type_url_form_audio() { + _deprecated_function( __FUNCTION__, '3.3.0', "wp_media_insert_url_form('audio')" ); + return wp_media_insert_url_form( 'audio' ); +} + +/** + * Handles retrieving the insert-from-URL form for a video file. + * + * @deprecated 3.3.0 Use wp_media_insert_url_form() + * @see wp_media_insert_url_form() + * + * @return string + */ +function type_url_form_video() { + _deprecated_function( __FUNCTION__, '3.3.0', "wp_media_insert_url_form('video')" ); + return wp_media_insert_url_form( 'video' ); +} + +/** + * Handles retrieving the insert-from-URL form for a generic file. + * + * @deprecated 3.3.0 Use wp_media_insert_url_form() + * @see wp_media_insert_url_form() + * + * @return string + */ +function type_url_form_file() { + _deprecated_function( __FUNCTION__, '3.3.0', "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 Use WP_Screen::add_help_tab() + * @see WP_Screen::add_help_tab() + * + * @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.0', '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 site. + * + * @since 3.0.0 + * @deprecated 3.4.0 Use wp_get_themes() + * @see wp_get_themes() + * + * @return array $themes Array of allowed themes. + */ +function get_allowed_themes() { + _deprecated_function( __FUNCTION__, '3.4.0', "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; +} + +/** + * Retrieves a list of broken themes. + * + * @since 1.5.0 + * @deprecated 3.4.0 Use wp_get_themes() + * @see wp_get_themes() + * + * @return array + */ +function get_broken_themes() { + _deprecated_function( __FUNCTION__, '3.4.0', "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; +} + +/** + * Retrieves information on the current active theme. + * + * @since 2.0.0 + * @deprecated 3.4.0 Use wp_get_theme() + * @see wp_get_theme() + * + * @return WP_Theme + */ +function current_theme_info() { + _deprecated_function( __FUNCTION__, '3.4.0', '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.0' ); +} + +/** + * 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.0' ); +} + +/** + * Gets an existing post and format it for editing. + * + * @since 2.0.0 + * @deprecated 3.5.0 Use get_post() + * @see get_post() + * + * @param int $id + * @return object + */ +function get_post_to_edit( $id ) { + _deprecated_function( __FUNCTION__, '3.5.0', 'get_post()' ); + + return get_post( $id, OBJECT, 'edit' ); +} + +/** + * Gets the default page information to use. + * + * @since 2.5.0 + * @deprecated 3.5.0 Use get_default_post_to_edit() + * @see 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.0', "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 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.0', 'image_resize()' ); + return apply_filters( 'wp_create_thumbnail', image_resize( $file, $max_side, $max_side ) ); +} + +/** + * This was once used to display a meta box 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.0' ); +} + +/** + * 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 Use Core_Upgrader + * @see Core_Upgrader + */ +function wp_update_core($current, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7.0', '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 Use Plugin_Upgrader + * @see Plugin_Upgrader + */ +function wp_update_plugin($plugin, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7.0', '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 instantiating a Theme_Upgrader instance directly, + * and calling the 'upgrade' method. + * Unused since 2.8.0. + * + * @since 2.7.0 + * @deprecated 3.7.0 Use Theme_Upgrader + * @see Theme_Upgrader + */ +function wp_update_theme($theme, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7.0', '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. + * + * @since 2.0.0 + * @deprecated 3.7.0 + * + * @param int|bool $id + */ +function the_attachment_links( $id = false ) { + _deprecated_function( __FUNCTION__, '3.7.0' ); +} + +/** + * Displays a screen icon. + * + * @since 2.7.0 + * @deprecated 3.8.0 + */ +function screen_icon() { + _deprecated_function( __FUNCTION__, '3.8.0' ); + echo get_screen_icon(); +} + +/** + * Retrieves the screen icon (no longer used in 3.8+). + * + * @since 3.2.0 + * @deprecated 3.8.0 + * + * @return string An HTML comment explaining that icons are no longer used. + */ +function get_screen_icon() { + _deprecated_function( __FUNCTION__, '3.8.0' ); + return ''; +} + +/** + * Deprecated dashboard widget controls. + * + * @since 2.5.0 + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links_output() {} + +/** + * Deprecated dashboard secondary output. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_secondary_output() {} + +/** + * Deprecated dashboard widget controls. + * + * @since 2.7.0 + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links() {} + +/** + * Deprecated dashboard incoming links control. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links_control() {} + +/** + * Deprecated dashboard plugins control. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_plugins() {} + +/** + * Deprecated dashboard primary control. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_primary_control() {} + +/** + * Deprecated dashboard recent comments control. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_recent_comments_control() {} + +/** + * Deprecated dashboard secondary section. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_secondary() {} + +/** + * Deprecated dashboard secondary control. + * + * @deprecated 3.8.0 + */ +function wp_dashboard_secondary_control() {} + +/** + * Display plugins text for the WordPress news widget. + * + * @since 2.5.0 + * @deprecated 4.8.0 + * + * @param string $rss The RSS feed URL. + * @param array $args Array of arguments for this RSS feed. + */ +function wp_dashboard_plugins_output( $rss, $args = array() ) { + _deprecated_function( __FUNCTION__, '4.8.0' ); + + // 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 ) as $feed ) { + 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; + + $raw_title = $item->get_title(); + + $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) . '&TB_iframe=true&width=600&height=800'; + echo '
      • ' . __( 'Popular Plugin' ) . ': ' . esc_html( $raw_title ) . + ' (' . __( 'Install' ) . ')
      • '; + + $feed->__destruct(); + unset( $feed ); + } + + echo '
      '; +} + +/** + * 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.0' ); +} + +/** + * 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. + * + * @since 2.7.0 + * + * @deprecated 4.5.0 Use add_menu_page() + * @see add_menu_page() + * @global int $_wp_last_object_menu + * + * @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 callable $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 = '') { + _deprecated_function( __FUNCTION__, '4.5.0', 'add_menu_page()' ); + + 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. + * + * @since 2.7.0 + * + * @deprecated 4.5.0 Use add_menu_page() + * @see add_menu_page() + * @global int $_wp_last_utility_menu + * + * @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 callable $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 = '') { + _deprecated_function( __FUNCTION__, '4.5.0', 'add_menu_page()' ); + + 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); +} + +/** + * Disables autocomplete on the 'post' form (Add/Edit Post screens) for WebKit browsers, + * as they disregard the autocomplete setting on the editor textarea. That can break the editor + * when the user navigates to it with the browser's Back button. See #28037 + * + * Replaced with wp_page_reload_on_back_button_js() that also fixes this problem. + * + * @since 4.0.0 + * @deprecated 4.6.0 + * + * @link https://core.trac.wordpress.org/ticket/35852 + * + * @global bool $is_safari + * @global bool $is_chrome + */ +function post_form_autocomplete_off() { + global $is_safari, $is_chrome; + + _deprecated_function( __FUNCTION__, '4.6.0' ); + + if ( $is_safari || $is_chrome ) { + echo ' autocomplete="off"'; + } +} + +/** + * Display JavaScript on the page. + * + * @since 3.5.0 + * @deprecated 4.9.0 + */ +function options_permalink_add_js() { + ?> + + '', + 1 => __( 'Item added.' ), + 2 => __( 'Item deleted.' ), + 3 => __( 'Item updated.' ), + 4 => __( 'Item not added.' ), + 5 => __( 'Item not updated.' ), + 6 => __( 'Items deleted.' ), +); + +$messages['category'] = array( + 0 => '', + 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 => '', + 1 => __( 'Tag added.' ), + 2 => __( 'Tag deleted.' ), + 3 => __( 'Tag updated.' ), + 4 => __( 'Tag not added.' ), + 5 => __( 'Tag not updated.' ), + 6 => __( 'Tags deleted.' ), +); + +/** + * Filters 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 ]; + } +} \ No newline at end of file diff --git a/wp-admin/includes/export.php b/wp-admin/includes/export.php new file mode 100644 index 0000000..f8d327b --- /dev/null +++ b/wp-admin/includes/export.php @@ -0,0 +1,621 @@ + '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 .= '.'; + } + $date = date( 'Y-m-d' ); + $wp_filename = $sitename . 'wordpress.' . $date . '.xml'; + /** + * Filters the export filename. + * + * @since 4.4.0 + * + * @param string $wp_filename The name of the file for download. + * @param string $sitename The site name. + * @param string $date Today's date, formatted. + */ + $filename = apply_filters( 'export_wp_filename', $wp_filename, $sitename, $date ); + + 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'] || 'attachment' == $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 ); + } elseif ( '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 ) ) { + $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() { + // Multisite: the base URL. + if ( is_multisite() ) + return network_home_url(); + // WordPress (single site): 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 ) . "\n"; + } + + /** + * 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 ) . "\n"; + } + + /** + * 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 ) . "\n"; + } + + /** + * 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 ) . "\n"; + } + + /** + * 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 ) . "\n"; + } + + /** + * 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 "\t\t" . wxr_cdata( $term->description ) . "\n"; + } + + /** + * Output term meta XML tags for a given term object. + * + * @since 4.6.0 + * + * @param WP_Term $term Term object. + */ + function wxr_term_meta( $term ) { + global $wpdb; + + $termmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->termmeta WHERE term_id = %d", $term->term_id ) ); + + foreach ( $termmeta as $meta ) { + /** + * Filters whether to selectively skip term meta used for WXR exports. + * + * Returning a truthy value to the filter will skip the current meta + * object from being exported. + * + * @since 4.6.0 + * + * @param bool $skip Whether to skip the current piece of term meta. Default false. + * @param string $meta_key Current meta key. + * @param object $meta Current meta object. + */ + if ( ! apply_filters( 'wxr_export_skip_termmeta', false, $meta->meta_key, $meta ) ) { + printf( "\t\t\n\t\t\t%s\n\t\t\t%s\n\t\t\n", wxr_cdata( $meta->meta_key ), wxr_cdata( $meta->meta_value ) ); + } + } + } + + /** + * Output list of authors with posts + * + * @since 3.1.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param array $post_ids Array of post IDs to filter the query by. Optional. + */ + function wxr_authors_list( array $post_ids = null ) { + global $wpdb; + + if ( !empty( $post_ids ) ) { + $post_ids = array_map( 'absint', $post_ids ); + $and = 'AND ID IN ( ' . implode( ', ', $post_ids ) . ')'; + } else { + $and = ''; + } + + $authors = array(); + $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft' $and" ); + foreach ( (array) $results as $result ) + $authors[] = get_userdata( $result->post_author ); + + $authors = array_filter( $authors ); + + foreach ( $authors as $author ) { + echo "\t"; + echo '' . intval( $author->ID ) . ''; + echo '' . wxr_cdata( $author->user_login ) . ''; + echo '' . wxr_cdata( $author->user_email ) . ''; + echo '' . wxr_cdata( $author->display_name ) . ''; + echo '' . wxr_cdata( $author->first_name ) . ''; + echo '' . wxr_cdata( $author->last_name ) . ''; + echo "\n"; + } + } + + /** + * Output 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"; + echo '' . intval( $menu->term_id ) . ''; + echo 'nav_menu'; + echo '' . wxr_cdata( $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"; + } + } + + /** + * + * @param bool $return_me + * @param string $meta_key + * @return bool + */ + 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; + + // 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 + /** This filter is documented in wp-includes/feed.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 ) : + /** + * Filters 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 ) ); + $comments = array_map( 'get_comment', $_comments ); + 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 ) : + /** + * Filters whether to selectively skip comment meta used for WXR exports. + * + * Returning a truthy value to the filter will skip the current meta + * object from being exported. + * + * @since 4.0.0 + * + * @param bool $skip Whether to skip the current comment meta. Default false. + * @param string $meta_key Current meta key. + * @param object $meta Current meta object. + */ + if ( apply_filters( 'wxr_export_skip_commentmeta', false, $meta->meta_key, $meta ) ) { + continue; + } + ?> + + meta_key ); ?> + meta_value ); ?> + + + + + + + + + __( 'Theme Functions' ), + 'header.php' => __( 'Theme Header' ), + 'footer.php' => __( 'Theme Footer' ), + 'sidebar.php' => __( 'Sidebar' ), + 'comments.php' => __( 'Comments' ), + 'searchform.php' => __( 'Search Form' ), + '404.php' => __( '404 Template' ), + 'link.php' => __( 'Links Template' ), + // Archives + 'index.php' => __( 'Main Index Template' ), + 'archive.php' => __( 'Archives' ), + 'author.php' => __( 'Author Template' ), + 'taxonomy.php' => __( 'Taxonomy Template' ), + 'category.php' => __( 'Category Template' ), + 'tag.php' => __( 'Tag Template' ), + 'home.php' => __( 'Posts Page' ), + 'search.php' => __( 'Search Results' ), + 'date.php' => __( 'Date Template' ), + // Content + 'singular.php' => __( 'Singular Template' ), + 'single.php' => __( 'Single Post' ), + 'page.php' => __( 'Single Page' ), + 'front-page.php' => __( 'Homepage' ), + // Attachments + 'attachment.php' => __( 'Attachment Template' ), + 'image.php' => __( 'Image Attachment Template' ), + 'video.php' => __( 'Video Attachment Template' ), + 'audio.php' => __( 'Audio Attachment Template' ), + 'application.php' => __( 'Application Attachment Template' ), + // Embeds + 'embed.php' => __( 'Embed Template' ), + 'embed-404.php' => __( 'Embed 404 Template' ), + 'embed-content.php' => __( 'Embed Content Template' ), + 'header-embed.php' => __( 'Embed Header Template' ), + 'footer-embed.php' => __( 'Embed Footer Template' ), + // Stylesheets + 'style.css' => __( 'Stylesheet' ), + 'editor-style.css' => __( 'Visual Editor Stylesheet' ), + 'editor-style-rtl.css' => __( 'Visual Editor RTL Stylesheet' ), + 'rtl.css' => __( 'RTL Stylesheet' ), + // Other + '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' ), + 'comments-popup.php' => __( 'Popup Comments' ), +); + +/** + * Get the description for standard WordPress theme files and other various standard + * WordPress files + * + * @since 1.5.0 + * + * @global array $wp_file_descriptions Theme file descriptions. + * @global array $allowed_files List of allowed files. + * @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. + * Appends 'Page Template' to basename of $file if the file is a page template + */ +function get_file_description( $file ) { + global $wp_file_descriptions, $allowed_files; + + $dirname = pathinfo( $file, PATHINFO_DIRNAME ); + + $file_path = $allowed_files[ $file ]; + if ( isset( $wp_file_descriptions[ basename( $file ) ] ) && '.' === $dirname ) { + return $wp_file_descriptions[ basename( $file ) ]; + } elseif ( file_exists( $file_path ) && is_file( $file_path ) ) { + $template_data = implode( '', file( $file_path ) ); + 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 + * + * @return string Full filesystem path to the root of the WordPress installation + */ +function get_home_path() { + $home = set_url_scheme( get_option( 'home' ), 'http' ); + $siteurl = set_url_scheme( get_option( 'siteurl' ), 'http' ); + 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 + * @since 4.9.0 Added the `$exclusions` parameter. + * + * @param string $folder Optional. Full path to folder. Default empty. + * @param int $levels Optional. Levels of folders to follow, Default 100 (PHP Loop limit). + * @param array $exclusions Optional. List of folders and files to skip. + * @return bool|array False on failure, Else array of files + */ +function list_files( $folder = '', $levels = 100, $exclusions = array() ) { + if ( empty( $folder ) ) { + return false; + } + + $folder = trailingslashit( $folder ); + + if ( ! $levels ) { + return false; + } + + $files = array(); + + $dir = @opendir( $folder ); + if ( $dir ) { + while ( ( $file = readdir( $dir ) ) !== false ) { + // Skip current and parent folder links. + if ( in_array( $file, array( '.', '..' ), true ) ) { + continue; + } + + // Skip hidden and excluded files. + if ( '.' === $file[0] || in_array( $file, $exclusions, true ) ) { + 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; +} + +/** + * Get list of file extensions that are editable in plugins. + * + * @since 4.9.0 + * + * @param string $plugin Plugin. + * @return array File extensions. + */ +function wp_get_plugin_file_editable_extensions( $plugin ) { + + $editable_extensions = array( + 'bash', + 'conf', + 'css', + 'diff', + 'htm', + 'html', + 'http', + 'inc', + 'include', + 'js', + 'json', + 'jsx', + 'less', + 'md', + 'patch', + 'php', + 'php3', + 'php4', + 'php5', + 'php7', + 'phps', + 'phtml', + 'sass', + 'scss', + 'sh', + 'sql', + 'svg', + 'text', + 'txt', + 'xml', + 'yaml', + 'yml', + ); + + /** + * Filters file type extensions editable in the plugin editor. + * + * @since 2.8.0 + * @since 4.9.0 Adds $plugin param. + * + * @param string $plugin Plugin file. + * @param array $editable_extensions An array of editable plugin file extensions. + */ + $editable_extensions = (array) apply_filters( 'editable_extensions', $editable_extensions, $plugin ); + + return $editable_extensions; +} + +/** + * Get list of file extensions that are editable for a given theme. + * + * @param WP_Theme $theme Theme. + * @return array File extensions. + */ +function wp_get_theme_file_editable_extensions( $theme ) { + + $default_types = array( + 'bash', + 'conf', + 'css', + 'diff', + 'htm', + 'html', + 'http', + 'inc', + 'include', + 'js', + 'json', + 'jsx', + 'less', + 'md', + 'patch', + 'php', + 'php3', + 'php4', + 'php5', + 'php7', + 'phps', + 'phtml', + 'sass', + 'scss', + 'sh', + 'sql', + 'svg', + 'text', + 'txt', + 'xml', + 'yaml', + 'yml', + ); + + /** + * Filters the list of file types allowed for editing in the Theme editor. + * + * @since 4.4.0 + * + * @param array $default_types List of file types. Default types include 'php' and 'css'. + * @param WP_Theme $theme The current Theme object. + */ + $file_types = apply_filters( 'wp_theme_editor_filetypes', $default_types, $theme ); + + // Ensure that default types are still there. + return array_unique( array_merge( $file_types, $default_types ) ); +} + +/** + * Print file editor templates (for plugins and themes). + * + * @since 4.9.0 + */ +function wp_print_file_editor_templates() { + ?> + + exists() ) { + return new WP_Error( 'non_existent_theme', __( 'The requested theme does not exist.' ) ); + } + + $real_file = $theme->get_stylesheet_directory() . '/' . $file; + if ( ! wp_verify_nonce( $args['nonce'], 'edit-theme_' . $real_file . $stylesheet ) ) { + return new WP_Error( 'nonce_failure' ); + } + + if ( $theme->errors() && 'theme_no_stylesheet' === $theme->errors()->get_error_code() ) { + return new WP_Error( + 'theme_no_stylesheet', + __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() + ); + } + + $editable_extensions = wp_get_theme_file_editable_extensions( $theme ); + + $allowed_files = array(); + foreach ( $editable_extensions as $type ) { + switch ( $type ) { + case 'php': + $allowed_files = array_merge( $allowed_files, $theme->get_files( 'php', -1 ) ); + break; + case 'css': + $style_files = $theme->get_files( 'css', -1 ); + $allowed_files['style.css'] = $style_files['style.css']; + $allowed_files = array_merge( $allowed_files, $style_files ); + break; + default: + $allowed_files = array_merge( $allowed_files, $theme->get_files( $type, -1 ) ); + break; + } + } + + // Compare based on relative paths + if ( 0 !== validate_file( $file, array_keys( $allowed_files ) ) ) { + return new WP_Error( 'disallowed_theme_file', __( 'Sorry, that file cannot be edited.' ) ); + } + + $is_active = ( get_stylesheet() === $stylesheet || get_template() === $stylesheet ); + } else { + return new WP_Error( 'missing_theme_or_plugin' ); + } + + // Ensure file is real. + if ( ! is_file( $real_file ) ) { + return new WP_Error( 'file_does_not_exist', __( 'No such file exists! Double check the name and try again.' ) ); + } + + // Ensure file extension is allowed. + $extension = null; + if ( preg_match( '/\.([^.]+)$/', $real_file, $matches ) ) { + $extension = strtolower( $matches[1] ); + if ( ! in_array( $extension, $editable_extensions, true ) ) { + return new WP_Error( 'illegal_file_type', __( 'Files of this type are not editable.' ) ); + } + } + + $previous_content = file_get_contents( $real_file ); + + if ( ! is_writeable( $real_file ) ) { + return new WP_Error( 'file_not_writable' ); + } + + $f = fopen( $real_file, 'w+' ); + if ( false === $f ) { + return new WP_Error( 'file_not_writable' ); + } + + $written = fwrite( $f, $content ); + fclose( $f ); + if ( false === $written ) { + return new WP_Error( 'unable_to_write', __( 'Unable to write to file.' ) ); + } + if ( 'php' === $extension && function_exists( 'opcache_invalidate' ) ) { + opcache_invalidate( $real_file, true ); + } + + if ( $is_active && 'php' === $extension ) { + + $scrape_key = md5( rand() ); + $transient = 'scrape_key_' . $scrape_key; + $scrape_nonce = strval( rand() ); + set_transient( $transient, $scrape_nonce, 60 ); // It shouldn't take more than 60 seconds to make the two loopback requests. + + $cookies = wp_unslash( $_COOKIE ); + $scrape_params = array( + 'wp_scrape_key' => $scrape_key, + 'wp_scrape_nonce' => $scrape_nonce, + ); + $headers = array( + 'Cache-Control' => 'no-cache', + ); + + // Include Basic auth in loopback requests. + if ( isset( $_SERVER['PHP_AUTH_USER'] ) && isset( $_SERVER['PHP_AUTH_PW'] ) ) { + $headers['Authorization'] = 'Basic ' . base64_encode( wp_unslash( $_SERVER['PHP_AUTH_USER'] ) . ':' . wp_unslash( $_SERVER['PHP_AUTH_PW'] ) ); + } + + // Make sure PHP process doesn't die before loopback requests complete. + @set_time_limit( 300 ); + + // Time to wait for loopback requests to finish. + $timeout = 100; + + $needle_start = "###### wp_scraping_result_start:$scrape_key ######"; + $needle_end = "###### wp_scraping_result_end:$scrape_key ######"; + + // Attempt loopback request to editor to see if user just whitescreened themselves. + if ( $plugin ) { + $url = add_query_arg( compact( 'plugin', 'file' ), admin_url( 'plugin-editor.php' ) ); + } elseif ( isset( $stylesheet ) ) { + $url = add_query_arg( + array( + 'theme' => $stylesheet, + 'file' => $file, + ), + admin_url( 'theme-editor.php' ) + ); + } else { + $url = admin_url(); + } + $url = add_query_arg( $scrape_params, $url ); + $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + $body = wp_remote_retrieve_body( $r ); + $scrape_result_position = strpos( $body, $needle_start ); + + $loopback_request_failure = array( + 'code' => 'loopback_request_failed', + 'message' => __( 'Unable to communicate back with site to check for fatal errors, so the PHP change was reverted. You will need to upload your PHP file change by some other means, such as by using SFTP.' ), + ); + $json_parse_failure = array( + 'code' => 'json_parse_error', + ); + + $result = null; + if ( false === $scrape_result_position ) { + $result = $loopback_request_failure; + } else { + $error_output = substr( $body, $scrape_result_position + strlen( $needle_start ) ); + $error_output = substr( $error_output, 0, strpos( $error_output, $needle_end ) ); + $result = json_decode( trim( $error_output ), true ); + if ( empty( $result ) ) { + $result = $json_parse_failure; + } + } + + // Try making request to homepage as well to see if visitors have been whitescreened. + if ( true === $result ) { + $url = home_url( '/' ); + $url = add_query_arg( $scrape_params, $url ); + $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + $body = wp_remote_retrieve_body( $r ); + $scrape_result_position = strpos( $body, $needle_start ); + + if ( false === $scrape_result_position ) { + $result = $loopback_request_failure; + } else { + $error_output = substr( $body, $scrape_result_position + strlen( $needle_start ) ); + $error_output = substr( $error_output, 0, strpos( $error_output, $needle_end ) ); + $result = json_decode( trim( $error_output ), true ); + if ( empty( $result ) ) { + $result = $json_parse_failure; + } + } + } + + delete_transient( $transient ); + + if ( true !== $result ) { + + // Roll-back file change. + file_put_contents( $real_file, $previous_content ); + if ( function_exists( 'opcache_invalidate' ) ) { + opcache_invalidate( $real_file, true ); + } + + if ( ! isset( $result['message'] ) ) { + $message = __( 'Something went wrong.' ); + } else { + $message = $result['message']; + unset( $result['message'] ); + } + return new WP_Error( 'php_error', $message, $result ); + } + } + + if ( $theme instanceof WP_Theme ) { + $theme->cache_delete(); + } + + return true; +} + + +/** + * 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. Default empty. + * @param string $dir Optional. Directory to store the file in. Default empty. + * @return string a writable filename + */ +function wp_tempnam( $filename = '', $dir = '' ) { + if ( empty( $dir ) ) { + $dir = get_temp_dir(); + } + + if ( empty( $filename ) || '.' == $filename || '/' == $filename || '\\' == $filename ) { + $filename = time(); + } + + // Use the basename of the given file without the extension as the name for the temporary directory + $temp_filename = basename( $filename ); + $temp_filename = preg_replace( '|\.[^.]*$|', '', $temp_filename ); + + // If the folder is falsey, use its parent directory name instead. + if ( ! $temp_filename ) { + return wp_tempnam( dirname( $filename ), $dir ); + } + + // Suffix some random data to avoid filename conflicts + $temp_filename .= '-' . wp_generate_password( 6, false ); + $temp_filename .= '.tmp'; + $temp_filename = $dir . wp_unique_filename( $dir, $temp_filename ); + + $fp = @fopen( $temp_filename, 'x' ); + if ( ! $fp && is_writable( $dir ) && file_exists( $temp_filename ) ) { + return wp_tempnam( $filename, $dir ); + } + if ( $fp ) { + fclose( $fp ); + } + + return $temp_filename; +} + +/** + * Makes sure that the file that was requested to be edited is allowed to be edited. + * + * Function will die if you are not allowed to edit the file. + * + * @since 1.5.0 + * + * @param string $file File the user is attempting to edit. + * @param array $allowed_files Optional. Array of allowed files to edit, $file must match an entry exactly. + * @return string|null + */ +function validate_file_to_edit( $file, $allowed_files = array() ) { + $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. + * + * @access private + * @since 4.0.0 + * + * @see wp_handle_upload_error + * + * @param array $file Reference to a single element of $_FILES. Call the function once for each uploaded file. + * @param array|false $overrides An associative array of names => values to override default variables. Default false. + * @param string $time Time formatted in 'yyyy/mm'. + * @param string $action Expected value for $_POST['action']. + * @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, $time, $action ) { + // The default error handler. + if ( ! function_exists( 'wp_handle_upload_error' ) ) { + function wp_handle_upload_error( &$file, $message ) { + return array( 'error' => $message ); + } + } + + /** + * Filters the data for a file before it is uploaded to WordPress. + * + * The dynamic portion of the hook name, `$action`, refers to the post action. + * + * @since 2.9.0 as 'wp_handle_upload_prefilter'. + * @since 4.0.0 Converted to a dynamic hook with `$action`. + * + * @param array $file An array of data for a single file. + */ + $file = apply_filters( "{$action}_prefilter", $file ); + + // You may define your own function and pass the name in $overrides['upload_error_handler'] + $upload_error_handler = 'wp_handle_upload_error'; + if ( isset( $overrides['upload_error_handler'] ) ) { + $upload_error_handler = $overrides['upload_error_handler']; + } + + // 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 call_user_func_array( $upload_error_handler, array( &$file, $file['error'] ) ); + } + + // Install user overrides. Did we mention that this voids your warranty? + + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + if ( isset( $overrides['unique_filename_callback'] ) ) { + $unique_filename_callback = $overrides['unique_filename_callback']; + } + + /* + * This may not have orignially been intended to be overrideable, + * but historically has been. + */ + if ( isset( $overrides['upload_error_strings'] ) ) { + $upload_error_strings = $overrides['upload_error_strings']; + } else { + // 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 = isset( $overrides['test_form'] ) ? $overrides['test_form'] : true; + $test_size = isset( $overrides['test_size'] ) ? $overrides['test_size'] : true; + + // If you override this, you must provide $ext and $type!! + $test_type = isset( $overrides['test_type'] ) ? $overrides['test_type'] : true; + $mimes = isset( $overrides['mimes'] ) ? $overrides['mimes'] : false; + + // A correct form post will pass this test. + if ( $test_form && ( ! isset( $_POST['action'] ) || ( $_POST['action'] != $action ) ) ) { + return call_user_func_array( $upload_error_handler, array( &$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_array( $upload_error_handler, array( &$file, $upload_error_strings[ $file['error'] ] ) ); + } + + $test_file_size = 'wp_handle_upload' === $action ? $file['size'] : filesize( $file['tmp_name'] ); + // A non-empty file will pass this test. + if ( $test_size && ! ( $test_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_array( $upload_error_handler, array( &$file, $error_msg ) ); + } + + // A properly uploaded file will pass this test. There should be no reason to override this one. + $test_uploaded_file = 'wp_handle_upload' === $action ? @ is_uploaded_file( $file['tmp_name'] ) : @ is_file( $file['tmp_name'] ); + if ( ! $test_uploaded_file ) { + return call_user_func_array( $upload_error_handler, array( &$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 ); + $ext = empty( $wp_filetype['ext'] ) ? '' : $wp_filetype['ext']; + $type = empty( $wp_filetype['type'] ) ? '' : $wp_filetype['type']; + $proper_filename = empty( $wp_filetype['proper_filename'] ) ? '' : $wp_filetype['proper_filename']; + + // 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_array( $upload_error_handler, array( &$file, __( 'Sorry, this file type is not permitted for security reasons.' ) ) ); + } + 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_array( $upload_error_handler, array( &$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"; + + /** + * Filters whether to short-circuit moving the uploaded file after passing all checks. + * + * If a non-null value is passed to the filter, moving the file and any related error + * reporting will be completely skipped. + * + * @since 4.9.0 + * + * @param string $move_new_file If null (default) move the file after the upload. + * @param string $file An array of data for a single file. + * @param string $new_file Filename of the newly-uploaded file. + * @param string $type File type. + */ + $move_new_file = apply_filters( 'pre_move_uploaded_file', null, $file, $new_file, $type ); + + if ( null === $move_new_file ) { + if ( 'wp_handle_upload' === $action ) { + $move_new_file = @ move_uploaded_file( $file['tmp_name'], $new_file ); + } else { + // use copy and unlink because rename breaks streams. + $move_new_file = @ copy( $file['tmp_name'], $new_file ); + unlink( $file['tmp_name'] ); + } + + if ( false === $move_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' ); + } + + /** + * Filters 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. Values include 'upload' or 'sideload'. + */ + return apply_filters( 'wp_handle_upload', array( + 'file' => $new_file, + 'url' => $url, + 'type' => $type + ), 'wp_handle_sideload' === $action ? 'sideload' : 'upload' ); +} + +/** + * Wrapper for _wp_handle_upload(). + * + * Passes the {@see 'wp_handle_upload'} action. + * + * @since 2.0.0 + * + * @see _wp_handle_upload() + * + * @param array $file Reference to a single element of `$_FILES`. Call the function once for + * each uploaded file. + * @param array|bool $overrides Optional. An associative array of names=>values to override default + * variables. Default false. + * @param string $time Optional. Time formatted in 'yyyy/mm'. Default null. + * @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 ) { + /* + * $_POST['action'] must be set and its value must equal $overrides['action'] + * or this: + */ + $action = 'wp_handle_upload'; + if ( isset( $overrides['action'] ) ) { + $action = $overrides['action']; + } + + return _wp_handle_upload( $file, $overrides, $time, $action ); +} + +/** + * Wrapper for _wp_handle_upload(). + * + * Passes the {@see 'wp_handle_sideload'} action. + * + * @since 2.6.0 + * + * @see _wp_handle_upload() + * + * @param array $file An array similar to that of a PHP `$_FILES` POST array + * @param array|bool $overrides Optional. An associative array of names=>values to override default + * variables. Default false. + * @param string $time Optional. Time formatted in 'yyyy/mm'. Default null. + * @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 ) { + /* + * $_POST['action'] must be set and its value must equal $overrides['action'] + * or this: + */ + $action = 'wp_handle_sideload'; + if ( isset( $overrides['action'] ) ) { + $action = $overrides['action']; + } + return _wp_handle_upload( $file, $overrides, $time, $action ); +} + + +/** + * 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.')); + + $url_filename = basename( parse_url( $url, PHP_URL_PATH ) ); + + $tmpfname = wp_tempnam( $url_filename ); + 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 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @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. + wp_raise_memory_limit( 'admin' ); + + $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 + } + } + + /** + * Filters whether to use ZipArchive to unzip archives. + * + * @since 3.0.0 + * + * @param bool $ziparchive Whether to use ZipArchive. Default true. + */ + if ( class_exists( 'ZipArchive', false ) && 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 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @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; + + // Don't extract invalid files: + if ( 0 !== validate_file( $info['name'] ) ) { + continue; + } + + $uncompressed_size += $info['size']; + + if ( '/' === substr( $info['name'], -1 ) ) { + // Directory. + $needed_dirs[] = $to . untrailingslashit( $info['name'] ); + } elseif ( '.' !== $dirname = dirname( $info['name'] ) ) { + // Path to a file. + $needed_dirs[] = $to . untrailingslashit( $dirname ); + } + } + + /* + * 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 ( wp_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_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; + + // Don't extract invalid files: + if ( 0 !== validate_file( $info['name'] ) ) { + 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 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @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 ( wp_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; + + // Don't extract invalid files: + if ( 0 !== validate_file( $file['filename'] ) ) { + 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 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @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 {@see 'filesystem_method_file'} filter. + * + * @since 2.5.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param array|false $args Optional. Connection args, These are passed directly to + * the `WP_Filesystem_*()` classes. Default false. + * @param string|false $context Optional. Context for get_filesystem_method(). Default false. + * @param bool $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable. Default false. + * @return null|bool false on failure, true on success. + */ +function WP_Filesystem( $args = false, $context = false, $allow_relaxed_file_ownership = false ) { + global $wp_filesystem; + + require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php'); + + $method = get_filesystem_method( $args, $context, $allow_relaxed_file_ownership ); + + if ( ! $method ) + return false; + + if ( ! class_exists( "WP_Filesystem_$method" ) ) { + + /** + * Filters 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 method to use for reading, writing, modifying, or deleting + * files on the filesystem. + * + * The priority of the transports are: Direct, SSH2, FTP PHP Extension, FTP Sockets + * (Via Sockets class, or `fsockopen()`). Valid values for these are: 'direct', 'ssh2', + * 'ftpext' or 'ftpsockets'. + * + * The return value can be overridden by defining the `FS_METHOD` constant in `wp-config.php`, + * or filtering via {@see 'filesystem_method'}. + * + * @link https://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants + * + * Plugins may define a custom transport handler, See WP_Filesystem(). + * + * @since 2.5.0 + * + * @global callable $_wp_filesystem_direct_method + * + * @param array $args Optional. Connection details. Default empty array. + * @param string $context Optional. Full path to the directory that is tested + * for being writable. Default empty. + * @param bool $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable. + * Default false. + * @return string The transport to use, see description for valid return values. + */ +function get_filesystem_method( $args = array(), $context = '', $allow_relaxed_file_ownership = false ) { + $method = defined('FS_METHOD') ? FS_METHOD : false; // Please ensure that this is either 'direct', 'ssh2', 'ftpext' or 'ftpsockets' + + 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 ); + + if ( ! $method ) { + + $temp_file_name = $context . 'temp-write-test-' . time(); + $temp_handle = @fopen($temp_file_name, 'w'); + if ( $temp_handle ) { + + // Attempt to determine the file owner of the WordPress files, and that of newly created files + $wp_file_owner = $temp_file_owner = false; + if ( function_exists('fileowner') ) { + $wp_file_owner = @fileowner( __FILE__ ); + $temp_file_owner = @fileowner( $temp_file_name ); + } + + if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) { + // WordPress is creating files as the same owner as the WordPress files, + // this means it's safe to modify & create new files via PHP. + $method = 'direct'; + $GLOBALS['_wp_filesystem_direct_method'] = 'file_owner'; + } elseif ( $allow_relaxed_file_ownership ) { + // The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files + // safely in this directory. This mode doesn't create new files, only alter existing ones. + $method = 'direct'; + $GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership'; + } + + @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 + + /** + * Filters 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. + * @param string $context Full path to the directory that is tested for being writable. + * @param bool $allow_relaxed_file_ownership Whether to allow Group/World writable. + */ + return apply_filters( 'filesystem_method', $method, $args, $context, $allow_relaxed_file_ownership ); +} + +/** + * 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 {@see 'request_filesystem_credentials'} filter. + * + * @since 2.5.0 + * @since 4.6.0 The `$context` parameter default changed from `false` to an empty string. + * + * @global string $pagenow + * + * @param string $form_post The URL to post the form to. + * @param string $type Optional. Chosen type of filesystem. Default empty. + * @param bool $error Optional. Whether the current request has failed to connect. + * Default false. + * @param string $context Optional. Full path to the directory that is tested for being + * writable. Default empty. + * @param array $extra_fields Optional. Extra `POST` fields to be checked for inclusion in + * the post. Default null. + * @param bool $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable. Default false. + * + * @return bool False on failure, true on success. + */ +function request_filesystem_credentials( $form_post, $type = '', $error = false, $context = '', $extra_fields = null, $allow_relaxed_file_ownership = false ) { + global $pagenow; + + /** + * Filters 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 + * @since 4.6.0 The `$context` parameter default changed from `false` to an empty string. + * + * @param mixed $output Form output to return instead. Default empty. + * @param string $form_post The 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 bool $allow_relaxed_file_ownership Whether to allow Group/World writable. + * Default false. + * @param array $extra_fields Extra POST fields. + */ + $req_cred = apply_filters( 'request_filesystem_credentials', '', $form_post, $type, $error, $context, $extra_fields, $allow_relaxed_file_ownership ); + if ( '' !== $req_cred ) + return $req_cred; + + if ( empty($type) ) { + $type = get_filesystem_method( array(), $context, $allow_relaxed_file_ownership ); + } + + if ( 'direct' == $type ) + return true; + + if ( is_null( $extra_fields ) ) + $extra_fields = array( 'version', 'locale' ); + + $credentials = get_option('ftp_credentials', array( 'hostname' => '', 'username' => '')); + + $submitted_form = wp_unslash( $_POST ); + + // Verify nonce, or unset submitted form field values on failure + if ( ! isset( $_POST['_fs_nonce'] ) || ! wp_verify_nonce( $_POST['_fs_nonce'], 'filesystem-credentials' ) ) { + unset( + $submitted_form['hostname'], + $submitted_form['username'], + $submitted_form['password'], + $submitted_form['public_key'], + $submitted_form['private_key'], + $submitted_form['connection_type'] + ); + } + + // 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($submitted_form['hostname']) ? $submitted_form['hostname'] : $credentials['hostname']); + $credentials['username'] = defined('FTP_USER') ? FTP_USER : (!empty($submitted_form['username']) ? $submitted_form['username'] : $credentials['username']); + $credentials['password'] = defined('FTP_PASS') ? FTP_PASS : (!empty($submitted_form['password']) ? $submitted_form['password'] : ''); + + // Check to see if we are setting the public/private keys for ssh + $credentials['public_key'] = defined('FTP_PUBKEY') ? FTP_PUBKEY : (!empty($submitted_form['public_key']) ? $submitted_form['public_key'] : ''); + $credentials['private_key'] = defined('FTP_PRIKEY') ? FTP_PRIKEY : (!empty($submitted_form['private_key']) ? $submitted_form['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'; + } elseif ( ( defined( 'FTP_SSL' ) && FTP_SSL ) && 'ftpext' == $type ) { //Only the FTP Extension understands SSL + $credentials['connection_type'] = 'ftps'; + } elseif ( ! empty( $submitted_form['connection_type'] ) ) { + $credentials['connection_type'] = $submitted_form['connection_type']; + } elseif ( ! 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']); + if ( ! wp_installing() ) { + update_option( 'ftp_credentials', $stored_credentials ); + } + return $credentials; + } + $hostname = isset( $credentials['hostname'] ) ? $credentials['hostname'] : ''; + $username = isset( $credentials['username'] ) ? $credentials['username'] : ''; + $public_key = isset( $credentials['public_key'] ) ? $credentials['public_key'] : ''; + $private_key = isset( $credentials['private_key'] ) ? $credentials['private_key'] : ''; + $port = isset( $credentials['port'] ) ? $credentials['port'] : ''; + $connection_type = isset( $credentials['connection_type'] ) ? $credentials['connection_type'] : ''; + + 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'); + + /** + * Filters the connection types to output to the filesystem credentials form. + * + * @since 2.9.0 + * @since 4.6.0 The `$context` parameter default changed from `false` to an empty string. + * + * @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 ); + +?> +
      +
      +" . __( 'Connection Information' ) . ""; +?> +

      + +
      + +
      +
      + +
      +
      + + $text ) : ?> + + +
      + +
      > + + + +

      +
      +'; +} +?> +

      + + + +

      +
      +
      + +
      +
      + +
      + array( + 'href' => array(), + 'target' => array() + ), + 'br' => array() + ); + $allowed_protocols = array( 'http', 'https' ); + $group_html = ''; + + $group_html .= '

      ' . esc_html( $group_data['group_label'] ) . '

      '; + $group_html .= '
      '; + + foreach ( (array) $group_data['items'] as $group_item_id => $group_item_data ) { + $group_html .= ''; + $group_html .= ''; + + foreach ( (array) $group_item_data as $group_item_datum ) { + $value = $group_item_datum['value']; + // If it looks like a link, make it a link + if ( false === strpos( $value, ' ' ) && ( 0 === strpos( $value, 'http://' ) || 0 === strpos( $value, 'https://' ) ) ) { + $value = '' . esc_html( $value ) . ''; + } + + $group_html .= ''; + $group_html .= ''; + $group_html .= ''; + $group_html .= ''; + } + + $group_html .= ''; + $group_html .= '
      ' . esc_html( $group_item_datum['name'] ) . '' . wp_kses( $value, $allowed_tags, $allowed_protocols ) . '
      '; + } + + $group_html .= '
      '; + + return $group_html; +} + +/** + * Generate the personal data export file. + * + * @since 4.9.6 + * + * @param int $request_id The export request ID. + */ +function wp_privacy_generate_personal_data_export_file( $request_id ) { + if ( ! class_exists( 'ZipArchive' ) ) { + wp_send_json_error( __( 'Unable to generate export file. ZipArchive not available.' ) ); + } + + // Get the request data. + $request = wp_get_user_request_data( $request_id ); + + if ( ! $request || 'export_personal_data' !== $request->action_name ) { + wp_send_json_error( __( 'Invalid request ID when generating export file.' ) ); + } + + $email_address = $request->email; + + if ( ! is_email( $email_address ) ) { + wp_send_json_error( __( 'Invalid email address when generating export file.' ) ); + } + + // Create the exports folder if needed. + $exports_dir = wp_privacy_exports_dir(); + $exports_url = wp_privacy_exports_url(); + + $result = wp_mkdir_p( $exports_dir ); + if ( is_wp_error( $result ) ) { + wp_send_json_error( $result->get_error_message() ); + } + + // Protect export folder from browsing. + $index_pathname = $exports_dir . 'index.html'; + if ( ! file_exists( $index_pathname ) ) { + $file = fopen( $index_pathname, 'w' ); + if ( false === $file ) { + wp_send_json_error( __( 'Unable to protect export folder from browsing.' ) ); + } + fwrite( $file, 'Silence is golden.' ); + fclose( $file ); + } + + $stripped_email = str_replace( '@', '-at-', $email_address ); + $stripped_email = sanitize_title( $stripped_email ); // slugify the email address + $obscura = wp_generate_password( 32, false, false ); + $file_basename = 'wp-personal-data-file-' . $stripped_email . '-' . $obscura; + $html_report_filename = $file_basename . '.html'; + $html_report_pathname = wp_normalize_path( $exports_dir . $html_report_filename ); + $file = fopen( $html_report_pathname, 'w' ); + if ( false === $file ) { + wp_send_json_error( __( 'Unable to open export file (HTML report) for writing.' ) ); + } + + $title = sprintf( + /* translators: %s: user's e-mail address */ + __( 'Personal Data Export for %s' ), + $email_address + ); + + // Open HTML. + fwrite( $file, "\n" ); + fwrite( $file, "\n" ); + + // Head. + fwrite( $file, "\n" ); + fwrite( $file, "\n" ); + fwrite( $file, "" ); + fwrite( $file, "" ); + fwrite( $file, esc_html( $title ) ); + fwrite( $file, "" ); + fwrite( $file, "\n" ); + + // Body. + fwrite( $file, "\n" ); + + // Heading. + fwrite( $file, "

      " . esc_html__( 'Personal Data Export' ) . "

      " ); + + // And now, all the Groups. + $groups = get_post_meta( $request_id, '_export_data_grouped', true ); + + // First, build an "About" group on the fly for this report. + $about_group = array( + 'group_label' => __( 'About' ), + 'items' => array( + 'about-1' => array( + array( + 'name' => _x( 'Report generated for', 'email address' ), + 'value' => $email_address, + ), + array( + 'name' => _x( 'For site', 'website name' ), + 'value' => get_bloginfo( 'name' ), + ), + array( + 'name' => _x( 'At URL', 'website URL' ), + 'value' => get_bloginfo( 'url' ), + ), + array( + 'name' => _x( 'On', 'date/time' ), + 'value' => current_time( 'mysql' ), + ), + ), + ), + ); + + // Merge in the special about group. + $groups = array_merge( array( 'about' => $about_group ), $groups ); + + // Now, iterate over every group in $groups and have the formatter render it in HTML. + foreach ( (array) $groups as $group_id => $group_data ) { + fwrite( $file, wp_privacy_generate_personal_data_export_group_html( $group_data ) ); + } + + fwrite( $file, "\n" ); + + // Close HTML. + fwrite( $file, "\n" ); + fclose( $file ); + + /* + * Now, generate the ZIP. + * + * If an archive has already been generated, then remove it and reuse the + * filename, to avoid breaking any URLs that may have been previously sent + * via email. + */ + $error = false; + $archive_url = get_post_meta( $request_id, '_export_file_url', true ); + $archive_pathname = get_post_meta( $request_id, '_export_file_path', true ); + + if ( empty( $archive_pathname ) || empty( $archive_url ) ) { + $archive_filename = $file_basename . '.zip'; + $archive_pathname = $exports_dir . $archive_filename; + $archive_url = $exports_url . $archive_filename; + + update_post_meta( $request_id, '_export_file_url', $archive_url ); + update_post_meta( $request_id, '_export_file_path', wp_normalize_path( $archive_pathname ) ); + } + + if ( ! empty( $archive_pathname ) && file_exists( $archive_pathname ) ) { + wp_delete_file( $archive_pathname ); + } + + $zip = new ZipArchive; + if ( true === $zip->open( $archive_pathname, ZipArchive::CREATE ) ) { + if ( ! $zip->addFile( $html_report_pathname, 'index.html' ) ) { + $error = __( 'Unable to add data to export file.' ); + } + + $zip->close(); + + if ( ! $error ) { + /** + * Fires right after all personal data has been written to the export file. + * + * @since 4.9.6 + * + * @param string $archive_pathname The full path to the export file on the filesystem. + * @param string $archive_url The URL of the archive file. + * @param string $html_report_pathname The full path to the personal data report on the filesystem. + * @param string $request_id The export request ID. + */ + do_action( 'wp_privacy_personal_data_export_file_created', $archive_pathname, $archive_url, $html_report_pathname, $request_id ); + } + } else { + $error = __( 'Unable to open export file (archive) for writing.' ); + } + + // And remove the HTML file. + unlink( $html_report_pathname ); + + if ( $error ) { + wp_send_json_error( $error ); + } +} + +/** + * Send an email to the user with a link to the personal data export file + * + * @since 4.9.6 + * + * @param int $request_id The request ID for this personal data export. + * @return true|WP_Error True on success or `WP_Error` on failure. + */ +function wp_privacy_send_personal_data_export_email( $request_id ) { + // Get the request data. + $request = wp_get_user_request_data( $request_id ); + + if ( ! $request || 'export_personal_data' !== $request->action_name ) { + return new WP_Error( 'invalid', __( 'Invalid request ID when sending personal data export email.' ) ); + } + + /** This filter is documented in wp-admin/includes/file.php */ + $expiration = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS ); + $expiration_date = date_i18n( get_option( 'date_format' ), time() + $expiration ); + +/* translators: Do not translate EXPIRATION, LINK, EMAIL, SITENAME, SITEURL: those are placeholders. */ +$email_text = __( +'Howdy, + +Your request for an export of personal data has been completed. You may +download your personal data by clicking on the link below. For privacy +and security, we will automatically delete the file on ###EXPIRATION###, +so please download it before then. + +###LINK### + +This email has been sent to ###EMAIL###. + +Regards, +All at ###SITENAME### +###SITEURL###' +); + + /** + * Filters the text of the email sent with a personal data export file. + * + * The following strings have a special meaning and will get replaced dynamically: + * ###EXPIRATION### The date when the URL will be automatically deleted. + * ###LINK### URL of the personal data export file for the user. + * ###EMAIL### The email we are sending to. + * ###SITENAME### The name of the site. + * ###SITEURL### The URL to the site. + * + * @since 4.9.6 + * + * @param string $email_text Text in the email. + * @param int $request_id The request ID for this personal data export. + */ + $content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id ); + + $email_address = $request->email; + $export_file_url = get_post_meta( $request_id, '_export_file_url', true ); + $site_name = is_multisite() ? get_site_option( 'site_name' ) : get_option( 'blogname' ); + $site_url = network_home_url(); + + $content = str_replace( '###EXPIRATION###', $expiration_date, $content ); + $content = str_replace( '###LINK###', esc_url_raw( $export_file_url ), $content ); + $content = str_replace( '###EMAIL###', $email_address, $content ); + $content = str_replace( '###SITENAME###', wp_specialchars_decode( $site_name, ENT_QUOTES ), $content ); + $content = str_replace( '###SITEURL###', esc_url_raw( $site_url ), $content ); + + $mail_success = wp_mail( + $email_address, + sprintf( + __( '[%s] Personal Data Export' ), + wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) + ), + $content + ); + + if ( ! $mail_success ) { + return new WP_Error( 'error', __( 'Unable to send personal data export email.' ) ); + } + + return true; +} + +/** + * Intercept personal data exporter page ajax responses in order to assemble the personal data export file. + * @see wp_privacy_personal_data_export_page + * @since 4.9.6 + * + * @param array $response The response from the personal data exporter for the given page. + * @param int $exporter_index The index of the personal data exporter. Begins at 1. + * @param string $email_address The email address of the user whose personal data this is. + * @param int $page The page of personal data for this exporter. Begins at 1. + * @param int $request_id The request ID for this personal data export. + * @param bool $send_as_email Whether the final results of the export should be emailed to the user. + * @param string $exporter_key The slug (key) of the exporter. + * @return array The filtered response. + */ +function wp_privacy_process_personal_data_export_page( $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key ) { + /* Do some simple checks on the shape of the response from the exporter. + * If the exporter response is malformed, don't attempt to consume it - let it + * pass through to generate a warning to the user by default ajax processing. + */ + if ( ! is_array( $response ) ) { + return $response; + } + + if ( ! array_key_exists( 'done', $response ) ) { + return $response; + } + + if ( ! array_key_exists( 'data', $response ) ) { + return $response; + } + + if ( ! is_array( $response['data'] ) ) { + return $response; + } + + // Get the request data. + $request = wp_get_user_request_data( $request_id ); + + if ( ! $request || 'export_personal_data' !== $request->action_name ) { + wp_send_json_error( __( 'Invalid request ID when merging exporter data.' ) ); + } + + $export_data = array(); + + // First exporter, first page? Reset the report data accumulation array. + if ( 1 === $exporter_index && 1 === $page ) { + update_post_meta( $request_id, '_export_data_raw', $export_data ); + } else { + $export_data = get_post_meta( $request_id, '_export_data_raw', true ); + } + + // Now, merge the data from the exporter response into the data we have accumulated already. + $export_data = array_merge( $export_data, $response['data'] ); + update_post_meta( $request_id, '_export_data_raw', $export_data ); + + // If we are not yet on the last page of the last exporter, return now. + $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() ); + $is_last_exporter = $exporter_index === count( $exporters ); + $exporter_done = $response['done']; + if ( ! $is_last_exporter || ! $exporter_done ) { + return $response; + } + + // Last exporter, last page - let's prepare the export file. + + // First we need to re-organize the raw data hierarchically in groups and items. + $groups = array(); + foreach ( (array) $export_data as $export_datum ) { + $group_id = $export_datum['group_id']; + $group_label = $export_datum['group_label']; + if ( ! array_key_exists( $group_id, $groups ) ) { + $groups[ $group_id ] = array( + 'group_label' => $group_label, + 'items' => array(), + ); + } + + $item_id = $export_datum['item_id']; + if ( ! array_key_exists( $item_id, $groups[ $group_id ]['items'] ) ) { + $groups[ $group_id ]['items'][ $item_id ] = array(); + } + + $old_item_data = $groups[ $group_id ]['items'][ $item_id ]; + $merged_item_data = array_merge( $export_datum['data'], $old_item_data ); + $groups[ $group_id ]['items'][ $item_id ] = $merged_item_data; + } + + // Then save the grouped data into the request. + delete_post_meta( $request_id, '_export_data_raw' ); + update_post_meta( $request_id, '_export_data_grouped', $groups ); + + // Generate the export file from the collected, grouped personal data. + do_action( 'wp_privacy_personal_data_export_file', $request_id ); + + // Clear the grouped data now that it is no longer needed. + delete_post_meta( $request_id, '_export_data_grouped' ); + + // If the destination is email, send it now. + if ( $send_as_email ) { + $mail_success = wp_privacy_send_personal_data_export_email( $request_id ); + if ( is_wp_error( $mail_success ) ) { + wp_send_json_error( $mail_success->get_error_message() ); + } + } else { + // Modify the response to include the URL of the export file so the browser can fetch it. + $export_file_url = get_post_meta( $request_id, '_export_file_url', true ); + if ( ! empty( $export_file_url ) ) { + $response['url'] = $export_file_url; + } + } + + // Update the request to completed state. + _wp_privacy_completed_request( $request_id ); + + return $response; +} diff --git a/wp-admin/includes/image-edit.php b/wp-admin/includes/image-edit.php new file mode 100644 index 0000000..efa9865 --- /dev/null +++ b/wp-admin/includes/image-edit.php @@ -0,0 +1,913 @@ + 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="" /> +
      +
      +
      +
      + + + +
      +
      +

      + + +
      +

      + +


      +

      + +


      +

      +
      +
      + +
      + +
      + + : + +
      +
      + +
      + +
      + + × + +
      +
      + +
      + + + +
      +
      +

      + +

      +
      + +
      + +
      +
      + +
      +
      + + + + + + + +
      +
      +
      + + + +
      + +
      + +
      + get_post_mime_type( $post_id ), 'methods' => array( 'rotate' ) ) ) ) { + $note_no_rotate = ''; + ?> + + + ' . __( 'Image rotation is not supported by your web host.' ) . '

      '; + ?> + + + + + + + + + + +
      + + + + + + + + +
      + +
      + +
      + + )" disabled="disabled" class="button button-primary imgedit-submit-btn" value="" /> +
      +
      + +
      +
      + +
      +stream( $mime_type ) ) ) + return false; + + return true; + } else { + _deprecated_argument( __FUNCTION__, '3.5.0', __( '$image needs to be an WP_Image_Editor object' ) ); + + /** + * Filters 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 $attachment_id The attachment post ID. + */ + $image = apply_filters( 'image_save_pre', $image, $attachment_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 bool + */ +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 ); + + /** + * Filters 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.0', __( '$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 ); + + /** + * Filters 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; + } + } +} + +/** + * Image preview ratio. Internal use only. + * + * @since 2.9.0 + * + * @ignore + * @param int $w Image width in pixels. + * @param int $h Image height in pixels. + * @return float|int Image preview ratio. + */ +function _image_get_preview_ratio($w, $h) { + $max = max($w, $h); + return $max > 400 ? (400 / $max) : 1; +} + +/** + * Returns an image resource. Internal use only. + * + * @since 2.9.0 + * @deprecated 3.5.0 Use WP_Image_Editor::rotate() + * @see WP_Image_Editor::rotate() + * + * @ignore + * @param resource $img Image resource. + * @param float|int $angle Image rotation angle, in degrees. + * @return resource|false GD image resource, false otherwise. + */ +function _rotate_image_resource($img, $angle) { + _deprecated_function( __FUNCTION__, '3.5.0', 'WP_Image_Editor::rotate()' ); + if ( function_exists('imagerotate') ) { + $rotated = imagerotate($img, $angle, 0); + if ( is_resource($rotated) ) { + imagedestroy($img); + $img = $rotated; + } + } + return $img; +} + +/** + * Flips an image resource. Internal use only. + * + * @since 2.9.0 + * @deprecated 3.5.0 Use WP_Image_Editor::flip() + * @see WP_Image_Editor::flip() + * + * @ignore + * @param resource $img Image resource. + * @param bool $horz Whether to flip horizontally. + * @param bool $vert Whether to flip vertically. + * @return resource (maybe) flipped image resource. + */ +function _flip_image_resource($img, $horz, $vert) { + _deprecated_function( __FUNCTION__, '3.5.0', '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; +} + +/** + * Crops an image resource. Internal use only. + * + * @since 2.9.0 + * + * @ignore + * @param resource $img Image resource. + * @param float $x Source point x-coordinate. + * @param float $y Source point y-cooredinate. + * @param float $w Source width. + * @param float $h Source height. + * @return resource (maybe) cropped image 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. + * + * @since 2.9.0 + * + * @param WP_Image_Editor $image WP_Image_Editor instance. + * @param array $changes Array of change operations. + * @return WP_Image_Editor WP_Image_Editor instance with changes applied. + */ +function image_edit_apply_changes( $image, $changes ) { + if ( is_resource( $image ) ) + _deprecated_argument( __FUNCTION__, '3.5.0', __( '$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, $c = count( $changes ); $j < $c; $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 ) { + + /** + * Filters 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 ) ) { + + /** + * Filters 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 bool + */ +function stream_preview_image( $post_id ) { + $post = get_post( $post_id ); + + wp_raise_memory_limit( 'admin' ); + + $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 ); +} + +/** + * Restores the metadata for a given attachment. + * + * @since 2.9.0 + * + * @param int $post_id Attachment post ID. + * @return stdClass Image restoration message object. + */ +function wp_restore_image($post_id) { + $meta = wp_get_attachment_metadata($post_id); + $file = get_attached_file($post_id); + $backup_sizes = $old_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 an edited image. + if ( preg_match('/-e[0-9]{13}\./', $parts['basename']) ) { + wp_delete_file( $file ); + } + } 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 an edited image. + if ( preg_match('/-e[0-9]{13}-/', $meta['sizes'][$default_size]['file']) ) { + $delete_file = path_join( $parts['dirname'], $meta['sizes'][$default_size]['file'] ); + wp_delete_file( $delete_file ); + } + } 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 ) || + ( $old_backup_sizes !== $backup_sizes && ! 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 ) { + $_wp_additional_image_sizes = wp_get_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 ); + + $basename = pathinfo( $path, PATHINFO_BASENAME ); + $dirname = pathinfo( $path, PATHINFO_DIRNAME ); + $ext = pathinfo( $path, PATHINFO_EXTENSION ); + $filename = pathinfo( $path, PATHINFO_FILENAME ); + $suffix = time() . rand(100, 999); + + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE && + isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $basename ) { + + if ( 'thumbnail' == $target ) { + $new_path = "{$dirname}/{$filename}-temp.{$ext}"; + } else { + $new_path = $path; + } + } else { + while ( true ) { + $filename = preg_replace( '/-e([0-9]+)$/', '', $filename ); + $filename .= "-e{$suffix}"; + $new_filename = "{$filename}.{$ext}"; + $new_path = "{$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'] !== $basename ) { + $tag = "full-$suffix"; + } + } else { + $tag = 'full-orig'; + } + + if ( $tag ) { + $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $basename ); + } + $success = ( $path === $new_path ) || 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; + } + + /* + * We need to remove any existing resized image files because + * a new crop or rotate could generate different sizes (and hence, filenames), + * keeping the new resized images from overwriting the existing image files. + * https://core.trac.wordpress.org/ticket/32171 + */ + if ( defined( 'IMAGE_EDIT_OVERWRITE' ) && IMAGE_EDIT_OVERWRITE && ! empty( $meta['sizes'] ) ) { + foreach ( $meta['sizes'] as $size ) { + if ( ! empty( $size['file'] ) && preg_match( '/-e[0-9]{13}-/', $size['file'] ) ) { + $delete_file = path_join( $dirname, $size['file'] ); + wp_delete_file( $delete_file ); + } + } + } + + 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 ( ! empty( $meta['sizes']['thumbnail'] ) && $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 ) { + wp_delete_file( $new_path ); + } + + $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..596aa79 --- /dev/null +++ b/wp-admin/includes/image.php @@ -0,0 +1,699 @@ +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; + $mime_type = get_post_mime_type( $attachment ); + + if ( preg_match( '!^image/!', $mime_type ) && 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. + $_wp_additional_image_sizes = wp_get_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'] ) ) { + // For theme-added sizes + $sizes[$s]['width'] = intval( $_wp_additional_image_sizes[$s]['width'] ); + } else { + // For default sizes set in options + $sizes[$s]['width'] = get_option( "{$s}_size_w" ); + } + + if ( isset( $_wp_additional_image_sizes[$s]['height'] ) ) { + // For theme-added sizes + $sizes[$s]['height'] = intval( $_wp_additional_image_sizes[$s]['height'] ); + } else { + // For default sizes set in options + $sizes[$s]['height'] = get_option( "{$s}_size_h" ); + } + + if ( isset( $_wp_additional_image_sizes[$s]['crop'] ) ) { + // For theme-added sizes + $sizes[$s]['crop'] = $_wp_additional_image_sizes[$s]['crop']; + } else { + // For default sizes set in options + $sizes[$s]['crop'] = get_option( "{$s}_crop" ); + } + } + + /** + * Filters the image sizes automatically generated when uploading an image. + * + * @since 2.9.0 + * @since 4.4.0 Added the `$metadata` argument. + * + * @param array $sizes An associative array of image sizes. + * @param array $metadata An associative array of image metadata: width, height, file. + */ + $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes, $metadata ); + + 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 ( wp_attachment_is( 'video', $attachment ) ) { + $metadata = wp_read_video_metadata( $file ); + $support = current_theme_supports( 'post-thumbnails', 'attachment:video' ) || post_type_supports( 'attachment:video', 'thumbnail' ); + } elseif ( wp_attachment_is( 'audio', $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' => '', + ); + /** + * Filters 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 ); + } + } + } + // Try to create image thumbnails for PDFs + else if ( 'application/pdf' === $mime_type ) { + $fallback_sizes = array( + 'thumbnail', + 'medium', + 'large', + ); + + /** + * Filters the image sizes generated for non-image mime types. + * + * @since 4.7.0 + * + * @param array $fallback_sizes An array of image size names. + * @param array $metadata Current attachment metadata. + */ + $fallback_sizes = apply_filters( 'fallback_intermediate_image_sizes', $fallback_sizes, $metadata ); + + $sizes = array(); + $_wp_additional_image_sizes = wp_get_additional_image_sizes(); + + foreach ( $fallback_sizes as $s ) { + if ( isset( $_wp_additional_image_sizes[ $s ]['width'] ) ) { + $sizes[ $s ]['width'] = intval( $_wp_additional_image_sizes[ $s ]['width'] ); + } else { + $sizes[ $s ]['width'] = get_option( "{$s}_size_w" ); + } + + if ( isset( $_wp_additional_image_sizes[ $s ]['height'] ) ) { + $sizes[ $s ]['height'] = intval( $_wp_additional_image_sizes[ $s ]['height'] ); + } else { + $sizes[ $s ]['height'] = get_option( "{$s}_size_h" ); + } + + if ( isset( $_wp_additional_image_sizes[ $s ]['crop'] ) ) { + $sizes[ $s ]['crop'] = $_wp_additional_image_sizes[ $s ]['crop']; + } else { + // Force thumbnails to be soft crops. + if ( 'thumbnail' !== $s ) { + $sizes[ $s ]['crop'] = get_option( "{$s}_crop" ); + } + } + } + + // Only load PDFs in an image editor if we're processing sizes. + if ( ! empty( $sizes ) ) { + $editor = wp_get_image_editor( $file ); + + if ( ! is_wp_error( $editor ) ) { // No support for this type of file + /* + * PDFs may have the same file filename as JPEGs. + * Ensure the PDF preview image does not overwrite any JPEG images that already exist. + */ + $dirname = dirname( $file ) . '/'; + $ext = '.' . pathinfo( $file, PATHINFO_EXTENSION ); + $preview_file = $dirname . wp_unique_filename( $dirname, wp_basename( $file, $ext ) . '-pdf.jpg' ); + + $uploaded = $editor->save( $preview_file, 'image/jpeg' ); + unset( $editor ); + + // Resize based on the full size image, rather than the source. + if ( ! is_wp_error( $uploaded ) ) { + $editor = wp_get_image_editor( $uploaded['path'] ); + unset( $uploaded['path'] ); + + if ( ! is_wp_error( $editor ) ) { + $metadata['sizes'] = $editor->multi_resize( $sizes ); + $metadata['sizes']['full'] = $uploaded; + } + } + } + } + } + + // Remove the blob of binary data from the array. + if ( $metadata ) { + unset( $metadata['image']['data'] ); + } + + /** + * Filters 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' => '', + 'orientation' => 0, + 'keywords' => array(), + ); + + $iptc = array(); + /* + * 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] ); + + mbstring_binary_safe_encoding(); + $caption_length = strlen( $caption ); + reset_mbstring_encoding(); + + if ( empty( $meta['title'] ) && $caption_length < 80 ) { + // Assume the title is stored in 2:120 if it's short. + $meta['title'] = $caption; + } + + $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] ) && ! 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] ); + + if ( ! empty( $iptc['2#025'][0] ) ) { // keywords array + $meta['keywords'] = array_values( $iptc['2#025'] ); + } + } + } + + /** + * Filters 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['ImageDescription'] ) ) { + mbstring_binary_safe_encoding(); + $description_length = strlen( $exif['ImageDescription'] ); + reset_mbstring_encoding(); + + if ( empty( $meta['title'] ) && $description_length < 80 ) { + // Assume the title is stored in ImageDescription + $meta['title'] = trim( $exif['ImageDescription'] ); + } + + if ( empty( $meta['caption'] ) && ! empty( $exif['COMPUTED']['UserComment'] ) ) { + $meta['caption'] = trim( $exif['COMPUTED']['UserComment'] ); + } + + if ( empty( $meta['caption'] ) ) { + $meta['caption'] = trim( $exif['ImageDescription'] ); + } + } elseif ( empty( $meta['caption'] ) && ! empty( $exif['Comments'] ) ) { + $meta['caption'] = trim( $exif['Comments'] ); + } + + if ( empty( $meta['credit'] ) ) { + if ( ! empty( $exif['Artist'] ) ) { + $meta['credit'] = trim( $exif['Artist'] ); + } elseif ( ! empty($exif['Author'] ) ) { + $meta['credit'] = trim( $exif['Author'] ); + } + } + + if ( empty( $meta['copyright'] ) && ! 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( $meta['created_timestamp'] ) && ! 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'] ); + } + if ( ! empty( $exif['Orientation'] ) ) { + $meta['orientation'] = $exif['Orientation']; + } + } + + foreach ( array( 'title', 'caption', 'credit', 'copyright', 'camera', 'iso' ) as $key ) { + if ( $meta[ $key ] && ! seems_utf8( $meta[ $key ] ) ) { + $meta[ $key ] = utf8_encode( $meta[ $key ] ); + } + } + + foreach ( $meta['keywords'] as $key => $keyword ) { + if ( ! seems_utf8( $keyword ) ) { + $meta['keywords'][ $key ] = utf8_encode( $keyword ); + } + } + + $meta = wp_kses_post_deep( $meta ); + + /** + * Filters the array of meta data read from an image's exif data. + * + * @since 2.5.0 + * @since 4.4.0 The `$iptc` parameter was added. + * + * @param array $meta Image meta data. + * @param string $file Path to image file. + * @param int $sourceImageType Type of image. + * @param array $iptc IPTC data. + */ + return apply_filters( 'wp_read_image_metadata', $meta, $file, $sourceImageType, $iptc ); + +} + +/** + * 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) { + $displayable_image_types = array( IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP ); + + $info = @getimagesize( $path ); + if ( empty( $info ) ) { + $result = false; + } elseif ( ! in_array( $info[2], $displayable_image_types ) ) { + $result = false; + } else { + $result = true; + } + + /** + * Filters 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) ) { + /** + * Filters 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 ) ) ) { + /** + * Filters 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' ) && true == ini_get( 'allow_url_fopen' ) ) { + /** + * Filters 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 ); + } + + /** + * Filters 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..ca12dfa --- /dev/null +++ b/wp-admin/includes/import.php @@ -0,0 +1,217 @@ + __( '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.' ) + ); + } + + $overrides = array( 'test_form' => false, 'test_type' => false ); + $_FILES['import']['name'] .= '.txt'; + $upload = wp_handle_upload( $_FILES['import'], $overrides ); + + if ( isset( $upload['error'] ) ) { + return $upload; + } + + // Construct the object array + $object = array( + 'post_title' => basename( $upload['file'] ), + 'post_content' => $upload['url'], + 'post_mime_type' => $upload['type'], + 'guid' => $upload['url'], + 'context' => 'import', + 'post_status' => 'private' + ); + + // Save the data + $id = wp_insert_attachment( $object, $upload['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' => $upload['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_user_locale(); + $cache_key = 'popular_importers_' . md5( $locale . $wp_version ); + $popular_importers = get_site_transient( $cache_key ); + + if ( ! $popular_importers ) { + $url = add_query_arg( array( + 'locale' => $locale, + 'version' => $wp_version, + ), 'http://api.wordpress.org/core/importers/1.1/' ); + $options = array( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ) ); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + $url = set_url_scheme( $url, 'https' ); + } + + $response = wp_remote_get( $url, $options ); + $popular_importers = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( is_array( $popular_importers ) ) { + set_site_transient( $cache_key, $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' => __( 'Import posts, comments, and users from a Blogger blog.' ), + 'plugin-slug' => 'blogger-importer', + 'importer-id' => 'blogger', + ), + 'wpcat2tag' => array( + 'name' => __( 'Categories and Tags Converter' ), + 'description' => __( 'Convert existing categories to tags or tags to categories, selectively.' ), + 'plugin-slug' => 'wpcat2tag-importer', + 'importer-id' => 'wp-cat2tag', + ), + 'livejournal' => array( + 'name' => __( 'LiveJournal' ), + 'description' => __( 'Import posts from LiveJournal using their API.' ), + 'plugin-slug' => 'livejournal-importer', + 'importer-id' => 'livejournal', + ), + 'movabletype' => array( + 'name' => __( 'Movable Type and TypePad' ), + 'description' => __( 'Import posts and comments from a Movable Type or TypePad blog.' ), + 'plugin-slug' => 'movabletype-importer', + 'importer-id' => 'mt', + ), + 'opml' => array( + 'name' => __( 'Blogroll' ), + 'description' => __( 'Import links in OPML format.' ), + 'plugin-slug' => 'opml-importer', + 'importer-id' => 'opml', + ), + 'rss' => array( + 'name' => __( 'RSS' ), + 'description' => __( 'Import posts from an RSS feed.' ), + 'plugin-slug' => 'rss-importer', + 'importer-id' => 'rss', + ), + 'tumblr' => array( + 'name' => __( 'Tumblr' ), + 'description' => __( 'Import posts & media from Tumblr using their API.' ), + 'plugin-slug' => 'tumblr-importer', + 'importer-id' => 'tumblr', + ), + 'wordpress' => array( + 'name' => 'WordPress', + 'description' => __( '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..e4c66d1 --- /dev/null +++ b/wp-admin/includes/list-table.php @@ -0,0 +1,84 @@ + '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' => array( 'comments', 'post-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) { + new _WP_List_Table_Compat( $screen, $columns ); +} + +/** + * Prints column headers for a particular screen. + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen The screen hook name or screen object. + * @param bool $with_id Whether to set the id attribute or not. + */ +function print_column_headers( $screen, $with_id = true ) { + $wp_list_table = new _WP_List_Table_Compat($screen); + + $wp_list_table->print_column_headers( $with_id ); +} diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php new file mode 100644 index 0000000..aa9b7dd --- /dev/null +++ b/wp-admin/includes/media.php @@ -0,0 +1,3266 @@ + __('From Computer'), // handler action suffix => tab text + 'type_url' => __('From URL'), + 'gallery' => __('Gallery'), + 'library' => __('Media Library') + ); + + /** + * Filters 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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @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; +} + +/** + * Outputs the legacy media upload tabs UI. + * + * @since 2.5.0 + * + * @global string $redir_tab + */ +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"; + } +} + +/** + * Retrieves the image HTML to send to the editor. + * + * @since 2.5.0 + * + * @param int $id Image attachment id. + * @param string $caption Image caption. + * @param string $title Image title attribute. + * @param string $align Image CSS alignment property. + * @param string $url Optional. Image src URL. Default empty. + * @param bool|string $rel Optional. Value for rel attribute or whether to add a default value. Default false. + * @param string|array $size Optional. Image size. Accepts any valid image size, or an array of width + * and height values in pixels (in that order). Default 'medium'. + * @param string $alt Optional. Image alt attribute. Default empty. + * @return string The HTML output to insert into the 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 ); + + if ( $rel ) { + if ( is_string( $rel ) ) { + $rel = ' rel="' . esc_attr( $rel ) . '"'; + } else { + $rel = ' rel="attachment wp-att-' . intval( $id ) . '"'; + } + } else { + $rel = ''; + } + + if ( $url ) + $html = '' . $html . ''; + + /** + * Filters the image HTML markup to send to the editor when inserting an image. + * + * @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|array $size Size of image. Image size or array of width and height values + * (in that order). Default 'medium'. + * @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 $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() ) + * @param string $alt image alt attribute + * @return string + */ +function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) { + + /** + * Filters the caption text. + * + * Note: If the caption text is empty, the caption shortcode will not be appended + * to the image HTML when inserted into the editor. + * + * Passing an empty value also prevents the {@see 'image_add_caption_shortcode'} + * Filters from being evaluated at the end of image_add_caption(). + * + * @since 4.1.0 + * + * @param string $caption The original caption text. + * @param int $id The attachment ID. + */ + $caption = apply_filters( 'image_add_caption_text', $caption, $id ); + + /** + * Filters 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]'; + + /** + * Filters 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 ); +} + +/** + * 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) ) { + // The post date doesn't usually matter for pages, so don't backdate this upload. + if ( 'page' !== $post->post_type && substr( $post->post_date, 0, 4 ) > 0 ) + $time = $post->post_date; + } + + $file = wp_handle_upload($_FILES[$file_id], $overrides, $time); + + if ( isset($file['error']) ) + return new WP_Error( 'upload_error', $file['error'] ); + + $name = $_FILES[$file_id]['name']; + $ext = pathinfo( $name, PATHINFO_EXTENSION ); + $name = wp_basename( $name, ".$ext" ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = sanitize_text_field( $name ); + $content = ''; + $excerpt = ''; + + if ( preg_match( '#^audio#', $type ) ) { + $meta = wp_read_audio_metadata( $file ); + + if ( ! empty( $meta['title'] ) ) { + $title = $meta['title']; + } + + 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'] ); + } elseif ( ! empty( $meta['album'] ) ) { + /* translators: 1: audio track title, 2: album title */ + $content .= sprintf( __( '"%1$s" from %2$s.' ), $title, $meta['album'] ); + } elseif ( ! empty( $meta['artist'] ) ) { + /* translators: 1: audio track title, 2: artist name */ + $content .= sprintf( __( '"%1$s" by %2$s.' ), $title, $meta['artist'] ); + } else { + /* translators: 1: audio track title */ + $content .= sprintf( __( '"%s".' ), $title ); + } + + } elseif ( ! 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'] . '.'; + } + + } elseif ( ! empty( $meta['artist'] ) ) { + + $content .= $meta['artist'] . '.'; + + } + + if ( ! empty( $meta['year'] ) ) { + /* translators: Audio file track information. 1: Year of audio track release */ + $content .= ' ' . sprintf( __( 'Released: %d.' ), $meta['year'] ); + } + + if ( ! empty( $meta['track_number'] ) ) { + $track_number = explode( '/', $meta['track_number'] ); + if ( isset( $track_number[1] ) ) { + /* translators: Audio file track information. 1: Audio track number, 2: Total audio tracks */ + $content .= ' ' . sprintf( __( 'Track %1$s of %2$s.' ), number_format_i18n( $track_number[0] ), number_format_i18n( $track_number[1] ) ); + } else { + /* translators: Audio file track information. 1: Audio track number */ + $content .= ' ' . sprintf( __( 'Track %1$s.' ), number_format_i18n( $track_number[0] ) ); + } + } + + if ( ! empty( $meta['genre'] ) ) { + /* translators: Audio file genre information. 1: Audio genre name */ + $content .= ' ' . sprintf( __( 'Genre: %s.' ), $meta['genre'] ); + } + + // Use image exif/iptc data for title and caption defaults if possible. + } elseif ( 0 === strpos( $type, 'image/' ) && $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'] ) ) { + $excerpt = $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_excerpt' => $excerpt, + ), $post_data ); + + // This should never be set as it would then overwrite an existing attachment. + unset( $attachment['ID'] ); + + // Save the data + $id = wp_insert_attachment( $attachment, $file, $post_id, true ); + if ( !is_wp_error($id) ) { + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + } + + return $id; + +} + +/** + * Handles a side-loaded file in the same way as an uploaded file is handled by media_handle_upload(). + * + * @since 2.6.0 + * + * @param array $file_array Array similar to a `$_FILES` upload array. + * @param int $post_id The post ID the media is associated with. + * @param string $desc Optional. Description of the side-loaded file. Default null. + * @param array $post_data Optional. Post data to override. Default empty array. + * @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. + 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 + * + * @global int $body_id + * + * @param string|callable $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 = ' '; + + $id_attribute = $instance === 1 ? ' id="insert-media-button"' : ''; + printf( '', + $id_attribute, + esc_attr( $editor_id ), + $img . __( 'Add Media' ) + ); + /** + * Filters the legacy (pre-3.5.0) media buttons. + * + * Use {@see 'media_buttons'} action instead. + * + * @since 2.5.0 + * @deprecated 3.5.0 Use {@see '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; + } +} + +/** + * + * @global int $post_ID + * @param string $type + * @param int $post_id + * @param string $tab + * @return string + */ +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); + + /** + * Filters 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); +} + +/** + * Handles form submissions for the legacy media uploader. + * + * @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) reset( $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']; + } + + /** + * Filters the attachment fields to be saved. + * + * @since 2.5.0 + * + * @see wp_get_attachment_metadata() + * + * @param array $post An array of post data. + * @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"; + } + + /** + * Filters 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; +} + +/** + * Handles the process of uploading media. + * + * @since 2.5.0 + * + * @return null|string + */ +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; + + /** + * Filters 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"; + + /** + * Filters 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 ( isset( $_POST['save'] ) ) { + $errors['upload_notice'] = __('Saved.'); + wp_enqueue_script( 'admin-gallery' ); + return wp_iframe( 'media_upload_gallery_form', $errors ); + + } elseif ( ! empty( $_POST ) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + 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 ); +} + +/** + * Downloads an image from the specified URL and attaches it to a post. + * + * @since 2.6.0 + * @since 4.2.0 Introduced the `$return` parameter. + * @since 4.8.0 Introduced the 'id' option within the `$return` parameter. + * + * @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. + * @param string $return Optional. Accepts 'html' (image tag html) or 'src' (URL), or 'id' (attachment ID). Default 'html'. + * @return string|WP_Error Populated HTML img tag on success, WP_Error object otherwise. + */ +function media_sideload_image( $file, $post_id, $desc = null, $return = 'html' ) { + if ( ! empty( $file ) ) { + + // Set variables for storage, fix file filename for query strings. + preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches ); + if ( ! $matches ) { + return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) ); + } + + $file_array = array(); + $file_array['name'] = basename( $matches[0] ); + + // Download file to temp location. + $file_array['tmp_name'] = download_url( $file ); + + // If error storing temporarily, return the error. + if ( is_wp_error( $file_array['tmp_name'] ) ) { + return $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; + // If attachment id was requested, return it early. + } elseif ( $return === 'id' ) { + 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 ) ) { + if ( $return === 'src' ) { + return $src; + } + + $alt = isset( $desc ) ? esc_attr( $desc ) : ''; + $html = "$alt"; + return $html; + } else { + return new WP_Error( 'image_sideload_failed' ); + } +} + +/** + * Retrieves the legacy media uploader form in an iframe. + * + * @since 2.5.0 + * + * @return string|null + */ +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 ); +} + +/** + * Retrieves the legacy media library form in an iframe. + * + * @since 2.5.0 + * + * @return string|null + */ +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 WP_Post $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 WP_Post $post + * @param bool|string $check + * @return array + */ +function image_size_input_fields( $post, $check = '' ) { + /** + * Filters 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'); + } + $out = array(); + + 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 WP_Post $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 " +
      + + + +"; +} + +/** + * Output a textarea element for inputting an attachment caption. + * + * @since 3.4.0 + * + * @param WP_Post $edit_post Attachment WP_Post object. + * @return string HTML markup for the textarea element. + */ +function wp_caption_input_textarea($edit_post) { + // Post data is already escaped. + $name = "attachments[{$edit_post->ID}][post_excerpt]"; + + return ''; +} + +/** + * Retrieves the image attachment fields to edit form fields. + * + * @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; +} + +/** + * Retrieves the single non-image attachment fields to edit form fields. + * + * @since 2.5.0 + * + * @param array $form_fields An array of attachment form fields. + * @param WP_Post $post The WP_Post attachment object. + * @return array Filtered attachment form fields. + */ +function media_single_attachment_fields_to_edit( $form_fields, $post ) { + unset($form_fields['url'], $form_fields['align'], $form_fields['image-size']); + return $form_fields; +} + +/** + * Retrieves the post non-image attachment fields to edito form fields. + * + * @since 2.8.0 + * + * @param array $form_fields An array of attachment form fields. + * @param WP_Post $post The WP_Post attachment object. + * @return array Filtered attachment form fields. + */ +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 {@see '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 array $post The WP_Post attachment object converted to an array. + * @param array $attachment An array of attachment metadata. + * @return array Filtered attachment post object. + */ +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; +} + +/** + * Retrieves the media element HTML to send to the editor. + * + * @since 2.5.0 + * + * @param string $html + * @param integer $attachment_id + * @param array $attachment + * @return string + */ +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 = ( strpos( $url, 'attachment_id') || $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; +} + +/** + * Retrieves the attachment fields to edit form fields. + * + * @since 2.5.0 + * + * @param WP_Post $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'] ); + } + + /** + * Filters 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 + * + * @global WP_Query $wp_the_query + * + * @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 + * + * @global string $redir_tab + * + * @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 ); + + /** + * Filters 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. + */ + $r = apply_filters( 'get_media_item_args', $args ); + + $toggle_on = __( 'Show' ); + $toggle_off = __( 'Hide' ); + + $file = get_attached_file( $post->ID ); + $filename = esc_html( wp_basename( $file ) ); + $title = esc_attr( $post->post_title ); + + $post_mime_types = get_post_mime_types(); + $keys = array_keys( wp_match_mime_types( array_keys( $post_mime_types ), $post->post_mime_type ) ); + $type = reset( $keys ); + $type_html = ""; + + $form_fields = get_attachment_fields_to_edit( $post, $r['errors'] ); + + if ( $r['toggle'] ) { + $class = empty( $r['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 = $r['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']} "; + + /** + * Filters 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 + \n + \n"; + + $defaults = array( + 'input' => 'text', + 'required' => false, + 'value' => '', + 'extra_rows' => array(), + ); + + if ( $r['send'] ) { + $r['send'] = get_submit_button( __( 'Insert into Post' ), '', "send[$attachment_id]", false ); + } + + $delete = empty( $r['delete'] ) ? '' : $r['delete']; + 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 ) { + + $calling_post = get_post( $calling_post_id ); + $calling_post_type_object = get_post_type_object( $calling_post->post_type ); + + $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$calling_post_id" ); + $thumbnail = "" . esc_html( $calling_post_type_object->labels->use_featured_image ) . ""; + } + + if ( ( $r['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'] ? '*' : ''; + $required_attr = $field['required'] ? ' 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( __( 'F j, Y' ), $post->post_date ). '

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

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

      \n"; + + $item .= "

      " . sprintf( __( 'Required fields are marked %s' ), '*' ) . "

      " . $r['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; +} + +/** + * @since 3.5.0 + * + * @param int $attachment_id + * @param array $args + * @return array + */ +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'] ? '*' : ''; + $required_attr = $field['required'] ? ' 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 = '

      ' . + sprintf( __( 'Required fields are marked %s' ), '*' ) . '

      + ' . $item . '
      '; + } + + foreach ( $hidden_fields as $hidden_field => $value ) { + $item .= '' . "\n"; + } + + if ( $item ) + $item = '' . $item; + + return array( + 'item' => $item, + 'meta' => $media_meta, + ); +} + +/** + * Outputs the legacy media upload header. + * + * @since 2.5.0 + */ +function media_upload_header() { + $post_id = isset( $_REQUEST['post_id'] ) ? intval( $_REQUEST['post_id'] ) : 0; + + echo ''; + if ( empty( $_GET['chromeless'] ) ) { + echo '
      '; + the_media_upload_tabs(); + echo '
      '; + } +} + +/** + * Outputs the legacy media upload form. + * + * @since 2.5.0 + * + * @global string $type + * @global string $tab + * @global bool $is_IE + * @global bool $is_opera + * + * @param array $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://apps.wordpress.org/' ) . '

      '; + 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 : ''; + + $max_upload_size = wp_max_upload_size(); + if ( ! $max_upload_size ) { + $max_upload_size = 0; + } +?> + +
      +
      get_error_message(); + +?>
      + $post_id, + "_wpnonce" => wp_create_nonce('media-form'), + "type" => $_type, + "tab" => $_tab, + "short" => "1", +); + +/** + * Filters 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 ); + +/* + * Since 4.9 the `runtimes` setting is hardcoded in our version of Plupload to `html5,html4`, + * and the `flash_swf_url` and `silverlight_xap_url` are not used. + */ +$plupload_init = array( + 'browse_button' => 'plupload-browse-button', + 'container' => 'plupload-upload-ui', + 'drop_element' => 'drag-drop-area', + 'file_data_name' => 'async-upload', + 'url' => $upload_action_url, + 'filters' => array( + 'max_file_size' => $max_upload_size . 'b', + ), + 'multipart_params' => $post_params, +); + +// Currently only iOS Safari supports multiple files uploading but iOS 7.x has a bug that prevents uploading of videos +// when enabled. See #29602. +if ( wp_is_mobile() && strpos( $_SERVER['HTTP_USER_AGENT'], 'OS 7_' ) !== false && + strpos( $_SERVER['HTTP_USER_AGENT'], 'like Mac OS X' ) !== false ) { + + $plupload_init['multi_selection'] = false; +} + +/** + * Filters 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; + } +} +?> + +

      + +

      +
      + + +
      + + + +

      + + + +
      +
      + +
      +
      +
      + + + +
      + + + + + + + | + | + +
      + + + +
      + + + + + + + + +
        + $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 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[] = '
      • ' . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), '' . number_format_i18n( $num_posts[$mime_type] ) . '') . ''; +} +/** + * Filters 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 ' +

         

      +

      ' . sprintf( __( 'Required fields are marked %s' ), '*' ) . '

      + + + + + + + + + + + + + + + + + + ' . $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' ), '', 'insertonlybutton', false ) . ' +
      +'; + +} + +/** + * Displays the multi-file uploader message. + * + * @since 2.6.0 + * + * @global int $post_ID + */ +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 + * + * @param WP_Post $post A post object. + */ +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 ); + + $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 wp-clearfix" id="media-head-"> +

      +

      +
      + class="image-editor" id="image-editor-"> + + + $att_url ) ); + + elseif ( $attachment_id && wp_attachment_is( 'video', $post ) ): + + 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; + } + + $thumb_id = get_post_thumbnail_id( $attachment_id ); + if ( ! empty( $thumb_id ) ) { + $attr['poster'] = wp_get_attachment_url( $thumb_id ); + } + + echo wp_video_shortcode( $attr ); + + elseif ( isset( $thumb_url[0] ) ): + + ?> +
      +

      + +

      +
      + + +
      +

      +
      + +

      + + + 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 meta box. + * + * @since 3.5.0 + */ +function attachment_submitbox_metadata() { + $post = get_post(); + + $file = get_attached_file( $post->ID ); + $filename = esc_html( wp_basename( $file ) ); + + $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 ) ); + } + ?> +
      + + +
      + +
      + post_mime_type ) ) { + $fields = array( + 'length_formatted' => __( 'Length:' ), + 'bitrate' => __( 'Bitrate:' ), + ); + + /** + * Filters 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 + * @since 4.9.0 Added the `$post` parameter. + * + * @param array $fields An array of the attachment metadata keys and labels. + * @param WP_Post $post WP_Post object for the current attachment. + */ + $fields = apply_filters( 'media_submitbox_misc_sections', $fields, $post ); + + foreach ( $fields as $key => $label ) { + if ( empty( $meta[ $key ] ) ) { + continue; + } + ?> +
      + +
      + __( 'Audio Format:' ), + 'codec' => __( 'Audio Codec:' ) + ); + + /** + * Filters the audio attachment 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 + * @since 4.9.0 Added the `$post` parameter. + * + * @param array $fields An array of the attachment metadata keys and labels. + * @param WP_Post $post WP_Post object for the current attachment. + */ + $audio_fields = apply_filters( 'audio_submitbox_misc_sections', $fields, $post ); + + foreach ( $audio_fields as $key => $label ) { + if ( empty( $meta['audio'][ $key ] ) ) { + continue; + } + ?> +
      + +
      + +
      + +
      + $list ) { + if ( 'length' !== $key && ! empty( $list ) ) { + $metadata[$key] = wp_kses_post( 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|bool Returns array of metadata, if found. + */ +function wp_read_video_metadata( $file ) { + if ( ! file_exists( $file ) ) { + return false; + } + + $metadata = array(); + + if ( ! defined( 'GETID3_TEMP_DIR' ) ) { + define( 'GETID3_TEMP_DIR', get_temp_dir() ); + } + + if ( ! class_exists( 'getID3', false ) ) { + 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) round( $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']; + } + + if ( empty( $metadata['created_timestamp'] ) ) { + $created_timestamp = wp_get_media_creation_timestamp( $data ); + + if ( $created_timestamp !== false ) { + $metadata['created_timestamp'] = $created_timestamp; + } + } + + wp_add_id3_tag_data( $metadata, $data ); + + $file_format = isset( $metadata['fileformat'] ) ? $metadata['fileformat'] : null; + + /** + * Filters the array of metadata retrieved from a video. + * + * In core, usually this selection is what is stored. + * More complete data can be parsed from the `$data` parameter. + * + * @since 4.9.0 + * + * @param array $metadata Filtered Video metadata. + * @param string $file Path to video file. + * @param string $file_format File format of video, as analyzed by getID3. + * @param string $data Raw metadata from getID3. + */ + return apply_filters( 'wp_read_video_metadata', $metadata, $file, $file_format, $data ); +} + +/** + * Retrieve metadata from a audio file's ID3 tags + * + * @since 3.6.0 + * + * @param string $file Path to file. + * @return array|bool Returns array of metadata, if found. + */ +function wp_read_audio_metadata( $file ) { + if ( ! file_exists( $file ) ) { + return false; + } + $metadata = array(); + + if ( ! defined( 'GETID3_TEMP_DIR' ) ) { + define( 'GETID3_TEMP_DIR', get_temp_dir() ); + } + + if ( ! class_exists( 'getID3', false ) ) { + 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) round( $data['playtime_seconds'] ); + if ( ! empty( $data['playtime_string'] ) ) + $metadata['length_formatted'] = $data['playtime_string']; + + wp_add_id3_tag_data( $metadata, $data ); + + return $metadata; +} + +/** + * Parse creation date from media metadata. + * + * The getID3 library doesn't have a standard method for getting creation dates, + * so the location of this data can vary based on the MIME type. + * + * @since 4.9.0 + * + * @link https://github.com/JamesHeinrich/getID3/blob/master/structure.txt + * + * @param array $metadata The metadata returned by getID3::analyze(). + * @return int|bool A UNIX timestamp for the media's creation date if available + * or a boolean FALSE if a timestamp could not be determined. + */ +function wp_get_media_creation_timestamp( $metadata ) { + $creation_date = false; + + if ( empty( $metadata['fileformat'] ) ) { + return $creation_date; + } + + switch ( $metadata['fileformat'] ) { + case 'asf': + if ( isset( $metadata['asf']['file_properties_object']['creation_date_unix'] ) ) { + $creation_date = (int) $metadata['asf']['file_properties_object']['creation_date_unix']; + } + break; + + case 'matroska': + case 'webm': + if ( isset( $metadata['matroska']['comments']['creation_time']['0'] ) ) { + $creation_date = strtotime( $metadata['matroska']['comments']['creation_time']['0'] ); + } + elseif ( isset( $metadata['matroska']['info']['0']['DateUTC_unix'] ) ) { + $creation_date = (int) $metadata['matroska']['info']['0']['DateUTC_unix']; + } + break; + + case 'quicktime': + case 'mp4': + if ( isset( $metadata['quicktime']['moov']['subatoms']['0']['creation_time_unix'] ) ) { + $creation_date = (int) $metadata['quicktime']['moov']['subatoms']['0']['creation_time_unix']; + } + break; + } + + return $creation_date; +} + +/** + * Encapsulate logic for Attach/Detach actions + * + * @since 4.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $parent_id Attachment parent ID. + * @param string $action Optional. Attach/detach action. Accepts 'attach' or 'detach'. + * Default 'attach'. + */ +function wp_media_attach_action( $parent_id, $action = 'attach' ) { + global $wpdb; + + if ( ! $parent_id ) { + return; + } + + if ( ! current_user_can( 'edit_post', $parent_id ) ) { + wp_die( __( 'Sorry, you are not allowed to edit this post.' ) ); + } + $ids = array(); + foreach ( (array) $_REQUEST['media'] as $att_id ) { + $att_id = (int) $att_id; + + if ( ! current_user_can( 'edit_post', $att_id ) ) { + continue; + } + + $ids[] = $att_id; + } + + if ( ! empty( $ids ) ) { + $ids_string = implode( ',', $ids ); + if ( 'attach' === $action ) { + $result = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $ids_string )", $parent_id ) ); + } else { + $result = $wpdb->query( "UPDATE $wpdb->posts SET post_parent = 0 WHERE post_type = 'attachment' AND ID IN ( $ids_string )" ); + } + + foreach ( $ids as $att_id ) { + clean_attachment_cache( $att_id ); + } + } + + if ( isset( $result ) ) { + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) { + $location = remove_query_arg( array( 'attached', 'detach' ), $referer ); + } + } + + $key = 'attach' === $action ? 'attached' : 'detach'; + $location = add_query_arg( array( $key => $result ), $location ); + wp_redirect( $location ); + exit; + } +} diff --git a/wp-admin/includes/menu.php b/wp-admin/includes/menu.php new file mode 100644 index 0000000..1c6f545 --- /dev/null +++ b/wp-admin/includes/menu.php @@ -0,0 +1,345 @@ + $sub) { + foreach ($sub as $index => $data) { + if ( ! current_user_can($data[1]) ) { + unset($submenu[$parent][$index]); + $_wp_submenu_nopriv[$parent][$data[2]] = true; + } + } + unset($index, $data); + + if ( empty($submenu[$parent]) ) + unset($submenu[$parent]); +} +unset($sub, $parent); + +/* + * 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 = reset( $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 = reset( $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); + +/** + * + * @param string $add + * @param string $class + * @return string + */ +function add_cssclass($add, $class) { + $class = empty($class) ? $add : $class .= ' ' . $add; + return $class; +} + +/** + * + * @param array $menu + * @return array + */ +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; + } + + /** + * Filters 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 + +/** + * Filters whether to enable custom ordering of the administration menu. + * + * See the {@see '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; + + /** + * Filters the order of administration menu items. + * + * A truthy value must first be passed to the {@see '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); + + /** + * + * @global array $menu_order + * @global array $default_menu_order + * + * @param array $a + * @param array $b + * @return int + */ + 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); +} + +// Prevent adjacent separators +$prev_menu_was_separator = false; +foreach ( $menu as $id => $data ) { + if ( false === stristr( $data[4], 'wp-menu-separator' ) ) { + + // This item is not a separator, so falsey the toggler and do nothing + $prev_menu_was_separator = false; + } else { + + // The previous item was a separator, so unset this one + if ( true === $prev_menu_was_separator ) { + unset( $menu[ $id ] ); + } + + // This item is a separator, so truthy the toggler and move on + $prev_menu_was_separator = true; + } +} +unset( $id, $data, $prev_menu_was_separator ); + +// 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( __( 'Sorry, you are not allowed to access this page.' ), 403 ); +} + +$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..a8cfd16 --- /dev/null +++ b/wp-admin/includes/meta-boxes.php @@ -0,0 +1,1284 @@ +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 ) { ?> + + + +
      + +
      +post_status ) { + $preview_button_text = __( 'Preview Changes' ); +} else { + $preview_button_text = __( 'Preview' ); +} + +$preview_button = sprintf( '%1$s %2$s', + $preview_button_text, + /* translators: accessibility text */ + __( '(opens in a new window)' ) +); +?> + + +
      + + +
      +
      + +
      + +
      + 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" role="button"> + +
      + + + + + +
      + + +
      + +
      + 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 + /* translators: Post date information. 1: Date on which the post is currently scheduled to be published */ + $stamp = __('Scheduled for: %1$s'); + } elseif ( 'publish' == $post->post_status || 'private' == $post->post_status ) { // already published + /* translators: Post date information. 1: Date on which the post was published */ + $stamp = __('Published on: %1$s'); + } elseif ( '0000-00-00 00:00:00' == $post->post_date_gmt ) { // draft, 1 or more saves, no date specified + $stamp = __('Publish immediately'); + } elseif ( time() < strtotime( $post->post_date_gmt . ' +0000' ) ) { // draft, 1 or more saves, future date specified + /* translators: Post date information. 1: Date on which the post is to be published */ + $stamp = __('Schedule for: %1$s'); + } else { // draft, 1 or more saves, date specified + /* translators: Post date information. 1: Date on which the post is to be published */ + $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'] ) ) : ?> +
      + ' . number_format_i18n( $args['args']['revisions_count'] ) . '' ); + ?> + +
      + +
      + + + +
      + + +
      +
      + + +post_status && get_post_meta( $post->ID, '_customize_changeset_uuid', true ) ) : ?> +
      +

      + unpublished customization changes. You can edit, but there’s no need to publish now. It will be published automatically with those changes.' ), + esc_url( + add_query_arg( + 'changeset_uuid', + rawurlencode( get_post_meta( $post->ID, '_customize_changeset_uuid', true ) ), + admin_url( 'customize.php' ) + ) + ) + ); + ?> +

      +
      + + + +
      +
      +
      + +
      + +
      +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' ) ) : ?> + + + + + + + + + + + + +
      +
      +
      +
      + + +
      + +
      + + +
      + +
      + + +
      +
      + post_date ) + ); + printf( + /* translators: Attachment information. %s: Date the attachment was uploaded */ + __( 'Uploaded on: %s' ), + '' . $date . '' + ); + ?> +
      + + +
      +
      +
      + +
      +
      + ID ) ) + if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + echo "" . _x( 'Trash', 'verb' ) . ""; + } 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']; + } + $r = wp_parse_args( $args, $defaults ); + $tax_name = esc_attr( $r['taxonomy'] ); + $taxonomy = get_taxonomy( $r['taxonomy'] ); + $user_can_assign_terms = current_user_can( $taxonomy->cap->assign_terms ); + $comma = _x( ',', 'tag delimiter' ); + $terms_to_edit = get_terms_to_edit( $post->ID, $tax_name ); + if ( ! is_string( $terms_to_edit ) ) { + $terms_to_edit = ''; + } +?> +
      +
      +
      + +

      +
      + +
      + +

      +

      +
      +

      labels->separate_items_with_commas; ?>

      + +

      labels->no_terms; ?>

      + +
      +
        +
        + +

        + + 'category' ); + if ( ! isset( $box['args'] ) || ! is_array( $box['args'] ) ) { + $args = array(); + } else { + $args = $box['args']; + } + $r = wp_parse_args( $args, $defaults ); + $tax_name = esc_attr( $r['taxonomy'] ); + $taxonomy = get_taxonomy( $r['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' => $tax_name, 'popular_cats' => $popular_ids ) ); ?> +
        +
        + cap->edit_terms ) ) : ?> +
        + + labels->add_new_item ); + ?> + +

        + + + + $tax_name, + 'hide_empty' => 0, + 'name' => 'new' . $tax_name . '_parent', + 'orderby' => 'name', + 'hierarchical' => 1, + 'show_option_none' => '— ' . $taxonomy->labels->parent_item . ' —', + ); + + /** + * Filters the arguments for the taxonomy parent dropdown on the Post Edit page. + * + * @since 4.4.0 + * + * @param array $parent_dropdown_args { + * Optional. Array of arguments to generate parent dropdown. + * + * @type string $taxonomy Name of the taxonomy to retrieve. + * @type bool $hide_if_empty True to skip generating markup if no + * categories are found. Default 0. + * @type string $name Value for the 'name' attribute + * of the select element. + * Default "new{$tax_name}_parent". + * @type string $orderby Which column to use for ordering + * terms. Default 'name'. + * @type bool|int $hierarchical Whether to traverse the taxonomy + * hierarchy. Default 1. + * @type string $show_option_none Text to display for the "none" option. + * Default "— {$parent} —", + * where `$parent` is 'parent_item' + * taxonomy label. + * } + */ + $parent_dropdown_args = apply_filters( 'post_edit_category_parent_dropdown_args', $parent_dropdown_args ); + + wp_dropdown_categories( $parent_dropdown_args ); + ?> + + + +

        +
        + +
        + + +

        Learn more about manual excerpts.' ), + __( 'https://codex.wordpress.org/Excerpt' ) + ); +?>

        +to_ping ) ) . '" aria-describedby="trackback-url-desc" />'; + 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.' ), + __( 'https://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments' ) + ); +?>

        + +
        +
        +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.' ), + __( 'https://codex.wordpress.org/Using_Custom_Fields' ) + ); +?>

        + + +

        +
        + + +

        + +

        + $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) ) { + ?> + + +

        + post_name, $post ); +?> + + + + 'authors', + 'name' => 'post_author_override', + 'selected' => empty($post->ID) ? $user_ID : $post->post_author, + 'include_selected' => true, + 'show' => 'display_name_with_login', + ) ); +} + +/** + * 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) { + if ( is_post_type_hierarchical( $post->post_type ) ) : + $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, + ); + + /** + * Filters 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 post. + */ + $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post ); + $pages = wp_dropdown_pages( $dropdown_args ); + if ( ! empty($pages) ) : +?> +

        + + 0 && get_option( 'page_for_posts' ) != $post->ID ) : + $template = ! empty( $post->page_template ) ? $post->page_template : false; + ?> +

        + + +post_type, 'page-attributes' ) ) : ?> +

        + + +post_type && get_current_screen()->get_help_tabs() ) : ?> +

        + + + +
        +
          +
        • +
        • +
        + +
        +
          + 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 A post object. + */ +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 ) : ?> +

        +
        + +

        + 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 + * + * @global WP_Rewrite $wp_rewrite + * + * @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; +} + +/** + * Update the "recently-edited" file for the plugin or theme editor. + * + * @since 1.5.0 + * + * @param string $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 ); +} + +/** + * Makes a tree structure for the Theme Editor's file list. + * + * @since 4.9.0 + * @access private + * + * @param array $allowed_files List of theme file paths. + * @return array Tree structure for listing theme files. + */ +function wp_make_theme_file_tree( $allowed_files ) { + $tree_list = array(); + foreach ( $allowed_files as $file_name => $absolute_filename ) { + $list = explode( '/', $file_name ); + $last_dir = &$tree_list; + foreach ( $list as $dir ) { + $last_dir =& $last_dir[ $dir ]; + } + $last_dir = $file_name; + } + return $tree_list; +} + +/** + * Outputs the formatted file list for the Theme Editor. + * + * @since 4.9.0 + * @access private + * + * @param array|string $tree List of file/folder paths, or filename. + * @param int $level The aria-level for the current iteration. + * @param int $size The aria-setsize for the current iteration. + * @param int $index The aria-posinset for the current iteration. + */ +function wp_print_theme_file_tree( $tree, $level = 2, $size = 1, $index = 1 ) { + global $relative_file, $stylesheet; + + if ( is_array( $tree ) ) { + $index = 0; + $size = count( $tree ); + foreach ( $tree as $label => $theme_file ) : + $index++; + if ( ! is_array( $theme_file ) ) { + wp_print_theme_file_tree( $theme_file, $level, $index, $size ); + continue; + } + ?> +
      • + +
        +
      • + rawurlencode( $tree ), + 'theme' => rawurlencode( $stylesheet ), + ), + self_admin_url( 'theme-editor.php' ) + ); + ?> +
      • + + (' . esc_html( $filename ) . ')'; + } + + if ( $relative_file === $filename ) { + echo '' . $file_description . ''; + } else { + echo $file_description; + } + ?> + +
      • + $plugin_file ) : + $index++; + if ( ! is_array( $plugin_file ) ) { + wp_print_plugin_file_tree( $plugin_file, $label, $level, $index, $size ); + continue; + } + ?> +
      • + +
        +
      • + rawurlencode( $tree ), + 'plugin' => rawurlencode( $plugin ), + ), + self_admin_url( 'plugin-editor.php' ) + ); + ?> +
      • + + ' . esc_html( $label ) . ''; + } else { + echo esc_html( $label ); + } + ?> + +
      • + get_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(); +} + +/** + * @since 2.8.0 + * + * @param string $content + * @return array + */ +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 ); + + /** + * Filters the list of functions and classes to be ignored from the documentation lookup. + * + * @since 2.8.0 + * + * @param array $ignore_functions Functions and 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: + + /** + * Filters 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); + + $url = remove_query_arg( array( 'pagenum', 'apage', 'paged' ), wp_get_referer() ); + if ( isset( $_POST['mode'] ) ) { + $url = add_query_arg( array( 'mode' => $_POST['mode'] ), $url ); + } + + wp_safe_redirect( $url ); + 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', false ) ) { + 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\')] | /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', false ) ) { + 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\')] | /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', false ) ) { + 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\')] | /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 + * + * @global array $_wp_admin_css_colors + * + * @param int $user_id User ID. + */ +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' => '#82878c', 'focus' => '#00a0d2', 'current' => '#fff' ); + } + + echo '\n"; +} + +/** + * @since 3.3.0 + */ +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; +} + +/** + * Check lock status on the New/Edit Post screen and refresh the lock + * + * @since 3.6.0 + * + * @param array $response The Heartbeat response. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + * @return array The Heartbeat response. + */ +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; +} + +/** + * Check nonce expiration on the New/Edit Post screen and refresh if needed + * + * @since 3.6.0 + * + * @param array $response The Heartbeat response. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + * @return array The Heartbeat response. + */ +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 ) ) { + return $response; + } + + $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; +} + +/** + * Disable suspension of Heartbeat on the Add/Edit Post screens. + * + * @since 3.8.0 + * + * @global string $pagenow + * + * @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; +} + +/** + * Autosave with heartbeat + * + * @since 3.9.0 + * + * @param array $response The Heartbeat response. + * @param array $data The $_POST data sent. + * @return array The Heartbeat response. + */ +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 https://secure.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; +} + +/** + * Remove single-use URL parameters and create canonical link based on new URL. + * + * Remove specific query string parameters from a URL, create the canonical link, + * put it in the admin header, and change the current URL to match. + * + * @since 4.2.0 + */ +function wp_admin_canonical_url() { + $removable_query_args = wp_removable_query_args(); + + if ( empty( $removable_query_args ) ) { + return; + } + + // Ensure we're using an absolute URL. + $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + $filtered_url = remove_query_arg( $removable_query_args, $current_url ); + ?> + + + + + $hash, + 'newemail' => $value, + ); + update_option( 'adminhash', $new_admin_email ); + + $switched_locale = switch_to_locale( get_user_locale() ); + + /* translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: those are placeholders. */ + $email_text = __( 'Howdy ###USERNAME###, + +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###' ); + + /** + * Filters the text of the email sent when a change of site admin email address is attempted. + * + * The following strings have a special meaning and will get replaced dynamically: + * ###USERNAME### The current user's username. + * ###ADMIN_URL### The link to click on to confirm the email change. + * ###EMAIL### The proposed new site admin email address. + * ###SITENAME### The name of the site. + * ###SITEURL### The URL to the site. + * + * @since MU (3.0.0) + * @since 4.9.0 This filter is no longer Multisite specific. + * + * @param string $email_text Text in the email. + * @param array $new_admin_email { + * Data relating to the new site admin email address. + * + * @type string $hash The secure hash used in the confirmation link URL. + * @type string $newemail The proposed new site admin email address. + * } + */ + $content = apply_filters( 'new_admin_email_content', $email_text, $new_admin_email ); + + $current_user = wp_get_current_user(); + $content = str_replace( '###USERNAME###', $current_user->user_login, $content ); + $content = str_replace( '###ADMIN_URL###', esc_url( self_admin_url( 'options.php?adminhash=' . $hash ) ), $content ); + $content = str_replace( '###EMAIL###', $value, $content ); + $content = str_replace( '###SITENAME###', wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), $content ); + $content = str_replace( '###SITEURL###', home_url(), $content ); + + wp_mail( $value, sprintf( __( '[%s] New Admin Email Address' ), wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ), $content ); + + if ( $switched_locale ) { + restore_previous_locale(); + } +} + +/** + * WP_Privacy_Policy_Content class. + * TODO: move this to a new file. + * + * @since 4.9.6 + */ +final class WP_Privacy_Policy_Content { + + private static $policy_content = array(); + + /** + * Constructor + * + * @since 4.9.6 + */ + private function __construct() {} + + /** + * Add content to the postbox shown when editing the privacy policy. + * + * Plugins and themes should suggest text for inclusion in the site's privacy policy. + * The suggested text should contain information about any functionality that affects user privacy, + * and will be shown in the Suggested Privacy Policy Content postbox. + * + * Intended for use from `wp_add_privacy_policy_content()`. + * + * $since 4.9.6 + * + * @param string $plugin_name The name of the plugin or theme that is suggesting content for the site's privacy policy. + * @param string $policy_text The suggested content for inclusion in the policy. + */ + public static function add( $plugin_name, $policy_text ) { + if ( empty( $plugin_name ) || empty( $policy_text ) ) { + return; + } + + $data = array( + 'plugin_name' => $plugin_name, + 'policy_text' => $policy_text, + ); + + if ( ! in_array( $data, self::$policy_content, true ) ) { + self::$policy_content[] = $data; + } + } + + /** + * Quick check if any privacy info has changed. + * + * @since 4.9.6 + */ + public static function text_change_check() { + + $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' ); + + // The site doesn't have a privacy policy. + if ( empty( $policy_page_id ) ) { + return false; + } + + if ( ! current_user_can( 'edit_post', $policy_page_id ) ) { + return false; + } + + $old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' ); + + // Updates are not relevant if the user has not reviewed any suggestions yet. + if ( empty( $old ) ) { + return false; + } + + $cached = get_option( '_wp_suggested_policy_text_has_changed' ); + + /* + * When this function is called before `admin_init`, `self::$policy_content` + * has not been populated yet, so use the cached result from the last + * execution instead. + */ + if ( ! did_action( 'admin_init' ) ) { + return 'changed' === $cached; + } + + $new = self::$policy_content; + + // Remove the extra values added to the meta. + foreach ( $old as $key => $data ) { + if ( ! empty( $data['removed'] ) ) { + unset( $old[ $key ] ); + continue; + } + + $old[ $key ] = array( + 'plugin_name' => $data['plugin_name'], + 'policy_text' => $data['policy_text'], + ); + } + + // Normalize the order of texts, to facilitate comparison. + sort( $old ); + sort( $new ); + + // The == operator (equal, not identical) was used intentionally. + // See http://php.net/manual/en/language.operators.array.php + if ( $new != $old ) { + // A plugin was activated or deactivated, or some policy text has changed. + // Show a notice on the relevant screens to inform the admin. + add_action( 'admin_notices', array( 'WP_Privacy_Policy_Content', 'policy_text_changed_notice' ) ); + $state = 'changed'; + } else { + $state = 'not-changed'; + } + + // Cache the result for use before `admin_init` (see above). + if ( $cached !== $state ) { + update_option( '_wp_suggested_policy_text_has_changed', $state ); + } + + return 'changed' === $state; + } + + /** + * Output a warning when some privacy info has changed. + * + * @since 4.9.6 + */ + public static function policy_text_changed_notice() { + global $post; + + $screen = get_current_screen()->id; + + if ( 'privacy' !== $screen ) { + return; + } + + ?> +
        +

        review the guide and update your privacy policy.' ), + esc_url( admin_url( 'tools.php?wp-privacy-policy-guide=1' ) ) + ); + ?>

        +
        + $old_data ) { + if ( ! empty( $old_data['removed'] ) ) { + // Remove the old policy text. + $update_cache = true; + continue; + } + + if ( ! empty( $old_data['updated'] ) ) { + // 'updated' is now 'added'. + $done[] = array( + 'plugin_name' => $old_data['plugin_name'], + 'policy_text' => $old_data['policy_text'], + 'added' => $old_data['updated'], + ); + $update_cache = true; + } else { + $done[] = $old_data; + } + } + + if ( $update_cache ) { + delete_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' ); + // Update the cache. + foreach ( $done as $data ) { + add_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content', $data ); + } + } + } + + /** + * Check for updated, added or removed privacy policy information from plugins. + * + * Caches the current info in post_meta of the policy page. + * + * @since 4.9.6 + * + * @return array The privacy policy text/informtion added by core and plugins. + */ + public static function get_suggested_policy_text() { + $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' ); + $checked = array(); + $time = time(); + $update_cache = false; + $new = self::$policy_content; + $old = array(); + + if ( $policy_page_id ) { + $old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' ); + } + + // Check for no-changes and updates. + foreach ( $new as $new_key => $new_data ) { + foreach ( $old as $old_key => $old_data ) { + $found = false; + + if ( $new_data['policy_text'] === $old_data['policy_text'] ) { + // Use the new plugin name in case it was changed, translated, etc. + if ( $old_data['plugin_name'] !== $new_data['plugin_name'] ) { + $old_data['plugin_name'] = $new_data['plugin_name']; + $update_cache = true; + } + + // A plugin was re-activated. + if ( ! empty( $old_data['removed'] ) ) { + unset( $old_data['removed'] ); + $old_data['added'] = $time; + $update_cache = true; + } + + $checked[] = $old_data; + $found = true; + } elseif ( $new_data['plugin_name'] === $old_data['plugin_name'] ) { + // The info for the policy was updated. + $checked[] = array( + 'plugin_name' => $new_data['plugin_name'], + 'policy_text' => $new_data['policy_text'], + 'updated' => $time, + ); + $found = $update_cache = true; + } + + if ( $found ) { + unset( $new[ $new_key ], $old[ $old_key ] ); + continue 2; + } + } + } + + if ( ! empty( $new ) ) { + // A plugin was activated. + foreach ( $new as $new_data ) { + if ( ! empty( $new_data['plugin_name'] ) && ! empty( $new_data['policy_text'] ) ) { + $new_data['added'] = $time; + $checked[] = $new_data; + } + } + $update_cache = true; + } + + if ( ! empty( $old ) ) { + // A plugin was deactivated. + foreach ( $old as $old_data ) { + if ( ! empty( $old_data['plugin_name'] ) && ! empty( $old_data['policy_text'] ) ) { + $data = array( + 'plugin_name' => $old_data['plugin_name'], + 'policy_text' => $old_data['policy_text'], + 'removed' => $time, + ); + + $checked[] = $data; + } + } + $update_cache = true; + } + + if ( $update_cache && $policy_page_id ) { + delete_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' ); + // Update the cache. + foreach ( $checked as $data ) { + add_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content', $data ); + } + } + + return $checked; + } + + /** + * Add a notice with a link to the guide when editing the privacy policy page. + * + * @since 4.9.6 + * + * @param $post WP_Post The currently edited post. + */ + public static function notice( $post ) { + if ( ! ( $post instanceof WP_Post ) ) { + return; + } + + if ( ! current_user_can( 'manage_privacy_options' ) ) { + return; + } + + $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' ); + + if ( ! $policy_page_id || $policy_page_id != $post->ID ) { + return; + } + + ?> +
        +

        + Check out our guide%3$s for recommendations on what content to include, along with policies suggested by your plugins and theme.' ), + admin_url( 'tools.php?wp-privacy-policy-guide=1' ), + 'target="_blank"', + sprintf( + ' %s', + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ) + ); + ?> +

        +
        + ' . __( 'Introduction' ) . '' ); + $date_format = __( 'F j, Y' ); + $copy = __( 'Copy' ); + $return_to_top = '' . __( '↑ Return to Top' ) . ''; + + foreach ( $content_array as $section ) { + $class = $meta = $removed = ''; + + if ( ! empty( $section['removed'] ) ) { + $class = ' text-removed'; + $date = date_i18n( $date_format, $section['removed'] ); + $meta = sprintf( __( 'Removed %s.' ), $date ); + + $removed = __( 'You deactivated this plugin on %s and may no longer need this policy.' ); + $removed = '

        ' . sprintf( $removed, $date ) . '

        '; + } elseif ( ! empty( $section['updated'] ) ) { + $class = ' text-updated'; + $date = date_i18n( $date_format, $section['updated'] ); + $meta = sprintf( __( 'Updated %s.' ), $date ); + } + + if ( $meta ) { + $meta = '
        ' . $meta . ''; + } + + $plugin_name = esc_html( $section['plugin_name'] ); + $toc_id = 'wp-privacy-policy-guide-' . sanitize_title( $plugin_name ); + $toc[] = sprintf( '
      • %2$s' . $meta . '
      • ', $toc_id, $plugin_name ); + + $content .= '
        '; + $content .= ' '; + /* translators: %s: plugin name */ + $content .= '

        ' . sprintf( __( 'Source: %s' ), $plugin_name ) . '

        '; + $content .= $removed; + + $content .= '
        ' . $section['policy_text'] . '
        '; + $content .= $return_to_top; + + if ( empty( $section['removed'] ) ) { + $content .= '
        '; + $content .= ''; + $content .= '
        '; + } + + $content .= "
        \n"; // End of .privacy-text-section. + } + + if ( count( $toc ) > 2 ) { + ?> +
        +

        +
          + +
        +
        + +
        +
        +   +

        +

        +

        +

        +

        +

        +
        + +
        + +
        +
        + ' . __( 'Suggested text:' ) . ' ' : ''; + $content = ''; + + // Start of the suggested privacy policy text. + $descr && $content .= + '
        '; + $content .= + '

        ' . __( 'Who we are' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should note your site URL, as well as the name of the company, organization, or individual behind it, and some accurate contact information.' ) . '

        ' . + '

        ' . __( 'The amount of information you may be required to show will vary depending on your local or national business regulations. You may, for example, be required to display a physical address, a registered address, or your company registration number.' ) . '

        '; + $content .= + /* translators: %s Site URL */ + '

        ' . $suggested_text . sprintf( __( 'Our website address is: %s.' ), get_bloginfo( 'url', 'display' ) ) . '

        ' . + + '

        ' . __( 'What personal data we collect and why we collect it' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should note what personal data you collect from users and site visitors. This may include personal data, such as name, email address, personal account preferences; transactional data, such as purchase information; and technical data, such as information about cookies.' ) . '

        ' . + '

        ' . __( 'You should also note any collection and retention of sensitive personal data, such as data concerning health.' ) . '

        ' . + '

        ' . __( 'In addition to listing what personal data you collect, you need to note why you collect it. These explanations must note either the legal basis for your data collection and retention or the active consent the user has given.' ) . '

        ' . + '

        ' . __( 'Personal data is not just created by a user’s interactions with your site. Personal data is also generated from technical processes such as contact forms, comments, cookies, analytics, and third party embeds.' ) . '

        ' . + '

        ' . __( 'By default WordPress does not collect any personal data about visitors, and only collects the data shown on the User Profile screen from registered users. However some of your plugins may collect personal data. You should add the relevant information below.' ) . '

        '; + + $content .= + '

        ' . __( 'Comments' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this subsection you should note what information is captured through comments. We have noted the data which WordPress collects by default.' ) . '

        '; + $content .= + '

        ' . $suggested_text . __( 'When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.' ) . '

        ' . + '

        ' . __( 'An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.' ) . '

        ' . + + '

        ' . __( 'Media' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this subsection you should note what information may be disclosed by users who can upload media files. All uploaded files are usually publicly accessible.' ) . '

        '; + $content .= + '

        ' . $suggested_text . __( 'If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.' ) . '

        ' . + + '

        ' . __( 'Contact forms' ) . '

        '; + $descr && $content .= + '

        ' . __( 'By default, WordPress does not include a contact form. If you use a contact form plugin, use this subsection to note what personal data is captured when someone submits a contact form, and how long you keep it. For example, you may note that you keep contact form submissions for a certain period for customer service purposes, but you do not use the information submitted through them for marketing purposes.' ) . '

        '; + + $content .= + '

        ' . __( 'Cookies' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this subsection you should list the cookies your web site uses, including those set by your plugins, social media, and analytics. We have provided the cookies which WordPress installs by default.' ) . '

        '; + $content .= + '

        ' . $suggested_text . __( 'If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.' ) . '

        ' . + '

        ' . __( 'If you have an account and you log in to this site, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.' ) . '

        ' . + '

        ' . __( 'When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.' ) . '

        ' . + '

        ' . __( 'If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.' ) . '

        ' . + + '

        ' . __( 'Embedded content from other websites' ) . '

        ' . + '

        ' . $suggested_text . __( 'Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.' ) . '

        ' . + '

        ' . __( 'These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracing your interaction with the embedded content if you have an account and are logged in to that website.' ) . '

        ' . + + '

        ' . __( 'Analytics' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this subsection you should note what analytics package you use, how users can opt out of analytics tracking, and a link to your analytics provider’s privacy policy, if any.' ) . '

        ' . + '

        ' . __( 'By default WordPress does not collect any analytics data. However, many web hosting accounts collect some anonymous analytics data. You may also have installed a WordPress plugin that provides analytics services. In that case, add information from that plugin here.' ) . '

        '; + + $content .= + '

        ' . __( 'Who we share your data with' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should name and list all third party providers with whom you share site data, including partners, cloud-based services, payment processors, and third party service providers, and note what data you share with them and why. Link to their own privacy policies if possible.' ) . '

        ' . + '

        ' . __( 'By default WordPress does not share any personal data with anyone.' ) . '

        '; + + $content .= + '

        ' . __( 'How long we retain your data' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should explain how long you retain personal data collected or processed by the web site. While it is your responsibility to come up with the schedule of how long you keep each dataset for and why you keep it, that information does need to be listed here. For example, you may want to say that you keep contact form entries for six months, analytics records for a year, and customer purchase records for ten years.' ) . '

        '; + $content .= + '

        ' . $suggested_text . __( 'If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.' ) . '

        ' . + '

        ' . __( 'For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.' ) . '

        ' . + + '

        ' . __( 'What rights you have over your data' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should explain what rights your users have over their data and how they can invoke those rights.' ) . '

        '; + $content .= + '

        ' . $suggested_text . __( 'If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.' ) . '

        ' . + + '

        ' . __( 'Where we send your data' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should list all transfers of your site data outside the European Union and describe the means by which that data is safeguarded to European data protection standards. This could include your web hosting, cloud storage, or other third party services.' ) . '

        ' . + '

        ' . __( 'European data protection law requires data about European residents which is transferred outside the European Union to be safeguarded to the same standards as if the data was in Europe. So in addition to listing where data goes, you should describe how you ensure that these standards are met either by yourself or by your third party providers, whether that is through an agreement such as Privacy Shield, model clauses in your contracts, or binding corporate rules.' ) . '

        '; + $content .= + '

        ' . $suggested_text . __( 'Visitor comments may be checked through an automated spam detection service.' ) . '

        ' . + + '

        ' . __( 'Your contact information' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should provide a contact method for privacy-specific concerns. If you are required to have a Data Protection Officer, list their name and full contact details here as well.' ) . '

        '; + + $content .= + '

        ' . __( 'Additional information' ) . '

        '; + $descr && $content .= + '

        ' . __( 'If you use your site for commercial purposes and you engage in more complex collection or processing of personal data, you should note the following information in your privacy policy in addition to the information we have already discussed.' ) . '

        '; + + $content .= + '

        ' . __( 'How we protect your data' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should explain what measures you have taken to protect your users’ data. This could include technical measures such as encryption; security measures such as two factor authentication; and measures such as staff training in data protection. If you have carried out a Privacy Impact Assessment, you can mention it here too.' ) . '

        '; + + $content .= + '

        ' . __( 'What data breach procedures we have in place' ) . '

        '; + $descr && $content .= + '

        ' . __( 'In this section you should explain what procedures you have in place to deal with data breaches, either potential or real, such as internal reporting systems, contact mechanisms, or bug bounties.' ) . '

        '; + + $content .= + '

        ' . __( 'What third parties we receive data from' ) . '

        '; + $descr && $content .= + '

        ' . __( 'If your web site receives data about users from third parties, including advertisers, this information must be included within the section of your privacy policy dealing with third party data.' ) . '

        '; + + $content .= + '

        ' . __( 'What automated decision making and/or profiling we do with user data' ) . '

        '; + $descr && $content .= + '

        ' . __( 'If your web site provides a service which includes automated decision making - for example, allowing customers to apply for credit, or aggregating their data into an advertising profile - you must note that this is taking place, and include information about how that information is used, what decisions are made with that aggregated data, and what rights users have over decisions made without human intervention.' ) . '

        '; + + $content .= + '

        ' . __( 'Industry regulatory disclosure requirements' ) . '

        '; + $descr && $content .= + '

        ' . __( 'If you are a member of a regulated industry, or if you are subject to additional privacy laws, you may be required to disclose that information here.' ) . '

        ' . + '
        '; + // End of the suggested privacy policy text. + + /** + * Filters the default content suggested for inclusion in a privacy policy. + * + * @since 4.9.6 + * + * @param $content string The default policy content. + */ + return apply_filters( 'wp_get_default_privacy_policy_content', $content ); + } + + /** + * Add the suggested privacy policy text to the policy postbox. + * + * @since 4.9.6 + */ + public static function add_suggested_content() { + $content = self::get_default_content( true ); + wp_add_privacy_policy_content( __( 'WordPress' ), $content ); + } +} diff --git a/wp-admin/includes/ms-admin-filters.php b/wp-admin/includes/ms-admin-filters.php new file mode 100644 index 0000000..02fbf68 --- /dev/null +++ b/wp-admin/includes/ms-admin-filters.php @@ -0,0 +1,44 @@ + ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) { + /* translators: 1: Maximum allowed file size in kilobytes */ + $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_doing_ajax() ) { + wp_die( $file['error'] . ' ' . __( 'Back' ) . '' ); + } + + return $file; +} + +/** + * Delete a site. + * + * @since 3.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $blog_id Site ID. + * @param bool $drop True if site's database tables should be dropped. Default is false. + */ +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_site( $blog_id ); + /** + * Fires before a site is deleted. + * + * @since MU (3.0.0) + * + * @param int $blog_id The site ID. + * @param bool $drop True if site'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_network = get_network(); + + // If a full blog object is not available, do not destroy anything. + if ( $drop && ! $blog ) { + $drop = false; + } + + // Don't destroy the initial, main, or root blog. + if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_network->path && $blog->domain == $current_network->domain ) ) ) { + $drop = false; + } + + $upload_path = trim( get_option( 'upload_path' ) ); + + // If ms_files_rewriting is enabled and upload_path is empty, wp_upload_dir is not reliable. + if ( $drop && get_site_option( 'ms_files_rewriting' ) && empty( $upload_path ) ) { + $drop = false; + } + + if ( $drop ) { + $uploads = wp_get_upload_dir(); + + $tables = $wpdb->tables( 'blog' ); + /** + * Filters the tables to drop when the site is deleted. + * + * @since MU (3.0.0) + * + * @param array $tables The site tables to be dropped. + * @param int $blog_id The ID of the site 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 ) ); + + /** + * Filters the upload base directory to delete when the site is deleted. + * + * @since MU (3.0.0) + * + * @param string $uploads['basedir'] Uploads path without subdirectory. @see wp_upload_dir() + * @param int $blog_id The site 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; + } elseif ( @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 ); + } + + /** + * Fires after the site is deleted from the network. + * + * @since 4.8.0 + * + * @param int $blog_id The site ID. + * @param bool $drop True if site's tables should be dropped. Default is false. + */ + do_action( 'deleted_blog', $blog_id, $drop ); + + if ( $switch ) + restore_current_blog(); +} + +/** + * Delete a user from the network and remove from all sites. + * + * @since 3.0.0 + * + * @todo Merge with wp_delete_user() ? + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $id The user ID. + * @return bool True if the user was deleted, otherwise false. + */ +function wpmu_delete_user( $id ) { + global $wpdb; + + if ( ! is_numeric( $id ) ) { + return false; + } + + $id = (int) $id; + $user = new WP_User( $id ); + + if ( !$user->exists() ) + return false; + + // Global super-administrators are protected, and cannot be deleted. + $_super_admins = get_super_admins(); + if ( in_array( $user->user_login, $_super_admins, true ) ) { + return false; + } + + /** + * Fires before a user is deleted from the network. + * + * @since MU (3.0.0) + * + * @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, null ); + + return true; +} + +/** + * Check whether a site has used its allotted upload space. + * + * @since MU (3.0.0) + * + * @param bool $echo Optional. If $echo is set and the quota is exceeded, a warning message is echoed. Default is true. + * @return bool True if user is over upload space quota, otherwise false. + */ +function upload_is_user_over_quota( $echo = true ) { + if ( get_site_option( 'upload_space_check_disabled' ) ) + return false; + + $space_allowed = get_space_allowed(); + if ( ! 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 site. Not used in core. + * + * @since MU (3.0.0) + */ +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 / KB_IN_BYTES ); + /* 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; +} + +/** + * Cleans the user cache for a specific user. + * + * @since 3.0.0 + * + * @param int $id The user ID. + * @return bool|int The ID of the refreshed user or false if the user does not exist. + */ +function refresh_user_details( $id ) { + $id = (int) $id; + + if ( !$user = get_userdata( $id ) ) + return false; + + clean_user_cache( $user ); + + return $id; +} + +/** + * Returns the language for a language code. + * + * @since 3.0.0 + * + * @param string $code Optional. The two-letter language code. Default empty. + * @return string The language corresponding to $code if it exists. If it does not exist, + * then the first two letters of $code is returned. + */ +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' ); + + /** + * Filters the language codes. + * + * @since MU (3.0.0) + * + * @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 ); +} + +/** + * Synchronize category and post tag slugs when global terms are enabled. + * + * @since 3.0.0 + * + * @param object $term The term. + * @param string $taxonomy The taxonomy for `$term`. Should be 'category' or 'post_tag', as these are + * the only taxonomies which are processed by this function; anything else + * will be returned untouched. + * @return object|array Returns `$term`, after filtering the 'slug' field with sanitize_title() + * if $taxonomy is 'category' or 'post_tag'. + */ +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; +} + +/** + * Displays an access denied message when a user tries to view a site's dashboard they + * do not have access to. + * + * @since 3.2.0 + * @access private + */ +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 ), 403 ); + + $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, 403 ); +} + +/** + * Checks if the current user has permissions to import new users. + * + * @since 3.0.0 + * + * @param string $permission A permission to be checked. Currently not used. + * @return bool True if the user has proper permissions, false if they do not. + */ +function check_import_new_users( $permission ) { + if ( ! current_user_can( 'manage_network_users' ) ) { + return false; + } + + return true; +} +// See "import_allow_fetch_attachments" and "import_attachment_size_limit" filters too. + +/** + * Generates and displays a drop-down of available languages. + * + * @since 3.0.0 + * + * @param array $lang_files Optional. An array of the language files. Default empty array. + * @param string $current Optional. The current language code. Default empty. + */ +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' ); + + /** + * Filters the languages available in the dropdown. + * + * @since MU (3.0.0) + * + * @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 ); +} + +/** + * Displays an admin notice to upgrade all sites after a core upgrade. + * + * @since 3.0.0 + * + * @global int $wp_db_version The version number of the database. + * @global string $pagenow + * + * @return false False if the current user is not a super admin. + */ +function site_admin_notice() { + global $wp_db_version, $pagenow; + + if ( ! current_user_can( 'upgrade_network' ) ) { + return false; + } + + if ( 'upgrade.php' == $pagenow ) { + return; + } + + 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' ) ) ) . "
        "; + } +} + +/** + * Avoids a collision between a site slug and a permalink slug. + * + * In a subdirectory installation this will make sure that a site and a post do not use the + * same subdirectory by checking for a site with the same name as a new post. + * + * @since 3.0.0 + * + * @param array $data An array of post data. + * @param array $postarr An array of posts. Not currently used. + * @return array The new array of post data after checking for collisions. + */ +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; +} + +/** + * Handles the display of choosing a user's primary site. + * + * This displays the user's primary site and allows the user to choose + * which site is primary. + * + * @since 3.0.0 + */ +function choose_primary_blog() { + ?> + + + + + + +
        + 1 ) { + $found = false; + ?> + + userblog_id ); + } + } elseif ( count( $all_blogs ) == 1 ) { + $blog = reset( $all_blogs ); + echo esc_url( get_home_url( $blog->userblog_id ) ); + 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"; + } + ?> +
        + + + +

        + + +

        + +

        + + +
        + + ID ) . '">' . $current_user->user_login . ''; ?> + + 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 . '' ) ); + } + ?> + + + + "; + } else { + ?> + + +
        user_login; ?> + ' . "\n"; ?> +

        ' . $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 = ''; + $user_dropdown .= "\n"; + ?> +
          +
        • +
        • +
        • +
        • +
        +

        + +
        + +

        + +

        + +
        + + + array( 'label' => __( 'Info' ), 'url' => 'site-info.php', 'cap' => 'manage_sites' ), + 'site-users' => array( 'label' => __( 'Users' ), 'url' => 'site-users.php', 'cap' => 'manage_sites' ), + 'site-themes' => array( 'label' => __( 'Themes' ), 'url' => 'site-themes.php', 'cap' => 'manage_sites' ), + 'site-settings' => array( 'label' => __( 'Settings' ), 'url' => 'site-settings.php', 'cap' => 'manage_sites' ) + ) ); + + // Parse arguments + $r = wp_parse_args( $args, array( + 'blog_id' => isset( $_GET['blog_id'] ) ? (int) $_GET['blog_id'] : 0, + 'links' => $links, + 'selected' => 'site-info', + ) ); + + // Setup the links array + $screen_links = array(); + + // Loop through tabs + foreach ( $r['links'] as $link_id => $link ) { + + // Skip link if user can't access + if ( ! current_user_can( $link['cap'], $r['blog_id'] ) ) { + continue; + } + + // Link classes + $classes = array( 'nav-tab' ); + + // Selected is set by the parent OR assumed by the $pagenow global + if ( $r['selected'] === $link_id || $link['url'] === $GLOBALS['pagenow'] ) { + $classes[] = 'nav-tab-active'; + } + + // Escape each class + $esc_classes = implode( ' ', $classes ); + + // Get the URL for this link + $url = add_query_arg( array( 'id' => $r['blog_id'] ), network_admin_url( $link['url'] ) ); + + // Add link to nav links + $screen_links[ $link_id ] = '' . esc_html( $link['label'] ) . ''; + } + + // All done! + echo ''; +} + +/** + * Returns the arguments for the help tab on the Edit Site screens. + * + * @since 4.9.0 + * + * @return array Help tab arguments. + */ +function get_site_screen_help_tab_args() { + return array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

        ' . __('The menu is for editing information specific to individual sites, particularly if the admin area of a site is unavailable.') . '

        ' . + '

        ' . __('Info — The site URL is rarely edited as this can cause the site to not work properly. The Registered date and Last Updated date are displayed. Network admins can mark a site as archived, spam, deleted and mature, to remove from public listings or disable.') . '

        ' . + '

        ' . __('Users — This displays the users associated with this site. You can also change their role, reset their password, or remove them from the site. Removing the user from the site does not remove the user from the network.') . '

        ' . + '

        ' . sprintf( __('Themes — This area shows themes that are not already enabled across the network. Enabling a theme in this menu makes it accessible to this site. It does not activate the theme, but allows it to show in the site’s Appearance menu. To enable a theme for the entire network, see the Network Themes screen.' ), network_admin_url( 'themes.php' ) ) . '

        ' . + '

        ' . __('Settings — This page shows a list of all settings associated with this site. Some are created by WordPress and others are created by plugins you activate. Note that some fields are grayed out and say Serialized Data. You cannot modify these values due to the way the setting is stored in the database.') . '

        ' + ); +} + +/** + * Returns the content for the help sidebar on the Edit Site screens. + * + * @since 4.9.0 + * + * @return string Help sidebar content. + */ +function get_site_screen_help_sidebar_content() { + return '

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

        ' . + '

        ' . __('Documentation on Site Management') . '

        ' . + '

        ' . __('Support Forums') . '

        '; +} diff --git a/wp-admin/includes/nav-menu.php b/wp-admin/includes/nav-menu.php new file mode 100644 index 0000000..d6acfca --- /dev/null +++ b/wp-admin/includes/nav-menu.php @@ -0,0 +1,1137 @@ + $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 wp_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] ) ) { + $post_type_obj = _wp_nav_menu_meta_box_object( get_post_type_object( $matches[2] ) ); + $args = array_merge( + $args, + array( + 'no_found_rows' => true, + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + 'posts_per_page' => 10, + 'post_type' => $matches[2], + 's' => $query, + ) + ); + if ( isset( $post_type_obj->_default_query ) ) { + $args = array_merge( $args, (array) $post_type_obj->_default_query ); + } + $search_results_query = new WP_Query( $args ); + if ( ! $search_results_query->have_posts() ) { + return; + } + while ( $search_results_query->have_posts() ) { + $post = $search_results_query->next_post(); + if ( 'markup' == $response_format ) { + $var_by_ref = $post->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 wp_json_encode( + array( + 'ID' => $post->ID, + 'post_title' => get_the_title( $post->ID ), + 'post_type' => $matches[2], + ) + ); + 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 wp_json_encode( + array( + 'ID' => $term->term_id, + 'post_title' => $term->name, + 'post_type' => $matches[2], + ) + ); + echo "\n"; + } + } + } + } +} + +/** + * Register nav menu meta boxes 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', __( 'Custom 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', 4 => 'title-attribute', ), + true); + } +} + +/** + * Limit the amount of meta boxes to pages, posts, links, and categories for first time users. + * + * @since 3.0.0 + * + * @global array $wp_meta_boxes + **/ +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( 'add-post-type-page', 'add-post-type-post', '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 meta boxes 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 ) { + /** + * Filters whether a menu items meta box will be added for the current + * object type. + * + * If a falsey value is returned instead of an object, the menu items + * meta box for the current meta box object will not be added. + * + * @since 3.0.0 + * + * @param object $meta_box_object The current object to add a menu items + * meta box for. + */ + $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-post-type-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', $priority, $post_type ); + } + } +} + +/** + * Creates meta boxes 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 ) { + /** This filter is documented in wp-admin/includes/nav-menu.php */ + $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 + * + * @global bool $one_theme_location_no_menus to determine if no menus exist + * + * @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 meta box for the custom links menu item. + * + * @since 3.0.0 + * + * @global int $_nav_menu_placeholder + * @global int|string $nav_menu_selected_id + */ +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 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( $box['args']->_default_query ) ) + $args = array_merge($args, (array) $box['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; + } + + $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' => '' . __( '»' ) . '', + 'before_page_number' => '' . __( 'Page' ) . ' ', + 'total' => $num_pages, + 'current' => $pagenum + )); + + $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; + + /** + * Filters the posts displayed in the 'Most Recent' tab of the current + * post type's menu items meta box. + * + * The dynamic portion of the hook name, `$post_type_name`, refers to the post type name. + * + * @since 4.3.0 + * @since 4.9.0 Added the `$recent_args` parameter. + * + * @param array $most_recent An array of post objects being listed. + * @param array $args An array of WP_Query arguments for the meta box. + * @param array $box Arguments passed to wp_nav_menu_item_post_type_meta_box(). + * @param array $recent_args An array of WP_Query arguments for 'Most Recent' tab. + */ + $most_recent = apply_filters( "nav_menu_items_{$post_type_name}_recent", $most_recent, $args, $box, $recent_args ); + + 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('/'), + ) ); + } + } + + $post_type = get_post_type_object( $post_type_name ); + + if ( $post_type->has_archive ) { + $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1; + array_unshift( $posts, (object) array( + 'ID' => 0, + 'object_id' => $_nav_menu_placeholder, + 'object' => $post_type_name, + 'post_content' => '', + 'post_excerpt' => '', + 'post_title' => $post_type->labels->archives, + 'post_type' => 'nav_menu_item', + 'type' => 'post_type_archive', + 'url' => get_post_type_archive_link( $post_type_name ), + ) ); + } + + /** + * Filters 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 + * @since 4.6.0 Converted the `$post_type` parameter to accept a WP_Post_Type object. + * + * @see WP_Query::query() + * + * @param array $posts The posts for the current post type. + * @param array $args An array of WP_Query arguments. + * @param WP_Post_Type $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 submit-add-to-menu right" value="" name="add-post-type-menu-item" id="" /> + + +

        + +
        + name; + $taxonomy = get_taxonomy( $taxonomy_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' => '' . __( '»' ) . '', + 'before_page_number' => '' . __( 'Page' ) . ' ', + '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 submit-add-to-menu right" value="" name="add-taxonomy-menu-item" id="" /> + + +

        + +
        + $_item_object_data ) { + if ( + // Checkbox is not checked. + empty( $_item_object_data['menu-item-object-id'] ) && + ( + // And item type either isn't set. + ! isset( $_item_object_data['menu-item-type'] ) || + // Or URL is the default. + in_array( $_item_object_data['menu-item-url'], array( 'http://', '' ) ) || + ! ( '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) + // Or it *is* a custom menu item that already exists. + ! empty( $_item_object_data['menu-item-db-id'] ) + ) + ) { + // Then this potential menu item is not getting added to this menu. + continue; + } + + // 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', + ); + + // Categories 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 int $menu_id Optional. The ID of the menu to format. Default 0. + * @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 . ' '; + + /** + * Filters the Walker class used when adding nav menu items. + * + * @since 3.0.0 + * + * @param string $class The walker class to use. Default 'Walker_Nav_Menu_Edit'. + * @param int $menu_id 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', + /* translators: %s: walker class name */ + 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 array Columns. + */ +function wp_nav_menu_manage_columns() { + return array( + '_title' => __( 'Show advanced menu properties' ), + 'cb' => '', + 'link-target' => __( 'Link Target' ), + 'title-attribute' => __( 'Title Attribute' ), + 'css-classes' => __( 'CSS Classes' ), + 'xfn' => __( 'Link Relationship (XFN)' ), + 'description' => __( 'Description' ), + ); +} + +/** + * Deletes orphaned draft menu items + * + * @access private + * @since 3.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +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 ); +} + +/** + * Saves nav menu items + * + * @since 3.6.0 + * + * @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' ) ); + $messages = array(); + $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() . '

        '; + } else { + 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[] = '

        ' . + /* translators: %s: nav menu title */ + sprintf( __( '%s has been updated.' ), + '' . $nav_menu_selected_title . '' + ) . '

        '; + + unset( $menu_items, $unsorted_menu_items ); + + return $messages; +} + +/** + * If a JSON blob of navigation menu data is in POST data, expand it and inject + * it into `$_POST` to avoid PHP `max_input_vars` limitations. See #14134. + * + * @ignore + * @since 4.5.3 + * @access private + */ +function _wp_expand_nav_menu_post_data() { + if ( ! isset( $_POST['nav-menu-data'] ) ) { + return; + } + + $data = json_decode( stripslashes( $_POST['nav-menu-data'] ) ); + + if ( ! is_null( $data ) && $data ) { + foreach ( $data as $post_input_data ) { + // For input names that are arrays (e.g. `menu-item-db-id[3][4][5]`), + // derive the array path keys via regex and set the value in $_POST. + preg_match( '#([^\[]*)(\[(.+)\])?#', $post_input_data->name, $matches ); + + $array_bits = array( $matches[1] ); + + if ( isset( $matches[3] ) ) { + $array_bits = array_merge( $array_bits, explode( '][', $matches[3] ) ); + } + + $new_post_data = array(); + + // Build the new array value from leaf to trunk. + for ( $i = count( $array_bits ) - 1; $i >= 0; $i -- ) { + if ( $i == count( $array_bits ) - 1 ) { + $new_post_data[ $array_bits[ $i ] ] = wp_slash( $post_input_data->value ); + } else { + $new_post_data = array( $array_bits[ $i ] => $new_post_data ); + } + } + + $_POST = array_replace_recursive( $_POST, $new_post_data ); + } + } +} diff --git a/wp-admin/includes/network.php b/wp-admin/includes/network.php new file mode 100644 index 0000000..f9c5a79 --- /dev/null +++ b/wp-admin/includes/network.php @@ -0,0 +1,606 @@ +prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $wpdb->site ) ); + if ( $wpdb->get_var( $sql ) ) { + return $wpdb->get_var( "SELECT domain FROM $wpdb->site ORDER BY id ASC LIMIT 1" ); + } + return false; +} + +/** + * Allow subdomain installation + * + * @since 3.0.0 + * @return bool Whether subdomain installation is allowed + */ +function allow_subdomain_install() { + $domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'home' ) ); + if ( parse_url( get_option( 'home' ), PHP_URL_PATH ) || 'localhost' == $domain || preg_match( '|^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$|', $domain ) ) + return false; + + return true; +} + +/** + * Allow subdirectory installation. + * + * @since 3.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @return bool Whether subdirectory installation is allowed + */ +function allow_subdirectory_install() { + global $wpdb; + /** + * Filters whether to enable the subdirectory installation feature in Multisite. + * + * @since 3.0.0 + * + * @param bool $allow Whether to enable the subdirectory installation feature in Multisite. Default is false. + */ + if ( apply_filters( 'allow_subdirectory_install', false ) ) + return true; + + if ( defined( 'ALLOW_SUBDIRECTORY_INSTALL' ) && ALLOW_SUBDIRECTORY_INSTALL ) + return true; + + $post = $wpdb->get_row( "SELECT ID FROM $wpdb->posts WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'" ); + if ( empty( $post ) ) + return true; + + return false; +} + +/** + * Get base domain of network. + * + * @since 3.0.0 + * @return string Base domain. + */ +function get_clean_basedomain() { + if ( $existing_domain = network_domain_check() ) + return $existing_domain; + $domain = preg_replace( '|https?://|', '', get_option( 'siteurl' ) ); + if ( $slash = strpos( $domain, '/' ) ) + $domain = substr( $domain, 0, $slash ); + return $domain; +} + +/** + * Prints step 1 for Network installation process. + * + * @todo Realistically, step 1 should be a welcome screen explaining what a Network is and such. Navigating to Tools > Network + * should not be a sudden "Welcome to a new install process! Fill this out and click here." See also contextual help todo. + * + * @since 3.0.0 + * + * @global bool $is_apache + * + * @param WP_Error $errors + */ +function network_step1( $errors = false ) { + global $is_apache; + + if ( defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) { + echo '

        ' . __( 'ERROR:' ) . ' ' . sprintf( + /* translators: %s: DO_NOT_UPGRADE_GLOBAL_TABLES */ + __( 'The constant %s cannot be defined when creating a network.' ), + 'DO_NOT_UPGRADE_GLOBAL_TABLES' + ) . '

        '; + echo ''; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + die(); + } + + $active_plugins = get_option( 'active_plugins' ); + if ( ! empty( $active_plugins ) ) { + echo '

        ' . __( 'Warning:' ) . ' ' . sprintf( + /* translators: %s: Plugins screen URL */ + __( 'Please deactivate your plugins before enabling the Network feature.' ), + admin_url( 'plugins.php?plugin_status=active' ) + ) . '

        '; + echo '

        ' . __( 'Once the network is created, you may reactivate your plugins.' ) . '

        '; + echo ''; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + die(); + } + + $hostname = get_clean_basedomain(); + $has_ports = strstr( $hostname, ':' ); + if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443' ) ) ) ) { + echo '

        ' . __( 'ERROR:' ) . ' ' . __( 'You cannot install a network of sites with your server address.' ) . '

        '; + echo '

        ' . sprintf( + /* translators: %s: port number */ + __( 'You cannot use port numbers such as %s.' ), + '' . $has_ports . '' + ) . '

        '; + echo '' . __( 'Return to Dashboard' ) . ''; + echo ''; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + die(); + } + + echo '
        '; + + wp_nonce_field( 'install-network-1' ); + + $error_codes = array(); + if ( is_wp_error( $errors ) ) { + echo '

        ' . __( 'ERROR: The network could not be created.' ) . '

        '; + foreach ( $errors->get_error_messages() as $error ) + echo "

        $error

        "; + echo '
        '; + $error_codes = $errors->get_error_codes(); + } + + if ( ! empty( $_POST['sitename'] ) && ! in_array( 'empty_sitename', $error_codes ) ) { + $site_name = $_POST['sitename']; + } else { + /* translators: %s: Default network name */ + $site_name = sprintf( __( '%s Sites' ), get_option( 'blogname' ) ); + } + + if ( ! empty( $_POST['email'] ) && ! in_array( 'invalid_email', $error_codes ) ) { + $admin_email = $_POST['email']; + } else { + $admin_email = get_option( 'admin_email' ); + } + ?> +

        +

        +

        ' . __( 'Note:' ) . ' '; + /* translators: %s: mod_rewrite */ + printf( __( 'Please make sure the Apache %s module is installed as it will be used at the end of this installation.' ), + 'mod_rewrite' + ); + echo '

        '; + } elseif ( $is_apache ) { + echo '

        ' . __( 'Warning:' ) . ' '; + /* translators: %s: mod_rewrite */ + printf( __( 'It looks like the Apache %s module is not installed.' ), + 'mod_rewrite' + ); + echo '

        '; + } + + if ( $got_mod_rewrite || $is_apache ) { // Protect against mod_rewrite mimicry (but ! Apache) + echo '

        '; + /* translators: 1: mod_rewrite, 2: mod_rewrite documentation URL, 3: Google search for mod_rewrite */ + printf( __( 'If %1$s is disabled, ask your administrator to enable that module, or look at the Apache documentation or elsewhere for help setting it up.' ), + 'mod_rewrite', + 'https://httpd.apache.org/docs/mod/mod_rewrite.html', + 'https://www.google.com/search?q=apache+mod_rewrite' + ); + echo '

        '; + } + } + + if ( allow_subdomain_install() && allow_subdirectory_install() ) : ?> +

        +

        +

        +

        + + + + + + + + + + +
        site1.%1$s and site2.%1$s', 'subdomain examples' ), + $hostname + ); ?>
        %1$s/site1 and %1$s/site2', 'subdirectory examples' ), + $hostname + ); ?>
        + +

        ' . __( 'Warning:' ) . ' ' . __( 'Subdirectory networks may not be fully compatible with custom wp-content directories.' ) . '

        '; + + $is_www = ( 0 === strpos( $hostname, 'www.' ) ); + if ( $is_www ) : + ?> +

        +

        ' . substr( $hostname, 4 ) . '', + '' . $hostname . '', + 'www' + ); ?>

        + + + + + +
        + ' . $hostname . '' + ); ?> +
        + + +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        localhost', + 'localhost.localdomain' + ); + // Uh oh: + if ( !allow_subdirectory_install() ) + echo ' ' . __( 'Warning:' ) . ' ' . __( 'The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links.' ) . ''; + ?>
        ' . __( 'Warning:' ) . ' ' . __( 'The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links.' ) . ''; + ?>
        ' . __( 'The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links.' ) . ''; + ?>
        + ' . $hostname . '' + ); ?> +
        + +

        + +

        +
        + +

        + +

        +
        + +
        + ' . $errors->get_error_message() . ''; + + if ( $_POST ) { + if ( allow_subdomain_install() ) + $subdomain_install = allow_subdirectory_install() ? ! empty( $_POST['subdomain_install'] ) : true; + else + $subdomain_install = false; + } else { + if ( is_multisite() ) { + $subdomain_install = is_subdomain_install(); +?> +

        +get_var( "SELECT meta_value FROM $wpdb->sitemeta WHERE site_id = 1 AND meta_key = 'subdomain_install'" ); +?> +

        +

        + +

        +

        +

        ' . __( 'Caution:' ) . ' '; + printf( + /* translators: 1: wp-config.php 2: .htaccess */ + __( 'We recommend you back up your existing %1$s and %2$s files.' ), + 'wp-config.php', + '.htaccess' + ); + } elseif ( file_exists( $home_path . 'web.config' ) ) { + echo '' . __( 'Caution:' ) . ' '; + printf( + /* translators: 1: wp-config.php 2: web.config */ + __( 'We recommend you back up your existing %1$s and %2$s files.' ), + 'wp-config.php', + 'web.config' + ); + } else { + echo '' . __( 'Caution:' ) . ' '; + printf( + /* translators: 1: wp-config.php */ + __( 'We recommend you back up your existing %s file.' ), + 'wp-config.php' + ); + } + ?>

        + +
          +
        1. above the line reading %3$s:' ), + 'wp-config.php', + '' . $location_of_wp_config . '', + /* + * translators: This string should only be translated if wp-config-sample.php is localized. + * You can check the localized release package or + * https://i18n.svn.wordpress.org//branches//dist/wp-config-sample.php + */ + '/* ' . __( 'That’s all, stop editing! Happy blogging.' ) . ' */' + ); ?>

          + + '', 'SECURE_AUTH_KEY' => '', 'LOGGED_IN_KEY' => '', 'NONCE_KEY' => '', 'AUTH_SALT' => '', 'SECURE_AUTH_SALT' => '', 'LOGGED_IN_SALT' => '', 'NONCE_SALT' => '' ); + foreach ( $keys_salts as $c => $v ) { + if ( defined( $c ) ) + unset( $keys_salts[ $c ] ); + } + + if ( ! empty( $keys_salts ) ) { + $keys_salts_str = ''; + $from_api = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); + if ( is_wp_error( $from_api ) ) { + foreach ( $keys_salts as $c => $v ) { + $keys_salts_str .= "\ndefine( '$c', '" . wp_generate_password( 64, true, true ) . "' );"; + } + } else { + $from_api = explode( "\n", wp_remote_retrieve_body( $from_api ) ); + foreach ( $keys_salts as $c => $v ) { + $keys_salts_str .= "\ndefine( '$c', '" . substr( array_shift( $from_api ), 28, 64 ) . "' );"; + } + } + $num_keys_salts = count( $keys_salts ); +?> +

          + wp-config.php' + ); + } else { + printf( + /* translators: 1: wp-config.php */ + __( 'These unique authentication keys are also missing from your %s file.' ), + 'wp-config.php' + ); + } + ?> + +

          + + +
        2. + + + + + + + + + '; + if ( is_multisite() && get_site_option( 'ms_files_rewriting' ) ) { + $web_config_file .= ' + + + + '; + } + $web_config_file .= ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + +'; + + echo '
        3. '; + printf( + /* translators: 1: a filename like .htaccess. 2: a file path. */ + __( 'Add the following to your %1$s file in %2$s, replacing other WordPress rules:' ), + 'web.config', + '' . $home_path . '' + ); + echo '

          '; + if ( ! $subdomain_install && WP_CONTENT_DIR != ABSPATH . 'wp-content' ) + echo '

          ' . __( 'Warning:' ) . ' ' . __( 'Subdirectory networks may not be fully compatible with custom wp-content directories.' ) . '

          '; + ?> +
        4. +
        + +

        '; + printf( + /* translators: 1: a filename like .htaccess. 2: a file path. */ + __( 'Add the following to your %1$s file in %2$s, replacing other WordPress rules:' ), + '.htaccess', + '' . $home_path . '' + ); + echo '

        '; + if ( ! $subdomain_install && WP_CONTENT_DIR != ABSPATH . 'wp-content' ) + echo '

        ' . __( 'Warning:' ) . ' ' . __( 'Subdirectory networks may not be fully compatible with custom wp-content directories.' ) . '

        '; + ?> + + + + +

        + + + + + + +'; + echo '

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

        '; +} diff --git a/wp-admin/includes/plugin-install.php b/wp-admin/includes/plugin-install.php new file mode 100644 index 0000000..eea74f1 --- /dev/null +++ b/wp-admin/includes/plugin-install.php @@ -0,0 +1,726 @@ +per_page ) ) { + $args->per_page = 24; + } + + if ( ! isset( $args->locale ) ) { + $args->locale = get_user_locale(); + } + + /** + * Filters the WordPress.org Plugin Installation API arguments. + * + * Important: An object MUST be returned to this filter. + * + * @since 2.7.0 + * + * @param object $args Plugin API arguments. + * @param string $action The type of information being requested from the Plugin Installation API. + */ + $args = apply_filters( 'plugins_api_args', $args, $action ); + + /** + * Filters the response for the current WordPress.org Plugin Installation API request. + * + * Passing a non-false value will effectively short-circuit the WordPress.org API request. + * + * If `$action` is 'query_plugins' or 'plugin_information', an object MUST be passed. + * If `$action` is 'hot_tags' or 'hot_categories', an array should be passed. + * + * @since 2.7.0 + * + * @param false|object|array $result The result object or array. Default false. + * @param string $action The type of information being requested from the Plugin Installation API. + * @param object $args Plugin API arguments. + */ + $res = apply_filters( 'plugins_api', false, $action, $args ); + + if ( false === $res ) { + // include an unmodified $wp_version + include( ABSPATH . WPINC . '/version.php' ); + + $url = $http_url = 'http://api.wordpress.org/plugins/info/1.0/'; + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $http_args = array( + 'timeout' => 15, + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'body' => array( + 'action' => $action, + 'request' => serialize( $args ) + ) + ); + $request = wp_remote_post( $url, $http_args ); + + if ( $ssl && is_wp_error( $request ) ) { + trigger_error( + sprintf( + /* translators: %s: support forums URL */ + __( '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.' ), + __( 'https://wordpress.org/support/' ) + ) . ' ' . __( '(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, $http_args ); + } + + if ( is_wp_error($request) ) { + $res = new WP_Error( 'plugins_api_failed', + sprintf( + /* translators: %s: support forums URL */ + __( '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.' ), + __( 'https://wordpress.org/support/' ) + ), + $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', + sprintf( + /* translators: %s: support forums URL */ + __( '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.' ), + __( 'https://wordpress.org/support/' ) + ), + wp_remote_retrieve_body( $request ) + ); + } + } + } elseif ( !is_wp_error($res) ) { + $res->external = true; + } + + /** + * Filters the Plugin Installation 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 Installation 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; +} + +/** + * @since 2.7.0 + */ +function install_dashboard() { + ?> +

        WordPress Plugin Directory or upload a plugin in .zip format by clicking the button at the top of this page.' ), __( 'https://wordpress.org/plugins/' ) ); ?>

        + + + + '; +} + +/** + * Displays a search form for searching plugins. + * + * @since 2.7.0 + * @since 4.6.0 The `$type_selector` parameter was deprecated. + * + * @param bool $deprecated Not used. + */ +function install_search_form( $deprecated = true ) { + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : ''; + ?>
        + + + + + 'search-submit' ) ); ?> +
        +
        +

        +
        + + + + +
        +
        + +

        +
        + +

        + + + + +

        +
        + ' . __( 'These suggestions are based on the plugins you and other users have installed.' ) . '

        '; + break; + case 'install_plugins_beta' : + printf( + '

        ' . __( 'You are using a development version of WordPress. These feature plugins are also under development. Learn more.' ) . '

        ', + 'https://make.wordpress.org/core/handbook/about/release-cycle/features-as-plugins/' + ); + break; + } + + ?> +
        + display(); ?> +
        + 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 = reset( $key ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers + $update_file = $api->slug . '/' . $key; + 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'] ) ); + + $file = $update_file; + return compact( 'status', 'url', 'version', 'file' ); +} + +/** + * Display plugin information in dialog box form. + * + * @since 2.7.0 + * + * @global string $tab + */ +function install_plugin_information() { + global $tab; + + if ( empty( $_REQUEST['plugin'] ) ) { + return; + } + + $api = plugins_api( 'plugin_information', array( + 'slug' => wp_unslash( $_REQUEST['plugin'] ), + 'is_ssl' => is_ssl(), + 'fields' => array( + 'banners' => true, + 'reviews' => true, + 'downloaded' => false, + 'active_installs' => true + ) + ) ); + + 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( 'class' => array() ), 'span' => array( 'class' => array() ), + 'p' => array(), 'br' => 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() ), + 'blockquote' => array( 'cite' => true ), + ); + + $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' ), + 'reviews' => _x( 'Reviews', '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 = reset( $section_titles ); + } + + iframe_header( __( 'Plugin Installation' ) ); + + $_with_banner = ''; + + if ( ! empty( $api->banners ) && ( ! empty( $api->banners['low'] ) || ! empty( $api->banners['high'] ) ) ) { + $_with_banner = 'with-banner'; + $low = empty( $api->banners['low'] ) ? $api->banners['high'] : $api->banners['low']; + $high = empty( $api->banners['high'] ) ? $api->banners['low'] : $api->banners['high']; + ?> + + '; + echo "

        {$api->name}

        "; + echo "
        \n"; + + foreach ( (array) $api->sections as $section_name => $content ) { + if ( 'reviews' === $section_name && ( empty( $api->ratings ) || 0 === array_sum( (array) $api->ratings ) ) ) { + continue; + } + + 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; ?>
        • + requires_php ) ) { ?> +
        • + + requires_php ); + ?> +
        • + active_installs ) ) { ?> +
        • active_installs >= 1000000 ) { + _ex( '1+ Million', 'Active plugin installations' ); + } elseif ( 0 == $api->active_installs ) { + _ex( 'Less Than 10', 'Active plugin installations' ); + } else { + echo number_format_i18n( $api->active_installs ) . '+'; + } + ?>
        • + slug ) && empty( $api->external ) ) { ?> +
        • + homepage ) ) { ?> +
        • + donate_link ) && empty( $api->contributors ) ) { ?> +
        • + +
        + rating ) ) { ?> +

        + $api->rating, 'type' => 'percent', 'number' => $api->num_ratings ) ); ?> + + ratings ) && array_sum( (array) $api->ratings ) > 0 ) { ?> +

        +

        + ratings as $key => $ratecount ) { + // Avoid div-by-zero. + $_rating = $api->num_ratings ? ( $ratecount / $api->num_ratings ) : 0; + /* translators: 1: number of stars (used to determine singular/plural), 2: number of reviews */ + $aria_label = esc_attr( sprintf( _n( 'Reviews with %1$d star: %2$s. Opens in a new window.', 'Reviews with %1$d stars: %2$s. Opens in a new window.', $key ), + $key, + number_format_i18n( $ratecount ) + ) ); + ?> +
        + + + + + +
        + contributors ) ) { ?> +

        +
          + contributors as $contrib_username => $contrib_profile ) { + if ( empty( $contrib_username ) && empty( $contrib_profile ) ) { + continue; + } + if ( empty( $contrib_username ) ) { + $contrib_username = preg_replace( '/^.+\/(.+)\/?$/', '\1', $contrib_profile ); + } + $contrib_username = sanitize_user( $contrib_username ); + if ( empty( $contrib_profile ) ) { + echo "
        • {$contrib_username}
        • "; + } else { + echo "
        • {$contrib_username}
        • "; + } + } + ?> +
        + donate_link ) ) { ?> + + + +
        +
        + tested ) && version_compare( substr( $wp_version, 0, strlen( $api->tested ) ), $api->tested, '>' ) ) { + echo '

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

        '; + } elseif ( ! empty( $api->requires ) && version_compare( substr( $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 ) { + $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"; // #plugin-information-scrollable + echo "\n"; + + iframe_footer(); + exit; +} diff --git a/wp-admin/includes/plugin.php b/wp-admin/includes/plugin.php new file mode 100644 index 0000000..d794a8a --- /dev/null +++ b/wp-admin/includes/plugin.php @@ -0,0 +1,1925 @@ + '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'] ) { + /* translators: 1: Site Wide Only: true, 2: Network: true */ + _deprecated_argument( __FUNCTION__, '3.0.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 no text domain is defined fall back to the plugin slug. + if ( ! $plugin_data['TextDomain'] ) { + $plugin_slug = dirname( plugin_basename( $plugin_file ) ); + if ( '.' !== $plugin_slug && false === strpos( $plugin_slug, '/' ) ) { + $plugin_data['TextDomain'] = $plugin_slug; + } + } + + 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 ( ! is_textdomain_loaded( $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 ( 'hello.php' == basename( $plugin_file ) ) { + $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 Path to the main plugin file from plugins directory. + * @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_basename( $plugin_file ) ); + + if ( is_dir( $dir ) && WP_PLUGIN_DIR !== $dir ) { + + /** + * Filters the array of excluded directories and files while scanning the folder. + * + * @since 4.9.0 + * + * @param array $exclusions Array of excluded directories and files. + */ + $exclusions = (array) apply_filters( 'plugin_files_exclusions', array( 'CVS', 'node_modules', 'vendor', 'bower_components' ) ); + + $list_files = list_files( $dir, 100, $exclusions ); + $list_files = array_map( 'plugin_basename', $list_files ); + + $plugin_files = array_merge( $plugin_files, $list_files ); + $plugin_files = array_values( array_unique( $plugin_files ) ); + } + + 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 to keep your + * plugin files in their own 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 installation script.' ), true ), // auto on installation + '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 a plugin is active. + * + * Only plugins installed in the plugins/ folder can be active. + * + * Plugins in the mu-plugins/ folder can't be "activated," so this function will + * return false for those plugins. + * + * @since 2.5.0 + * + * @param string $plugin Path to the main plugin file 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 Path to the main plugin file 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. + * + * Only plugins installed in the plugins/ folder can be active. + * + * Plugins in the mu-plugins/ folder can't be "activated," so this function will + * return false for those plugins. + * + * @since 3.0.0 + * + * @param string $plugin Path to the main plugin file 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 backward compatibility. + * + * @since 3.0.0 + * + * @param string $plugin Path to the main plugin file from plugins directory. + * @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 Path to the main plugin file from plugins directory. + * @param string $redirect Optional. URL to redirect to. + * @param bool $network_wide Optional. Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default false. + * @param bool $silent Optional. Whether to prevent calling activation hooks. Default 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 ( ( $network_wide && ! isset( $current[ $plugin ] ) ) || ( ! $network_wide && ! 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 ); + $_wp_plugin_file = $plugin; + include_once( WP_PLUGIN_DIR . '/' . $plugin ); + $plugin = $_wp_plugin_file; // Avoid stomping of the $plugin variable in a 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 Path to the main plugin file from plugins directory. + * @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 activated. + * + * This hook is the "activation" hook used internally by register_activation_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 = get_site_option( 'active_sitewide_plugins', array() ); + $current[$plugin] = time(); + update_site_option( 'active_sitewide_plugins', $current ); + } else { + $current = get_option( 'active_plugins', array() ); + $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 Path to the main plugin file from plugins directory. + * @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 Path to the main plugin file from plugins directory. + * @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 Path to the main plugin file from plugins directory. + * @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 Single plugin or list of plugins to activate. + * @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 list of plugins. + * + * @since 2.6.0 + * + * @global WP_Filesystem_Base $wp_filesystem + * + * @param array $plugins List of plugins to delete. + * @param string $deprecated Deprecated. + * @return bool|null|WP_Error True on success, false is $plugins is empty, WP_Error on failure. + * Null if filesystem credentials are required to proceed. + */ +function delete_plugins( $plugins, $deprecated = '' ) { + global $wp_filesystem; + + if ( empty($plugins) ) + return false; + + $checked = array(); + foreach ( $plugins as $plugin ) + $checked[] = 'checked[]=' . $plugin; + + $url = wp_nonce_url('plugins.php?action=delete-selected&verify-delete=1&' . implode('&', $checked), 'bulk-plugins'); + + ob_start(); + $credentials = request_filesystem_credentials( $url ); + $data = ob_get_clean(); + + if ( false === $credentials ) { + 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 ) ) { + ob_start(); + request_filesystem_credentials( $url, '', true ); // Failed to connect, Error and request again. + $data = ob_get_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 ); + + $plugin_translations = wp_get_installed_translations( 'plugins' ); + + $errors = array(); + + foreach ( $plugins as $plugin_file ) { + // Run Uninstall hook. + if ( is_uninstallable_plugin( $plugin_file ) ) { + uninstall_plugin($plugin_file); + } + + /** + * Fires immediately before a plugin deletion attempt. + * + * @since 4.4.0 + * + * @param string $plugin_file Plugin file name. + */ + do_action( 'delete_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 ); + } + + /** + * Fires immediately after a plugin deletion attempt. + * + * @since 4.4.0 + * + * @param string $plugin_file Plugin file name. + * @param bool $deleted Whether the plugin deletion was successful. + */ + do_action( 'deleted_plugin', $plugin_file, $deleted ); + + if ( ! $deleted ) { + $errors[] = $plugin_file; + continue; + } + + // Remove language files, silently. + $plugin_slug = dirname( $plugin_file ); + if ( '.' !== $plugin_slug && ! empty( $plugin_translations[ $plugin_slug ] ) ) { + $translations = $plugin_translations[ $plugin_slug ]; + + foreach ( $translations as $translation => $data ) { + $wp_filesystem->delete( WP_LANG_DIR . '/plugins/' . $plugin_slug . '-' . $translation . '.po' ); + $wp_filesystem->delete( WP_LANG_DIR . '/plugins/' . $plugin_slug . '-' . $translation . '.mo' ); + } + } + } + + // 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 ) ) { + if ( 1 === count( $errors ) ) { + /* translators: %s: plugin filename */ + $message = __( 'Could not fully remove the plugin %s.' ); + } else { + /* translators: %s: comma-separated list of plugin filenames */ + $message = __( 'Could not fully remove the plugins %s.' ); + } + + return new WP_Error( 'could_not_remove_plugin', sprintf( $message, 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 array(); + + $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 main plugin file exists and is a valid plugin. See validate_file(). + * + * @since 2.5.0 + * + * @param string $plugin Path to the main plugin file from plugins directory. + * @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 Path to the main plugin file from plugins directory. + * @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 Path to the main plugin file from plugins directory. + * @return true True if a plugin's uninstall.php file has been found and included. + */ +function uninstall_plugin($plugin) { + $file = plugin_basename($plugin); + + $uninstallable_plugins = (array) get_option('uninstall_plugins'); + + /** + * Fires in uninstall_plugin() immediately before the plugin is uninstalled. + * + * @since 4.5.0 + * + * @param string $plugin Path to the main plugin file from plugins directory. + * @param array $uninstallable_plugins Uninstallable plugins. + */ + do_action( 'pre_uninstall_plugin', $plugin, $uninstallable_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 . '/' . $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 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. + * + * @global array $menu + * @global array $admin_page_hooks + * @global array $_registered_pages + * @global array $_parent_pages + * + * @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 page and only + * include lowercase alphanumeric, dashes, and underscores characters to be compatible + * with sanitize_key(). + * @param callable $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; + } elseif ( isset( $menu[ "$position" ] ) ) { + $position = $position + substr( base_convert( md5( $menu_slug . $menu_title ), 16, 10 ) , -5 ) * 0.00001; + $menu[ "$position" ] = $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 submenu 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. + * + * @global array $submenu + * @global array $menu + * @global array $_wp_real_parent_file + * @global bool $_wp_submenu_nopriv + * @global array $_registered_pages + * @global array $_parent_pages + * + * @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 + * and only include lowercase alphanumeric, dashes, and underscores characters + * to be compatible with sanitize_key(). + * @param callable $function The function to be called to output the content for this page. + * @return false|string 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, $menu, $_wp_real_parent_file, $_wp_submenu_nopriv, + $_registered_pages, $_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][] = array_slice( $parent_menu, 0, 4 ); + } + } + + $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; + + /* + * Backward-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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu page to the Settings 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu page to the Appearance 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 submenu 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 callable $function The function to be called to output the content for this page. + * @return false|string 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 + * + * @global array $menu + * + * @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 + * + * @global array $submenu + * + * @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 + * + * @global array $_parent_pages + * + * @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 +// +/** + * + * @global string $parent_file + * @global array $menu + * @global array $submenu + * @global string $pagenow + * @global string $typenow + * @global string $plugin_page + * @global array $_wp_real_parent_file + * @global array $_wp_menu_nopriv + * @global array $_wp_submenu_nopriv + */ +function get_admin_page_parent( $parent = '' ) { + global $parent_file, $menu, $submenu, $pagenow, $typenow, + $plugin_page, $_wp_real_parent_file, $_wp_menu_nopriv, $_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; + } elseif ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) ) { + $parent_file = $parent; + return $parent; + } + } + } + + if ( empty($parent_file) ) + $parent_file = ''; + return ''; +} + +/** + * + * @global string $title + * @global array $menu + * @global array $submenu + * @global string $pagenow + * @global string $plugin_page + * @global string $typenow + */ +function get_admin_page_title() { + global $title, $menu, $submenu, $pagenow, $plugin_page, $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]; + } elseif ( 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; +} + +/** + * @since 2.3.0 + * + * @param string $plugin_page + * @param string $parent_page + * @return string|null + */ +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; +} + +/** + * + * @global array $admin_page_hooks + * @param string $plugin_page + * @param string $parent_page + */ +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'; + } elseif ( isset( $admin_page_hooks[$parent] )) { + $page_type = $admin_page_hooks[$parent]; + } + } elseif ( isset( $admin_page_hooks[$parent] ) ) { + $page_type = $admin_page_hooks[$parent]; + } + + $plugin_name = preg_replace( '!\.php!', '', $plugin_page ); + + return $page_type . '_page_' . $plugin_name; +} + +/** + * + * @global string $pagenow + * @global array $menu + * @global array $submenu + * @global array $_wp_menu_nopriv + * @global array $_wp_submenu_nopriv + * @global string $plugin_page + * @global array $_registered_pages + */ +function user_can_access_admin_page() { + global $pagenow, $menu, $submenu, $_wp_menu_nopriv, $_wp_submenu_nopriv, + $plugin_page, $_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; + } elseif ( $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 */ + +/** + * Refreshes the value of the options whitelist available via the 'whitelist_options' hook. + * + * See the {@see 'whitelist_options'} filter. + * + * @since 2.7.0 + * + * @global array $new_whitelist_options + * + * @param array $options + * @return array + */ +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; +} + +/** + * Adds an array of options to the options whitelist. + * + * @since 2.7.0 + * + * @global array $whitelist_options + * + * @param array $new_options + * @param string|array $options + * @return array + */ +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; +} + +/** + * Removes a list of options from the options whitelist. + * + * @since 2.7.0 + * + * @global array $whitelist_options + * + * @param array $del_options + * @param string|array $options + * @return array + */ +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' ); +} + +/** + * Load a given plugin attempt to generate errors. + * + * @since 3.0.0 + * @since 4.4.0 Function was moved into the `wp-admin/includes/plugin.php` file. + * + * @param string $plugin Plugin file to load. + */ +function plugin_sandbox_scrape( $plugin ) { + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); + include( WP_PLUGIN_DIR . '/' . $plugin ); +} + +/** + * Helper function for adding content to the postbox shown when editing the privacy policy. + * + * Plugins and themes should suggest text for inclusion in the site's privacy policy. + * The suggested text should contain information about any functionality that affects user privacy, + * and will be shown in the Suggested Privacy Policy Content postbox. + * + * A plugin or theme can use this function multiple times as long as it will help to better present + * the suggested policy content. For example modular plugins such as WooCommerse or Jetpack + * can add or remove suggested content depending on the modules/extensions that are enabled. + * + * Intended for use with the `'admin_init'` action. + * + * @since 4.9.6 + * + * @param string $plugin_name The name of the plugin or theme that is suggesting content for the site's privacy policy. + * @param string $policy_text The suggested content for inclusion in the policy. + * For more information see the Plugins Handbook https://developer.wordpress.org/plugins/. + */ +function wp_add_privacy_policy_content( $plugin_name, $policy_text ) { + if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) { + require_once( ABSPATH . 'wp-admin/includes/misc.php' ); + } + + WP_Privacy_Policy_Content::add( $plugin_name, $policy_text ); +} diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php new file mode 100644 index 0000000..7fe1b42 --- /dev/null +++ b/wp-admin/includes/post.php @@ -0,0 +1,1876 @@ +cap->create_posts ) ) { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'Sorry, you are not allowed to create pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'Sorry, 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', __( 'Sorry, you are not allowed to edit pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'Sorry, you are not allowed to edit posts as this user.' ) ); + } else { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'Sorry, you are not allowed to create pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'Sorry, 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', __( 'Invalid date.' ) ); + } + $post_data['post_date_gmt'] = get_gmt_from_date( $post_data['post_date'] ); + } + + if ( isset( $post_data['post_category'] ) ) { + $category_object = get_taxonomy( 'category' ); + if ( ! current_user_can( $category_object->cap->assign_terms ) ) { + unset( $post_data['post_category'] ); + } + } + + return $post_data; +} + +/** + * Update an existing post with values provided in $_POST. + * + * @since 1.5.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param array $post_data Optional. + * @return int Post ID. + */ +function edit_post( $post_data = null ) { + global $wpdb; + + 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( __('Sorry, you are not allowed to edit this page.' )); + else + wp_die( __('Sorry, 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( $meta->meta_key, 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $meta->meta_key ) ) + 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 ); + } + + // Convert taxonomy input to term IDs, to avoid ambiguity. + if ( isset( $post_data['tax_input'] ) ) { + foreach ( (array) $post_data['tax_input'] as $taxonomy => $terms ) { + // Hierarchical taxonomy data is already sent as term IDs, so no conversion is necessary. + if ( is_taxonomy_hierarchical( $taxonomy ) ) { + continue; + } + + /* + * Assume that a 'tax_input' string is a comma-separated list of term names. + * Some languages may use a character other than a comma as a delimiter, so we standardize on + * commas before parsing the list. + */ + if ( ! is_array( $terms ) ) { + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) { + $terms = str_replace( $comma, ',', $terms ); + } + $terms = explode( ',', trim( $terms, " \n\t\r\0\x0B," ) ); + } + + $clean_terms = array(); + foreach ( $terms as $term ) { + // Empty terms are invalid input. + if ( empty( $term ) ) { + continue; + } + + $_term = get_terms( $taxonomy, array( + 'name' => $term, + 'fields' => 'ids', + 'hide_empty' => false, + ) ); + + if ( ! empty( $_term ) ) { + $clean_terms[] = intval( $_term[0] ); + } else { + // No existing term was found, so pass the string. A new term will be created. + $clean_terms[] = $term; + } + } + + $post_data['tax_input'][ $taxonomy ] = $clean_terms; + } + } + + add_meta( $post_ID ); + + update_post_meta( $post_ID, '_edit_last', get_current_user_id() ); + + $success = wp_update_post( $post_data ); + // If the save failed, see if we can sanity check the main fields and try again + if ( ! $success && is_callable( array( $wpdb, 'strip_invalid_text_for_column' ) ) ) { + $fields = array( 'post_title', 'post_content', 'post_excerpt' ); + + foreach ( $fields as $field ) { + if ( isset( $post_data[ $field ] ) ) { + $post_data[ $field ] = $wpdb->strip_invalid_text_for_column( $wpdb->posts, $field, $post_data[ $field ] ); + } + } + + 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 ) && current_user_can( $ptype->cap->publish_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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @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( __('Sorry, you are not allowed to edit pages.')); + else + wp_die( __('Sorry, 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; + } + + if ( isset( $post_data['post_format'] ) ) { + set_post_format( $post_ID, $post_data['post_format'] ); + unset( $post_data['tax_input']['post_format'] ); + } + + $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 ); + } + } + + 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 Optional. A post type string. Default 'post'. + * @param bool $create_in_db Optional. Whether to insert the post into database. Default false. + * @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 ) { + $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_name = ''; + $post->post_type = $post_type; + $post->post_status = 'draft'; + $post->to_ping = ''; + $post->pinged = ''; + $post->comment_status = get_default_comment_status( $post_type ); + $post->ping_status = get_default_comment_status( $post_type, 'pingback' ); + $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 ); + } + + /** + * Filters 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 ); + + /** + * Filters 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 ); + + /** + * Filters 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 ); + + return $post; +} + +/** + * Determine if a post exists based on title, content, and date + * + * @since 2.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @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 + * + * @global WP_User $current_user + * + * @return int|WP_Error + */ +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', __( 'Sorry, you are not allowed to create pages on this site.' ) ); + else + return new WP_Error( 'edit_posts', __( 'Sorry, 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 + * + * @return int|null + */ +function write_post() { + $result = wp_write_post(); + if ( is_wp_error( $result ) ) + wp_die( $result->get_error_message() ); + else + return $result; +} + +// +// Post Meta +// + +/** + * Add post meta data defined in $_POST superglobal for post with given ID. + * + * @since 1.2.0 + * + * @param int $post_ID + * @return int|bool + */ +function add_meta( $post_ID ) { + $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 + +/** + * Delete post meta data by meta ID. + * + * @since 1.2.0 + * + * @param int $mid + * @return bool + */ +function delete_meta( $mid ) { + return delete_metadata_by_mid( 'post' , $mid ); +} + +/** + * Get a list of previously defined keys. + * + * @since 1.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @return mixed + */ +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; +} + +/** + * Get post meta data by meta ID. + * + * @since 2.1.0 + * + * @param int $mid + * @return object|bool + */ +function get_post_meta_by_id( $mid ) { + return get_metadata_by_mid( 'post', $mid ); +} + +/** + * Get meta data for the given post ID. + * + * @since 1.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $postid + * @return mixed + */ +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 ); +} + +/** + * Update post meta data by meta ID. + * + * @since 1.2.0 + * + * @param int $meta_id + * @param string $meta_key Expect Slashed + * @param string $meta_value Expect Slashed + * @return bool + */ +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; + + /** + * Filters the number of items per page to show for a specific 'per_page' type. + * + * The dynamic portion of the hook name, `$post_type`, refers to the post type. + * + * 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 post + * type. Default 20. + */ + $posts_per_page = apply_filters( "edit_{$post_type}_per_page", $posts_per_page ); + + /** + * Filters the number of posts displayed per page when specifically listing "posts". + * + * @since 2.8.0 + * + * @param int $posts_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; + $query['fields'] = 'id=>parent'; + } + + if ( ! empty( $q['show_sticky'] ) ) + $query['post__in'] = (array) get_option( 'sticky_posts' ); + + wp( $query ); + + return $avail_post_stati; +} + +/** + * Get all available post MIME types for a given post type. + * + * @since 2.5.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param string $type + * @return mixed + */ +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; +} + +/** + * Get the query variables for the current attachments request. + * + * @since 4.2.0 + * + * @param array|false $q Optional. Array of query variables to use to build the query or false + * to use $_GET superglobal. Default false. + * @return array The parsed query vars. + */ +function wp_edit_attachments_query_vars( $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; + $q['post_status'] = isset( $q['attachment-filter'] ) && 'trash' == $q['attachment-filter'] ? '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; + } + + /** + * Filters 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(); + if ( isset($q['post_mime_type']) && !array_intersect( (array) $q['post_mime_type'], array_keys($post_mime_types) ) ) { + unset($q['post_mime_type']); + } + + foreach ( array_keys( $post_mime_types ) as $type ) { + if ( isset( $q['attachment-filter'] ) && "post_mime_type:$type" == $q['attachment-filter'] ) { + $q['post_mime_type'] = $type; + break; + } + } + + if ( isset( $q['detached'] ) || ( isset( $q['attachment-filter'] ) && 'detached' == $q['attachment-filter'] ) ) { + $q['post_parent'] = 0; + } + + if ( isset( $q['mine'] ) || ( isset( $q['attachment-filter'] ) && 'mine' == $q['attachment-filter'] ) ) { + $q['author'] = get_current_user_id(); + } + + // Filter query clauses to include filenames. + if ( isset( $q['s'] ) ) { + add_filter( 'posts_clauses', '_filter_query_attachment_filenames' ); + } + + return $q; +} + +/** + * 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|false $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 ) { + wp( wp_edit_attachments_query_vars( $q ) ); + + $post_mime_types = get_post_mime_types(); + $avail_post_mime_types = get_available_post_mime_types( 'attachment' ); + + return array( $post_mime_types, $avail_post_mime_types ); +} + +/** + * Returns the list of classes to be used by a meta box. + * + * @since 2.5.0 + * + * @param string $id + * @param string $page + * @return string + */ +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( '' ); + } + + /** + * Filters 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 ); +} + +/** + * Get a sample permalink based off of the post name. + * + * @since 2.5.0 + * + * @param int $id Post ID or post object. + * @param string $title Optional. Title to override the post's current title when generating the post name. Default null. + * @param string $name Optional. Name to override the post name. Default null. + * @return array Array containing the sample permalink with placeholder for the post name, and the post name. + */ +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', 'future' ) ) ) { + $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); + if ( $uri ) { + $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, $post ); + 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->post_status = $original_status; + $post->post_date = $original_date; + $post->post_name = $original_name; + unset($post->filter); + + /** + * Filters the sample permalink. + * + * @since 4.4.0 + * + * @param array $permalink Array containing the sample permalink with placeholder for the post name, and the post name. + * @param int $post_id Post ID. + * @param string $title Post title. + * @param string $name Post name (slug). + * @param WP_Post $post Post object. + */ + return apply_filters( 'get_sample_permalink', $permalink, $post->ID, $title, $name, $post ); +} + +/** + * Returns the HTML of the sample permalink slug editor. + * + * @since 2.5.0 + * + * @param int $id Post ID or post object. + * @param string $new_title Optional. New title. Default null. + * @param string $new_slug Optional. New slug. Default null. + * @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); + + $view_link = false; + $preview_target = ''; + + if ( current_user_can( 'read_post', $post->ID ) ) { + if ( 'draft' === $post->post_status || empty( $post->post_name ) ) { + $view_link = get_preview_post_link( $post ); + $preview_target = " target='wp-preview-{$post->ID}'"; + } else { + if ( 'publish' === $post->post_status || 'attachment' === $post->post_type ) { + $view_link = get_permalink( $post ); + } else { + // Allow non-published (private, future) to be viewed at a pretty permalink, in case $post->post_name is set + $view_link = str_replace( array( '%pagename%', '%postname%' ), $post->post_name, $permalink ); + } + } + } + + // Permalinks without a post/page name placeholder don't have anything to edit + if ( false === strpos( $permalink, '%postname%' ) && false === strpos( $permalink, '%pagename%' ) ) { + $return = '' . __( 'Permalink:' ) . "\n"; + + if ( false !== $view_link ) { + $display_link = urldecode( $view_link ); + $return .= '' . esc_html( $display_link ) . "\n"; + } else { + $return .= '' . $permalink . "\n"; + } + + // Encourage a pretty permalink setting + 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"; + } + } else { + if ( mb_strlen( $post_name ) > 34 ) { + $post_name_abridged = mb_substr( $post_name, 0, 16 ) . '…' . mb_substr( $post_name, -16 ); + } else { + $post_name_abridged = $post_name; + } + + $post_name_html = '' . esc_html( $post_name_abridged ) . ''; + $display_link = str_replace( array( '%pagename%', '%postname%' ), $post_name_html, esc_html( urldecode( $permalink ) ) ); + + $return = '' . __( 'Permalink:' ) . "\n"; + $return .= '' . $display_link . "\n"; + $return .= '‎'; // Fix bi-directional text display defect in RTL languages. + $return .= '\n"; + $return .= '' . esc_html( $post_name ) . "\n"; + } + + /** + * Filters the sample permalink HTML markup. + * + * @since 2.9.0 + * @since 4.4.0 Added `$post` parameter. + * + * @param string $return Sample permalink HTML markup. + * @param int $post_id Post ID. + * @param string $new_title New sample permalink title. + * @param string $new_slug New sample permalink slug. + * @param WP_Post $post Post object. + */ + $return = apply_filters( 'get_sample_permalink_html', $return, $post->ID, $new_title, $new_slug, $post ); + + 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 ) { + $_wp_additional_image_sizes = wp_get_additional_image_sizes(); + + $post = get_post( $post ); + $post_type_object = get_post_type_object( $post->post_type ); + $set_thumbnail_link = '

        %s

        '; + $upload_iframe_src = get_upload_iframe_src( 'image', $post->ID ); + + $content = sprintf( $set_thumbnail_link, + esc_url( $upload_iframe_src ), + '', // Empty when there's no featured image set, `aria-describedby` attribute otherwise. + esc_html( $post_type_object->labels->set_featured_image ) + ); + + if ( $thumbnail_id && get_post( $thumbnail_id ) ) { + $size = isset( $_wp_additional_image_sizes['post-thumbnail'] ) ? 'post-thumbnail' : array( 266, 266 ); + + /** + * Filters the size used to display the post thumbnail image in the 'Featured Image' meta box. + * + * Note: When a theme adds 'post-thumbnail' support, a special 'post-thumbnail' + * image size is registered, which differs from the 'thumbnail' image size + * managed via the Settings > Media screen. See the `$size` parameter description + * for more information on default values. + * + * @since 4.4.0 + * + * @param string|array $size Post thumbnail image size to display in the meta box. Accepts any valid + * image size, or an array of width and height values in pixels (in that order). + * If the 'post-thumbnail' size is set, default is 'post-thumbnail'. Otherwise, + * default is an array with 266 as both the height and width values. + * @param int $thumbnail_id Post thumbnail attachment ID. + * @param WP_Post $post The post object associated with the thumbnail. + */ + $size = apply_filters( 'admin_post_thumbnail_size', $size, $thumbnail_id, $post ); + + $thumbnail_html = wp_get_attachment_image( $thumbnail_id, $size ); + + if ( ! empty( $thumbnail_html ) ) { + $content = sprintf( $set_thumbnail_link, + esc_url( $upload_iframe_src ), + ' aria-describedby="set-post-thumbnail-desc"', + $thumbnail_html + ); + $content .= '

        ' . __( 'Click the image to edit or update' ) . '

        '; + $content .= '

        ' . esc_html( $post_type_object->labels->remove_featured_image ) . '

        '; + } + } + + $content .= ''; + + /** + * Filters the admin post thumbnail HTML markup to return. + * + * @since 2.9.0 + * @since 3.5.0 Added the `$post_id` parameter. + * @since 4.6.0 Added the `$thumbnail_id` parameter. + * + * @param string $content Admin post thumbnail HTML markup. + * @param int $post_id Post ID. + * @param int $thumbnail_id Thumbnail ID. + */ + return apply_filters( 'admin_post_thumbnail_html', $content, $post->ID, $thumbnail_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 int|false ID of the user with lock. False if the post does not exist, post is not locked, + * the user with lock does not exist, or the post is locked by current user. + */ +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 ); + + if ( ! get_userdata( $user ) ) { + return false; + } + + /** 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 being edited. + * @return array|false Array of the lock time and user ID. False if the post does not exist, or + * there is no current user. + */ +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 ) { + + /** + * Filters 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_Post $post Post object. + * @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 ) { + if ( 'publish' == $post->post_status || $user->ID != $post->post_author ) { + // Latest content is in autosave + $nonce = wp_create_nonce( 'post_preview_' . $post->ID ); + $query_args['preview_id'] = $post->ID; + $query_args['preview_nonce'] = $nonce; + } + } + + $preview_link = get_preview_post_link( $post->ID, $query_args ); + + /** + * Filters 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 ) ); + } else { + /* translators: %s: user's display name */ + printf( __( '%s is already editing this post.' ), esc_html( $user->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( $post ) ) ) 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; + } + + /** + * Fires before an autosave is stored. + * + * @since 4.1.0 + * + * @param array $new_autosave Post array - the autosave that is about to be saved. + */ + do_action( 'wp_creating_autosave', $new_autosave ); + + 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 ); +} + +/** + * Saves a draft or manually autosaves for the purpose of showing a post preview. + * + * @since 2.7.0 + * + * @return string 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( __( 'Sorry, you are not allowed to edit this post.' ) ); + } + + if ( ! current_user_can( 'edit_post', $post->ID ) ) { + wp_die( __( 'Sorry, 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 ( isset( $_POST['post_status'] ) && '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(); + + 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'] ); + } + + if ( isset( $_POST['_thumbnail_id'] ) ) { + $query_args['_thumbnail_id'] = ( intval( $_POST['_thumbnail_id'] ) <= 0 ) ? '-1' : intval( $_POST['_thumbnail_id'] ); + } + } + + return get_preview_post_link( $post, $query_args ); +} + +/** + * Save a post submitted with XHR + * + * Intended for use with heartbeat and autosave.js + * + * @since 3.9.0 + * + * @param array $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. + * The 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', __( 'Sorry, 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 ) ); + } +} + +/** + * 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' ) ); + } + + /** + * Filters 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; +} diff --git a/wp-admin/includes/revision.php b/wp-admin/includes/revision.php new file mode 100644 index 0000000..5a765cb --- /dev/null +++ b/wp-admin/includes/revision.php @@ -0,0 +1,403 @@ +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( $post ) 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' ); + + $args = array( + 'show_split_view' => true + ); + + /** + * Filters revisions text diff options. + * + * Filters the options passed to wp_text_diff() when viewing a post revision. + * + * @since 4.1.0 + * + * @param array $args { + * Associative array of options to pass to wp_text_diff(). + * + * @type bool $show_split_view True for split view (two columns), false for + * un-split view (single column). Default true. + * } + * @param string $field The current revision field. + * @param WP_Post $compare_from The revision post to compare from. + * @param WP_Post $compare_to The revision post to compare to. + */ + $args = apply_filters( 'revision_text_diff_options', $args, $field, $compare_from, $compare_to ); + + $diff = wp_text_diff( $content_from, $content_to, $args ); + + 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, + ); + } + } + + /** + * Filters the fields displayed in the post revision diff UI. + * + * @since 4.1.0 + * + * @param array $return Revision UI fields. Each item is an array of id, name and diff. + * @param WP_Post $compare_from The revision post to compare from. + * @param WP_Post $compare_to The revision post to compare to. + */ + return apply_filters( 'wp_get_revision_ui_diff', $return, $compare_from, $compare_to ); + +} + +/** + * 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 ); + $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 ); + $current_id = false; + + foreach ( $revisions as $revision ) { + $modified = strtotime( $revision->post_modified ); + $modified_gmt = strtotime( $revision->post_modified_gmt . ' +0000' ); + 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_data = array( + 'id' => $revision->ID, + 'title' => get_the_title( $post->ID ), + 'author' => $authors[ $revision->post_author ], + 'date' => date_i18n( __( 'M j, Y @ H:i' ), $modified ), + 'dateShort' => date_i18n( _x( 'j M @ H: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, + ); + + /** + * Filters the array of revisions used on the revisions screen. + * + * @since 4.4.0 + * + * @param array $revisions_data { + * The bootstrapped data for the revisions screen. + * + * @type int $id Revision ID. + * @type string $title Title for the revision's parent WP_Post object. + * @type int $author Revision post author ID. + * @type string $date Date the revision was modified. + * @type string $dateShort Short-form version of the date the revision was modified. + * @type string $timeAgo GMT-aware amount of time ago the revision was modified. + * @type bool $autosave Whether the revision is an autosave. + * @type bool $current Whether the revision is both not an autosave and the post + * modified date matches the revision modified date (GMT-aware). + * @type bool|false $restoreUrl URL if the revision can be restored, false otherwise. + * } + * @param WP_Post $revision The revision's WP_Post object. + * @param WP_Post $post The revision's parent WP_Post object. + */ + $revisions[ $revision->ID ] = apply_filters( 'wp_prepare_revision_for_js', $revisions_data, $revision, $post ); + } + + /** + * If we only have one revision, the initial revision is missing; This happens + * when we have an autsosave and the user has clicked 'View the Autosave' + */ + if ( 1 === sizeof( $revisions ) ) { + $revisions[ $post->ID ] = array( + 'id' => $post->ID, + 'title' => get_the_title( $post->ID ), + 'author' => $authors[ $post->post_author ], + 'date' => date_i18n( __( 'M j, Y @ H:i' ), strtotime( $post->post_modified ) ), + 'dateShort' => date_i18n( _x( 'j M @ H:i', 'revision date short format' ), strtotime( $post->post_modified ) ), + 'timeAgo' => sprintf( __( '%s ago' ), human_time_diff( strtotime( $post->post_modified_gmt ), $now_gmt ) ), + 'autosave' => false, + 'current' => true, + 'restoreUrl' => false, + ); + $current_id = $post->ID; + } + + /* + * 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 ), + ); +} + +/** + * Print JavaScript templates required for the revisions experience. + * + * @since 4.1.0 + * + * @global WP_Post $post The global `$post` object. + */ +function wp_print_revision_templates() { + global $post; + ?> + + + + + + + + get_charset_collate(); + +/** + * Retrieve the SQL for creating database tables. + * + * @since 3.3.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @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 site ID for which to retrieve SQL. Default is the current site 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 = $wpdb->get_charset_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 ); + + /* + * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that. + * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which + * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters. + */ + $max_index_length = 191; + + // Blog specific tables. + $blog_tables = "CREATE TABLE $wpdb->termmeta ( + meta_id bigint(20) unsigned NOT NULL auto_increment, + term_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY term_id (term_id), + KEY meta_key (meta_key($max_index_length)) +) $charset_collate; +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), + KEY slug (slug($max_index_length)), + KEY name (name($max_index_length)) +) $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($max_index_length)) +) $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), + KEY comment_author_email (comment_author_email(10)) +) $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(191) 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($max_index_length)) +) $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(255) 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($max_index_length)), + 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(255) 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(255) 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), + KEY user_email (user_email) +) $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(255) 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(255) 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), + KEY user_email (user_email) +) $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($max_index_length)) +) $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(140),path(51)) +) $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($max_index_length)), + 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(140),path(51)) +) $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; + case 'all' : + default: + $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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_db_version + * @global int $wp_current_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; + } + + // If WP_DEFAULT_THEME doesn't exist, fall back to the latest core default theme. + $stylesheet = $template = WP_DEFAULT_THEME; + $theme = wp_get_theme( WP_DEFAULT_THEME ); + if ( ! $theme->exists() ) { + $theme = WP_Theme::get_core_default_theme(); + } + + // If we can't find a core default theme, WP_DEFAULT_THEME is the best we can do. + if ( $theme ) { + $stylesheet = $theme->get_stylesheet(); + $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 https://secure.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, + 'home' => $guessurl, + 'blogname' => __('My Site'), + /* translators: site 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 https://secure.php.net/date */ + 'date_format' => __('F j, Y'), + /* translators: default time format, see https://secure.php.net/date */ + 'time_format' => __('g:i a'), + /* translators: links last updated date format, see https://secure.php.net/date */ + 'links_updated_date_format' => __('F j, Y g:i a'), + 'comment_moderation' => 0, + 'moderation_notify' => 1, + 'permalink_structure' => '', + 'rewrite_rules' => '', + 'hack_file' => 0, + 'blog_charset' => 'UTF-8', + 'moderation_keys' => '', + 'active_plugins' => array(), + 'category_base' => '', + 'ping_sites' => 'http://rpc.pingomatic.com/', + 'comment_max_links' => 2, + 'gmt_offset' => $gmt_offset, + + // 1.5 + 'default_email_category' => 1, + 'recently_edited' => '', + 'template' => $template, + 'stylesheet' => $stylesheet, + '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' => 'none', + '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, + + // 4.3.0 + 'finished_splitting_shared_terms' => 1, + 'site_icon' => 0, + + // 4.4.0 + 'medium_large_size_w' => 768, + 'medium_large_size_h' => 0, + + // 4.9.6 + 'wp_page_for_privacy_policy' => 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: site tagline */ + $options[ 'blogdescription' ] = sprintf(__('Just another %s site'), get_network()->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', 'gzipcompression', 'advanced_edit' + ); + 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)?$'"); + + // Clear expired transients + delete_expired_transients( true ); +} + +/** + * 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' ); + $role->add_cap( 'promote_users' ); + $role->add_cap( 'edit_theme_options' ); + $role->add_cap( 'delete_themes' ); + $role->add_cap( 'export' ); + } +} + +if ( !function_exists( 'install_network' ) ) : +/** + * Install Network. + * + * @since 3.0.0 + */ +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 + * + * @global wpdb $wpdb + * @global object $current_site + * @global int $wp_db_version + * @global WP_Rewrite $wp_rewrite + * + * @param int $network_id ID of network to populate. + * @param string $domain The domain name for the network (eg. "example.com"). + * @param string $email Email address for the network administrator. + * @param string $site_name The name of the network. + * @param string $path Optional. The path to append to the network's domain name. Default '/'. + * @param bool $subdomain_install Optional. Whether the network is a subdomain installation or a subdirectory installation. + * Default false, meaning the network is a subdirectory installation. + * @return bool|WP_Error True on success, or WP_Error on warning (with the installation 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. + $network_exists = false; + if ( is_multisite() ) { + if ( get_network( (int) $network_id ) ) { + $errors->add( 'siteid_exists', __( 'The network already exists.' ) ); + } + } else { + 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.' ) ); + } + } + + if ( ! is_email( $email ) ) + $errors->add( 'invalid_email', __( 'You must provide a valid email address.' ) ); + + if ( $errors->get_error_code() ) + return $errors; + + // If a user with the provided email does not exist, default to the current user as the new network admin. + $site_user = get_user_by( 'email', $email ); + if ( false === $site_user ) { + $site_user = wp_get_current_user(); + } + + // 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 WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme. + if ( ! wp_get_theme( WP_DEFAULT_THEME )->exists() ) { + if ( $core_default = WP_Theme::get_core_default_theme() ) { + $allowed_themes[ $core_default->get_stylesheet() ] = 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( 'user_login' ), + 'role' => 'administrator', + ) ); + if ( $users ) { + foreach ( $users as $user ) { + $site_admins[] = $user->user_login; + } + + $site_admins = array_unique( $site_admins ); + } + } else { + $site_admins = get_site_option( 'site_admins' ); + } + + /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */ + $welcome_email = __( 'Howdy USERNAME, + +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' ); + + $misc_exts = array( + // Images. + 'jpg', 'jpeg', 'png', 'gif', + // Video. + 'mov', 'avi', 'mpg', '3gp', '3g2', + // "audio". + 'midi', 'mid', + // Miscellaneous. + 'pdf', 'doc', 'ppt', 'odt', 'pptx', 'docx', 'pps', 'ppsx', 'xls', 'xlsx', 'key', + ); + $audio_exts = wp_get_audio_extensions(); + $video_exts = wp_get_video_extensions(); + $upload_filetypes = array_unique( array_merge( $misc_exts, $audio_exts, $video_exts ) ); + + $sitemeta = array( + 'site_name' => $site_name, + 'admin_email' => $email, + 'admin_user_id' => $site_user->ID, + 'registration' => 'none', + 'upload_filetypes' => implode( ' ', $upload_filetypes ), + '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, + /* translators: %s: site link */ + 'first_post' => __( 'Welcome to %s. 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'; + + /** + * Filters 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( + /* translators: %s: host name */ + __( 'The installer attempted to contact a random hostname (%s) on your domain.' ), + '' . $hostname . '' + ); + if ( ! empty ( $errstr ) ) { + /* translators: %s: error message */ + $msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '' . $errstr . '' ); + } + $msg .= '

        '; + + $msg .= '

        ' . sprintf( + /* translators: %s: asterisk symbol (*) */ + __( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a %s 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..c3c4594 --- /dev/null +++ b/wp-admin/includes/screen.php @@ -0,0 +1,233 @@ + 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 ] ) ) { + + /** + * Filters 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 ); + } + + $hidden = get_user_option( 'manage' . $screen->id . 'columnshidden' ); + + $use_defaults = ! is_array( $hidden ); + + if ( $use_defaults ) { + $hidden = array(); + + /** + * Filters the default list of hidden columns. + * + * @since 4.4.0 + * + * @param array $hidden An array of columns hidden by default. + * @param WP_Screen $screen WP_Screen object of the current screen. + */ + $hidden = apply_filters( 'default_hidden_columns', $hidden, $screen ); + } + + /** + * Filters the list of hidden columns. + * + * @since 4.4.0 + * @since 4.4.1 Added the `use_defaults` parameter. + * + * @param array $hidden An array of hidden columns. + * @param WP_Screen $screen WP_Screen object of the current screen. + * @param bool $use_defaults Whether to show the default columns. + */ + return apply_filters( 'hidden_columns', $hidden, $screen, $use_defaults ); +} + +/** + * Prints the meta box preferences for screen meta. + * + * @since 2.7.0 + * + * @global array $wp_meta_boxes + * + * @param 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( 'high', 'core', 'default', 'low' ) as $priority ) { + if ( ! isset( $wp_meta_boxes[ $screen->id ][ $context ][ $priority ] ) ) { + continue; + } + 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; + + $widget_title = $box['title']; + + if ( is_array( $box['args'] ) && isset( $box['args']['__widget_basename'] ) ) { + $widget_title = $box['args']['__widget_basename']; + } + + printf( + '', + esc_attr( $box['id'] ), + checked( in_array( $box['id'], $hidden ), false, false ), + $widget_title + ); + } + } + } +} + +/** + * 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' ); + } + + /** + * Filters 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 ); + } + + /** + * Filters 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 + * + * @global WP_Screen $current_screen + * + * @return WP_Screen|null Current screen object or null when screen not defined. + */ +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 + * + * @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(); +} diff --git a/wp-admin/includes/taxonomy.php b/wp-admin/includes/taxonomy.php new file mode 100644 index 0000000..524cf05 --- /dev/null +++ b/wp-admin/includes/taxonomy.php @@ -0,0 +1,290 @@ + $cat_name, 'category_parent' => $parent) ); +} + +/** + * Create categories for the given post. + * + * @since 2.0.0 + * + * @param array $categories List of categories to create. + * @param int $post_id Optional. The post ID. Default empty. + * @return array List of categories to create for the given post. + */ +function wp_create_categories( $categories, $post_id = '' ) { + $cat_ids = array (); + foreach ( $categories as $category ) { + if ( $id = category_exists( $category ) ) { + $cat_ids[] = $id; + } elseif ( $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 + * @since 2.5.0 $wp_error parameter was added. + * @since 3.0.0 The 'taxonomy' argument was added. + * + * @param array $catarr { + * Array of arguments for inserting a new category. + * + * @type int $cat_ID Category ID. A non-zero value updates an existing category. + * Default 0. + * @type string $taxonomy Taxonomy slug. Default 'category'. + * @type string $cat_name Category name. Default empty. + * @type string $category_description Category description. Default empty. + * @type string $category_nicename Category nice (display) name. Default empty. + * @type int|string $category_parent Category parent ID. Default empty. + * } + * @param bool $wp_error Optional. Default false. + * @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 ); + + if ( trim( $catarr['cat_name'] ) == '' ) { + if ( ! $wp_error ) { + return 0; + } else { + return new WP_Error( 'cat_name', __( 'You did not enter a category name.' ) ); + } + } + + $catarr['cat_ID'] = (int) $catarr['cat_ID']; + + // Are we updating or creating? + $update = ! empty ( $catarr['cat_ID'] ); + + $name = $catarr['cat_name']; + $description = $catarr['category_description']; + $slug = $catarr['category_nicename']; + $parent = (int) $catarr['category_parent']; + if ( $parent < 0 ) { + $parent = 0; + } + + if ( empty( $parent ) + || ! term_exists( $parent, $catarr['taxonomy'] ) + || ( $catarr['cat_ID'] && term_is_ancestor_of( $catarr['cat_ID'], $parent, $catarr['taxonomy'] ) ) ) { + $parent = 0; + } + + $args = compact('name', 'slug', 'parent', 'description'); + + if ( $update ) { + $catarr['cat_ID'] = wp_update_term( $catarr['cat_ID'], $catarr['taxonomy'], $args ); + } else { + $catarr['cat_ID'] = wp_insert_term( $catarr['cat_name'], $catarr['taxonomy'], $args ); + } + + if ( is_wp_error( $catarr['cat_ID'] ) ) { + if ( $wp_error ) { + return $catarr['cat_ID']; + } else { + return 0; + } + } + return $catarr['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 +// + +/** + * Check whether a post tag with a given name exists. + * + * @since 2.3.0 + * + * @param int|string $tag_name + * @return mixed + */ +function tag_exists($tag_name) { + return term_exists($tag_name, 'post_tag'); +} + +/** + * Add a new tag to the database if it does not already exist. + * + * @since 2.3.0 + * + * @param int|string $tag_name + * @return array|WP_Error + */ +function wp_create_tag($tag_name) { + return wp_create_term( $tag_name, 'post_tag'); +} + +/** + * Get comma-separated list of tags available to edit. + * + * @since 2.3.0 + * + * @param int $post_id + * @param string $taxonomy Optional. The taxonomy for which to retrieve terms. Default 'post_tag'. + * @return string|bool|WP_Error + */ +function get_tags_to_edit( $post_id, $taxonomy = 'post_tag' ) { + return get_terms_to_edit( $post_id, $taxonomy); +} + +/** + * Get comma-separated list of terms available to edit for the given post ID. + * + * @since 2.8.0 + * + * @param int $post_id + * @param string $taxonomy Optional. The taxonomy for which to retrieve terms. Default 'post_tag'. + * @return string|bool|WP_Error + */ +function get_terms_to_edit( $post_id, $taxonomy = 'post_tag' ) { + $post_id = (int) $post_id; + if ( !$post_id ) + return false; + + $terms = get_object_term_cache( $post_id, $taxonomy ); + if ( false === $terms ) { + $terms = wp_get_object_terms( $post_id, $taxonomy ); + wp_cache_add( $post_id, wp_list_pluck( $terms, 'term_id' ), $taxonomy . '_relationships' ); + } + + if ( ! $terms ) { + return false; + } + if ( is_wp_error( $terms ) ) { + return $terms; + } + $term_names = array(); + foreach ( $terms as $term ) { + $term_names[] = $term->name; + } + + $terms_to_edit = esc_attr( join( ',', $term_names ) ); + + /** + * Filters the comma-separated list of terms available to edit. + * + * @since 2.8.0 + * + * @see get_terms_to_edit() + * + * @param array $terms_to_edit An array of terms. + * @param string $taxonomy The taxonomy for which to retrieve terms. Default 'post_tag'. + */ + $terms_to_edit = apply_filters( 'terms_to_edit', $terms_to_edit, $taxonomy ); + + return $terms_to_edit; +} + +/** + * Add a new term to the database if it does not already exist. + * + * @since 2.8.0 + * + * @param int|string $tag_name + * @param string $taxonomy Optional. The taxonomy for which to retrieve terms. Default 'post_tag'. + * @return array|WP_Error + */ +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..0c8c863 --- /dev/null +++ b/wp-admin/includes/template.php @@ -0,0 +1,2184 @@ + '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 input elements labelled with term names. + * + * Taxonomy-independent version of wp_category_checklist(). + * + * @since 3.0.0 + * @since 4.4.0 Introduced the `$echo` argument. + * + * @param int $post_id Optional. Post ID. Default 0. + * @param array|string $args { + * Optional. Array or string of arguments for generating a terms checklist. Default empty array. + * + * @type int $descendants_and_self ID of the category to output along with its descendants. + * Default 0. + * @type array $selected_cats List of categories to mark as checked. Default false. + * @type array $popular_cats List of categories to receive the "popular-category" class. + * Default false. + * @type object $walker Walker object to use to build the output. + * Default is a Walker_Category_Checklist instance. + * @type string $taxonomy Taxonomy to generate the checklist for. Default 'category'. + * @type bool $checked_ontop Whether to move checked items out of the hierarchy and to + * the top of the list. Default true. + * @type bool $echo Whether to echo the generated markup. False to return the markup instead + * of echoing it. Default true. + * } + */ +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, + 'echo' => true, + ); + + /** + * Filters 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. + */ + $params = apply_filters( 'wp_terms_checklist_args', $args, $post_id ); + + $r = wp_parse_args( $params, $defaults ); + + if ( empty( $r['walker'] ) || ! ( $r['walker'] instanceof Walker ) ) { + $walker = new Walker_Category_Checklist; + } else { + $walker = $r['walker']; + } + + $taxonomy = $r['taxonomy']; + $descendants_and_self = (int) $r['descendants_and_self']; + + $args = array( 'taxonomy' => $taxonomy ); + + $tax = get_taxonomy( $taxonomy ); + $args['disabled'] = ! current_user_can( $tax->cap->assign_terms ); + + $args['list_only'] = ! empty( $r['list_only'] ); + + if ( is_array( $r['selected_cats'] ) ) { + $args['selected_cats'] = $r['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( $r['popular_cats'] ) ) { + $args['popular_cats'] = $r['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' ) ); + } + + $output = ''; + + if ( $r['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 + $output .= call_user_func_array( array( $walker, 'walk' ), array( $checked_categories, 0, $args ) ); + } + // Then the rest of them + $output .= call_user_func_array( array( $walker, 'walk' ), array( $categories, 0, $args ) ); + + if ( $r['echo'] ) { + echo $output; + } + + return $output; +} + +/** + * 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 Not used. + * @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. + * + * @since 2.7.0 + * + * @param WP_Post $post Post object. + */ +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 ' +'; +} + +/** + * Outputs the in-line comment reply-to form in the Comments list table. + * + * @since 2.7.0 + * + * @global WP_List_Table $wp_list_table + * + * @param int $position + * @param bool $checkbox + * @param string $mode + * @param bool $table_row + */ +function wp_comment_reply( $position = 1, $checkbox = false, $mode = 'single', $table_row = true ) { + global $wp_list_table; + /** + * Filters 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 ( ! $wp_list_table ) { + 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 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param WP_Post $post Optional. The post being edited. + */ +function meta_form( $post = null ) { + global $wpdb; + $post = get_post( $post ); + + /** + * Filters values for the meta key dropdown in the Custom Fields meta box. + * + * Returning a non-null value will effectively short-circuit and avoid a + * potentially expensive query against postmeta. + * + * @since 4.4.0 + * + * @param array|null $keys Pre-defined meta keys to be used in place of a postmeta query. Default null. + * @param WP_Post $post The current post object. + */ + $keys = apply_filters( 'postmeta_form_keys', null, $post ); + + if ( null === $keys ) { + /** + * Filters 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 = apply_filters( 'postmeta_form_limit', 30 ); + $sql = "SELECT DISTINCT meta_key + FROM $wpdb->postmeta + WHERE meta_key NOT BETWEEN '_' AND '_z' + HAVING meta_key NOT LIKE %s + ORDER BY meta_key + LIMIT %d"; + $keys = $wpdb->get_col( $wpdb->prepare( $sql, $wpdb->esc_like( '_' ) . '%', $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\""; + + // todo: Remove this? + // echo '
        '; + + $time_adj = current_time('timestamp'); + $post_date = ($for_post) ? $post->post_date : get_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"; + $map = array( + 'mm' => array( $mm, $cur_mm ), + 'jj' => array( $jj, $cur_jj ), + 'aa' => array( $aa, $cur_aa ), + 'hh' => array( $hh, $cur_hh ), + 'mn' => array( $mn, $cur_mn ), + ); + foreach ( $map as $timeunit => $value ) { + list( $unit, $curr ) = $value; + + echo '' . "\n"; + $cur_timeunit = 'cur_' . $timeunit; + echo '' . "\n"; + } +?> + +

        + + +

        +" . esc_html( $template ) . ""; + } +} + +/** + * Print out option HTML elements for the page parents drop-down. + * + * @since 1.5.0 + * @since 4.4.0 `$post` argument was added. + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $default Optional. The default page ID to be pre-selected. Default 0. + * @param int $parent Optional. The parent page ID. Default 0. + * @param int $level Optional. Page depth level. Default 0. + * @param int|WP_Post $post Post ID or WP_Post object. + * + * @return null|false Boolean False if page has no children, otherwise print out html elements + */ +function parent_dropdown( $default = 0, $parent = 0, $level = 0, $post = null ) { + global $wpdb; + $post = get_post( $post ); + $items = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_parent, post_title FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'page' ORDER BY menu_order", $parent) ); + + if ( $items ) { + foreach ( $items as $item ) { + // A page cannot be its own parent. + if ( $post && $post->ID && $item->ID == $post->ID ) + continue; + + $pad = str_repeat( ' ', $level * 3 ); + $selected = selected( $default, $item->ID, false ); + + echo "\n\t"; + parent_dropdown( $default, $item->ID, $level +1 ); + } + } else { + return false; + } +} + +/** + * Print out option html elements for role selectors. + * + * @since 2.1.0 + * + * @param string $selected Slug for the role that should be already selected. + */ +function wp_dropdown_roles( $selected = '' ) { + $r = ''; + + $editable_roles = array_reverse( get_editable_roles() ); + + foreach ( $editable_roles as $role => $details ) { + $name = translate_user_role($details['name'] ); + // preselect specified role + if ( $selected == $role ) { + $r .= "\n\t"; + } else { + $r .= "\n\t"; + } + } + + echo $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 ) { + + /** + * Filters 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 ) ) { + return; + } + + $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_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 + * + * @global array $wp_meta_boxes + * + * @staticvar bool $already_sorted + * + * @param string|WP_Screen $screen Screen identifier. If you have used add_menu_page() or + * add_submenu_page() to create a new screen (and hence screen_id) + * make sure your menu slug conforms to the limits of sanitize_key() + * otherwise the 'screen' menu may not correctly render on your page. + * @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)); + + // 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; + + $i = 0; + + if ( isset( $wp_meta_boxes[ $page ][ $context ] ) ) { + 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'] ) { + $widget_title = $box[ 'title' ]; + + if ( is_array( $box[ 'args' ] ) && isset( $box[ 'args' ][ '__widget_basename' ] ) ) { + $widget_title = $box[ 'args' ][ '__widget_basename' ]; + // Do not pass this parameter to the user callback function. + unset( $box[ 'args' ][ '__widget_basename' ] ); + } + + echo ''; + } + echo "

        {$box['title']}

        \n"; + echo '
        ' . "\n"; + call_user_func($box['callback'], $object, $box); + echo "
        \n"; + echo "
        \n"; + } + } + } + } + + echo "
        "; + + return $i; + +} + +/** + * Removes a meta box from one or more screens. + * + * @since 2.6.0 + * @since 4.4.0 The `$screen` parameter now accepts an array of screen IDs. + * + * @global array $wp_meta_boxes + * + * @param string $id Meta box ID (used in the 'id' attribute for the meta box). + * @param string|array|WP_Screen $screen The screen or screens on which the meta box is shown (such as a + * post type, 'link', or 'comment'). Accepts a single screen ID, + * WP_Screen object, or array of screen IDs. + * @param string $context The context within the screen where the box is set to display. + * Contexts vary from screen to screen. Post edit screen contexts + * include 'normal', 'side', and 'advanced'. Comments screen contexts + * include 'normal' and 'side'. Menus meta boxes (accordion sections) + * all use the 'side' context. + */ +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 ); + } elseif ( is_array( $screen ) ) { + foreach ( $screen as $single_screen ) { + remove_meta_box( $id, $single_screen, $context ); + } + } + + if ( ! isset( $screen->id ) ) { + return; + } + + $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 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 + * @since 4.2.0 The `$class` argument was added. + * + * @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 callable $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 Optional. The slug-name of the section of the settings page + * in which to show the box. Default 'default'. + * @param array $args { + * Optional. Extra arguments used when outputting the field. + * + * @type string $label_for When supplied, the setting title will be wrapped + * in a `