commit 70bc9b17216d70bbb521479a9237b1768641a429 Author: root Date: Sat Nov 2 09:38:58 2019 +0000 Initial commit diff --git a/.htaccess b/.htaccess new file mode 100644 index 000000000..37c9bc8b4 --- /dev/null +++ b/.htaccess @@ -0,0 +1,17 @@ +Options -indexes + +RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC] +RewriteCond %{REQUEST_URI} ^.*wp-json/wp/ [NC] +RewriteRule ^(.*)$ - [F] + +# BEGIN WordPress + +RewriteEngine On +RewriteBase / +RewriteRule ^index\.php$ - [L] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] + + +# END WordPress diff --git a/cleanup b/cleanup new file mode 100644 index 000000000..3741a66ce --- /dev/null +++ b/cleanup @@ -0,0 +1,3 @@ +#!/bin/bash + +sudo rm -fv xmlrpc.php readme* licens* wp-content/debug.log diff --git a/index.php b/index.php new file mode 100644 index 000000000..86334797d --- /dev/null +++ b/index.php @@ -0,0 +1,17 @@ + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + +WRITTEN OFFER + +The source code for any program binaries or compressed scripts that are +included with WordPress can be freely obtained at the following URL: + + https://wordpress.org/download/source/ diff --git a/readme.html b/readme.html new file mode 100644 index 000000000..5caccc497 --- /dev/null +++ b/readme.html @@ -0,0 +1,98 @@ + + + + + + WordPress › ReadMe + + + +

+ WordPress +

+

Semantic Personal Publishing Platform

+ +

First Things First

+

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

+

— Matt Mullenweg

+ +

Installation: Famous 5-minute install

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

Updating

+

Using the Automatic Updater

+

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

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

Updating Manually

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

Migrating from other systems

+

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

+ +

System Requirements

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

Recommendations

+ + +

Online Resources

+

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

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

Final Notes

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

Share the Love

+

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

+ +

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

+ +

License

+

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

+ + + diff --git a/wp-activate.php b/wp-activate.php new file mode 100644 index 000000000..df82ae0b0 --- /dev/null +++ b/wp-activate.php @@ -0,0 +1,214 @@ +get_error_code() ) ) { + status_header( 404 ); +} elseif ( is_wp_error( $result ) ) { + $error_code = $result->get_error_code(); + + if ( ! in_array( $error_code, $valid_error_codes ) ) { + status_header( 400 ); + } +} + +nocache_headers(); + +if ( is_object( $wp_object_cache ) ) { + $wp_object_cache->cache_enabled = false; +} + +// Fix for page title +$wp_query->is_404 = false; + +/** + * Fires before the Site Activation page is loaded. + * + * @since 3.0.0 + */ +do_action( 'activate_header' ); + +/** + * Adds an action hook specific to this page. + * + * Fires on {@see 'wp_head'}. + * + * @since MU (3.0.0) + */ +function do_activate_header() { + /** + * Fires before the Site Activation page is loaded. + * + * Fires on the {@see 'wp_head'} action. + * + * @since 3.0.0 + */ + do_action( 'activate_wp_head' ); +} +add_action( 'wp_head', 'do_activate_header' ); + +/** + * Loads styles specific to this page. + * + * @since MU (3.0.0) + */ +function wpmu_activate_stylesheet() { + ?> + + + +
+
+ + +

+
+

+ +
+

+

+ +

+
+ + get_error_code(), $valid_error_codes ) ) { + $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 '

'; + } elseif ( $result === null || is_wp_error( $result ) ) { + ?> +

+ +

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 %s addressed some security issues.' ), + '5.2.4' + ); + ?> + the release notes.' ), + sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( '5.2.4' ) + ) + ); + ?> +

+

+ Version %1$s addressed some security issues and fixed %2$s bug.', + 'Version %1$s addressed some security issues and fixed %2$s bugs.', + 29 + ), + '5.2.3', + number_format_i18n( 29 ) + ); + ?> + the release notes.' ), + sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( '5.2.3' ) + ) + ); + ?> +

+

+ Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', + 13 + ), + '5.2.2', + number_format_i18n( 13 ) + ); + ?> + the release notes.' ), + sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( '5.2.2' ) + ) + ); + ?> +

+

+ Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', + 33 + ), + '5.2.1', + number_format_i18n( 33 ) + ); + ?> + the release notes.' ), + sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( '5.2.1' ) + ) + ); + ?> +

+
+ +
+

+

+
+ +
+
+ +
+ +
+
+

+

+ the Site Health features introduced in 5.1, this release adds two new pages to help debug common configuration issues. It also adds space where developers can include debugging information for site maintainers.' ), + __( 'https://wordpress.org/news/2019/02/betty/' ) + ); + + if ( current_user_can( 'install_plugins' ) ) { + printf( + /* translators: 1: link to /wp-admin/site-health.php 2: link to /wp-admin/site-health.php?tab=debug */ + __( ' Check your site status, and learn how to debug issues.' ), + admin_url( 'site-health.php' ), + admin_url( 'site-health.php?tab=debug' ) + ); + } + ?> +

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

+

+
+
+ +
+ +

+ +
+
+

+

+
+
+

+

+
+
+ +
+ +

+ +
+
+

+

+
+
+

+

+
+
+
+
+

+

+ */ + __( '5.2 introduces a %1$s hook, which lets themes support injecting code right at the beginning of the %2$s element.' ), + 'wp_body_open', + '<body>' + ); + ?> +

+
+
+

+

+
+
+ +
+ +
+ + + + | + + +
+
+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 000000000..8d412dd9b --- /dev/null +++ b/wp-admin/admin-ajax.php @@ -0,0 +1,191 @@ + + +
+
+
+ + + + +
+ + + diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php new file mode 100644 index 000000000..118526874 --- /dev/null +++ b/wp-admin/admin-functions.php @@ -0,0 +1,15 @@ +site_name ) ); +} elseif ( is_user_admin() ) { + /* translators: User dashboard screen title. %s: 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. %s: Admin screen name */ + $admin_title = sprintf( __( '%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 ); +} + +if ( wp_is_recovery_mode() ) { + /* translators: %s: Admin screen title. */ + $admin_title = sprintf( __( 'Recovery Mode — %s' ), $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'; + +if ( $current_screen->is_block_editor() ) { + // Default to is-fullscreen-mode to avoid jumps in the UI. + $admin_body_class .= ' block-editor-page is-fullscreen-mode wp-embed-responsive'; + + if ( current_theme_supports( 'editor-styles' ) && current_theme_supports( 'dark-editor-style' ) ) { + $admin_body_class .= ' is-dark-theme'; + } +} + +?> + + + + + + + +
+ +
+ + + +
+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 000000000..48e76feec --- /dev/null +++ b/wp-admin/admin-post.php @@ -0,0 +1,72 @@ + 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; + } + + $page_hook = get_plugin_page_hook( $plugin_page, $the_parent ); + if ( ! $page_hook ) { + $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. + * + * This hook uses a dynamic hook name, `$page_hook`, which 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 'settings_page_pluginbasename'. + * + * @see get_plugin_page_hook() + * + * @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'] ) ) { + $action = $_REQUEST['action']; + + /** + * Fires when an 'action' request variable is sent. + * + * The dynamic portion of the hook name, `$action`, refers to + * the action derived from the `GET` or `POST` request. + * + * @since 2.6.0 + */ + do_action( "admin_action_{$action}" ); +} diff --git a/wp-admin/async-upload.php b/wp-admin/async-upload.php new file mode 100644 index 000000000..81b0cc1a4 --- /dev/null +++ b/wp-admin/async-upload.php @@ -0,0 +1,118 @@ +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 '
+ + ' . 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 of 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 000000000..0b405c575 --- /dev/null +++ b/wp-admin/comment.php @@ -0,0 +1,356 @@ +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' ) . '

' + ); + + 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 000000000..4be284359 --- /dev/null +++ b/wp-admin/credits.php @@ -0,0 +1,153 @@ + +
+ +

+ +

+ +

+ +

+ +
+ +
+ + + +
+'; + printf( + /* translators: 1: https://wordpress.org/about/, 2: https://make.wordpress.org/ */ + __( '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'] ) ) { + // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText + $title = vsprintf( translate( $group_data['name'] ), $group_data['placeholders'] ); + } else { + // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText + $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: 1.4; + 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; + /* Exclude from the transition the outline for Windows High Contrast mode */ + transition: all .1s ease-in-out, outline 0s; +} + +#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: 1.3; + 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; +} + +#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; + box-sizing: border-box; + margin: 1px 2px -1px 0; + padding: 0 5px; + min-width: 18px; + height: 18px; + border-radius: 9px; + background-color: #ca4a1f; + color: #fff; + font-size: 11px; + line-height: 1.6; + text-align: center; + z-index: 26; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #ca4a1f; + 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; + background: none; + color: #aaa; + cursor: pointer; +} + +#collapse-button:hover { + color: #00b9eb; +} + +#collapse-button:focus { + color: #00b9eb; + /* Only visible in Windows High Contrast mode */ + outline: 1px solid transparent; + outline-offset: -1px; +} + +#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; +} + +#collapse-button .collapse-button-label { + top: 8px; +} + +#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 { + transform: rotate(180deg); +} + +.rtl.folded #collapse-button .collapse-button-icon:after { + 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 { + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button .collapse-button-icon:after { + 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 000000000..58b3fdc0e --- /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 6px;margin:-6px -8px 0 0;float:right}.icon16:before{color:#82878c;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"}.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:1.3;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 none;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:1.4;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,outline 0s}#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:1.3;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}#adminmenu .wp-menu-image img{padding:9px 0 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:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-left-color:#f1f1f1;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#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}#adminmenu div.separator{height:2px;padding:0}#adminmenu .wp-submenu .wp-submenu-head{color:#fff;font-weight:400;font-size:14px;padding:8px 11px 8px 4px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0 none}#adminmenu .awaiting-mod,#adminmenu .update-plugins{display:inline-block;vertical-align:top;box-sizing:border-box;margin:1px 2px -1px 0;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;z-index:26}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#ca4a1f;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;background:0 0;color:#aaa;cursor:pointer}#collapse-button:hover{color:#00b9eb}#collapse-button:focus{color:#00b9eb;outline:1px solid transparent;outline-offset:-1px}#collapse-button .collapse-button-icon,#collapse-button .collapse-button-label{display:block;position:absolute;top:0;right:0}#collapse-button .collapse-button-label{top:8px}#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}.folded #collapse-button .collapse-button-icon:after,.rtl #collapse-button .collapse-button-icon:after{transform:rotate(180deg)}.rtl.folded #collapse-button .collapse-button-icon:after{transform:none}#collapse-button .collapse-button-icon:after,#collapse-button .collapse-button-label{transition:all .1s ease-in-out}li#wp-admin-bar-menu-toggle{display:none}.customize-support #menu-appearance a[href="themes.php?page=custom-background"],.customize-support #menu-appearance a[href="themes.php?page=custom-header"]{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 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}.auto-fold #collapse-button .collapse-button-icon:after{transform:rotate(180deg)}.rtl.auto-fold #collapse-button .collapse-button-icon:after{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:normal 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 000000000..4e06ba316 --- /dev/null +++ b/wp-admin/css/admin-menu.css @@ -0,0 +1,928 @@ +#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: 1.3; + 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: 1.4; + 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; + /* Exclude from the transition the outline for Windows High Contrast mode */ + transition: all .1s ease-in-out, outline 0s; +} + +#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: 1.3; + 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; +} + +#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; + box-sizing: border-box; + margin: 1px 0 -1px 2px; + padding: 0 5px; + min-width: 18px; + height: 18px; + border-radius: 9px; + background-color: #ca4a1f; + color: #fff; + font-size: 11px; + line-height: 1.6; + text-align: center; + z-index: 26; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #ca4a1f; + 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; + background: none; + color: #aaa; + cursor: pointer; +} + +#collapse-button:hover { + color: #00b9eb; +} + +#collapse-button:focus { + color: #00b9eb; + /* Only visible in Windows High Contrast mode */ + outline: 1px solid transparent; + outline-offset: -1px; +} + +#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; +} + +#collapse-button .collapse-button-label { + top: 8px; +} + +#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 { + transform: rotate(180deg); +} + +.rtl.folded #collapse-button .collapse-button-icon:after { + 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 { + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button .collapse-button-icon:after { + 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 000000000..61fac660e --- /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 6px;margin:-6px 0 0 -8px;float:left}.icon16:before{color:#82878c;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"}.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:1.3;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 none;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:1.4;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,outline 0s}#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:1.3;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}#adminmenu .wp-menu-image img{padding:9px 0 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:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#f1f1f1;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#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}#adminmenu div.separator{height:2px;padding:0}#adminmenu .wp-submenu .wp-submenu-head{color:#fff;font-weight:400;font-size:14px;padding:8px 4px 8px 11px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0 none}#adminmenu .awaiting-mod,#adminmenu .update-plugins{display:inline-block;vertical-align:top;box-sizing:border-box;margin:1px 0 -1px 2px;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;z-index:26}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#ca4a1f;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;background:0 0;color:#aaa;cursor:pointer}#collapse-button:hover{color:#00b9eb}#collapse-button:focus{color:#00b9eb;outline:1px solid transparent;outline-offset:-1px}#collapse-button .collapse-button-icon,#collapse-button .collapse-button-label{display:block;position:absolute;top:0;left:0}#collapse-button .collapse-button-label{top:8px}#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}.folded #collapse-button .collapse-button-icon:after,.rtl #collapse-button .collapse-button-icon:after{transform:rotate(180deg)}.rtl.folded #collapse-button .collapse-button-icon:after{transform:none}#collapse-button .collapse-button-icon:after,#collapse-button .collapse-button-label{transition:all .1s ease-in-out}li#wp-admin-bar-menu-toggle{display:none}.customize-support #menu-appearance a[href="themes.php?page=custom-background"],.customize-support #menu-appearance a[href="themes.php?page=custom-header"]{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 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}.auto-fold #collapse-button .collapse-button-icon:after{transform:rotate(180deg)}.rtl.auto-fold #collapse-button .collapse-button-icon:after{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:normal 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 000000000..57aa83b2a --- /dev/null +++ b/wp-admin/css/code-editor-rtl.css @@ -0,0 +1,76 @@ +.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, 0.3); + color: inherit; +} + +.CodeMirror { + text-align: right; +} + +.wrap .CodeMirror .CodeMirror-linenumber { + color: #666; +} 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 000000000..b3cb2d959 --- /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: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,.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}.wrap .CodeMirror .CodeMirror-linenumber{color:#666} \ 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 000000000..27db1fd33 --- /dev/null +++ b/wp-admin/css/code-editor.css @@ -0,0 +1,76 @@ +.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, 0.3); + color: inherit; +} + +.CodeMirror { + text-align: left; +} + +.wrap .CodeMirror .CodeMirror-linenumber { + color: #666; +} diff --git a/wp-admin/css/code-editor.min.css b/wp-admin/css/code-editor.min.css new file mode 100644 index 000000000..1032975f2 --- /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: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,.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}.wrap .CodeMirror .CodeMirror-linenumber{color:#666} \ 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 000000000..0c68c5a8e --- /dev/null +++ b/wp-admin/css/color-picker-rtl.css @@ -0,0 +1,174 @@ +/* rtl:ignore */ +.wp-color-picker { + width: 80px; + direction: ltr; +} + +.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: 2; + 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-container { + display: inline-block; +} + +.wp-color-result:focus { + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +.wp-color-result:active { + /* See Trac ticket #39662 */ + 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: 1.4; + 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, 0.8); +} + +.iris-picker .iris-palette:focus { + box-shadow: + inset 0 0 5px rgba(0, 0, 0, 0.4), + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, 0.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: 1.15; + } + + .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: 2.1; + } + + .wp-customizer .wp-picker-container .wp-color-result.button { + font-size: 13px; + line-height: 2; + } + + .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: 2.1; + } + + .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 000000000..e64776033 --- /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;direction:ltr}.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:2;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-container{display:inline-block}.wp-color-result:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.wp-color-result:active{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}.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:1.4;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:1.15}.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:2.1}.wp-customizer .wp-picker-container .wp-color-result.button{font-size:13px;line-height:2}.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:2.1}.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 000000000..29540153a --- /dev/null +++ b/wp-admin/css/color-picker.css @@ -0,0 +1,174 @@ +/* rtl:ignore */ +.wp-color-picker { + width: 80px; + direction: ltr; +} + +.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: 2; + 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-container { + display: inline-block; +} + +.wp-color-result:focus { + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +.wp-color-result:active { + /* See Trac ticket #39662 */ + 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: 1.4; + 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, 0.8); +} + +.iris-picker .iris-palette:focus { + box-shadow: + inset 0 0 5px rgba(0, 0, 0, 0.4), + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, 0.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: 1.15; + } + + .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: 2.1; + } + + .wp-customizer .wp-picker-container .wp-color-result.button { + font-size: 13px; + line-height: 2; + } + + .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: 2.1; + } + + .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 000000000..40ca1a3e1 --- /dev/null +++ b/wp-admin/css/color-picker.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.wp-color-picker{width:80px;direction:ltr}.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:2;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-container{display:inline-block}.wp-color-result:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.wp-color-result:active{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}.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:1.4;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:1.15}.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:2.1}.wp-customizer .wp-picker-container .wp-color-result.button{font-size:13px;line-height:2}.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:2.1}.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 000000000..4827ed6cc --- /dev/null +++ b/wp-admin/css/colors/_admin.scss @@ -0,0 +1,511 @@ + +@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 { + 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 .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: recovery mode */ + +#wpadminbar #wp-admin-bar-recovery-mode { + color: $adminbar-recovery-exit-text; + background-color: $adminbar-recovery-exit-background; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: $adminbar-recovery-exit-text; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover >.ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: $adminbar-recovery-exit-text; + background-color: $adminbar-recovery-exit-background-alt; +} + +/* 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 000000000..7a764ab00 --- /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 000000000..91b57cce2 --- /dev/null +++ b/wp-admin/css/colors/_variables.scss @@ -0,0 +1,62 @@ +// 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; + +$adminbar-recovery-exit-text: $menu-bubble-text !default; +$adminbar-recovery-exit-background: $menu-bubble-background !default; +$adminbar-recovery-exit-background-alt: mix(black, $adminbar-recovery-exit-background, 10%) !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 000000000..dcc4072d9 --- /dev/null +++ b/wp-admin/css/colors/blue/colors-rtl.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #e1a948; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #cb9841; +} + +/* 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 000000000..12bfff7ea --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#e1a948}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#cb9841}#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}.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 000000000..d3f9ac88e --- /dev/null +++ b/wp-admin/css/colors/blue/colors.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #e1a948; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #cb9841; +} + +/* 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 000000000..cc3cf458e --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#e1a948}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#cb9841}#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}.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 000000000..b254d73a8 --- /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 000000000..faf3783ec --- /dev/null +++ b/wp-admin/css/colors/coffee/colors-rtl.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #9ea476; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #8e946a; +} + +/* 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 000000000..eb41fb4c3 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#9ea476}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#8e946a}#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 000000000..34f588106 --- /dev/null +++ b/wp-admin/css/colors/coffee/colors.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #9ea476; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #8e946a; +} + +/* 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 000000000..c1df58852 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#9ea476}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#8e946a}#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 000000000..49bee9be9 --- /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 000000000..a76c49e31 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors-rtl.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #d46f15; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #bf6413; +} + +/* 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 000000000..f7d9f026f --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#d46f15}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#bf6413}#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 000000000..4c6422da1 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #d46f15; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #bf6413; +} + +/* 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 000000000..4ea247820 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#d46f15}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#bf6413}#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 000000000..8d1457077 --- /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 000000000..3394d7a21 --- /dev/null +++ b/wp-admin/css/colors/light/colors-rtl.css @@ -0,0 +1,537 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #d64e07; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #c14606; +} + +/* 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 000000000..2307a6b53 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#d64e07}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#c14606}#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}.theme-filter.current,.theme-section.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: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 000000000..1d02d6d0d --- /dev/null +++ b/wp-admin/css/colors/light/colors.css @@ -0,0 +1,537 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #d64e07; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #c14606; +} + +/* 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 000000000..d2010d7d2 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#d64e07}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#c14606}#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}.theme-filter.current,.theme-section.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: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 000000000..ab4230b9d --- /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 000000000..fd176831c --- /dev/null +++ b/wp-admin/css/colors/midnight/colors-rtl.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #69a8bb; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #5f97a8; +} + +/* 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 000000000..486212045 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#69a8bb}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#5f97a8}#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 000000000..00b249a1a --- /dev/null +++ b/wp-admin/css/colors/midnight/colors.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #69a8bb; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #5f97a8; +} + +/* 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 000000000..b24c0ab59 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#69a8bb}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#5f97a8}#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 000000000..591232b70 --- /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 000000000..5ea4e96fe --- /dev/null +++ b/wp-admin/css/colors/ocean/colors-rtl.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #aa9d88; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #998d7a; +} + +/* 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 000000000..8c9b472cf --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#aa9d88}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#998d7a}#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 000000000..7977609d3 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #aa9d88; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #998d7a; +} + +/* 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 000000000..d752e006f --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#aa9d88}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#998d7a}#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 000000000..d52339c6f --- /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 000000000..3b048e470 --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors-rtl.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #ccaf0b; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #b89e0a; +} + +/* 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 000000000..316630c43 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#ccaf0b}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#b89e0a}#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 000000000..f51cf28e1 --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors.css @@ -0,0 +1,519 @@ +/*! 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 { + 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 .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: recovery mode */ +#wpadminbar #wp-admin-bar-recovery-mode { + color: #fff; + background-color: #ccaf0b; +} + +#wpadminbar #wp-admin-bar-recovery-mode .ab-item, +#wpadminbar #wp-admin-bar-recovery-mode a.ab-item { + color: #fff; +} + +#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover > .ab-item, +#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, +#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { + color: #fff; + background-color: #b89e0a; +} + +/* 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 000000000..c052f3bd7 --- /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}.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 .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 #wp-admin-bar-recovery-mode{color:#fff;background-color:#ccaf0b}#wpadminbar #wp-admin-bar-recovery-mode .ab-item,#wpadminbar #wp-admin-bar-recovery-mode a.ab-item{color:#fff}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#b89e0a}#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 000000000..5dd8d82fc --- /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 000000000..860d71b4e --- /dev/null +++ b/wp-admin/css/common-rtl.css @@ -0,0 +1,4041 @@ +/* 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 */ +} + +.button .screen-reader-text { + height: auto; /* Fixes a Safari+VoiceOver bug, see ticket #42006 */ +} + +.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, 0.6); + text-decoration: none; + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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, 0.8); + /* Only visible in Windows High Contrast mode */ + outline: 1px solid transparent; +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +#adminmenu a:focus { + box-shadow: none; + /* Only visible in Windows High Contrast mode */ + outline: 1px solid transparent; + outline-offset: -1px; +} + +.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.block-editor-no-js { + padding-right: 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: 1.3; +} + +.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; +} + +.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); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; +} + +.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, 0.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: 2.1; +} + +#delete-link { + line-height: 2.1; + vertical-align: middle; + text-align: right; + margin-right: 8px; +} + +#delete-link a { + text-decoration: none; +} + +#publishing-action { + text-align: left; + float: left; + line-height: 1.9; +} + +#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; + 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: 1.4; +} + +.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: 2.2; +} + +.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, 0.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 { + 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: 1.4; + 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; +} + +#dismissed-updates li > p { + margin-top: 0; +} + +#dismiss, +#undismiss { + margin-right: 0.5em; +} + +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 { + float: left; + 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, 0.025); +} + +#screen-options-link-wrap, +#contextual-help-link-wrap { + float: right; + margin: 0 6px 0 0; +} + +#screen-meta-links .screen-meta-toggle { + position: relative; + top: 0; +} + +#screen-meta-links .show-settings { + border: 1px solid #ddd; + border-top: none; + border-bottom-color: #ccc; + height: auto; + margin-bottom: 0; + padding: 3px 16px 3px 6px; + background: #fff; + border-radius: 0; + color: #72777c; + line-height: 1.7; + box-shadow: none; +} + +#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:focus { + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +#screen-meta-links .show-settings:active { + 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: 2.35; +} + +#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: 2.2; + 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: 1.4; + 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.6; +} + +.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 { + padding: 0 12px 12px; + line-height: 1.4; + font-size: 13px; +} + +.stuffbox .inside { + padding: 0; + line-height: 1.4; + font-size: 13px; + margin-top: 0; +} + +.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: 1.55; +} + +#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: 1.71428571; + 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: 1.33; +} + +.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: 1.5; +} + +#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.4; +} + +.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: 1.55; /* 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 { + color: #222; + border-bottom: 1px solid #eee; +} + +#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: 0.15; +} + +.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; + text-align: center; + color: #ffb900; +} + +.star-rating .star-full:before { + content: "\f155"; +} + +.star-rating .star-half:before { + content: "\f459"; +} + +.rtl .star-rating .star-half { + 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: 2.4; + 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: 1.68; + 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: 1.3; + 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-top: 10px; + 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 .notice { + margin: 5px 0 15px; +} + +#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: 2; + 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; + 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, 0.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, 0.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: 1.8; + 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, 0.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, +.widget.widget-in-question .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: 1.55; + 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; + } + + .screen-reader-shortcut:focus { + top: -39px; + } + + 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 { + clear: both; + 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 */ + #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: 2.1; + } + + .filter-drawer .filter-group-feature label { + margin-right: 32px; + } + + .wp-filter .button.drawer-toggle { + font-size: 13px; + line-height: 2; + height: 28px; + } + + /* Fix help tab columns for smaller screens */ + #screen-meta #contextual-help-wrap { + overflow: visible; + } + + #screen-meta #contextual-help-back, + #screen-meta .contextual-help-sidebar { + display: none; + } + + #screen-meta .contextual-help-tabs { + clear: both; + width: 100%; + float: none; + } + + #screen-meta .contextual-help-tabs ul { + margin: 0 0 1em; + padding: 1em 0 0; + } + + #screen-meta .contextual-help-tabs .active { + margin: 0; + } + + #screen-meta .contextual-help-tabs-wrap { + clear: both; + max-width: 100%; + float: none; + } + + #screen-meta-links { + margin-bottom: 20px; /* Add margins beneath links for better spacing between boxes and elements */ + } +} + +/* 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; + } + + .screen-reader-shortcut:focus { + top: 7px; + } + + #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, + nav .nav-tab { + margin: 10px 0 0 10px; + border-bottom: 1px solid #ccc; + } + + .nav-tab-active:hover, + .nav-tab-active:focus, + .nav-tab-active:focus:active { + 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 000000000..3cfecc01c --- /dev/null +++ b/wp-admin/css/common-rtl.min.css @@ -0,0 +1,9 @@ +/*! This file is auto-generated */ +#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}.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}.button .screen-reader-text{height:auto}.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:2px solid transparent;outline-offset:-2px}.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;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}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);outline:1px solid transparent}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus{box-shadow:none;outline:1px solid transparent;outline-offset:-1px}.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{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-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 outside}ul.ul-square{list-style:square outside}ol.ol-decimal{list-style:decimal outside}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-right:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.ltr{direction:ltr}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr;unicode-bidi:embed}code,kbd{padding:3px 5px 2px 5px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:right;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#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 *{word-wrap:break-word}.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}.widefat tbody th.check-column{padding:9px 0 22px}.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}.wrap.block-editor-no-js{padding-right: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 0;line-height:1.3}.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,.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}.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}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8);outline:2px solid transparent}.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}.ac_match,.subsubsub a.current{color:#000}.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;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}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}.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: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;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;word-wrap:break-word}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#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:2.1}#delete-link{line-height:2.1;vertical-align:middle;text-align:right;margin-right:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:left;float:left;line-height:1.9}#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}.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;box-sizing:border-box;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-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: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 .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: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;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}.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{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,.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:1.4}.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:2.2}.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,.04);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: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}.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:normal 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{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:1.4;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)}ul#dismissed-updates{display:none}#dismissed-updates li>p{margin-top:0}#dismiss,#undismiss{margin-right:.5em}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-right:2em}.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}.button.updated-message{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}@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{float:left;margin:0 0 0 20px}#screen-meta{display:none;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:right;margin:0 6px 0 0}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:1px solid #ddd;border-top:none;border-bottom-color:#ccc;height:auto;margin-bottom:0;padding:3px 16px 3px 6px;background:#fff;border-radius:0;color:#72777c;line-height:1.7;box-shadow:none}#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:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}#screen-meta-links .show-settings:active{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"}.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}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:2.35}#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:2.2;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:1.4;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,.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.6}.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;box-sizing:border-box}.widefat td,.widefat th{color:#555}.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat ol,.widefat p,.widefat ul{color:#32373c}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:initial;margin-right:2em}.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}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:right}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{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: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 .hndle,.stuffbox .hndle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.postbox .inside{padding:0 12px 12px;line-height:1.4;font-size:13px}.stuffbox .inside{padding:0;line-height:1.4;font-size:13px;margin-top:0}.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}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.plugins .name{font-weight:600}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:1.55}#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:1.71428571;font-weight:600;background:#e5e5e5;color:#555;text-decoration:none;white-space:nowrap}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:1.33}.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;visibility:hidden;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:1.5}#templateside ul li a{text-decoration:none}.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}.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;display:block}.importers{font-size:16px;width:auto}.importers td{padding-left:14px;line-height:1.4}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.importer-action,.importer-desc,.importer-title{display:block}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:1.55;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{color:#222;border-bottom:1px solid #eee}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:.15}.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}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-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;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{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:2.4;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:1.68;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:1.3;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-top:10px;margin-left:250px;padding:10px 26px;margin-bottom:-99939px;padding-bottom:99999px}#section-holder .notice{margin:5px 0 15px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:left;position:relative;top:0;left:0;padding:16px;margin-bottom:-99939px;padding-bottom:99999px;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{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{direction:ltr}#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{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:2;max-width:85%}#plugin-information-title.with-banner div.vignette{height:100px}#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:#fcfcfc url(../images/spinner.gif) no-repeat center;background-size:20px 20px;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:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;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}@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:normal 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}.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%;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}[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;position:relative}[role=treeitem] li{position:relative}.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}#docs-list,#template textarea{direction:ltr}.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;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:1.8;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: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 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,.widget.widget-in-question .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:1.55;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) repeat-x bottom left;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){html.wp-toolbar{padding-top:46px}.screen-reader-shortcut:focus{top:-39px}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{clear:both;margin-left:12px;margin-right:0}#col-left,#col-right{float:none;width:auto}#col-left .col-wrap,#col-right .col-wrap{padding:0}#collapse-menu,.post-format-select{display:none!important}.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 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}.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}#template .CodeMirror,#template textarea{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 .notice,#template>div{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 .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 .alignright label{display:block}.fileedit-sub #plugin,.fileedit-sub #theme{margin-right:0;max-width:70%}.fileedit-sub input[type=submit]{margin-bottom:0;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:2.1}.filter-drawer .filter-group-feature label{margin-right:32px}.wp-filter .button.drawer-toggle{font-size:13px;line-height:2;height:28px}#screen-meta #contextual-help-wrap{overflow:visible}#screen-meta #contextual-help-back,#screen-meta .contextual-help-sidebar{display:none}#screen-meta .contextual-help-tabs{clear:both;width:100%;float:none}#screen-meta .contextual-help-tabs ul{margin:0 0 1em;padding:1em 0 0}#screen-meta .contextual-help-tabs .active{margin:0}#screen-meta .contextual-help-tabs-wrap{clear:both;max-width:100%;float:none}#screen-meta-links{margin-bottom:20px}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}.screen-reader-shortcut:focus{top:7px}#wpbody{padding-top:46px}div#post-body.metabox-holder.columns-1{overflow-x:hidden}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:0}h1 .nav-tab,h2 .nav-tab,h3 .nav-tab,nav .nav-tab{margin:10px 0 0 10px;border-bottom:1px solid #ccc}.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{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 000000000..83101367e --- /dev/null +++ b/wp-admin/css/common.css @@ -0,0 +1,4041 @@ +/* 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 */ +} + +.button .screen-reader-text { + height: auto; /* Fixes a Safari+VoiceOver bug, see ticket #42006 */ +} + +.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, 0.6); + text-decoration: none; + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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, 0.8); + /* Only visible in Windows High Contrast mode */ + outline: 1px solid transparent; +} + +.ie8 a:focus { + outline: #5b9dd9 solid 1px; +} + +#adminmenu a:focus { + box-shadow: none; + /* Only visible in Windows High Contrast mode */ + outline: 1px solid transparent; + outline-offset: -1px; +} + +.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.block-editor-no-js { + padding-left: 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: 1.3; +} + +.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; +} + +.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); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; +} + +.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, 0.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: 2.1; +} + +#delete-link { + line-height: 2.1; + vertical-align: middle; + text-align: left; + margin-left: 8px; +} + +#delete-link a { + text-decoration: none; +} + +#publishing-action { + text-align: right; + float: right; + line-height: 1.9; +} + +#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; + 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: 1.4; +} + +.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: 2.2; +} + +.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, 0.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 { + 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: 1.4; + 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; +} + +#dismissed-updates li > p { + margin-top: 0; +} + +#dismiss, +#undismiss { + margin-left: 0.5em; +} + +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 { + float: right; + 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, 0.025); +} + +#screen-options-link-wrap, +#contextual-help-link-wrap { + float: left; + margin: 0 0 0 6px; +} + +#screen-meta-links .screen-meta-toggle { + position: relative; + top: 0; +} + +#screen-meta-links .show-settings { + border: 1px solid #ddd; + border-top: none; + border-bottom-color: #ccc; + height: auto; + margin-bottom: 0; + padding: 3px 6px 3px 16px; + background: #fff; + border-radius: 0; + color: #72777c; + line-height: 1.7; + box-shadow: none; +} + +#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:focus { + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +#screen-meta-links .show-settings:active { + 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: 2.35; +} + +#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: 2.2; + 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: 1.4; + 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.6; +} + +.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 { + padding: 0 12px 12px; + line-height: 1.4; + font-size: 13px; +} + +.stuffbox .inside { + padding: 0; + line-height: 1.4; + font-size: 13px; + margin-top: 0; +} + +.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: 1.55; +} + +#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: 1.71428571; + 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: 1.33; +} + +.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: 1.5; +} + +#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.4; +} + +.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: 1.55; /* 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 { + color: #222; + border-bottom: 1px solid #eee; +} + +#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: 0.15; +} + +.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; + text-align: center; + color: #ffb900; +} + +.star-rating .star-full:before { + content: "\f155"; +} + +.star-rating .star-half:before { + content: "\f459"; +} + +.rtl .star-rating .star-half { + 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: 2.4; + 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: 1.68; + 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: 1.3; + 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-top: 10px; + 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 .notice { + margin: 5px 0 15px; +} + +#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: 2; + 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; + 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, 0.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, 0.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: 1.8; + 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, 0.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, +.widget.widget-in-question .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: 1.55; + 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; + } + + .screen-reader-shortcut:focus { + top: -39px; + } + + 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 { + clear: both; + 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 */ + #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: 2.1; + } + + .filter-drawer .filter-group-feature label { + margin-left: 32px; + } + + .wp-filter .button.drawer-toggle { + font-size: 13px; + line-height: 2; + height: 28px; + } + + /* Fix help tab columns for smaller screens */ + #screen-meta #contextual-help-wrap { + overflow: visible; + } + + #screen-meta #contextual-help-back, + #screen-meta .contextual-help-sidebar { + display: none; + } + + #screen-meta .contextual-help-tabs { + clear: both; + width: 100%; + float: none; + } + + #screen-meta .contextual-help-tabs ul { + margin: 0 0 1em; + padding: 1em 0 0; + } + + #screen-meta .contextual-help-tabs .active { + margin: 0; + } + + #screen-meta .contextual-help-tabs-wrap { + clear: both; + max-width: 100%; + float: none; + } + + #screen-meta-links { + margin-bottom: 20px; /* Add margins beneath links for better spacing between boxes and elements */ + } +} + +/* 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; + } + + .screen-reader-shortcut:focus { + top: 7px; + } + + #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, + nav .nav-tab { + margin: 10px 10px 0 0; + border-bottom: 1px solid #ccc; + } + + .nav-tab-active:hover, + .nav-tab-active:focus, + .nav-tab-active:focus:active { + 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 000000000..7e1b1b242 --- /dev/null +++ b/wp-admin/css/common.min.css @@ -0,0 +1,9 @@ +/*! This file is auto-generated */ +#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}.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}.button .screen-reader-text{height:auto}.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:2px solid transparent;outline-offset:-2px}.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;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}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);outline:1px solid transparent}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus{box-shadow:none;outline:1px solid transparent;outline-offset:-1px}.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{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-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 outside}ul.ul-square{list-style:square outside}ol.ol-decimal{list-style:decimal outside}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-left:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.ltr{direction:ltr}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr;unicode-bidi:embed}code,kbd{padding:3px 5px 2px 5px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:left;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#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 *{word-wrap:break-word}.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}.widefat tbody th.check-column{padding:9px 0 22px}.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}.wrap.block-editor-no-js{padding-left: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 0;line-height:1.3}.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,.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}.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}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8);outline:2px solid transparent}.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}.ac_match,.subsubsub a.current{color:#000}.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;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}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}.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: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;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;word-wrap:break-word}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#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:2.1}#delete-link{line-height:2.1;vertical-align:middle;text-align:left;margin-left:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:right;float:right;line-height:1.9}#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}.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;box-sizing:border-box;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-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: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 .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: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;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}.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{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,.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:1.4}.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:2.2}.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,.04);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: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}.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:normal 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{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:1.4;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)}ul#dismissed-updates{display:none}#dismissed-updates li>p{margin-top:0}#dismiss,#undismiss{margin-left:.5em}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-left:2em}.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}.button.updated-message{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}@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{float:right;margin:0 20px 0 0}#screen-meta{display:none;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:left;margin:0 0 0 6px}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:1px solid #ddd;border-top:none;border-bottom-color:#ccc;height:auto;margin-bottom:0;padding:3px 6px 3px 16px;background:#fff;border-radius:0;color:#72777c;line-height:1.7;box-shadow:none}#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:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}#screen-meta-links .show-settings:active{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"}.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}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:2.35}#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:2.2;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:1.4;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,.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.6}.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;box-sizing:border-box}.widefat td,.widefat th{color:#555}.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat ol,.widefat p,.widefat ul{color:#32373c}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:initial;margin-left:2em}.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}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:left}#post-body.columns-2 #postbox-container-1{float:right;margin-right:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{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: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 .hndle,.stuffbox .hndle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.postbox .inside{padding:0 12px 12px;line-height:1.4;font-size:13px}.stuffbox .inside{padding:0;line-height:1.4;font-size:13px;margin-top:0}.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}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.plugins .name{font-weight:600}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:1.55}#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:1.71428571;font-weight:600;background:#e5e5e5;color:#555;text-decoration:none;white-space:nowrap}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:1.33}.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;visibility:hidden;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:1.5}#templateside ul li a{text-decoration:none}.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}.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;display:block}.importers{font-size:16px;width:auto}.importers td{padding-right:14px;line-height:1.4}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.importer-action,.importer-desc,.importer-title{display:block}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:1.55;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{color:#222;border-bottom:1px solid #eee}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:.15}.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}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) repeat-x bottom left}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) repeat-x top left;height:17px;float:left}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;transition:color .1s ease-in;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{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:2.4;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:1.68;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:1.3;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-top:10px;margin-right:250px;padding:10px 26px;margin-bottom:-99939px;padding-bottom:99999px}#section-holder .notice{margin:5px 0 15px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:right;position:relative;top:0;right:0;padding:16px;margin-bottom:-99939px;padding-bottom:99999px;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{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{direction:ltr}#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{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:2;max-width:85%}#plugin-information-title.with-banner div.vignette{height:100px}#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:#fcfcfc url(../images/spinner.gif) no-repeat center;background-size:20px 20px;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:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;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}@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:normal 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}.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%;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}[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;position:relative}[role=treeitem] li{position:relative}.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}#docs-list,#template textarea{direction:ltr}.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;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:1.8;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: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 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,.widget.widget-in-question .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:1.55;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) repeat-x bottom left;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){html.wp-toolbar{padding-top:46px}.screen-reader-shortcut:focus{top:-39px}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{clear:both;margin-right:12px;margin-left:0}#col-left,#col-right{float:none;width:auto}#col-left .col-wrap,#col-right .col-wrap{padding:0}#collapse-menu,.post-format-select{display:none!important}.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 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}.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}#template .CodeMirror,#template textarea{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 .notice,#template>div{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 .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 .alignright label{display:block}.fileedit-sub #plugin,.fileedit-sub #theme{margin-left:0;max-width:70%}.fileedit-sub input[type=submit]{margin-bottom:0;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:2.1}.filter-drawer .filter-group-feature label{margin-left:32px}.wp-filter .button.drawer-toggle{font-size:13px;line-height:2;height:28px}#screen-meta #contextual-help-wrap{overflow:visible}#screen-meta #contextual-help-back,#screen-meta .contextual-help-sidebar{display:none}#screen-meta .contextual-help-tabs{clear:both;width:100%;float:none}#screen-meta .contextual-help-tabs ul{margin:0 0 1em;padding:1em 0 0}#screen-meta .contextual-help-tabs .active{margin:0}#screen-meta .contextual-help-tabs-wrap{clear:both;max-width:100%;float:none}#screen-meta-links{margin-bottom:20px}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}.screen-reader-shortcut:focus{top:7px}#wpbody{padding-top:46px}div#post-body.metabox-holder.columns-1{overflow-x:hidden}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:0}h1 .nav-tab,h2 .nav-tab,h3 .nav-tab,nav .nav-tab{margin:10px 10px 0 0;border-bottom:1px solid #ccc}.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{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 000000000..0bfd07df6 --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.css @@ -0,0 +1,2995 @@ +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; + 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, 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: 1.9; +} + +#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 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; + transform: none; +} + +#customize-theme-controls .customize-pane-child { + position: absolute; + top: 0; + right: 0; + visibility: hidden; + height: 0; + max-height: none; + overflow: hidden; + transform: translateX(-100%); +} + +#customize-theme-controls .customize-pane-child.open, +#customize-theme-controls .customize-pane-child.current-panel { + 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; + 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: 2; +} + +.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: 1.3; + margin: 0; +} + +.customize-control-hidden { + margin: 0; +} + +.customize-control-textarea textarea { + width: 100%; + resize: vertical; +} + +.customize-control select { + width: 100%; + height: 28px; + line-height: 2; +} + +.customize-control select[multiple] { + height: auto; +} + +.customize-control-title { + display: block; + font-size: 14px; + line-height: 1.75; + font-weight: 600; + margin-bottom: 4px; +} + +.customize-control-description { + display: block; + font-style: italic; + line-height: 1.4; + 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: 1.6; + 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: 1.6; +} + +.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: 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 { + 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; + 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: 2.2; +} + +#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; +} + +@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 { + 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 .attachment-media-view .button-add-media, +.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: 1.6; +} + +.customize-control .attachment-media-view .button-add-media { + cursor: pointer; + background-color: #edeff0; + color: #32373c; +} + +.customize-control .attachment-media-view .button-add-media:hover { + background-color: #fbfbfc; +} + +.customize-control .attachment-media-view .button-add-media:focus { + background-color: #fbfbfc; + border-style: solid; + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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 { + animation: dice-color-change 3s infinite; +} + +.button-see-me { + animation: bounce .7s 1; + transform-origin: center bottom; +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transform: translate3d(0,0,0); + } + + 40%, 43% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -12px, 0); + } + + 70% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -6px, 0); + } + + 90% { + 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, 0.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); + 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" */ +@keyframes themes-fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.control-panel-themes .customize-themes-full-container.animate { + animation: .6s themes-fade-in 1; +} + +.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count { + animation: .6s themes-fade-in 1; +} + +.control-panel-themes .filter-themes-count { + position: relative; + float: left; + line-height: 2.6; +} + +.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: 1.8; + 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: 2.3; + 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 { + 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: 2.1; + 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, 0.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: 2.5; /* 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: 3.2; + 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 000000000..e1d8c5a23 --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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;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:.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;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}#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_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: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: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.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:1.9}#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: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-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{overflow:visible;width:100%;margin:0;padding:0;box-sizing:border-box;transition:.18s 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;transform:none}#customize-theme-controls .customize-pane-child{position:absolute;top:0;right:0;visibility:hidden;height:0;max-height:none;overflow:hidden;transform:translateX(-100%)}#customize-theme-controls .customize-pane-child.current-panel,#customize-theme-controls .customize-pane-child.open{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;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 -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 .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: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 input[type=checkbox],.customize-control input[type=radio],.customize-control select{line-height:2}.customize-control input[type=email],.customize-control input[type=number],.customize-control input[type=password],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=text],.customize-control input[type=url]{width:100%;line-height:1.3;margin:0}.customize-control-hidden{margin:0}.customize-control-textarea textarea{width:100%;resize:vertical}.customize-control select{width:100%;height:28px;line-height:2}.customize-control select[multiple]{height:auto}.customize-control-title{display:block;font-size:14px;line-height:1.75;font-weight:600;margin-bottom:4px}.customize-control-description{display:block;font-style:italic;line-height:1.4;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:1.6;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:1.6}.customize-control-radio .customize-control-title+.customize-control-description{margin-top:7px}.customize-control-checkbox label,.customize-control-radio 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}.customize-control .thumbnail-image,.customize-control .wp-media-wrapper.wp-video,.customize-control-header .current{line-height:0}.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: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{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;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:2.2}#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 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 .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}@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{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{margin-bottom:0}#customize-control-show_on_front.has-error .customize-control-notifications-container{margin-top:12px}.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: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,.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 .actions .button{margin-top:12px}.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 .button-add-media,.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:1.6}.customize-control .attachment-media-view .button-add-media{cursor:pointer;background-color:#edeff0;color:#32373c}.customize-control .attachment-media-view .button-add-media:hover{background-color:#fbfbfc}.customize-control .attachment-media-view .button-add-media:focus{background-color:#fbfbfc;border-style:solid;border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8);outline:2px solid transparent;outline-offset:-2px}.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-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:1px solid #5b9dd9}.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{animation:dice-color-change 3s infinite}.button-see-me{animation:bounce .7s 1;transform-origin:center bottom}@keyframes bounce{20%,53%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translate3d(0,0,0)}40%,43%{animation-timing-function:cubic-bezier(.755,.050,.855,.060);transform:translate3d(0,-12px,0)}70%{animation-timing-function:cubic-bezier(.755,.050,.855,.060);transform:translate3d(0,-6px,0)}90%{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}#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-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{border-bottom:none}#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 0;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}#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.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,.5);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}@keyframes themes-fade-in{0%{opacity:0}50%{opacity:0}100%{opacity:1}}.control-panel-themes .customize-themes-full-container.animate{animation:.6s themes-fade-in 1}.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count{animation:.6s themes-fade-in 1}.control-panel-themes .filter-themes-count{position:relative;float:left;line-height:2.6}.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;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 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}.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:1.8;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 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}@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:2.3;padding:0 8px 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%}}.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-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,.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}.modal-open .in-themes-panel #customize-controls .wp-full-overlay-sidebar-content{overflow:visible}.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 0;padding:0;padding-bottom: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;margin-right: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;right:-2px;top:0;font:normal 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:normal 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{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:2.1;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:normal 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: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-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=checkbox]+label+br,.customize-control input[type=radio]+label+br{line-height:2.5}.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:3.2;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: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-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 000000000..2c780fbfe --- /dev/null +++ b/wp-admin/css/customize-controls.css @@ -0,0 +1,2995 @@ +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; + 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, 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: 1.9; +} + +#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 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; + transform: none; +} + +#customize-theme-controls .customize-pane-child { + position: absolute; + top: 0; + left: 0; + visibility: hidden; + height: 0; + max-height: none; + overflow: hidden; + transform: translateX(100%); +} + +#customize-theme-controls .customize-pane-child.open, +#customize-theme-controls .customize-pane-child.current-panel { + 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; + 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: 2; +} + +.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: 1.3; + margin: 0; +} + +.customize-control-hidden { + margin: 0; +} + +.customize-control-textarea textarea { + width: 100%; + resize: vertical; +} + +.customize-control select { + width: 100%; + height: 28px; + line-height: 2; +} + +.customize-control select[multiple] { + height: auto; +} + +.customize-control-title { + display: block; + font-size: 14px; + line-height: 1.75; + font-weight: 600; + margin-bottom: 4px; +} + +.customize-control-description { + display: block; + font-style: italic; + line-height: 1.4; + 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: 1.6; + 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: 1.6; +} + +.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: 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 { + 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; + 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: 2.2; +} + +#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; +} + +@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 { + 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 .attachment-media-view .button-add-media, +.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: 1.6; +} + +.customize-control .attachment-media-view .button-add-media { + cursor: pointer; + background-color: #edeff0; + color: #32373c; +} + +.customize-control .attachment-media-view .button-add-media:hover { + background-color: #fbfbfc; +} + +.customize-control .attachment-media-view .button-add-media:focus { + background-color: #fbfbfc; + border-style: solid; + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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 { + animation: dice-color-change 3s infinite; +} + +.button-see-me { + animation: bounce .7s 1; + transform-origin: center bottom; +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transform: translate3d(0,0,0); + } + + 40%, 43% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -12px, 0); + } + + 70% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -6px, 0); + } + + 90% { + 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, 0.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); + 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" */ +@keyframes themes-fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.control-panel-themes .customize-themes-full-container.animate { + animation: .6s themes-fade-in 1; +} + +.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count { + animation: .6s themes-fade-in 1; +} + +.control-panel-themes .filter-themes-count { + position: relative; + float: right; + line-height: 2.6; +} + +.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: 1.8; + 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: 2.3; + 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 { + 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: 2.1; + 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, 0.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: 2.5; /* 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: 3.2; + 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 000000000..f3a08985b --- /dev/null +++ b/wp-admin/css/customize-controls.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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;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:.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;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}#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_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: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: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.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:1.9}#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: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-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{overflow:visible;width:100%;margin:0;padding:0;box-sizing:border-box;transition:.18s 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;transform:none}#customize-theme-controls .customize-pane-child{position:absolute;top:0;left:0;visibility:hidden;height:0;max-height:none;overflow:hidden;transform:translateX(100%)}#customize-theme-controls .customize-pane-child.current-panel,#customize-theme-controls .customize-pane-child.open{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;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 -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 .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: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 input[type=checkbox],.customize-control input[type=radio],.customize-control select{line-height:2}.customize-control input[type=email],.customize-control input[type=number],.customize-control input[type=password],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=text],.customize-control input[type=url]{width:100%;line-height:1.3;margin:0}.customize-control-hidden{margin:0}.customize-control-textarea textarea{width:100%;resize:vertical}.customize-control select{width:100%;height:28px;line-height:2}.customize-control select[multiple]{height:auto}.customize-control-title{display:block;font-size:14px;line-height:1.75;font-weight:600;margin-bottom:4px}.customize-control-description{display:block;font-style:italic;line-height:1.4;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:1.6;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:1.6}.customize-control-radio .customize-control-title+.customize-control-description{margin-top:7px}.customize-control-checkbox label,.customize-control-radio 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}.customize-control .thumbnail-image,.customize-control .wp-media-wrapper.wp-video,.customize-control-header .current{line-height:0}.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: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{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;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:2.2}#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 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 .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}@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{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{margin-bottom:0}#customize-control-show_on_front.has-error .customize-control-notifications-container{margin-top:12px}.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: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,.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 .actions .button{margin-top:12px}.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 .button-add-media,.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:1.6}.customize-control .attachment-media-view .button-add-media{cursor:pointer;background-color:#edeff0;color:#32373c}.customize-control .attachment-media-view .button-add-media:hover{background-color:#fbfbfc}.customize-control .attachment-media-view .button-add-media:focus{background-color:#fbfbfc;border-style:solid;border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8);outline:2px solid transparent;outline-offset:-2px}.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-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:1px solid #5b9dd9}.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{animation:dice-color-change 3s infinite}.button-see-me{animation:bounce .7s 1;transform-origin:center bottom}@keyframes bounce{20%,53%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translate3d(0,0,0)}40%,43%{animation-timing-function:cubic-bezier(.755,.050,.855,.060);transform:translate3d(0,-12px,0)}70%{animation-timing-function:cubic-bezier(.755,.050,.855,.060);transform:translate3d(0,-6px,0)}90%{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}#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-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{border-bottom:none}#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 0;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}#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.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,.5);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}@keyframes themes-fade-in{0%{opacity:0}50%{opacity:0}100%{opacity:1}}.control-panel-themes .customize-themes-full-container.animate{animation:.6s themes-fade-in 1}.in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count{animation:.6s themes-fade-in 1}.control-panel-themes .filter-themes-count{position:relative;float:right;line-height:2.6}.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;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 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}.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:1.8;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 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}@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:2.3;padding:0 8px 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%}}.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-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,.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}.modal-open .in-themes-panel #customize-controls .wp-full-overlay-sidebar-content{overflow:visible}.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 0;padding:0;padding-bottom: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;margin-left: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:normal 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:normal 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{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:2.1;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:normal 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: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-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=checkbox]+label+br,.customize-control input[type=radio]+label+br{line-height:2.5}.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:3.2;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: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-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 000000000..e54a8dd3b --- /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: 2.2; +} + +#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: 400; +} + +#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, 0.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 000000000..2dea51567 --- /dev/null +++ b/wp-admin/css/customize-nav-menus-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#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 0 12px}#customize-theme-controls .customize-control-description.customize-section-title-menu_locations-description{font-style:normal}.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:2.2}#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-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%}.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-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}.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}.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}.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:normal 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: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: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 0;padding:1px 15px 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 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}#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: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:normal 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 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}#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 000000000..145938252 --- /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: 2.2; +} + +#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: 400; +} + +#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, 0.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 000000000..07076bc46 --- /dev/null +++ b/wp-admin/css/customize-nav-menus.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#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 0 12px}#customize-theme-controls .customize-control-description.customize-section-title-menu_locations-description{font-style:normal}.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:2.2}#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-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%}.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-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}.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}.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}.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:normal 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: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: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 0;padding:1px 15px 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 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}#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: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:normal 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 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}#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 000000000..032464654 --- /dev/null +++ b/wp-admin/css/customize-widgets-rtl.css @@ -0,0 +1,483 @@ +.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, 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; +} + +/* Keep rule that is no longer necessary on widgets.php. */ +#available-widgets .widget-action { + display: none; +} + +.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 000000000..56aeaea20 --- /dev/null +++ b/wp-admin/css/customize-widgets-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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}.control-section.control-section-sidebar .accordion-section-content.ui-sortable{overflow:visible}.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 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: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}.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}#available-widgets .widget-action{display:none}.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:normal 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*=like] .widget-title:before,#available-widgets [class*=super] .widget-title:before{content:"\f155";top:-4px}#available-widgets [class*=meta] .widget-title:before{content:"\f120"}#available-widgets [class*=archives] .widget-title:before{content:"\f480";top:-4px}#available-widgets [class*=categor] .widget-title:before{content:"\f318";top:-4px}#available-widgets [class*=chat] .widget-title:before,#available-widgets [class*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before{content:"\f101"}#available-widgets [class*=post] .widget-title:before{content:"\f109"}#available-widgets [class*=page] .widget-title:before{content:"\f105"}#available-widgets [class*=text] .widget-title:before{content:"\f478"}#available-widgets [class*=link] .widget-title:before{content:"\f103"}#available-widgets [class*=search] .widget-title:before{content:"\f179"}#available-widgets [class*=menu] .widget-title:before,#available-widgets [class*=nav] .widget-title:before{content:"\f333"}#available-widgets [class*=tag] .widget-title:before{content:"\f479"}#available-widgets [class*=rss] .widget-title:before{content:"\f303";top:-6px}#available-widgets [class*=calendar] .widget-title:before,#available-widgets [class*=event] .widget-title:before{content:"\f145";top:-4px}#available-widgets [class*=image] .widget-title:before,#available-widgets [class*=instagram] .widget-title:before,#available-widgets [class*=photo] .widget-title:before,#available-widgets [class*=slide] .widget-title:before{content:"\f128"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=tube] .widget-title:before,#available-widgets [class*=video] .widget-title:before{content:"\f126"}#available-widgets [class*=audio] .widget-title:before,#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before{content:"\f127"}#available-widgets [class*=avatar] .widget-title:before,#available-widgets [class*=grofile] .widget-title:before,#available-widgets [class*=login] .widget-title:before,#available-widgets [class*=member] .widget-title:before,#available-widgets [class*=profile] .widget-title:before,#available-widgets [class*=subscriber] .widget-title:before,#available-widgets [class*=user] .widget-title:before{content:"\f110"}#available-widgets [class*=cart] .widget-title:before,#available-widgets [class*=commerce] .widget-title:before,#available-widgets [class*=shop] .widget-title:before{content:"\f174";top:-4px}#available-widgets [class*=firewall] .widget-title:before,#available-widgets [class*=secur] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=poll] .widget-title:before,#available-widgets [class*=stat] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#available-widgets [class*=contact] .widget-title:before,#available-widgets [class*=mail] .widget-title:before,#available-widgets [class*=news] .widget-title:before,#available-widgets [class*=subscribe] .widget-title:before{content:"\f466"}#available-widgets [class*=share] .widget-title:before,#available-widgets [class*=socia] .widget-title:before{content:"\f237"}#available-widgets [class*=lang] .widget-title:before,#available-widgets [class*=translat] .widget-title:before{content:"\f326"}#available-widgets [class*=locat] .widget-title:before,#available-widgets [class*=map] .widget-title:before{content:"\f231"}#available-widgets [class*=download] .widget-title:before{content:"\f316"}#available-widgets [class*=weather] .widget-title:before{content:"\f176";top:-4px}#available-widgets [class*=facebook] .widget-title:before{content:"\f304"}#available-widgets [class*=tweet] .widget-title:before,#available-widgets [class*=twitter] .widget-title:before{content:"\f301"}@media screen and (max-height:700px) and (min-width:981px){.customize-control-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 000000000..d24539e51 --- /dev/null +++ b/wp-admin/css/customize-widgets.css @@ -0,0 +1,483 @@ +.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, 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; +} + +/* Keep rule that is no longer necessary on widgets.php. */ +#available-widgets .widget-action { + display: none; +} + +.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 000000000..14ddf46f8 --- /dev/null +++ b/wp-admin/css/customize-widgets.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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}.control-section.control-section-sidebar .accordion-section-content.ui-sortable{overflow:visible}.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 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: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}.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}#available-widgets .widget-action{display:none}.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:normal 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*=like] .widget-title:before,#available-widgets [class*=super] .widget-title:before{content:"\f155";top:-4px}#available-widgets [class*=meta] .widget-title:before{content:"\f120"}#available-widgets [class*=archives] .widget-title:before{content:"\f480";top:-4px}#available-widgets [class*=categor] .widget-title:before{content:"\f318";top:-4px}#available-widgets [class*=chat] .widget-title:before,#available-widgets [class*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before{content:"\f101"}#available-widgets [class*=post] .widget-title:before{content:"\f109"}#available-widgets [class*=page] .widget-title:before{content:"\f105"}#available-widgets [class*=text] .widget-title:before{content:"\f478"}#available-widgets [class*=link] .widget-title:before{content:"\f103"}#available-widgets [class*=search] .widget-title:before{content:"\f179"}#available-widgets [class*=menu] .widget-title:before,#available-widgets [class*=nav] .widget-title:before{content:"\f333"}#available-widgets [class*=tag] .widget-title:before{content:"\f479"}#available-widgets [class*=rss] .widget-title:before{content:"\f303";top:-6px}#available-widgets [class*=calendar] .widget-title:before,#available-widgets [class*=event] .widget-title:before{content:"\f145";top:-4px}#available-widgets [class*=image] .widget-title:before,#available-widgets [class*=instagram] .widget-title:before,#available-widgets [class*=photo] .widget-title:before,#available-widgets [class*=slide] .widget-title:before{content:"\f128"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=tube] .widget-title:before,#available-widgets [class*=video] .widget-title:before{content:"\f126"}#available-widgets [class*=audio] .widget-title:before,#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before{content:"\f127"}#available-widgets [class*=avatar] .widget-title:before,#available-widgets [class*=grofile] .widget-title:before,#available-widgets [class*=login] .widget-title:before,#available-widgets [class*=member] .widget-title:before,#available-widgets [class*=profile] .widget-title:before,#available-widgets [class*=subscriber] .widget-title:before,#available-widgets [class*=user] .widget-title:before{content:"\f110"}#available-widgets [class*=cart] .widget-title:before,#available-widgets [class*=commerce] .widget-title:before,#available-widgets [class*=shop] .widget-title:before{content:"\f174";top:-4px}#available-widgets [class*=firewall] .widget-title:before,#available-widgets [class*=secur] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=poll] .widget-title:before,#available-widgets [class*=stat] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#available-widgets [class*=contact] .widget-title:before,#available-widgets [class*=mail] .widget-title:before,#available-widgets [class*=news] .widget-title:before,#available-widgets [class*=subscribe] .widget-title:before{content:"\f466"}#available-widgets [class*=share] .widget-title:before,#available-widgets [class*=socia] .widget-title:before{content:"\f237"}#available-widgets [class*=lang] .widget-title:before,#available-widgets [class*=translat] .widget-title:before{content:"\f326"}#available-widgets [class*=locat] .widget-title:before,#available-widgets [class*=map] .widget-title:before{content:"\f231"}#available-widgets [class*=download] .widget-title:before{content:"\f316"}#available-widgets [class*=weather] .widget-title:before{content:"\f176";top:-4px}#available-widgets [class*=facebook] .widget-title:before{content:"\f304"}#available-widgets [class*=tweet] .widget-title:before,#available-widgets [class*=twitter] .widget-title:before{content:"\f301"}@media screen and (max-height:700px) and (min-width:981px){.customize-control-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 000000000..42a7316a8 --- /dev/null +++ b/wp-admin/css/dashboard-rtl.css @@ -0,0 +1,1282 @@ +#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-setup-home:before { + content: "\f102"; + 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: #32373c; +} +.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 { + padding: 10px 0 0; +} + +/* Dashboard Quick Draft - Form styling */ + +#dashboard_quick_press label { + display: inline-block; + margin-bottom: 4px; +} + +#dashboard_quick_press input, +#dashboard_quick_press textarea { + box-sizing: border-box; + margin: 0; +} + +#dashboard-widgets .postbox form .submit { + margin: -39px 0; + float: left; +} + +#description-wrap { + margin-top: 12px; +} + +#quick-press textarea#content { + min-height: 90px; + max-height: 1300px; + margin: 0 0 8px; + padding: 6px 7px; + 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; +} + +/* 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; +} + +/* PHP Nag */ +#dashboard_php_nag .dashicons-warning { + color: #ffb900; + padding-left: 6px; +} + +#dashboard_php_nag.php-insecure .dashicons-warning { + color: #df3232; +} + +#dashboard_php_nag p { + margin: 12px 0; +} + +#dashboard_php_nag h3 { + font-weight: 600; +} + +#dashboard_php_nag .button .dashicons-external { + line-height: 25px; +} + +/* =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 000000000..81cbe50f2 --- /dev/null +++ b/wp-admin/css/dashboard-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#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}#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{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}.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: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 .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-setup-home:before{content:"\f102";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:#32373c}.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}.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}.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{margin:0}body #dashboard-widgets .postbox form .submit{margin:0}.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 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;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_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{padding:10px 0 0}#dashboard_quick_press label{display:inline-block;margin-bottom:4px}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;margin:0}#dashboard-widgets .postbox form .submit{margin:-39px 0;float:left}#description-wrap{margin-top:12px}#quick-press textarea#content{min-height:90px;max-height:1300px;margin:0 0 8px;padding:6px 7px;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 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-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: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}#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 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{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 .button-link,#dashboard-widgets a{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}#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}.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}#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 a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}#dashboard_php_nag .dashicons-warning{color:#ffb900;padding-left:6px}#dashboard_php_nag.php-insecure .dashicons-warning{color:#df3232}#dashboard_php_nag p{margin:12px 0}#dashboard_php_nag h3{font-weight:600}#dashboard_php_nag .button .dashicons-external{line-height:25px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#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}.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 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:.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]{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}} \ 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 000000000..dc8104827 --- /dev/null +++ b/wp-admin/css/dashboard.css @@ -0,0 +1,1282 @@ +#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-setup-home:before { + content: "\f102"; + 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: #32373c; +} +.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 { + padding: 10px 0 0; +} + +/* Dashboard Quick Draft - Form styling */ + +#dashboard_quick_press label { + display: inline-block; + margin-bottom: 4px; +} + +#dashboard_quick_press input, +#dashboard_quick_press textarea { + box-sizing: border-box; + margin: 0; +} + +#dashboard-widgets .postbox form .submit { + margin: -39px 0; + float: right; +} + +#description-wrap { + margin-top: 12px; +} + +#quick-press textarea#content { + min-height: 90px; + max-height: 1300px; + margin: 0 0 8px; + padding: 6px 7px; + 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; +} + +/* 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; +} + +/* PHP Nag */ +#dashboard_php_nag .dashicons-warning { + color: #ffb900; + padding-right: 6px; +} + +#dashboard_php_nag.php-insecure .dashicons-warning { + color: #df3232; +} + +#dashboard_php_nag p { + margin: 12px 0; +} + +#dashboard_php_nag h3 { + font-weight: 600; +} + +#dashboard_php_nag .button .dashicons-external { + line-height: 25px; +} + +/* =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 000000000..57f3bf450 --- /dev/null +++ b/wp-admin/css/dashboard.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#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}#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{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}.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: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 .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-setup-home:before{content:"\f102";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:#32373c}.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}.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}.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{margin:0}body #dashboard-widgets .postbox form .submit{margin:0}.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 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;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_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{padding:10px 0 0}#dashboard_quick_press label{display:inline-block;margin-bottom:4px}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;margin:0}#dashboard-widgets .postbox form .submit{margin:-39px 0;float:right}#description-wrap{margin-top:12px}#quick-press textarea#content{min-height:90px;max-height:1300px;margin:0 0 8px;padding:6px 7px;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 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-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: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}#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 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{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 .button-link,#dashboard-widgets a{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}#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}.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}#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 a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}#dashboard_php_nag .dashicons-warning{color:#ffb900;padding-right:6px}#dashboard_php_nag.php-insecure .dashicons-warning{color:#df3232}#dashboard_php_nag p{margin:12px 0}#dashboard_php_nag h3{font-weight:600}#dashboard_php_nag .button .dashicons-external{line-height:25px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#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}.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 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:.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]{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}} \ 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 000000000..f5d230414 --- /dev/null +++ b/wp-admin/css/deprecated-media-rtl.css @@ -0,0 +1,429 @@ +/* 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; +} + +#media-upload .tablenav-pages a, +#media-upload .tablenav-pages .current { + display: inline-block; + padding: 4px 5px 6px; + font-size: 16px; + line-height: 1; + text-align: center; + text-decoration: none; +} + +#media-upload .tablenav-pages a { + min-width: 17px; + border: 1px solid #ccc; + background: #f7f7f7; +} + +#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 000000000..affd60eb0 --- /dev/null +++ b/wp-admin/css/deprecated-media-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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{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}.image-align-none-label{background:url(../images/align-none.png) no-repeat center left}.image-align-left-label{background:url(../images/align-left.png) no-repeat center left}.image-align-center-label{background:url(../images/align-center.png) no-repeat center left}.image-align-right-label{background:url(../images/align-right.png) no-repeat center left}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#gallery-form .progress,#library-form .progress,.describe.startclosed,.describe.startopen,.insert-gallery{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required,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}#media-upload .tablenav-pages .current,#media-upload .tablenav-pages a{display:inline-block;padding:4px 5px 6px;font-size:16px;line-height:1;text-align:center;text-decoration:none}#media-upload .tablenav-pages a{min-width:17px;border:1px solid #ccc;background:#f7f7f7}#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{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:.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}@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 000000000..22d7a9f56 --- /dev/null +++ b/wp-admin/css/deprecated-media.css @@ -0,0 +1,429 @@ +/* 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; +} + +#media-upload .tablenav-pages a, +#media-upload .tablenav-pages .current { + display: inline-block; + padding: 4px 5px 6px; + font-size: 16px; + line-height: 1; + text-align: center; + text-decoration: none; +} + +#media-upload .tablenav-pages a { + min-width: 17px; + border: 1px solid #ccc; + background: #f7f7f7; +} + +#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 000000000..adec832f6 --- /dev/null +++ b/wp-admin/css/deprecated-media.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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{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}.image-align-none-label{background:url(../images/align-none.png) no-repeat center left}.image-align-left-label{background:url(../images/align-left.png) no-repeat center left}.image-align-center-label{background:url(../images/align-center.png) no-repeat center left}.image-align-right-label{background:url(../images/align-right.png) no-repeat center left}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#gallery-form .progress,#library-form .progress,.describe.startclosed,.describe.startopen,.insert-gallery{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required,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}#media-upload .tablenav-pages .current,#media-upload .tablenav-pages a{display:inline-block;padding:4px 5px 6px;font-size:16px;line-height:1;text-align:center;text-decoration:none}#media-upload .tablenav-pages a{min-width:17px;border:1px solid #ccc;background:#f7f7f7}#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{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:.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}@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 000000000..3ffe87ea1 --- /dev/null +++ b/wp-admin/css/edit-rtl.css @@ -0,0 +1,1651 @@ +#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; + text-align: center; +} + +.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 .stuffbox h2 { + padding: 8px 10px; +} + +#poststuff .inside { + margin: 6px 0 0 0; +} + +#poststuff .stuffbox .inside { + margin: 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-format-icon::before { + display: inline-block; + vertical-align: middle; + height: 20px; + width: 20px; + margin-top: -4px; + margin-left: 7px; + color: #ddd; + font: normal 20px/1 dashicons; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +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: 0; + padding: 2px 0; +} + +.post-format-icon.post-format-standard::before { + content: "\f109"; +} + +.post-format-icon.post-format-image::before { + content: "\f128"; +} + +.post-format-icon.post-format-gallery::before { + content: "\f161"; +} + +.post-format-icon.post-format-audio::before { + content: "\f127"; +} + +.post-format-icon.post-format-video::before { + content: "\f126"; +} + +.post-format-icon.post-format-chat::before { + content: "\f125"; +} + +.post-format-icon.post-format-status::before { + content: "\f130"; +} + +.post-format-icon.post-format-aside::before { + content: "\f123"; +} + +.post-format-icon.post-format-quote::before { + content: "\f122"; +} + +.post-format-icon.post-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 .ajaxtag { + margin-top: 1em; +} + +#poststuff .tagsdiv .howto { + margin: 1em 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; +} + +/* 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; + margin-top: 0; +} + +#namediv.stuffbox .editcomment input { + width: 100%; +} + +#namediv.stuffbox .editcomment.form-table td { + padding: 10px; +} + +#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 +-------------------------------------------------------------- */ + +#qt_content_dfw { + display: none; +} + +.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: transform; + transition-timing-function: ease-in-out; +} + +.focus-on #adminmenuback, +.focus-on #adminmenuwrap { + transform: translateX( 100% ); +} + +.focus-off #adminmenuback, +.focus-off #adminmenuwrap { + transform: translateX( 0 ); + transition-duration: 0.2s; + transition-property: 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 .stuffbox .inside { + padding: 0 0 4px 2px; + } + + #poststuff h3.hndle, /* Back-compat for pre-4.4 */ + #poststuff .stuffbox > h3, /* Back-compat for pre-4.4 */ + #poststuff h2 { + padding: 12px; + } + + #namediv.stuffbox .editcomment.form-table td { + padding: 5px 10px; + } + + .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 000000000..e033c1aa8 --- /dev/null +++ b/wp-admin/css/edit-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments 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: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;border:0 none;padding:0;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-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-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,.04);background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:left;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#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 none}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:solid 1px transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #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%}#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}.ui-tabs-hide,.wp-hidden-children .wp-hidden-child{display:none}#post-body .tagsdiv #newtag{margin-left:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;box-shadow:0 1px 1px rgba(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 #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}.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{display:none}.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 0;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: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;text-align:center}.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 .stuffbox h2{padding:8px 10px}#poststuff .inside{margin:6px 0 0 0}#poststuff .stuffbox .inside{margin: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}.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}#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 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-format-icon::before{display:inline-block;vertical-align:middle;height:20px;width:20px;margin-top:-4px;margin-left:7px;color:#ddd;font:normal 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}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:0;padding:2px 0}.post-format-icon.post-format-standard::before{content:"\f109"}.post-format-icon.post-format-image::before{content:"\f128"}.post-format-icon.post-format-gallery::before{content:"\f161"}.post-format-icon.post-format-audio::before{content:"\f127"}.post-format-icon.post-format-video::before{content:"\f126"}.post-format-icon.post-format-chat::before{content:"\f125"}.post-format-icon.post-format-status::before{content:"\f130"}.post-format-icon.post-format-aside::before{content:"\f123"}.post-format-icon.post-format-quote::before{content:"\f122"}.post-format-icon.post-format-link::before{content:"\f103"}.category-adder{margin-right:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:solid 1px #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=email],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.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 .ajaxtag{margin-top:1em}#poststuff .tagsdiv .howto{margin:1em 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}.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}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{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}.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;margin-top:0}#namediv.stuffbox .editcomment input{width:100%}#namediv.stuffbox .editcomment.form-table td{padding:10px}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 0 5px 3px;vertical-align:middle}#comment-status-radio label{padding:5px 0}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:right;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td,.links-table th{padding:5px 0}.links-table td label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw{display:none}.wp-editor-expand #qt_content_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:transform;transition-timing-function:ease-in-out}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transform:translateX(100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{transform:translateX(0);transition-duration:.2s;transition-property: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:transparent url(../images/resize-2x.gif) no-repeat scroll left bottom;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 none;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 10px}#poststuff .stuffbox .inside{padding:0 0 4px 2px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{padding:12px}#namediv.stuffbox .editcomment.form-table td{padding:5px 10px}.post-format-options{padding-left:0}.post-format-options a{margin-left:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-left:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist>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-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.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 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}.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 000000000..ce62c069a --- /dev/null +++ b/wp-admin/css/edit.css @@ -0,0 +1,1651 @@ +#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; + text-align: center; +} + +.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 .stuffbox h2 { + padding: 8px 10px; +} + +#poststuff .inside { + margin: 6px 0 0 0; +} + +#poststuff .stuffbox .inside { + margin: 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-format-icon::before { + display: inline-block; + vertical-align: middle; + height: 20px; + width: 20px; + margin-top: -4px; + margin-right: 7px; + color: #ddd; + font: normal 20px/1 dashicons; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +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: 0; + padding: 2px 0; +} + +.post-format-icon.post-format-standard::before { + content: "\f109"; +} + +.post-format-icon.post-format-image::before { + content: "\f128"; +} + +.post-format-icon.post-format-gallery::before { + content: "\f161"; +} + +.post-format-icon.post-format-audio::before { + content: "\f127"; +} + +.post-format-icon.post-format-video::before { + content: "\f126"; +} + +.post-format-icon.post-format-chat::before { + content: "\f125"; +} + +.post-format-icon.post-format-status::before { + content: "\f130"; +} + +.post-format-icon.post-format-aside::before { + content: "\f123"; +} + +.post-format-icon.post-format-quote::before { + content: "\f122"; +} + +.post-format-icon.post-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 .ajaxtag { + margin-top: 1em; +} + +#poststuff .tagsdiv .howto { + margin: 1em 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; +} + +/* 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; + margin-top: 0; +} + +#namediv.stuffbox .editcomment input { + width: 100%; +} + +#namediv.stuffbox .editcomment.form-table td { + padding: 10px; +} + +#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 +-------------------------------------------------------------- */ + +#qt_content_dfw { + display: none; +} + +.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: transform; + transition-timing-function: ease-in-out; +} + +.focus-on #adminmenuback, +.focus-on #adminmenuwrap { + transform: translateX( -100% ); +} + +.focus-off #adminmenuback, +.focus-off #adminmenuwrap { + transform: translateX( 0 ); + transition-duration: 0.2s; + transition-property: 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 .stuffbox .inside { + padding: 0 2px 4px 0; + } + + #poststuff h3.hndle, /* Back-compat for pre-4.4 */ + #poststuff .stuffbox > h3, /* Back-compat for pre-4.4 */ + #poststuff h2 { + padding: 12px; + } + + #namediv.stuffbox .editcomment.form-table td { + padding: 5px 10px; + } + + .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 000000000..4bdf3af95 --- /dev/null +++ b/wp-admin/css/edit.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments 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: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;border:0 none;padding:0;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-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-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,.04);background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:right;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#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 none}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:solid 1px transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #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%}#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}.ui-tabs-hide,.wp-hidden-children .wp-hidden-child{display:none}#post-body .tagsdiv #newtag{margin-right:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;box-shadow:0 1px 1px rgba(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 #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}.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{display:none}.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 0;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: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;text-align:center}.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 .stuffbox h2{padding:8px 10px}#poststuff .inside{margin:6px 0 0 0}#poststuff .stuffbox .inside{margin: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}.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}#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 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-format-icon::before{display:inline-block;vertical-align:middle;height:20px;width:20px;margin-top:-4px;margin-right:7px;color:#ddd;font:normal 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}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:0;padding:2px 0}.post-format-icon.post-format-standard::before{content:"\f109"}.post-format-icon.post-format-image::before{content:"\f128"}.post-format-icon.post-format-gallery::before{content:"\f161"}.post-format-icon.post-format-audio::before{content:"\f127"}.post-format-icon.post-format-video::before{content:"\f126"}.post-format-icon.post-format-chat::before{content:"\f125"}.post-format-icon.post-format-status::before{content:"\f130"}.post-format-icon.post-format-aside::before{content:"\f123"}.post-format-icon.post-format-quote::before{content:"\f122"}.post-format-icon.post-format-link::before{content:"\f103"}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:solid 1px #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=email],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.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 .ajaxtag{margin-top:1em}#poststuff .tagsdiv .howto{margin:1em 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}.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}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{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}.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;margin-top:0}#namediv.stuffbox .editcomment input{width:100%}#namediv.stuffbox .editcomment.form-table td{padding:10px}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle}#comment-status-radio label{padding:5px 0}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td,.links-table th{padding:5px 0}.links-table td label{margin-right:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw{display:none}.wp-editor-expand #qt_content_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:transform;transition-timing-function:ease-in-out}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transform:translateX(-100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{transform:translateX(0);transition-duration:.2s;transition-property: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:transparent url(../images/resize-2x.gif) no-repeat scroll right bottom;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 none;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 10px}#poststuff .stuffbox .inside{padding:0 2px 4px 0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{padding:12px}#namediv.stuffbox .editcomment.form-table td{padding:5px 10px}.post-format-options{padding-right:0}.post-format-options a{margin-right:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-right:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist>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-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.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 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}.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 000000000..b7aebadc6 --- /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 000000000..26cc0c401 --- /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 000000000..2bb73bfc7 --- /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 000000000..e2768088a --- /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 000000000..e8e6cddd8 --- /dev/null +++ b/wp-admin/css/forms-rtl.css @@ -0,0 +1,1604 @@ +/* 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); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; +} + +/* 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; +} + +.wp-hide-pw > .dashicons, +.wp-cancel-pw > .dashicons { + position: relative; + top: 3px; +} + +.wp-cancel-pw .dashicons-no { + display: none; +} + +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: -1px 1px 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; +} + +.wp-pwd [type="text"], +.wp-pwd [type="password"] { + margin-bottom: 0; + /* Same height as the buttons */ + line-height: 20px; + min-height: 28px; + max-height: 40px; +} + +#pass1-text, +.show-password #pass1 { + display: none; +} + +#pass1-text::-ms-clear { + display: none; +} + +.show-password #pass1-text { + display: inline-block; +} + +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; + box-sizing: border-box; +} + +/* 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; + transform: skew(-20deg) rotate(-6deg); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +.pressthis-bookmarklet:hover:after { + 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: 600; +} + +.status-label.status-request-pending { + font-weight: 400; + font-style: italic; + color: #6c7781; +} + +.status-label.status-request-failed { + color: #aa0000; + font-weight: 600; +} + +.wp-privacy-request-form { + clear: both; +} + +.wp-privacy-request-form-field { + margin: 1.5em 0; +} + +.wp-privacy-request-form label { + font-weight: 600; + 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"; + 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: 88px; + } + + .wp-pwd button.button { + background: transparent; + border: 1px solid transparent; + box-shadow: none; + line-height: 2; + margin: 0; + padding: 5px 9px; + position: absolute; + left: 0; + top: 0; + } + + .wp-pwd button.wp-hide-pw { + left: 40px; + } + + .wp-pwd button.button:hover, + .wp-pwd button.button:focus { + background: transparent; + } + + .wp-pwd button.button:active { + background: transparent; + box-shadow: none; + transform: none; + } + + .wp-pwd .button .text { + display: none; + } + + .wp-cancel-pw .dashicons-no { + display: inline-block; + } + + .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; + } + .regular-text { + max-width: 100%; + } +} + +@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; + } +} + +@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; + } +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + 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 000000000..5652d5097 --- /dev/null +++ b/wp-admin/css/forms-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +input,textarea{box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],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,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8);outline:2px solid transparent}input[type=email],input[type=url]{direction:ltr}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,.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=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{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(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;padding:3px 5px;border-radius:0}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,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:normal 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: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,.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=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;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}.wp-cancel-pw>.dashicons,.wp-hide-pw>.dashicons{position:relative;top:3px}.wp-cancel-pw .dashicons-no{display:none}#your-profile label+a,label{vertical-align:middle}#your-profile label+a,fieldset label{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:-1px 1px 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-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}.pw-weak{display:none}.indicator-hint{padding-top:8px}.wp-pwd [type=password],.wp-pwd [type=text]{margin-bottom:0;line-height:20px;min-height:28px;max-height:40px}#pass1-text,.show-password #pass1{display:none}#pass1-text::-ms-clear{display:none}.show-password #pass1-text{display:inline-block}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=email].ui-autocomplete-loading,input[type=text].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;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.color-option{cursor:pointer}.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;box-sizing:border-box}.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: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}.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;transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0 0 0;padding:0 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}.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;font-weight:600}.request-filesystem-credentials-form input[type=password],.request-filesystem-credentials-form input[type=text]{display:block}.request-filesystem-credentials-dialog input[type=password],.request-filesystem-credentials-dialog input[type=text]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=private_key],.request-filesystem-credentials-dialog label[for=public_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{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-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 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}.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 tfoot td:first-child,.privacy_requests thead 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,.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:600}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:600}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:600;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";animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-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:normal 30px/1 dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table{box-sizing:border-box}.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=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;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=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:4.375em;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}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=password],.wp-pwd [type=text]{padding-left:88px}.wp-pwd button.button{background:0 0;border:1px solid transparent;box-shadow:none;line-height:2;margin:0;padding:5px 9px;position:absolute;left:0;top:0}.wp-pwd button.wp-hide-pw{left:40px}.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd button.button:active{background:0 0;box-shadow:none;transform:none}.wp-pwd .button .text{display:none}.wp-cancel-pw .dashicons-no{display:inline-block}.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}.regular-text{max-width:100%}}@media only screen and (max-width:768px){.form-field input[type=email],.form-field input[type=password],.form-field input[type=text],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}}@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}}@keyframes rotation{0%{transform:rotate(0)}100%{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 000000000..9c6087858 --- /dev/null +++ b/wp-admin/css/forms.css @@ -0,0 +1,1604 @@ +/* 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); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; +} + +/* 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; +} + +.wp-hide-pw > .dashicons, +.wp-cancel-pw > .dashicons { + position: relative; + top: 3px; +} + +.wp-cancel-pw .dashicons-no { + display: none; +} + +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: -1px 1px 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; +} + +.wp-pwd [type="text"], +.wp-pwd [type="password"] { + margin-bottom: 0; + /* Same height as the buttons */ + line-height: 20px; + min-height: 28px; + max-height: 40px; +} + +#pass1-text, +.show-password #pass1 { + display: none; +} + +#pass1-text::-ms-clear { + display: none; +} + +.show-password #pass1-text { + display: inline-block; +} + +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; + box-sizing: border-box; +} + +/* 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; + transform: skew(20deg) rotate(6deg); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +.pressthis-bookmarklet:hover:after { + 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: 600; +} + +.status-label.status-request-pending { + font-weight: 400; + font-style: italic; + color: #6c7781; +} + +.status-label.status-request-failed { + color: #aa0000; + font-weight: 600; +} + +.wp-privacy-request-form { + clear: both; +} + +.wp-privacy-request-form-field { + margin: 1.5em 0; +} + +.wp-privacy-request-form label { + font-weight: 600; + 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"; + 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: 88px; + } + + .wp-pwd button.button { + background: transparent; + border: 1px solid transparent; + box-shadow: none; + line-height: 2; + margin: 0; + padding: 5px 9px; + position: absolute; + right: 0; + top: 0; + } + + .wp-pwd button.wp-hide-pw { + right: 40px; + } + + .wp-pwd button.button:hover, + .wp-pwd button.button:focus { + background: transparent; + } + + .wp-pwd button.button:active { + background: transparent; + box-shadow: none; + transform: none; + } + + .wp-pwd .button .text { + display: none; + } + + .wp-cancel-pw .dashicons-no { + display: inline-block; + } + + .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; + } + .regular-text { + max-width: 100%; + } +} + +@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; + } +} + +@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; + } +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} diff --git a/wp-admin/css/forms.min.css b/wp-admin/css/forms.min.css new file mode 100644 index 000000000..ed01d940a --- /dev/null +++ b/wp-admin/css/forms.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +input,textarea{box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],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,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8);outline:2px solid transparent}input[type=email],input[type=url]{direction:ltr}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,.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=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{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(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;padding:3px 5px;border-radius:0}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,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:normal 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: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,.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=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;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}.wp-cancel-pw>.dashicons,.wp-hide-pw>.dashicons{position:relative;top:3px}.wp-cancel-pw .dashicons-no{display:none}#your-profile label+a,label{vertical-align:middle}#your-profile label+a,fieldset label{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:-1px 1px 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-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}.pw-weak{display:none}.indicator-hint{padding-top:8px}.wp-pwd [type=password],.wp-pwd [type=text]{margin-bottom:0;line-height:20px;min-height:28px;max-height:40px}#pass1-text,.show-password #pass1{display:none}#pass1-text::-ms-clear{display:none}.show-password #pass1-text{display:inline-block}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=email].ui-autocomplete-loading,input[type=text].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;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.color-option{cursor:pointer}.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;box-sizing:border-box}.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: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}.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;transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0 0 0;padding:0 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}.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;font-weight:600}.request-filesystem-credentials-form input[type=password],.request-filesystem-credentials-form input[type=text]{display:block}.request-filesystem-credentials-dialog input[type=password],.request-filesystem-credentials-dialog input[type=text]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=private_key],.request-filesystem-credentials-dialog label[for=public_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{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-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 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}.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 tfoot td:first-child,.privacy_requests thead 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,.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:600}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:600}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:600;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";animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-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:normal 30px/1 dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table{box-sizing:border-box}.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=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;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=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:4.375em;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}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=password],.wp-pwd [type=text]{padding-right:88px}.wp-pwd button.button{background:0 0;border:1px solid transparent;box-shadow:none;line-height:2;margin:0;padding:5px 9px;position:absolute;right:0;top:0}.wp-pwd button.wp-hide-pw{right:40px}.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd button.button:active{background:0 0;box-shadow:none;transform:none}.wp-pwd .button .text{display:none}.wp-cancel-pw .dashicons-no{display:inline-block}.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}.regular-text{max-width:100%}}@media only screen and (max-width:768px){.form-field input[type=email],.form-field input[type=password],.form-field input[type=text],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}}@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}}@keyframes rotation{0%{transform:rotate(0)}100%{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 000000000..02af27a58 --- /dev/null +++ b/wp-admin/css/ie-rtl.css @@ -0,0 +1,764 @@ +/* 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; +} + +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 000000000..96b34c8f0 --- /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 none;height:0;min-height:0}.wp-editor-wrap .wp-editor-container,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-right:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}#adminmenuback{right:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu{right:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-right:170px}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{right:110px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-right:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#adminmenu li.wp-has-current-submenu .wp-submenu{right:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-right:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 0 4% 3%;cursor:auto}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th{border-top:1px solid #ddd}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{border:1px solid #ddd}#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=button],input[type=reset],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=button].button-large,input[type=reset].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=button].button-small,input[type=reset].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#col-container,#col-left,#col-right,#dragHelper,#editorcontainer,#post-body,#post-status-info,#postdiv,#postdivrich,#poststuff,#the-comment-list .comment-item,#titlediv,#widgets-left,#wpwrap,#wrap,.fileedit-sub,.metabox-holder,.tablenav,.tagchecklist,.widget .widget-top,.widget-control-actions,.widget-liquid-left,.widget-liquid-right,.widgets-sortables{display:block;zoom:100%}p.search-box{position:static;float:left;margin:-3px 0 4px}#widget-list .widget{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}#submitdiv a.button,#submitdiv input,#submitdiv select{position:relative}#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:1px solid #5b9dd9}.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}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,.widget-liquid-right .widget{position:relative}.inactive-sidebar .widget{display:block;float:right}#wpcontent .button-primary-disabled{color:#9fd0d5;background:#298cba}#the-comment-list .unapproved td,#the-comment-list .unapproved tr{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-left:7px;margin-left:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}.login form .input,input[type=password]{font-family:sans-serif}.mce-btn i.mce-i-aligncenter,.mce-btn i.mce-i-alignjustify,.mce-btn i.mce-i-alignleft,.mce-btn i.mce-i-alignright,.mce-btn i.mce-i-blockquote,.mce-btn i.mce-i-bold,.mce-btn i.mce-i-bullist,.mce-btn i.mce-i-charmap,.mce-btn i.mce-i-forecolor,.mce-btn i.mce-i-fullscreen,.mce-btn i.mce-i-help,.mce-btn i.mce-i-hr,.mce-btn i.mce-i-indent,.mce-btn i.mce-i-italic,.mce-btn i.mce-i-link,.mce-btn i.mce-i-ltr,.mce-btn i.mce-i-numlist,.mce-btn i.mce-i-outdent,.mce-btn i.mce-i-pastetext,.mce-btn i.mce-i-pasteword,.mce-btn i.mce-i-redo,.mce-btn i.mce-i-removeformat,.mce-btn i.mce-i-spellchecker,.mce-btn i.mce-i-strikethrough,.mce-btn i.mce-i-underline,.mce-btn i.mce-i-undo,.mce-btn i.mce-i-unlink,.mce-btn i.mce-i-wp-media-library,.mce-btn i.mce-i-wp_adv,.mce-btn i.mce-i-wp_fullscreen,.mce-btn i.mce-i-wp_help,.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page,.mce-close{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;margin-right:0;padding-left:0}.mce-btn i.mce-i-wp_fullscreen,.qt-fullscreen{-ie7-icon:"\e023"}.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page{-ie7-icon:"\e027"}.mce-btn i.mce-i-wp_adv{background-color:#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 .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} \ 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 000000000..00853ab7c --- /dev/null +++ b/wp-admin/css/ie.css @@ -0,0 +1,764 @@ +/* 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; +} + +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 000000000..47ecfda9c --- /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 none;height:0;min-height:0}.wp-editor-wrap .wp-editor-container,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-left:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}#adminmenuback{left:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu{left:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-left:170px}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{left:110px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-left:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#adminmenu li.wp-has-current-submenu .wp-submenu{left:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-left:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 3% 4% 0;cursor:auto}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th{border-top:1px solid #ddd}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{border:1px solid #ddd}#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=button],input[type=reset],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=button].button-large,input[type=reset].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=button].button-small,input[type=reset].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#col-container,#col-left,#col-right,#dragHelper,#editorcontainer,#post-body,#post-status-info,#postdiv,#postdivrich,#poststuff,#the-comment-list .comment-item,#titlediv,#widgets-left,#wpwrap,#wrap,.fileedit-sub,.metabox-holder,.tablenav,.tagchecklist,.widget .widget-top,.widget-control-actions,.widget-liquid-left,.widget-liquid-right,.widgets-sortables{display:block;zoom:100%}p.search-box{position:static;float:right;margin:-3px 0 4px}#widget-list .widget{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}#submitdiv a.button,#submitdiv input,#submitdiv select{position:relative}#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:1px solid #5b9dd9}.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}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,.widget-liquid-right .widget{position:relative}.inactive-sidebar .widget{display:block;float:left}#wpcontent .button-primary-disabled{color:#9fd0d5;background:#298cba}#the-comment-list .unapproved td,#the-comment-list .unapproved tr{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-right:7px;margin-right:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}.login form .input,input[type=password]{font-family:sans-serif}.mce-btn i.mce-i-aligncenter,.mce-btn i.mce-i-alignjustify,.mce-btn i.mce-i-alignleft,.mce-btn i.mce-i-alignright,.mce-btn i.mce-i-blockquote,.mce-btn i.mce-i-bold,.mce-btn i.mce-i-bullist,.mce-btn i.mce-i-charmap,.mce-btn i.mce-i-forecolor,.mce-btn i.mce-i-fullscreen,.mce-btn i.mce-i-help,.mce-btn i.mce-i-hr,.mce-btn i.mce-i-indent,.mce-btn i.mce-i-italic,.mce-btn i.mce-i-link,.mce-btn i.mce-i-ltr,.mce-btn i.mce-i-numlist,.mce-btn i.mce-i-outdent,.mce-btn i.mce-i-pastetext,.mce-btn i.mce-i-pasteword,.mce-btn i.mce-i-redo,.mce-btn i.mce-i-removeformat,.mce-btn i.mce-i-spellchecker,.mce-btn i.mce-i-strikethrough,.mce-btn i.mce-i-underline,.mce-btn i.mce-i-undo,.mce-btn i.mce-i-unlink,.mce-btn i.mce-i-wp-media-library,.mce-btn i.mce-i-wp_adv,.mce-btn i.mce-i-wp_fullscreen,.mce-btn i.mce-i-wp_help,.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page,.mce-close{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;margin-left:0;padding-right:0}.mce-btn i.mce-i-wp_fullscreen,.qt-fullscreen{-ie7-icon:"\e023"}.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page{-ie7-icon:"\e027"}.mce-btn i.mce-i-wp_adv{background-color:#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 .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} \ 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 000000000..e0e77c56a --- /dev/null +++ b/wp-admin/css/install-rtl.css @@ -0,0 +1,374 @@ +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, 0.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; +} + +.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], +#pass-strength-result { + width: 218px; +} + +.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; +} + +.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; +} + + +/* 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 000000000..ff72035db --- /dev/null +++ b/wp-admin/css/install-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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,.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;padding:0;padding-bottom:7px;font-weight:400}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}dl,ol,ul{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;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:0;overflow:hidden;display:block}.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,.07)}input,submit{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}#pass-strength-result,.form-table input[type=email],.form-table input[type=password],.form-table input[type=text],.form-table input[type=url]{width:218px}.form-table th p{font-weight:400}.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}.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}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}:lang(he-il) .rtl input,:lang(he-il) .rtl submit,:lang(he-il) .rtl textarea,:lang(he-il) body.rtl{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}input,textarea{font-size:16px}.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td input[type=url],.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-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:.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 000000000..c67de737f --- /dev/null +++ b/wp-admin/css/install.css @@ -0,0 +1,374 @@ +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, 0.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; +} + +.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], +#pass-strength-result { + width: 218px; +} + +.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; +} + +.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; +} + + +/* 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 000000000..471b34e60 --- /dev/null +++ b/wp-admin/css/install.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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,.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;padding:0;padding-bottom:7px;font-weight:400}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}dl,ol,ul{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;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:0;overflow:hidden;display:block}.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,.07)}input,submit{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}#pass-strength-result,.form-table input[type=email],.form-table input[type=password],.form-table input[type=text],.form-table input[type=url]{width:218px}.form-table th p{font-weight:400}.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}.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}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}:lang(he-il) .rtl input,:lang(he-il) .rtl submit,:lang(he-il) .rtl textarea,:lang(he-il) body.rtl{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}input,textarea{font-size:16px}.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td input[type=url],.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-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:.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 000000000..82ea545f5 --- /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 000000000..3ac11f8e2 --- /dev/null +++ b/wp-admin/css/l10n-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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-style:normal;font-weight:600}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button{padding:0 5px 1px}.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 .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.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 000000000..967fb4c6c --- /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 000000000..6a427f4c3 --- /dev/null +++ b/wp-admin/css/l10n.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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-style:normal;font-weight:600}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button{padding:0 5px 1px}.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 .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.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 000000000..ef8172646 --- /dev/null +++ b/wp-admin/css/list-tables-rtl.css @@ -0,0 +1,2186 @@ +.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 .reply-submit-buttons { + margin-bottom: 0; +} + +#replysubmit .button { + margin-left: 5px; +} + +#replysubmit .spinner { + float: none; + margin: -4px 0 0; +} + +#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, 0.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; +} + +.tablenav-pages .current-page { + margin: 0 0 0 2px; + padding-top: 5px; + padding-bottom: 5px; + font-size: 13px; + text-align: center; +} + +.tablenav .total-pages { + margin-left: 2px; +} + +.tablenav #table-paging { + margin-right: 2px; +} + +.tablenav { + clear: both; + height: 30px; + margin: 6px 0 4px; + vertical-align: middle; +} + +.tablenav.themes { + max-width: 98%; +} + +.tablenav .tablenav-pages { + float: left; + margin: 3px 0 9px; +} + +.tablenav .no-pages, +.tablenav .one-page .pagination-links { + display: none; +} + +.tablenav .tablenav-pages .button, +.tablenav .tablenav-pages .tablenav-pages-navspan { + display: inline-block; + vertical-align: baseline; + min-width: 28px; + min-height: 28px; + margin: 0; + padding: 0 4px; + font-size: 16px; + line-height: 1.5; + text-align: center; +} + +.tablenav .displaying-num { + margin-left: 7px; +} + +.tablenav .one-page .displaying-num { + display: inline-block; + margin: 5px 0; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 0 0 8px; +} + +.wp-filter .actions { + display: inline-block; + vertical-align: middle; +} + +.tablenav .delete { + margin-left: 20px; +} + +/* This view-switcher is still used on multisite. */ +.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, 0.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; +} + +.plugins .plugin-description a, +.plugins .plugin-update a, +.updates-table .plugin-title a { + text-decoration: underline; +} + +.plugins tr.paused th.check-column { + border-right: 4px solid #d54e21; +} + +.plugins tr.paused th, +.plugins tr.paused td { + background-color: #fef7f1; +} + +.plugins tr.paused .plugin-title, +.plugins .paused .dashicons-warning { + color: #dc3232; +} + +.plugins .paused .error-display p, +.plugins .paused .error-display code { + font-size: 90%; + font-style: italic; + color: rgb( 0, 0, 0, 0.7 ); +} + +.plugins .resume-link { + color: #dc3232; +} + +.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"; + animation: rotation 2s infinite linear; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + 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) and ( max-width: 2299px ) { + .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; + } +} + +@media screen and (min-width: 2300px) { + .plugin-card { + width: 25%; + width: calc( 25% - 12px ); + } + + .plugin-card:nth-child(odd) { + clear: none; + margin-right: 8px; + } + + .plugin-card:nth-child(even) { + margin-left: 8px; + } + + .plugin-card:nth-child(4n+1) { + clear: both; + margin-right: 0; + } + + .plugin-card:nth-child(4n) { + 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 .column-compatibility .compatibility-incompatible:before { + content: "\f158"; + color: #c62d2d; +} + +.plugin-card .column-compatibility .compatibility-compatible:before { + content: "\f147"; + color: #31843f; +} + +.plugin-card .notice { + margin: 20px 20px 0 20px; +} + +.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%; + 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 .tablenav-pages .button, + .tablenav .tablenav-pages .tablenav-pages-navspan { + min-width: 44px; + padding: 12px 8px; + font-size: 18px; + line-height: 1; + } + + .tablenav-pages .pagination-links .current-page { + min-width: 44px; + padding: 12px 6px; + font-size: 16px; + line-height: 18px; + } + + /* 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; + } + + /* Comment author hidden via Screen Options */ + .fixed .column-author.hidden ~ .column-comment .comment-author { + display: none; + } + + #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; + } + + /* Make row actions more easy to select on mobile */ + body:not(.plugins-php) .row-actions { + display: -ms-grid; + display: grid; + -ms-grid-columns: auto auto auto; + grid-template-columns: auto auto auto; + color: transparent; + } + + .row-actions span { + padding: 4px 0; + } + + .row-actions span a, + .row-actions span .button-link { + display: inline-block; + padding: 4px 0; + } + + .row-actions span.approve:before, + .row-actions span.unapprove:before { + content: "| "; + } + + /* 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 */ + } + + /* Plugin description hidden via Screen Options */ + #wpbody-content .wp-list-table.plugins .desc.hidden { + display: none; + } + + #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; + } + + /* Drop row actions to two columns on a small screen */ + .row-actions:not(.plugins-php) { + -ms-grid-columns: auto auto; + grid-template-columns: auto auto; + } + + .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 000000000..3ef7343bc --- /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 .reply-submit-buttons{margin-bottom:0}#replysubmit .button{margin-left:5px}#replysubmit .spinner{float:none;margin:-4px 0 0}#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: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}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 none}#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: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.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: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 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 .current-page{margin:0 0 0 2px;padding-top:5px;padding-bottom:5px;font-size:13px;text-align:center}.tablenav .total-pages{margin-left:2px}.tablenav #table-paging{margin-right:2px}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:left;margin:3px 0 9px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages .button,.tablenav .tablenav-pages .tablenav-pages-navspan{display:inline-block;vertical-align:baseline;min-width:28px;min-height:28px;margin:0;padding:0 4px;font-size:16px;line-height:1.5;text-align:center}.tablenav .displaying-num{margin-left:7px}.tablenav .one-page .displaying-num{display:inline-block;margin:5px 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 .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: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}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;padding:2px 0 0;position:relative;right:-9999em}.rtl .row-actions a{display:inline-block}.row-actions .network_active,.row-actions .network_only{color:#000}.comment-item:hover .row-actions,.mobile .row-actions,.no-js .row-actions,.row-actions.visible,tr:hover .row-actions{position:static}.row-actions-visible{padding:2px 0 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:right;margin:0;padding:0;width:100%}#wpbody-content .inline-edit-row fieldset .inline-edit-col,tr.inline-edit-row td{padding:0 .5em}#wpbody-content .quick-edit-row-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}.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}#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 span.checkbox-title,.inline-edit-row fieldset span.title{font-style:italic}.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{height:12em;border:solid 1px #ddd;overflow-y:scroll;padding:0 5px;margin:0;background-color:#fff}#bulk-titles{display:block;height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist input,.inline-edit-row fieldset ul.cat-checklist li{margin:0;position:relative}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-style:normal;font-size:11px}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}.quick-edit-row-post fieldset label.inline-edit-status{float:right}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:right;height:18px;margin:0 -2px 0 3px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}.plugins tbody,.plugins tbody th.check-column{padding:8px 2px 0 0}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}.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,.plugins td,.plugins th{color:#000}.plugins tr{background:#fff}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ol,.plugins .desc ul{margin:0 2em 0 0}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px;padding:0}.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}.plugins .plugin-description a,.plugins .plugin-update a,.updates-table .plugin-title a{text-decoration:underline}.plugins tr.paused th.check-column{border-right:4px solid #d54e21}.plugins tr.paused td,.plugins tr.paused th{background-color:#fef7f1}.plugins .paused .dashicons-warning,.plugins tr.paused .plugin-title{color:#dc3232}.plugins .paused .error-display code,.plugins .paused .error-display p{font-size:90%;font-style:italic;color:rgb(0,0,0,.7)}.plugins .resume-link{color:#dc3232}.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";animation:rotation 2s infinite linear}@keyframes rotation{0%{transform:rotate(0)}100%{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) and (max-width:2299px){.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}}@media screen and (min-width:2300px){.plugin-card{width:25%;width:calc(25% - 12px)}.plugin-card:nth-child(odd){clear:none;margin-right:8px}.plugin-card:nth-child(even){margin-left:8px}.plugin-card:nth-child(4n+1){clear:both;margin-right:0}.plugin-card:nth-child(4n){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: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 .column-compatibility .compatibility-incompatible:before{content:"\f158";color:#c62d2d}.plugin-card .column-compatibility .compatibility-compatible:before{content:"\f147";color:#31843f}.plugin-card .notice{margin:20px 20px 0 20px}.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){.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 .view-switch,.tablenav.top .actions{display:none}.view-switch a{width:36px;height:36px;line-height:33px}.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%;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 .tablenav-pages .button,.tablenav .tablenav-pages .tablenav-pages-navspan{min-width:44px;padding:12px 8px;font-size:18px;line-height:1}.tablenav-pages .pagination-links .current-page{min-width:44px;padding:12px 6px;font-size:16px;line-height:18px}.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%}.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}.fixed .column-author.hidden~.column-comment .comment-author{display:none}#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}.column-comments .post-com-count-wrapper,.column-response .post-com-count-wrapper{white-space:normal}.column-comments .post-com-count-wrapper>a,.column-response .post-com-count-wrapper>a{display:block}.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}body:not(.plugins-php) .row-actions{display:-ms-grid;display:grid;-ms-grid-columns:auto auto auto;grid-template-columns:auto auto auto;color:transparent}.row-actions span{padding:4px 0}.row-actions span .button-link,.row-actions span a{display:inline-block;padding:4px 0}.row-actions span.approve:before,.row-actions span.unapprove:before{content:"| "}#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%}#edithead label{display:block}#bulk-titles div{margin:.8em .3em}#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 .desc.hidden{display:none}#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 #the-list tr td{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 tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:none}.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}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;margin-left:0;width:100%}}@media screen and (max-width:480px){.tablenav-pages .current-page{margin:0}.row-actions:not(.plugins-php){-ms-grid-columns:auto auto;grid-template-columns:auto auto}.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 000000000..91b1a2c9c --- /dev/null +++ b/wp-admin/css/list-tables.css @@ -0,0 +1,2186 @@ +.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 .reply-submit-buttons { + margin-bottom: 0; +} + +#replysubmit .button { + margin-right: 5px; +} + +#replysubmit .spinner { + float: none; + margin: -4px 0 0; +} + +#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, 0.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; +} + +.tablenav-pages .current-page { + margin: 0 2px 0 0; + padding-top: 5px; + padding-bottom: 5px; + font-size: 13px; + text-align: center; +} + +.tablenav .total-pages { + margin-right: 2px; +} + +.tablenav #table-paging { + margin-left: 2px; +} + +.tablenav { + clear: both; + height: 30px; + margin: 6px 0 4px; + vertical-align: middle; +} + +.tablenav.themes { + max-width: 98%; +} + +.tablenav .tablenav-pages { + float: right; + margin: 3px 0 9px; +} + +.tablenav .no-pages, +.tablenav .one-page .pagination-links { + display: none; +} + +.tablenav .tablenav-pages .button, +.tablenav .tablenav-pages .tablenav-pages-navspan { + display: inline-block; + vertical-align: baseline; + min-width: 28px; + min-height: 28px; + margin: 0; + padding: 0 4px; + font-size: 16px; + line-height: 1.5; + text-align: center; +} + +.tablenav .displaying-num { + margin-right: 7px; +} + +.tablenav .one-page .displaying-num { + display: inline-block; + margin: 5px 0; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 8px 0 0; +} + +.wp-filter .actions { + display: inline-block; + vertical-align: middle; +} + +.tablenav .delete { + margin-right: 20px; +} + +/* This view-switcher is still used on multisite. */ +.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, 0.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; +} + +.plugins .plugin-description a, +.plugins .plugin-update a, +.updates-table .plugin-title a { + text-decoration: underline; +} + +.plugins tr.paused th.check-column { + border-left: 4px solid #d54e21; +} + +.plugins tr.paused th, +.plugins tr.paused td { + background-color: #fef7f1; +} + +.plugins tr.paused .plugin-title, +.plugins .paused .dashicons-warning { + color: #dc3232; +} + +.plugins .paused .error-display p, +.plugins .paused .error-display code { + font-size: 90%; + font-style: italic; + color: rgb( 0, 0, 0, 0.7 ); +} + +.plugins .resume-link { + color: #dc3232; +} + +.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"; + animation: rotation 2s infinite linear; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + 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) and ( max-width: 2299px ) { + .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; + } +} + +@media screen and (min-width: 2300px) { + .plugin-card { + width: 25%; + width: calc( 25% - 12px ); + } + + .plugin-card:nth-child(odd) { + clear: none; + margin-left: 8px; + } + + .plugin-card:nth-child(even) { + margin-right: 8px; + } + + .plugin-card:nth-child(4n+1) { + clear: both; + margin-left: 0; + } + + .plugin-card:nth-child(4n) { + 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 .column-compatibility .compatibility-incompatible:before { + content: "\f158"; + color: #c62d2d; +} + +.plugin-card .column-compatibility .compatibility-compatible:before { + content: "\f147"; + color: #31843f; +} + +.plugin-card .notice { + margin: 20px 20px 0 20px; +} + +.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%; + 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 .tablenav-pages .button, + .tablenav .tablenav-pages .tablenav-pages-navspan { + min-width: 44px; + padding: 12px 8px; + font-size: 18px; + line-height: 1; + } + + .tablenav-pages .pagination-links .current-page { + min-width: 44px; + padding: 12px 6px; + font-size: 16px; + line-height: 18px; + } + + /* 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; + } + + /* Comment author hidden via Screen Options */ + .fixed .column-author.hidden ~ .column-comment .comment-author { + display: none; + } + + #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; + } + + /* Make row actions more easy to select on mobile */ + body:not(.plugins-php) .row-actions { + display: -ms-grid; + display: grid; + -ms-grid-columns: auto auto auto; + grid-template-columns: auto auto auto; + color: transparent; + } + + .row-actions span { + padding: 4px 0; + } + + .row-actions span a, + .row-actions span .button-link { + display: inline-block; + padding: 4px 0; + } + + .row-actions span.approve:before, + .row-actions span.unapprove:before { + content: "| "; + } + + /* 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 */ + } + + /* Plugin description hidden via Screen Options */ + #wpbody-content .wp-list-table.plugins .desc.hidden { + display: none; + } + + #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; + } + + /* Drop row actions to two columns on a small screen */ + .row-actions:not(.plugins-php) { + -ms-grid-columns: auto auto; + grid-template-columns: auto auto; + } + + .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 000000000..fef0dba2b --- /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 .reply-submit-buttons{margin-bottom:0}#replysubmit .button{margin-right:5px}#replysubmit .spinner{float:none;margin:-4px 0 0}#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: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}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 none}#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: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.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: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 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 .current-page{margin:0 2px 0 0;padding-top:5px;padding-bottom:5px;font-size:13px;text-align:center}.tablenav .total-pages{margin-right:2px}.tablenav #table-paging{margin-left:2px}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:right;margin:3px 0 9px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages .button,.tablenav .tablenav-pages .tablenav-pages-navspan{display:inline-block;vertical-align:baseline;min-width:28px;min-height:28px;margin:0;padding:0 4px;font-size:16px;line-height:1.5;text-align:center}.tablenav .displaying-num{margin-right:7px}.tablenav .one-page .displaying-num{display:inline-block;margin:5px 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 .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: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}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;padding:2px 0 0;position:relative;left:-9999em}.rtl .row-actions a{display:inline-block}.row-actions .network_active,.row-actions .network_only{color:#000}.comment-item:hover .row-actions,.mobile .row-actions,.no-js .row-actions,.row-actions.visible,tr:hover .row-actions{position:static}.row-actions-visible{padding:2px 0 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:left;margin:0;padding:0;width:100%}#wpbody-content .inline-edit-row fieldset .inline-edit-col,tr.inline-edit-row td{padding:0 .5em}#wpbody-content .quick-edit-row-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}.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}#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 span.checkbox-title,.inline-edit-row fieldset span.title{font-style:italic}.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{height:12em;border:solid 1px #ddd;overflow-y:scroll;padding:0 5px;margin:0;background-color:#fff}#bulk-titles{display:block;height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist input,.inline-edit-row fieldset ul.cat-checklist li{margin:0;position:relative}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-style:normal;font-size:11px}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}.quick-edit-row-post fieldset label.inline-edit-status{float:left}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:left;height:18px;margin:0 3px 0 -2px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}.plugins tbody,.plugins tbody th.check-column{padding:8px 0 0 2px}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}.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,.plugins td,.plugins th{color:#000}.plugins tr{background:#fff}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ol,.plugins .desc ul{margin:0 0 0 2em}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px;padding:0}.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}.plugins .plugin-description a,.plugins .plugin-update a,.updates-table .plugin-title a{text-decoration:underline}.plugins tr.paused th.check-column{border-left:4px solid #d54e21}.plugins tr.paused td,.plugins tr.paused th{background-color:#fef7f1}.plugins .paused .dashicons-warning,.plugins tr.paused .plugin-title{color:#dc3232}.plugins .paused .error-display code,.plugins .paused .error-display p{font-size:90%;font-style:italic;color:rgb(0,0,0,.7)}.plugins .resume-link{color:#dc3232}.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";animation:rotation 2s infinite linear}@keyframes rotation{0%{transform:rotate(0)}100%{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) and (max-width:2299px){.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}}@media screen and (min-width:2300px){.plugin-card{width:25%;width:calc(25% - 12px)}.plugin-card:nth-child(odd){clear:none;margin-left:8px}.plugin-card:nth-child(even){margin-right:8px}.plugin-card:nth-child(4n+1){clear:both;margin-left:0}.plugin-card:nth-child(4n){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: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 .column-compatibility .compatibility-incompatible:before{content:"\f158";color:#c62d2d}.plugin-card .column-compatibility .compatibility-compatible:before{content:"\f147";color:#31843f}.plugin-card .notice{margin:20px 20px 0 20px}.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){.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 .view-switch,.tablenav.top .actions{display:none}.view-switch a{width:36px;height:36px;line-height:33px}.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%;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 .tablenav-pages .button,.tablenav .tablenav-pages .tablenav-pages-navspan{min-width:44px;padding:12px 8px;font-size:18px;line-height:1}.tablenav-pages .pagination-links .current-page{min-width:44px;padding:12px 6px;font-size:16px;line-height:18px}.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%}.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}.fixed .column-author.hidden~.column-comment .comment-author{display:none}#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}.column-comments .post-com-count-wrapper,.column-response .post-com-count-wrapper{white-space:normal}.column-comments .post-com-count-wrapper>a,.column-response .post-com-count-wrapper>a{display:block}.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}body:not(.plugins-php) .row-actions{display:-ms-grid;display:grid;-ms-grid-columns:auto auto auto;grid-template-columns:auto auto auto;color:transparent}.row-actions span{padding:4px 0}.row-actions span .button-link,.row-actions span a{display:inline-block;padding:4px 0}.row-actions span.approve:before,.row-actions span.unapprove:before{content:"| "}#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%}#edithead label{display:block}#bulk-titles div{margin:.8em .3em}#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 .desc.hidden{display:none}#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 #the-list tr td{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 tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:none}.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}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;margin-right:0;width:100%}}@media screen and (max-width:480px){.tablenav-pages .current-page{margin:0}.row-actions:not(.plugins-php){-ms-grid-columns:auto auto;grid-template-columns:auto auto}.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 000000000..398ae6ecd --- /dev/null +++ b/wp-admin/css/login-rtl.css @@ -0,0 +1,311 @@ +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, 0.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 { + position: relative; +} + +.login .input.password-input { + margin: 0; +} + +.login .input::-ms-clear { + display: none; +} + +.login .pw-weak { + margin-bottom: 15px; +} + +.login .button.button-secondary { + background: transparent; + border: 1px solid transparent; + box-shadow: none; + font-size: 14px; + line-height: 2; + height: auto; + margin: 0; + padding: 5px 9px; + position: absolute; + left: 0; + top: 0; +} + +.login .button.button-secondary:hover { + background: transparent; +} + +.login .button.button-secondary:focus { + background: transparent; + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +.login .button.button-secondary:active { + background: transparent; + box-shadow: none; + transform: none; +} + +.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 { + 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: 5px; + margin: 2px 0 16px 6px; +} + +.login-action-rp form .input, +.login-action-rp input[type="text"] { + padding: 5px 5px 5px 45px; +} + +.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 000000000..4cb87aedc --- /dev/null +++ b/wp-admin/css/login-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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}a{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{position:relative}.login .input.password-input{margin:0}.login .input::-ms-clear{display:none}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{background:0 0;border:1px solid transparent;box-shadow:none;font-size:14px;line-height:2;height:auto;margin:0;padding:5px 9px;position:absolute;left:0;top:0}.login .button.button-secondary:hover{background:0 0}.login .button.button-secondary:focus{background:0 0;border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.login .button.button-secondary:active{background:0 0;box-shadow:none;transform:none}.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,.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{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:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px 0}.login #nav{margin:24px 0 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:5px;margin:2px 0 16px 6px}.login-action-rp form .input,.login-action-rp input[type=text]{padding:5px 5px 5px 45px}.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;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}} \ 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 000000000..4b7c1c893 --- /dev/null +++ b/wp-admin/css/login.css @@ -0,0 +1,311 @@ +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, 0.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 { + position: relative; +} + +.login .input.password-input { + margin: 0; +} + +.login .input::-ms-clear { + display: none; +} + +.login .pw-weak { + margin-bottom: 15px; +} + +.login .button.button-secondary { + background: transparent; + border: 1px solid transparent; + box-shadow: none; + font-size: 14px; + line-height: 2; + height: auto; + margin: 0; + padding: 5px 9px; + position: absolute; + right: 0; + top: 0; +} + +.login .button.button-secondary:hover { + background: transparent; +} + +.login .button.button-secondary:focus { + background: transparent; + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +.login .button.button-secondary:active { + background: transparent; + box-shadow: none; + transform: none; +} + +.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 { + 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: 5px; + margin: 2px 6px 16px 0; +} + +.login-action-rp form .input, +.login-action-rp input[type="text"] { + padding: 5px 45px 5px 5px; +} + +.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 000000000..1616c3eda --- /dev/null +++ b/wp-admin/css/login.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +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}a{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{position:relative}.login .input.password-input{margin:0}.login .input::-ms-clear{display:none}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{background:0 0;border:1px solid transparent;box-shadow:none;font-size:14px;line-height:2;height:auto;margin:0;padding:5px 9px;position:absolute;right:0;top:0}.login .button.button-secondary:hover{background:0 0}.login .button.button-secondary:focus{background:0 0;border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.login .button.button-secondary:active{background:0 0;box-shadow:none;transform:none}.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,.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{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:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px 0}.login #nav{margin:24px 0 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:5px;margin:2px 6px 16px 0}.login-action-rp form .input,.login-action-rp input[type=text]{padding:5px 45px 5px 5px}.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;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}} \ 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 000000000..34fa15a66 --- /dev/null +++ b/wp-admin/css/media-rtl.css @@ -0,0 +1,1290 @@ +/*------------------------------------------------------------------------------ + 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 button.dismiss { + 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 { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, 0.8); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +#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; + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -6px; +} + +.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, +.edit-attachment-frame .edit-media-header .left:focus, +.edit-attachment-frame .edit-media-header .right:focus { + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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 { + content: "\f345"; +} + +.edit-attachment-frame .edit-media-header .right: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 .details-image.icon { + background: none; +} + +.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 .attachment-alt-text { + margin-bottom: 5px; +} + +.wp_attachment_details .attachment-alt-text-description { + margin-top: 5px; +} + +.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; + 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; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; +} + +.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 000000000..6fd758355 --- /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}.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 .startclosed,.media-item .startopen{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,.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 #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 button.dismiss{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{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:2px solid transparent;outline-offset:-2px}#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:.7;filter:alpha(opacity=70);z-index:100100}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px}.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.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-menu,.media-frame.mode-grid .media-frame-router,.media-frame.mode-grid .media-frame-title{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,.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: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: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 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:2px solid transparent;outline-offset:-6px}.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:normal 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}.edit-attachment-frame .edit-media-header .left:focus,.edit-attachment-frame .edit-media-header .right:focus,.upload-php .media-modal-close:focus{outline:2px solid transparent;outline-offset:-2px}.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{content:"\f345"}.edit-attachment-frame .edit-media-header .right: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 .details-image.icon{background:0 0}.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 .attachment-alt-text{margin-bottom:5px}.wp_attachment_details .attachment-alt-text-description{margin-top:5px}.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:transparent url(../images/spinner.gif) no-repeat center;background-size:20px 20px;transform:translateZ(0)}.no-float{float:none}.imgedit-settings .disabled,.media-disabled{color:#a0a5aa}.A1B1{overflow:hidden}.A1B1 .button,.wp_attachment_image .button{float:right}.no-js .wp_attachment_image .button{display:none}.A1B1 .spinner,.wp_attachment_image .spinner{float:right}.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:.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;box-shadow:0 0 3px rgba(0,115,170,.8);outline:2px solid transparent}.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 000000000..9f4d862c6 --- /dev/null +++ b/wp-admin/css/media.css @@ -0,0 +1,1290 @@ +/*------------------------------------------------------------------------------ + 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 button.dismiss { + 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 { + box-shadow: + 0 0 0 1px #5b9dd9, + 0 0 2px 1px rgba(30, 140, 190, 0.8); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +#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; + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -6px; +} + +.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, +.edit-attachment-frame .edit-media-header .left:focus, +.edit-attachment-frame .edit-media-header .right:focus { + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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 { + content: "\f341"; +} + +.edit-attachment-frame .edit-media-header .right: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 .details-image.icon { + background: none; +} + +.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 .attachment-alt-text { + margin-bottom: 5px; +} + +.wp_attachment_details .attachment-alt-text-description { + margin-top: 5px; +} + +.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; + 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; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; +} + +.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 000000000..6fdad9652 --- /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}.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 .startclosed,.media-item .startopen{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,.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 #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 button.dismiss{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{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:2px solid transparent;outline-offset:-2px}#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:.7;filter:alpha(opacity=70);z-index:100100}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px}.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.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-menu,.media-frame.mode-grid .media-frame-router,.media-frame.mode-grid .media-frame-title{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,.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: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: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 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:2px solid transparent;outline-offset:-6px}.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:normal 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}.edit-attachment-frame .edit-media-header .left:focus,.edit-attachment-frame .edit-media-header .right:focus,.upload-php .media-modal-close:focus{outline:2px solid transparent;outline-offset:-2px}.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{content:"\f341"}.edit-attachment-frame .edit-media-header .right: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 .details-image.icon{background:0 0}.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 .attachment-alt-text{margin-bottom:5px}.wp_attachment_details .attachment-alt-text-description{margin-top:5px}.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:transparent url(../images/spinner.gif) no-repeat center;background-size:20px 20px;transform:translateZ(0)}.no-float{float:none}.imgedit-settings .disabled,.media-disabled{color:#a0a5aa}.A1B1{overflow:hidden}.A1B1 .button,.wp_attachment_image .button{float:left}.no-js .wp_attachment_image .button{display:none}.A1B1 .spinner,.wp_attachment_image .spinner{float:left}.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:.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;box-shadow:0 0 3px rgba(0,115,170,.8);outline:2px solid transparent}.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 000000000..7ee534179 --- /dev/null +++ b/wp-admin/css/nav-menus-rtl.css @@ -0,0 +1,905 @@ +/* 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%; +} + +#menu-management .menu-edit { + margin-bottom: 20px; +} + +.nav-menus-php #post-body { + padding: 0 10px; + border-top: 1px solid #fff; + border-bottom: 1px solid #ddd; + background: #fff; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; + background: #f5f5f5; +} + +#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; +} + +.nav-menus-php #post-body-content .post-body-plain { + margin-bottom: 0; +} + +#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.5; + 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: 2.4; + 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: 1.6; + 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: 9px; /* Must use the same value used by the dragged item .menu-item-bar */ +} + +.menu .sortable-placeholder { + height: 35px; + width: 410px; + margin-top: 9px; /* Must use the same value used by the dragged item .menu-item-bar */ +} + +/* 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: 1.5; +} + +.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: 1.5; +} + +.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, 0.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: 2.1; +} + +.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: 2.1; +} + +.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 #nav-menu-header .major-publishing-actions .publishing-action { + padding-top: 1em; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 2.1; + } + + .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 000000000..02ed192c0 --- /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}.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}#menu-management-liquid{float:right;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-left:20px;margin-top:-3px;width:100%}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px;border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px;background:#f5f5f5}#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}.nav-menus-php #post-body-content .post-body-plain{margin-bottom:0}#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-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;font-size:12px;margin-right:20px;margin-top:5px}.button-primary.right,.button-secondary.right,.button.right{float:left}.list-controls{float:right;margin-top:5px}.add-to-menu{float:left}.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 0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:right;margin-top:5px;padding-left:5px}.menu-item-textbox{width:180px}.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;margin-bottom:5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-left:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;padding:.1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5;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:2.4;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:1.6;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:9px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:9px}.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:1.5}.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: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:1.5}.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}.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}.nav-menus-php .major-publishing-actions{clear:both;padding:10px 0;line-height:2.1}.nav-menus-php .major-publishing-actions .publishing-action{text-align:left;float:left}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:right;line-height:2.1}.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}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 #nav-menu-header .major-publishing-actions .publishing-action{padding-top:1em}.nav-menus-php .delete-action{font-size:14px;line-height:2.1}.description-wide,.menu-item-bar .menu-item-handle,.menu-item-settings{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%}.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:.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 000000000..214b80620 --- /dev/null +++ b/wp-admin/css/nav-menus.css @@ -0,0 +1,905 @@ +/* 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%; +} + +#menu-management .menu-edit { + margin-bottom: 20px; +} + +.nav-menus-php #post-body { + padding: 0 10px; + border-top: 1px solid #fff; + border-bottom: 1px solid #ddd; + background: #fff; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; + background: #f5f5f5; +} + +#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; +} + +.nav-menus-php #post-body-content .post-body-plain { + margin-bottom: 0; +} + +#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.5; + 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: 2.4; + 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: 1.6; + 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: 9px; /* Must use the same value used by the dragged item .menu-item-bar */ +} + +.menu .sortable-placeholder { + height: 35px; + width: 410px; + margin-top: 9px; /* Must use the same value used by the dragged item .menu-item-bar */ +} + +/* 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: 1.5; +} + +.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: 1.5; +} + +.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, 0.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: 2.1; +} + +.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: 2.1; +} + +.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 #nav-menu-header .major-publishing-actions .publishing-action { + padding-top: 1em; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 2.1; + } + + .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 000000000..5bc44533a --- /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}.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}#menu-management-liquid{float:left;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px;border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px;background:#f5f5f5}#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}.nav-menus-php #post-body-content .post-body-plain{margin-bottom:0}#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-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;font-size:12px;margin-left:20px;margin-top:5px}.button-primary.right,.button-secondary.right,.button.right{float:right}.list-controls{float:left;margin-top:5px}.add-to-menu{float:right}.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 0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px}.menu-item-textbox{width:180px}.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;margin-bottom:5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-right:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;padding:.1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5;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:2.4;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:1.6;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:9px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:9px}.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:1.5}.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: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:1.5}.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}.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}.nav-menus-php .major-publishing-actions{clear:both;padding:10px 0;line-height:2.1}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:left;line-height:2.1}.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}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 #nav-menu-header .major-publishing-actions .publishing-action{padding-top:1em}.nav-menus-php .delete-action{font-size:14px;line-height:2.1}.description-wide,.menu-item-bar .menu-item-handle,.menu-item-settings{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%}.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:.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 000000000..14984abbf --- /dev/null +++ b/wp-admin/css/revisions-rtl.css @@ -0,0 +1,601 @@ +/*------------------------------------------------------------------------------ + 11.2 - Post Revisions +------------------------------------------------------------------------------*/ +.revisions-control-frame, +.revisions-diff-frame { + position: relative; +} + +.revisions-diff-frame { + top: 10px; +} + +.revisions-controls { + padding-top: 40px; + 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); + overflow: hidden; +} + +.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: 2px; +} + +.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; + 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; + 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); + 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; + } + + .revisions-buttons { + overflow: hidden; + margin-bottom: 15px; + } + + .revisions-controls, + .comparing-two-revisions .revisions-controls { + height: 170px; + } + + .revisions-tooltip { + bottom: 130px; + z-index: 2; + } + + .diff-meta { + overflow: hidden; + } + + table.diff { + -ms-word-break: break-all; + word-break: break-all; + word-wrap: break-word; + } + + .diff-meta input.restore-revision { + margin-top: 0; + } +} diff --git a/wp-admin/css/revisions-rtl.min.css b/wp-admin/css/revisions-rtl.min.css new file mode 100644 index 000000000..24709f90a --- /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-diff-frame{top:10px}.revisions-controls{padding-top:40px;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);overflow:hidden}.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:2px}.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;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,.1)}.arrow.top{top:-16px;bottom:auto}.arrow.left{right:20%}.arrow:after{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;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);transform:translateY(1px)}.wp-slider .ui-slider-handle:before{background:0 0;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.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}.revisions-buttons{overflow:hidden;margin-bottom:15px}.comparing-two-revisions .revisions-controls,.revisions-controls{height:170px}.revisions-tooltip{bottom:130px;z-index:2}.diff-meta{overflow:hidden}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}.diff-meta input.restore-revision{margin-top:0}} \ 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 000000000..2069b4fe6 --- /dev/null +++ b/wp-admin/css/revisions.css @@ -0,0 +1,601 @@ +/*------------------------------------------------------------------------------ + 11.2 - Post Revisions +------------------------------------------------------------------------------*/ +.revisions-control-frame, +.revisions-diff-frame { + position: relative; +} + +.revisions-diff-frame { + top: 10px; +} + +.revisions-controls { + padding-top: 40px; + 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); + overflow: hidden; +} + +.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: 2px; +} + +.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; + 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; + 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); + 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; + } + + .revisions-buttons { + overflow: hidden; + margin-bottom: 15px; + } + + .revisions-controls, + .comparing-two-revisions .revisions-controls { + height: 170px; + } + + .revisions-tooltip { + bottom: 130px; + z-index: 2; + } + + .diff-meta { + overflow: hidden; + } + + table.diff { + -ms-word-break: break-all; + word-break: break-all; + word-wrap: break-word; + } + + .diff-meta input.restore-revision { + margin-top: 0; + } +} diff --git a/wp-admin/css/revisions.min.css b/wp-admin/css/revisions.min.css new file mode 100644 index 000000000..1484fe9aa --- /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-diff-frame{top:10px}.revisions-controls{padding-top:40px;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);overflow:hidden}.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:2px}.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;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,.1)}.arrow.top{top:-16px;bottom:auto}.arrow.left{left:20%}.arrow:after{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;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);transform:translateY(1px)}.wp-slider .ui-slider-handle:before{background:0 0;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.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}.revisions-buttons{overflow:hidden;margin-bottom:15px}.comparing-two-revisions .revisions-controls,.revisions-controls{height:170px}.revisions-tooltip{bottom:130px;z-index:2}.diff-meta{overflow:hidden}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}.diff-meta input.restore-revision{margin-top:0}} \ No newline at end of file diff --git a/wp-admin/css/site-health-rtl.css b/wp-admin/css/site-health-rtl.css new file mode 100644 index 000000000..7c6243621 --- /dev/null +++ b/wp-admin/css/site-health-rtl.css @@ -0,0 +1,454 @@ +.site-health #wpcontent, +.site-health.auto-fold #wpcontent { + padding-right: 0; +} + +/* Emulates .wrap h1 styling */ +.health-check-header h1 { + display: inline-block; + font-weight: 600; + margin: 1rem 0.8rem; + font-size: 23px; + padding: 9px 0 4px 0; + line-height: 1.3; +} + +.health-check-body h2 { + padding: 1rem 0; + line-height: 1.4; +} + +.health-check-body h3 { + padding: 0; + font-weight: 400; +} + +.health-check-header { + text-align: center; + margin: 0 0 1rem; + background: #fff; + border-bottom: 1px solid #e2e4e7; +} + +.health-check-title-section { + display: flex; + align-items: center; + justify-content: center; + clear: both; +} + +.site-health-progress { + display: inline-block; + height: 40px; + width: 40px; + margin: 0; + border-radius: 100%; + position: relative; + font-weight: 600; + font-size: 0.4rem; +} + +.site-health-progress-count { + position: absolute; + display: block; + height: 80px; + width: 80px; + right: 50%; + top: 50%; + margin-top: -40px; + margin-right: -40px; + border-radius: 100%; + line-height: 6.3; + font-size: 2em; +} + +.site-health-progress-count::after { + content: ""; +} + +.site-health-progress.loading .site-health-progress-count::after { + content: "···"; +} + +.site-health-progress.loading svg #bar { + stroke-dashoffset: 0; + stroke: #adc5d2; + animation: loadingPulse 3s infinite ease-in-out; +} + +.site-health-progress svg circle { + stroke-dashoffset: 0; + transition: stroke-dashoffset 1s linear; + stroke: #ccc; + stroke-width: 2em; +} + +.site-health-progress svg #bar { + stroke-dashoffset: 565; + stroke: #dc3232; +} + +.site-health-progress svg #bar.green { + stroke: #46b450; +} + +.site-health-progress svg #bar.orange { + stroke: #ffb900; +} + +@keyframes loadingPulse { + 0% { + stroke: #adc5d2; + } + 50% { + stroke: #00a0d2; + } + 100% { + stroke: #adc5d2; + } +} + +.health-check-tabs-wrapper { + /* IE 11 */ + display: -ms-inline-grid; + -ms-grid-columns: 1fr 1fr; + vertical-align: top; + /* modern browsers */ + display: inline-grid; + grid-template-columns: 1fr 1fr; +} + +.health-check-tab { + display: block; /* IE 11 */ + text-decoration: none; + color: inherit; + padding: 0.5rem 1rem 1rem; + margin: 0 1rem; + transition: box-shadow 0.5s ease-in-out; +} + +.health-check-tab:nth-child(1) { + -ms-grid-column: 1; /* IE 11 */ +} + +.health-check-tab:nth-child(2) { + -ms-grid-column: 2; /* IE 11 */ +} + +.health-check-tab:focus { + color: #191e23; + outline: 1px solid #6c7781; + box-shadow: none; +} + +.health-check-tab.active { + box-shadow: inset 0 -3px #007cba; + font-weight: 600; +} + +.health-check-body { + max-width: 800px; + margin: 0 auto; +} + +.health-check-table td:first-child { + width: 30%; +} + +.health-check-table td { + width: 70%; +} + +.health-check-table ul, +.health-check-table ol { + margin: 0; +} + +.health-check-body li { + line-height: 1.5; +} + +.health-check-body .pass::before, +.health-check-body .good::before { + content: "\f147"; + color: #46b450; +} + +.health-check-body .warning::before { + content: "\f460"; + color: #ffb900; +} + +.health-check-body .info::before { + content: "\f348"; + color: #00a0d2; +} + +.health-check-body .fail::before, +.health-check-body .error::before { + content: "\f335"; + color: #dc3232; +} + +.site-health-copy-buttons { + margin: 1rem 0; +} + +.site-health-copy-buttons .copy-button-wrapper { + margin: 0.5rem 0 1rem; +} + +.site-health-copy-buttons .success { + display: none; + color: #40860a; + line-height: 1.8; + margin-right: 0.5rem; +} + +.site-health-copy-buttons .success.visible { + display: inline-block; + height: 28px; + line-height: 2.2; +} + +.site-status-has-issues.hide { + display: none; +} + +.site-health-view-more { + text-align: center; +} + +.site-health-issues-wrapper:first-of-type { + margin-top: 3rem; +} + +.site-health-issues-wrapper { + margin-bottom: 3rem; + margin-top: 2rem; +} + +.site-status-all-clear { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + height: 100%; + width: 100%; + margin-top: 0; +} + +@media all and (min-width: 784px) { + .site-status-all-clear { + margin: 5rem 0; + } +} + +.site-status-all-clear.hide { + display: none; +} + +.site-status-all-clear .dashicons { + font-size: 150px; + height: 130px; + width: 150px; +} + +.site-status-all-clear .encouragement { + font-size: 1.5rem; + font-weight: 600; +} + +.site-status-all-clear p { + margin: 0; +} + +.health-check-accordion { + border: 1px solid #e2e4e7; +} + +.health-check-accordion-heading { + margin: 0; + border-top: 1px solid #e2e4e7; + font-size: inherit; + line-height: inherit; + font-weight: 600; + color: inherit; +} + +.health-check-accordion-heading:first-child { + border-top: none; +} + +.health-check-accordion-trigger { + background: #fff; + border: 0; + color: #32373c; + cursor: pointer; + display: flex; + font-weight: 400; + margin: 0; + padding: 1em 1.5em 1em 3.5em; + min-height: 46px; + position: relative; + text-align: right; + width: 100%; + align-items: center; + justify-content: space-between; +} + +.wp-core-ui .button.site-health-view-passed { + position: relative; + padding-left: 40px; + padding-right: 20px; +} + +.health-check-accordion-trigger:hover, +.health-check-accordion-trigger:active { + background: #f8f9f9; +} + +.health-check-accordion-trigger:focus { + color: #191e23; + border: none; + box-shadow: none; + outline-offset: -2px; + outline: 1px dotted #555d66; +} + +.health-check-accordion-trigger .title { + pointer-events: none; + font-weight: 600; + flex-grow: 1; +} + +.health-check-accordion-trigger .icon, +.site-health-view-passed .icon { + border: solid #555d66; + border-width: 0 0 2px 2px; + height: 0.5rem; + pointer-events: none; + position: absolute; + left: 1.5em; + top: 50%; + transform: translateY(-70%) rotate(-45deg); + width: 0.5rem; +} + +.health-check-accordion-trigger .badge { + padding: 0.1rem 0.5rem 0.15rem; + color: #32373c; + font-weight: 600; + margin-right: 0.5rem; +} + +.health-check-accordion-trigger .badge.blue { + border: 1px solid #bfe7f3; +} + +.health-check-accordion-trigger .badge.orange { + border: 1px solid #ffb900; +} + +.health-check-accordion-trigger .badge.red { + border: 1px solid #dc3232; +} + +.health-check-accordion-trigger .badge.green { + border: 1px solid #46b450; +} + +.health-check-accordion-trigger .badge.purple { + border: 1px solid #826eb4; +} + +.health-check-accordion-trigger .badge.gray { + border: 1px solid #ccd0d4; +} + +.health-check-accordion-trigger[aria-expanded="true"] .icon, +.site-health-view-passed[aria-expanded="true"] .icon { + transform: translateY(-30%) rotate(135deg) +} + +.health-check-accordion-panel { + margin: 0; + padding: 1em 1.5em; + background: #fff; +} + +.health-check-accordion-panel[hidden] { + display: none; +} + +.health-check-accordion-panel a .dashicons { + text-decoration: none; +} + +/* Better position for the WordPress admin notices and update nag. */ +.site-health .notice { + margin: 5px 22px 15px 20px; +} + +.site-health .update-nag { + margin-bottom: 20px; + margin-right: 22px; +} + +.health-check-wp-paths-sizes.spinner { + visibility: visible; + float: none; + margin: 0 4px; + flex-shrink: 0; +} + +@media screen and (max-width: 782px) { + .health-check-body { + margin: 0 12px; + width: auto; + } + + .site-health .notice { + margin: 5px 10px 15px; + } + + .site-health .update-nag { + margin-left: 10px; + margin-right: 10px; + } + + .site-health-issues-wrapper .health-check-accordion-trigger { + flex-direction: column; + align-items: flex-start; + } + + .health-check-accordion-trigger .badge { + margin: 1em 0 0; + } + + .health-check-table { + table-layout: fixed; + } + + .health-check-table td { + box-sizing: border-box; + display: block; + width: 100%; + word-wrap: break-word; + } + + .health-check-table td:first-child { + width: 100%; + padding-bottom: 0; + font-weight: 600; + } +} + +/* The breakpoint is usually at 960px, the additional space is to allow for the margin. */ +@media only screen and (max-width: 1004px) { + .health-check-body { + margin: 0 22px; + width: auto; + } +} diff --git a/wp-admin/css/site-health-rtl.min.css b/wp-admin/css/site-health-rtl.min.css new file mode 100644 index 000000000..008404223 --- /dev/null +++ b/wp-admin/css/site-health-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.site-health #wpcontent,.site-health.auto-fold #wpcontent{padding-right:0}.health-check-header h1{display:inline-block;font-weight:600;margin:1rem .8rem;font-size:23px;padding:9px 0 4px 0;line-height:1.3}.health-check-body h2{padding:1rem 0;line-height:1.4}.health-check-body h3{padding:0;font-weight:400}.health-check-header{text-align:center;margin:0 0 1rem;background:#fff;border-bottom:1px solid #e2e4e7}.health-check-title-section{display:flex;align-items:center;justify-content:center;clear:both}.site-health-progress{display:inline-block;height:40px;width:40px;margin:0;border-radius:100%;position:relative;font-weight:600;font-size:.4rem}.site-health-progress-count{position:absolute;display:block;height:80px;width:80px;right:50%;top:50%;margin-top:-40px;margin-right:-40px;border-radius:100%;line-height:6.3;font-size:2em}.site-health-progress-count::after{content:""}.site-health-progress.loading .site-health-progress-count::after{content:"···"}.site-health-progress.loading svg #bar{stroke-dashoffset:0;stroke:#adc5d2;animation:loadingPulse 3s infinite ease-in-out}.site-health-progress svg circle{stroke-dashoffset:0;transition:stroke-dashoffset 1s linear;stroke:#ccc;stroke-width:2em}.site-health-progress svg #bar{stroke-dashoffset:565;stroke:#dc3232}.site-health-progress svg #bar.green{stroke:#46b450}.site-health-progress svg #bar.orange{stroke:#ffb900}@keyframes loadingPulse{0%{stroke:#adc5d2}50%{stroke:#00a0d2}100%{stroke:#adc5d2}}.health-check-tabs-wrapper{display:-ms-inline-grid;-ms-grid-columns:1fr 1fr;vertical-align:top;display:inline-grid;grid-template-columns:1fr 1fr}.health-check-tab{display:block;text-decoration:none;color:inherit;padding:.5rem 1rem 1rem;margin:0 1rem;transition:box-shadow .5s ease-in-out}.health-check-tab:nth-child(1){-ms-grid-column:1}.health-check-tab:nth-child(2){-ms-grid-column:2}.health-check-tab:focus{color:#191e23;outline:1px solid #6c7781;box-shadow:none}.health-check-tab.active{box-shadow:inset 0 -3px #007cba;font-weight:600}.health-check-body{max-width:800px;margin:0 auto}.health-check-table td:first-child{width:30%}.health-check-table td{width:70%}.health-check-table ol,.health-check-table ul{margin:0}.health-check-body li{line-height:1.5}.health-check-body .good::before,.health-check-body .pass::before{content:"\f147";color:#46b450}.health-check-body .warning::before{content:"\f460";color:#ffb900}.health-check-body .info::before{content:"\f348";color:#00a0d2}.health-check-body .error::before,.health-check-body .fail::before{content:"\f335";color:#dc3232}.site-health-copy-buttons{margin:1rem 0}.site-health-copy-buttons .copy-button-wrapper{margin:.5rem 0 1rem}.site-health-copy-buttons .success{display:none;color:#40860a;line-height:1.8;margin-right:.5rem}.site-health-copy-buttons .success.visible{display:inline-block;height:28px;line-height:2.2}.site-status-has-issues.hide{display:none}.site-health-view-more{text-align:center}.site-health-issues-wrapper:first-of-type{margin-top:3rem}.site-health-issues-wrapper{margin-bottom:3rem;margin-top:2rem}.site-status-all-clear{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:100%;width:100%;margin-top:0}@media all and (min-width:784px){.site-status-all-clear{margin:5rem 0}}.site-status-all-clear.hide{display:none}.site-status-all-clear .dashicons{font-size:150px;height:130px;width:150px}.site-status-all-clear .encouragement{font-size:1.5rem;font-weight:600}.site-status-all-clear p{margin:0}.health-check-accordion{border:1px solid #e2e4e7}.health-check-accordion-heading{margin:0;border-top:1px solid #e2e4e7;font-size:inherit;line-height:inherit;font-weight:600;color:inherit}.health-check-accordion-heading:first-child{border-top:none}.health-check-accordion-trigger{background:#fff;border:0;color:#32373c;cursor:pointer;display:flex;font-weight:400;margin:0;padding:1em 1.5em 1em 3.5em;min-height:46px;position:relative;text-align:right;width:100%;align-items:center;justify-content:space-between}.wp-core-ui .button.site-health-view-passed{position:relative;padding-left:40px;padding-right:20px}.health-check-accordion-trigger:active,.health-check-accordion-trigger:hover{background:#f8f9f9}.health-check-accordion-trigger:focus{color:#191e23;border:none;box-shadow:none;outline-offset:-2px;outline:1px dotted #555d66}.health-check-accordion-trigger .title{pointer-events:none;font-weight:600;flex-grow:1}.health-check-accordion-trigger .icon,.site-health-view-passed .icon{border:solid #555d66;border-width:0 0 2px 2px;height:.5rem;pointer-events:none;position:absolute;left:1.5em;top:50%;transform:translateY(-70%) rotate(-45deg);width:.5rem}.health-check-accordion-trigger .badge{padding:.1rem .5rem .15rem;color:#32373c;font-weight:600;margin-right:.5rem}.health-check-accordion-trigger .badge.blue{border:1px solid #bfe7f3}.health-check-accordion-trigger .badge.orange{border:1px solid #ffb900}.health-check-accordion-trigger .badge.red{border:1px solid #dc3232}.health-check-accordion-trigger .badge.green{border:1px solid #46b450}.health-check-accordion-trigger .badge.purple{border:1px solid #826eb4}.health-check-accordion-trigger .badge.gray{border:1px solid #ccd0d4}.health-check-accordion-trigger[aria-expanded=true] .icon,.site-health-view-passed[aria-expanded=true] .icon{transform:translateY(-30%) rotate(135deg)}.health-check-accordion-panel{margin:0;padding:1em 1.5em;background:#fff}.health-check-accordion-panel[hidden]{display:none}.health-check-accordion-panel a .dashicons{text-decoration:none}.site-health .notice{margin:5px 22px 15px 20px}.site-health .update-nag{margin-bottom:20px;margin-right:22px}.health-check-wp-paths-sizes.spinner{visibility:visible;float:none;margin:0 4px;flex-shrink:0}@media screen and (max-width:782px){.health-check-body{margin:0 12px;width:auto}.site-health .notice{margin:5px 10px 15px}.site-health .update-nag{margin-left:10px;margin-right:10px}.site-health-issues-wrapper .health-check-accordion-trigger{flex-direction:column;align-items:flex-start}.health-check-accordion-trigger .badge{margin:1em 0 0}.health-check-table{table-layout:fixed}.health-check-table td{box-sizing:border-box;display:block;width:100%;word-wrap:break-word}.health-check-table td:first-child{width:100%;padding-bottom:0;font-weight:600}}@media only screen and (max-width:1004px){.health-check-body{margin:0 22px;width:auto}} \ No newline at end of file diff --git a/wp-admin/css/site-health.css b/wp-admin/css/site-health.css new file mode 100644 index 000000000..f320d4f4c --- /dev/null +++ b/wp-admin/css/site-health.css @@ -0,0 +1,454 @@ +.site-health #wpcontent, +.site-health.auto-fold #wpcontent { + padding-left: 0; +} + +/* Emulates .wrap h1 styling */ +.health-check-header h1 { + display: inline-block; + font-weight: 600; + margin: 1rem 0.8rem; + font-size: 23px; + padding: 9px 0 4px 0; + line-height: 1.3; +} + +.health-check-body h2 { + padding: 1rem 0; + line-height: 1.4; +} + +.health-check-body h3 { + padding: 0; + font-weight: 400; +} + +.health-check-header { + text-align: center; + margin: 0 0 1rem; + background: #fff; + border-bottom: 1px solid #e2e4e7; +} + +.health-check-title-section { + display: flex; + align-items: center; + justify-content: center; + clear: both; +} + +.site-health-progress { + display: inline-block; + height: 40px; + width: 40px; + margin: 0; + border-radius: 100%; + position: relative; + font-weight: 600; + font-size: 0.4rem; +} + +.site-health-progress-count { + position: absolute; + display: block; + height: 80px; + width: 80px; + left: 50%; + top: 50%; + margin-top: -40px; + margin-left: -40px; + border-radius: 100%; + line-height: 6.3; + font-size: 2em; +} + +.site-health-progress-count::after { + content: ""; +} + +.site-health-progress.loading .site-health-progress-count::after { + content: "···"; +} + +.site-health-progress.loading svg #bar { + stroke-dashoffset: 0; + stroke: #adc5d2; + animation: loadingPulse 3s infinite ease-in-out; +} + +.site-health-progress svg circle { + stroke-dashoffset: 0; + transition: stroke-dashoffset 1s linear; + stroke: #ccc; + stroke-width: 2em; +} + +.site-health-progress svg #bar { + stroke-dashoffset: 565; + stroke: #dc3232; +} + +.site-health-progress svg #bar.green { + stroke: #46b450; +} + +.site-health-progress svg #bar.orange { + stroke: #ffb900; +} + +@keyframes loadingPulse { + 0% { + stroke: #adc5d2; + } + 50% { + stroke: #00a0d2; + } + 100% { + stroke: #adc5d2; + } +} + +.health-check-tabs-wrapper { + /* IE 11 */ + display: -ms-inline-grid; + -ms-grid-columns: 1fr 1fr; + vertical-align: top; + /* modern browsers */ + display: inline-grid; + grid-template-columns: 1fr 1fr; +} + +.health-check-tab { + display: block; /* IE 11 */ + text-decoration: none; + color: inherit; + padding: 0.5rem 1rem 1rem; + margin: 0 1rem; + transition: box-shadow 0.5s ease-in-out; +} + +.health-check-tab:nth-child(1) { + -ms-grid-column: 1; /* IE 11 */ +} + +.health-check-tab:nth-child(2) { + -ms-grid-column: 2; /* IE 11 */ +} + +.health-check-tab:focus { + color: #191e23; + outline: 1px solid #6c7781; + box-shadow: none; +} + +.health-check-tab.active { + box-shadow: inset 0 -3px #007cba; + font-weight: 600; +} + +.health-check-body { + max-width: 800px; + margin: 0 auto; +} + +.health-check-table td:first-child { + width: 30%; +} + +.health-check-table td { + width: 70%; +} + +.health-check-table ul, +.health-check-table ol { + margin: 0; +} + +.health-check-body li { + line-height: 1.5; +} + +.health-check-body .pass::before, +.health-check-body .good::before { + content: "\f147"; + color: #46b450; +} + +.health-check-body .warning::before { + content: "\f460"; + color: #ffb900; +} + +.health-check-body .info::before { + content: "\f348"; + color: #00a0d2; +} + +.health-check-body .fail::before, +.health-check-body .error::before { + content: "\f335"; + color: #dc3232; +} + +.site-health-copy-buttons { + margin: 1rem 0; +} + +.site-health-copy-buttons .copy-button-wrapper { + margin: 0.5rem 0 1rem; +} + +.site-health-copy-buttons .success { + display: none; + color: #40860a; + line-height: 1.8; + margin-left: 0.5rem; +} + +.site-health-copy-buttons .success.visible { + display: inline-block; + height: 28px; + line-height: 2.2; +} + +.site-status-has-issues.hide { + display: none; +} + +.site-health-view-more { + text-align: center; +} + +.site-health-issues-wrapper:first-of-type { + margin-top: 3rem; +} + +.site-health-issues-wrapper { + margin-bottom: 3rem; + margin-top: 2rem; +} + +.site-status-all-clear { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + height: 100%; + width: 100%; + margin-top: 0; +} + +@media all and (min-width: 784px) { + .site-status-all-clear { + margin: 5rem 0; + } +} + +.site-status-all-clear.hide { + display: none; +} + +.site-status-all-clear .dashicons { + font-size: 150px; + height: 130px; + width: 150px; +} + +.site-status-all-clear .encouragement { + font-size: 1.5rem; + font-weight: 600; +} + +.site-status-all-clear p { + margin: 0; +} + +.health-check-accordion { + border: 1px solid #e2e4e7; +} + +.health-check-accordion-heading { + margin: 0; + border-top: 1px solid #e2e4e7; + font-size: inherit; + line-height: inherit; + font-weight: 600; + color: inherit; +} + +.health-check-accordion-heading:first-child { + border-top: none; +} + +.health-check-accordion-trigger { + background: #fff; + border: 0; + color: #32373c; + cursor: pointer; + display: flex; + font-weight: 400; + margin: 0; + padding: 1em 3.5em 1em 1.5em; + min-height: 46px; + position: relative; + text-align: left; + width: 100%; + align-items: center; + justify-content: space-between; +} + +.wp-core-ui .button.site-health-view-passed { + position: relative; + padding-right: 40px; + padding-left: 20px; +} + +.health-check-accordion-trigger:hover, +.health-check-accordion-trigger:active { + background: #f8f9f9; +} + +.health-check-accordion-trigger:focus { + color: #191e23; + border: none; + box-shadow: none; + outline-offset: -2px; + outline: 1px dotted #555d66; +} + +.health-check-accordion-trigger .title { + pointer-events: none; + font-weight: 600; + flex-grow: 1; +} + +.health-check-accordion-trigger .icon, +.site-health-view-passed .icon { + border: solid #555d66; + border-width: 0 2px 2px 0; + height: 0.5rem; + pointer-events: none; + position: absolute; + right: 1.5em; + top: 50%; + transform: translateY(-70%) rotate(45deg); + width: 0.5rem; +} + +.health-check-accordion-trigger .badge { + padding: 0.1rem 0.5rem 0.15rem; + color: #32373c; + font-weight: 600; + margin-left: 0.5rem; +} + +.health-check-accordion-trigger .badge.blue { + border: 1px solid #bfe7f3; +} + +.health-check-accordion-trigger .badge.orange { + border: 1px solid #ffb900; +} + +.health-check-accordion-trigger .badge.red { + border: 1px solid #dc3232; +} + +.health-check-accordion-trigger .badge.green { + border: 1px solid #46b450; +} + +.health-check-accordion-trigger .badge.purple { + border: 1px solid #826eb4; +} + +.health-check-accordion-trigger .badge.gray { + border: 1px solid #ccd0d4; +} + +.health-check-accordion-trigger[aria-expanded="true"] .icon, +.site-health-view-passed[aria-expanded="true"] .icon { + transform: translateY(-30%) rotate(-135deg) +} + +.health-check-accordion-panel { + margin: 0; + padding: 1em 1.5em; + background: #fff; +} + +.health-check-accordion-panel[hidden] { + display: none; +} + +.health-check-accordion-panel a .dashicons { + text-decoration: none; +} + +/* Better position for the WordPress admin notices and update nag. */ +.site-health .notice { + margin: 5px 20px 15px 22px; +} + +.site-health .update-nag { + margin-bottom: 20px; + margin-left: 22px; +} + +.health-check-wp-paths-sizes.spinner { + visibility: visible; + float: none; + margin: 0 4px; + flex-shrink: 0; +} + +@media screen and (max-width: 782px) { + .health-check-body { + margin: 0 12px; + width: auto; + } + + .site-health .notice { + margin: 5px 10px 15px; + } + + .site-health .update-nag { + margin-right: 10px; + margin-left: 10px; + } + + .site-health-issues-wrapper .health-check-accordion-trigger { + flex-direction: column; + align-items: flex-start; + } + + .health-check-accordion-trigger .badge { + margin: 1em 0 0; + } + + .health-check-table { + table-layout: fixed; + } + + .health-check-table td { + box-sizing: border-box; + display: block; + width: 100%; + word-wrap: break-word; + } + + .health-check-table td:first-child { + width: 100%; + padding-bottom: 0; + font-weight: 600; + } +} + +/* The breakpoint is usually at 960px, the additional space is to allow for the margin. */ +@media only screen and (max-width: 1004px) { + .health-check-body { + margin: 0 22px; + width: auto; + } +} diff --git a/wp-admin/css/site-health.min.css b/wp-admin/css/site-health.min.css new file mode 100644 index 000000000..6fec604d3 --- /dev/null +++ b/wp-admin/css/site-health.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.site-health #wpcontent,.site-health.auto-fold #wpcontent{padding-left:0}.health-check-header h1{display:inline-block;font-weight:600;margin:1rem .8rem;font-size:23px;padding:9px 0 4px 0;line-height:1.3}.health-check-body h2{padding:1rem 0;line-height:1.4}.health-check-body h3{padding:0;font-weight:400}.health-check-header{text-align:center;margin:0 0 1rem;background:#fff;border-bottom:1px solid #e2e4e7}.health-check-title-section{display:flex;align-items:center;justify-content:center;clear:both}.site-health-progress{display:inline-block;height:40px;width:40px;margin:0;border-radius:100%;position:relative;font-weight:600;font-size:.4rem}.site-health-progress-count{position:absolute;display:block;height:80px;width:80px;left:50%;top:50%;margin-top:-40px;margin-left:-40px;border-radius:100%;line-height:6.3;font-size:2em}.site-health-progress-count::after{content:""}.site-health-progress.loading .site-health-progress-count::after{content:"···"}.site-health-progress.loading svg #bar{stroke-dashoffset:0;stroke:#adc5d2;animation:loadingPulse 3s infinite ease-in-out}.site-health-progress svg circle{stroke-dashoffset:0;transition:stroke-dashoffset 1s linear;stroke:#ccc;stroke-width:2em}.site-health-progress svg #bar{stroke-dashoffset:565;stroke:#dc3232}.site-health-progress svg #bar.green{stroke:#46b450}.site-health-progress svg #bar.orange{stroke:#ffb900}@keyframes loadingPulse{0%{stroke:#adc5d2}50%{stroke:#00a0d2}100%{stroke:#adc5d2}}.health-check-tabs-wrapper{display:-ms-inline-grid;-ms-grid-columns:1fr 1fr;vertical-align:top;display:inline-grid;grid-template-columns:1fr 1fr}.health-check-tab{display:block;text-decoration:none;color:inherit;padding:.5rem 1rem 1rem;margin:0 1rem;transition:box-shadow .5s ease-in-out}.health-check-tab:nth-child(1){-ms-grid-column:1}.health-check-tab:nth-child(2){-ms-grid-column:2}.health-check-tab:focus{color:#191e23;outline:1px solid #6c7781;box-shadow:none}.health-check-tab.active{box-shadow:inset 0 -3px #007cba;font-weight:600}.health-check-body{max-width:800px;margin:0 auto}.health-check-table td:first-child{width:30%}.health-check-table td{width:70%}.health-check-table ol,.health-check-table ul{margin:0}.health-check-body li{line-height:1.5}.health-check-body .good::before,.health-check-body .pass::before{content:"\f147";color:#46b450}.health-check-body .warning::before{content:"\f460";color:#ffb900}.health-check-body .info::before{content:"\f348";color:#00a0d2}.health-check-body .error::before,.health-check-body .fail::before{content:"\f335";color:#dc3232}.site-health-copy-buttons{margin:1rem 0}.site-health-copy-buttons .copy-button-wrapper{margin:.5rem 0 1rem}.site-health-copy-buttons .success{display:none;color:#40860a;line-height:1.8;margin-left:.5rem}.site-health-copy-buttons .success.visible{display:inline-block;height:28px;line-height:2.2}.site-status-has-issues.hide{display:none}.site-health-view-more{text-align:center}.site-health-issues-wrapper:first-of-type{margin-top:3rem}.site-health-issues-wrapper{margin-bottom:3rem;margin-top:2rem}.site-status-all-clear{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:100%;width:100%;margin-top:0}@media all and (min-width:784px){.site-status-all-clear{margin:5rem 0}}.site-status-all-clear.hide{display:none}.site-status-all-clear .dashicons{font-size:150px;height:130px;width:150px}.site-status-all-clear .encouragement{font-size:1.5rem;font-weight:600}.site-status-all-clear p{margin:0}.health-check-accordion{border:1px solid #e2e4e7}.health-check-accordion-heading{margin:0;border-top:1px solid #e2e4e7;font-size:inherit;line-height:inherit;font-weight:600;color:inherit}.health-check-accordion-heading:first-child{border-top:none}.health-check-accordion-trigger{background:#fff;border:0;color:#32373c;cursor:pointer;display:flex;font-weight:400;margin:0;padding:1em 3.5em 1em 1.5em;min-height:46px;position:relative;text-align:left;width:100%;align-items:center;justify-content:space-between}.wp-core-ui .button.site-health-view-passed{position:relative;padding-right:40px;padding-left:20px}.health-check-accordion-trigger:active,.health-check-accordion-trigger:hover{background:#f8f9f9}.health-check-accordion-trigger:focus{color:#191e23;border:none;box-shadow:none;outline-offset:-2px;outline:1px dotted #555d66}.health-check-accordion-trigger .title{pointer-events:none;font-weight:600;flex-grow:1}.health-check-accordion-trigger .icon,.site-health-view-passed .icon{border:solid #555d66;border-width:0 2px 2px 0;height:.5rem;pointer-events:none;position:absolute;right:1.5em;top:50%;transform:translateY(-70%) rotate(45deg);width:.5rem}.health-check-accordion-trigger .badge{padding:.1rem .5rem .15rem;color:#32373c;font-weight:600;margin-left:.5rem}.health-check-accordion-trigger .badge.blue{border:1px solid #bfe7f3}.health-check-accordion-trigger .badge.orange{border:1px solid #ffb900}.health-check-accordion-trigger .badge.red{border:1px solid #dc3232}.health-check-accordion-trigger .badge.green{border:1px solid #46b450}.health-check-accordion-trigger .badge.purple{border:1px solid #826eb4}.health-check-accordion-trigger .badge.gray{border:1px solid #ccd0d4}.health-check-accordion-trigger[aria-expanded=true] .icon,.site-health-view-passed[aria-expanded=true] .icon{transform:translateY(-30%) rotate(-135deg)}.health-check-accordion-panel{margin:0;padding:1em 1.5em;background:#fff}.health-check-accordion-panel[hidden]{display:none}.health-check-accordion-panel a .dashicons{text-decoration:none}.site-health .notice{margin:5px 20px 15px 22px}.site-health .update-nag{margin-bottom:20px;margin-left:22px}.health-check-wp-paths-sizes.spinner{visibility:visible;float:none;margin:0 4px;flex-shrink:0}@media screen and (max-width:782px){.health-check-body{margin:0 12px;width:auto}.site-health .notice{margin:5px 10px 15px}.site-health .update-nag{margin-right:10px;margin-left:10px}.site-health-issues-wrapper .health-check-accordion-trigger{flex-direction:column;align-items:flex-start}.health-check-accordion-trigger .badge{margin:1em 0 0}.health-check-table{table-layout:fixed}.health-check-table td{box-sizing:border-box;display:block;width:100%;word-wrap:break-word}.health-check-table td:first-child{width:100%;padding-bottom:0;font-weight:600}}@media only screen and (max-width:1004px){.health-check-body{margin:0 22px;width:auto}} \ 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 000000000..29211f397 --- /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 000000000..901a1eb65 --- /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 000000000..eae9a5763 --- /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 000000000..5287d07f9 --- /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 000000000..62d166dd6 --- /dev/null +++ b/wp-admin/css/themes-rtl.css @@ -0,0 +1,1922 @@ +/*------------------------------------------------------------------------------ + 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%; + 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: 600; +} + +/** + * 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: 1.9; +} + +.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: 1.9; +} + +/*------------------------------------------------------------------------------ + 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, 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, 0.5), 0 0 3px rgba(0, 115, 170, 0.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; +} + +.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: 2.9 !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 { + 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 { + 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 { + 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 { + 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: 3.2; + 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: 1.6; +} + +.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, 0.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 { + transform: rotate(180.001deg); /* Firefox: promoting to its own layer to trigger anti-aliasing */ +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + 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: 1.5; + 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: 1.6; + 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: 2; +} + +.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; + 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 000000000..44eb7b9ae --- /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%;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:normal 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{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}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{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 .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: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,.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}.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"],.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"]{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: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 .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:right;margin:0 0 0 30px;width:55%;max-width: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;height:auto;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 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:600}.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 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: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 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}.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.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:1.9}.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:1.9}.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}.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:2.9!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: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{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{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{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{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{background:0 0;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%;min-width:0}.wp-full-overlay-sidebar{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:3.2;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: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 .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:1.6}.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: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 .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{transform:rotate(180.001deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{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: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: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-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#customize-container,#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}#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{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:1.5;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:1.6;max-width:100%}.theme-install-overlay .wp-full-overlay-header .button{float:left;margin:8px 0 0 10px;line-height:2}.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;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 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 000000000..4fd28c2f3 --- /dev/null +++ b/wp-admin/css/themes.css @@ -0,0 +1,1922 @@ +/*------------------------------------------------------------------------------ + 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%; + 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: 600; +} + +/** + * 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: 1.9; +} + +.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: 1.9; +} + +/*------------------------------------------------------------------------------ + 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, 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, 0.5), 0 0 3px rgba(0, 115, 170, 0.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; +} + +.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: 2.9 !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 { + 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 { + 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 { + 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 { + 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: 3.2; + 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: 1.6; +} + +.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, 0.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 { + transform: rotate(180.001deg); /* Firefox: promoting to its own layer to trigger anti-aliasing */ +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + 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: 1.5; + 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: 1.6; + 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: 2; +} + +.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; + 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 000000000..ff09c0c81 --- /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%;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:normal 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{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}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{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 .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: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,.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}.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"],.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"]{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: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 .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:left;margin:0 30px 0 0;width:55%;max-width: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;height:auto;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 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:600}.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 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: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 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}.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.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:1.9}.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:1.9}.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}.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:2.9!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: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{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{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{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{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{background:0 0;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%;min-width:0}.wp-full-overlay-sidebar{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:3.2;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: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 .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:1.6}.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: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 .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{transform:rotate(180.001deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{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: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: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-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#customize-container,#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}#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{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:1.5;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:1.6;max-width:100%}.theme-install-overlay .wp-full-overlay-header .button{float:right;margin:8px 10px 0 0;line-height:2}.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;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 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 000000000..991a8f8c3 --- /dev/null +++ b/wp-admin/css/widgets-rtl.css @@ -0,0 +1,851 @@ +/* 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: 1.2; +} + +.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 .attachment-media-view .button-add-media, +.media-widget-control .placeholder { + border: 1px dashed #b4b9be; + box-sizing: border-box; + cursor: pointer; + line-height: 1.6; + padding: 9px 0; + position: relative; + text-align: center; + width: 100%; +} + +.media-widget-control .attachment-media-view .button-add-media { + cursor: pointer; + background-color: #edeff0; + color: #32373c; +} + +.media-widget-control .attachment-media-view .button-add-media:hover { + background-color: #fbfbfc; +} + +.media-widget-control .attachment-media-view .button-add-media:focus { + background-color: #fbfbfc; + border-style: solid; + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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: flex; + 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: flex; + align-items: center; + justify-content: center; + background-color: rgba(0, 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, 0.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 { + 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 */ +.widget-access-link { + float: left; + margin: -5px 10px 10px 0; +} + +.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, +#available-widgets .widget-action .edit, +#widgets-left .inactive-sidebar .widget-control-edit .add, +#widgets-left .inactive-sidebar .widget-action .add, +#widgets-right .widget-control-edit .add, +#widgets-right .widget-action .add { + display: none; +} + +.widget-control-edit { + display: block; + color: #666; + background: #EEE; + padding: 0 15px; + line-height: 3.35; + 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 { + border-bottom: 1px solid #ccc; + background: #fff; + margin: 0; + position: relative; +} + +.widgets-chooser .widgets-chooser-button { + width: 100%; + padding: 10px 35px 10px 15px; + background: transparent; + border: 0; + box-sizing: border-box; + text-align: right; + cursor: pointer; + transition: background 0.2s ease-in-out; +} + +/* @todo looks like these hover/focus states are overridden by .widgets-chooser-selected */ +.widgets-chooser .widgets-chooser-button:hover, +.widgets-chooser .widgets-chooser-button:focus { + outline: none; + text-decoration: underline; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser .widgets-chooser-selected .widgets-chooser-button { + background: #0073aa; + color: #fff; +} + +.widgets-chooser .widgets-chooser-selected: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; +} + +#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.4; +} + +.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; + } + + .widget-access-link { + float: none; + margin: 15px 0 0 0; + } +} + +@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 000000000..dacd18814 --- /dev/null +++ b/wp-admin/css/widgets-rtl.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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 15px;line-height:1.2}.widget.widget-dirty .widget-control-close-wrapper{display:none}#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}.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}.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 .attachment-media-view .button-add-media,.media-widget-control .placeholder{border:1px dashed #b4b9be;box-sizing:border-box;cursor:pointer;line-height:1.6;padding:9px 0;position:relative;text-align:center;width:100%}.media-widget-control .attachment-media-view .button-add-media{cursor:pointer;background-color:#edeff0;color:#32373c}.media-widget-control .attachment-media-view .button-add-media:hover{background-color:#fbfbfc}.media-widget-control .attachment-media-view .button-add-media:focus{background-color:#fbfbfc;border-style:solid;border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8);outline:2px solid transparent;outline-offset:-2px}.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:normal 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:flex;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:flex;align-items: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{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 0;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 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)}.widget-access-link{float:left;margin:-5px 10px 10px 0}.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-action .edit,#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-action .add,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-action .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#eee;padding:0 15px;line-height:3.35;border-right:1px solid #ddd}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-right:0;outline:1px solid #444}.widgets-holder-wrap .sidebar-description,.widgets-holder-wrap .sidebar-name{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .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}.widget-description,.widget-inside{display:none}.widget-inside{background:#fff}#removing-widget{display:none;font-weight:400;padding-right:15px;font-size:12px;line-height:1;color:#000}.js #removing-widget{color:#00a0d2}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widgets_access #access-on,.widgets_access .handlediv,.widgets_access .widget-action,.widgets_access .widget-holder .description{display:none}.widgets_access #widget-list,.widgets_access .widget-holder{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{transition:opacity .1s linear}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{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{border-bottom:1px solid #ccc;background:#fff;margin:0;position:relative}.widgets-chooser .widgets-chooser-button{width:100%;padding:10px 35px 10px 15px;background:0 0;border:0;box-sizing:border-box;text-align:right;cursor:pointer;transition:background .2s ease-in-out}.widgets-chooser .widgets-chooser-button:focus,.widgets-chooser .widgets-chooser-button:hover{outline:0;text-decoration:underline}.widgets-chooser li:last-child{border:none}.widgets-chooser .widgets-chooser-selected .widgets-chooser-button{background:#0073aa;color:#fff}.widgets-chooser .widgets-chooser-selected: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}#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.4}.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 .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}.widget-access-link{float:none;margin:15px 0 0 0}}@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 000000000..8f365cf42 --- /dev/null +++ b/wp-admin/css/widgets.css @@ -0,0 +1,851 @@ +/* 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: 1.2; +} + +.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 .attachment-media-view .button-add-media, +.media-widget-control .placeholder { + border: 1px dashed #b4b9be; + box-sizing: border-box; + cursor: pointer; + line-height: 1.6; + padding: 9px 0; + position: relative; + text-align: center; + width: 100%; +} + +.media-widget-control .attachment-media-view .button-add-media { + cursor: pointer; + background-color: #edeff0; + color: #32373c; +} + +.media-widget-control .attachment-media-view .button-add-media:hover { + background-color: #fbfbfc; +} + +.media-widget-control .attachment-media-view .button-add-media:focus { + background-color: #fbfbfc; + border-style: solid; + border-color: #5b9dd9; + box-shadow: 0 0 3px rgba( 0, 115, 170, .8 ); + /* Only visible in Windows High Contrast mode */ + outline: 2px solid transparent; + outline-offset: -2px; +} + +.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: flex; + 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: flex; + align-items: center; + justify-content: center; + background-color: rgba(0, 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, 0.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 { + 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 */ +.widget-access-link { + float: right; + margin: -5px 0 10px 10px; +} + +.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, +#available-widgets .widget-action .edit, +#widgets-left .inactive-sidebar .widget-control-edit .add, +#widgets-left .inactive-sidebar .widget-action .add, +#widgets-right .widget-control-edit .add, +#widgets-right .widget-action .add { + display: none; +} + +.widget-control-edit { + display: block; + color: #666; + background: #EEE; + padding: 0 15px; + line-height: 3.35; + 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 { + border-bottom: 1px solid #ccc; + background: #fff; + margin: 0; + position: relative; +} + +.widgets-chooser .widgets-chooser-button { + width: 100%; + padding: 10px 15px 10px 35px; + background: transparent; + border: 0; + box-sizing: border-box; + text-align: left; + cursor: pointer; + transition: background 0.2s ease-in-out; +} + +/* @todo looks like these hover/focus states are overridden by .widgets-chooser-selected */ +.widgets-chooser .widgets-chooser-button:hover, +.widgets-chooser .widgets-chooser-button:focus { + outline: none; + text-decoration: underline; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser .widgets-chooser-selected .widgets-chooser-button { + background: #0073aa; + color: #fff; +} + +.widgets-chooser .widgets-chooser-selected: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; +} + +#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.4; +} + +.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; + } + + .widget-access-link { + float: none; + margin: 15px 0 0 0; + } +} + +@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 000000000..04429a09c --- /dev/null +++ b/wp-admin/css/widgets.min.css @@ -0,0 +1,2 @@ +/*! This file is auto-generated */ +.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 15px;line-height:1.2}.widget.widget-dirty .widget-control-close-wrapper{display:none}#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}.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}.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 .attachment-media-view .button-add-media,.media-widget-control .placeholder{border:1px dashed #b4b9be;box-sizing:border-box;cursor:pointer;line-height:1.6;padding:9px 0;position:relative;text-align:center;width:100%}.media-widget-control .attachment-media-view .button-add-media{cursor:pointer;background-color:#edeff0;color:#32373c}.media-widget-control .attachment-media-view .button-add-media:hover{background-color:#fbfbfc}.media-widget-control .attachment-media-view .button-add-media:focus{background-color:#fbfbfc;border-style:solid;border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8);outline:2px solid transparent;outline-offset:-2px}.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:normal 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:flex;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:flex;align-items: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{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 0;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 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)}.widget-access-link{float:right;margin:-5px 0 10px 10px}.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-action .edit,#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-action .add,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-action .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#eee;padding:0 15px;line-height:3.35;border-left:1px solid #ddd}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-left:0;outline:1px solid #444}.widgets-holder-wrap .sidebar-description,.widgets-holder-wrap .sidebar-name{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .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}.widget-description,.widget-inside{display:none}.widget-inside{background:#fff}#removing-widget{display:none;font-weight:400;padding-left:15px;font-size:12px;line-height:1;color:#000}.js #removing-widget{color:#00a0d2}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widgets_access #access-on,.widgets_access .handlediv,.widgets_access .widget-action,.widgets_access .widget-holder .description{display:none}.widgets_access #widget-list,.widgets_access .widget-holder{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{transition:opacity .1s linear}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{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{border-bottom:1px solid #ccc;background:#fff;margin:0;position:relative}.widgets-chooser .widgets-chooser-button{width:100%;padding:10px 15px 10px 35px;background:0 0;border:0;box-sizing:border-box;text-align:left;cursor:pointer;transition:background .2s ease-in-out}.widgets-chooser .widgets-chooser-button:focus,.widgets-chooser .widgets-chooser-button:hover{outline:0;text-decoration:underline}.widgets-chooser li:last-child{border:none}.widgets-chooser .widgets-chooser-selected .widgets-chooser-button{background:#0073aa;color:#fff}.widgets-chooser .widgets-chooser-selected: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}#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.4}.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 .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}.widget-access-link{float:none;margin:15px 0 0 0}}@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 000000000..207a8c853 --- /dev/null +++ b/wp-admin/css/wp-admin-rtl.css @@ -0,0 +1,15 @@ +@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); +@import url(site-health-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 000000000..110850bb4 --- /dev/null +++ b/wp-admin/css/wp-admin-rtl.min.css @@ -0,0 +1,16 @@ +/*! 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); +@import url(site-health-rtl.min.css); diff --git a/wp-admin/css/wp-admin.css b/wp-admin/css/wp-admin.css new file mode 100644 index 000000000..b475cf0aa --- /dev/null +++ b/wp-admin/css/wp-admin.css @@ -0,0 +1,15 @@ +@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); +@import url(site-health.css); diff --git a/wp-admin/css/wp-admin.min.css b/wp-admin/css/wp-admin.min.css new file mode 100644 index 000000000..2fdbba502 --- /dev/null +++ b/wp-admin/css/wp-admin.min.css @@ -0,0 +1,16 @@ +/*! 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); +@import url(site-health.min.css); diff --git a/wp-admin/custom-background.php b/wp-admin/custom-background.php new file mode 100644 index 000000000..1975b10b7 --- /dev/null +++ b/wp-admin/custom-background.php @@ -0,0 +1,605 @@ +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' ) . '

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

+
+ + +

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

+
+ + + + + + 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', + ), + ), + ); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 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 = wp_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. + * + * Triggers 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 000000000..2cf26600d --- /dev/null +++ b/wp-admin/custom-header.php @@ -0,0 +1,1502 @@ +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' ) . '

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

+
+ + +

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

+ + + + + + + + + + + + + + + + + +
+
+ + ' . __( '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( wp_basename( $file ), 'midsize-' . wp_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( wp_basename( $url ), wp_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 = wp_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( wp_basename( $original ), 'midsize-' . wp_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( wp_basename( $parent_url ), wp_basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; + + $object = array( + 'ID' => $parent_attachment_id, + 'post_title' => wp_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 000000000..2486f9014 --- /dev/null +++ b/wp-admin/customize.php @@ -0,0 +1,269 @@ +' . __( '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 000000000..d2ef006a8 --- /dev/null +++ b/wp-admin/edit-comments.php @@ -0,0 +1,358 @@ +' . __( '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' ) . '

    ' +); + +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 000000000..b7f6fad9a --- /dev/null +++ b/wp-admin/edit-form-advanced.php @@ -0,0 +1,696 @@ +is_block_editor( false ); + +if ( is_multisite() ) { + add_action( 'admin_footer', '_admin_notice_post_locked' ); +} else { + $check_users = get_users( + array( + 'fields' => 'ID', + 'number' => 2, + ) + ); + + if ( count( $check_users ) > 1 ) { + add_action( 'admin_footer', '_admin_notice_post_locked' ); + } + + unset( $check_users ); +} + +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' ); + +register_and_do_post_meta_boxes( $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 button 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' ) . '

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

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

    ' + ); +} + +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-blocks.php b/wp-admin/edit-form-blocks.php new file mode 100644 index 000000000..4f68a8a4f --- /dev/null +++ b/wp-admin/edit-form-blocks.php @@ -0,0 +1,433 @@ +is_block_editor( true ); + +/* + * Emoji replacement is disabled for now, until it plays nicely with React. + */ +remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + +wp_enqueue_script( 'heartbeat' ); +wp_enqueue_script( 'wp-edit-post' ); +wp_enqueue_script( 'wp-format-library' ); + +$rest_base = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name; + +// Preload common data. +$preload_paths = array( + '/', + '/wp/v2/types?context=edit', + '/wp/v2/taxonomies?per_page=-1&context=edit', + '/wp/v2/themes?status=active', + sprintf( '/wp/v2/%s/%s?context=edit', $rest_base, $post->ID ), + sprintf( '/wp/v2/types/%s?context=edit', $post_type ), + sprintf( '/wp/v2/users/me?post_type=%s&context=edit', $post_type ), + array( '/wp/v2/media', 'OPTIONS' ), + array( '/wp/v2/blocks', 'OPTIONS' ), +); + +/** + * Preload common data by specifying an array of REST API paths that will be preloaded. + * + * Filters the array of paths that will be preloaded. + * + * @since 5.0.0 + * + * @param array $preload_paths Array of paths to preload. + * @param object $post The post resource data. + */ +$preload_paths = apply_filters( 'block_editor_preload_paths', $preload_paths, $post ); + +/* + * Ensure the global $post remains the same after API data is preloaded. + * Because API preloading can call the_content and other filters, plugins + * can unexpectedly modify $post. + */ +$backup_global_post = $post; + +$preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() +); + +// Restore the global $post as it was before API preloading. +$post = $backup_global_post; + +wp_add_inline_script( + 'wp-api-fetch', + sprintf( 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', wp_json_encode( $preload_data ) ), + 'after' +); + +wp_add_inline_script( + 'wp-blocks', + sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ), + 'after' +); + +/* + * Assign initial edits, if applicable. These are not initially assigned to the persisted post, + * but should be included in its save payload. + */ +$initial_edits = null; +$is_new_post = false; +if ( 'auto-draft' === $post->post_status ) { + $is_new_post = true; + // Override "(Auto Draft)" new post default title with empty string, or filtered value. + $initial_edits = array( + 'title' => $post->post_title, + 'content' => $post->post_content, + 'excerpt' => $post->post_excerpt, + ); +} + +// Preload server-registered block schemas. +wp_add_inline_script( + 'wp-blocks', + 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');' +); + +// Get admin url for handling meta boxes. +$meta_box_url = admin_url( 'post.php' ); +$meta_box_url = add_query_arg( + array( + 'post' => $post->ID, + 'action' => 'edit', + 'meta-box-loader' => true, + 'meta-box-loader-nonce' => wp_create_nonce( 'meta-box-loader' ), + ), + $meta_box_url +); +wp_localize_script( 'wp-editor', '_wpMetaBoxUrl', $meta_box_url ); + + +/* + * Initialize the editor. + */ + +$align_wide = get_theme_support( 'align-wide' ); +$color_palette = current( (array) get_theme_support( 'editor-color-palette' ) ); +$font_sizes = current( (array) get_theme_support( 'editor-font-sizes' ) ); + +/** + * Filters the allowed block types for the editor, defaulting to true (all + * block types supported). + * + * @since 5.0.0 + * + * @param bool|array $allowed_block_types Array of block type slugs, or + * boolean to enable/disable all. + * @param object $post The post resource data. + */ +$allowed_block_types = apply_filters( 'allowed_block_types', true, $post ); + +// Get all available templates for the post/page attributes meta-box. +// The "Default template" array element should only be added if the array is +// not empty so we do not trigger the template select element without any options +// besides the default value. +$available_templates = wp_get_theme()->get_page_templates( get_post( $post->ID ) ); +$available_templates = ! empty( $available_templates ) ? array_merge( + array( + /** This filter is documented in wp-admin/includes/meta-boxes.php */ + '' => apply_filters( 'default_page_template_title', __( 'Default template' ), 'rest-api' ), + ), + $available_templates +) : $available_templates; + +// Media settings. +$max_upload_size = wp_max_upload_size(); +if ( ! $max_upload_size ) { + $max_upload_size = 0; +} + +// Editor Styles. +$styles = array( + array( + 'css' => file_get_contents( + ABSPATH . WPINC . '/css/dist/editor/editor-styles.css' + ), + ), +); + +/* Translators: Use this to specify the CSS font family for the default font */ +$locale_font_family = esc_html_x( 'Noto Serif', 'CSS Font Family for Editor Font' ); +$styles[] = array( + 'css' => "body { font-family: '$locale_font_family' }", +); + +if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) { + foreach ( $editor_styles as $style ) { + if ( preg_match( '~^(https?:)?//~', $style ) ) { + $response = wp_remote_get( $style ); + if ( ! is_wp_error( $response ) ) { + $styles[] = array( + 'css' => wp_remote_retrieve_body( $response ), + ); + } + } else { + $file = get_theme_file_path( $style ); + if ( is_file( $file ) ) { + $styles[] = array( + 'css' => file_get_contents( $file ), + 'baseURL' => get_theme_file_uri( $style ), + ); + } + } + } +} + +// Image sizes. + +/** This filter is documented in wp-admin/includes/media.php */ +$image_size_names = apply_filters( + 'image_size_names_choose', + array( + 'thumbnail' => __( 'Thumbnail' ), + 'medium' => __( 'Medium' ), + 'large' => __( 'Large' ), + 'full' => __( 'Full Size' ), + ) +); + +$available_image_sizes = array(); +foreach ( $image_size_names as $image_size_slug => $image_size_name ) { + $available_image_sizes[] = array( + 'slug' => $image_size_slug, + 'name' => $image_size_name, + ); +} + +// Lock settings. +$user_id = wp_check_post_lock( $post->ID ); +if ( $user_id ) { + $locked = false; + + /** This filter is documented in wp-admin/includes/post.php */ + if ( apply_filters( 'show_post_locked_dialog', true, $post, $user_id ) ) { + $locked = true; + } + + $user_details = null; + if ( $locked ) { + $user = get_userdata( $user_id ); + $user_details = array( + 'name' => $user->display_name, + ); + $avatar = get_avatar_url( $user_id, array( 'size' => 64 ) ); + } + + $lock_details = array( + 'isLocked' => $locked, + 'user' => $user_details, + ); +} else { + // Lock the post. + $active_post_lock = wp_set_post_lock( $post->ID ); + $lock_details = array( + 'isLocked' => false, + 'activePostLock' => esc_attr( implode( ':', $active_post_lock ) ), + ); +} + +/** + * Filters the body placeholder text. + * + * @since 5.0.0 + * + * @param string $text Placeholder text. Default 'Start writing or type / to choose a block'. + * @param WP_Post $post Post object. + */ +$body_placeholder = apply_filters( 'write_your_story', __( 'Start writing or type / to choose a block' ), $post ); + +$editor_settings = array( + 'alignWide' => $align_wide, + 'availableTemplates' => $available_templates, + 'allowedBlockTypes' => $allowed_block_types, + 'disableCustomColors' => get_theme_support( 'disable-custom-colors' ), + 'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ), + 'disablePostFormats' => ! current_theme_supports( 'post-formats' ), + /** This filter is documented in wp-admin/edit-form-advanced.php */ + 'titlePlaceholder' => apply_filters( 'enter_title_here', __( 'Add title' ), $post ), + 'bodyPlaceholder' => $body_placeholder, + 'isRTL' => is_rtl(), + 'autosaveInterval' => AUTOSAVE_INTERVAL, + 'maxUploadFileSize' => $max_upload_size, + 'allowedMimeTypes' => get_allowed_mime_types(), + 'styles' => $styles, + 'imageSizes' => $available_image_sizes, + 'richEditingEnabled' => user_can_richedit(), + 'postLock' => $lock_details, + 'postLockUtils' => array( + 'nonce' => wp_create_nonce( 'lock-post_' . $post->ID ), + 'unlockNonce' => wp_create_nonce( 'update-post_' . $post->ID ), + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + ), + + // Whether or not to load the 'postcustom' meta box is stored as a user meta + // field so that we're not always loading its assets. + 'enableCustomFields' => (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ), +); + +$autosave = wp_get_post_autosave( $post_ID ); +if ( $autosave ) { + if ( mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { + $editor_settings['autosave'] = array( + 'editLink' => get_edit_post_link( $autosave->ID ), + ); + } else { + wp_delete_post_revision( $autosave->ID ); + } +} + +if ( false !== $color_palette ) { + $editor_settings['colors'] = $color_palette; +} + +if ( false !== $font_sizes ) { + $editor_settings['fontSizes'] = $font_sizes; +} + +if ( ! empty( $post_type_object->template ) ) { + $editor_settings['template'] = $post_type_object->template; + $editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false; +} + +// If there's no template set on a new post, use the post format, instead. +if ( $is_new_post && ! isset( $editor_settings['template'] ) && 'post' === $post->post_type ) { + $post_format = get_post_format( $post ); + if ( in_array( $post_format, array( 'audio', 'gallery', 'image', 'quote', 'video' ), true ) ) { + $editor_settings['template'] = array( array( "core/$post_format" ) ); + } +} + +/** + * Scripts + */ +wp_enqueue_media( + array( + 'post' => $post->ID, + ) +); +wp_tinymce_inline_scripts(); +wp_enqueue_editor(); + +/** + * Styles + */ +wp_enqueue_style( 'wp-edit-post' ); +wp_enqueue_style( 'wp-format-library' ); + +/** + * Fires after block assets have been enqueued for the editing interface. + * + * Call `add_action` on any hook before 'admin_enqueue_scripts'. + * + * In the function call you supply, simply use `wp_enqueue_script` and + * `wp_enqueue_style` to add your functionality to the block editor. + * + * @since 5.0.0 + */ +do_action( 'enqueue_block_editor_assets' ); + +// In order to duplicate classic meta box behaviour, we need to run the classic meta box actions. +require_once( ABSPATH . 'wp-admin/includes/meta-boxes.php' ); +register_and_do_post_meta_boxes( $post ); + +// Check if the Custom Fields meta box has been removed at some point. +$core_meta_boxes = $wp_meta_boxes[ $current_screen->id ]['normal']['core']; +if ( ! isset( $core_meta_boxes['postcustom'] ) || ! $core_meta_boxes['postcustom'] ) { + unset( $editor_settings['enableCustomFields'] ); +} + +/** + * Filters the settings to pass to the block editor. + * + * @since 5.0.0 + * + * @param array $editor_settings Default editor settings. + * @param WP_Post $post Post being edited. + */ +$editor_settings = apply_filters( 'block_editor_settings', $editor_settings, $post ); + +$init_script = <<post_type, + $post->ID, + wp_json_encode( $editor_settings ), + wp_json_encode( $initial_edits ) +); +wp_add_inline_script( 'wp-edit-post', $script ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    +
    + + + +
    +

    +
    +

    + Classic Editor plugin.' ), + __( 'https://wordpress.org/plugins/classic-editor/' ) + ); + + /** + * Filters the message displayed in the block editor interface when JavaScript is + * not enabled in the browser. + * + * @since 5.0.3 + * + * @param string $message The message being displayed. + * @param WP_Post $post The post being edited. + */ + echo apply_filters( 'block_editor_no_javascript_message', $message, $post ); + ?> +

    +
    +
    +
    diff --git a/wp-admin/edit-form-comment.php b/wp-admin/edit-form-comment.php new file mode 100644 index 000000000..a64be9cf8 --- /dev/null +++ b/wp-admin/edit-form-comment.php @@ -0,0 +1,232 @@ + +
    +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/includes/meta-boxes.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/includes/meta-boxes.php */ +do_action( 'do_meta_boxes', 'link', 'normal', $link ); +/** This action is documented in wp-admin/includes/meta-boxes.php */ +do_action( 'do_meta_boxes', 'link', 'advanced', $link ); +/** This action is documented in wp-admin/includes/meta-boxes.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' ) . '

    ' +); + +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 000000000..48800eb8b --- /dev/null +++ b/wp-admin/edit-tag-form.php @@ -0,0 +1,292 @@ + + +
    +

    labels->edit_item; ?>

    + + + + + +
    + +
    +> + + + +name ) ) { + $tag_name_value = esc_attr( $tag->name ); +} +?> + + + + + + + + + slug ) ? apply_filters( 'editable_slug', $tag->slug, $tag ) : ''; + ?> + + + + + + + + + + + + + + + + + +
    + + + + 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' ) . '

    '; + + 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 ( $can_edit_terms ) { + ?> +
    + +
    +
    + + 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(); ?> + +
    + + +
    +

    + ' . 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 000000000..d9333b977 --- /dev/null +++ b/wp-admin/edit.php @@ -0,0 +1,431 @@ + 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' ); + +if ( 'wp_block' === $post_type ) { + wp_enqueue_script( 'wp-list-reusable-blocks' ); + wp_enqueue_style( 'wp-list-reusable-blocks' ); +} + +$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' ) . '

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

    ' + ); + +} + +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'] ), +); +$bulk_messages['wp_block'] = array( + 'updated' => _n( '%s block updated.', '%s blocks updated.', $bulk_counts['updated'] ), + 'locked' => ( 1 == $bulk_counts['locked'] ) ? __( '1 block not updated, somebody is editing it.' ) : _n( '%s block not updated, somebody is editing it.', '%s blocks not updated, somebody is editing them.', $bulk_counts['locked'] ), + 'deleted' => _n( '%s block permanently deleted.', '%s blocks permanently deleted.', $bulk_counts['deleted'] ), + 'trashed' => _n( '%s block moved to the Trash.', '%s blocks moved to the Trash.', $bulk_counts['trashed'] ), + 'untrashed' => _n( '%s block restored from the Trash.', '%s blocks 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 int[] $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' ) . '

    ' +); + +// 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 000000000..8dfcc28fb --- /dev/null +++ b/wp-admin/freedoms.php @@ -0,0 +1,144 @@ + +
    + +

    + +

    + +

    + +

    + +
    + +
    + + + + + +
    +

    + +

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

    +
    + +
    +
    +
    +

    +

    +
    +
    +
    +

    +

    +
    +
    +
    +

    +

    +
    +
    +
    +

    +

    +
    +
    + +
    +

    + 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 000000000..0b6273445 Binary files /dev/null and b/wp-admin/images/align-center-2x.png differ diff --git a/wp-admin/images/align-center.png b/wp-admin/images/align-center.png new file mode 100644 index 000000000..e7bc80788 Binary files /dev/null and b/wp-admin/images/align-center.png differ diff --git a/wp-admin/images/align-left-2x.png b/wp-admin/images/align-left-2x.png new file mode 100644 index 000000000..1b2d42833 Binary files /dev/null and b/wp-admin/images/align-left-2x.png differ diff --git a/wp-admin/images/align-left.png b/wp-admin/images/align-left.png new file mode 100644 index 000000000..b438f7e00 Binary files /dev/null and b/wp-admin/images/align-left.png differ diff --git a/wp-admin/images/align-none-2x.png b/wp-admin/images/align-none-2x.png new file mode 100644 index 000000000..a64a0bed5 Binary files /dev/null and b/wp-admin/images/align-none-2x.png differ diff --git a/wp-admin/images/align-none.png b/wp-admin/images/align-none.png new file mode 100644 index 000000000..b72df6471 Binary files /dev/null and b/wp-admin/images/align-none.png differ diff --git a/wp-admin/images/align-right-2x.png b/wp-admin/images/align-right-2x.png new file mode 100644 index 000000000..013150513 Binary files /dev/null and b/wp-admin/images/align-right-2x.png differ diff --git a/wp-admin/images/align-right.png b/wp-admin/images/align-right.png new file mode 100644 index 000000000..86a1b2e87 Binary files /dev/null and b/wp-admin/images/align-right.png differ diff --git a/wp-admin/images/arrows-2x.png b/wp-admin/images/arrows-2x.png new file mode 100644 index 000000000..0b0c53d1a Binary files /dev/null and b/wp-admin/images/arrows-2x.png differ diff --git a/wp-admin/images/arrows.png b/wp-admin/images/arrows.png new file mode 100644 index 000000000..9e4a96cd2 Binary files /dev/null and b/wp-admin/images/arrows.png differ diff --git a/wp-admin/images/browser-rtl.png b/wp-admin/images/browser-rtl.png new file mode 100644 index 000000000..a4d369563 Binary files /dev/null and b/wp-admin/images/browser-rtl.png differ diff --git a/wp-admin/images/browser.png b/wp-admin/images/browser.png new file mode 100644 index 000000000..83ead4747 Binary files /dev/null and b/wp-admin/images/browser.png differ diff --git a/wp-admin/images/bubble_bg-2x.gif b/wp-admin/images/bubble_bg-2x.gif new file mode 100644 index 000000000..21302a34d Binary files /dev/null and b/wp-admin/images/bubble_bg-2x.gif differ diff --git a/wp-admin/images/bubble_bg.gif b/wp-admin/images/bubble_bg.gif new file mode 100644 index 000000000..f3bfdcdc2 Binary files /dev/null and b/wp-admin/images/bubble_bg.gif differ 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 000000000..0eec4a6df Binary files /dev/null and b/wp-admin/images/comment-grey-bubble-2x.png differ diff --git a/wp-admin/images/comment-grey-bubble.png b/wp-admin/images/comment-grey-bubble.png new file mode 100644 index 000000000..558ee8f32 Binary files /dev/null and b/wp-admin/images/comment-grey-bubble.png differ diff --git a/wp-admin/images/date-button-2x.gif b/wp-admin/images/date-button-2x.gif new file mode 100644 index 000000000..f658b5154 Binary files /dev/null and b/wp-admin/images/date-button-2x.gif differ diff --git a/wp-admin/images/date-button.gif b/wp-admin/images/date-button.gif new file mode 100644 index 000000000..508054477 Binary files /dev/null and b/wp-admin/images/date-button.gif differ diff --git a/wp-admin/images/generic.png b/wp-admin/images/generic.png new file mode 100644 index 000000000..00575a078 Binary files /dev/null and b/wp-admin/images/generic.png differ diff --git a/wp-admin/images/icons32-2x.png b/wp-admin/images/icons32-2x.png new file mode 100644 index 000000000..b86b72725 Binary files /dev/null and b/wp-admin/images/icons32-2x.png differ diff --git a/wp-admin/images/icons32-vs-2x.png b/wp-admin/images/icons32-vs-2x.png new file mode 100644 index 000000000..54e2fb2f5 Binary files /dev/null and b/wp-admin/images/icons32-vs-2x.png differ diff --git a/wp-admin/images/icons32-vs.png b/wp-admin/images/icons32-vs.png new file mode 100644 index 000000000..e46d6bebb Binary files /dev/null and b/wp-admin/images/icons32-vs.png differ diff --git a/wp-admin/images/icons32.png b/wp-admin/images/icons32.png new file mode 100644 index 000000000..e491b1a8d Binary files /dev/null and b/wp-admin/images/icons32.png differ diff --git a/wp-admin/images/imgedit-icons-2x.png b/wp-admin/images/imgedit-icons-2x.png new file mode 100644 index 000000000..98dd41240 Binary files /dev/null and b/wp-admin/images/imgedit-icons-2x.png differ diff --git a/wp-admin/images/imgedit-icons.png b/wp-admin/images/imgedit-icons.png new file mode 100644 index 000000000..0d544ee9b Binary files /dev/null and b/wp-admin/images/imgedit-icons.png differ diff --git a/wp-admin/images/list-2x.png b/wp-admin/images/list-2x.png new file mode 100644 index 000000000..05c6eb37f Binary files /dev/null and b/wp-admin/images/list-2x.png differ diff --git a/wp-admin/images/list.png b/wp-admin/images/list.png new file mode 100644 index 000000000..85d1295e8 Binary files /dev/null and b/wp-admin/images/list.png differ diff --git a/wp-admin/images/loading.gif b/wp-admin/images/loading.gif new file mode 100644 index 000000000..5df0defa7 Binary files /dev/null and b/wp-admin/images/loading.gif differ diff --git a/wp-admin/images/marker.png b/wp-admin/images/marker.png new file mode 100644 index 000000000..30313b871 Binary files /dev/null and b/wp-admin/images/marker.png differ diff --git a/wp-admin/images/mask.png b/wp-admin/images/mask.png new file mode 100644 index 000000000..0fc9cbe63 Binary files /dev/null and b/wp-admin/images/mask.png differ diff --git a/wp-admin/images/media-button-2x.png b/wp-admin/images/media-button-2x.png new file mode 100644 index 000000000..b8f8ed4df Binary files /dev/null and b/wp-admin/images/media-button-2x.png differ diff --git a/wp-admin/images/media-button-image.gif b/wp-admin/images/media-button-image.gif new file mode 100644 index 000000000..56a974731 Binary files /dev/null and b/wp-admin/images/media-button-image.gif differ diff --git a/wp-admin/images/media-button-music.gif b/wp-admin/images/media-button-music.gif new file mode 100644 index 000000000..42e65b248 Binary files /dev/null and b/wp-admin/images/media-button-music.gif differ diff --git a/wp-admin/images/media-button-other.gif b/wp-admin/images/media-button-other.gif new file mode 100644 index 000000000..c7544ec15 Binary files /dev/null and b/wp-admin/images/media-button-other.gif differ diff --git a/wp-admin/images/media-button-video.gif b/wp-admin/images/media-button-video.gif new file mode 100644 index 000000000..405083b0b Binary files /dev/null and b/wp-admin/images/media-button-video.gif differ diff --git a/wp-admin/images/media-button.png b/wp-admin/images/media-button.png new file mode 100644 index 000000000..752ee4523 Binary files /dev/null and b/wp-admin/images/media-button.png differ diff --git a/wp-admin/images/menu-2x.png b/wp-admin/images/menu-2x.png new file mode 100644 index 000000000..7131763a5 Binary files /dev/null and b/wp-admin/images/menu-2x.png differ diff --git a/wp-admin/images/menu-vs-2x.png b/wp-admin/images/menu-vs-2x.png new file mode 100644 index 000000000..99b382369 Binary files /dev/null and b/wp-admin/images/menu-vs-2x.png differ diff --git a/wp-admin/images/menu-vs.png b/wp-admin/images/menu-vs.png new file mode 100644 index 000000000..fe281087d Binary files /dev/null and b/wp-admin/images/menu-vs.png differ diff --git a/wp-admin/images/menu.png b/wp-admin/images/menu.png new file mode 100644 index 000000000..c1d15af82 Binary files /dev/null and b/wp-admin/images/menu.png differ diff --git a/wp-admin/images/no.png b/wp-admin/images/no.png new file mode 100644 index 000000000..59c35bdcc Binary files /dev/null and b/wp-admin/images/no.png differ diff --git a/wp-admin/images/post-formats-vs.png b/wp-admin/images/post-formats-vs.png new file mode 100644 index 000000000..d77f91c06 Binary files /dev/null and b/wp-admin/images/post-formats-vs.png differ diff --git a/wp-admin/images/post-formats.png b/wp-admin/images/post-formats.png new file mode 100644 index 000000000..cae309e5d Binary files /dev/null and b/wp-admin/images/post-formats.png differ diff --git a/wp-admin/images/post-formats32-vs.png b/wp-admin/images/post-formats32-vs.png new file mode 100644 index 000000000..f56534073 Binary files /dev/null and b/wp-admin/images/post-formats32-vs.png differ diff --git a/wp-admin/images/post-formats32.png b/wp-admin/images/post-formats32.png new file mode 100644 index 000000000..69ec095e2 Binary files /dev/null and b/wp-admin/images/post-formats32.png differ diff --git a/wp-admin/images/resize-2x.gif b/wp-admin/images/resize-2x.gif new file mode 100644 index 000000000..e57f9bcd6 Binary files /dev/null and b/wp-admin/images/resize-2x.gif differ diff --git a/wp-admin/images/resize-rtl-2x.gif b/wp-admin/images/resize-rtl-2x.gif new file mode 100644 index 000000000..483c23dcb Binary files /dev/null and b/wp-admin/images/resize-rtl-2x.gif differ diff --git a/wp-admin/images/resize-rtl.gif b/wp-admin/images/resize-rtl.gif new file mode 100644 index 000000000..82502954e Binary files /dev/null and b/wp-admin/images/resize-rtl.gif differ diff --git a/wp-admin/images/resize.gif b/wp-admin/images/resize.gif new file mode 100644 index 000000000..5cb0939a6 Binary files /dev/null and b/wp-admin/images/resize.gif differ diff --git a/wp-admin/images/se.png b/wp-admin/images/se.png new file mode 100644 index 000000000..eb487b463 Binary files /dev/null and b/wp-admin/images/se.png differ diff --git a/wp-admin/images/sort-2x.gif b/wp-admin/images/sort-2x.gif new file mode 100644 index 000000000..60b6084b5 Binary files /dev/null and b/wp-admin/images/sort-2x.gif differ diff --git a/wp-admin/images/sort.gif b/wp-admin/images/sort.gif new file mode 100644 index 000000000..aa65db118 Binary files /dev/null and b/wp-admin/images/sort.gif differ diff --git a/wp-admin/images/spinner-2x.gif b/wp-admin/images/spinner-2x.gif new file mode 100644 index 000000000..26e28e176 Binary files /dev/null and b/wp-admin/images/spinner-2x.gif differ diff --git a/wp-admin/images/spinner.gif b/wp-admin/images/spinner.gif new file mode 100644 index 000000000..88e8a9396 Binary files /dev/null and b/wp-admin/images/spinner.gif differ diff --git a/wp-admin/images/stars-2x.png b/wp-admin/images/stars-2x.png new file mode 100644 index 000000000..15aa9debf Binary files /dev/null and b/wp-admin/images/stars-2x.png differ diff --git a/wp-admin/images/stars.png b/wp-admin/images/stars.png new file mode 100644 index 000000000..c01ada13e Binary files /dev/null and b/wp-admin/images/stars.png differ diff --git a/wp-admin/images/w-logo-blue.png b/wp-admin/images/w-logo-blue.png new file mode 100644 index 000000000..11e550c74 Binary files /dev/null and b/wp-admin/images/w-logo-blue.png differ diff --git a/wp-admin/images/w-logo-white.png b/wp-admin/images/w-logo-white.png new file mode 100644 index 000000000..ed5efcdc0 Binary files /dev/null and b/wp-admin/images/w-logo-white.png differ diff --git a/wp-admin/images/wheel.png b/wp-admin/images/wheel.png new file mode 100644 index 000000000..9b9fdf4a3 Binary files /dev/null and b/wp-admin/images/wheel.png differ diff --git a/wp-admin/images/wordpress-logo-white.svg b/wp-admin/images/wordpress-logo-white.svg new file mode 100644 index 000000000..682e80b8d --- /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 000000000..63b037961 Binary files /dev/null and b/wp-admin/images/wordpress-logo.png differ diff --git a/wp-admin/images/wordpress-logo.svg b/wp-admin/images/wordpress-logo.svg new file mode 100644 index 000000000..ba26fef0d --- /dev/null +++ b/wp-admin/images/wordpress-logo.svg @@ -0,0 +1 @@ + \ 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 000000000..261c819d5 Binary files /dev/null and b/wp-admin/images/wpspin_light-2x.gif differ diff --git a/wp-admin/images/wpspin_light.gif b/wp-admin/images/wpspin_light.gif new file mode 100644 index 000000000..ea9fb0db3 Binary files /dev/null and b/wp-admin/images/wpspin_light.gif differ diff --git a/wp-admin/images/xit-2x.gif b/wp-admin/images/xit-2x.gif new file mode 100644 index 000000000..3a72ee1a2 Binary files /dev/null and b/wp-admin/images/xit-2x.gif differ diff --git a/wp-admin/images/xit.gif b/wp-admin/images/xit.gif new file mode 100644 index 000000000..d288954d9 Binary files /dev/null and b/wp-admin/images/xit.gif differ diff --git a/wp-admin/images/yes.png b/wp-admin/images/yes.png new file mode 100644 index 000000000..fbb39836b Binary files /dev/null and b/wp-admin/images/yes.png differ diff --git a/wp-admin/import.php b/wp-admin/import.php new file mode 100644 index 000000000..14555ec59 --- /dev/null +++ b/wp-admin/import.php @@ -0,0 +1,235 @@ +add_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' ) . '

    ' +); + +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 now' ), $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 $response The no-priv Heartbeat response. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_nopriv_received', $response, $data, $screen_id ); + } + + /** + * Filters Heartbeat Ajax response in no-privilege environments when no data is passed. + * + * @since 3.6.0 + * + * @param array $response The no-priv Heartbeat response. + * @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 $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 intact until the user explicitly changes it (either by manually + * searching for a new location, or by changing their IP address). + * + * If the location was 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( + /* translators: %s: number of comments approved */ + _n( '%s Comment', '%s Comments', $counts->approved ), + number_format_i18n( $counts->approved ) + ), + 'i18n_moderation_text' => sprintf( + /* translators: %s: number of comments in moderation */ + _n( '%s Comment in moderation', '%s Comments in moderation', $counts->moderated ), + 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 ); + $counts = wp_count_comments(); + + $x = new WP_Ajax_Response( + array( + 'what' => 'comment', + 'id' => $comment_id, + 'supplemental' => array( + 'status' => $comment ? $comment->comment_approved : '', + 'postId' => $comment ? $comment->comment_post_ID : '', + /* translators: %s: number of comments */ + '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, + 'in_moderation' => $counts->moderated, + 'i18n_moderation_text' => sprintf( + /* translators: %s: number of comments in moderation */ + _n( '%s Comment in moderation', '%s Comments in moderation', $counts->moderated ), + number_format_i18n( $counts->moderated ) + ), + ), + ) + ); + $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 ); +} + +/** + * Ajax handler to delete a page. + * + * @since 3.1.0 + * + * @param string $action Action to perform. + */ +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', + /* translators: %d: comment ID */ + '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; + $noparents = ''; + + 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 + remove_filter( 'pre_comment_content', 'wp_filter_post_kses' ); + add_filter( 'pre_comment_content', 'wp_filter_kses' ); + } + } + } 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( + /* translators: %s: number of comments approved */ + _n( '%s Comment', '%s Comments', $counts->approved ), + number_format_i18n( $counts->approved ) + ), + 'i18n_moderation_text' => sprintf( + /* translators: %s: number of comments in moderation */ + _n( '%s Comment in moderation', '%s Comments in moderation', $counts->moderated ), + 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->title = empty( $menu_obj->title ) ? __( 'Menu Item' ) : $menu_obj->title; + $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 = time(); + /* 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 ( ! $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' ); + + /* translators: %s: user who is currently editing the post */ + $msg_template = __( 'Saving is disabled: %s is currently editing this post.' ); + if ( $_POST['post_type'] == 'page' ) { + /* translators: %s: user who is currently editing the page */ + $msg_template = __( 'Saving is disabled: %s is currently editing this page.' ); + } + + printf( $msg_template, 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' => esc_html( $_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' => esc_html( $_FILES['async-upload']['name'] ), + ), + ) + ); + + wp_die(); + } + } else { + $post_id = null; + } + + $post_data = ! empty( $_REQUEST['post_data'] ) ? _wp_get_allowed_postdata( _wp_translate_postdata( false, (array) $_REQUEST['post_data'] ) ) : array(); + + if ( is_wp_error( $post_data ) ) { + wp_die( $post_data->get_error_message() ); + } + + // 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' => esc_html( $_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' => esc_html( $_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 ); + /* translators: 1: display_name of last user, 2: date of last edit, 3: time of last edit. */ + $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 { + /* translators: 1: date of last edit, 2: time of last edit. */ + $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 ) { + /** + * Filters the nonces to send to the New/Edit Post screen. + * + * @since 4.3.0 + * + * @param array $response The Heartbeat response. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + */ + $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' => array_merge( + (array) $theme_field_defaults, + array( + 'reviews_url' => true, // Explicitly request the reviews URL to be linked from the Add Themes screen. + ) + ), + ) + ); + + 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['display_name'], $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', + /* translators: %s: URL which cannot be embedded, between code tags */ + '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( wp_basename( $parent_url ), wp_basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; + + $object = array( + 'post_title' => wp_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 WordPress 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()->has_errors() ) { + $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->has_errors() ) { + $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 WordPress 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()->has_errors() ) { + $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->has_errors() ) { + $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 WordPress 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->has_errors() ) { + $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 WordPress 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()->has_errors() ) { + $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->has_errors() ) { + $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 WordPress 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()->has_errors() ) { + $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->has_errors() ) { + $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 WordPress 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->has_errors() ) { + $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( __( 'Sorry, you are not allowed to perform this action.' ) ); + } + + 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 is 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: exporter 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: exporter array index */ + sprintf( __( 'Exporter array at index %s does not include a friendly name.' ), $exporter_key ) + ); + } + + $exporter_friendly_name = $exporter['exporter_friendly_name']; + + 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_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_friendly_name ) ) + ); + } + + $callback = $exporter['callback']; + $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( __( 'Sorry, you are not allowed to perform this action.' ) ); + } + + 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 type.' ) ); + } + + $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: eraser array index */ + wp_send_json_error( sprintf( __( 'Expected an array describing the eraser at index %d.' ), $eraser_index ) ); + } + + if ( ! array_key_exists( 'eraser_friendly_name', $eraser ) ) { + /* translators: %d: eraser array index */ + wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a friendly name.' ), $eraser_index ) ); + } + + $eraser_friendly_name = $eraser['eraser_friendly_name']; + + if ( ! array_key_exists( 'callback', $eraser ) ) { + wp_send_json_error( + sprintf( + /* translators: %s: eraser friendly name */ + __( 'Eraser does not include a callback: %s.' ), + esc_html( $eraser_friendly_name ) + ) + ); + } + + if ( ! is_callable( $eraser['callback'] ) ) { + wp_send_json_error( + sprintf( + /* translators: %s: eraser friendly name */ + __( 'Eraser callback is not valid: %s.' ), + esc_html( $eraser_friendly_name ) + ) + ); + } + + $callback = $eraser['callback']; + $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: eraser 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: eraser 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: eraser 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: eraser 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: eraser 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: eraser 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 ); +} + +/** + * Ajax handler for site health checks on server communication. + * + * @since 5.2.0 + */ +function wp_ajax_health_check_dotorg_communication() { + check_ajax_referer( 'health-check-site-status' ); + + if ( ! current_user_can( 'view_site_health_checks' ) ) { + wp_send_json_error(); + } + + if ( ! class_exists( 'WP_Site_Health' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-site-health.php' ); + } + + $site_health = new WP_Site_Health(); + wp_send_json_success( $site_health->get_test_dotorg_communication() ); +} + +/** + * Ajax handler for site health checks on debug mode. + * + * @since 5.2.0 + */ +function wp_ajax_health_check_is_in_debug_mode() { + wp_verify_nonce( 'health-check-site-status' ); + + if ( ! current_user_can( 'view_site_health_checks' ) ) { + wp_send_json_error(); + } + + if ( ! class_exists( 'WP_Site_Health' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-site-health.php' ); + } + + $site_health = new WP_Site_Health(); + wp_send_json_success( $site_health->get_test_is_in_debug_mode() ); +} + +/** + * Ajax handler for site health checks on background updates. + * + * @since 5.2.0 + */ +function wp_ajax_health_check_background_updates() { + check_ajax_referer( 'health-check-site-status' ); + + if ( ! current_user_can( 'view_site_health_checks' ) ) { + wp_send_json_error(); + } + + if ( ! class_exists( 'WP_Site_Health' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-site-health.php' ); + } + + $site_health = new WP_Site_Health(); + wp_send_json_success( $site_health->get_test_background_updates() ); +} + + +/** + * Ajax handler for site health checks on loopback requests. + * + * @since 5.2.0 + */ +function wp_ajax_health_check_loopback_requests() { + check_ajax_referer( 'health-check-site-status' ); + + if ( ! current_user_can( 'view_site_health_checks' ) ) { + wp_send_json_error(); + } + + if ( ! class_exists( 'WP_Site_Health' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-site-health.php' ); + } + + $site_health = new WP_Site_Health(); + wp_send_json_success( $site_health->get_test_loopback_requests() ); +} + +/** + * Ajax handler for site health check to update the result status. + * + * @since 5.2.0 + */ +function wp_ajax_health_check_site_status_result() { + check_ajax_referer( 'health-check-site-status-result' ); + + if ( ! current_user_can( 'view_site_health_checks' ) ) { + wp_send_json_error(); + } + + set_transient( 'health-check-site-status-result', wp_json_encode( $_POST['counts'] ) ); + + wp_send_json_success(); +} + +/** + * Ajax handler for site health check to get directories and database sizes. + * + * @since 5.2.0 + */ +function wp_ajax_health_check_get_sizes() { + check_ajax_referer( 'health-check-site-status-result' ); + + if ( ! current_user_can( 'view_site_health_checks' ) || is_multisite() ) { + wp_send_json_error(); + } + + if ( ! class_exists( 'WP_Debug_Data' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-debug-data.php' ); + } + + $sizes_data = WP_Debug_Data::get_sizes(); + $all_sizes = array( 'raw' => 0 ); + + foreach ( $sizes_data as $name => $value ) { + $name = sanitize_text_field( $name ); + $data = array(); + + if ( isset( $value['size'] ) ) { + if ( is_string( $value['size'] ) ) { + $data['size'] = sanitize_text_field( $value['size'] ); + } else { + $data['size'] = (int) $value['size']; + } + } + + if ( isset( $value['debug'] ) ) { + if ( is_string( $value['debug'] ) ) { + $data['debug'] = sanitize_text_field( $value['debug'] ); + } else { + $data['debug'] = (int) $value['debug']; + } + } + + if ( ! empty( $value['raw'] ) ) { + $data['raw'] = (int) $value['raw']; + } + + $all_sizes[ $name ] = $data; + } + + if ( isset( $all_sizes['total_size']['debug'] ) && 'not available' === $all_sizes['total_size']['debug'] ) { + wp_send_json_error( $all_sizes ); + } + + wp_send_json_success( $all_sizes ); +} diff --git a/wp-admin/includes/bookmark.php b/wp-admin/includes/bookmark.php new file mode 100644 index 000000000..fa425dda0 --- /dev/null +++ b/wp-admin/includes/bookmark.php @@ -0,0 +1,327 @@ +' . __( '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 int[] $link_categories Array of link category IDs 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' ); + /* translators: %s: URL of link manager plugin */ + 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 000000000..5f8360f06 --- /dev/null +++ b/wp-admin/includes/class-automatic-upgrader-skin.php @@ -0,0 +1,118 @@ +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 000000000..a568d6b10 --- /dev/null +++ b/wp-admin/includes/class-bulk-plugin-upgrader-skin.php @@ -0,0 +1,68 @@ +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 string[] $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 000000000..ce426e015 --- /dev/null +++ b/wp-admin/includes/class-bulk-theme-upgrader-skin.php @@ -0,0 +1,68 @@ +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 string[] $update_actions Array of theme action links. + * @param WP_Theme $theme_info Theme object 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 000000000..c1454e62f --- /dev/null +++ b/wp-admin/includes/class-bulk-upgrader-skin.php @@ -0,0 +1,178 @@ + '', + '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: %s: Title of an update */ + $this->upgrader->strings['skin_update_failed'] = __( 'The update of %s failed.' ); + /* translators: %s: Title of an update */ + $this->upgrader->strings['skin_update_successful'] = __( '%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 000000000..977f6ec9c --- /dev/null +++ b/wp-admin/includes/class-core-upgrader.php @@ -0,0 +1,406 @@ +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 WordPress 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, true ); + + // Allow for signature soft-fail. + // WARNING: This may be removed in the future. + if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) { + // Outout the failure error as a normal feedback, and not as an error: + apply_filters( 'update_feedback', $download->get_error_message() ); + + // Report this failure back to WordPress.org for debugging purposes. + wp_version_check( + array( + 'signature_failure_code' => $download->get_error_code(), + 'signature_failure_data' => $download->get_error_data(), + ) + ); + + // Pretend this error didn't happen. + $download = $download->get_error_data( 'softfail-filename' ); + } + + 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 + * + * @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 000000000..c3d8a7955 --- /dev/null +++ b/wp-admin/includes/class-file-upload-upgrader.php @@ -0,0 +1,132 @@ + 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 000000000..c40df6373 --- /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 000000000..1ebedc774 --- /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 000000000..f1d40a4ff --- /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, $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("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)) { + foreach($handle as $dir) { + 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 000000000..1d59cc73c --- /dev/null +++ b/wp-admin/includes/class-language-pack-upgrader-skin.php @@ -0,0 +1,89 @@ + '', + '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 '
    '; + + /* translators: 1: name of project, 2: language */ + 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 string[] $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 000000000..754c303c0 --- /dev/null +++ b/wp-admin/includes/class-language-pack-upgrader.php @@ -0,0 +1,472 @@ +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.' ); + $this->strings['remove_old'] = __( 'Removing the old version of the translation…' ); + $this->strings['remove_old_failed'] = __( 'Could not remove the old translation.' ); + } + + /** + * 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 WordPress filesystem subclass. + * + * @param object[] $language_updates Optional. Array of language packs to update. @see wp_get_translation_updates(). + * Default empty array. + * @param array $args { + * 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' => true, + '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'], + sprintf( + /* translators: 1: .po, 2: .mo */ + __( '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 ''; + } + + /** + * Clears existing translations where this item is going to be installed into. + * + * @since 5.1.0 + * + * @global WP_Filesystem_Base $wp_filesystem WordPress 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; + + $language_update = $this->skin->language_update; + $language_directory = WP_LANG_DIR . '/'; // Local path for use with glob(). + + if ( 'core' === $language_update->type ) { + $files = array( + $remote_destination . $language_update->language . '.po', + $remote_destination . $language_update->language . '.mo', + $remote_destination . 'admin-' . $language_update->language . '.po', + $remote_destination . 'admin-' . $language_update->language . '.mo', + $remote_destination . 'admin-network-' . $language_update->language . '.po', + $remote_destination . 'admin-network-' . $language_update->language . '.mo', + $remote_destination . 'continents-cities-' . $language_update->language . '.po', + $remote_destination . 'continents-cities-' . $language_update->language . '.mo', + ); + + $json_translation_files = glob( $language_directory . $language_update->language . '-*.json' ); + if ( $json_translation_files ) { + foreach ( $json_translation_files as $json_translation_file ) { + $files[] = str_replace( $language_directory, $remote_destination, $json_translation_file ); + } + } + } else { + $files = array( + $remote_destination . $language_update->slug . '-' . $language_update->language . '.po', + $remote_destination . $language_update->slug . '-' . $language_update->language . '.mo', + ); + + $language_directory = $language_directory . $language_update->type . 's/'; + $json_translation_files = glob( $language_directory . $language_update->slug . '-' . $language_update->language . '-*.json' ); + if ( $json_translation_files ) { + foreach ( $json_translation_files as $json_translation_file ) { + $files[] = str_replace( $language_directory, $remote_destination, $json_translation_file ); + } + } + } + + $files = array_filter( $files, array( $wp_filesystem, 'exists' ) ); + + // No files to delete. + if ( ! $files ) { + return true; + } + + // Check all files are writable before attempting to clear the destination. + $unwritable_files = array(); + + // Check writability. + foreach ( $files as $file ) { + if ( ! $wp_filesystem->is_writable( $file ) ) { + // Attempt to alter permissions to allow writes and try again. + $wp_filesystem->chmod( $file, FS_CHMOD_FILE ); + if ( ! $wp_filesystem->is_writable( $file ) ) { + $unwritable_files[] = $file; + } + } + } + + if ( ! empty( $unwritable_files ) ) { + return new WP_Error( 'files_not_writable', $this->strings['files_not_writable'], implode( ', ', $unwritable_files ) ); + } + + foreach ( $files as $file ) { + if ( ! $wp_filesystem->delete( $file ) ) { + return new WP_Error( 'remove_old_failed', $this->strings['remove_old_failed'] ); + } + } + + return true; + } +} diff --git a/wp-admin/includes/class-pclzip.php b/wp-admin/includes/class-pclzip.php new file mode 100644 index 000000000..ae0af7a8f --- /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 000000000..1d6dd0187 --- /dev/null +++ b/wp-admin/includes/class-plugin-installer-skin.php @@ -0,0 +1,105 @@ + '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 ) ) { + /* translators: 1: name of API, 2: version of API */ + $this->upgrader->strings['process_success'] = sprintf( __( 'Successfully installed the plugin %1$s %2$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' ) . ''; + } elseif ( '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 string[] $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 relative to the plugins directory. + */ + $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 000000000..87cbefbc7 --- /dev/null +++ b/wp-admin/includes/class-plugin-upgrader-skin.php @@ -0,0 +1,76 @@ + '', + '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 string[] $update_actions Array of plugin action links. + * @param string $plugin Path to the plugin file relative to the plugins directory. + */ + $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 000000000..c80c9c4c9 --- /dev/null +++ b/wp-admin/includes/class-plugin-upgrader.php @@ -0,0 +1,487 @@ +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 Path to the plugin file relative to the plugins directory. + * @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 string[] $plugins Array of paths to plugin files relative to the plugins directory. + * @param array $args { + * Optional. Other arguments for upgrading several plugins at once. + * + * @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 WordPress 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 WordPress 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 000000000..5f62e2c00 --- /dev/null +++ b/wp-admin/includes/class-theme-installer-skin.php @@ -0,0 +1,124 @@ + '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'] = ''; + $install_actions['preview'] .= ''; + /* translators: %s: theme name */ + $install_actions['preview'] .= '' . sprintf( __( 'Live Preview “%s”' ), $name ) . ''; + } + $install_actions['activate'] = ''; + $install_actions['activate'] .= ''; + /* translators: %s: theme 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 string[] $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 000000000..062297df7 --- /dev/null +++ b/wp-admin/includes/class-theme-upgrader-skin.php @@ -0,0 +1,107 @@ + '', + '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'] = ''; + $update_actions['preview'] .= ''; + /* translators: %s: theme name */ + $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'] = ''; + $update_actions['preview'] .= ''; + /* translators: %s: theme name */ + $update_actions['preview'] .= '' . sprintf( __( 'Live Preview “%s”' ), $name ) . ''; + } + $update_actions['activate'] = ''; + $update_actions['activate'] .= ''; + /* translators: %s: theme 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 string[] $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 000000000..7b521063f --- /dev/null +++ b/wp-admin/includes/class-theme-upgrader.php @@ -0,0 +1,648 @@ +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 string[] $themes Array of 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 WordPress 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'], + sprintf( + /* translators: %s: style.css */ + __( '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'], + sprintf( + /* translators: %s: style.css */ + __( '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'], + sprintf( + /* translators: %s: index.php */ + __( '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 000000000..d8719debf --- /dev/null +++ b/wp-admin/includes/class-walker-category-checklist.php @@ -0,0 +1,128 @@ + '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 000000000..994cc040f --- /dev/null +++ b/wp-admin/includes/class-walker-nav-menu-checklist.php @@ -0,0 +1,119 @@ +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 000000000..eb940af37 --- /dev/null +++ b/wp-admin/includes/class-walker-nav-menu-edit.php @@ -0,0 +1,266 @@ + $_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 ) { + /** This filter is documented in wp-admin/includes/comment.php */ + $comment_content = apply_filters( 'comment_edit_pre', $comment->comment_content ); + ?> + + 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 000000000..2237ab34e --- /dev/null +++ b/wp-admin/includes/class-wp-community-events.php @@ -0,0 +1,464 @@ +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 = 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'] ); + } elseif ( 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; + } + + /** + * Prepares the event list for presentation. + * + * Discards expired events, and makes WordCamps "sticky." Attendees need more + * advanced notice about WordCamps than they do for meetups, so camps should + * appear in the list sooner. If a WordCamp is coming up, the API will "stick" + * it in the response, even if it wouldn't otherwise appear. When that happens, + * the event will be at the end of the list, and will need to be moved into a + * higher position, so that it doesn't get trimmed off. + * + * @since 4.8.0 + * @since 4.9.7 Stick a WordCamp to the final list. + * + * @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'] ) ) { + $wordcamps = array(); + $current_timestamp = current_time( 'timestamp' ); + + foreach ( $response_body['events'] as $key => $event ) { + /* + * Skip WordCamps, because they might be multi-day events. + * Save a copy so they can be pinned later. + */ + if ( 'wordcamp' === $event['type'] ) { + $wordcamps[] = $event; + 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 ); + $trimmed_event_types = wp_list_pluck( $response_body['events'], 'type' ); + + // Make sure the soonest upcoming WordCamp is pinned in the list. + if ( ! in_array( 'wordcamp', $trimmed_event_types ) && $wordcamps ) { + array_pop( $response_body['events'] ); + array_push( $response_body['events'], $wordcamps[0] ); + } + } + + 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-debug-data.php b/wp-admin/includes/class-wp-debug-data.php new file mode 100644 index 000000000..72df26217 --- /dev/null +++ b/wp-admin/includes/class-wp-debug-data.php @@ -0,0 +1,1238 @@ + $update ) { + if ( 'upgrade' === $update->response ) { + // translators: %s: Latest WordPress version number. + $core_update_needed = ' ' . sprintf( __( '(Latest version: %s)' ), $update->version ); + } else { + $core_update_needed = ''; + } + } + + // Set up the array that holds all debug information. + $info = array(); + + $info['wp-core'] = array( + 'label' => __( 'WordPress' ), + 'fields' => array( + 'version' => array( + 'label' => __( 'Version' ), + 'value' => $core_version . $core_update_needed, + 'debug' => $core_version, + ), + 'site_language' => array( + 'label' => __( 'Site Language' ), + 'value' => get_locale(), + ), + 'user_language' => array( + 'label' => __( 'User Language' ), + 'value' => get_user_locale(), + ), + 'home_url' => array( + 'label' => __( 'Home URL' ), + 'value' => get_bloginfo( 'url' ), + 'private' => true, + ), + 'site_url' => array( + 'label' => __( 'Site URL' ), + 'value' => get_bloginfo( 'wpurl' ), + 'private' => true, + ), + 'permalink' => array( + 'label' => __( 'Permalink structure' ), + 'value' => $permalink_structure ?: __( 'No permalink structure set' ), + 'debug' => $permalink_structure, + ), + 'https_status' => array( + 'label' => __( 'Is this site using HTTPS?' ), + 'value' => $is_ssl ? __( 'Yes' ) : __( 'No' ), + 'debug' => $is_ssl, + ), + 'user_registration' => array( + 'label' => __( 'Can anyone register on this site?' ), + 'value' => $users_can_register ? __( 'Yes' ) : __( 'No' ), + 'debug' => $users_can_register, + ), + 'default_comment_status' => array( + 'label' => __( 'Default comment status' ), + 'value' => 'open' === $default_comment_status ? _x( 'Open', 'comment status' ) : _x( 'Closed', 'comment status' ), + 'debug' => $default_comment_status, + ), + 'multisite' => array( + 'label' => __( 'Is this a multisite?' ), + 'value' => $is_multisite ? __( 'Yes' ) : __( 'No' ), + 'debug' => $is_multisite, + ), + ), + ); + + if ( ! $is_multisite ) { + $info['wp-paths-sizes'] = array( + 'label' => __( 'Directories and Sizes' ), + 'fields' => array(), + ); + } + + $info['wp-dropins'] = array( + 'label' => __( 'Drop-ins' ), + 'show_count' => true, + 'description' => __( 'Drop-ins are single files that replace or enhance WordPress features in ways that are not possible for traditional plugins.' ), + 'fields' => array(), + ); + + $info['wp-active-theme'] = array( + 'label' => __( 'Active Theme' ), + 'fields' => array(), + ); + + $info['wp-themes'] = array( + 'label' => __( 'Other Themes' ), + 'show_count' => true, + 'fields' => array(), + ); + + $info['wp-mu-plugins'] = array( + 'label' => __( 'Must Use Plugins' ), + 'show_count' => true, + 'fields' => array(), + ); + + $info['wp-plugins-active'] = array( + 'label' => __( 'Active Plugins' ), + 'show_count' => true, + 'fields' => array(), + ); + + $info['wp-plugins-inactive'] = array( + 'label' => __( 'Inactive Plugins' ), + 'show_count' => true, + 'fields' => array(), + ); + + $info['wp-media'] = array( + 'label' => __( 'Media Handling' ), + 'fields' => array(), + ); + + $info['wp-server'] = array( + 'label' => __( 'Server' ), + 'description' => __( 'The options shown below relate to your server setup. If changes are required, you may need your web host’s assistance.' ), + 'fields' => array(), + ); + + $info['wp-database'] = array( + 'label' => __( 'Database' ), + 'fields' => array(), + ); + + // Check if WP_DEBUG_LOG is set. + $wp_debug_log_value = __( 'Disabled' ); + + if ( is_string( WP_DEBUG_LOG ) ) { + $wp_debug_log_value = WP_DEBUG_LOG; + } elseif ( WP_DEBUG_LOG ) { + $wp_debug_log_value = __( 'Enabled' ); + } + + // Check CONCATENATE_SCRIPTS. + if ( defined( 'CONCATENATE_SCRIPTS' ) ) { + $concatenate_scripts = CONCATENATE_SCRIPTS ? __( 'Enabled' ) : __( 'Disabled' ); + $concatenate_scripts_debug = CONCATENATE_SCRIPTS ? 'true' : 'false'; + } else { + $concatenate_scripts = __( 'Undefined' ); + $concatenate_scripts_debug = 'undefined'; + } + + // Check COMPRESS_SCRIPTS. + if ( defined( 'COMPRESS_SCRIPTS' ) ) { + $compress_scripts = COMPRESS_SCRIPTS ? __( 'Enabled' ) : __( 'Disabled' ); + $compress_scripts_debug = COMPRESS_SCRIPTS ? 'true' : 'false'; + } else { + $compress_scripts = __( 'Undefined' ); + $compress_scripts_debug = 'undefined'; + } + + // Check COMPRESS_CSS. + if ( defined( 'COMPRESS_CSS' ) ) { + $compress_css = COMPRESS_CSS ? __( 'Enabled' ) : __( 'Disabled' ); + $compress_css_debug = COMPRESS_CSS ? 'true' : 'false'; + } else { + $compress_css = __( 'Undefined' ); + $compress_css_debug = 'undefined'; + } + + // Check WP_LOCAL_DEV. + if ( defined( 'WP_LOCAL_DEV' ) ) { + $wp_local_dev = WP_LOCAL_DEV ? __( 'Enabled' ) : __( 'Disabled' ); + $wp_local_dev_debug = WP_LOCAL_DEV ? 'true' : 'false'; + } else { + $wp_local_dev = __( 'Undefined' ); + $wp_local_dev_debug = 'undefined'; + } + + $info['wp-constants'] = array( + 'label' => __( 'WordPress Constants' ), + 'description' => __( 'These settings alter where and how parts of WordPress are loaded.' ), + 'fields' => array( + 'ABSPATH' => array( + 'label' => 'ABSPATH', + 'value' => ABSPATH, + 'private' => true, + ), + 'WP_HOME' => array( + 'label' => 'WP_HOME', + 'value' => ( defined( 'WP_HOME' ) ? WP_HOME : __( 'Undefined' ) ), + 'debug' => ( defined( 'WP_HOME' ) ? WP_HOME : 'undefined' ), + ), + 'WP_SITEURL' => array( + 'label' => 'WP_SITEURL', + 'value' => ( defined( 'WP_SITEURL' ) ? WP_SITEURL : __( 'Undefined' ) ), + 'debug' => ( defined( 'WP_SITEURL' ) ? WP_SITEURL : 'undefined' ), + ), + 'WP_CONTENT_DIR' => array( + 'label' => 'WP_CONTENT_DIR', + 'value' => WP_CONTENT_DIR, + ), + 'WP_PLUGIN_DIR' => array( + 'label' => 'WP_PLUGIN_DIR', + 'value' => WP_PLUGIN_DIR, + ), + 'WP_MAX_MEMORY_LIMIT' => array( + 'label' => 'WP_MAX_MEMORY_LIMIT', + 'value' => WP_MAX_MEMORY_LIMIT, + ), + 'WP_DEBUG' => array( + 'label' => 'WP_DEBUG', + 'value' => WP_DEBUG ? __( 'Enabled' ) : __( 'Disabled' ), + 'debug' => WP_DEBUG, + ), + 'WP_DEBUG_DISPLAY' => array( + 'label' => 'WP_DEBUG_DISPLAY', + 'value' => WP_DEBUG_DISPLAY ? __( 'Enabled' ) : __( 'Disabled' ), + 'debug' => WP_DEBUG_DISPLAY, + ), + 'WP_DEBUG_LOG' => array( + 'label' => 'WP_DEBUG_LOG', + 'value' => $wp_debug_log_value, + 'debug' => WP_DEBUG_LOG, + ), + 'SCRIPT_DEBUG' => array( + 'label' => 'SCRIPT_DEBUG', + 'value' => SCRIPT_DEBUG ? __( 'Enabled' ) : __( 'Disabled' ), + 'debug' => SCRIPT_DEBUG, + ), + 'WP_CACHE' => array( + 'label' => 'WP_CACHE', + 'value' => WP_CACHE ? __( 'Enabled' ) : __( 'Disabled' ), + 'debug' => WP_CACHE, + ), + 'CONCATENATE_SCRIPTS' => array( + 'label' => 'CONCATENATE_SCRIPTS', + 'value' => $concatenate_scripts, + 'debug' => $concatenate_scripts_debug, + ), + 'COMPRESS_SCRIPTS' => array( + 'label' => 'COMPRESS_SCRIPTS', + 'value' => $compress_scripts, + 'debug' => $compress_scripts_debug, + ), + 'COMPRESS_CSS' => array( + 'label' => 'COMPRESS_CSS', + 'value' => $compress_css, + 'debug' => $compress_css_debug, + ), + 'WP_LOCAL_DEV' => array( + 'label' => 'WP_LOCAL_DEV', + 'value' => $wp_local_dev, + 'debug' => $wp_local_dev_debug, + ), + ), + ); + + $is_writable_abspath = wp_is_writable( ABSPATH ); + $is_writable_wp_content_dir = wp_is_writable( WP_CONTENT_DIR ); + $is_writable_upload_dir = wp_is_writable( $upload_dir['basedir'] ); + $is_writable_wp_plugin_dir = wp_is_writable( WP_PLUGIN_DIR ); + $is_writable_template_directory = wp_is_writable( get_template_directory() . '/..' ); + + $info['wp-filesystem'] = array( + 'label' => __( 'Filesystem Permissions' ), + 'description' => __( 'Shows whether WordPress is able to write to the directories it needs access to.' ), + 'fields' => array( + 'wordpress' => array( + 'label' => __( 'The main WordPress directory' ), + 'value' => ( $is_writable_abspath ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_abspath ? 'writable' : 'not writable' ), + ), + 'wp-content' => array( + 'label' => __( 'The wp-content directory' ), + 'value' => ( $is_writable_wp_content_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_wp_content_dir ? 'writable' : 'not writable' ), + ), + 'uploads' => array( + 'label' => __( 'The uploads directory' ), + 'value' => ( $is_writable_upload_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_upload_dir ? 'writable' : 'not writable' ), + ), + 'plugins' => array( + 'label' => __( 'The plugins directory' ), + 'value' => ( $is_writable_wp_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_wp_plugin_dir ? 'writable' : 'not writable' ), + ), + 'themes' => array( + 'label' => __( 'The themes directory' ), + 'value' => ( $is_writable_template_directory ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_template_directory ? 'writable' : 'not writable' ), + ), + ), + ); + + // Conditionally add debug information for multisite setups. + if ( is_multisite() ) { + $network_query = new WP_Network_Query(); + $network_ids = $network_query->query( + array( + 'fields' => 'ids', + 'number' => 100, + 'no_found_rows' => false, + ) + ); + + $site_count = 0; + foreach ( $network_ids as $network_id ) { + $site_count += get_blog_count( $network_id ); + } + + $info['wp-core']['fields']['user_count'] = array( + 'label' => __( 'User count' ), + 'value' => get_user_count(), + ); + + $info['wp-core']['fields']['site_count'] = array( + 'label' => __( 'Site count' ), + 'value' => $site_count, + ); + + $info['wp-core']['fields']['network_count'] = array( + 'label' => __( 'Network count' ), + 'value' => $network_query->found_networks, + ); + } else { + $user_count = count_users(); + + $info['wp-core']['fields']['user_count'] = array( + 'label' => __( 'User count' ), + 'value' => $user_count['total_users'], + ); + } + + // WordPress features requiring processing. + $wp_dotorg = wp_remote_get( 'https://wordpress.org', array( 'timeout' => 10 ) ); + + if ( ! is_wp_error( $wp_dotorg ) ) { + $info['wp-core']['fields']['dotorg_communication'] = array( + 'label' => __( 'Communication with WordPress.org' ), + 'value' => __( 'WordPress.org is reachable' ), + 'debug' => 'true', + ); + } else { + $info['wp-core']['fields']['dotorg_communication'] = array( + 'label' => __( 'Communication with WordPress.org' ), + 'value' => sprintf( + // translators: 1: The IP address WordPress.org resolves to. 2: The error returned by the lookup. + __( 'Unable to reach WordPress.org at %1$s: %2$s' ), + gethostbyname( 'wordpress.org' ), + $wp_dotorg->get_error_message() + ), + 'debug' => $wp_dotorg->get_error_message(), + ); + } + + // Remove accordion for Directories and Sizes if in Multisite. + if ( ! $is_multisite ) { + $loading = __( 'Loading…' ); + + $info['wp-paths-sizes']['fields'] = array( + 'wordpress_path' => array( + 'label' => __( 'WordPress directory location' ), + 'value' => untrailingslashit( ABSPATH ), + ), + 'wordpress_size' => array( + 'label' => __( 'WordPress directory size' ), + 'value' => $loading, + 'debug' => 'loading...', + ), + 'uploads_path' => array( + 'label' => __( 'Uploads directory location' ), + 'value' => $upload_dir['basedir'], + ), + 'uploads_size' => array( + 'label' => __( 'Uploads directory size' ), + 'value' => $loading, + 'debug' => 'loading...', + ), + 'themes_path' => array( + 'label' => __( 'Themes directory location' ), + 'value' => get_theme_root(), + ), + 'themes_size' => array( + 'label' => __( 'Themes directory size' ), + 'value' => $loading, + 'debug' => 'loading...', + ), + 'plugins_path' => array( + 'label' => __( 'Plugins directory location' ), + 'value' => WP_PLUGIN_DIR, + ), + 'plugins_size' => array( + 'label' => __( 'Plugins directory size' ), + 'value' => $loading, + 'debug' => 'loading...', + ), + 'database_size' => array( + 'label' => __( 'Database size' ), + 'value' => $loading, + 'debug' => 'loading...', + ), + 'total_size' => array( + 'label' => __( 'Total installation size' ), + 'value' => $loading, + 'debug' => 'loading...', + ), + ); + } + + // Get a list of all drop-in replacements. + $dropins = get_dropins(); + + // Get dropins descriptions. + $dropin_descriptions = _get_dropins(); + + // Spare few function calls. + $not_available = __( 'Not available' ); + + foreach ( $dropins as $dropin_key => $dropin ) { + $info['wp-dropins']['fields'][ sanitize_text_field( $dropin_key ) ] = array( + 'label' => $dropin_key, + 'value' => $dropin_descriptions[ $dropin_key ][0], + 'debug' => 'true', + ); + } + + // Populate the media fields. + $info['wp-media']['fields']['image_editor'] = array( + 'label' => __( 'Active editor' ), + 'value' => _wp_image_editor_choose(), + ); + + // Get ImageMagic information, if available. + if ( class_exists( 'Imagick' ) ) { + // Save the Imagick instance for later use. + $imagick = new Imagick(); + $imagick_version = $imagick->getVersion(); + } else { + $imagick_version = __( 'Not available' ); + } + + $info['wp-media']['fields']['imagick_module_version'] = array( + 'label' => __( 'ImageMagick version number' ), + 'value' => ( is_array( $imagick_version ) ? $imagick_version['versionNumber'] : $imagick_version ), + ); + + $info['wp-media']['fields']['imagemagick_version'] = array( + 'label' => __( 'ImageMagick version string' ), + 'value' => ( is_array( $imagick_version ) ? $imagick_version['versionString'] : $imagick_version ), + ); + + // If Imagick is used as our editor, provide some more information about its limitations. + if ( 'WP_Image_Editor_Imagick' === _wp_image_editor_choose() && isset( $imagick ) && $imagick instanceof Imagick ) { + $limits = array( + 'area' => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : $not_available ), + 'disk' => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : $not_available ), + 'file' => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : $not_available ), + 'map' => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : $not_available ), + 'memory' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : $not_available ), + 'thread' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : $not_available ), + ); + + $limits_debug = array( + 'imagick::RESOURCETYPE_AREA' => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : 'not available' ), + 'imagick::RESOURCETYPE_DISK' => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : 'not available' ), + 'imagick::RESOURCETYPE_FILE' => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : 'not available' ), + 'imagick::RESOURCETYPE_MAP' => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : 'not available' ), + 'imagick::RESOURCETYPE_MEMORY' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : 'not available' ), + 'imagick::RESOURCETYPE_THREAD' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : 'not available' ), + ); + + $info['wp-media']['fields']['imagick_limits'] = array( + 'label' => __( 'Imagick Resource Limits' ), + 'value' => $limits, + 'debug' => $limits_debug, + ); + } + + // Get GD information, if available. + if ( function_exists( 'gd_info' ) ) { + $gd = gd_info(); + } else { + $gd = false; + } + + $info['wp-media']['fields']['gd_version'] = array( + 'label' => __( 'GD version' ), + 'value' => ( is_array( $gd ) ? $gd['GD Version'] : $not_available ), + 'debug' => ( is_array( $gd ) ? $gd['GD Version'] : 'not available' ), + ); + + // Get Ghostscript information, if available. + if ( function_exists( 'exec' ) ) { + $gs = exec( 'gs --version' ); + + if ( empty( $gs ) ) { + $gs = $not_available; + $gs_debug = 'not available'; + } else { + $gs_debug = $gs; + } + } else { + $gs = __( 'Unable to determine if Ghostscript is installed' ); + $gs_debug = 'unknown'; + } + + $info['wp-media']['fields']['ghostscript_version'] = array( + 'label' => __( 'Ghostscript version' ), + 'value' => $gs, + 'debug' => $gs_debug, + ); + + // Populate the server debug fields. + if ( function_exists( 'php_uname' ) ) { + $server_architecture = sprintf( '%s %s %s', php_uname( 's' ), php_uname( 'r' ), php_uname( 'm' ) ); + } else { + $server_architecture = 'unknown'; + } + + if ( function_exists( 'phpversion' ) ) { + $php_version_debug = phpversion(); + // Whether PHP supports 64bit + $php64bit = ( PHP_INT_SIZE * 8 === 64 ); + + $php_version = sprintf( + '%s %s', + $php_version_debug, + ( $php64bit ? __( '(Supports 64bit values)' ) : __( '(Does not support 64bit values)' ) ) + ); + + if ( $php64bit ) { + $php_version_debug .= ' 64bit'; + } + } else { + $php_version = __( 'Unable to determine PHP version' ); + $php_version_debug = 'unknown'; + } + + if ( function_exists( 'php_sapi_name' ) ) { + $php_sapi = php_sapi_name(); + } else { + $php_sapi = 'unknown'; + } + + $info['wp-server']['fields']['server_architecture'] = array( + 'label' => __( 'Server architecture' ), + 'value' => ( 'unknown' !== $server_architecture ? $server_architecture : __( 'Unable to determine server architecture' ) ), + 'debug' => $server_architecture, + ); + $info['wp-server']['fields']['httpd_software'] = array( + 'label' => __( 'Web server' ), + 'value' => ( isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : __( 'Unable to determine what web server software is used' ) ), + 'debug' => ( isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : 'unknown' ), + ); + $info['wp-server']['fields']['php_version'] = array( + 'label' => __( 'PHP version' ), + 'value' => $php_version, + 'debug' => $php_version_debug, + ); + $info['wp-server']['fields']['php_sapi'] = array( + 'label' => __( 'PHP SAPI' ), + 'value' => ( 'unknown' !== $php_sapi ? $php_sapi : __( 'Unable to determine PHP SAPI' ) ), + 'debug' => $php_sapi, + ); + + // Some servers disable `ini_set()` and `ini_get()`, we check this before trying to get configuration values. + if ( ! function_exists( 'ini_get' ) ) { + $info['wp-server']['fields']['ini_get'] = array( + 'label' => __( 'Server settings' ), + 'value' => __( 'Unable to determine some settings, as the ini_get() function has been disabled.' ), + 'debug' => 'ini_get() is disabled', + ); + } else { + $info['wp-server']['fields']['max_input_variables'] = array( + 'label' => __( 'PHP max input variables' ), + 'value' => ini_get( 'max_input_vars' ), + ); + $info['wp-server']['fields']['time_limit'] = array( + 'label' => __( 'PHP time limit' ), + 'value' => ini_get( 'max_execution_time' ), + ); + $info['wp-server']['fields']['memory_limit'] = array( + 'label' => __( 'PHP memory limit' ), + 'value' => ini_get( 'memory_limit' ), + ); + $info['wp-server']['fields']['max_input_time'] = array( + 'label' => __( 'Max input time' ), + 'value' => ini_get( 'max_input_time' ), + ); + $info['wp-server']['fields']['upload_max_size'] = array( + 'label' => __( 'Upload max filesize' ), + 'value' => ini_get( 'upload_max_filesize' ), + ); + $info['wp-server']['fields']['php_post_max_size'] = array( + 'label' => __( 'PHP post max size' ), + 'value' => ini_get( 'post_max_size' ), + ); + } + + if ( function_exists( 'curl_version' ) ) { + $curl = curl_version(); + + $info['wp-server']['fields']['curl_version'] = array( + 'label' => __( 'cURL version' ), + 'value' => sprintf( '%s %s', $curl['version'], $curl['ssl_version'] ), + ); + } else { + $info['wp-server']['fields']['curl_version'] = array( + 'label' => __( 'cURL version' ), + 'value' => $not_available, + 'debug' => 'not available', + ); + } + + // SUHOSIN + $suhosin_loaded = ( extension_loaded( 'suhosin' ) || ( defined( 'SUHOSIN_PATCH' ) && constant( 'SUHOSIN_PATCH' ) ) ); + + $info['wp-server']['fields']['suhosin'] = array( + 'label' => __( 'Is SUHOSIN installed?' ), + 'value' => ( $suhosin_loaded ? __( 'Yes' ) : __( 'No' ) ), + 'debug' => $suhosin_loaded, + ); + + // Imagick + $imagick_loaded = extension_loaded( 'imagick' ); + + $info['wp-server']['fields']['imagick_availability'] = array( + 'label' => __( 'Is the Imagick library available?' ), + 'value' => ( $imagick_loaded ? __( 'Yes' ) : __( 'No' ) ), + 'debug' => $imagick_loaded, + ); + + // Check if a .htaccess file exists. + if ( is_file( ABSPATH . '.htaccess' ) ) { + // If the file exists, grab the content of it. + $htaccess_content = file_get_contents( ABSPATH . '.htaccess' ); + + // Filter away the core WordPress rules. + $filtered_htaccess_content = trim( preg_replace( '/\# BEGIN WordPress[\s\S]+?# END WordPress/si', '', $htaccess_content ) ); + $filtered_htaccess_content = ! empty( $filtered_htaccess_content ); + + $info['wp-server']['fields']['htaccess_extra_rules'] = array( + 'label' => __( '.htaccess rules' ), + 'value' => ( $filtered_htaccess_content ? __( 'Custom rules have been added to your .htaccess file.' ) : __( 'Your .htaccess file contains only core WordPress features.' ) ), + 'debug' => $filtered_htaccess_content, + ); + } + + // Populate the database debug fields. + if ( is_resource( $wpdb->dbh ) ) { + // Old mysql extension. + $extension = 'mysql'; + } elseif ( is_object( $wpdb->dbh ) ) { + // mysqli or PDO. + $extension = get_class( $wpdb->dbh ); + } else { + // Unknown sql extension. + $extension = null; + } + + /* + * Check what database engine is used, this will throw compatibility + * warnings from PHP compatibility testers, but `mysql_*` is + * still valid in PHP 5.6, so we need to account for that. + */ + if ( method_exists( $wpdb, 'db_version' ) ) { + if ( $wpdb->use_mysqli ) { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_server_info + $server = mysqli_get_server_info( $wpdb->dbh ); + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_server_info + $server = mysql_get_server_info( $wpdb->dbh ); + } + } else { + $server = null; + } + + if ( isset( $wpdb->use_mysqli ) && $wpdb->use_mysqli ) { + $client_version = $wpdb->dbh->client_info; + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info + if ( preg_match( '|[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}|', mysql_get_client_info(), $matches ) ) { + $client_version = $matches[0]; + } else { + $client_version = null; + } + } + + $info['wp-database']['fields']['extension'] = array( + 'label' => __( 'Extension' ), + 'value' => $extension, + ); + + $info['wp-database']['fields']['server_version'] = array( + 'label' => __( 'Server version' ), + 'value' => $server, + ); + + $info['wp-database']['fields']['client_version'] = array( + 'label' => __( 'Client version' ), + 'value' => $client_version, + ); + + $info['wp-database']['fields']['database_user'] = array( + 'label' => __( 'Database user' ), + 'value' => $wpdb->dbuser, + 'private' => true, + ); + + $info['wp-database']['fields']['database_host'] = array( + 'label' => __( 'Database host' ), + 'value' => $wpdb->dbhost, + 'private' => true, + ); + + $info['wp-database']['fields']['database_name'] = array( + 'label' => __( 'Database name' ), + 'value' => $wpdb->dbname, + 'private' => true, + ); + + $info['wp-database']['fields']['database_prefix'] = array( + 'label' => __( 'Database prefix' ), + 'value' => $wpdb->prefix, + 'private' => true, + ); + + // List must use plugins if there are any. + $mu_plugins = get_mu_plugins(); + + foreach ( $mu_plugins as $plugin_path => $plugin ) { + $plugin_version = $plugin['Version']; + $plugin_author = $plugin['Author']; + + $plugin_version_string = __( 'No version or author information is available.' ); + $plugin_version_string_debug = 'author: (undefined), version: (undefined)'; + + if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) { + // translators: 1: Plugin version number. 2: Plugin author name. + $plugin_version_string = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author ); + $plugin_version_string_debug = sprintf( 'version: %s, author: %s', $plugin_version, $plugin_author ); + } else { + if ( ! empty( $plugin_author ) ) { + // translators: %s: Plugin author name. + $plugin_version_string = sprintf( __( 'By %s' ), $plugin_author ); + $plugin_version_string_debug = sprintf( 'author: %s, version: (undefined)', $plugin_author ); + } + + if ( ! empty( $plugin_version ) ) { + // translators: %s: Plugin version number. + $plugin_version_string = sprintf( __( 'Version %s' ), $plugin_version ); + $plugin_version_string_debug = sprintf( 'author: (undefined), version: %s', $plugin_version ); + } + } + + $info['wp-mu-plugins']['fields'][ sanitize_text_field( $plugin['Name'] ) ] = array( + 'label' => $plugin['Name'], + 'value' => $plugin_version_string, + 'debug' => $plugin_version_string_debug, + ); + } + + // List all available plugins. + $plugins = get_plugins(); + $plugin_updates = get_plugin_updates(); + + foreach ( $plugins as $plugin_path => $plugin ) { + $plugin_part = ( is_plugin_active( $plugin_path ) ) ? 'wp-plugins-active' : 'wp-plugins-inactive'; + + $plugin_version = $plugin['Version']; + $plugin_author = $plugin['Author']; + + $plugin_version_string = __( 'No version or author information is available.' ); + $plugin_version_string_debug = 'author: (undefined), version: (undefined)'; + + if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) { + // translators: 1: Plugin version number. 2: Plugin author name. + $plugin_version_string = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author ); + $plugin_version_string_debug = sprintf( 'version: %s, author: %s', $plugin_version, $plugin_author ); + } else { + if ( ! empty( $plugin_author ) ) { + // translators: %s: Plugin author name. + $plugin_version_string = sprintf( __( 'By %s' ), $plugin_author ); + $plugin_version_string_debug = sprintf( 'author: %s, version: (undefined)', $plugin_author ); + } + + if ( ! empty( $plugin_version ) ) { + // translators: %s: Plugin version number. + $plugin_version_string = sprintf( __( 'Version %s' ), $plugin_version ); + $plugin_version_string_debug = sprintf( 'author: (undefined), version: %s', $plugin_version ); + } + } + + if ( array_key_exists( $plugin_path, $plugin_updates ) ) { + // translators: %s: Latest plugin version number. + $plugin_version_string .= ' ' . sprintf( __( '(Latest version: %s)' ), $plugin_updates[ $plugin_path ]->update->new_version ); + $plugin_version_string_debug .= sprintf( ' (latest version: %s)', $plugin_updates[ $plugin_path ]->update->new_version ); + } + + $info[ $plugin_part ]['fields'][ sanitize_text_field( $plugin['Name'] ) ] = array( + 'label' => $plugin['Name'], + 'value' => $plugin_version_string, + 'debug' => $plugin_version_string_debug, + ); + } + + // Populate the section for the currently active theme. + global $_wp_theme_features; + $theme_features = array(); + + if ( ! empty( $_wp_theme_features ) ) { + foreach ( $_wp_theme_features as $feature => $options ) { + $theme_features[] = $feature; + } + } + + $active_theme = wp_get_theme(); + $theme_updates = get_theme_updates(); + + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $active_theme_version = $active_theme->Version; + $active_theme_version_debug = $active_theme_version; + + if ( array_key_exists( $active_theme->stylesheet, $theme_updates ) ) { + $theme_update_new_version = $theme_updates[ $active_theme->stylesheet ]->update['new_version']; + + // translators: %s: Latest theme version number. + $active_theme_version .= ' ' . sprintf( __( '(Latest version: %s)' ), $theme_update_new_version ); + $active_theme_version_debug .= sprintf( ' (latest version: %s)', $theme_update_new_version ); + } + + $active_theme_author_uri = $active_theme->offsetGet( 'Author URI' ); + + $info['wp-active-theme']['fields'] = array( + 'name' => array( + 'label' => __( 'Name' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + 'value' => $active_theme->Name, + ), + 'version' => array( + 'label' => __( 'Version' ), + 'value' => $active_theme_version, + 'debug' => $active_theme_version_debug, + ), + 'author' => array( + 'label' => __( 'Author' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + 'value' => wp_kses( $active_theme->Author, array() ), + ), + 'author_website' => array( + 'label' => __( 'Author website' ), + 'value' => ( $active_theme_author_uri ? $active_theme_author_uri : __( 'Undefined' ) ), + 'debug' => ( $active_theme_author_uri ? $active_theme_author_uri : '(undefined)' ), + ), + 'parent_theme' => array( + 'label' => __( 'Parent theme' ), + 'value' => ( $active_theme->parent_theme ? $active_theme->parent_theme : __( 'None' ) ), + 'debug' => ( $active_theme->parent_theme ? $active_theme->parent_theme : 'none' ), + ), + 'theme_features' => array( + 'label' => __( 'Theme features' ), + 'value' => implode( ', ', $theme_features ), + ), + 'theme_path' => array( + 'label' => __( 'Theme directory location' ), + 'value' => get_template_directory(), + ), + ); + + // Populate a list of all themes available in the install. + $all_themes = wp_get_themes(); + + foreach ( $all_themes as $theme_slug => $theme ) { + // Ignore the currently active theme from the list of all themes. + if ( $active_theme->stylesheet === $theme_slug ) { + continue; + } + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $theme_version = $theme->Version; + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $theme_author = $theme->Author; + + // Sanitize + $theme_author = wp_kses( $theme_author, array() ); + + $theme_version_string = __( 'No version or author information is available.' ); + $theme_version_string_debug = 'undefined'; + + if ( ! empty( $theme_version ) && ! empty( $theme_author ) ) { + // translators: 1: Theme version number. 2: Theme author name. + $theme_version_string = sprintf( __( 'Version %1$s by %2$s' ), $theme_version, $theme_author ); + $theme_version_string_debug = sprintf( 'version: %s, author: %s', $theme_version, $theme_author ); + } else { + if ( ! empty( $theme_author ) ) { + // translators: %s: Theme author name. + $theme_version_string = sprintf( __( 'By %s' ), $theme_author ); + $theme_version_string_debug = sprintf( 'author: %s, version: (undefined)', $theme_author ); + } + + if ( ! empty( $theme_version ) ) { + // translators: %s: Theme version number. + $theme_version_string = sprintf( __( 'Version %s' ), $theme_version ); + $theme_version_string_debug = sprintf( 'author: (undefined), version: %s', $theme_version ); + } + } + + if ( array_key_exists( $theme_slug, $theme_updates ) ) { + // translators: %s: Latest theme version number. + $theme_version_string .= ' ' . sprintf( __( '(Latest version: %s)' ), $theme_updates[ $theme_slug ]->update['new_version'] ); + $theme_version_string_debug .= sprintf( ' (latest version: %s)', $theme_updates[ $theme_slug ]->update['new_version'] ); + } + + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $info['wp-themes']['fields'][ sanitize_text_field( $theme->Name ) ] = array( + 'label' => sprintf( + // translators: 1: Theme name. 2: Theme slug. + __( '%1$s (%2$s)' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $theme->Name, + $theme_slug + ), + 'value' => $theme_version_string, + 'debug' => $theme_version_string_debug, + ); + } + + // Add more filesystem checks + if ( defined( 'WPMU_PLUGIN_DIR' ) && is_dir( WPMU_PLUGIN_DIR ) ) { + $is_writable_wpmu_plugin_dir = wp_is_writable( WPMU_PLUGIN_DIR ); + + $info['wp-filesystem']['fields']['mu-plugins'] = array( + 'label' => __( 'The must use plugins directory' ), + 'value' => ( $is_writable_wpmu_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_wpmu_plugin_dir ? 'writable' : 'not writable' ), + ); + } + + /** + * Add or modify the debug information. + * + * Plugin or themes may wish to introduce their own debug information without creating additional admin pages + * they can utilize this filter to introduce their own sections or add more data to existing sections. + * + * Array keys for sections added by core are all prefixed with `wp-`, plugins and themes should use their own slug as + * a prefix, both for consistency as well as avoiding key collisions. Note that the array keys are used as labels + * for the copied data. + * + * All strings are expected to be plain text except $description that can contain inline HTML tags (see below). + * + * @since 5.2.0 + * + * @param array $args { + * The debug information to be added to the core information page. + * + * This is an associative multi-dimensional array, up to three levels deep. The topmost array holds the sections. + * Each section has a `$fields` associative array (see below), and each `$value` in `$fields` can be + * another associative array of name/value pairs when there is more structured data to display. + * + * @type string $label The title for this section of the debug output. + * @type string $description Optional. A description for your information section which may contain basic HTML + * markup, inline tags only as it is outputted in a paragraph. + * @type boolean $show_count Optional. If set to `true` the amount of fields will be included in the title for + * this section. + * @type boolean $private Optional. If set to `true` the section and all associated fields will be excluded + * from the copied data. + * @type array $fields { + * An associative array containing the data to be displayed. + * + * @type string $label The label for this piece of information. + * @type string $value The output that is displayed for this field. Text should be translated. Can be + * an associative array that is displayed as name/value pairs. + * @type string $debug Optional. The output that is used for this field when the user copies the data. + * It should be more concise and not translated. If not set, the content of `$value` is used. + * Note that the array keys are used as labels for the copied data. + * @type boolean $private Optional. If set to `true` the field will not be included in the copied data + * allowing you to show, for example, API keys here. + * } + * } + */ + $info = apply_filters( 'debug_information', $info ); + + return $info; + } + + /** + * Format the information gathered for debugging, in a manner suitable for copying to a forum or support ticket. + * + * @since 5.2.0 + * + * @param array $info_array Information gathered from the `WP_Debug_Data::debug_data` function. + * @param string $type The data type to return, either 'info' or 'debug'. + * @return string The formatted data. + */ + public static function format( $info_array, $type ) { + $return = "`\n"; + + foreach ( $info_array as $section => $details ) { + // Skip this section if there are no fields, or the section has been declared as private. + if ( empty( $details['fields'] ) || ( isset( $details['private'] ) && $details['private'] ) ) { + continue; + } + + $section_label = 'debug' === $type ? $section : $details['label']; + + $return .= sprintf( + "### %s%s ###\n\n", + $section_label, + ( isset( $details['show_count'] ) && $details['show_count'] ? sprintf( ' (%d)', count( $details['fields'] ) ) : '' ) + ); + + foreach ( $details['fields'] as $field_name => $field ) { + if ( isset( $field['private'] ) && true === $field['private'] ) { + continue; + } + + if ( 'debug' === $type && isset( $field['debug'] ) ) { + $debug_data = $field['debug']; + } else { + $debug_data = $field['value']; + } + + // Can be array, one level deep only. + if ( is_array( $debug_data ) ) { + $value = ''; + + foreach ( $debug_data as $sub_field_name => $sub_field_value ) { + $value .= sprintf( "\n\t%s: %s", $sub_field_name, $sub_field_value ); + } + } elseif ( is_bool( $debug_data ) ) { + $value = $debug_data ? 'true' : 'false'; + } elseif ( empty( $debug_data ) && '0' !== $debug_data ) { + $value = 'undefined'; + } else { + $value = $debug_data; + } + + if ( 'debug' === $type ) { + $label = $field_name; + } else { + $label = $field['label']; + } + + $return .= sprintf( "%s: %s\n", $label, $value ); + } + + $return .= "\n"; + } + + $return .= '`'; + + return $return; + } + + /** + * Fetch the total size of all the database tables for the active database user. + * + * @since 5.2.0 + * + * @return int The size of the database, in bytes. + */ + public static function get_database_size() { + global $wpdb; + $size = 0; + $rows = $wpdb->get_results( 'SHOW TABLE STATUS', ARRAY_A ); + + if ( $wpdb->num_rows > 0 ) { + foreach ( $rows as $row ) { + $size += $row['Data_length'] + $row['Index_length']; + } + } + + return (int) $size; + } + + /** + * Fetch the sizes of the WordPress directories: `wordpress` (ABSPATH), `plugins`, `themes`, and `uploads`. + * Intended to supplement the array returned by `WP_Debug_Data::debug_data()`. + * + * @since 5.2.0 + * + * @return array The sizes of the directories, also the database size and total installation size. + */ + public static function get_sizes() { + $size_db = self::get_database_size(); + $upload_dir = wp_get_upload_dir(); + + /* + * We will be using the PHP max execution time to prevent the size calculations + * from causing a timeout. The default value is 30 seconds, and some + * hosts do not allow you to read configuration values. + */ + if ( function_exists( 'ini_get' ) ) { + $max_execution_time = ini_get( 'max_execution_time' ); + } + + // The max_execution_time defaults to 0 when PHP runs from cli. + // We still want to limit it below. + if ( empty( $max_execution_time ) ) { + $max_execution_time = 30; + } + + if ( $max_execution_time > 20 ) { + // If the max_execution_time is set to lower than 20 seconds, reduce it a bit to prevent + // edge-case timeouts that may happen after the size loop has finished running. + $max_execution_time -= 2; + } + + // Go through the various installation directories and calculate their sizes. + // No trailing slashes. + $paths = array( + 'wordpress_size' => untrailingslashit( ABSPATH ), + 'themes_size' => get_theme_root(), + 'plugins_size' => WP_PLUGIN_DIR, + 'uploads_size' => $upload_dir['basedir'], + ); + + $exclude = $paths; + unset( $exclude['wordpress_size'] ); + $exclude = array_values( $exclude ); + + $size_total = 0; + $all_sizes = array(); + + // Loop over all the directories we want to gather the sizes for. + foreach ( $paths as $name => $path ) { + $dir_size = null; // Default to timeout. + $results = array( + 'path' => $path, + 'raw' => 0, + ); + + if ( microtime( true ) - WP_START_TIMESTAMP < $max_execution_time ) { + if ( 'wordpress_size' === $name ) { + $dir_size = recurse_dirsize( $path, $exclude, $max_execution_time ); + } else { + $dir_size = recurse_dirsize( $path, null, $max_execution_time ); + } + } + + if ( false === $dir_size ) { + // Error reading. + $results['size'] = __( 'The size cannot be calculated. The directory is not accessible. Usually caused by invalid permissions.' ); + $results['debug'] = 'not accessible'; + + // Stop total size calculation. + $size_total = null; + } elseif ( null === $dir_size ) { + // Timeout. + $results['size'] = __( 'The directory size calculation has timed out. Usually caused by a very large number of sub-directories and files.' ); + $results['debug'] = 'timeout while calculating size'; + + // Stop total size calculation. + $size_total = null; + } else { + if ( null !== $size_total ) { + $size_total += $dir_size; + } + + $results['raw'] = $dir_size; + $results['size'] = size_format( $dir_size, 2 ); + $results['debug'] = $results['size'] . " ({$dir_size} bytes)"; + } + + $all_sizes[ $name ] = $results; + } + + if ( $size_db > 0 ) { + $database_size = size_format( $size_db, 2 ); + + $all_sizes['database_size'] = array( + 'raw' => $size_db, + 'size' => $database_size, + 'debug' => $database_size . " ({$size_db} bytes)", + ); + } else { + $all_sizes['database_size'] = array( + 'size' => __( 'Not available' ), + 'debug' => 'not available', + ); + } + + if ( null !== $size_total && $size_db > 0 ) { + $total_size = $size_total + $size_db; + $total_size_mb = size_format( $total_size, 2 ); + + $all_sizes['total_size'] = array( + 'raw' => $total_size, + 'size' => $total_size_mb, + 'debug' => $total_size_mb . " ({$total_size} bytes)", + ); + } else { + $all_sizes['total_size'] = array( + 'size' => __( 'Total size is not available. Some errors were encountered when determining the size of your installation.' ), + 'debug' => 'not available', + ); + } + + return $all_sizes; + } +} 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 000000000..45e447476 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-base.php @@ -0,0 +1,827 @@ +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; + } + + /** + * Returns 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 ); + } + + /** + * Returns 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 ); + } + + /** + * Returns the path on the remote filesystem of the Themes Directory. + * + * @since 2.7.0 + * + * @param string|false $theme Optional. The theme stylesheet or template for the directory. + * Default false. + * @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 ); + } + + /** + * Returns 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 ); + } + + /** + * Locates 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(); + } + + /** + * Locates 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(); + } + + /** + * Locates 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; + } + + /** + * Locates 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 can't 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 + * can't 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 ); + + } + + /** + * Returns 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 Path to the file. + * @return string Mode of the file (the last 3 digits). + */ + public function getchmod( $file ) { + return '777'; + } + + /** + * Converts *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; + } + + /** + * Determines 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) + } + + /** + * Changes the owner of a file or directory. + * + * Default behavior is to do nothing, override this in your subclass, if desired. + * + * @since 2.5.0 + * + * @param string $file Path to the file or directory. + * @param string|int $owner A user name or number. + * @param bool $recursive Optional. If set to true, changes file owner recursively. + * Default false. + * @return bool True on success, false on failure. + */ + public function chown( $file, $owner, $recursive = false ) { + return false; + } + + /** + * Connects filesystem. + * + * @since 2.5.0 + * @abstract + * + * @return bool True on success, false on failure (always true for WP_Filesystem_Direct). + */ + public function connect() { + return true; + } + + /** + * Reads entire file into a string. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Name of the file to read. + * @return string|false Read data on success, false on failure. + */ + public function get_contents( $file ) { + return false; + } + + /** + * Reads entire file into an array. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @return array|false File contents in an array on success, false on failure. + */ + public function get_contents_array( $file ) { + return false; + } + + /** + * Writes 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|false $mode Optional. The file permissions as octal number, usually 0644. + * Default false. + * @return bool True on success, false on failure. + */ + public function put_contents( $file, $contents, $mode = false ) { + return false; + } + + /** + * Gets the current working directory. + * + * @since 2.5.0 + * @abstract + * + * @return string|false The current working directory on success, false on failure. + */ + public function cwd() { + return false; + } + + /** + * Changes current directory. + * + * @since 2.5.0 + * @abstract + * + * @param string $dir The new current directory. + * @return bool True on success, false on failure. + */ + public function chdir( $dir ) { + return false; + } + + /** + * Changes the file group. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @param string|int $group A group name or number. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, false on failure. + */ + public function chgrp( $file, $group, $recursive = false ) { + return false; + } + + /** + * Changes filesystem permissions. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for directories. Default false. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, false on failure. + */ + public function chmod( $file, $mode = false, $recursive = false ) { + return false; + } + + /** + * Gets the file owner. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @return string|false Username of the owner on success, false on failure. + */ + public function owner( $file ) { + return false; + } + + /** + * Gets the file's group. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file. + * @return string|false The group on success, false on failure. + */ + public function group( $file ) { + return false; + } + + /** + * Copies 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|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for dirs. Default false. + * @return bool True on success, false on failure. + */ + public function copy( $source, $destination, $overwrite = false, $mode = false ) { + return false; + } + + /** + * Moves 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 on success, false on failure. + */ + public function move( $source, $destination, $overwrite = false ) { + return false; + } + + /** + * Deletes a file or directory. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to the file or directory. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @param string|false $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True on success, false on failure. + */ + public function delete( $file, $recursive = false, $type = false ) { + return false; + } + + /** + * Checks if a file or directory exists. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file or directory. + * @return bool Whether $file exists or not. + */ + public function exists( $file ) { + return false; + } + + /** + * Checks 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; + } + + /** + * Checks 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; + } + + /** + * Checks 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; + } + + /** + * Checks if a file or directory is writable. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file or directory. + * @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|false Unix timestamp representing last access time, false on failure. + */ + public function atime( $file ) { + return false; + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * @abstract + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing modification time, false on failure. + */ + 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|false Size of the file in bytes on success, false on failure. + */ + public function size( $file ) { + return false; + } + + /** + * Sets 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 True on success, false on failure. + */ + public function touch( $file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * Creates a directory. + * + * @since 2.5.0 + * @abstract + * + * @param string $path Path for new directory. + * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod). + * Default false. + * @param string|int $chown Optional. A user name or number (or false to skip chown). + * Default false. + * @param string|int $chgrp Optional. A group name or number (or false to skip chgrp). + * Default false. + * @return bool True on success, false on failure. + */ + public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { + return false; + } + + /** + * Deletes 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 True on success, false on failure. + */ + public function rmdir( $path, $recursive = false ) { + return false; + } + + /** + * Gets 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|false { + * Array of files. False if unable to list directory contents. + * + * @type string $name Name of the file or 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 000000000..41839097f --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-direct.php @@ -0,0 +1,619 @@ +method = 'direct'; + $this->errors = new WP_Error(); + } + + /** + * Reads entire file into a string. + * + * @since 2.5.0 + * + * @param string $file Name of the file to read. + * @return string|false Read data on success, false on failure. + */ + public function get_contents( $file ) { + return @file_get_contents( $file ); + } + + /** + * Reads entire file into an array. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return array|false File contents in an array on success, false on failure. + */ + public function get_contents_array( $file ) { + return @file( $file ); + } + + /** + * Writes a string to a file. + * + * @since 2.5.0 + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int|false $mode Optional. The file permissions as octal number, usually 0644. + * Default false. + * @return bool True on success, false on failure. + */ + 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. + * + * @since 2.5.0 + * + * @return string|false The current working directory on success, false on failure. + */ + public function cwd() { + return @getcwd(); + } + + /** + * Changes current directory. + * + * @since 2.5.0 + * + * @param string $dir The new current directory. + * @return bool True on success, false on failure. + */ + public function chdir( $dir ) { + return @chdir( $dir ); + } + + /** + * Changes the file group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param string|int $group A group name or number. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, 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. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for directories. Default false. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, 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 the owner of a file or directory. + * + * @since 2.5.0 + * + * @param string $file Path to the file or directory. + * @param string|int $owner A user name or number. + * @param bool $recursive Optional. If set to true, changes file owner recursively. + * Default false. + * @return bool True on success, 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 the file owner. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|false Username of the owner on success, false on failure. + */ + 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 the permissions of the specified file or filepath in their octal format. + * + * FIXME does not handle errors in fileperms() + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string Mode of the file (the last 3 digits). + */ + public function getchmod( $file ) { + return substr( decoct( @fileperms( $file ) ), -3 ); + } + + /** + * Gets the file's group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|false The group on success, false on failure. + */ + 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']; + } + + /** + * Copies a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for dirs. Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Moves a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + } + + /** + * Deletes a file or directory. + * + * @since 2.5.0 + * + * @param string $file Path to the file or directory. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @param string|false $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Checks if a file or directory exists. + * + * @since 2.5.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file exists or not. + */ + public function exists( $file ) { + return @file_exists( $file ); + } + + /** + * Checks if resource is a file. + * + * @since 2.5.0 + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + public function is_file( $file ) { + return @is_file( $file ); + } + + /** + * Checks if resource is a directory. + * + * @since 2.5.0 + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + public function is_dir( $path ) { + return @is_dir( $path ); + } + + /** + * Checks if a file is readable. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + public function is_readable( $file ) { + return @is_readable( $file ); + } + + /** + * Checks if a file or directory is writable. + * + * @since 2.5.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file is writable. + */ + public function is_writable( $file ) { + return @is_writable( $file ); + } + + /** + * Gets the file's last access time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing last access time, false on failure. + */ + public function atime( $file ) { + return @fileatime( $file ); + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing modification time, false on failure. + */ + public function mtime( $file ) { + return @filemtime( $file ); + } + + /** + * Gets the file size (in bytes). + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Size of the file in bytes on success, false on failure. + */ + public function size( $file ) { + return @filesize( $file ); + } + + /** + * Sets the access and modification times of a file. + * + * Note: If $file doesn't exist, it will be created. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @param int $time Optional. Modified time to set for file. + * Default 0. + * @param int $atime Optional. Access time to set for file. + * Default 0. + * @return bool True on success, false on failure. + */ + public function touch( $file, $time = 0, $atime = 0 ) { + if ( $time == 0 ) { + $time = time(); + } + if ( $atime == 0 ) { + $atime = time(); + } + return @touch( $file, $time, $atime ); + } + + /** + * Creates a directory. + * + * @since 2.5.0 + * + * @param string $path Path for new directory. + * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod). + * Default false. + * @param string|int $chown Optional. A user name or number (or false to skip chown). + * Default false. + * @param string|int $chgrp Optional. A group name or number (or false to skip chgrp). + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Deletes a directory. + * + * @since 2.5.0 + * + * @param string $path Path to directory. + * @param bool $recursive Optional. Whether to recursively remove files/directories. + * Default false. + * @return bool True on success, false on failure. + */ + public function rmdir( $path, $recursive = false ) { + return $this->delete( $path, $recursive ); + } + + /** + * Gets details for files in a directory or a specific file. + * + * @since 2.5.0 + * + * @param string $path Path to directory or file. + * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. + * Default true. + * @param bool $recursive Optional. Whether to recursively include file details in nested directories. + * Default false. + * @return array|false { + * Array of files. False if unable to list directory contents. + * + * @type string $name Name of the file or 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 ) { + 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 000000000..1db0a5791 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -0,0 +1,736 @@ +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; + } + } + + /** + * Connects filesystem. + * + * @since 2.5.0 + * + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Reads entire file into a string. + * + * @since 2.5.0 + * + * @param string $file Name of the file to read. + * @return string|false Read data on success, false if no temporary 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, 8 * KB_IN_BYTES ); + } + + fclose( $temp ); + unlink( $tempfile ); + return $contents; + } + + /** + * Reads entire file into an array. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return array|false File contents in an array on success, false on failure. + */ + public function get_contents_array( $file ) { + return explode( "\n", $this->get_contents( $file ) ); + } + + /** + * Writes a string to a file. + * + * @since 2.5.0 + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int|false $mode Optional. The file permissions as octal number, usually 0644. + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Gets the current working directory. + * + * @since 2.5.0 + * + * @return string|false The current working directory on success, false on failure. + */ + public function cwd() { + $cwd = @ftp_pwd( $this->link ); + if ( $cwd ) { + $cwd = trailingslashit( $cwd ); + } + return $cwd; + } + + /** + * Changes current directory. + * + * @since 2.5.0 + * + * @param string $dir The new current directory. + * @return bool True on success, false on failure. + */ + public function chdir( $dir ) { + return @ftp_chdir( $this->link, $dir ); + } + + /** + * Changes filesystem permissions. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for directories. Default false. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, 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; + } + } + + // 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 ); + } + + /** + * Gets the file owner. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|false Username of the owner on success, false on failure. + */ + public function owner( $file ) { + $dir = $this->dirlist( $file ); + return $dir[ $file ]['owner']; + } + + /** + * Gets the permissions of the specified file or filepath in their octal format. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string Mode of the file (the last 3 digits). + */ + public function getchmod( $file ) { + $dir = $this->dirlist( $file ); + return $dir[ $file ]['permsn']; + } + + /** + * Gets the file's group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|false The group on success, false on failure. + */ + public function group( $file ) { + $dir = $this->dirlist( $file ); + return $dir[ $file ]['group']; + } + + /** + * Copies a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for dirs. Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Moves a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @return bool True on success, false on failure. + */ + public function move( $source, $destination, $overwrite = false ) { + return ftp_rename( $this->link, $source, $destination ); + } + + /** + * Deletes a file or directory. + * + * @since 2.5.0 + * + * @param string $file Path to the file or directory. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @param string|false $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Checks if a file or directory exists. + * + * @since 2.5.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file exists or not. + */ + 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. + } + + /** + * Checks if resource is a file. + * + * @since 2.5.0 + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + public function is_file( $file ) { + return $this->exists( $file ) && ! $this->is_dir( $file ); + } + + /** + * Checks if resource is a directory. + * + * @since 2.5.0 + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + 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; + } + + /** + * Checks if a file is readable. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + public function is_readable( $file ) { + return true; + } + + /** + * Checks if a file or directory is writable. + * + * @since 2.5.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file is writable. + */ + public function is_writable( $file ) { + return true; + } + + /** + * Gets the file's last access time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing last access time, false on failure. + */ + public function atime( $file ) { + return false; + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing modification time, false on failure. + */ + public function mtime( $file ) { + return ftp_mdtm( $this->link, $file ); + } + + /** + * Gets the file size (in bytes). + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Size of the file in bytes on success, false on failure. + */ + public function size( $file ) { + return ftp_size( $this->link, $file ); + } + + /** + * Sets the access and modification times of a file. + * + * Note: If $file doesn't exist, it will be created. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @param int $time Optional. Modified time to set for file. + * Default 0. + * @param int $atime Optional. Access time to set for file. + * Default 0. + * @return bool True on success, false on failure. + */ + public function touch( $file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * Creates a directory. + * + * @since 2.5.0 + * + * @param string $path Path for new directory. + * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod). + * Default false. + * @param string|int $chown Optional. A user name or number (or false to skip chown). + * Default false. + * @param string|int $chgrp Optional. A group name or number (or false to skip chgrp). + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Deletes a directory. + * + * @since 2.5.0 + * + * @param string $path Path to directory. + * @param bool $recursive Optional. Whether to recursively remove files/directories. + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Gets details for files in a directory or a specific file. + * + * @since 2.5.0 + * + * @param string $path Path to directory or file. + * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. + * Default true. + * @param bool $recursive Optional. Whether to recursively include file details in nested directories. + * Default false. + * @return array|false { + * Array of files. False if unable to list directory contents. + * + * @type string $name Name of the file or 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 ) { + 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 ) ) { // Can't 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; + } + + /** + * Destructor. + * + * @since 2.5.0 + */ + 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 000000000..77a7a6687 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -0,0 +1,660 @@ +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']; + } + } + + /** + * Connects filesystem. + * + * @since 2.5.0 + * + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Reads entire file into a string. + * + * @since 2.5.0 + * + * @param string $file Name of the file to read. + * @return string|false Read data on success, false if no temporary file could be opened, + * or if the file couldn't be retrieved. + */ + 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, 8 * KB_IN_BYTES ); + } + + fclose( $temphandle ); + unlink( $temp ); + return $contents; + } + + /** + * Reads entire file into an array. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return array|false File contents in an array on success, false on failure. + */ + public function get_contents_array( $file ) { + return explode( "\n", $this->get_contents( $file ) ); + } + + /** + * Writes a string to a file. + * + * @since 2.5.0 + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int|false $mode Optional. The file permissions as octal number, usually 0644. + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Gets the current working directory. + * + * @since 2.5.0 + * + * @return string|false The current working directory on success, false on failure. + */ + public function cwd() { + $cwd = $this->ftp->pwd(); + if ( $cwd ) { + $cwd = trailingslashit( $cwd ); + } + return $cwd; + } + + /** + * Changes current directory. + * + * @since 2.5.0 + * + * @param string $dir The new current directory. + * @return bool True on success, false on failure. + */ + public function chdir( $dir ) { + return $this->ftp->chdir( $dir ); + } + + /** + * Changes filesystem permissions. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for directories. Default false. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, 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; + } + } + + // 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 ); + } + + /** + * Gets the file owner. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|false Username of the owner on success, false on failure. + */ + public function owner( $file ) { + $dir = $this->dirlist( $file ); + return $dir[ $file ]['owner']; + } + + /** + * Gets the permissions of the specified file or filepath in their octal format. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string Mode of the file (the last 3 digits). + */ + public function getchmod( $file ) { + $dir = $this->dirlist( $file ); + return $dir[ $file ]['permsn']; + } + + /** + * Gets the file's group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|false The group on success, false on failure. + */ + public function group( $file ) { + $dir = $this->dirlist( $file ); + return $dir[ $file ]['group']; + } + + /** + * Copies a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for dirs. Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Moves a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @return bool True on success, false on failure. + */ + public function move( $source, $destination, $overwrite = false ) { + return $this->ftp->rename( $source, $destination ); + } + + /** + * Deletes a file or directory. + * + * @since 2.5.0 + * + * @param string $file Path to the file or directory. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @param string|false $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Checks if a file or directory exists. + * + * @since 2.5.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file exists or not. + */ + 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. + } + + /** + * Checks if resource is a file. + * + * @since 2.5.0 + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + public function is_file( $file ) { + if ( $this->is_dir( $file ) ) { + return false; + } + if ( $this->exists( $file ) ) { + return true; + } + return false; + } + + /** + * Checks if resource is a directory. + * + * @since 2.5.0 + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + public function is_dir( $path ) { + $cwd = $this->cwd(); + if ( $this->chdir( $path ) ) { + $this->chdir( $cwd ); + return true; + } + return false; + } + + /** + * Checks if a file is readable. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + public function is_readable( $file ) { + return true; + } + + /** + * Checks if a file or directory is writable. + * + * @since 2.5.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file is writable. + */ + public function is_writable( $file ) { + return true; + } + + /** + * Gets the file's last access time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing last access time, false on failure. + */ + public function atime( $file ) { + return false; + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing modification time, false on failure. + */ + public function mtime( $file ) { + return $this->ftp->mdtm( $file ); + } + + /** + * Gets the file size (in bytes). + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int|false Size of the file in bytes on success, false on failure. + */ + public function size( $file ) { + return $this->ftp->filesize( $file ); + } + + /** + * Sets the access and modification times of a file. + * + * Note: If $file doesn't exist, it will be created. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @param int $time Optional. Modified time to set for file. + * Default 0. + * @param int $atime Optional. Access time to set for file. + * Default 0. + * @return bool True on success, false on failure. + */ + public function touch( $file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * Creates a directory. + * + * @since 2.5.0 + * + * @param string $path Path for new directory. + * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod). + * Default false. + * @param string|int $chown Optional. A user name or number (or false to skip chown). + * Default false. + * @param string|int $chgrp Optional. A group name or number (or false to skip chgrp). + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Deletes a directory. + * + * @since 2.5.0 + * + * @param string $path Path to directory. + * @param bool $recursive Optional. Whether to recursively remove files/directories. + * Default false. + * @return bool True on success, false on failure. + */ + public function rmdir( $path, $recursive = false ) { + return $this->delete( $path, $recursive ); + } + + /** + * Gets details for files in a directory or a specific file. + * + * @since 2.5.0 + * + * @param string $path Path to directory or file. + * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. + * Default true. + * @param bool $recursive Optional. Whether to recursively include file details in nested directories. + * Default false. + * @return array|false { + * Array of files. False if unable to list directory contents. + * + * @type string $name Name of the file or 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 ) { + 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; + } + + /** + * Destructor. + * + * @since 2.5.0 + */ + 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 000000000..b87a19572 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ssh2.php @@ -0,0 +1,765 @@ +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']; + } + } + + /** + * Connects filesystem. + * + * @since 2.7.0 + * + * @return bool True on success, false on failure. + */ + 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, '/' ); + } + + /** + * @since 2.7.0 + * + * @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; + } + + /** + * Reads entire file into a string. + * + * @since 2.7.0 + * + * @param string $file Name of the file to read. + * @return string|false Read data on success, false if no temporary file could be opened, + * or if the file couldn't be retrieved. + */ + public function get_contents( $file ) { + return file_get_contents( $this->sftp_path( $file ) ); + } + + /** + * Reads entire file into an array. + * + * @since 2.7.0 + * + * @param string $file Path to the file. + * @return array|false File contents in an array on success, false on failure. + */ + public function get_contents_array( $file ) { + return file( $this->sftp_path( $file ) ); + } + + /** + * Writes a string to a file. + * + * @since 2.7.0 + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int|false $mode Optional. The file permissions as octal number, usually 0644. + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Gets the current working directory. + * + * @since 2.7.0 + * + * @return string|false The current working directory on success, false on failure. + */ + public function cwd() { + $cwd = ssh2_sftp_realpath( $this->sftp_link, '.' ); + if ( $cwd ) { + $cwd = trailingslashit( trim( $cwd ) ); + } + return $cwd; + } + + /** + * Changes current directory. + * + * @since 2.7.0 + * + * @param string $dir The new current directory. + * @return bool True on success, false on failure. + */ + public function chdir( $dir ) { + return $this->run_command( 'cd ' . $dir, true ); + } + + /** + * Changes the file group. + * + * @since 2.7.0 + * + * @param string $file Path to the file. + * @param string|int $group A group name or number. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Changes filesystem permissions. + * + * @since 2.7.0 + * + * @param string $file Path to the file. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for directories. Default false. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Changes the owner of a file or directory. + * + * @since 2.7.0 + * + * @param string $file Path to the file or directory. + * @param string|int $owner A user name or number. + * @param bool $recursive Optional. If set to true, changes file owner recursively. + * Default false. + * @return bool True on success, 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 ); + } + + /** + * Gets the file owner. + * + * @since 2.7.0 + * + * @param string $file Path to the file. + * @return string|false Username of the owner on success, false on failure. + */ + 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']; + } + + /** + * Gets the permissions of the specified file or filepath in their octal format. + * + * @since 2.7.0 + * + * @param string $file Path to the file. + * @return string Mode of the file (the last 3 digits). + */ + public function getchmod( $file ) { + return substr( decoct( @fileperms( $this->sftp_path( $file ) ) ), -3 ); + } + + /** + * Gets the file's group. + * + * @since 2.7.0 + * + * @param string $file Path to the file. + * @return string|false The group on success, false on failure. + */ + 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']; + } + + /** + * Copies a file. + * + * @since 2.7.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, + * 0755 for dirs. Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Moves a file. + * + * @since 2.7.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @return bool True on success, false on failure. + */ + public function move( $source, $destination, $overwrite = false ) { + return @ssh2_sftp_rename( $this->sftp_link, $source, $destination ); + } + + /** + * Deletes a file or directory. + * + * @since 2.7.0 + * + * @param string $file Path to the file or directory. + * @param bool $recursive Optional. If set to true, changes file group recursively. + * Default false. + * @param string|false $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True on success, false on failure. + */ + 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 ); + } + + /** + * Checks if a file or directory exists. + * + * @since 2.7.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file exists or not. + */ + public function exists( $file ) { + return file_exists( $this->sftp_path( $file ) ); + } + + /** + * Checks if resource is a file. + * + * @since 2.7.0 + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + public function is_file( $file ) { + return is_file( $this->sftp_path( $file ) ); + } + + /** + * Checks if resource is a directory. + * + * @since 2.7.0 + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + public function is_dir( $path ) { + return is_dir( $this->sftp_path( $path ) ); + } + + /** + * Checks if a file is readable. + * + * @since 2.7.0 + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + public function is_readable( $file ) { + return is_readable( $this->sftp_path( $file ) ); + } + + /** + * Checks if a file or directory is writable. + * + * @since 2.7.0 + * + * @param string $file Path to file or directory. + * @return bool Whether $file is writable. + */ + public function is_writable( $file ) { + // PHP will base it's writable checks on system_user === file_owner, not ssh_user === file_owner + return true; + } + + /** + * Gets the file's last access time. + * + * @since 2.7.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing last access time, false on failure. + */ + public function atime( $file ) { + return fileatime( $this->sftp_path( $file ) ); + } + + /** + * Gets the file modification time. + * + * @since 2.7.0 + * + * @param string $file Path to file. + * @return int|false Unix timestamp representing modification time, false on failure. + */ + public function mtime( $file ) { + return filemtime( $this->sftp_path( $file ) ); + } + + /** + * Gets the file size (in bytes). + * + * @since 2.7.0 + * + * @param string $file Path to file. + * @return int|false Size of the file in bytes on success, false on failure. + */ + public function size( $file ) { + return filesize( $this->sftp_path( $file ) ); + } + + /** + * Sets the access and modification times of a file. + * + * Note: Not implemented. + * + * @since 2.7.0 + * + * @param string $file Path to file. + * @param int $time Optional. Modified time to set for file. + * Default 0. + * @param int $atime Optional. Access time to set for file. + * Default 0. + */ + public function touch( $file, $time = 0, $atime = 0 ) { + // Not implemented. + } + + /** + * Creates a directory. + * + * @since 2.7.0 + * + * @param string $path Path for new directory. + * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod). + * Default false. + * @param string|int $chown Optional. A user name or number (or false to skip chown). + * Default false. + * @param string|int $chgrp Optional. A group name or number (or false to skip chgrp). + * Default false. + * @return bool True on success, false on failure. + */ + 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; + } + + /** + * Deletes a directory. + * + * @since 2.7.0 + * + * @param string $path Path to directory. + * @param bool $recursive Optional. Whether to recursively remove files/directories. + * Default false. + * @return bool True on success, false on failure. + */ + public function rmdir( $path, $recursive = false ) { + return $this->delete( $path, $recursive ); + } + + /** + * Gets details for files in a directory or a specific file. + * + * @since 2.7.0 + * + * @param string $path Path to directory or file. + * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. + * Default true. + * @param bool $recursive Optional. Whether to recursively include file details in nested directories. + * Default false. + * @return array|false { + * Array of files. False if unable to list directory contents. + * + * @type string $name Name of the file or 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 ) { + 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 000000000..d59311e11 --- /dev/null +++ b/wp-admin/includes/class-wp-importer.php @@ -0,0 +1,333 @@ +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']; + if ( ! is_array( $args ) ) { + $args = array(); + } + + $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 000000000..36bd3338a --- /dev/null +++ b/wp-admin/includes/class-wp-internal-pointers.php @@ -0,0 +1,165 @@ + pointer callback + * ) + * + * Example: + * array( + * 'themes.php' => 'wp390_widgets' + * ) + */ + $registered_pointers = array( + //None currently. + ); + + // 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( + // None currently. + ); + + // Get dismissed pointers + $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); + + $got_pointers = false; + foreach ( array_diff( $pointers, $dismissed ) as $pointer ) { + if ( isset( $caps_required[ $pointer ] ) ) { + foreach ( $caps_required[ $pointer ] as $cap ) { + if ( ! current_user_can( $cap ) ) { + continue 2; + } + } + } + + // Bind pointer print function + add_action( 'admin_print_footer_scripts', array( 'WP_Internal_Pointers', 'pointer_' . $pointer ) ); + $got_pointers = true; + } + + if ( ! $got_pointers ) { + return; + } + + // Add pointers script and style to queue + wp_enqueue_style( 'wp-pointer' ); + wp_enqueue_script( 'wp-pointer' ); + } + + /** + * Print the pointer JavaScript data. + * + * @since 3.3.0 + * + * @param string $pointer_id The pointer ID. + * @param string $selector The HTML elements, on which the pointer should be attached. + * @param array $args Arguments to be passed to the pointer JS (see wp-pointer.js). + */ + private static function print_js( $pointer_id, $selector, $args ) { + if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) ) { + return; + } + + ?> + + '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 000000000..eb9ea2cfe --- /dev/null +++ b/wp-admin/includes/class-wp-list-table-compat.php @@ -0,0 +1,50 @@ +_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 000000000..53ef0bc8b --- /dev/null +++ b/wp-admin/includes/class-wp-list-table.php @@ -0,0 +1,1400 @@ +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 string $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 string[] $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 string[] $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 string[] $actions An array of action links. + * @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 000000000..1a9970d9f --- /dev/null +++ b/wp-admin/includes/class-wp-media-list-table.php @@ -0,0 +1,794 @@ +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'] = __( 'Move to Trash' ); + } + } 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 string[] $taxonomies An array of registered taxonomy names 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 string[] $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 string[] $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 000000000..c9399b220 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -0,0 +1,582 @@ +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 string[] $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 = new WP_User_Query( + array( + 'blog_id' => $blog['blog_id'], + 'fields' => 'ID', + 'number' => 1, + 'count_total' => true, + ) + ); + $user_count = $blog_users->get_total(); + 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 string[] $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 000000000..294f2c82f --- /dev/null +++ b/wp-admin/includes/class-wp-ms-themes-list-table.php @@ -0,0 +1,763 @@ + '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 WP_Theme[] $all 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 string[] $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 string[] $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 string[] $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 000000000..e3d619ae8 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-users-list-table.php @@ -0,0 +1,488 @@ +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'], '*' ); + } elseif ( '' !== $args['search'] ) { + $args['search'] = trim( $args['search'], '*' ); + $args['search'] = '*' . $args['search'] . '*'; + } + + if ( $role === 'super' ) { + $args['login__in'] = get_super_admins(); + } + + /* + * 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 string[] $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 ); + + echo $avatar; + + if ( current_user_can( 'edit_user', $user->ID ) ) { + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); + $edit = "{$user->user_login}"; + } else { + $edit = $user->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; + $site_classes = array( 'site-' . $val->site_id ); + /** + * Filters the span class for a site listing on the mulisite user list table. + * + * @since 5.2.0 + * + * @param array $site_classes Class used within the span tag. Default "site-#" with the site's network ID. + * @param int $site_id Site ID. + * @param int $network_id Network ID. + * @param object $user WP_User object. + */ + $site_classes = apply_filters( 'ms_user_list_site_class', $site_classes, $val->userblog_id, $val->site_id, $user ); + if ( is_array( $site_classes ) && ! empty( $site_classes ) ) { + $site_classes = array_map( 'sanitize_html_class', array_unique( $site_classes ) ); + echo ''; + } else { + 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 string[] $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 ) ) { + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); + $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 string[] $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 000000000..0b2de9061 --- /dev/null +++ b/wp-admin/includes/class-wp-plugin-install-list-table.php @@ -0,0 +1,765 @@ +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 = 36; + + // 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 string[] $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 string[] $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, + // Send the locale to the API so it can provide context-sensitive results. + 'locale' => get_user_locale(), + ); + + 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': + case 'popular': + case 'new': + case 'beta': + $args['browse'] = $tab; + break; + case 'recommended': + $args['browse'] = $tab; + // Include the list of installed plugins so we can get relevant results. + $args['installed_plugins'] = array_keys( $installed_plugins ); + 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' ); + + // If the save url parameter is passed with a falsey value, don't save the favorite user. + if ( ! isset( $_GET['save'] ) || $_GET['save'] ) { + 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 ) . ''; + } + + $requires_php = isset( $plugin['requires_php'] ) ? $plugin['requires_php'] : null; + $requires_wp = isset( $plugin['requires'] ) ? $plugin['requires'] : null; + + $compatible_php = is_php_version_compatible( $requires_php ); + $compatible_wp = is_wp_version_compatible( $requires_wp ); + $tested_wp = ( empty( $plugin['tested'] ) || version_compare( get_bloginfo( 'version' ), $plugin['tested'], '<=' ) ); + + $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'] ) { + if ( $compatible_php && $compatible_wp ) { + $action_links[] = sprintf( + '%s', + esc_attr( $plugin['slug'] ), + esc_url( $status['url'] ), + /* translators: %s: plugin name and version */ + esc_attr( sprintf( __( 'Install %s now' ), $name ) ), + esc_attr( $name ), + __( 'Install Now' ) + ); + } else { + $action_links[] = sprintf( + '', + _x( 'Cannot Install', 'plugin' ) + ); + } + } + break; + + case 'update_available': + if ( $status['url'] ) { + if ( $compatible_php && $compatible_wp ) { + $action_links[] = sprintf( + '%s', + esc_attr( $status['file'] ), + esc_attr( $plugin['slug'] ), + esc_url( $status['url'] ), + /* translators: %s: plugin name and version */ + esc_attr( sprintf( __( 'Update %s now' ), $name ) ), + esc_attr( $name ), + __( 'Update Now' ) + ); + } else { + $action_links[] = sprintf( + '', + _x( 'Cannot Update', 'plugin' ) + ); + } + } + break; + + case 'latest_installed': + case 'newer_installed': + if ( is_plugin_active( $status['file'] ) ) { + $action_links[] = sprintf( + '', + _x( 'Active', 'plugin' ) + ); + } 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[] = sprintf( + '', + _x( 'Installed', 'plugin' ) + ); + } + break; + } + } + + $details_link = self_admin_url( + 'plugin-install.php?tab=plugin-information&plugin=' . $plugin['slug'] . + '&TB_iframe=true&width=600&height=550' + ); + + $action_links[] = sprintf( + '%s', + esc_url( $details_link ), + /* translators: %s: plugin name and version */ + esc_attr( sprintf( __( 'More information about %s' ), $name ) ), + esc_attr( $name ), + __( '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 string[] $action_links An array of plugin action links. 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'] ); + ?> +
    +

    '; + if ( ! $compatible_php && ! $compatible_wp ) { + _e( 'This plugin doesn’t work with your versions of WordPress and PHP.' ); + if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) { + printf( + /* translators: 1: "Update WordPress" screen URL, 2: "Update PHP" page URL */ + ' ' . __( 'Please update WordPress, and then learn more about updating PHP.' ), + self_admin_url( 'update-core.php' ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '

    ', '' ); + } elseif ( current_user_can( 'update_core' ) ) { + printf( + /* translators: %s: "Update WordPress" screen URL */ + ' ' . __( 'Please update WordPress.' ), + self_admin_url( 'update-core.php' ) + ); + } elseif ( current_user_can( 'update_php' ) ) { + printf( + /* translators: %s: "Update PHP" page URL */ + ' ' . __( 'Learn more about updating PHP.' ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '

    ', '' ); + } + } elseif ( ! $compatible_wp ) { + _e( 'This plugin doesn’t work with your version of WordPress.' ); + if ( current_user_can( 'update_core' ) ) { + printf( + /* translators: %s: "Update WordPress" screen URL */ + ' ' . __( 'Please update WordPress.' ), + self_admin_url( 'update-core.php' ) + ); + } + } elseif ( ! $compatible_php ) { + _e( 'This plugin doesn’t work with your version of PHP.' ); + if ( current_user_can( 'update_php' ) ) { + printf( + /* translators: %s: "Update PHP" page URL */ + ' ' . __( 'Learn more about updating PHP.' ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '

    ', '' ); + } + } + echo '

    '; + } + ?> +
    +
    +

    + + + + +

    +
    + +
    +

    +

    +
    +
    +
    +
    + $plugin['rating'], + 'type' => 'percent', + 'number' => $plugin['num_ratings'], + ) + ); + ?> + +
    +
    + +
    +
    + = 1000000 ) { + $active_installs_millions = floor( $plugin['active_installs'] / 1000000 ); + $active_installs_text = sprintf( + _nx( '%s+ Million', '%s+ Million', $active_installs_millions, 'Active plugin installations' ), + number_format_i18n( $active_installs_millions ) + ); + } 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 ); + ?> +
    +
    + ' . __( 'Untested with your version of WordPress' ) . ''; + } elseif ( ! $compatible_wp ) { + 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 000000000..92d1a945a --- /dev/null +++ b/wp-admin/includes/class-wp-plugins-list-table.php @@ -0,0 +1,954 @@ + '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', 'paused' ) ) ) { + $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(), + 'paused' => 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 ] ) ) { + $plugin_data = array_merge( (array) $plugin_info->response[ $plugin_file ], $plugin_data ); + $plugins['all'][ $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; + } + } elseif ( isset( $plugin_info->no_update[ $plugin_file ] ) ) { + $plugin_data = array_merge( (array) $plugin_info->no_update[ $plugin_file ], $plugin_data ); + $plugins['all'][ $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; + } + } + + // 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; + + if ( ! $screen->in_admin( 'network' ) && is_plugin_paused( $plugin_file ) ) { + $plugins['paused'][ $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'] ) ); + + /* translators: %s: plugin search term */ + 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': + /* translators: %s: plugin count */ + $text = _nx( 'All (%s)', 'All (%s)', $count, 'plugins' ); + break; + case 'active': + /* translators: %s: plugin count */ + $text = _n( 'Active (%s)', 'Active (%s)', $count ); + break; + case 'recently_activated': + /* translators: %s: plugin count */ + $text = _n( 'Recently Active (%s)', 'Recently Active (%s)', $count ); + break; + case 'inactive': + /* translators: %s: plugin count */ + $text = _n( 'Inactive (%s)', 'Inactive (%s)', $count ); + break; + case 'mustuse': + /* translators: %s: plugin count */ + $text = _n( 'Must-Use (%s)', 'Must-Use (%s)', $count ); + break; + case 'dropins': + /* translators: %s: plugin count */ + $text = _n( 'Drop-in (%s)', 'Drop-ins (%s)', $count ); + break; + case 'paused': + /* translators: %s: plugin count */ + $text = _n( 'Paused (%s)', 'Paused (%s)', $count ); + break; + case 'upgrade': + /* translators: %s: plugin count */ + $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 ) { + echo '

    ' . sprintf( + /* translators: %s: mu-plugins directory name */ + __( 'Files in the %s directory are executed automatically.' ), + '' . str_replace( ABSPATH, '/', WPMU_PLUGIN_DIR ) . '' + ) . '

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

    ' . sprintf( + /* translators: %s: wp-content directory name */ + __( '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:' ) . ' ' . + sprintf( + /* translators: 1: drop-in constant name, 2: wp-config.php */ + __( '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' ) . ''; + } + if ( current_user_can( 'resume_plugin', $plugin_file ) && is_plugin_paused( $plugin_file ) ) { + /* translators: %s: plugin name */ + $actions['resume'] = '' . __( 'Resume' ) . ''; + } + } 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 string[] $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 string[] $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 string[] $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 string[] $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 ); + + } + + $requires_php = isset( $plugin_data['requires_php'] ) ? $plugin_data['requires_php'] : null; + $compatible_php = is_php_version_compatible( $requires_php ); + $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' ) ) || ! $compatible_php ) { + $checkbox = ''; + } else { + /* translators: %s: plugin name */ + $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'; + } + + $paused = ! $screen->in_admin( 'network' ) && is_plugin_paused( $plugin_file ); + + if ( $paused ) { + $class .= ' paused'; + } + + $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'] ) ) { + /* translators: %s: plugin version number */ + $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'] . ''; + } + /* translators: %s: plugin version number */ + $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' + ) + ), + /* translators: %s: plugin name */ + 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 string[] $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', 'Paused'. + */ + $plugin_meta = apply_filters( 'plugin_row_meta', $plugin_meta, $plugin_file, $plugin_data, $status ); + echo implode( ' | ', $plugin_meta ); + + echo '
    '; + + if ( $paused ) { + $notice_text = __( 'This plugin failed to load properly and is paused during recovery mode.' ); + + printf( '

    %s

    ', $notice_text ); + + $error = wp_get_plugin_error( $plugin_file ); + + if ( false !== $error ) { + printf( '

    %s

    ', wp_get_extension_error_description( $error ) ); + } + } + + 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 relative to the plugins directory. + * @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', 'Paused'. + */ + 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', 'Paused'. + */ + 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 000000000..29dc28631 --- /dev/null +++ b/wp-admin/includes/class-wp-post-comments-list-table.php @@ -0,0 +1,78 @@ + __( '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 string[] $args Associative array of 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 ); + } + } + + /** + * Displays a formats drop-down for filtering items. + * + * @since 5.2.0 + * @access protected + * + * @param string $post_type Post type key. + */ + protected function formats_dropdown( $post_type ) { + /** + * Filters whether to remove the 'Formats' drop-down from the post list table. + * + * @since 5.2.0 + * + * @param bool $disable Whether to disable the drop-down. Default false. + */ + if ( apply_filters( 'disable_formats_dropdown', false ) ) { + return; + } + + // Make sure the dropdown shows only formats with a post count greater than 0. + $used_post_formats = get_terms( + array( + 'taxonomy' => 'post_format', + 'hide_empty' => true, + ) + ); + + /* + * Return if the post type doesn't have post formats, or there are no posts using formats, + * or if we're in the trash. + */ + if ( ! is_object_in_taxonomy( $post_type, 'post_format' ) || ! $used_post_formats || $this->is_trash ) { + return; + } + + $displayed_post_format = isset( $_GET['post_format'] ) ? $_GET['post_format'] : ''; + ?> + + + +
    + months_dropdown( $this->screen->post_type ); + $this->categories_dropdown( $this->screen->post_type ); + $this->formats_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 string[] $taxonomies Array of taxonomy names 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 string[] $post_columns An associative array of column headings. + */ + $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); + } else { + + /** + * Filters the columns displayed in the Posts list table. + * + * @since 1.5.0 + * + * @param string[] $post_columns An associative array of column headings. + * @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 string[] $post_columns An associative array of column headings. + */ + 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 ) { + $post_type = $this->screen->post_type; + + // Create array of post IDs. + $post_ids = array(); + + foreach ( $posts as $a_post ) { + $post_ids[] = $a_post->ID; + } + + if ( post_type_supports( $post_type, 'comments' ) ) { + $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 ''; + + $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 { + printf( + '%s%s', + $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 ) ) { + $term_links = 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' ) ); + + $term_links[] = $this->get_edit_link( $posts_in_term_qv, $label ); + } + + /** + * Filters the links in `$taxonomy` column of edit.php. + * + * @since 5.2.0 + * + * @param array $term_links List of links to edit.php, filtered by the taxonomy term. + * @param string $taxonomy Taxonomy name. + * @param array $terms Array of terms appearing in the post row. + */ + $term_links = apply_filters( 'post_column_taxonomy_links', $term_links, $taxonomy, $terms ); + + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $term_links ); + } 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' ) + ); + + if ( 'wp_block' !== $post->post_type ) { + $actions['inline hide-if-no-js'] = sprintf( + '', + /* 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 ( 'wp_block' === $post->post_type ) { + $actions['export'] = sprintf( + '', + $post->ID, + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Export “%s” as JSON' ), $title ) ), + __( 'Export as JSON' ) + ); + } + + 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 string[] $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 string[] $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; + + /** This filter is documented in wp-admin/post.php */ + $replace_editor = apply_filters( 'replace_editor', false, $post ); + + if ( ! $replace_editor ) { + $is_block_editor = use_block_editor_for_post( $post ); + } + } + } + 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'; + } + + // When creating a new post, use the default block editor support value for the post type. + if ( empty( $post_id ) ) { + $is_block_editor = use_block_editor_for_post_type( $post_type ); + } + + $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; + $screen->is_block_editor = $is_block_editor; + + 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 or returns whether the block editor is loading on the current screen. + * + * @since 5.0.0 + * + * @param bool $set Optional. Sets whether the block editor is loading on the current screen or not. + * @return bool True if the block editor is being loaded, false otherwise. + */ + public function is_block_editor( $set = null ) { + if ( $set !== null ) { + $this->is_block_editor = (bool) $set; + } + + return $this->is_block_editor; + } + + /** + * Sets the old string-based contextual help for the screen for backward compatibility. + * + * @since 3.3.0 + * + * @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' ); + + $this->_screen_settings = ''; + + if ( 'post' === $this->base ) { + $expand = ''; + $this->_screen_settings = $expand; + } + + /** + * 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 string[] $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-health-auto-updates.php b/wp-admin/includes/class-wp-site-health-auto-updates.php new file mode 100644 index 000000000..b202235f1 --- /dev/null +++ b/wp-admin/includes/class-wp-site-health-auto-updates.php @@ -0,0 +1,449 @@ +test_constants( 'DISALLOW_FILE_MODS', false ), + $this->test_constants( 'AUTOMATIC_UPDATER_DISABLED', false ), + $this->test_constants( 'WP_AUTO_UPDATE_CORE', true ), + $this->test_wp_version_check_attached(), + $this->test_filters_automatic_updater_disabled(), + $this->test_if_failed_update(), + $this->test_vcs_abspath(), + $this->test_check_wp_filesystem_method(), + $this->test_all_files_writable(), + $this->test_accepts_dev_updates(), + $this->test_accepts_minor_updates(), + ); + + $tests = array_filter( $tests ); + $tests = array_map( + function( $test ) { + $test = (object) $test; + + if ( empty( $test->severity ) ) { + $test->severity = 'warning'; + } + + return $test; + }, + $tests + ); + + return $tests; + } + + /** + * Test if auto-updates related constants are set correctly. + * + * @since 5.2.0 + * + * @param string $constant The name of the constant to check. + * @param bool $value The value that the constant should be, if set. + * @return array The test results. + */ + public function test_constants( $constant, $value ) { + if ( defined( $constant ) && constant( $constant ) != $value ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the constant used. */ + __( 'The %s constant is defined and enabled.' ), + "$constant" + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if updates are intercepted by a filter. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function test_wp_version_check_attached() { + if ( ! is_main_site() ) { + return; + } + + $cookies = wp_unslash( $_COOKIE ); + $timeout = 10; + $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'] ) ); + } + + $url = add_query_arg( + array( + 'health-check-test-wp_version_check' => true, + ), + admin_url( 'site-health.php' ) + ); + + $test = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + + if ( is_wp_error( $test ) ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the filter used. */ + __( 'Could not confirm that the %s filter is available.' ), + 'wp_version_check()' + ), + 'severity' => 'warning', + ); + } + + $response = wp_remote_retrieve_body( $test ); + + if ( 'yes' !== $response ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the filter used. */ + __( 'A plugin has prevented updates by disabling %s.' ), + 'wp_version_check()' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if automatic updates are disabled by a filter. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function test_filters_automatic_updater_disabled() { + if ( apply_filters( 'automatic_updater_disabled', false ) ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the filter used. */ + __( 'The %s filter is enabled.' ), + 'automatic_updater_disabled' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if automatic updates have tried to run, but failed, previously. + * + * @since 5.2.0 + * + * @return array|bool The test results. false if the auto updates failed. + */ + function test_if_failed_update() { + $failed = get_site_option( 'auto_core_update_failed' ); + + if ( ! $failed ) { + return false; + } + + if ( ! empty( $failed['critical'] ) ) { + $description = __( 'A previous automatic background update ended with a critical failure, so updates are now disabled.' ); + $description .= ' ' . __( 'You would have received an email because of this.' ); + $description .= ' ' . __( "When you've been able to update using the \"Update Now\" button on Dashboard > Updates, we'll clear this error for future update attempts." ); + $description .= ' ' . sprintf( + /* translators: %s: Code of error shown. */ + __( 'The error code was %s.' ), + '' . $failed['error_code'] . '' + ); + return array( + 'description' => $description, + 'severity' => 'warning', + ); + } + + $description = __( 'A previous automatic background update could not occur.' ); + if ( empty( $failed['retry'] ) ) { + $description .= ' ' . __( 'You would have received an email because of this.' ); + } + + $description .= ' ' . __( "We'll try again with the next release." ); + $description .= ' ' . sprintf( + /* translators: %s: Code of error shown. */ + __( 'The error code was %s.' ), + '' . $failed['error_code'] . '' + ); + return array( + 'description' => $description, + 'severity' => 'warning', + ); + } + + /** + * Check if WordPress is controlled by a VCS (Git, Subversion etc). + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function test_vcs_abspath() { + $context_dirs = array( ABSPATH ); + $vcs_dirs = array( '.svn', '.git', '.hg', '.bzr' ); + $check_dirs = array(); + + foreach ( $context_dirs as $context_dir ) { + // Walk up from $context_dir to the root. + do { + $check_dirs[] = $context_dir; + + // Once we've hit '/' or 'C:\', we need to stop. dirname will keep returning the input here. + if ( dirname( $context_dir ) == $context_dir ) { + break; + } + + // Continue one level at a time. + } while ( $context_dir = dirname( $context_dir ) ); + } + + $check_dirs = array_unique( $check_dirs ); + + // Search all directories we've found for evidence of version control. + foreach ( $vcs_dirs as $vcs_dir ) { + foreach ( $check_dirs as $check_dir ) { + // phpcs:ignore + if ( $checkout = @is_dir( rtrim( $check_dir, '\\/' ) . "/$vcs_dir" ) ) { + break 2; + } + } + } + + if ( $checkout && ! apply_filters( 'automatic_updates_is_vcs_checkout', true, ABSPATH ) ) { + return array( + 'description' => sprintf( + // translators: 1: Folder name. 2: Version control directory. 3: Filter name. + __( 'The folder %1$s was detected as being under version control (%2$s), but the %3$s filter is allowing updates.' ), + '' . $check_dir . '', + "$vcs_dir", + 'automatic_updates_is_vcs_checkout' + ), + 'severity' => 'info', + ); + } + + if ( $checkout ) { + return array( + 'description' => sprintf( + // translators: 1: Folder name. 2: Version control directory. + __( 'The folder %1$s was detected as being under version control (%2$s).' ), + '' . $check_dir . '', + "$vcs_dir" + ), + 'severity' => 'fail', + ); + } + + return array( + 'description' => __( 'No version control systems were detected.' ), + 'severity' => 'pass', + ); + } + + /** + * Check if we can access files without providing credentials. + * + * @since 5.2.0 + * + * @return array The test results. + */ + function test_check_wp_filesystem_method() { + $skin = new Automatic_Upgrader_Skin; + $success = $skin->request_filesystem_credentials( false, ABSPATH ); + + if ( ! $success ) { + $description = __( 'Your installation of WordPress prompts for FTP credentials to perform updates.' ); + $description .= ' ' . __( '(Your site is performing updates over FTP due to file ownership. Talk to your hosting company.)' ); + + return array( + 'description' => $description, + 'severity' => 'fail', + ); + } + + return array( + 'description' => __( "Your installation of WordPress doesn't require FTP credentials to perform updates." ), + 'severity' => 'pass', + ); + } + + /** + * Check if core files are writable by the web user/group. + * + * @since 5.2.0 + * + * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. + * + * @return array|bool The test results. false if they're not writeable. + */ + function test_all_files_writable() { + global $wp_filesystem; + + include ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z + + $skin = new Automatic_Upgrader_Skin; + $success = $skin->request_filesystem_credentials( false, ABSPATH ); + + if ( ! $success ) { + return false; + } + + WP_Filesystem(); + + if ( 'direct' != $wp_filesystem->method ) { + return false; + } + + $checksums = get_core_checksums( $wp_version, 'en_US' ); + $dev = ( false !== strpos( $wp_version, '-' ) ); + // Get the last stable version's files and test against that + if ( ! $checksums && $dev ) { + $checksums = get_core_checksums( (float) $wp_version - 0.1, 'en_US' ); + } + + // There aren't always checksums for development releases, so just skip the test if we still can't find any + if ( ! $checksums && $dev ) { + return false; + } + + if ( ! $checksums ) { + $description = sprintf( + // translators: %s: WordPress version + __( "Couldn't retrieve a list of the checksums for WordPress %s." ), + $wp_version + ); + $description .= ' ' . __( 'This could mean that connections are failing to WordPress.org.' ); + return array( + 'description' => $description, + 'severity' => 'warning', + ); + } + + $unwritable_files = array(); + foreach ( array_keys( $checksums ) as $file ) { + if ( 'wp-content' == substr( $file, 0, 10 ) ) { + continue; + } + if ( ! file_exists( ABSPATH . $file ) ) { + continue; + } + if ( ! is_writable( ABSPATH . $file ) ) { + $unwritable_files[] = $file; + } + } + + if ( $unwritable_files ) { + if ( count( $unwritable_files ) > 20 ) { + $unwritable_files = array_slice( $unwritable_files, 0, 20 ); + $unwritable_files[] = '...'; + } + return array( + 'description' => __( 'Some files are not writable by WordPress:' ) . '
    • ' . implode( '
    • ', $unwritable_files ) . '
    ', + 'severity' => 'fail', + ); + } else { + return array( + 'description' => __( 'All of your WordPress files are writable.' ), + 'severity' => 'pass', + ); + } + } + + /** + * Check if the install is using a development branch and can use nightly packages. + * + * @since 5.2.0 + * + * @return array|bool The test results. false if it isn't a development version. + */ + function test_accepts_dev_updates() { + include ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z + // Only for dev versions + if ( false === strpos( $wp_version, '-' ) ) { + return false; + } + + if ( defined( 'WP_AUTO_UPDATE_CORE' ) && ( 'minor' === WP_AUTO_UPDATE_CORE || false === WP_AUTO_UPDATE_CORE ) ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the constant used. */ + __( 'WordPress development updates are blocked by the %s constant.' ), + 'WP_AUTO_UPDATE_CORE' + ), + 'severity' => 'fail', + ); + } + + if ( ! apply_filters( 'allow_dev_auto_core_updates', $wp_version ) ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the filter used. */ + __( 'WordPress development updates are blocked by the %s filter.' ), + 'allow_dev_auto_core_updates' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if the site supports automatic minor updates. + * + * @since 5.2.0 + * + * @return array The test results. + */ + function test_accepts_minor_updates() { + if ( defined( 'WP_AUTO_UPDATE_CORE' ) && false === WP_AUTO_UPDATE_CORE ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the constant used. */ + __( 'WordPress security and maintenance releases are blocked by %s.' ), + "define( 'WP_AUTO_UPDATE_CORE', false );" + ), + 'severity' => 'fail', + ); + } + + if ( ! apply_filters( 'allow_minor_auto_core_updates', true ) ) { + return array( + 'description' => sprintf( + /* translators: %s: Name of the filter used. */ + __( 'WordPress security and maintenance releases are blocked by the %s filter.' ), + 'allow_minor_auto_core_updates' + ), + 'severity' => 'fail', + ); + } + } +} diff --git a/wp-admin/includes/class-wp-site-health.php b/wp-admin/includes/class-wp-site-health.php new file mode 100644 index 000000000..12e127353 --- /dev/null +++ b/wp-admin/includes/class-wp-site-health.php @@ -0,0 +1,1990 @@ +prepare_sql_data(); + + add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) ); + + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); + } + + /** + * Enqueues the site health scripts. + * + * @since 5.2.0 + */ + public function enqueue_scripts() { + $screen = get_current_screen(); + if ( 'site-health' !== $screen->id ) { + return; + } + + $health_check_js_variables = array( + 'screen' => $screen->id, + 'nonce' => array( + 'site_status' => wp_create_nonce( 'health-check-site-status' ), + 'site_status_result' => wp_create_nonce( 'health-check-site-status-result' ), + ), + 'site_status' => array( + 'direct' => array(), + 'async' => array(), + 'issues' => array( + 'good' => 0, + 'recommended' => 0, + 'critical' => 0, + ), + ), + ); + + $issue_counts = get_transient( 'health-check-site-status-result' ); + + if ( false !== $issue_counts ) { + $issue_counts = json_decode( $issue_counts ); + + $health_check_js_variables['site_status']['issues'] = $issue_counts; + } + + if ( 'site-health' === $screen->id && ! isset( $_GET['tab'] ) ) { + $tests = WP_Site_Health::get_tests(); + + // Don't run https test on localhost + if ( 'localhost' === preg_replace( '|https?://|', '', get_site_url() ) ) { + unset( $tests['direct']['https_status'] ); + } + + foreach ( $tests['direct'] as $test ) { + if ( is_string( $test['test'] ) ) { + $test_function = sprintf( + 'get_test_%s', + $test['test'] + ); + + if ( method_exists( $this, $test_function ) && is_callable( array( $this, $test_function ) ) ) { + $health_check_js_variables['site_status']['direct'][] = call_user_func( array( $this, $test_function ) ); + continue; + } + } + + if ( is_callable( $test['test'] ) ) { + $health_check_js_variables['site_status']['direct'][] = call_user_func( $test['test'] ); + } + } + + foreach ( $tests['async'] as $test ) { + if ( is_string( $test['test'] ) ) { + $health_check_js_variables['site_status']['async'][] = array( + 'test' => $test['test'], + 'completed' => false, + ); + } + } + } + + wp_localize_script( 'site-health', 'SiteHealth', $health_check_js_variables ); + } + + /** + * Run the SQL version checks. + * + * These values are used in later tests, but the part of preparing them is more easily managed early + * in the class for ease of access and discovery. + * + * @since 5.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ + private function prepare_sql_data() { + global $wpdb; + + if ( method_exists( $wpdb, 'db_version' ) ) { + if ( $wpdb->use_mysqli ) { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_server_info + $mysql_server_type = mysqli_get_server_info( $wpdb->dbh ); + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_server_info + $mysql_server_type = mysql_get_server_info( $wpdb->dbh ); + } + + $this->mysql_server_version = $wpdb->get_var( 'SELECT VERSION()' ); + } + + $this->health_check_mysql_rec_version = '5.6'; + + if ( stristr( $mysql_server_type, 'mariadb' ) ) { + $this->is_mariadb = true; + $this->health_check_mysql_rec_version = '10.0'; + } + + $this->mysql_min_version_check = version_compare( '5.5', $this->mysql_server_version, '<=' ); + $this->mysql_rec_version_check = version_compare( $this->health_check_mysql_rec_version, $this->mysql_server_version, '<=' ); + } + + /** + * Test if `wp_version_check` is blocked. + * + * It's possible to block updates with the `wp_version_check` filter, but this can't be checked during an + * AJAX call, as the filter is never introduced then. + * + * This filter overrides a normal page request if it's made by an admin through the AJAX call with the + * right query argument to check for this. + * + * @since 5.2.0 + */ + public function check_wp_version_check_exists() { + if ( ! is_admin() || ! is_user_logged_in() || ! current_user_can( 'update_core' ) || ! isset( $_GET['health-check-test-wp_version_check'] ) ) { + return; + } + + echo ( has_filter( 'wp_version_check', 'wp_version_check' ) ? 'yes' : 'no' ); + + die(); + } + + /** + * Tests for WordPress version and outputs it. + * + * Gives various results depending on what kind of updates are available, if any, to encourage the + * user to install security updates as a priority. + * + * @since 5.2.0 + * + * @return array The test result. + */ + public function get_test_wordpress_version() { + $result = array( + 'label' => '', + 'status' => '', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => '', + 'actions' => '', + 'test' => 'wordpress_version', + ); + + $core_current_version = get_bloginfo( 'version' ); + $core_updates = get_core_updates(); + + if ( ! is_array( $core_updates ) ) { + $result['status'] = 'recommended'; + + $result['label'] = sprintf( + // translators: %s: Your current version of WordPress. + __( 'WordPress version %s' ), + $core_current_version + ); + + $result['description'] = sprintf( + '

    %s

    ', + __( 'We were unable to check if any new versions of WordPress are available.' ) + ); + + $result['actions'] = sprintf( + '%s', + esc_url( admin_url( 'update-core.php?force-check=1' ) ), + __( 'Check for updates manually' ) + ); + } else { + foreach ( $core_updates as $core => $update ) { + if ( 'upgrade' === $update->response ) { + $current_version = explode( '.', $core_current_version ); + $new_version = explode( '.', $update->version ); + + $current_major = $current_version[0] . '.' . $current_version[1]; + $new_major = $new_version[0] . '.' . $new_version[1]; + + $result['label'] = sprintf( + // translators: %s: The latest version of WordPress available. + __( 'WordPress update available (%s)' ), + $update->version + ); + + $result['actions'] = sprintf( + '%s', + esc_url( admin_url( 'update-core.php' ) ), + __( 'Install the latest version of WordPress' ) + ); + + if ( $current_major !== $new_major ) { + // This is a major version mismatch. + $result['status'] = 'recommended'; + $result['description'] = sprintf( + '

    %s

    ', + __( 'A new version of WordPress is available.' ) + ); + } else { + // This is a minor version, sometimes considered more critical. + $result['status'] = 'critical'; + $result['badge']['label'] = __( 'Security' ); + $result['description'] = sprintf( + '

    %s

    ', + __( 'A new minor update is available for your site. Because minor updates often address security, it’s important to install them.' ) + ); + } + } else { + $result['status'] = 'good'; + $result['label'] = sprintf( + // translators: %s: The current version of WordPress installed on this site. + __( 'Your WordPress version is up to date (%s)' ), + $core_current_version + ); + + $result['description'] = sprintf( + '

    %s

    ', + __( 'You are currently running the latest version of WordPress available, keep it up!' ) + ); + } + } + } + + return $result; + } + + /** + * Test if plugins are outdated, or unnecessary. + * + * The tests checks if your plugins are up to date, and encourages you to remove any that are not in use. + * + * @since 5.2.0 + * + * @return array The test result. + */ + public function get_test_plugin_version() { + $result = array( + 'label' => __( 'Your plugins are up to date' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Plugins extend your site’s functionality with things like contact forms, ecommerce and much more. That means they have deep access to your site, so it’s vital to keep them up to date.' ) + ), + 'actions' => sprintf( + '

    %s

    ', + esc_url( admin_url( 'plugins.php' ) ), + __( 'Manage your plugins' ) + ), + 'test' => 'plugin_version', + ); + + $plugins = get_plugins(); + $plugin_updates = get_plugin_updates(); + + $plugins_have_updates = false; + $plugins_active = 0; + $plugins_total = 0; + $plugins_need_update = 0; + + // Loop over the available plugins and check their versions and active state. + foreach ( $plugins as $plugin_path => $plugin ) { + $plugins_total++; + + if ( is_plugin_active( $plugin_path ) ) { + $plugins_active++; + } + + $plugin_version = $plugin['Version']; + + if ( array_key_exists( $plugin_path, $plugin_updates ) ) { + $plugins_need_update++; + $plugins_have_updates = true; + } + } + + // Add a notice if there are outdated plugins. + if ( $plugins_need_update > 0 ) { + $result['status'] = 'critical'; + + $result['label'] = __( 'You have plugins waiting to be updated' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %d: The number of outdated plugins. */ + _n( + 'Your site has %d plugin waiting to be updated.', + 'Your site has %d plugins waiting to be updated.', + $plugins_need_update + ), + $plugins_need_update + ) + ); + + $result['actions'] .= sprintf( + '

    %s

    ', + esc_url( network_admin_url( 'plugins.php?plugin_status=upgrade' ) ), + __( 'Update your plugins' ) + ); + } else { + if ( 1 === $plugins_active ) { + $result['description'] .= sprintf( + '

    %s

    ', + __( 'Your site has 1 active plugin, and it is up to date.' ) + ); + } else { + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %d: The number of active plugins. */ + _n( + 'Your site has %d active plugin, and it is up to date.', + 'Your site has %d active plugins, and they are all up to date.', + $plugins_active + ), + $plugins_active + ) + ); + } + } + + // Check if there are inactive plugins. + if ( $plugins_total > $plugins_active && ! is_multisite() ) { + $unused_plugins = $plugins_total - $plugins_active; + + $result['status'] = 'recommended'; + + $result['label'] = __( 'You should remove inactive plugins' ); + + $result['description'] .= sprintf( + '

    %s %s

    ', + sprintf( + /* translators: %d: The number of inactive plugins. */ + _n( + 'Your site has %d inactive plugin.', + 'Your site has %d inactive plugins.', + $unused_plugins + ), + $unused_plugins + ), + __( 'Inactive plugins are tempting targets for attackers. If you’re not going to use a plugin, we recommend you remove it.' ) + ); + + $result['actions'] .= sprintf( + '

    %s

    ', + esc_url( admin_url( 'plugins.php?plugin_status=inactive' ) ), + __( 'Manage inactive plugins' ) + ); + } + + return $result; + } + + /** + * Test if themes are outdated, or unnecessary. + * + * The tests checks if your site has a default theme (to fall back on if there is a need), if your themes + * are up to date and, finally, encourages you to remove any themes that are not needed. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_theme_version() { + $result = array( + 'label' => __( 'Your themes are up to date' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Themes add your site’s look and feel. It’s important to keep them up to date, to stay consistent with your brand and keep your site secure.' ) + ), + 'actions' => sprintf( + '

    %s

    ', + esc_url( admin_url( 'themes.php' ) ), + __( 'Manage your themes' ) + ), + 'test' => 'theme_version', + ); + + $theme_updates = get_theme_updates(); + + $themes_total = 0; + $themes_need_updates = 0; + $themes_inactive = 0; + + // This value is changed during processing to determine how many themes are considered a reasonable amount. + $allowed_theme_count = 1; + + $has_default_theme = false; + $has_unused_themes = false; + $show_unused_themes = true; + $using_default_theme = false; + + // Populate a list of all themes available in the install. + $all_themes = wp_get_themes(); + $active_theme = wp_get_theme(); + + foreach ( $all_themes as $theme_slug => $theme ) { + $themes_total++; + + if ( WP_DEFAULT_THEME === $theme_slug ) { + $has_default_theme = true; + + if ( get_stylesheet() === $theme_slug ) { + $using_default_theme = true; + } + } + + if ( array_key_exists( $theme_slug, $theme_updates ) ) { + $themes_need_updates++; + } + } + + // If this is a child theme, increase the allowed theme count by one, to account for the parent. + if ( $active_theme->parent() ) { + $allowed_theme_count++; + + if ( $active_theme->get_template() === WP_DEFAULT_THEME ) { + $using_default_theme = true; + } + } + + // If there's a default theme installed and not in use, we count that as allowed as well. + if ( $has_default_theme && ! $using_default_theme ) { + $allowed_theme_count++; + } + + if ( $themes_total > $allowed_theme_count ) { + $has_unused_themes = true; + $themes_inactive = ( $themes_total - $allowed_theme_count ); + } + + // Check if any themes need to be updated. + if ( $themes_need_updates > 0 ) { + $result['status'] = 'critical'; + + $result['label'] = __( 'You have themes waiting to be updated' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %d: The number of outdated themes. */ + _n( + 'Your site has %d theme waiting to be updated.', + 'Your site has %d themes waiting to be updated.', + $themes_need_updates + ), + $themes_need_updates + ) + ); + } else { + // Give positive feedback about the site being good about keeping things up to date. + if ( 1 === $themes_total ) { + $result['description'] .= sprintf( + '

    %s

    ', + __( 'Your site has 1 installed theme, and it is up to date.' ) + ); + } else { + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %d: The number of themes. */ + _n( + 'Your site has %d installed theme, and it is up to date.', + 'Your site has %d installed themes, and they are all up to date.', + $themes_total + ), + $themes_total + ) + ); + } + } + + if ( $has_unused_themes && $show_unused_themes && ! is_multisite() ) { + + // This is a child theme, so we want to be a bit more explicit in our messages. + if ( $active_theme->parent() ) { + // Recommend removing inactive themes, except a default theme, your current one, and the parent theme. + $result['status'] = 'recommended'; + + $result['label'] = __( 'You should remove inactive themes' ); + + if ( $using_default_theme ) { + $result['description'] .= sprintf( + '

    %s %s

    ', + sprintf( + /* translators: %d: The number of inactive themes. */ + _n( + 'Your site has %d inactive theme.', + 'Your site has %d inactive themes.', + $themes_inactive + ), + $themes_inactive + ), + sprintf( + /* translators: 1: The currently active theme. 2: The active theme's parent theme. */ + __( 'To enhance your site’s security, we recommend you remove any themes you’re not using. You should keep your current theme, %1$s, and %2$s, its parent theme.' ), + $active_theme->name, + $active_theme->parent()->name + ) + ); + } else { + $result['description'] .= sprintf( + '

    %s %s

    ', + sprintf( + /* translators: %d: The number of inactive themes. */ + _n( + 'Your site has %d inactive theme.', + 'Your site has %d inactive themes.', + $themes_inactive + ), + $themes_inactive + ), + sprintf( + /* translators: 1: The default theme for WordPress. 2: The currently active theme. 3: The active theme's parent theme. */ + __( 'To enhance your site’s security, we recommend you remove any themes you’re not using. You should keep %1$s, the default WordPress theme, %2$s, your current theme, and %3$s, its parent theme.' ), + WP_DEFAULT_THEME, + $active_theme->name, + $active_theme->parent()->name + ) + ); + } + } else { + // Recommend removing all inactive themes. + $result['status'] = 'recommended'; + + $result['label'] = __( 'You should remove inactive themes' ); + + if ( $using_default_theme ) { + $result['description'] .= sprintf( + '

    %s %s

    ', + sprintf( + /* translators: 1: The amount of inactive themes. 2: The currently active theme. */ + _n( + 'Your site has %1$d inactive theme, other than %2$s, your active theme.', + 'Your site has %1$d inactive themes, other than %2$s, your active theme.', + $themes_inactive + ), + $themes_inactive, + $active_theme->name + ), + __( 'We recommend removing any unused themes to enhance your site’s security.' ) + ); + } else { + $result['description'] .= sprintf( + '

    %s %s

    ', + sprintf( + /* translators: 1: The amount of inactive themes. 2: The default theme for WordPress. 3: The currently active theme. */ + _n( + 'Your site has %1$d inactive theme, other than %2$s, the default WordPress theme, and %3$s, your active theme.', + 'Your site has %1$d inactive themes, other than %2$s, the default WordPress theme, and %3$s, your active theme.', + $themes_inactive + ), + $themes_inactive, + WP_DEFAULT_THEME, + $active_theme->name + ), + __( 'We recommend removing any unused themes to enhance your site’s security.' ) + ); + } + } + } + + // If not default Twenty* theme exists. + if ( ! $has_default_theme ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'Have a default theme available' ); + + $result['description'] .= sprintf( + '

    %s

    ', + __( 'Your site does not have any default theme. Default themes are used by WordPress automatically if anything is wrong with your normal theme.' ) + ); + } + + return $result; + } + + /** + * Test if the supplied PHP version is supported. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_php_version() { + $response = wp_check_php_version(); + + $result = array( + 'label' => sprintf( + // translators: %s: The current PHP version. + __( 'PHP is up to date (%s)' ), + PHP_VERSION + ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'PHP is the programming language we use to build and maintain WordPress. Newer versions of PHP are both faster and more secure, so updating will have a positive effect on your site’s performance.' ) + ), + 'actions' => sprintf( + '

    %s %s

    ', + esc_url( wp_get_update_php_url() ), + __( 'Learn more about updating PHP' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ), + 'test' => 'php_version', + ); + + // PHP is up to date. + if ( ! $response || version_compare( PHP_VERSION, $response['recommended_version'], '>=' ) ) { + return $result; + } + + // The PHP version is older than the recommended version, but still acceptable. + if ( $response['is_supported'] ) { + $result['label'] = __( 'We recommend that you update PHP' ); + $result['status'] = 'recommended'; + + return $result; + } + + // The PHP version is only receiving security fixes. + if ( $response['is_secure'] ) { + $result['label'] = __( 'Your PHP version should be updated' ); + $result['status'] = 'recommended'; + + return $result; + } + + // Anything no longer secure must be updated. + $result['label'] = __( 'Your PHP version requires an update' ); + $result['status'] = 'critical'; + $result['badge']['label'] = __( 'Security' ); + + return $result; + } + + /** + * Check if the passed extension or function are available. + * + * Make the check for available PHP modules into a simple boolean operator for a cleaner test runner. + * + * @since 5.2.0 + * + * @param string $extension Optional. The extension name to test. Default null. + * @param string $function Optional. The function name to test. Default null. + * + * @return bool Whether or not the extension and function are available. + */ + private function test_php_extension_availability( $extension = null, $function = null ) { + // If no extension or function is passed, claim to fail testing, as we have nothing to test against. + if ( ! $extension && ! $function ) { + return false; + } + + if ( $extension && ! extension_loaded( $extension ) ) { + return false; + } + if ( $function && ! function_exists( $function ) ) { + return false; + } + + return true; + } + + /** + * Test if required PHP modules are installed on the host. + * + * This test builds on the recommendations made by the WordPress Hosting Team + * as seen at https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions + * + * @since 5.2.0 + * + * @return array + */ + public function get_test_php_extensions() { + $result = array( + 'label' => __( 'Required and recommended modules are installed' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    %s

    ', + __( 'PHP modules perform most of the tasks on the server that make your site run. Any changes to these must be made by your server administrator.' ), + sprintf( + /* translators: 1: Link to the hosting group page about recommended PHP modules. 2: Additional link attributes. 3: Accessibility text. */ + __( 'The WordPress Hosting Team maintains a list of those modules, both recommended and required, in the team handbook%3$s.' ), + /* translators: Localized team handbook, if one exists. */ + esc_url( __( 'https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions' ) ), + 'target="_blank" rel="noopener noreferrer"', + sprintf( + ' %s', + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ) + ) + ), + 'actions' => '', + 'test' => 'php_extensions', + ); + + $modules = array( + 'bcmath' => array( + 'function' => 'bcadd', + 'required' => false, + ), + 'curl' => array( + 'function' => 'curl_version', + 'required' => false, + ), + 'exif' => array( + 'function' => 'exif_read_data', + 'required' => false, + ), + 'filter' => array( + 'function' => 'filter_list', + 'required' => false, + ), + 'fileinfo' => array( + 'function' => 'finfo_file', + 'required' => false, + ), + 'mod_xml' => array( + 'extension' => 'libxml', + 'required' => false, + ), + 'mysqli' => array( + 'function' => 'mysqli_connect', + 'required' => false, + ), + 'libsodium' => array( + 'function' => 'sodium_compare', + 'required' => false, + 'php_bundled_version' => '7.2.0', + ), + 'openssl' => array( + 'function' => 'openssl_encrypt', + 'required' => false, + ), + 'pcre' => array( + 'function' => 'preg_match', + 'required' => false, + ), + 'imagick' => array( + 'extension' => 'imagick', + 'required' => false, + ), + 'gd' => array( + 'extension' => 'gd', + 'required' => false, + 'fallback_for' => 'imagick', + ), + 'mcrypt' => array( + 'extension' => 'mcrypt', + 'required' => false, + 'fallback_for' => 'libsodium', + ), + 'xmlreader' => array( + 'extension' => 'xmlreader', + 'required' => false, + 'fallback_for' => 'xml', + ), + 'zlib' => array( + 'extension' => 'zlib', + 'required' => false, + 'fallback_for' => 'zip', + ), + ); + + /** + * An array representing all the modules we wish to test for. + * + * @since 5.2.0 + * + * @param array $modules { + * An associated array of modules to test for. + * + * array $module { + * An associated array of module properties used during testing. + * One of either `$function` or `$extension` must be provided, or they will fail by default. + * + * string $function Optional. A function name to test for the existence of. + * string $extension Optional. An extension to check if is loaded in PHP. + * bool $required Is this a required feature or not. + * string $fallback_for Optional. The module this module replaces as a fallback. + * } + * } + */ + $modules = apply_filters( 'site_status_test_php_modules', $modules ); + + $failures = array(); + + foreach ( $modules as $library => $module ) { + $extension = ( isset( $module['extension'] ) ? $module['extension'] : null ); + $function = ( isset( $module['function'] ) ? $module['function'] : null ); + + // If this module is a fallback for another function, check if that other function passed. + if ( isset( $module['fallback_for'] ) ) { + /* + * If that other function has a failure, mark this module as required for normal operations. + * If that other function hasn't failed, skip this test as it's only a fallback. + */ + if ( isset( $failures[ $module['fallback_for'] ] ) ) { + $module['required'] = true; + } else { + continue; + } + } + + if ( ! $this->test_php_extension_availability( $extension, $function ) && ( ! isset( $module['php_bundled_version'] ) || version_compare( PHP_VERSION, $module['php_bundled_version'], '<' ) ) ) { + if ( $module['required'] ) { + $result['status'] = 'critical'; + + $class = 'error'; + $screen_reader = __( 'Error' ); + $message = sprintf( + /* translators: %s: The module name. */ + __( 'The required module, %s, is not installed, or has been disabled.' ), + $library + ); + } else { + $class = 'warning'; + $screen_reader = __( 'Warning' ); + $message = sprintf( + /* translators: %s: The module name. */ + __( 'The optional module, %s, is not installed, or has been disabled.' ), + $library + ); + } + + if ( ! $module['required'] && 'good' === $result['status'] ) { + $result['status'] = 'recommended'; + } + + $failures[ $library ] = "$screen_reader $message"; + } + } + + if ( ! empty( $failures ) ) { + $output = '
      '; + + foreach ( $failures as $failure ) { + $output .= sprintf( + '
    • %s
    • ', + $failure + ); + } + + $output .= '
    '; + } + + if ( 'good' !== $result['status'] ) { + if ( 'recommended' === $result['status'] ) { + $result['label'] = __( 'One or more recommended modules are missing' ); + } + if ( 'critical' === $result['status'] ) { + $result['label'] = __( 'One or more required modules are missing' ); + } + + $result['description'] .= sprintf( + '

    %s

    ', + $output + ); + } + + return $result; + } + + /** + * Test if the SQL server is up to date. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_sql_server() { + $result = array( + 'label' => __( 'SQL server is up to date' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'The SQL server is a required piece of software for the database WordPress uses to store all your site’s content and settings.' ) + ), + 'actions' => sprintf( + '

    %s %s

    ', + /* translators: Localized version of WordPress requirements if one exists. */ + esc_url( __( 'https://wordpress.org/about/requirements/' ) ), + __( 'Read more about what WordPress requires to run.' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ), + 'test' => 'sql_server', + ); + + $db_dropin = file_exists( WP_CONTENT_DIR . '/db.php' ); + + if ( ! $this->mysql_rec_version_check ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'Outdated SQL server' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: The database engine in use (MySQL or MariaDB). 2: Database server recommended version number. */ + __( 'For optimal performance and security reasons, we recommend running %1$s version %2$s or higher. Contact your web hosting company to correct this.' ), + ( $this->is_mariadb ? 'MariaDB' : 'MySQL' ), + $this->health_check_mysql_rec_version + ) + ); + } + + if ( ! $this->mysql_min_version_check ) { + $result['status'] = 'critical'; + + $result['label'] = __( 'Severely outdated SQL server' ); + $result['badge']['label'] = __( 'Security' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: The database engine in use (MySQL or MariaDB). 2: Database server minimum version number. */ + __( 'WordPress requires %1$s version %2$s or higher. Contact your web hosting company to correct this.' ), + ( $this->is_mariadb ? 'MariaDB' : 'MySQL' ), + $this->health_check_mysql_required_version + ) + ); + } + + if ( $db_dropin ) { + $result['description'] .= sprintf( + '

    %s

    ', + wp_kses( + sprintf( + /* translators: 1: The name of the drop-in. 2: The name of the database engine. */ + __( 'You are using a %1$s drop-in which might mean that a %2$s database is not being used.' ), + 'wp-content/db.php', + ( $this->is_mariadb ? 'MariaDB' : 'MySQL' ) + ), + array( + 'code' => true, + ) + ) + ); + } + + return $result; + } + + /** + * Test if the database server is capable of using utf8mb4. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_utf8mb4_support() { + global $wpdb; + + $result = array( + 'label' => __( 'UTF8MB4 is supported' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'UTF8MB4 is a database storage attribute that makes sure your site can store non-English text and other strings (for instance emoticons) without unexpected problems.' ) + ), + 'actions' => '', + 'test' => 'utf8mb4_support', + ); + + if ( ! $this->is_mariadb ) { + if ( version_compare( $this->mysql_server_version, '5.5.3', '<' ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'utf8mb4 requires a MySQL update' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: Version number. */ + __( 'WordPress’ utf8mb4 support requires MySQL version %s or greater. Please contact your server administrator.' ), + '5.5.3' + ) + ); + } else { + $result['description'] .= sprintf( + '

    %s

    ', + __( 'Your MySQL version supports utf8mb4.' ) + ); + } + } else { // MariaDB introduced utf8mb4 support in 5.5.0 + if ( version_compare( $this->mysql_server_version, '5.5.0', '<' ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'utf8mb4 requires a MariaDB update' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: Version number. */ + __( 'WordPress’ utf8mb4 support requires MariaDB version %s or greater. Please contact your server administrator.' ), + '5.5.0' + ) + ); + } else { + $result['description'] .= sprintf( + '

    %s

    ', + __( 'Your MariaDB version supports utf8mb4.' ) + ); + } + } + + if ( $wpdb->use_mysqli ) { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_client_info + $mysql_client_version = mysqli_get_client_info(); + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info + $mysql_client_version = mysql_get_client_info(); + } + + /* + * libmysql has supported utf8mb4 since 5.5.3, same as the MySQL server. + * mysqlnd has supported utf8mb4 since 5.0.9. + */ + if ( false !== strpos( $mysql_client_version, 'mysqlnd' ) ) { + $mysql_client_version = preg_replace( '/^\D+([\d.]+).*/', '$1', $mysql_client_version ); + if ( version_compare( $mysql_client_version, '5.0.9', '<' ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'utf8mb4 requires a newer client library' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: Name of the library, 2: Number of version. */ + __( 'WordPress’ utf8mb4 support requires MySQL client library (%1$s) version %2$s or newer. Please contact your server administrator.' ), + 'mysqlnd', + '5.0.9' + ) + ); + } + } else { + if ( version_compare( $mysql_client_version, '5.5.3', '<' ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'utf8mb4 requires a newer client library' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: Name of the library, 2: Number of version. */ + __( 'WordPress’ utf8mb4 support requires MySQL client library (%1$s) version %2$s or newer. Please contact your server administrator.' ), + 'libmysql', + '5.5.3' + ) + ); + } + } + + return $result; + } + + /** + * Test if the site can communicate with WordPress.org. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_dotorg_communication() { + $result = array( + 'label' => __( 'Can communicate with WordPress.org' ), + 'status' => '', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Communicating with the WordPress servers is used to check for new versions, and to both install and update WordPress core, themes or plugins.' ) + ), + 'actions' => '', + 'test' => 'dotorg_communication', + ); + + $wp_dotorg = wp_remote_get( + 'https://api.wordpress.org', + array( + 'timeout' => 10, + ) + ); + if ( ! is_wp_error( $wp_dotorg ) ) { + $result['status'] = 'good'; + } else { + $result['status'] = 'critical'; + + $result['label'] = __( 'Could not reach WordPress.org' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + '%s %s', + __( 'Error' ), + sprintf( + /* translators: 1: The IP address WordPress.org resolves to. 2: The error returned by the lookup. */ + __( 'Your site is unable to reach WordPress.org at %1$s, and returned the error: %2$s' ), + gethostbyname( 'api.wordpress.org' ), + $wp_dotorg->get_error_message() + ) + ) + ); + + $result['actions'] = sprintf( + '

    %s %s

    ', + /* translators: Localized Support reference. */ + esc_url( __( 'https://wordpress.org/support' ) ), + __( 'Get help resolving this issue.' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ); + } + + return $result; + } + + /** + * Test if debug information is enabled. + * + * When WP_DEBUG is enabled, errors and information may be disclosed to site visitors, or it may be + * logged to a publicly accessible file. + * + * Debugging is also frequently left enabled after looking for errors on a site, as site owners do + * not understand the implications of this. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_is_in_debug_mode() { + $result = array( + 'label' => __( 'Your site is not set to output debug information' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Debug mode is often enabled to gather more details about an error or site failure, but may contain sensitive information which should not be available on a publicly available website.' ) + ), + 'actions' => sprintf( + '

    %s %s

    ', + /* translators: Documentation explaining debugging in WordPress. */ + esc_url( __( 'https://wordpress.org/support/article/debugging-in-wordpress/' ) ), + __( 'Read about debugging in WordPress.' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ), + 'test' => 'is_in_debug_mode', + ); + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { + $result['label'] = __( 'Your site is set to log errors to a potentially public file.' ); + + $result['status'] = 'critical'; + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: WP_DEBUG_LOG */ + __( 'The value, %s, has been added to this website’s configuration file. This means any errors on the site will be written to a file which is potentially available to normal users.' ), + 'WP_DEBUG_LOG' + ) + ); + } + + if ( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ) { + $result['label'] = __( 'Your site is set to display errors to site visitors' ); + + $result['status'] = 'critical'; + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: WP_DEBUG_DISPLAY, 2: WP_DEBUG */ + __( 'The value, %1$s, has either been enabled by %2$s or added to your configuration file. This will make errors display on the front end of your site.' ), + 'WP_DEBUG_DISPLAY', + 'WP_DEBUG' + ) + ); + } + } + + return $result; + } + + /** + * Test if your site is serving content over HTTPS. + * + * Many sites have varying degrees of HTTPS support, the most common of which is sites that have it + * enabled, but only if you visit the right site address. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_https_status() { + $result = array( + 'label' => __( 'Your website is using an active HTTPS connection.' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'An HTTPS connection is needed for many features on the web today, it also gains the trust of your visitors by helping to protecting their online privacy.' ) + ), + 'actions' => sprintf( + '

    %s %s

    ', + /* translators: Documentation explaining HTTPS and why it should be used. */ + esc_url( __( 'https://wordpress.org/support/article/why-should-i-use-https/' ) ), + __( 'Read more about why you should use HTTPS' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ), + 'test' => 'https_status', + ); + + if ( is_ssl() ) { + $wp_url = get_bloginfo( 'wpurl' ); + $site_url = get_bloginfo( 'url' ); + + if ( 'https' !== substr( $wp_url, 0, 5 ) || 'https' !== substr( $site_url, 0, 5 ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'Only parts of your site are using HTTPS' ); + + $result['description'] = sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: URL to Settings > General to change options. */ + __( 'You are accessing this website using HTTPS, but your WordPress Address is not set up to use HTTPS by default.' ), + esc_url( admin_url( 'options-general.php' ) ) + ) + ); + + $result['actions'] .= sprintf( + '

    %s

    ', + esc_url( admin_url( 'options-general.php' ) ), + __( 'Update your site addresses' ) + ); + } + } else { + $result['status'] = 'recommended'; + + $result['label'] = __( 'Your site does not use HTTPS' ); + } + + return $result; + } + + /** + * Check if the HTTP API can handle SSL/TLS requests. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_ssl_support() { + $result = array( + 'label' => '', + 'status' => '', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Securely communicating between servers are needed for transactions such as fetching files, conducting sales on store sites, and much more.' ) + ), + 'actions' => '', + 'test' => 'ssl_support', + ); + + $supports_https = wp_http_supports( array( 'ssl' ) ); + + if ( $supports_https ) { + $result['status'] = 'good'; + + $result['label'] = __( 'Your site can communicate securely with other services' ); + } else { + $result['status'] = 'critical'; + + $result['label'] = __( 'Your site is unable to communicate securely with other services' ); + + $result['description'] .= sprintf( + '

    %s

    ', + __( 'Talk to your web host about OpenSSL support for PHP.' ) + ); + } + + return $result; + } + + /** + * Test if scheduled events run as intended. + * + * If scheduled events are not running, this may indicate something with WP_Cron is not working as intended, + * or that there are orphaned events hanging around from older code. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_scheduled_events() { + $result = array( + 'label' => __( 'Scheduled events are running' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Scheduled events are what periodically looks for updates to plugins, themes and WordPress itself. It is also what makes sure scheduled posts are published on time. It may also be used by various plugins to make sure that planned actions are executed.' ) + ), + 'actions' => '', + 'test' => 'scheduled_events', + ); + + $this->wp_schedule_test_init(); + + if ( is_wp_error( $this->has_missed_cron() ) ) { + $result['status'] = 'critical'; + + $result['label'] = __( 'It was not possible to check your scheduled events' ); + + $result['description'] = sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: The error message returned while from the cron scheduler. */ + __( 'While trying to test your site’s scheduled events, the following error was returned: %s' ), + $this->has_missed_cron()->get_error_message() + ) + ); + } else { + if ( $this->has_missed_cron() ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'A scheduled event has failed' ); + + $result['description'] = sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: The name of the failed cron event. */ + __( 'The scheduled event, %s, failed to run. Your site still works, but this may indicate that scheduling posts or automated updates may not work as intended.' ), + $this->last_missed_cron + ) + ); + } + } + + return $result; + } + + /** + * Test if WordPress can run automated background updates. + * + * Background updates in WordPress are primarily used for minor releases and security updates. It's important + * to either have these working, or be aware that they are intentionally disabled for whatever reason. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_background_updates() { + $result = array( + 'label' => __( 'Background updates are working' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Security' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Background updates ensure that WordPress can auto-update if a security update is released for the version you are currently using.' ) + ), + 'actions' => '', + 'test' => 'background_updates', + ); + + if ( ! class_exists( 'WP_Site_Health_Auto_Updates' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-site-health-auto-updates.php' ); + } + + // Run the auto-update tests in a separate class, + // as there are many considerations to be made. + $automatic_updates = new WP_Site_Health_Auto_Updates(); + $tests = $automatic_updates->run_tests(); + + $output = '
      '; + + foreach ( $tests as $test ) { + $severity_string = __( 'Passed' ); + + if ( 'fail' === $test->severity ) { + $result['label'] = __( 'Background updates are not working as expected' ); + + $result['status'] = 'critical'; + + $severity_string = __( 'Error' ); + } + + if ( 'warning' === $test->severity && 'good' === $result['status'] ) { + $result['label'] = __( 'Background updates may not be working properly' ); + + $result['status'] = 'recommended'; + + $severity_string = __( 'Warning' ); + } + + $output .= sprintf( + '
    • %s %s
    • ', + esc_attr( $test->severity ), + $severity_string, + $test->description + ); + } + + $output .= '
    '; + + if ( 'good' !== $result['status'] ) { + $result['description'] .= sprintf( + '

    %s

    ', + $output + ); + } + + return $result; + } + + /** + * Test if loopbacks work as expected. + * + * A loopback is when WordPress queries itself, for example to start a new WP_Cron instance, or when editing a + * plugin or theme. This has shown itself to be a recurring issue as code can very easily break this interaction. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_loopback_requests() { + $result = array( + 'label' => __( 'Your site can perform loopback requests' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'Loopback requests are used to run scheduled events, and are also used by the built-in editors for themes and plugins to verify code stability.' ) + ), + 'actions' => '', + 'test' => 'loopback_requests', + ); + + $check_loopback = $this->can_perform_loopback(); + + $result['status'] = $check_loopback->status; + + if ( 'good' !== $check_loopback->status ) { + $result['label'] = __( 'Your site could not complete a loopback request' ); + + $result['description'] .= sprintf( + '

    %s

    ', + $check_loopback->message + ); + } + + return $result; + } + + /** + * Test if HTTP requests are blocked. + * + * It's possible to block all outgoing communication (with the possibility of whitelisting hosts) via the + * HTTP API. This may create problems for users as many features are running as services these days. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_http_requests() { + $result = array( + 'label' => __( 'HTTP requests seem to be working as expected' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'It is possible for site maintainers to block all, or some, communication to other sites and services. If set up incorrectly, this may prevent plugins and themes from working as intended.' ) + ), + 'actions' => '', + 'test' => 'http_requests', + ); + + $blocked = false; + $hosts = array(); + + if ( defined( 'WP_HTTP_BLOCK_EXTERNAL' ) && WP_HTTP_BLOCK_EXTERNAL ) { + $blocked = true; + } + + if ( defined( 'WP_ACCESSIBLE_HOSTS' ) ) { + $hosts = explode( ',', WP_ACCESSIBLE_HOSTS ); + } + + if ( $blocked && 0 === sizeof( $hosts ) ) { + $result['status'] = 'critical'; + + $result['label'] = __( 'HTTP requests are blocked' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: Name of the constant used. */ + __( 'HTTP requests have been blocked by the %s constant, with no allowed hosts.' ), + 'WP_HTTP_BLOCK_EXTERNAL' + ) + ); + } + + if ( $blocked && 0 < sizeof( $hosts ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'HTTP requests are partially blocked' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: Name of the constant used. 2: List of hostnames whitelisted. */ + __( 'HTTP requests have been blocked by the %1$s constant, with some hosts whitelisted: %2$s.' ), + 'WP_HTTP_BLOCK_EXTERNAL', + implode( ',', $hosts ) + ) + ); + } + + return $result; + } + + /** + * Test if the REST API is accessible. + * + * Various security measures may block the REST API from working, or it may have been disabled in general. + * This is required for the new block editor to work, so we explicitly test for this. + * + * @since 5.2.0 + * + * @return array The test results. + */ + public function get_test_rest_availability() { + $result = array( + 'label' => __( 'The REST API is available' ), + 'status' => 'good', + 'badge' => array( + 'label' => __( 'Performance' ), + 'color' => 'blue', + ), + 'description' => sprintf( + '

    %s

    ', + __( 'The REST API is one way WordPress, and other applications, communicate with the server. One example is the block editor screen, which relies on this to display, and save, your posts and pages.' ) + ), + 'actions' => '', + 'test' => 'rest_availability', + ); + + $cookies = wp_unslash( $_COOKIE ); + $timeout = 10; + $headers = array( + 'Cache-Control' => 'no-cache', + 'X-WP-Nonce' => wp_create_nonce( 'wp_rest' ), + ); + + // 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'] ) ); + } + + $url = rest_url( 'wp/v2/types/post' ); + + // The context for this is editing with the new block editor. + $url = add_query_arg( + array( + 'context' => 'edit', + ), + $url + ); + + $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + + if ( is_wp_error( $r ) ) { + $result['status'] = 'critical'; + + $result['label'] = __( 'The REST API encountered an error' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + '%s
    %s', + __( 'The REST API request failed due to an error.' ), + sprintf( + /* translators: 1: The HTTP response code. 2: The error message returned. */ + __( 'Error: [%1$s] %2$s' ), + wp_remote_retrieve_response_code( $r ), + $r->get_error_message() + ) + ) + ); + } elseif ( 200 !== wp_remote_retrieve_response_code( $r ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'The REST API encountered an unexpected result' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: 1: The HTTP response code returned. 2: The error message returned. */ + __( 'The REST API call gave the following unexpected result: (%1$d) %2$s.' ), + wp_remote_retrieve_response_code( $r ), + wp_remote_retrieve_body( $r ) + ) + ); + } else { + $json = json_decode( wp_remote_retrieve_body( $r ), true ); + + if ( false !== $json && ! isset( $json['capabilities'] ) ) { + $result['status'] = 'recommended'; + + $result['label'] = __( 'The REST API did not behave correctly' ); + + $result['description'] .= sprintf( + '

    %s

    ', + sprintf( + /* translators: %s: the name of the query parameter being tested. */ + __( 'The REST API did not process the %s query parameter correctly.' ), + 'context' + ) + ); + } + } + + return $result; + } + + /** + * Return a set of tests that belong to the site status page. + * + * Each site status test is defined here, they may be `direct` tests, that run on page load, or `async` tests + * which will run later down the line via JavaScript calls to improve page performance and hopefully also user + * experiences. + * + * @since 5.2.0 + * + * @return array The list of tests to run. + */ + public static function get_tests() { + $tests = array( + 'direct' => array( + 'wordpress_version' => array( + 'label' => __( 'WordPress Version' ), + 'test' => 'wordpress_version', + ), + 'plugin_version' => array( + 'label' => __( 'Plugin Versions' ), + 'test' => 'plugin_version', + ), + 'theme_version' => array( + 'label' => __( 'Theme Versions' ), + 'test' => 'theme_version', + ), + 'php_version' => array( + 'label' => __( 'PHP Version' ), + 'test' => 'php_version', + ), + 'sql_server' => array( + 'label' => __( 'Database Server version' ), + 'test' => 'sql_server', + ), + 'php_extensions' => array( + 'label' => __( 'PHP Extensions' ), + 'test' => 'php_extensions', + ), + 'utf8mb4_support' => array( + 'label' => __( 'MySQL utf8mb4 support' ), + 'test' => 'utf8mb4_support', + ), + 'https_status' => array( + 'label' => __( 'HTTPS status' ), + 'test' => 'https_status', + ), + 'ssl_support' => array( + 'label' => __( 'Secure communication' ), + 'test' => 'ssl_support', + ), + 'scheduled_events' => array( + 'label' => __( 'Scheduled events' ), + 'test' => 'scheduled_events', + ), + 'http_requests' => array( + 'label' => __( 'HTTP Requests' ), + 'test' => 'http_requests', + ), + 'debug_enabled' => array( + 'label' => __( 'Debugging enabled' ), + 'test' => 'is_in_debug_mode', + ), + ), + 'async' => array( + 'dotorg_communication' => array( + 'label' => __( 'Communication with WordPress.org' ), + 'test' => 'dotorg_communication', + ), + 'background_updates' => array( + 'label' => __( 'Background updates' ), + 'test' => 'background_updates', + ), + 'loopback_requests' => array( + 'label' => __( 'Loopback request' ), + 'test' => 'loopback_requests', + ), + ), + ); + + // Conditionally include REST rules if the function for it exists. + if ( function_exists( 'rest_url' ) ) { + $tests['direct']['rest_availability'] = array( + 'label' => __( 'REST API availability' ), + 'test' => 'rest_availability', + ); + } + + /** + * Add or modify which site status tests are run on a site. + * + * The site health is determined by a set of tests based on best practices from + * both the WordPress Hosting Team, but also web standards in general. + * + * Some sites may not have the same requirements, for example the automatic update + * checks may be handled by a host, and are therefore disabled in core. + * Or maybe you want to introduce a new test, is caching enabled/disabled/stale for example. + * + * Tests may be added either as direct, or asynchronous ones. Any test that may require some time + * to complete should run asynchronously, to avoid extended loading periods within wp-admin. + * + * @since 5.2.0 + * + * @param array $test_type { + * An associative array, where the `$test_type` is either `direct` or + * `async`, to declare if the test should run via AJAX calls after page load. + * + * @type array $identifier { + * `$identifier` should be a unique identifier for the test that should run. + * Plugins and themes are encouraged to prefix test identifiers with their slug + * to avoid any collisions between tests. + * + * @type string $label A friendly label for your test to identify it by. + * @type mixed $test A callable to perform a direct test, or a string AJAX action to be called + * to perform an async test. + * } + * } + */ + $tests = apply_filters( 'site_status_tests', $tests ); + + return $tests; + } + + /** + * Add a class to the body HTML tag. + * + * Filters the body class string for admin pages and adds our own class for easier styling. + * + * @since 5.2.0 + * + * @param string $body_class The body class string. + * @return string The modified body class string. + */ + public function admin_body_class( $body_class ) { + $body_class .= ' site-health'; + + return $body_class; + } + + /** + * Initiate the WP_Cron schedule test cases. + * + * @since 5.2.0 + */ + private function wp_schedule_test_init() { + $this->schedules = wp_get_schedules(); + $this->get_cron_tasks(); + } + + /** + * Populate our list of cron events and store them to a class-wide variable. + * + * @since 5.2.0 + */ + private function get_cron_tasks() { + $cron_tasks = _get_cron_array(); + + if ( empty( $cron_tasks ) ) { + $this->crons = new WP_Error( 'no_tasks', __( 'No scheduled events exist on this site.' ) ); + return; + } + + $this->crons = array(); + + foreach ( $cron_tasks as $time => $cron ) { + foreach ( $cron as $hook => $dings ) { + foreach ( $dings as $sig => $data ) { + + $this->crons[ "$hook-$sig-$time" ] = (object) array( + 'hook' => $hook, + 'time' => $time, + 'sig' => $sig, + 'args' => $data['args'], + 'schedule' => $data['schedule'], + 'interval' => isset( $data['interval'] ) ? $data['interval'] : null, + ); + + } + } + } + } + + /** + * Check if any scheduled tasks have been missed. + * + * Returns a boolean value of `true` if a scheduled task has been missed and ends processing. If the list of + * crons is an instance of WP_Error, return the instance instead of a boolean value. + * + * @since 5.2.0 + * + * @return bool|WP_Error true if a cron was missed, false if it wasn't. WP_Error if the cron is set to that. + */ + public function has_missed_cron() { + if ( is_wp_error( $this->crons ) ) { + return $this->crons; + } + + foreach ( $this->crons as $id => $cron ) { + if ( ( $cron->time - time() ) < 0 ) { + $this->last_missed_cron = $cron->hook; + return true; + } + } + + return false; + } + + /** + * Run a loopback test on our site. + * + * Loopbacks are what WordPress uses to communicate with itself to start up WP_Cron, scheduled posts, + * make sure plugin or theme edits don't cause site failures and similar. + * + * @since 5.2.0 + * + * @return object The test results. + */ + function can_perform_loopback() { + $cookies = wp_unslash( $_COOKIE ); + $timeout = 10; + $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'] ) ); + } + + $url = admin_url(); + + $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + + if ( is_wp_error( $r ) ) { + return (object) array( + 'status' => 'critical', + 'message' => sprintf( + '%s
    %s', + __( 'The loopback request to your site failed, this means features relying on them are not currently working as expected.' ), + sprintf( + // translators: 1: The HTTP response code. 2: The error message returned. + __( 'Error: [%1$s] %2$s' ), + wp_remote_retrieve_response_code( $r ), + $r->get_error_message() + ) + ), + ); + } + + if ( 200 !== wp_remote_retrieve_response_code( $r ) ) { + return (object) array( + 'status' => 'recommended', + 'message' => sprintf( + // translators: %d: The HTTP response code returned. + __( 'The loopback request returned an unexpected http status code, %d, it was not possible to determine if this will prevent features from working as expected.' ), + wp_remote_retrieve_response_code( $r ) + ), + ); + } + + return (object) array( + 'status' => 'good', + 'message' => __( 'The loopback request to your site completed successfully.' ), + ); + } +} 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 000000000..a16565e70 --- /dev/null +++ b/wp-admin/includes/class-wp-site-icon.php @@ -0,0 +1,233 @@ +ID ); + $url = str_replace( wp_basename( $parent_url ), wp_basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; + + $object = array( + 'ID' => $parent_attachment_id, + 'post_title' => wp_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 Array of arrays containing information for additional sizes. + * @return array[] Array of arrays containing 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 int[] $site_icon_sizes Array of 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 string[] $sizes Array of image size names. + * @return string[] Array of image size names. + */ + 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 000000000..d30fb3d8f --- /dev/null +++ b/wp-admin/includes/class-wp-terms-list-table.php @@ -0,0 +1,676 @@ + '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; + + if ( $tag->parent ) { + $count = count( get_ancestors( $tag->term_id, $taxonomy, 'taxonomy' ) ); + $level = 'level-' . $count; + } else { + $level = 'level-0'; + } + + 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 = get_edit_term_link( $tag->term_id, $taxonomy, $this->screen->post_type ); + + if ( $edit_link ) { + $edit_link = add_query_arg( + 'wp_http_referer', + urlencode( wp_unslash( $uri ) ), + $edit_link + ); + $name = sprintf( + '%s', + esc_url( $edit_link ), + /* translators: %s: taxonomy term name */ + esc_attr( sprintf( __( '“%s” (Edit)' ), $tag->name ) ), + $name + ); + } + + $out = sprintf( + '%s
    ', + $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( + '', + /* 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 ( is_taxonomy_viewable( $tax ) ) { + $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 string[] $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 string[] $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 string[] $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 Nineteen'. + * @type string $slug Theme slug, e.g. 'twentynineteen'. + * @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://2019.wordpress.net/'. + * @type string $screenshot_url Screenshot URL, e.g. 'https://wordpress.org/themes/twentynineteen/'. + * @type float $rating Rating score. + * @type int $num_ratings The number of ratings. + * @type string $homepage Theme homepage, e.g. 'https://wordpress.org/themes/twentynineteen/'. + * @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 ); + + /* translators: %s: theme name */ + $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[] = sprintf( + '%s', + esc_url( wp_nonce_url( $update_url, 'upgrade-theme_' . $theme->slug ) ), + /* translators: %s: theme version */ + esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ), + __( 'Update' ) + ); + break; + case 'newer_installed': + case 'latest_installed': + $actions[] = sprintf( + '%s', + esc_attr__( 'This theme is already installed and is up to date' ), + _x( 'Installed', 'theme' ) + ); + break; + case 'install': + default: + $actions[] = sprintf( + '%s', + esc_url( wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) ), + /* translators: %s: theme name */ + esc_attr( sprintf( __( 'Install %s' ), $name ) ), + __( 'Install Now' ) + ); + break; + } + + $actions[] = sprintf( + '%s', + esc_url( $preview_url ), + /* translators: %s: theme name */ + esc_attr( sprintf( __( 'Preview %s' ), $name ) ), + __( 'Preview' ) + ); + + /** + * Filters the install action links for a theme in the Install Themes list table. + * + * @since 3.4.0 + * + * @param string[] $actions An array of theme action links. 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 ); + + ?> +
    + %s', + esc_url( wp_nonce_url( $update_url, 'upgrade-theme_' . $theme->slug ) ), + /* translators: %s: theme version */ + esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ), + __( 'Update' ) + ); + break; + case 'newer_installed': + case 'latest_installed': + printf( + '%s', + esc_attr__( 'This theme is already installed and is up to date' ), + _x( 'Installed', 'theme' ) + ); + break; + case 'install': + default: + printf( + '%s', + esc_url( wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) ), + __( '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 000000000..d040b7d20 --- /dev/null +++ b/wp-admin/includes/class-wp-themes-list-table.php @@ -0,0 +1,321 @@ + 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( + /* translators: %s: link to documentation on child themes */ + '

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

    ', + __( 'https://developer.wordpress.org/themes/advanced-topics/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 000000000..ddcfd19f1 --- /dev/null +++ b/wp-admin/includes/class-wp-upgrader-skin.php @@ -0,0 +1,209 @@ + '', + '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->has_errors() ) { + 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 000000000..183a01193 --- /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 WordPress 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->has_errors() ) { + $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->has_errors() ) { + 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. + * @param bool $check_signatures Whether to validate file signatures. Default false. + * @return string|WP_Error The full path to the downloaded package file, or a WP_Error object. + */ + public function download_package( $package, $check_signatures = false ) { + + /** + * 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, 300, $check_signatures ); + + if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) { + 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 WordPress 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 WordPress 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 WordPress 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 Path to the plugin file relative to 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'], true ); + + // Allow for signature soft-fail. + // WARNING: This may be removed in the future. + if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) { + + // Don't output the 'no signature could be found' failure message for now. + if ( 'signature_verification_no_signature' != $download->get_error_code() || WP_DEBUG ) { + // Outout the failure error as a normal feedback, and not as an error: + $this->skin->feedback( $download->get_error_message() ); + + // Report this failure back to WordPress.org for debugging purposes. + wp_version_check( + array( + 'signature_failure_code' => $download->get_error_code(), + 'signature_failure_data' => $download->get_error_data(), + ) + ); + } + + // Pretend this error didn't happen. + $download = $download->get_error_data( 'softfail-filename' ); + } + + 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 + * + * @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 + * + * @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 000000000..28e197872 --- /dev/null +++ b/wp-admin/includes/class-wp-users-list-table.php @@ -0,0 +1,602 @@ + '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 string[] $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 string[] 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 string[] $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 000000000..543cc8b2c --- /dev/null +++ b/wp-admin/includes/comment.php @@ -0,0 +1,212 @@ +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; +} diff --git a/wp-admin/includes/continents-cities.php b/wp-admin/includes/continents-cities.php new file mode 100644 index 000000000..7ddfe74cf --- /dev/null +++ b/wp-admin/includes/continents-cities.php @@ -0,0 +1,554 @@ + '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 000000000..ad02909c7 --- /dev/null +++ b/wp-admin/includes/dashboard.php @@ -0,0 +1,1742 @@ +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 string[] $dashboard_widgets An array of dashboard widget IDs. + */ + $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 string[] $dashboard_widgets An array of dashboard widget IDs. + */ + $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 string[] $dashboard_widgets An array of dashboard widget IDs. + */ + $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/includes/meta-boxes.php */ + do_action( 'do_meta_boxes', $screen->id, 'normal', '' ); + + /** This action is documented in wp-admin/includes/meta-boxes.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; + } elseif ( 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'; + } + + $high_priority_widgets = array( 'dashboard_browser_nag', 'dashboard_php_nag' ); + + $priority = 'core'; + if ( in_array( $widget_id, $high_priority_widgets, true ) ) { + $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( _n( '%s Comment in moderation', '%s Comments in moderation', $num_comm->moderated ), $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'] = ''; + $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 string[] $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 = current_time( 'Y-m-d' ); + $tomorrow = gmdate( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) ); + $year = current_time( 'Y' ); + + 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 ) !== $year ) { + /* 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 Events and 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 Events and News' dashboard widget. + * + * @since 2.3.0 + * + * @param string $url The widget's primary feed URL. + */ + 'url' => apply_filters( 'dashboard_primary_feed', __( 'https://wordpress.org/news/feed/' ) ), + + /** + * Filters the primary link title for the 'WordPress Events and 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 Events and 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 Events and 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 Events and 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 Events and 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 events and 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. See `wp_check_browser_version()`. + */ + 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; +} + +/** + * Displays the PHP update nag. + * + * @since 5.1.0 + */ +function wp_dashboard_php_nag() { + $response = wp_check_php_version(); + + if ( ! $response ) { + return; + } + + if ( isset( $response['is_secure'] ) && ! $response['is_secure'] ) { + $msg = __( 'WordPress has detected that your site is running on an insecure version of PHP.' ); + } else { + $msg = __( 'WordPress has detected that your site is running on an outdated version of PHP.' ); + } + + ?> +

    + +

    +

    + +

    + %2$s %3$s', + esc_url( wp_get_update_php_url() ), + __( 'Learn more about updating PHP' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ); + ?> +

    + +
    +

    +

    +
    +
    + +

    + + + + 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' ) ); ?>
    • +
    • ' . __( 'Set up your homepage' ) . '', current_user_can( 'customize' ) ? add_query_arg( 'autofocus[section]', 'static_front_page', admin_url( 'customize.php' ) ) : admin_url( 'options-reading.php' ) ); ?>
    • + +
    • ' . __( '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 ]; + } +} diff --git a/wp-admin/includes/export.php b/wp-admin/includes/export.php new file mode 100644 index 000000000..560037145 --- /dev/null +++ b/wp-admin/includes/export.php @@ -0,0 +1,660 @@ + '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() { + if ( is_multisite() ) { + // Multisite: the base URL. + return network_home_url(); + } else { + // WordPress (single site): the blog URL. + 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 int[] $post_ids Optional. Array of post IDs to filter the query by. + */ + 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 ); + + /** This filter is documented in wp-includes/feed.php */ + $title = apply_filters( 'the_title_rss', $post->post_title ); + + /** + * Filters the post content used for WXR exports. + * + * @since 2.5.0 + * + * @param string $post_content Content of the current post. + */ + $content = wxr_cdata( apply_filters( 'the_content_export', $post->post_content ) ); + + /** + * Filters the post excerpt used for WXR exports. + * + * @since 2.6.0 + * + * @param string $post_excerpt Excerpt for the current post. + */ + $excerpt = wxr_cdata( apply_filters( 'the_excerpt_export', $post->post_excerpt ) ); + + $is_sticky = is_sticky( $post->ID ) ? 1 : 0; + ?> + + <?php echo $title; ?> + + + + + + + + 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' ), + 'privacy-policy.php' => __( 'Privacy Policy Page' ), + // 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 string[] $exclusions Optional. List of folders and files to skip. + * @return bool|string[] 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 Path to the plugin file relative to the plugins directory. + * @return string[] Array of editable 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 Added the `$plugin` parameter. + * + * @param string[] $editable_extensions An array of editable plugin file extensions. + * @param string $plugin Path to the plugin file relative to the plugins directory. + */ + $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 object. + * @return string[] Array of editable 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 string[] $default_types List of allowed file types. + * @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.' ) ); + } + + if ( ! wp_verify_nonce( $args['nonce'], 'edit-theme_' . $stylesheet . '_' . $file ) ) { + 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.' ) ); + } + + $real_file = $theme->get_stylesheet_directory() . '/' . $file; + + $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 = uniqid(); + } + + // 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 string[] $allowed_files Optional. Array of allowed files to edit. `$file` must match an entry exactly. + * @return string|void Returns the file name on success, dies on failure. + */ +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 string[] $file Reference to a single element of `$_FILES`. Call the function once for each uploaded file. + * @param string[]|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 string[] 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 string[] $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'] ] ) ); + } + + // 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_readable( $file['tmp_name'] ); + if ( ! $test_uploaded_file ) { + return call_user_func_array( $upload_error_handler, array( &$file, __( 'Specified file failed upload test.' ) ) ); + } + + $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 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 API. + * + * Please note that the calling function must unlink() the file. + * + * @since 2.5.0 + * @since 5.2.0 Signature Verification with SoftFail was added. + * + * @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. + * @param bool $signature_verification Whether to perform Signature Verification. Default false. + * @return string|WP_Error Filename on success, WP_Error on failure. + */ +function download_url( $url, $timeout = 300, $signature_verification = false ) { + //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; + } + + $response_code = wp_remote_retrieve_response_code( $response ); + + if ( 200 != $response_code ) { + $data = array( + 'code' => $response_code, + ); + + // Retrieve a sample of the response body for debugging purposes. + $tmpf = fopen( $tmpfname, 'rb' ); + if ( $tmpf ) { + /** + * Filters the maximum error response body size in `download_url()`. + * + * @since 5.1.0 + * + * @see download_url() + * + * @param int $size The maximum error response body size. Default 1 KB. + */ + $response_size = apply_filters( 'download_url_error_max_body_size', KB_IN_BYTES ); + $data['body'] = fread( $tmpf, $response_size ); + fclose( $tmpf ); + } + + unlink( $tmpfname ); + return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ), $data ); + } + + $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; + } + } + + // If the caller expects signature verification to occur, check to see if this URL supports it. + if ( $signature_verification ) { + /** + * Filters the list of hosts which should have Signature Verification attempteds on. + * + * @since 5.2.0 + * + * @param array List of hostnames. + */ + $signed_hostnames = apply_filters( 'wp_signature_hosts', array( 'wordpress.org', 'downloads.wordpress.org', 's.w.org' ) ); + $signature_verification = in_array( parse_url( $url, PHP_URL_HOST ), $signed_hostnames, true ); + } + + // Perform signature valiation if supported. + if ( $signature_verification ) { + $signature = wp_remote_retrieve_header( $response, 'x-content-signature' ); + if ( ! $signature ) { + // Retrieve signatures from a file if the header wasn't included. + // WordPress.org stores signatures at $package_url.sig + + $signature_url = false; + $url_path = parse_url( $url, PHP_URL_PATH ); + if ( substr( $url_path, -4 ) == '.zip' || substr( $url_path, -7 ) == '.tar.gz' ) { + $signature_url = str_replace( $url_path, $url_path . '.sig', $url ); + } + + /** + * Filter the URL where the signature for a file is located. + * + * @since 5.2.0 + * + * @param false|string $signature_url The URL where signatures can be found for a file, or false if none are known. + * @param string $url The URL being verified. + */ + $signature_url = apply_filters( 'wp_signature_url', $signature_url, $url ); + + if ( $signature_url ) { + $signature_request = wp_safe_remote_get( + $signature_url, + array( + 'limit_response_size' => 10 * 1024, // 10KB should be large enough for quite a few signatures. + ) + ); + + if ( ! is_wp_error( $signature_request ) && 200 === wp_remote_retrieve_response_code( $signature_request ) ) { + $signature = explode( "\n", wp_remote_retrieve_body( $signature_request ) ); + } + } + } + + // Perform the checks. + $signature_verification = verify_file_signature( $tmpfname, $signature, basename( parse_url( $url, PHP_URL_PATH ) ) ); + } + + if ( is_wp_error( $signature_verification ) ) { + if ( + /** + * Filters whether Signature Verification failures should be allowed to soft fail. + * + * WARNING: This may be removed from a future release. + * + * @since 5.2.0 + * + * @param bool $signature_softfail If a softfail is allowed. + * @param string $url The url being accessed. + */ + apply_filters( 'wp_signature_softfail', true, $url ) + ) { + $signature_verification->add_data( $tmpfname, 'softfail-filename' ); + } else { + // Hard-fail. + unlink( $tmpfname ); + } + + return $signature_verification; + } + + 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|WP_Error True on success, false when the MD5 format is unknown/unexpected, + * WP_Error on failure. + */ +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 ) ) ); +} + +/** + * Verifies the contents of a file against its ED25519 signature. + * + * @since 5.2.0 + * + * @param string $filename The file to validate. + * @param string|array $signatures A Signature provided for the file. + * @param string $filename_for_errors A friendly filename for errors. Optional. + * + * @return bool|WP_Error true on success, false if verificaiton not attempted, or WP_Error describing an error condition. + */ +function verify_file_signature( $filename, $signatures, $filename_for_errors = false ) { + if ( ! $filename_for_errors ) { + $filename_for_errors = wp_basename( $filename ); + } + + // Check we can process signatures. + if ( ! function_exists( 'sodium_crypto_sign_verify_detached' ) || ! in_array( 'sha384', array_map( 'strtolower', hash_algos() ) ) ) { + return new WP_Error( + 'signature_verification_unsupported', + sprintf( + /* translators: %s: The filename of the package. */ + __( 'The authenticity of %s could not be verified as signature verification is unavailable on this system.' ), + '' . esc_html( $filename_for_errors ) . '' + ), + ( ! function_exists( 'sodium_crypto_sign_verify_detached' ) ? 'sodium_crypto_sign_verify_detached' : 'sha384' ) + ); + } + + // Check for a edge-case affecting PHP Maths abilities + if ( + ! extension_loaded( 'sodium' ) && + in_array( PHP_VERSION_ID, [ 70200, 70201, 70202 ], true ) && + extension_loaded( 'opcache' ) + ) { + // Sodium_Compat isn't compatible with PHP 7.2.0~7.2.2 due to a bug in the PHP Opcache extension, bail early as it'll fail. + // https://bugs.php.net/bug.php?id=75938 + + return new WP_Error( + 'signature_verification_unsupported', + sprintf( + /* translators: %s: The filename of the package. */ + __( 'The authenticity of %s could not be verified as signature verification is unavailable on this system.' ), + '' . esc_html( $filename_for_errors ) . '' + ), + array( + 'php' => phpversion(), + 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), + ) + ); + + } + + // Verify runtime speed of Sodium_Compat is acceptable. + if ( ! extension_loaded( 'sodium' ) && ! ParagonIE_Sodium_Compat::polyfill_is_fast() ) { + $sodium_compat_is_fast = false; + + // Allow for an old version of Sodium_Compat being loaded before the bundled WordPress one. + if ( method_exists( 'ParagonIE_Sodium_Compat', 'runtime_speed_test' ) ) { + // Run `ParagonIE_Sodium_Compat::runtime_speed_test()` in optimized integer mode, as that's what WordPress utilises during signing verifications. + $old_fastMult = ParagonIE_Sodium_Compat::$fastMult; + ParagonIE_Sodium_Compat::$fastMult = true; + $sodium_compat_is_fast = ParagonIE_Sodium_Compat::runtime_speed_test( 100, 10 ); + ParagonIE_Sodium_Compat::$fastMult = $old_fastMult; + } + + // This cannot be performed in a reasonable amount of time + // https://github.com/paragonie/sodium_compat#help-sodium_compat-is-slow-how-can-i-make-it-fast + if ( ! $sodium_compat_is_fast ) { + return new WP_Error( + 'signature_verification_unsupported', + sprintf( + /* translators: %s: The filename of the package. */ + __( 'The authenticity of %s could not be verified as signature verification is unavailable on this system.' ), + '' . esc_html( $filename_for_errors ) . '' + ), + array( + 'php' => phpversion(), + 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), + 'polyfill_is_fast' => false, + 'max_execution_time' => ini_get( 'max_execution_time' ), + ) + ); + } + } + + if ( ! $signatures ) { + return new WP_Error( + 'signature_verification_no_signature', + sprintf( + /* translators: %s: The filename of the package. */ + __( 'The authenticity of %s could not be verified as no signature was found.' ), + '' . esc_html( $filename_for_errors ) . '' + ), + array( + 'filename' => $filename_for_errors, + ) + ); + } + + $trusted_keys = wp_trusted_keys(); + $file_hash = hash_file( 'sha384', $filename, true ); + + mbstring_binary_safe_encoding(); + + $skipped_key = $skipped_signature = 0; + + foreach ( (array) $signatures as $signature ) { + $signature_raw = base64_decode( $signature ); + + // Ensure only valid-length signatures are considered. + if ( SODIUM_CRYPTO_SIGN_BYTES !== strlen( $signature_raw ) ) { + $skipped_signature++; + continue; + } + + foreach ( (array) $trusted_keys as $key ) { + $key_raw = base64_decode( $key ); + + // Only pass valid public keys through. + if ( SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES !== strlen( $key_raw ) ) { + $skipped_key++; + continue; + } + + if ( sodium_crypto_sign_verify_detached( $signature_raw, $file_hash, $key_raw ) ) { + reset_mbstring_encoding(); + return true; + } + } + } + + reset_mbstring_encoding(); + + return new WP_Error( + 'signature_verification_failed', + sprintf( + /* translators: %s: The filename of the package. */ + __( 'The authenticity of %s could not be verified.' ), + '' . esc_html( $filename_for_errors ) . '' + ), + // Error data helpful for debugging: + array( + 'filename' => $filename_for_errors, + 'keys' => $trusted_keys, + 'signatures' => $signatures, + 'hash' => bin2hex( $file_hash ), + 'skipped_key' => $skipped_key, + 'skipped_sig' => $skipped_signature, + 'php' => phpversion(), + 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), + ) + ); +} + +/** + * Retrieve the list of signing keys trusted by WordPress. + * + * @since 5.2.0 + * + * @return array List of base64-encoded Signing keys. + */ +function wp_trusted_keys() { + $trusted_keys = array(); + + if ( time() < 1617235200 ) { + // WordPress.org Key #1 - This key is only valid before April 1st, 2021. + $trusted_keys[] = 'fRPyrxb/MvVLbdsYi+OOEv4xc+Eqpsj+kkAS6gNOkI0='; + } + + // TODO: Add key #2 with longer expiration. + + /** + * Filter the valid Signing keys used to verify the contents of files. + * + * @since 5.2.0 + * + * @param array $trusted_keys The trusted keys that may sign packages. + */ + return apply_filters( 'wp_trusted_keys', $trusted_keys ); +} + +/** + * 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 WordPress 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 true|WP_Error True on success, WP_Error on failure. + */ +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 directories 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, therefore we don't need to 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 ); +} + +/** + * Attempts to unzip an archive using the ZipArchive class. + * + * This function should not be called directly, use `unzip_file()` instead. + * + * 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 WordPress 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 true|WP_Error True on success, WP_Error on failure. + */ +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; +} + +/** + * Attempts to unzip an archive using the PclZip library. + * + * This function should not be called directly, use `unzip_file()` instead. + * + * 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 WordPress 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 true|WP_Error True on success, WP_Error on failure. + */ +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 WordPress 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 true|WP_Error True on success, WP_Error on failure. + */ +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 WordPress 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 bool|null True on success, false on failure, null if the filesystem method class file does not exist. + */ +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->has_errors() ) { + 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-' . str_replace( '.', '-', uniqid( '', true ) ); + $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 True on success, false on failure. + */ +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 ) : + ?> + + +
    + +
    > + + + +

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

    + + + +

    +
    +
    + +
    +
    + +
    + ' . 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, 'personal_data_export' ) . '
    '; + } + + $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(); + + if ( ! wp_mkdir_p( $exports_dir ) ) { + wp_send_json_error( __( 'Unable to create export folder.' ) ); + } + + // 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, '' ); + 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 email 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( + /* translators: Header for the About section in a personal data export. */ + 'group_label' => _x( 'About', 'personal data group label' ), + '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 int $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_request', __( 'Invalid request ID when sending personal data export email.' ) ); + } + + // Localize message content for user; fallback to site default for visitors. + if ( ! empty( $request->user_id ) ) { + $locale = get_user_locale( $request->user_id ); + } else { + $locale = get_locale(); + } + + $switched_locale = switch_to_locale( $locale ); + + /** This filter is documented in wp-includes/functions.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, 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### + +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. + * ###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 = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); + $site_url = 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###', $site_name, $content ); + $content = str_replace( '###SITEURL###', esc_url_raw( $site_url ), $content ); + + $mail_success = wp_mail( + $email_address, + sprintf( + /* translators: Personal data export notification email subject. %s: Site title */ + __( '[%s] Personal Data Export' ), + $site_name + ), + $content + ); + + if ( $switched_locale ) { + restore_previous_locale(); + } + + if ( ! $mail_success ) { + return new WP_Error( 'privacy_email_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. + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $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. + * + * @since 4.9.6 + * + * @param int $request_id The export request ID. + */ + 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() ); + } + + // Update the request to completed state when the export email is sent. + _wp_privacy_completed_request( $request_id ); + } 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; + } + } + + return $response; +} diff --git a/wp-admin/includes/image-edit.php b/wp-admin/includes/image-edit.php new file mode 100644 index 000000000..e1ae86b60 --- /dev/null +++ b/wp-admin/includes/image-edit.php @@ -0,0 +1,967 @@ + 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'] != wp_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. + * + * @since 2.9.0 + * + * @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'] + * + * @since 2.9.0 + * + * @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'] + * + * @since 2.9.0 + * + * @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 000000000..d0a2954e5 --- /dev/null +++ b/wp-admin/includes/image.php @@ -0,0 +1,731 @@ +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( wp_basename( $src_file ), 'cropped-' . wp_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 ), wp_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. + * @since 5.1.0 Added the `$attachment_id` argument. + * + * @param array $sizes An associative array of image sizes. + * @param array $metadata An associative array of image metadata: width, height, file. + * @param int $attachment_id Current attachment ID. + */ + $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes, $metadata, $attachment_id ); + + 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( '.', '-', wp_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 ); + } + } + } elseif ( 'application/pdf' === $mime_type ) { + // Try to create image thumbnails for PDFs. + + $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( , , $image_type ) = @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'] ); + } + } + } + + $exif = array(); + + /** + * Filters the image types to check for exif data. + * + * @since 2.5.0 + * + * @param array $image_types Image types to check for exif data. + */ + $exif_image_types = apply_filters( 'wp_read_image_metadata_types', array( IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM ) ); + + if ( is_callable( 'exif_read_data' ) && in_array( $image_type, $exif_image_types ) ) { + $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. + * @since 5.0.0 The `$exif` parameter was added. + * + * @param array $meta Image meta data. + * @param string $file Path to image file. + * @param int $image_type Type of image, one of the `IMAGETYPE_XXX` constants. + * @param array $iptc IPTC data. + * @param array $exif EXIF data. + */ + return apply_filters( 'wp_read_image_metadata', $meta, $file, $image_type, $iptc, $exif ); + +} + +/** + * 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 ); + + // IMAGETYPE_ICO is only defined in PHP 5.3+. + if ( defined( 'IMAGETYPE_ICO' ) ) { + $displayable_image_types[] = IMAGETYPE_ICO; + } + + $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( wp_basename( $dst_file ), 'copy-' . wp_basename( $dst_file ), $dst_file ); + $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), wp_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 000000000..7b6ff8864 --- /dev/null +++ b/wp-admin/includes/import.php @@ -0,0 +1,231 @@ + __( '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' => wp_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 ) { + // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText + $importer['description'] = translate( $importer['description'] ); + if ( $importer['name'] != 'WordPress' ) { + // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText + $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 000000000..168aebbd4 --- /dev/null +++ b/wp-admin/includes/list-table.php @@ -0,0 +1,86 @@ + '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 000000000..5c54b2140 --- /dev/null +++ b/wp-admin/includes/media.php @@ -0,0 +1,3524 @@ + __( '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 The image HTML markup to send. + * @param integer $id Image attachment ID. + * @param string $caption Image caption. + * @param string $title Image title attribute (not used). + * @param string $align Image CSS alignment property. + * @param string $url Image source URL (not used). + * @param string $size Image size (`thumbnail`, `medium`, `large`, `full`, or added with `add_image_size()`) (not used). + * @param string $alt Image `alt` attribute (not used). + * @return string The image HTML markup with caption shortcode. + */ +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. %d: 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. %s: Audio track number */ + $content .= ' ' . sprintf( __( 'Track %s.' ), number_format_i18n( $track_number[0] ) ); + } + } + + if ( ! empty( $meta['genre'] ) ) { + /* translators: Audio file genre information. %s: 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( '/\.[^.]+$/', '', wp_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, true ); + 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( wp_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'] = wp_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' : ''; + $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' : ''; + $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 string[] $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( + /* translators: %s: allowed space allocation */ + __( 'Sorry, you have used your space allocation of %s. Please delete some files to upload more files.' ), + size_format( get_space_allowed() * MB_IN_BYTES ) + ) . '

    '; +} + +/** + * 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 = " "; + } + + $open_style = $not_open_style = ''; + if ( $open ) { + $open_style = ' style="display:none"'; + } else { + $not_open_style = ' style="display:none"'; + } + ?> + +
    + + 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 ) ) : ?> +

    +
    + +

    +

    + Describe the purpose of the image%3$s. Leave empty if the image is purely decorative.' ), + esc_url( 'https://www.w3.org/WAI/tutorials/images/decision-tree' ), + 'target="_blank" rel="noopener noreferrer"', + sprintf( + ' %s', + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ) + ); + ?> +

    + + +

    +
    + +

    + + '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 an 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']; + } + + if ( empty( $metadata['created_timestamp'] ) ) { + $created_timestamp = wp_get_media_creation_timestamp( $data ); + + if ( false !== $created_timestamp ) { + $metadata['created_timestamp'] = $created_timestamp; + } + } + + 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 000000000..cea9c758f --- /dev/null +++ b/wp-admin/includes/menu.php @@ -0,0 +1,351 @@ + $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 000000000..f1b5307d1 --- /dev/null +++ b/wp-admin/includes/meta-boxes.php @@ -0,0 +1,1555 @@ +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 ) { + $private_style = ''; + if ( 'private' == $post->post_status ) { + $private_style = '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 tab)' ) + ); + ?> + + +
    + + +
    +
    + +
    + +
    + + 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 ) { + $private_style = ''; + if ( 'private' == $post->post_status ) { + $private_style = '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. %s: Date on which the post is currently scheduled to be published */ + $stamp = __( 'Scheduled for: %s' ); + } elseif ( 'publish' == $post->post_status || 'private' == $post->post_status ) { // already published + /* translators: Post date information. %s: Date on which the post was published */ + $stamp = __( 'Published on: %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. %s: Date on which the post is to be published */ + $stamp = __( 'Schedule for: %s' ); + } else { // draft, 1 or more saves, date specified + /* translators: Post date information. %s: Date on which the post is to be published */ + $stamp = __( 'Publish on: %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 "" . __( 'Move to Trash' ) . ''; + } else { + $delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + echo "" . __( 'Delete Permanently' ) . ''; + } + } + ?> +
    + +
    + + + +
    +
    +
    + +
    + + post_type, 'post-formats' ) ) : + $post_formats = get_theme_support( 'post-formats' ); + + if ( is_array( $post_formats[0] ) ) : + $post_format = get_post_format( $post->ID ); + if ( ! $post_format ) { + $post_format = '0'; + } + // Add in the current one if it isn't there yet, in case the current theme doesn't support it + if ( $post_format && ! in_array( $post_format, $post_formats[0] ) ) { + $post_formats[0][] = $post_format; + } + ?> +
    +
    + + /> + +
    /> + +
    +
    + 'post_tag' ); + if ( ! isset( $box['args'] ) || ! is_array( $box['args'] ) ) { + $args = array(); + } else { + $args = $box['args']; + } + $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 ) : + $value = ''; + if ( ! empty( $meta[ $key ] ) ) { + $value = $meta[ $key ]; + } + ?> +

      +
      + +

      + post_type; + $post_type_object = get_post_type_object( $post_type ); + + $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' ); + } + } + + $publish_callback_args = array( '__back_compat_meta_box' => true ); + 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 ), + '__back_compat_meta_box' => true, + ); + add_meta_box( 'revisionsdiv', __( 'Revisions' ), 'post_revisions_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); + } + } + + 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', array( '__back_compat_meta_box' => true ) ); + 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', array( '__back_compat_meta_box' => true ) ); + } + } 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', array( '__back_compat_meta_box' => true ) ); + } + + // 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, + '__back_compat_meta_box' => true, + ) + ); + } + + 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', array( '__back_compat_meta_box' => true ) ); + } + + 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', array( '__back_compat_meta_box' => true ) ); + } + + if ( post_type_supports( $post_type, 'excerpt' ) ) { + add_meta_box( 'postexcerpt', __( 'Excerpt' ), 'post_excerpt_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); + } + + if ( post_type_supports( $post_type, 'trackbacks' ) ) { + add_meta_box( 'trackbacksdiv', __( 'Send Trackbacks' ), 'post_trackback_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); + } + + if ( post_type_supports( $post_type, 'custom-fields' ) ) { + add_meta_box( + 'postcustom', + __( 'Custom Fields' ), + 'post_custom_meta_box', + null, + 'normal', + 'core', + array( + '__back_compat_meta_box' => ! (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ), + '__block_editor_compatible_meta_box' => true, + ) + ); + } + + /** + * 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', array( '__back_compat_meta_box' => true ) ); + } + + $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', array( '__back_compat_meta_box' => true ) ); + } + } + + 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', array( '__back_compat_meta_box' => true ) ); + } + + 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', array( '__back_compat_meta_box' => true ) ); + } + + /** + * 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/includes/meta-boxes.php */ + do_action( 'do_meta_boxes', $post_type, 'advanced', $post ); + /** This action is documented in wp-admin/includes/meta-boxes.php */ + do_action( 'do_meta_boxes', $post_type, 'side', $post ); +} diff --git a/wp-admin/includes/misc.php b/wp-admin/includes/misc.php new file mode 100644 index 000000000..0dcebdfed --- /dev/null +++ b/wp-admin/includes/misc.php @@ -0,0 +1,2096 @@ +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|null True on write success, false on failure. Null in multisite. + */ +function iis7_save_url_rewrite_rules() { + if ( is_multisite() ) { + return; + } + + global $wp_rewrite; + + // Ensure get_home_path() is declared. + require_once( ABSPATH . 'wp-admin/includes/file.php' ); + + $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 + * + * @global string $relative_file Name of the file being edited relative to the + * theme directory. + * @global string $stylesheet The stylesheet name of the theme being edited. + * + * @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 string[] $ignore_functions Array of names of 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': + case 'export_personal_data_requests_per_page': + case 'remove_personal_data_requests_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 $keep Whether to save or skip saving the screen option value. Default false. + * @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' => '#a0a5aa', + '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 ), + ), + ); + } + + return $response; +} + +/** + * Add the latest Heartbeat and REST-API nonce to the Heartbeat response. + * + * @since 5.0.0 + * + * @param array $response The Heartbeat response. + * @return array The Heartbeat response. + */ +function wp_refresh_heartbeat_nonces( $response ) { + // Refresh the Rest API nonce. + $response['rest_nonce'] = wp_create_nonce( 'wp_rest' ); + + // Refresh the Heartbeat nonce. + $response['heartbeat_nonce'] = 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 ); + + /* translators: New admin email address notification email subject. %s: Site title */ + wp_mail( $value, sprintf( __( '[%s] New Admin Email Address' ), wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ), $content ); + + if ( $switched_locale ) { + restore_previous_locale(); + } +} + +/** + * Appends '(Draft)' to draft page titles in the privacy page dropdown + * so that unpublished content is obvious. + * + * @since 4.9.8 + * @access private + * + * @param string $title Page title. + * @param WP_Post $page Page data object. + * + * @return string Page title. + */ +function _wp_privacy_settings_filter_draft_page_titles( $title, $page ) { + if ( 'draft' === $page->post_status && 'privacy' === get_current_screen()->id ) { + /* translators: %s: Page Title */ + $title = sprintf( __( '%s (Draft)' ), $title ); + } + + return $title; +} + +/** + * 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 + * @since 5.0.0 The $post parameter is now optional. + * + * @param WP_Post|null $post The currently edited post. Default null. + */ + public static function notice( $post = null ) { + if ( is_null( $post ) ) { + global $post; + } else { + $post = get_post( $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; + } + + $message = __( 'Need help putting together your new Privacy Policy page? Check out our guide for recommendations on what content to include, along with policies suggested by your plugins and theme.' ); + $url = esc_url( admin_url( 'tools.php?wp-privacy-policy-guide=1' ) ); + $label = __( 'View Privacy Policy Guide.' ); + + if ( get_current_screen()->is_block_editor() ) { + wp_enqueue_script( 'wp-notices' ); + $action = array( + 'url' => $url, + 'label' => $label, + ); + wp_add_inline_script( + 'wp-notices', + sprintf( + 'wp.data.dispatch( "core/notices" ).createWarningNotice( "%s", { actions: [ %s ], isDismissible: false } )', + $message, + wp_json_encode( $action ) + ), + 'after' + ); + } else { + ?> +
      +

      + %s %s', + $url, + $label, + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ); + ?> +

      +
      + ' . __( 'Introduction' ) . '' ); + $date_format = __( 'F j, Y' ); + $copy = __( 'Copy this section to clipboard' ); + $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 = ''; + $strings = array(); + + // Start of the suggested privacy policy text. + if ( $description ) { + $strings[] = '
      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text, %s Site URL. */ + $strings[] = '

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

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

      ' . __( 'Comments' ) . '

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text. */ + $strings[] = '

      ' . $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.' ) . '

      '; + /* translators: default privacy policy text. */ + $strings[] = '

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

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

      ' . __( 'Media' ) . '

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text. */ + $strings[] = '

      ' . $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.' ) . '

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

      ' . __( 'Contact forms' ) . '

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

      ' . __( 'Cookies' ) . '

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text. */ + $strings[] = '

      ' . $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.' ) . '

      '; + /* translators: default privacy policy text. */ + $strings[] = '

      ' . __( 'If you visit our login page, 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.' ) . '

      '; + /* translators: default privacy policy text. */ + $strings[] = '

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

      '; + /* translators: default privacy policy text. */ + $strings[] = '

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

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + /* translators: default privacy policy text. */ + $strings[] = '

      ' . $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.' ) . '

      '; + /* translators: default privacy policy text. */ + $strings[] = '

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

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

      ' . __( 'Analytics' ) . '

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text. */ + $strings[] = '

      ' . $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.' ) . '

      '; + /* translators: default privacy policy text. */ + $strings[] = '

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

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text. */ + $strings[] = '

      ' . $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.' ) . '

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy text. */ + $strings[] = '

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

      '; + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

      ' . __( 'Additional information' ) . '

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + } + + /* translators: default privacy policy heading. */ + $strings[] = '

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

      '; + + if ( $description ) { + /* translators: privacy policy tutorial. */ + $strings[] = '

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

      '; + $strings[] = '
      '; + } + + if ( $blocks ) { + foreach ( $strings as $key => $string ) { + if ( 0 === strpos( $string, '

      ' ) ) { + $strings[ $key ] = '' . $string . ''; + } + + if ( 0 === strpos( $string, '

      ' ) ) { + $strings[ $key ] = '' . $string . ''; + } + + if ( 0 === strpos( $string, '

      ' ) ) { + $strings[ $key ] = '' . $string . ''; + } + } + } + + $content = implode( '', $strings ); + // End of the suggested privacy policy text. + + /** + * Filters the default content suggested for inclusion in a privacy policy. + * + * @since 4.9.6 + * @since 5.0.0 Added the `$strings`, `$description`, and `$blocks` parameters. + * + * @param string $content The default policy content. + * @param array $strings An array of privacy policy content strings. + * @param bool $description Whether policy descriptions should be included. + * @param bool $blocks Whether the content should be formatted for the block editor. + */ + return apply_filters( 'wp_get_default_privacy_policy_content', $content, $strings, $description, $blocks ); + } + + /** + * 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, false ); + wp_add_privacy_policy_content( __( 'WordPress' ), $content ); + } +} + +/** + * Checks if the user needs to update PHP. + * + * @since 5.1.0 + * @since 5.1.1 Added the {@see 'wp_is_php_version_acceptable'} filter. + * + * @return array|false $response Array of PHP version data. False on failure. + */ +function wp_check_php_version() { + $version = phpversion(); + $key = md5( $version ); + + $response = get_site_transient( 'php_check_' . $key ); + if ( false === $response ) { + $url = 'http://api.wordpress.org/core/serve-happy/1.0/'; + if ( wp_http_supports( array( 'ssl' ) ) ) { + $url = set_url_scheme( $url, 'https' ); + } + + $url = add_query_arg( 'php_version', $version, $url ); + + $response = wp_remote_get( $url ); + + if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { + return false; + } + + /** + * Response should be an array with: + * 'recommended_version' - string - The PHP version recommended by WordPress. + * 'is_supported' - boolean - Whether the PHP version is actively supported. + * 'is_secure' - boolean - Whether the PHP version receives security updates. + * 'is_acceptable' - boolean - Whether the PHP version is still acceptable for WordPress. + */ + $response = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( ! is_array( $response ) ) { + return false; + } + + set_site_transient( 'php_check_' . $key, $response, WEEK_IN_SECONDS ); + } + + if ( isset( $response['is_acceptable'] ) && $response['is_acceptable'] ) { + /** + * Filters whether the active PHP version is considered acceptable by WordPress. + * + * Returning false will trigger a PHP version warning to show up in the admin dashboard to administrators. + * + * This filter is only run if the wordpress.org Serve Happy API considers the PHP version acceptable, ensuring + * that this filter can only make this check stricter, but not loosen it. + * + * @since 5.1.1 + * + * @param bool $is_acceptable Whether the PHP version is considered acceptable. Default true. + * @param string $version PHP version checked. + */ + $response['is_acceptable'] = (bool) apply_filters( 'wp_is_php_version_acceptable', true, $version ); + } + + return $response; +} diff --git a/wp-admin/includes/ms-admin-filters.php b/wp-admin/includes/ms-admin-filters.php new file mode 100644 index 000000000..dd4cf9e38 --- /dev/null +++ b/wp-admin/includes/ms-admin-filters.php @@ -0,0 +1,44 @@ + ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) { + /* translators: %s: maximum allowed file size in kilobytes */ + $file['error'] = sprintf( __( 'This file is too big. Files must be less than %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 + * @since 5.1.0 Use wp_delete_site() internally to delete the site row from the database. + * + * @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 ); + + $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 ) { + wp_delete_site( $blog_id ); + } else { + /** This action is documented in wp-includes/ms-blogs.php */ + do_action_deprecated( 'delete_blog', array( $blog_id, false ), '5.1.0' ); + + $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 ); + + /** This action is documented in wp-includes/ms-blogs.php */ + do_action_deprecated( 'deleted_blog', array( $blog_id, false ), '5.1.0' ); + } + + 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 ) { + printf( + /* translators: %s: allowed space allocation */ + __( 'Sorry, you have used your space allocation of %s. Please delete some files to upload more files.' ), + size_format( $space_allowed * MB_IN_BYTES ) + ); + } + 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 string[] $lang_codes Array of key/value pairs 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 ); +} + +/** + * Synchronizes category and post tag slugs when global terms are enabled. + * + * @since 3.0.0 + * + * @param WP_Term|array $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 WP_Term|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 string[] $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 string[] $output Array of HTML output for the dropdown. + * @param string[] $lang_files Array of 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() { + ?> + + + + + + + + + + +

      + + +

      + +

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

      + +

      + +
      + + + 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' ); + + // Aria-current attribute. + $aria_current = ''; + + // 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'; + $aria_current = ' aria-current="page"'; + } + + // 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 000000000..0539e7f25 --- /dev/null +++ b/wp-admin/includes/nav-menu.php @@ -0,0 +1,1250 @@ + $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( + array( + 'taxonomy' => $matches[2], + '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', + ); + + $most_recent_url = $view_all_url = $search_url = ''; + if ( $nav_menu_selected_id ) { + $most_recent_url = esc_url( add_query_arg( $post_type_name . '-tab', 'most-recent', remove_query_arg( $removed_args ) ) ); + $view_all_url = esc_url( add_query_arg( $post_type_name . '-tab', 'all', remove_query_arg( $removed_args ) ) ); + $search_url = esc_url( add_query_arg( $post_type_name . '-tab', 'search', remove_query_arg( $removed_args ) ) ); + } + ?> +
      + + +
      +
        + '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 WP_Post[] $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 object[] $posts The posts for the current post type. Mostly `WP_Post` objects, but + * can also contain "fake" post objects to represent other menu items. + * @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', + ); + + $most_used_url = $view_all_url = $search_url = ''; + if ( $nav_menu_selected_id ) { + $most_used_url = esc_url( add_query_arg( $taxonomy_name . '-tab', 'most-used', remove_query_arg( $removed_args ) ) ); + $view_all_url = esc_url( add_query_arg( $taxonomy_name . '-tab', 'all', remove_query_arg( $removed_args ) ) ); + $search_url = esc_url( add_query_arg( $taxonomy_name . '-tab', 'search', remove_query_arg( $removed_args ) ) ); + } + ?> +
      + + +
      +
        + '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 000000000..055d193c8 --- /dev/null +++ b/wp-admin/includes/network.php @@ -0,0 +1,665 @@ +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() ) : + ?> +

      +

      +

      +

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

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

      + + + + + + + + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + ' . $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: %s: 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 publishing.' ) . ' */' + ); + ?> +

        + + '', + '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: %s: 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 000000000..4fa007e39 --- /dev/null +++ b/wp-admin/includes/plugin-install.php @@ -0,0 +1,854 @@ +per_page ) ) { + $args->per_page = 24; + } + } + + if ( ! isset( $args->locale ) ) { + $args->locale = get_user_locale(); + } + + if ( ! isset( $args->wp_version ) ) { + $args->wp_version = substr( $wp_version, 0, 3 ); // X.y + } + + /** + * 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 ) { + + $url = 'http://api.wordpress.org/plugins/info/1.2/'; + $url = add_query_arg( + array( + 'action' => $action, + 'request' => $args, + ), + $url + ); + + $http_url = $url; + 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( '/' ), + ); + $request = wp_remote_get( $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_get( $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 = json_decode( wp_remote_retrieve_body( $request ), true ); + if ( is_array( $res ) ) { + // Object casting is required in order to match the info/1.0 format. + $res = (object) $res; + } elseif ( null === $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 ) + ); + } + + if ( isset( $res->error ) ) { + $res = new WP_Error( 'plugins_api_failed', $res->error ); + } + } + } 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'] ), + ) + ); + + 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 ) { + $active_installs_millions = floor( $api->active_installs / 1000000 ); + printf( + _nx( '%s+ Million', '%s+ Million', $active_installs_millions, 'Active plugin installations' ), + number_format_i18n( $active_installs_millions ) + ); + } 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 tab.', 'Reviews with %1$d stars: %2$s. Opens in a new tab.', $key ), + $key, + number_format_i18n( $ratecount ) + ) + ); + ?> +
      + + + + + + + +
      + contributors ) ) { + ?> +

      +
        + contributors as $contrib_username => $contrib_details ) { + $contrib_name = $contrib_details['display_name']; + if ( ! $contrib_name ) { + $contrib_name = $contrib_username; + } + $contrib_name = esc_html( $contrib_name ); + + $contrib_profile = esc_url( $contrib_details['profile'] ); + $contrib_avatar = esc_url( add_query_arg( 's', '36', $contrib_details['avatar'] ) ); + + echo "
      • {$contrib_name}
      • "; + } + ?> +
      + donate_link ) ) { ?> + + + +
      +
      + requires_php ) ? $api->requires_php : null; + $requires_wp = isset( $api->requires ) ? $api->requires : null; + + $compatible_php = is_php_version_compatible( $requires_php ); + $compatible_wp = is_wp_version_compatible( $requires_wp ); + $tested_wp = ( empty( $api->tested ) || version_compare( get_bloginfo( 'version' ), $api->tested, '<=' ) ); + + if ( ! $compatible_php ) { + echo '

      '; + _e( 'Error: This plugin requires a newer version of PHP.' ); + if ( current_user_can( 'update_php' ) ) { + printf( + /* translators: %s: "Update PHP" page URL */ + ' ' . __( 'Click here to learn more about updating PHP.' ), + esc_url( wp_get_update_php_url() ) + ); + + wp_update_php_annotation( '

      ', '' ); + } else { + echo '

      '; + } + echo '
      '; + } + + if ( ! $tested_wp ) { + echo '

      '; + _e( 'Warning: This plugin has not been tested with your current version of WordPress.' ); + echo '

      '; + } elseif ( ! $compatible_wp ) { + echo '

      '; + _e( 'Error: This plugin requires a newer version of WordPress.' ); + if ( current_user_can( 'update_core' ) ) { + printf( + /* translators: %s: "Update WordPress" screen URL */ + ' ' . __( 'Click here to update WordPress.' ), + self_admin_url( 'update-core.php' ) + ); + } + echo '

      '; + } + + 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 000000000..7a1b03851 --- /dev/null +++ b/wp-admin/includes/plugin.php @@ -0,0 +1,2323 @@ + '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 + * + * @see get_plugin_data() + * + * @access private + * + * @param string $plugin_file Path to the main plugin file. + * @param array $plugin_data An array of plugin data. See `get_plugin_data()`. + * @param bool $markup Optional. If the returned data should have HTML markup applied. + * Default true. + * @param bool $translate Optional. If the returned data should be translated. Default true. + * @return array { + * Plugin data. Values will be empty if not supplied by the plugin. + * + * @type string $Name Name of the plugin. Should be unique. + * @type string $Title Title of the plugin and link to the plugin's site (if set). + * @type string $Description Plugin description. + * @type string $Author Author's name. + * @type string $AuthorURI Author's website address (if set). + * @type string $Version Plugin version. + * @type string $TextDomain Plugin textdomain. + * @type string $DomainPath Plugins relative directory path to .mo files. + * @type bool $Network Whether the plugin can only be activated network-wide. + * } + */ +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 ) { + // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText,WordPress.WP.I18n.NonSingularStringLiteralDomain + $plugin_data[ $field ] = translate( $plugin_data[ $field ], $textdomain ); + } + } + } + + // Sanitize fields + $allowed_tags_in_links = array( + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, + ); + + $allowed_tags = $allowed_tags_in_links; + $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 plugin file relative to the 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 string[] $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 = '' ) { + + $cache_plugins = wp_cache_get( 'plugins', 'plugins' ); + if ( ! $cache_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 + * + * @param array $a array with 'Name' key. + * @param array $b array with 'Name' key. + * @return int Return 0 or 1 based on two string comparison. + */ +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 + 'php-error.php' => array( __( 'Custom PHP error message.' ), true ), // auto on error + 'fatal-error-handler.php' => array( __( 'Custom PHP fatal error handler.' ), true ), // auto on error + ); + + 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; +} + +/** + * Determines 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. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * + * @since 2.5.0 + * + * @param string $plugin Path to the plugin file relative to the 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 ); +} + +/** + * Determines whether the plugin is inactive. + * + * Reverse of is_plugin_active(). Used as a callback. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * + * @since 3.1.0 + * @see is_plugin_active() + * + * @param string $plugin Path to the plugin file relative to the plugins directory. + * @return bool True if inactive. False if active. + */ +function is_plugin_inactive( $plugin ) { + return ! is_plugin_active( $plugin ); +} + +/** + * Determines 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. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * + * @since 3.0.0 + * + * @param string $plugin Path to the plugin file relative to the 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 plugin file relative to the 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 + * @since 5.2.0 Test for WordPress version and PHP version compatibility. + * + * @param string $plugin Path to the plugin file relative to the 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; + } + + $requirements = validate_plugin_requirements( $plugin ); + if ( is_wp_error( $requirements ) ) { + return $requirements; + } + + 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; + if ( ! defined( 'WP_SANDBOX_SCRAPING' ) ) { + define( 'WP_SANDBOX_SCRAPING', true ); + } + 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 plugin file relative to the 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 plugin file relative to the 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 plugin file relative to the 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 ( $do_blog && wp_is_recovery_mode() ) { + list( $extension ) = explode( '/', $plugin ); + wp_paused_plugins()->delete( $extension ); + } + + 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 plugin file relative to the 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 WordPress filesystem subclass. + * + * @param string[] $plugins List of plugin paths to delete, relative to the plugins directory. + * @param string $deprecated Not used. + * @return bool|null|WP_Error True on success, false if `$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->has_errors() ) { + 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 Path to the plugin file relative to the plugins directory. + */ + 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 Path to the plugin file relative to the plugins directory. + * @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' ); + + $json_translation_files = glob( WP_LANG_DIR . '/plugins/' . $plugin_slug . '-' . $translation . '-*.json' ); + if ( $json_translation_files ) { + array_map( array( $wp_filesystem, 'delete' ), $json_translation_files ); + } + } + } + } + + // 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 plugin file relative to the 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; +} + +/** + * Validate the plugin requirements for WP version and PHP version. + * + * @since 5.2.0 + * + * @param string $plugin Path to the plugin file relative to the plugins directory. + * @return true|WP_Error True if requirements are met, WP_Error on failure. + */ +function validate_plugin_requirements( $plugin ) { + $readme_file = WP_PLUGIN_DIR . '/' . dirname( $plugin ) . '/readme.txt'; + + if ( file_exists( $readme_file ) ) { + $plugin_data = get_file_data( + $readme_file, + array( + 'requires' => 'Requires at least', + 'requires_php' => 'Requires PHP', + ), + 'plugin' + ); + } else { + return true; + } + + $plugin_data['wp_compatible'] = is_wp_version_compatible( $plugin_data['requires'] ); + $plugin_data['php_compatible'] = is_php_version_compatible( $plugin_data['requires_php'] ); + + $plugin_data = array_merge( $plugin_data, get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ) ); + + if ( ! $plugin_data['wp_compatible'] && ! $plugin_data['php_compatible'] ) { + return new WP_Error( + 'plugin_wp_php_incompatible', + sprintf( + /* translators: %s: plugin name */ + __( 'Error: Current WordPress and PHP versions do not meet minimum requirements for %s.' ), + $plugin_data['Name'] + ) + ); + } elseif ( ! $plugin_data['php_compatible'] ) { + return new WP_Error( + 'plugin_php_incompatible', + sprintf( + /* translators: %s: plugin name */ + __( 'Error: Current PHP version does not meet minimum requirements for %s.' ), + $plugin_data['Name'] + ) + ); + } elseif ( ! $plugin_data['wp_compatible'] ) { + return new WP_Error( + 'plugin_wp_incompatible', + sprintf( + /* translators: %s: plugin name */ + __( 'Error: Current WordPress version does not meet minimum requirements for %s.' ), + $plugin_data['Name'] + ) + ); + } + + return true; +} + +/** + * Whether the plugin can be uninstalled. + * + * @since 2.7.0 + * + * @param string $plugin Path to the plugin file relative to the 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 plugin file relative to the 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 plugin file relative to the 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. + * + * @since 1.5.0 + * + * @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. + * + * @since 1.5.0 + * + * @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. + * + * @since 1.5.0 + * + * @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. + * + * @since 1.5.0 + * + * @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. + * + * @since 2.0.0 + * + * @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. + * + * @since 3.0.0 + * + * @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. + * + * @since 2.1.3 + * + * @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. + * + * @since 2.7.0 + * + * @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. + * + * @since 2.7.0 + * + * @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. + * + * @since 2.7.0 + * + * @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. + * + * @since 2.7.0 + * + * @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. + * + * @since 2.7.0 + * + * @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. + * + * @since 2.7.0 + * + * @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 + * + * @return string + */ +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 + * + * @return string + */ +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 The slug name of the plugin page. + * @param string $parent_page The slug name for the parent menu (or the file name of a standard + * WordPress admin page). + * @return string|null Hook attached to the plugin page, null otherwise. + */ +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 The slug name of the plugin page. + * @param string $parent_page The slug name for the parent menu (or the file name of a standard + * WordPress admin page). + * @return string Hook name for the plugin 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 + * + * @return bool Whether the current user can access the current admin page. + */ +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 Path to the plugin file relative to the plugins directory. + */ +function plugin_sandbox_scrape( $plugin ) { + if ( ! defined( 'WP_SANDBOX_SCRAPING' ) ) { + define( 'WP_SANDBOX_SCRAPING', true ); + } + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); + include( WP_PLUGIN_DIR . '/' . $plugin ); +} + +/** + * Helper function for adding content to the Privacy Policy Guide. + * + * 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 on the Privacy Policy Guide screen. + * + * 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. + * For more information see the Plugin Handbook: + * https://developer.wordpress.org/plugins/privacy/suggesting-text-for-the-site-privacy-policy/. + * + * 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. + */ +function wp_add_privacy_policy_content( $plugin_name, $policy_text ) { + if ( ! is_admin() ) { + _doing_it_wrong( + __FUNCTION__, + sprintf( + /* translators: %s: admin_init */ + __( 'The suggested privacy policy content should be added only in wp-admin by using the %s (or later) action.' ), + 'admin_init' + ), + '4.9.7' + ); + return; + } elseif ( ! doing_action( 'admin_init' ) && ! did_action( 'admin_init' ) ) { + _doing_it_wrong( + __FUNCTION__, + sprintf( + /* translators: %s: admin_init */ + __( 'The suggested privacy policy content should be added by using the %s (or later) action. Please see the inline documentation.' ), + 'admin_init' + ), + '4.9.7' + ); + return; + } + + if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) { + require_once( ABSPATH . 'wp-admin/includes/misc.php' ); + } + + WP_Privacy_Policy_Content::add( $plugin_name, $policy_text ); +} + +/** + * Determines whether a plugin is technically active but was paused while + * loading. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * + * @since 5.2.0 + * + * @param string $plugin Path to the plugin file relative to the plugins directory. + * @return bool True, if in the list of paused plugins. False, not in the list. + */ +function is_plugin_paused( $plugin ) { + if ( ! isset( $GLOBALS['_paused_plugins'] ) ) { + return false; + } + + if ( ! is_plugin_active( $plugin ) ) { + return false; + } + + list( $plugin ) = explode( '/', $plugin ); + + return array_key_exists( $plugin, $GLOBALS['_paused_plugins'] ); +} + +/** + * Gets the error that was recorded for a paused plugin. + * + * @since 5.2.0 + * + * @param string $plugin Path to the plugin file relative to the plugins + * directory. + * @return array|false Array of error information as it was returned by + * `error_get_last()`, or false if none was recorded. + */ +function wp_get_plugin_error( $plugin ) { + if ( ! isset( $GLOBALS['_paused_plugins'] ) ) { + return false; + } + + list( $plugin ) = explode( '/', $plugin ); + + if ( ! array_key_exists( $plugin, $GLOBALS['_paused_plugins'] ) ) { + return false; + } + + return $GLOBALS['_paused_plugins'][ $plugin ]; +} + +/** + * Tries to resume a single plugin. + * + * If a redirect was provided, we first ensure the plugin does not throw fatal + * errors anymore. + * + * 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 and the plugin will not be resumed. + * + * @since 5.2.0 + * + * @param string $plugin Single plugin to resume. + * @param string $redirect Optional. URL to redirect to. Default empty string. + * @return bool|WP_Error True on success, false if `$plugin` was not paused, + * `WP_Error` on failure. + */ +function resume_plugin( $plugin, $redirect = '' ) { + /* + * We'll override this later if the plugin could be resumed without + * creating a fatal error. + */ + if ( ! empty( $redirect ) ) { + wp_redirect( + add_query_arg( + '_error_nonce', + wp_create_nonce( 'plugin-resume-error_' . $plugin ), + $redirect + ) + ); + + // Load the plugin to test whether it throws a fatal error. + ob_start(); + plugin_sandbox_scrape( $plugin ); + ob_clean(); + } + + list( $extension ) = explode( '/', $plugin ); + + $result = wp_paused_plugins()->delete( $extension ); + + if ( ! $result ) { + return new WP_Error( + 'could_not_resume_plugin', + __( 'Could not resume the plugin.' ) + ); + } + + return true; +} + +/** + * Renders an admin notice in case some plugins have been paused due to errors. + * + * @since 5.2.0 + */ +function paused_plugins_notice() { + if ( 'plugins.php' === $GLOBALS['pagenow'] ) { + return; + } + + if ( ! current_user_can( 'resume_plugins' ) ) { + return; + } + + if ( ! isset( $GLOBALS['_paused_plugins'] ) || empty( $GLOBALS['_paused_plugins'] ) ) { + return; + } + + printf( + '

      %s
      %s

      %s

      ', + __( 'One or more plugins failed to load properly.' ), + __( 'You can find more details and make changes on the Plugins screen.' ), + esc_url( admin_url( 'plugins.php?plugin_status=paused' ) ), + __( 'Go to the Plugins screen' ) + ); +} diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php new file mode 100644 index 000000000..dc341bf9f --- /dev/null +++ b/wp-admin/includes/post.php @@ -0,0 +1,2410 @@ +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; +} + +/** + * Returns only allowed post data fields + * + * @since 5.0.1 + * + * @param array $post_data Array of post data. Defaults to the contents of $_POST. + * @return object|bool WP_Error on failure, true on success. + */ +function _wp_get_allowed_postdata( $post_data = null ) { + if ( empty( $post_data ) ) { + $post_data = $_POST; + } + + // Pass through errors + if ( is_wp_error( $post_data ) ) { + return $post_data; + } + + return array_diff_key( $post_data, array_flip( array( 'meta_input', 'file', 'guid' ) ) ); +} + +/** + * 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() ); + } + $translated = _wp_get_allowed_postdata( $post_data ); + + // 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 */ + $translated = apply_filters( 'attachment_fields_to_save', $translated, $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 ) { + $tax_object = get_taxonomy( $taxonomy ); + + if ( $tax_object && isset( $tax_object->meta_box_sanitize_cb ) ) { + $translated['tax_input'][ $taxonomy ] = call_user_func_array( $tax_object->meta_box_sanitize_cb, array( $taxonomy, $terms ) ); + } + } + } + + add_meta( $post_ID ); + + update_post_meta( $post_ID, '_edit_last', get_current_user_id() ); + + $success = wp_update_post( $translated ); + // 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( $translated[ $field ] ) ) { + $translated[ $field ] = $wpdb->strip_invalid_text_for_column( $wpdb->posts, $field, $translated[ $field ] ); + } + } + + wp_update_post( $translated ); + } + + // 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_ID'] = $post_ID; + $post_data['post_type'] = $post->post_type; + $post_data['post_mime_type'] = $post->post_mime_type; + + foreach ( array( 'comment_status', 'ping_status', 'post_author' ) as $field ) { + if ( ! isset( $post_data[ $field ] ) ) { + $post_data[ $field ] = $post->$field; + } + } + + $post_data = _wp_translate_postdata( true, $post_data ); + if ( is_wp_error( $post_data ) ) { + $skipped[] = $post_ID; + continue; + } + $post_data = _wp_get_allowed_postdata( $post_data ); + + if ( isset( $shared_post_data['post_format'] ) ) { + set_post_format( $post_ID, $shared_post_data['post_format'] ); + } + + // Prevent wp_insert_post() from overwriting post format with the old data. + 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' ) ); + } + + // Schedule auto-draft cleanup + if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) { + wp_schedule_event( time(), 'daily', 'wp_scheduled_auto_draft_delete' ); + } + } 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 = (string) 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 = (string) 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 = (string) apply_filters( 'default_excerpt', $post_excerpt, $post ); + + return $post; +} + +/** + * Determines if a post exists based on title, content, date and type. + * + * @since 2.0.0 + * @since 5.2.0 Added the `$type` parameter. + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param string $title Post title. + * @param string $content Optional post content. + * @param string $date Optional post date. + * @param string $type Optional post type. + * @return int Post ID if post exists, 0 otherwise. + */ +function post_exists( $title, $content = '', $date = '', $type = '' ) { + 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' ) ); + $post_type = wp_unslash( sanitize_post_field( 'post_type', $type, 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( $type ) ) { + $query .= ' AND post_type = %s'; + $args[] = $post_type; + } + + 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; + } + $translated = _wp_get_allowed_postdata( $translated ); + + // Create the post. + $post_ID = wp_insert_post( $translated ); + 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 ( ( ( '#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 ); + $post_status = ''; + $perm = ''; + + if ( isset( $q['post_status'] ) && in_array( $q['post_status'], $post_stati ) ) { + $post_status = $q['post_status']; + $perm = 'readable'; + } + + $orderby = ''; + + if ( isset( $q['orderby'] ) ) { + $orderby = $q['orderby']; + } elseif ( isset( $q['post_status'] ) && in_array( $q['post_status'], array( 'pending', 'draft' ) ) ) { + $orderby = 'modified'; + } + + $order = ''; + + 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 ) && empty( $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 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 $box_id Meta box ID (used in the 'id' attribute for the meta box). + * @param string $screen_id The screen on which the meta box is shown. + * @return string Space-separated string of class names. + */ +function postbox_classes( $box_id, $screen_id ) { + if ( isset( $_GET['edit'] ) && $_GET['edit'] == $box_id ) { + $classes = array( '' ); + } elseif ( $closed = get_user_option( 'closedpostboxes_' . $screen_id ) ) { + if ( ! is_array( $closed ) ) { + $classes = array( '' ); + } else { + $classes = in_array( $box_id, $closed ) ? array( 'closed' ) : array( '' ); + } + } else { + $classes = array( '' ); + } + + /** + * Filters the postbox classes for a specific screen and box ID combo. + * + * The dynamic portions of the hook name, `$screen_id` and `$box_id`, refer to + * the screen ID and meta box ID, respectively. + * + * @since 3.2.0 + * + * @param string[] $classes An array of postbox classes. + */ + $classes = apply_filters( "postbox_classes_{$screen_id}_{$box_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|null $thumbnail_id Thumbnail attachment ID, or null if there isn't one. + */ + 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; +} + +/** + * Sanitizes POST values from a checkbox taxonomy metabox. + * + * @since 5.1.0 + * + * @param mixed $terms Raw term data from the 'tax_input' field. + * @return array + */ +function taxonomy_meta_box_sanitize_cb_checkboxes( $taxonomy, $terms ) { + return array_map( 'intval', $terms ); +} + +/** + * Sanitizes POST values from an input taxonomy metabox. + * + * @since 5.1.0 + * + * @param mixed $terms Raw term data from the 'tax_input' field. + * @return array + */ +function taxonomy_meta_box_sanitize_cb_input( $taxonomy, $terms ) { + /* + * 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; + } + } + + return $clean_terms; +} + +/** + * Return whether the post can be edited in the block editor. + * + * @since 5.0.0 + * + * @param int|WP_Post $post Post ID or WP_Post object. + * @return bool Whether the post can be edited in the block editor. + */ +function use_block_editor_for_post( $post ) { + $post = get_post( $post ); + + if ( ! $post ) { + return false; + } + + // We're in the meta box loader, so don't use the block editor. + if ( isset( $_GET['meta-box-loader'] ) ) { + check_admin_referer( 'meta-box-loader', 'meta-box-loader-nonce' ); + return false; + } + + // The posts page can't be edited in the block editor. + if ( absint( get_option( 'page_for_posts' ) ) === $post->ID && empty( $post->post_content ) ) { + return false; + } + + $use_block_editor = use_block_editor_for_post_type( $post->post_type ); + + /** + * Filter whether a post is able to be edited in the block editor. + * + * @since 5.0.0 + * + * @param bool $use_block_editor Whether the post can be edited or not. + * @param WP_Post $post The post being checked. + */ + return apply_filters( 'use_block_editor_for_post', $use_block_editor, $post ); +} + +/** + * Return whether a post type is compatible with the block editor. + * + * The block editor depends on the REST API, and if the post type is not shown in the + * REST API, then it won't work with the block editor. + * + * @since 5.0.0 + * + * @param string $post_type The post type. + * @return bool Whether the post type can be edited with the block editor. + */ +function use_block_editor_for_post_type( $post_type ) { + if ( ! post_type_exists( $post_type ) ) { + return false; + } + + if ( ! post_type_supports( $post_type, 'editor' ) ) { + return false; + } + + $post_type_object = get_post_type_object( $post_type ); + if ( $post_type_object && ! $post_type_object->show_in_rest ) { + return false; + } + + /** + * Filter whether a post is able to be edited in the block editor. + * + * @since 5.0.0 + * + * @param bool $use_block_editor Whether the post type can be edited or not. Default true. + * @param string $post_type The post type being checked. + */ + return apply_filters( 'use_block_editor_for_post_type', true, $post_type ); +} + +/** + * Returns all the block categories that will be shown in the block editor. + * + * @since 5.0.0 + * + * @param WP_Post $post Post object. + * @return array Array of block categories. + */ +function get_block_categories( $post ) { + $default_categories = array( + array( + 'slug' => 'common', + 'title' => __( 'Common Blocks' ), + 'icon' => null, + ), + array( + 'slug' => 'formatting', + 'title' => __( 'Formatting' ), + 'icon' => null, + ), + array( + 'slug' => 'layout', + 'title' => __( 'Layout Elements' ), + 'icon' => null, + ), + array( + 'slug' => 'widgets', + 'title' => __( 'Widgets' ), + 'icon' => null, + ), + array( + 'slug' => 'embed', + 'title' => __( 'Embeds' ), + 'icon' => null, + ), + array( + 'slug' => 'reusable', + 'title' => __( 'Reusable Blocks' ), + 'icon' => null, + ), + ); + + /** + * Filter the default array of block categories. + * + * @since 5.0.0 + * + * @param array $default_categories Array of block categories. + * @param WP_Post $post Post being loaded. + */ + return apply_filters( 'block_categories', $default_categories, $post ); +} + +/** + * Prepares server-registered blocks for the block editor. + * + * Returns an associative array of registered block data keyed by block name. Data includes properties + * of a block relevant for client registration. + * + * @since 5.0.0 + * + * @return array An associative array of registered block data. + */ +function get_block_editor_server_block_settings() { + $block_registry = WP_Block_Type_Registry::get_instance(); + $blocks = array(); + $keys_to_pick = array( 'title', 'description', 'icon', 'category', 'keywords', 'supports', 'attributes' ); + + foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) { + foreach ( $keys_to_pick as $key ) { + if ( ! isset( $block_type->{ $key } ) ) { + continue; + } + + if ( ! isset( $blocks[ $block_name ] ) ) { + $blocks[ $block_name ] = array(); + } + + $blocks[ $block_name ][ $key ] = $block_type->{ $key }; + } + } + + return $blocks; +} + +/** + * Renders the meta boxes forms. + * + * @since 5.0.0 + */ +function the_block_editor_meta_boxes() { + global $post, $current_screen, $wp_meta_boxes; + + // Handle meta box state. + $_original_meta_boxes = $wp_meta_boxes; + + /** + * Fires right before the meta boxes are rendered. + * + * This allows for the filtering of meta box data, that should already be + * present by this point. Do not use as a means of adding meta box data. + * + * @since 5.0.0 + * + * @param array $wp_meta_boxes Global meta box state. + */ + $wp_meta_boxes = apply_filters( 'filter_block_editor_meta_boxes', $wp_meta_boxes ); + $locations = array( 'side', 'normal', 'advanced' ); + $priorities = array( 'high', 'sorted', 'core', 'default', 'low' ); + + // Render meta boxes. + ?> +
      + +
      +
      + + +
      + +
      + +
      + + id ][ $location ] ) ) { + continue; + } + + foreach ( $priorities as $priority ) { + if ( ! isset( $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ] ) ) { + continue; + } + + $meta_boxes = (array) $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ]; + foreach ( $meta_boxes as $meta_box ) { + if ( false == $meta_box || ! $meta_box['title'] ) { + continue; + } + + // If a meta box is just here for back compat, don't show it in the block editor. + if ( isset( $meta_box['args']['__back_compat_meta_box'] ) && $meta_box['args']['__back_compat_meta_box'] ) { + continue; + } + + $meta_boxes_per_location[ $location ][] = array( + 'id' => $meta_box['id'], + 'title' => $meta_box['title'], + ); + } + } + } + + /** + * Sadly we probably can not add this data directly into editor settings. + * + * Some meta boxes need admin_head to fire for meta box registry. + * admin_head fires after admin_enqueue_scripts, which is where we create our + * editor instance. + */ + $script = 'window._wpLoadBlockEditor.then( function() { + wp.data.dispatch( \'core/edit-post\' ).setAvailableMetaBoxesPerLocation( ' . wp_json_encode( $meta_boxes_per_location ) . ' ); + } );'; + + wp_add_inline_script( 'wp-edit-post', $script ); + + /** + * When `wp-edit-post` is output in the ``, the inline script needs to be manually printed. Otherwise, + * meta boxes will not display because inline scripts for `wp-edit-post` will not be printed again after this point. + */ + if ( wp_script_is( 'wp-edit-post', 'done' ) ) { + printf( "\n", trim( $script ) ); + } + + /** + * If the 'postcustom' meta box is enabled, then we need to perform some + * extra initialization on it. + */ + $enable_custom_fields = (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ); + if ( $enable_custom_fields ) { + $script = "( function( $ ) { + if ( $('#postcustom').length ) { + $( '#the-list' ).wpList( { + addBefore: function( s ) { + s.data += '&post_id=$post->ID'; + return s; + }, + addAfter: function() { + $('table#list-table').show(); + } + }); + } + } )( jQuery );"; + wp_enqueue_script( 'wp-lists' ); + wp_add_inline_script( 'wp-lists', $script ); + } + + // Reset meta box data. + $wp_meta_boxes = $_original_meta_boxes; +} + +/** + * Renders the hidden form required for the meta boxes form. + * + * @since 5.0.0 + * + * @param WP_Post $post Current post object. + */ +function the_block_editor_meta_box_post_form_hidden_fields( $post ) { + $form_extra = ''; + if ( 'auto-draft' === $post->post_status ) { + $form_extra .= ""; + } + $form_action = 'editpost'; + $nonce_action = 'update-post_' . $post->ID; + $form_extra .= ""; + $referer = wp_get_referer(); + $current_user = wp_get_current_user(); + $user_id = $current_user->ID; + wp_nonce_field( $nonce_action ); + + /* + * Some meta boxes hook into these actions to add hidden input fields in the classic post form. For backwards + * compatibility, we can capture the output from these actions, and extract the hidden input fields. + */ + ob_start(); + /** This filter is documented in wp-admin/edit-form-advanced.php */ + do_action( 'edit_form_after_title', $post ); + /** This filter is documented in wp-admin/edit-form-advanced.php */ + do_action( 'edit_form_advanced', $post ); + $classic_output = ob_get_clean(); + + $classic_elements = wp_html_split( $classic_output ); + $hidden_inputs = ''; + foreach ( $classic_elements as $element ) { + if ( 0 !== strpos( $element, ' + + + + + + + + ` fields, which will be POSTed back to + * the server when meta boxes are saved. + * + * @since 5.0.0 + * + * @params WP_Post $post The post that is being edited. + */ + do_action( 'block_editor_meta_box_hidden_fields', $post ); +} diff --git a/wp-admin/includes/revision.php b/wp-admin/includes/revision.php new file mode 100644 index 000000000..1f03ae710 --- /dev/null +++ b/wp-admin/includes/revision.php @@ -0,0 +1,456 @@ +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 = ''; + + // In split screen mode, show the title before/after side by side. + if ( true === $args['show_split_view'] ) { + $diff .= ''; + } else { + $diff .= ''; + + // In single column mode, only show the title once if unchanged. + if ( $compare_from->post_title !== $compare_to->post_title ) { + $diff .= ''; + } + } + + $diff .= ''; + $diff .= '
      ' . esc_html( $compare_from->post_title ) . '' . esc_html( $compare_to->post_title ) . '' . 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 Array of 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->blogmeta ( + meta_id bigint(20) unsigned NOT NULL auto_increment, + blog_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 blog_id (blog_id) +) $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 + * @since 5.1.0 The $options parameter has been added. + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_db_version + * @global int $wp_current_db_version + * + * @param array $options Optional. Custom option $key => $value pairs to use. Default empty array. + */ +function populate_options( array $options = array() ) { + 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 = WP_DEFAULT_THEME; + $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' ); // phpcs:ignore WordPress.WP.I18n.NoEmptyStrings + 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; + } + + $defaults = 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, + + // 4.9.8 + 'show_comments_cookies_opt_in' => 1, + ); + + // 3.3 + if ( ! is_multisite() ) { + $defaults['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 */ + $defaults['blogdescription'] = sprintf( __( 'Just another %s site' ), get_network()->site_name ); + $defaults['permalink_structure'] = '/%year%/%monthnum%/%day%/%postname%/'; + } + + $options = wp_parse_args( $options, $defaults ); + + // 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 )" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + $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 ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + + // 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 + + 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 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_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->has_errors() ) { + return $errors; + } + + 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, + ) + ); + } + + populate_network_meta( + $network_id, + array( + 'admin_email' => $email, + 'site_name' => $site_name, + 'subdomain_install' => $subdomain_install, + ) + ); + + $site_user = get_userdata( (int) $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", 'admin_user_id', $network_id ) ) ); + + /* + * 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 = $wpdb->insert_id; + update_user_meta( $site_user->ID, 'source_domain', $domain ); + update_user_meta( $site_user->ID, 'primary_blog', $current_site->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; +} + +/** + * Creates WordPress network meta and sets the default values. + * + * @since 5.1.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_db_version WordPress database version. + * + * @param int $network_id Network ID to populate meta for. + * @param array $meta Optional. Custom meta $key => $value pairs to use. Default empty array. + */ +function populate_network_meta( $network_id, array $meta = array() ) { + global $wpdb, $wp_db_version; + + $network_id = (int) $network_id; + + $email = ! empty( $meta['admin_email'] ) ? $meta['admin_email'] : ''; + $subdomain_install = isset( $meta['subdomain_install'] ) ? (int) $meta['subdomain_install'] : 0; + + // If a user with the provided email does not exist, default to the current user as the new network admin. + $site_user = ! empty( $email ) ? get_user_by( 'email', $email ) : false; + if ( false === $site_user ) { + $site_user = wp_get_current_user(); + } + + if ( empty( $email ) ) { + $email = $site_user->user_email; + } + + $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() ) { + $core_default = WP_Theme::get_core_default_theme(); + if ( $core_default ) { + $allowed_themes[ $core_default->get_stylesheet() ] = true; + } + } + + 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' => __( 'My Network' ), + '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 writing!' ), + // @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' => $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'; + } + + $sitemeta = wp_parse_args( $meta, $sitemeta ); + + /** + * 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 ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared +} + +/** + * Creates WordPress site meta and sets the default values. + * + * @since 5.1.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $site_id Site ID to populate meta for. + * @param array $meta Optional. Custom meta $key => $value pairs to use. Default empty array. + */ +function populate_site_meta( $site_id, array $meta = array() ) { + global $wpdb; + + $site_id = (int) $site_id; + + if ( ! is_site_meta_supported() ) { + return; + } + + if ( empty( $meta ) ) { + return; + } + + /** + * Filters meta for a site on creation. + * + * @since 5.2.0 + * + * @param array $meta Associative array of site meta keys and values to be inserted. + * @param int $site_id ID of site to populate. + */ + $site_meta = apply_filters( 'populate_site_meta', $meta, $site_id ); + + $insert = ''; + foreach ( $site_meta 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)', $site_id, $meta_key, $meta_value ); + } + + $wpdb->query( "INSERT INTO $wpdb->blogmeta ( blog_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + wp_cache_delete( $site_id, 'blog_meta' ); + wp_cache_set_sites_last_changed(); +} diff --git a/wp-admin/includes/screen.php b/wp-admin/includes/screen.php new file mode 100644 index 000000000..8860c0d12 --- /dev/null +++ b/wp-admin/includes/screen.php @@ -0,0 +1,242 @@ + 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 000000000..62988c3b9 --- /dev/null +++ b/wp-admin/includes/taxonomy.php @@ -0,0 +1,308 @@ + $cat_name, + 'category_parent' => $parent, + ) + ); +} + +/** + * Create categories for the given post. + * + * @since 2.0.0 + * + * @param string[] $categories Array of category names 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 string $terms_to_edit A comma-separated list of term names. + * @param string $taxonomy The taxonomy name for which to retrieve terms. + */ + $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 000000000..d6a705ea9 --- /dev/null +++ b/wp-admin/includes/template.php @@ -0,0 +1,2496 @@ + '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 int[] $selected_cats Array of category IDs to mark as checked. Default false. + * @type int[] $popular_cats Array of category IDs 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 '
      '; + + $post_date = ( $for_post ) ? $post->post_date : get_comment()->comment_date; + $jj = ( $edit ) ? mysql2date( 'd', $post_date, false ) : current_time( 'd' ); + $mm = ( $edit ) ? mysql2date( 'm', $post_date, false ) : current_time( 'm' ); + $aa = ( $edit ) ? mysql2date( 'Y', $post_date, false ) : current_time( 'Y' ); + $hh = ( $edit ) ? mysql2date( 'H', $post_date, false ) : current_time( 'H' ); + $mn = ( $edit ) ? mysql2date( 'i', $post_date, false ) : current_time( 'i' ); + $ss = ( $edit ) ? mysql2date( 's', $post_date, false ) : current_time( 's' ); + + $cur_jj = current_time( 'd' ); + $cur_mm = current_time( 'm' ); + $cur_aa = current_time( 'Y' ); + $cur_hh = current_time( 'H' ); + $cur_mn = current_time( 'i' ); + + $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, + ); +} + + +/** + * Function that renders a "fake" meta box with an information message, + * shown on the block editor, when an incompatible meta box is found. + * + * @since 5.0.0 + * + * @param mixed $object The data object being rendered on this screen. + * @param array $box { + * Custom formats meta box arguments. + * + * @type string $id Meta box 'id' attribute. + * @type string $title Meta box title. + * @type callable $old_callback The original callback for this meta box. + * @type array $args Extra meta box arguments. + * } + */ +function do_block_editor_incompatible_meta_box( $object, $box ) { + $plugin = _get_plugin_from_callback( $box['old_callback'] ); + $plugins = get_plugins(); + echo '

      '; + if ( $plugin ) { + /* translators: %s: the name of the plugin that generated this meta box. */ + printf( __( "This meta box, from the %s plugin, isn't compatible with the block editor." ), "{$plugin['Name']}" ); + } else { + _e( "This meta box isn't compatible with the block editor." ); + } + echo '

      '; + + if ( empty( $plugins['classic-editor/classic-editor.php'] ) ) { + if ( current_user_can( 'install_plugins' ) ) { + echo '

      '; + /* translators: %s: A link to install the Classic Editor plugin. */ + printf( __( 'Please install the Classic Editor plugin to use this meta box.' ), esc_url( self_admin_url( 'plugin-install.php?tab=featured' ) ) ); + echo '

      '; + } + } elseif ( is_plugin_inactive( 'classic-editor/classic-editor.php' ) ) { + if ( current_user_can( 'activate_plugins' ) ) { + $activate_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php' ), 'activate-plugin_classic-editor/classic-editor.php' ); + echo '

      '; + /* translators: %s: A link to activate the Classic Editor plugin. */ + printf( __( 'Please activate the Classic Editor plugin to use this meta box.' ), esc_url( $activate_url ) ); + echo '

      '; + } + } elseif ( $object instanceof WP_Post ) { + $edit_url = add_query_arg( + array( + 'classic-editor' => '', + 'classic-editor__forget' => '', + ), + get_edit_post_link( $object ) + ); + echo '

      '; + /* translators: %s: A link to use the Classic Editor plugin. */ + printf( __( 'Please open the classic editor to use this meta box.' ), esc_url( $edit_url ) ); + echo '

      '; + } +} + +/** + * Internal helper function to find the plugin from a meta box callback. + * + * @since 5.0.0 + * + * @access private + * + * @param callable $callback The callback function to check. + * @return array|null The plugin that the callback belongs to, or null if it doesn't belong to a plugin. + */ +function _get_plugin_from_callback( $callback ) { + try { + if ( is_array( $callback ) ) { + $reflection = new ReflectionMethod( $callback[0], $callback[1] ); + } elseif ( is_string( $callback ) && false !== strpos( $callback, '::' ) ) { + $reflection = new ReflectionMethod( $callback ); + } else { + $reflection = new ReflectionFunction( $callback ); + } + } catch ( ReflectionException $exception ) { + // We could not properly reflect on the callable, so we abort here. + return null; + } + + // Don't show an error if it's an internal PHP function. + if ( ! $reflection->isInternal() ) { + + // Only show errors if the meta box was registered by a plugin. + $filename = wp_normalize_path( $reflection->getFileName() ); + $plugin_dir = wp_normalize_path( WP_PLUGIN_DIR ); + if ( strpos( $filename, $plugin_dir ) === 0 ) { + $filename = str_replace( $plugin_dir, '', $filename ); + $filename = preg_replace( '|^/([^/]*/).*$|', '\\1', $filename ); + + $plugins = get_plugins(); + foreach ( $plugins as $name => $plugin ) { + if ( strpos( $name, $filename ) === 0 ) { + return $plugin; + } + } + } + } + + return null; +} + +/** + * 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 The screen context for which to display meta boxes. + * @param mixed $object Gets passed to the first parameter of the meta box callback function. + * Often this is the object that's the focus of the current screen, for + * example a `WP_Post` or `WP_Comment` object. + * @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( '
      ', esc_attr( $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; + } + + $block_compatible = true; + if ( is_array( $box['args'] ) ) { + // If a meta box is just here for back compat, don't show it in the block editor. + if ( $screen->is_block_editor() && isset( $box['args']['__back_compat_meta_box'] ) && $box['args']['__back_compat_meta_box'] ) { + continue; + } + + if ( isset( $box['args']['__block_editor_compatible_meta_box'] ) ) { + $block_compatible = (bool) $box['args']['__block_editor_compatible_meta_box']; + unset( $box['args']['__block_editor_compatible_meta_box'] ); + } + + // If the meta box is declared as incompatible with the block editor, override the callback function. + if ( ! $block_compatible && $screen->is_block_editor() ) { + $box['old_callback'] = $box['callback']; + $box['callback'] = 'do_block_editor_incompatible_meta_box'; + } + + if ( isset( $box['args']['__back_compat_meta_box'] ) ) { + $block_compatible = $block_compatible || (bool) $box['args']['__back_compat_meta_box']; + unset( $box['args']['__back_compat_meta_box'] ); + } + } + + $i++; + // get_hidden_meta_boxes() doesn't apply in the block editor. + $hidden_class = ( ! $screen->is_block_editor() && 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 '

      '; + if ( 'dashboard_php_nag' === $box['id'] ) { + echo ''; + echo '' . __( 'Warning:' ) . ' '; + } + echo "{$box['title']}"; + echo "

      \n"; + echo '
      ' . "\n"; + + if ( WP_DEBUG && ! $block_compatible && 'edit' === $screen->parent_base && ! $screen->is_block_editor() && ! isset( $_GET['meta-box-loader'] ) ) { + $plugin = _get_plugin_from_callback( $box['callback'] ); + if ( $plugin ) { + ?> +
      +

      + {$plugin['Name']}" ); + ?> +

      +
      + \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 `
      '; + ?> + + find_folder( trailingslashit( dirname( $file ) ) ); + if ( empty( $gen_dir ) ) { + continue; + } + + // The path when the file is accessed via WP_Filesystem may differ in the case of FTP + $remote_file = $gen_dir . basename( $file ); + + if ( ! $wp_filesystem->exists( $remote_file ) ) { + continue; + } + + if ( ! $wp_filesystem->delete( $remote_file, false, 'f' ) ) { + $wp_filesystem->put_contents( $remote_file, '' ); + } + } +} + +/** + * Recursively find Genericons example files in a given folder. + * + * @ignore + * @since 4.2.2 + * + * @param string $directory Directory path. Expects trailingslashed. + * @return array + */ +function _upgrade_422_find_genericons_files_in_folder( $directory ) { + $directory = trailingslashit( $directory ); + $files = array(); + + if ( file_exists( "{$directory}example.html" ) && false !== strpos( file_get_contents( "{$directory}example.html" ), 'Genericons' ) ) { + $files[] = "{$directory}example.html"; + } + + $dirs = glob( $directory . '*', GLOB_ONLYDIR ); + if ( $dirs ) { + foreach ( $dirs as $dir ) { + $files = array_merge( $files, _upgrade_422_find_genericons_files_in_folder( $dir ) ); + } + } + + return $files; +} + +/** + * @ignore + * @since 4.4.0 + */ +function _upgrade_440_force_deactivate_incompatible_plugins() { + if ( defined( 'REST_API_VERSION' ) && version_compare( REST_API_VERSION, '2.0-beta4', '<=' ) ) { + deactivate_plugins( array( 'rest-api/plugin.php' ), true ); + } +} diff --git a/wp-admin/includes/update.php b/wp-admin/includes/update.php new file mode 100644 index 000000000..5dd9d63b5 --- /dev/null +++ b/wp-admin/includes/update.php @@ -0,0 +1,861 @@ + 'latest' ); + } + return $updates[0]; +} + +/** + * Get available core updates. + * + * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too, + * set $options['available'] to false to skip not-dismissed updates. + * @return array|false Array of the update objects on success, false on failure. + */ +function get_core_updates( $options = array() ) { + $options = array_merge( + array( + 'available' => true, + 'dismissed' => false, + ), + $options + ); + $dismissed = get_site_option( 'dismissed_update_core' ); + + if ( ! is_array( $dismissed ) ) { + $dismissed = array(); + } + + $from_api = get_site_transient( 'update_core' ); + + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) { + return false; + } + + $updates = $from_api->updates; + $result = array(); + foreach ( $updates as $update ) { + if ( $update->response == 'autoupdate' ) { + continue; + } + + if ( array_key_exists( $update->current . '|' . $update->locale, $dismissed ) ) { + if ( $options['dismissed'] ) { + $update->dismissed = true; + $result[] = $update; + } + } else { + if ( $options['available'] ) { + $update->dismissed = false; + $result[] = $update; + } + } + } + return $result; +} + +/** + * Gets the best available (and enabled) Auto-Update for WordPress Core. + * + * If there's 1.2.3 and 1.3 on offer, it'll choose 1.3 if the installation allows it, else, 1.2.3 + * + * @since 3.7.0 + * + * @return array|false False on failure, otherwise the core update offering. + */ +function find_core_auto_update() { + $updates = get_site_transient( 'update_core' ); + if ( ! $updates || empty( $updates->updates ) ) { + return false; + } + + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + + $auto_update = false; + $upgrader = new WP_Automatic_Updater; + foreach ( $updates->updates as $update ) { + if ( 'autoupdate' != $update->response ) { + continue; + } + + if ( ! $upgrader->should_update( 'core', $update, ABSPATH ) ) { + continue; + } + + if ( ! $auto_update || version_compare( $update->current, $auto_update->current, '>' ) ) { + $auto_update = $update; + } + } + return $auto_update; +} + +/** + * Gets and caches the checksums for the given version of WordPress. + * + * @since 3.7.0 + * + * @param string $version Version string to query. + * @param string $locale Locale to query. + * @return bool|array False on failure. An array of checksums on success. + */ +function get_core_checksums( $version, $locale ) { + $url = $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( compact( 'version', 'locale' ), null, '&' ); + + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) { + $url = set_url_scheme( $url, 'https' ); + } + + $options = array( + 'timeout' => wp_doing_cron() ? 30 : 3, + ); + + $response = wp_remote_get( $url, $options ); + if ( $ssl && is_wp_error( $response ) ) { + 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 + ); + $response = wp_remote_get( $http_url, $options ); + } + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { + return false; + } + + $body = trim( wp_remote_retrieve_body( $response ) ); + $body = json_decode( $body, true ); + + if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) { + return false; + } + + return $body['checksums']; +} + +/** + * @param object $update + * @return bool + */ +function dismiss_core_update( $update ) { + $dismissed = get_site_option( 'dismissed_update_core' ); + $dismissed[ $update->current . '|' . $update->locale ] = true; + return update_site_option( 'dismissed_update_core', $dismissed ); +} + +/** + * @param string $version + * @param string $locale + * @return bool + */ +function undismiss_core_update( $version, $locale ) { + $dismissed = get_site_option( 'dismissed_update_core' ); + $key = $version . '|' . $locale; + + if ( ! isset( $dismissed[ $key ] ) ) { + return false; + } + + unset( $dismissed[ $key ] ); + return update_site_option( 'dismissed_update_core', $dismissed ); +} + +/** + * @param string $version + * @param string $locale + * @return object|false + */ +function find_core_update( $version, $locale ) { + $from_api = get_site_transient( 'update_core' ); + + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) { + return false; + } + + $updates = $from_api->updates; + foreach ( $updates as $update ) { + if ( $update->current == $version && $update->locale == $locale ) { + return $update; + } + } + return false; +} + +/** + * @param string $msg + * @return string + */ +function core_update_footer( $msg = '' ) { + if ( ! current_user_can( 'update_core' ) ) { + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + } + + $cur = get_preferred_from_update_core(); + if ( ! is_object( $cur ) ) { + $cur = new stdClass; + } + + if ( ! isset( $cur->current ) ) { + $cur->current = ''; + } + + if ( ! isset( $cur->url ) ) { + $cur->url = ''; + } + + if ( ! isset( $cur->response ) ) { + $cur->response = ''; + } + + switch ( $cur->response ) { + case 'development': + /* translators: 1: WordPress version number, 2: WordPress updates admin screen URL */ + return sprintf( __( 'You are using a development version (%1$s). Cool! Please stay updated.' ), get_bloginfo( 'version', 'display' ), network_admin_url( 'update-core.php' ) ); + + case 'upgrade': + return '' . sprintf( __( 'Get Version %s' ), $cur->current ) . ''; + + case 'latest': + default: + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + } +} + +/** + * @global string $pagenow + * @return false|void + */ +function update_nag() { + if ( is_multisite() && ! current_user_can( 'update_core' ) ) { + return false; + } + + global $pagenow; + + if ( 'update-core.php' == $pagenow ) { + return; + } + + $cur = get_preferred_from_update_core(); + + if ( ! isset( $cur->response ) || $cur->response != 'upgrade' ) { + return false; + } + + $version_url = sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( $cur->current ) + ); + + if ( current_user_can( 'update_core' ) ) { + $msg = sprintf( + /* translators: 1: URL to WordPress release notes, 2: new WordPress version, 3: URL to network admin, 4: accessibility text */ + __( 'WordPress %2$s is available! Please update now.' ), + $version_url, + $cur->current, + network_admin_url( 'update-core.php' ), + esc_attr__( 'Please update WordPress now' ) + ); + } else { + $msg = sprintf( + /* translators: 1: URL to WordPress release notes, 2: new WordPress version */ + __( 'WordPress %2$s is available! Please notify the site administrator.' ), + $version_url, + $cur->current + ); + } + echo "
      $msg
      "; +} + +// Called directly from dashboard +function update_right_now_message() { + $theme_name = wp_get_theme(); + if ( current_user_can( 'switch_themes' ) ) { + $theme_name = sprintf( '%1$s', $theme_name ); + } + + $msg = ''; + + if ( current_user_can( 'update_core' ) ) { + $cur = get_preferred_from_update_core(); + + if ( isset( $cur->response ) && $cur->response == 'upgrade' ) { + $msg .= '' . sprintf( __( 'Update to %s' ), $cur->current ? $cur->current : __( 'Latest' ) ) . ' '; + } + } + + /* translators: 1: version number, 2: theme name */ + $content = __( 'WordPress %1$s running %2$s theme.' ); + + /** + * Filters the text displayed in the 'At a Glance' dashboard widget. + * + * Prior to 3.8.0, the widget was named 'Right Now'. + * + * @since 4.4.0 + * + * @param string $content Default text. + */ + $content = apply_filters( 'update_right_now_text', $content ); + + $msg .= sprintf( '' . $content . '', get_bloginfo( 'version', 'display' ), $theme_name ); + + echo "

      $msg

      "; +} + +/** + * @since 2.9.0 + * + * @return array + */ +function get_plugin_updates() { + $all_plugins = get_plugins(); + $upgrade_plugins = array(); + $current = get_site_transient( 'update_plugins' ); + foreach ( (array) $all_plugins as $plugin_file => $plugin_data ) { + if ( isset( $current->response[ $plugin_file ] ) ) { + $upgrade_plugins[ $plugin_file ] = (object) $plugin_data; + $upgrade_plugins[ $plugin_file ]->update = $current->response[ $plugin_file ]; + } + } + + return $upgrade_plugins; +} + +/** + * @since 2.9.0 + */ +function wp_plugin_update_rows() { + if ( ! current_user_can( 'update_plugins' ) ) { + return; + } + + $plugins = get_site_transient( 'update_plugins' ); + if ( isset( $plugins->response ) && is_array( $plugins->response ) ) { + $plugins = array_keys( $plugins->response ); + foreach ( $plugins as $plugin_file ) { + add_action( "after_plugin_row_$plugin_file", 'wp_plugin_update_row', 10, 2 ); + } + } +} + +/** + * Displays update information for a plugin. + * + * @param string $file Plugin basename. + * @param array $plugin_data Plugin information. + * @return false|void + */ +function wp_plugin_update_row( $file, $plugin_data ) { + $current = get_site_transient( 'update_plugins' ); + if ( ! isset( $current->response[ $file ] ) ) { + return false; + } + + $response = $current->response[ $file ]; + + $plugins_allowedtags = array( + 'a' => array( + 'href' => array(), + 'title' => array(), + ), + 'abbr' => array( 'title' => array() ), + 'acronym' => array( 'title' => array() ), + 'code' => array(), + 'em' => array(), + 'strong' => array(), + ); + + $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); + $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $response->slug . '§ion=changelog&TB_iframe=true&width=600&height=800' ); + + /** @var WP_Plugins_List_Table $wp_list_table */ + $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); + + if ( is_network_admin() || ! is_multisite() ) { + if ( is_network_admin() ) { + $active_class = is_plugin_active_for_network( $file ) ? ' active' : ''; + } else { + $active_class = is_plugin_active( $file ) ? ' active' : ''; + } + + $requires_php = isset( $response->requires_php ) ? $response->requires_php : null; + $compatible_php = is_php_version_compatible( $requires_php ); + $notice_type = $compatible_php ? 'notice-warning' : 'notice-error'; + + echo '

      '; + + if ( ! current_user_can( 'update_plugins' ) ) { + /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details.' ), + $plugin_name, + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) + ), + esc_attr( $response->new_version ) + ); + } elseif ( empty( $response->package ) ) { + /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin.' ), + $plugin_name, + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) + ), + esc_attr( $response->new_version ) + ); + } else { + if ( $compatible_php ) { + /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number, 5: update URL, 6: additional link attributes */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details or update now.' ), + $plugin_name, + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) + ), + esc_attr( $response->new_version ), + wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file, 'upgrade-plugin_' . $file ), + sprintf( + 'class="update-link" aria-label="%s"', + /* translators: %s: plugin name */ + esc_attr( sprintf( __( 'Update %s now' ), $plugin_name ) ) + ) + ); + } else { + /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number 5: Update PHP page URL */ + printf( + __( 'There is a new version of %1$s available, but it doesn’t work with your version of PHP. View version %4$s details or learn more about updating PHP.' ), + $plugin_name, + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) + ), + esc_attr( $response->new_version ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '
      ', '' ); + } + } + + /** + * Fires at the end of the update message container in each + * row of the plugins list table. + * + * The dynamic portion of the hook name, `$file`, refers to the path + * of the plugin's primary file relative to the plugins directory. + * + * @since 2.8.0 + * + * @param array $plugin_data { + * An array of plugin metadata. + * + * @type string $name The human-readable name of the plugin. + * @type string $plugin_uri Plugin URI. + * @type string $version Plugin version. + * @type string $description Plugin description. + * @type string $author Plugin author. + * @type string $author_uri Plugin author URI. + * @type string $text_domain Plugin text domain. + * @type string $domain_path Relative path to the plugin's .mo file(s). + * @type bool $network Whether the plugin can only be activated network wide. + * @type string $title The human-readable title of the plugin. + * @type string $author_name Plugin author's name. + * @type bool $update Whether there's an available update. Default null. + * } + * @param array $response { + * An array of metadata about the available plugin update. + * + * @type int $id Plugin ID. + * @type string $slug Plugin slug. + * @type string $new_version New plugin version. + * @type string $url Plugin URL. + * @type string $package Plugin update package URL. + * } + */ + do_action( "in_plugin_update_message-{$file}", $plugin_data, $response ); + + echo '

      '; + } +} + +/** + * @return array + */ +function get_theme_updates() { + $current = get_site_transient( 'update_themes' ); + + if ( ! isset( $current->response ) ) { + return array(); + } + + $update_themes = array(); + foreach ( $current->response as $stylesheet => $data ) { + $update_themes[ $stylesheet ] = wp_get_theme( $stylesheet ); + $update_themes[ $stylesheet ]->update = $data; + } + + return $update_themes; +} + +/** + * @since 3.1.0 + */ +function wp_theme_update_rows() { + if ( ! current_user_can( 'update_themes' ) ) { + return; + } + + $themes = get_site_transient( 'update_themes' ); + if ( isset( $themes->response ) && is_array( $themes->response ) ) { + $themes = array_keys( $themes->response ); + + foreach ( $themes as $theme ) { + add_action( "after_theme_row_$theme", 'wp_theme_update_row', 10, 2 ); + } + } +} + +/** + * Displays update information for a theme. + * + * @param string $theme_key Theme stylesheet. + * @param WP_Theme $theme Theme object. + * @return false|void + */ +function wp_theme_update_row( $theme_key, $theme ) { + $current = get_site_transient( 'update_themes' ); + + if ( ! isset( $current->response[ $theme_key ] ) ) { + return false; + } + + $response = $current->response[ $theme_key ]; + + $details_url = add_query_arg( + array( + 'TB_iframe' => 'true', + 'width' => 1024, + 'height' => 800, + ), + $current->response[ $theme_key ]['url'] + ); + + /** @var WP_MS_Themes_List_Table $wp_list_table */ + $wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' ); + + $active = $theme->is_allowed( 'network' ) ? ' active' : ''; + + echo '

      '; + if ( ! current_user_can( 'update_themes' ) ) { + /* translators: 1: theme name, 2: details URL, 3: additional link attributes, 4: version number */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details.' ), + $theme['Name'], + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: theme name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $theme['Name'], $response['new_version'] ) ) + ), + $response['new_version'] + ); + } elseif ( empty( $response['package'] ) ) { + /* translators: 1: theme name, 2: details URL, 3: additional link attributes, 4: version number */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme.' ), + $theme['Name'], + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: theme name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $theme['Name'], $response['new_version'] ) ) + ), + $response['new_version'] + ); + } else { + /* translators: 1: theme name, 2: details URL, 3: additional link attributes, 4: version number, 5: update URL, 6: additional link attributes */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details or update now.' ), + $theme['Name'], + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: theme name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $theme['Name'], $response['new_version'] ) ) + ), + $response['new_version'], + wp_nonce_url( self_admin_url( 'update.php?action=upgrade-theme&theme=' ) . $theme_key, 'upgrade-theme_' . $theme_key ), + sprintf( + 'class="update-link" aria-label="%s"', + /* translators: %s: theme name */ + esc_attr( sprintf( __( 'Update %s now' ), $theme['Name'] ) ) + ) + ); + } + + /** + * Fires at the end of the update message container in each + * row of the themes list table. + * + * The dynamic portion of the hook name, `$theme_key`, refers to + * the theme slug as found in the WordPress.org themes repository. + * + * @since 3.1.0 + * + * @param WP_Theme $theme The WP_Theme object. + * @param array $response { + * An array of metadata about the available theme update. + * + * @type string $new_version New theme version. + * @type string $url Theme URL. + * @type string $package Theme update package URL. + * } + */ + do_action( "in_theme_update_message-{$theme_key}", $theme, $response ); + + echo '

      '; +} + +/** + * @global int $upgrading + * @return false|void + */ +function maintenance_nag() { + include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version + global $upgrading; + $nag = isset( $upgrading ); + if ( ! $nag ) { + $failed = get_site_option( 'auto_core_update_failed' ); + /* + * If an update failed critically, we may have copied over version.php but not other files. + * In that case, if the installation claims we're running the version we attempted, nag. + * This is serious enough to err on the side of nagging. + * + * If we simply failed to update before we tried to copy any files, then assume things are + * OK if they are now running the latest. + * + * This flag is cleared whenever a successful update occurs using Core_Upgrader. + */ + $comparison = ! empty( $failed['critical'] ) ? '>=' : '>'; + if ( version_compare( $failed['attempted'], $wp_version, $comparison ) ) { + $nag = true; + } + } + + if ( ! $nag ) { + return false; + } + + if ( current_user_can( 'update_core' ) ) { + $msg = sprintf( __( 'An automated WordPress update has failed to complete - please attempt the update again now.' ), 'update-core.php' ); + } else { + $msg = __( 'An automated WordPress update has failed to complete! Please notify the site administrator.' ); + } + + echo "
      $msg
      "; +} + +/** + * Prints the JavaScript templates for update admin notices. + * + * Template takes one argument with four values: + * + * param {object} data { + * Arguments for admin notice. + * + * @type string id ID of the notice. + * @type string className Class names for the notice. + * @type string message The notice's message. + * @type string type The type of update the notice is for. Either 'plugin' or 'theme'. + * } + * + * @since 4.6.0 + */ +function wp_print_admin_notice_templates() { + ?> + + + + + + +
      +

      + Exit Recovery Mode' ), + esc_url( $url ) + ); + ?> +

      +
      + Note that password carefully! It is a random password that was generated just for you.' ); + $user_id = wp_create_user( $user_name, $user_password, $user_email ); + update_user_option( $user_id, 'default_password_nag', true, true ); + $email_password = true; + } elseif ( ! $user_id ) { + // Password has been provided + $message = '' . __( 'Your chosen password.' ) . ''; + $user_id = wp_create_user( $user_name, $user_password, $user_email ); + } else { + $message = __( 'User already exists. Password inherited.' ); + } + + $user = new WP_User( $user_id ); + $user->set_role( 'administrator' ); + + wp_install_defaults( $user_id ); + + wp_install_maybe_enable_pretty_permalinks(); + + flush_rewrite_rules(); + + wp_new_blog_notification( $blog_title, $guessurl, $user_id, ( $email_password ? $user_password : __( 'The password you chose during installation.' ) ) ); + + wp_cache_flush(); + + /** + * Fires after a site is fully installed. + * + * @since 3.9.0 + * + * @param WP_User $user The site owner. + */ + do_action( 'wp_install', $user ); + + return array( + 'url' => $guessurl, + 'user_id' => $user_id, + 'password' => $user_password, + 'password_message' => $message, + ); + } +endif; + +if ( ! function_exists( 'wp_install_defaults' ) ) : + /** + * Creates the initial content for a newly-installed site. + * + * Adds the default "Uncategorized" category, the first post (with comment), + * first page, and default widgets for default theme for the current version. + * + * @since 2.1.0 + * + * @global wpdb $wpdb + * @global WP_Rewrite $wp_rewrite + * @global string $table_prefix + * + * @param int $user_id User ID. + */ + function wp_install_defaults( $user_id ) { + global $wpdb, $wp_rewrite, $table_prefix; + + // Default category + $cat_name = __( 'Uncategorized' ); + /* translators: Default category slug */ + $cat_slug = sanitize_title( _x( 'Uncategorized', 'Default category slug' ) ); + + if ( global_terms_enabled() ) { + $cat_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM {$wpdb->sitecategories} WHERE category_nicename = %s", $cat_slug ) ); + if ( $cat_id == null ) { + $wpdb->insert( + $wpdb->sitecategories, + array( + 'cat_ID' => 0, + 'cat_name' => $cat_name, + 'category_nicename' => $cat_slug, + 'last_updated' => current_time( 'mysql', true ), + ) + ); + $cat_id = $wpdb->insert_id; + } + update_option( 'default_category', $cat_id ); + } else { + $cat_id = 1; + } + + $wpdb->insert( + $wpdb->terms, + array( + 'term_id' => $cat_id, + 'name' => $cat_name, + 'slug' => $cat_slug, + 'term_group' => 0, + ) + ); + $wpdb->insert( + $wpdb->term_taxonomy, + array( + 'term_id' => $cat_id, + 'taxonomy' => 'category', + 'description' => '', + 'parent' => 0, + 'count' => 1, + ) + ); + $cat_tt_id = $wpdb->insert_id; + + // First post + $now = current_time( 'mysql' ); + $now_gmt = current_time( 'mysql', 1 ); + $first_post_guid = get_option( 'home' ) . '/?p=1'; + + if ( is_multisite() ) { + $first_post = get_site_option( 'first_post' ); + + if ( ! $first_post ) { + $first_post = "\n

      " . + /* translators: first post content, %s: site link */ + __( 'Welcome to %s. This is your first post. Edit or delete it, then start writing!' ) . + "

      \n"; + } + + $first_post = sprintf( + $first_post, + sprintf( '%s', esc_url( network_home_url() ), get_network()->site_name ) + ); + + // Back-compat for pre-4.4 + $first_post = str_replace( 'SITE_URL', esc_url( network_home_url() ), $first_post ); + $first_post = str_replace( 'SITE_NAME', get_network()->site_name, $first_post ); + } else { + $first_post = "\n

      " . + /* translators: first post content, %s: site link */ + __( 'Welcome to WordPress. This is your first post. Edit or delete it, then start writing!' ) . + "

      \n"; + } + + $wpdb->insert( + $wpdb->posts, + array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $first_post, + 'post_excerpt' => '', + 'post_title' => __( 'Hello world!' ), + /* translators: Default post slug */ + 'post_name' => sanitize_title( _x( 'hello-world', 'Default post slug' ) ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $first_post_guid, + 'comment_count' => 1, + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '', + ) + ); + $wpdb->insert( + $wpdb->term_relationships, + array( + 'term_taxonomy_id' => $cat_tt_id, + 'object_id' => 1, + ) + ); + + // Default comment + if ( is_multisite() ) { + $first_comment_author = get_site_option( 'first_comment_author' ); + $first_comment_email = get_site_option( 'first_comment_email' ); + $first_comment_url = get_site_option( 'first_comment_url', network_home_url() ); + $first_comment = get_site_option( 'first_comment' ); + } + + $first_comment_author = ! empty( $first_comment_author ) ? $first_comment_author : __( 'A WordPress Commenter' ); + $first_comment_email = ! empty( $first_comment_email ) ? $first_comment_email : 'wapuu@wordpress.example'; + $first_comment_url = ! empty( $first_comment_url ) ? $first_comment_url : 'https://wordpress.org/'; + $first_comment = ! empty( $first_comment ) ? $first_comment : __( + 'Hi, this is a comment. +To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard. +Commenter avatars come from Gravatar.' + ); + $wpdb->insert( + $wpdb->comments, + array( + 'comment_post_ID' => 1, + 'comment_author' => $first_comment_author, + 'comment_author_email' => $first_comment_email, + 'comment_author_url' => $first_comment_url, + 'comment_date' => $now, + 'comment_date_gmt' => $now_gmt, + 'comment_content' => $first_comment, + ) + ); + + // First Page + if ( is_multisite() ) { + $first_page = get_site_option( 'first_page' ); + } + + if ( empty( $first_page ) ) { + $first_page = "\n

      "; + /* translators: first page content */ + $first_page .= __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:" ); + $first_page .= "

      \n\n\n"; + + $first_page .= "\n

      "; + /* translators: first page content */ + $first_page .= __( "Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)" ); + $first_page .= "

      \n\n\n"; + + $first_page .= "\n

      "; + /* translators: first page content */ + $first_page .= __( '...or something like this:' ); + $first_page .= "

      \n\n\n"; + + $first_page .= "\n

      "; + /* translators: first page content */ + $first_page .= __( 'The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.' ); + $first_page .= "

      \n\n\n"; + + $first_page .= "\n

      "; + $first_page .= sprintf( + /* translators: first page content, %s: site admin URL */ + __( 'As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!' ), + admin_url() + ); + $first_page .= "

      \n"; + } + + $first_post_guid = get_option( 'home' ) . '/?page_id=2'; + $wpdb->insert( + $wpdb->posts, + array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $first_page, + 'post_excerpt' => '', + 'comment_status' => 'closed', + 'post_title' => __( 'Sample Page' ), + /* translators: Default page slug */ + 'post_name' => __( 'sample-page' ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $first_post_guid, + 'post_type' => 'page', + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '', + ) + ); + $wpdb->insert( + $wpdb->postmeta, + array( + 'post_id' => 2, + 'meta_key' => '_wp_page_template', + 'meta_value' => 'default', + ) + ); + + // Privacy Policy page + if ( is_multisite() ) { + // Disable by default unless the suggested content is provided. + $privacy_policy_content = get_site_option( 'default_privacy_policy_content' ); + } else { + if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) { + include_once( ABSPATH . 'wp-admin/includes/misc.php' ); + } + + $privacy_policy_content = WP_Privacy_Policy_Content::get_default_content(); + } + + if ( ! empty( $privacy_policy_content ) ) { + $privacy_policy_guid = get_option( 'home' ) . '/?page_id=3'; + + $wpdb->insert( + $wpdb->posts, + array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $privacy_policy_content, + 'post_excerpt' => '', + 'comment_status' => 'closed', + 'post_title' => __( 'Privacy Policy' ), + /* translators: Privacy Policy page slug */ + 'post_name' => __( 'privacy-policy' ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $privacy_policy_guid, + 'post_type' => 'page', + 'post_status' => 'draft', + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '', + ) + ); + $wpdb->insert( + $wpdb->postmeta, + array( + 'post_id' => 3, + 'meta_key' => '_wp_page_template', + 'meta_value' => 'default', + ) + ); + update_option( 'wp_page_for_privacy_policy', 3 ); + } + + // Set up default widgets for default theme. + update_option( + 'widget_search', + array( + 2 => array( 'title' => '' ), + '_multiwidget' => 1, + ) + ); + update_option( + 'widget_recent-posts', + array( + 2 => array( + 'title' => '', + 'number' => 5, + ), + '_multiwidget' => 1, + ) + ); + update_option( + 'widget_recent-comments', + array( + 2 => array( + 'title' => '', + 'number' => 5, + ), + '_multiwidget' => 1, + ) + ); + update_option( + 'widget_archives', + array( + 2 => array( + 'title' => '', + 'count' => 0, + 'dropdown' => 0, + ), + '_multiwidget' => 1, + ) + ); + update_option( + 'widget_categories', + array( + 2 => array( + 'title' => '', + 'count' => 0, + 'hierarchical' => 0, + 'dropdown' => 0, + ), + '_multiwidget' => 1, + ) + ); + update_option( + 'widget_meta', + array( + 2 => array( 'title' => '' ), + '_multiwidget' => 1, + ) + ); + update_option( + 'sidebars_widgets', + array( + 'wp_inactive_widgets' => array(), + 'sidebar-1' => array( + 0 => 'search-2', + 1 => 'recent-posts-2', + 2 => 'recent-comments-2', + 3 => 'archives-2', + 4 => 'categories-2', + 5 => 'meta-2', + ), + 'array_version' => 3, + ) + ); + if ( ! is_multisite() ) { + update_user_meta( $user_id, 'show_welcome_panel', 1 ); + } elseif ( ! is_super_admin( $user_id ) && ! metadata_exists( 'user', $user_id, 'show_welcome_panel' ) ) { + update_user_meta( $user_id, 'show_welcome_panel', 2 ); + } + + if ( is_multisite() ) { + // Flush rules to pick up the new page. + $wp_rewrite->init(); + $wp_rewrite->flush_rules(); + + $user = new WP_User( $user_id ); + $wpdb->update( $wpdb->options, array( 'option_value' => $user->user_email ), array( 'option_name' => 'admin_email' ) ); + + // Remove all perms except for the login user. + $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix . 'user_level' ) ); + $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix . 'capabilities' ) ); + + // Delete any caps that snuck into the previously active blog. (Hardcoded to blog 1 for now.) TODO: Get previous_blog_id. + if ( ! is_super_admin( $user_id ) && $user_id != 1 ) { + $wpdb->delete( + $wpdb->usermeta, + array( + 'user_id' => $user_id, + 'meta_key' => $wpdb->base_prefix . '1_capabilities', + ) + ); + } + } + } +endif; + +/** + * Maybe enable pretty permalinks on installation. + * + * If after enabling pretty permalinks don't work, fallback to query-string permalinks. + * + * @since 4.2.0 + * + * @global WP_Rewrite $wp_rewrite WordPress rewrite component. + * + * @return bool Whether pretty permalinks are enabled. False otherwise. + */ +function wp_install_maybe_enable_pretty_permalinks() { + global $wp_rewrite; + + // Bail if a permalink structure is already enabled. + if ( get_option( 'permalink_structure' ) ) { + return true; + } + + /* + * The Permalink structures to attempt. + * + * The first is designed for mod_rewrite or nginx rewriting. + * + * The second is PATHINFO-based permalinks for web server configurations + * without a true rewrite module enabled. + */ + $permalink_structures = array( + '/%year%/%monthnum%/%day%/%postname%/', + '/index.php/%year%/%monthnum%/%day%/%postname%/', + ); + + foreach ( (array) $permalink_structures as $permalink_structure ) { + $wp_rewrite->set_permalink_structure( $permalink_structure ); + + /* + * Flush rules with the hard option to force refresh of the web-server's + * rewrite config file (e.g. .htaccess or web.config). + */ + $wp_rewrite->flush_rules( true ); + + $test_url = ''; + + // Test against a real WordPress Post + $first_post = get_page_by_path( sanitize_title( _x( 'hello-world', 'Default post slug' ) ), OBJECT, 'post' ); + if ( $first_post ) { + $test_url = get_permalink( $first_post->ID ); + } + + /* + * Send a request to the site, and check whether + * the 'x-pingback' header is returned as expected. + * + * Uses wp_remote_get() instead of wp_remote_head() because web servers + * can block head requests. + */ + $response = wp_remote_get( $test_url, array( 'timeout' => 5 ) ); + $x_pingback_header = wp_remote_retrieve_header( $response, 'x-pingback' ); + $pretty_permalinks = $x_pingback_header && $x_pingback_header === get_bloginfo( 'pingback_url' ); + + if ( $pretty_permalinks ) { + return true; + } + } + + /* + * If it makes it this far, pretty permalinks failed. + * Fallback to query-string permalinks. + */ + $wp_rewrite->set_permalink_structure( '' ); + $wp_rewrite->flush_rules( true ); + + return false; +} + +if ( ! function_exists( 'wp_new_blog_notification' ) ) : + /** + * Notifies the site admin that the setup is complete. + * + * Sends an email with wp_mail to the new administrator that the site setup is complete, + * and provides them with a record of their login credentials. + * + * @since 2.1.0 + * + * @param string $blog_title Site title. + * @param string $blog_url Site url. + * @param int $user_id User ID. + * @param string $password User's Password. + */ + function wp_new_blog_notification( $blog_title, $blog_url, $user_id, $password ) { + $user = new WP_User( $user_id ); + $email = $user->user_email; + $name = $user->user_login; + $login_url = wp_login_url(); + /* translators: New site notification email. 1: New site URL, 2: User login, 3: User password or password reset link, 4: Login URL */ + $message = sprintf( + __( + 'Your new WordPress site has been successfully set up at: + +%1$s + +You can log in to the administrator account with the following information: + +Username: %2$s +Password: %3$s +Log in here: %4$s + +We hope you enjoy your new site. Thanks! + +--The WordPress Team +https://wordpress.org/ +' + ), + $blog_url, + $name, + $password, + $login_url + ); + + @wp_mail( $email, __( 'New WordPress Site' ), $message ); + } +endif; + +if ( ! function_exists( 'wp_upgrade' ) ) : + /** + * Runs WordPress Upgrade functions. + * + * Upgrades the database if needed during a site update. + * + * @since 2.1.0 + * + * @global int $wp_current_db_version + * @global int $wp_db_version + * @global wpdb $wpdb WordPress database abstraction object. + */ + function wp_upgrade() { + global $wp_current_db_version, $wp_db_version, $wpdb; + + $wp_current_db_version = __get_option( 'db_version' ); + + // We are up-to-date. Nothing to do. + if ( $wp_db_version == $wp_current_db_version ) { + return; + } + + if ( ! is_blog_installed() ) { + return; + } + + wp_check_mysql_version(); + wp_cache_flush(); + pre_schema_upgrade(); + make_db_current_silent(); + upgrade_all(); + if ( is_multisite() && is_main_site() ) { + upgrade_network(); + } + wp_cache_flush(); + + if ( is_multisite() ) { + $site_id = get_current_blog_id(); + + if ( $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM {$wpdb->blog_versions} WHERE blog_id = %d", $site_id ) ) ) { + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->blog_versions} SET db_version = %d WHERE blog_id = %d", $wp_db_version, $site_id ) ); + } else { + $wpdb->query( $wpdb->prepare( "INSERT INTO {$wpdb->blog_versions} ( `blog_id` , `db_version` , `last_updated` ) VALUES ( %d, %d, NOW() );", $site_id, $wp_db_version ) ); + } + } + + /** + * Fires after a site is fully upgraded. + * + * @since 3.9.0 + * + * @param int $wp_db_version The new $wp_db_version. + * @param int $wp_current_db_version The old (current) $wp_db_version. + */ + do_action( 'wp_upgrade', $wp_db_version, $wp_current_db_version ); + } +endif; + +/** + * Functions to be called in installation and upgrade scripts. + * + * Contains conditional checks to determine which upgrade scripts to run, + * based on database version and WP version being updated-to. + * + * @ignore + * @since 1.0.1 + * + * @global int $wp_current_db_version + * @global int $wp_db_version + */ +function upgrade_all() { + global $wp_current_db_version, $wp_db_version; + $wp_current_db_version = __get_option( 'db_version' ); + + // We are up-to-date. Nothing to do. + if ( $wp_db_version == $wp_current_db_version ) { + return; + } + + // If the version is not set in the DB, try to guess the version. + if ( empty( $wp_current_db_version ) ) { + $wp_current_db_version = 0; + + // If the template option exists, we have 1.5. + $template = __get_option( 'template' ); + if ( ! empty( $template ) ) { + $wp_current_db_version = 2541; + } + } + + if ( $wp_current_db_version < 6039 ) { + upgrade_230_options_table(); + } + + populate_options(); + + if ( $wp_current_db_version < 2541 ) { + upgrade_100(); + upgrade_101(); + upgrade_110(); + upgrade_130(); + } + + if ( $wp_current_db_version < 3308 ) { + upgrade_160(); + } + + if ( $wp_current_db_version < 4772 ) { + upgrade_210(); + } + + if ( $wp_current_db_version < 4351 ) { + upgrade_old_slugs(); + } + + if ( $wp_current_db_version < 5539 ) { + upgrade_230(); + } + + if ( $wp_current_db_version < 6124 ) { + upgrade_230_old_tables(); + } + + if ( $wp_current_db_version < 7499 ) { + upgrade_250(); + } + + if ( $wp_current_db_version < 7935 ) { + upgrade_252(); + } + + if ( $wp_current_db_version < 8201 ) { + upgrade_260(); + } + + if ( $wp_current_db_version < 8989 ) { + upgrade_270(); + } + + if ( $wp_current_db_version < 10360 ) { + upgrade_280(); + } + + if ( $wp_current_db_version < 11958 ) { + upgrade_290(); + } + + if ( $wp_current_db_version < 15260 ) { + upgrade_300(); + } + + if ( $wp_current_db_version < 19389 ) { + upgrade_330(); + } + + if ( $wp_current_db_version < 20080 ) { + upgrade_340(); + } + + if ( $wp_current_db_version < 22422 ) { + upgrade_350(); + } + + if ( $wp_current_db_version < 25824 ) { + upgrade_370(); + } + + if ( $wp_current_db_version < 26148 ) { + upgrade_372(); + } + + if ( $wp_current_db_version < 26691 ) { + upgrade_380(); + } + + if ( $wp_current_db_version < 29630 ) { + upgrade_400(); + } + + if ( $wp_current_db_version < 33055 ) { + upgrade_430(); + } + + if ( $wp_current_db_version < 33056 ) { + upgrade_431(); + } + + if ( $wp_current_db_version < 35700 ) { + upgrade_440(); + } + + if ( $wp_current_db_version < 36686 ) { + upgrade_450(); + } + + if ( $wp_current_db_version < 37965 ) { + upgrade_460(); + } + + if ( $wp_current_db_version < 44719 ) { + upgrade_510(); + } + + maybe_disable_link_manager(); + + maybe_disable_automattic_widgets(); + + update_option( 'db_version', $wp_db_version ); + update_option( 'db_upgraded', true ); +} + +/** + * Execute changes made in WordPress 1.0. + * + * @ignore + * @since 1.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_100() { + global $wpdb; + + // Get the title and ID of every post, post_name to check if it already has a value + $posts = $wpdb->get_results( "SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''" ); + if ( $posts ) { + foreach ( $posts as $post ) { + if ( '' == $post->post_name ) { + $newtitle = sanitize_title( $post->post_title ); + $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_name = %s WHERE ID = %d", $newtitle, $post->ID ) ); + } + } + } + + $categories = $wpdb->get_results( "SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories" ); + foreach ( $categories as $category ) { + if ( '' == $category->category_nicename ) { + $newtitle = sanitize_title( $category->cat_name ); + $wpdb->update( $wpdb->categories, array( 'category_nicename' => $newtitle ), array( 'cat_ID' => $category->cat_ID ) ); + } + } + + $sql = "UPDATE $wpdb->options + SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') + WHERE option_name LIKE %s + AND option_value LIKE %s"; + $wpdb->query( $wpdb->prepare( $sql, $wpdb->esc_like( 'links_rating_image' ) . '%', $wpdb->esc_like( 'wp-links/links-images/' ) . '%' ) ); + + $done_ids = $wpdb->get_results( "SELECT DISTINCT post_id FROM $wpdb->post2cat" ); + if ( $done_ids ) : + $done_posts = array(); + foreach ( $done_ids as $done_id ) : + $done_posts[] = $done_id->post_id; + endforeach; + $catwhere = ' AND ID NOT IN (' . implode( ',', $done_posts ) . ')'; + else : + $catwhere = ''; + endif; + + $allposts = $wpdb->get_results( "SELECT ID, post_category FROM $wpdb->posts WHERE post_category != '0' $catwhere" ); + if ( $allposts ) : + foreach ( $allposts as $post ) { + // Check to see if it's already been imported + $cat = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->post2cat WHERE post_id = %d AND category_id = %d", $post->ID, $post->post_category ) ); + if ( ! $cat && 0 != $post->post_category ) { // If there's no result + $wpdb->insert( + $wpdb->post2cat, + array( + 'post_id' => $post->ID, + 'category_id' => $post->post_category, + ) + ); + } + } + endif; +} + +/** + * Execute changes made in WordPress 1.0.1. + * + * @ignore + * @since 1.0.1 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_101() { + global $wpdb; + + // Clean up indices, add a few + add_clean_index( $wpdb->posts, 'post_name' ); + add_clean_index( $wpdb->posts, 'post_status' ); + add_clean_index( $wpdb->categories, 'category_nicename' ); + add_clean_index( $wpdb->comments, 'comment_approved' ); + add_clean_index( $wpdb->comments, 'comment_post_ID' ); + add_clean_index( $wpdb->links, 'link_category' ); + add_clean_index( $wpdb->links, 'link_visible' ); +} + +/** + * Execute changes made in WordPress 1.2. + * + * @ignore + * @since 1.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_110() { + global $wpdb; + + // Set user_nicename. + $users = $wpdb->get_results( "SELECT ID, user_nickname, user_nicename FROM $wpdb->users" ); + foreach ( $users as $user ) { + if ( '' == $user->user_nicename ) { + $newname = sanitize_title( $user->user_nickname ); + $wpdb->update( $wpdb->users, array( 'user_nicename' => $newname ), array( 'ID' => $user->ID ) ); + } + } + + $users = $wpdb->get_results( "SELECT ID, user_pass from $wpdb->users" ); + foreach ( $users as $row ) { + if ( ! preg_match( '/^[A-Fa-f0-9]{32}$/', $row->user_pass ) ) { + $wpdb->update( $wpdb->users, array( 'user_pass' => md5( $row->user_pass ) ), array( 'ID' => $row->ID ) ); + } + } + + // Get the GMT offset, we'll use that later on + $all_options = get_alloptions_110(); + + $time_difference = $all_options->time_difference; + + $server_time = time() + date( 'Z' ); + $weblogger_time = $server_time + $time_difference * HOUR_IN_SECONDS; + $gmt_time = time(); + + $diff_gmt_server = ( $gmt_time - $server_time ) / HOUR_IN_SECONDS; + $diff_weblogger_server = ( $weblogger_time - $server_time ) / HOUR_IN_SECONDS; + $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; + $gmt_offset = -$diff_gmt_weblogger; + + // Add a gmt_offset option, with value $gmt_offset + add_option( 'gmt_offset', $gmt_offset ); + + // Check if we already set the GMT fields (if we did, then + // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' + // I just slapped myself silly for not thinking about it earlier + $got_gmt_fields = ! ( $wpdb->get_var( "SELECT MAX(post_date_gmt) FROM $wpdb->posts" ) == '0000-00-00 00:00:00' ); + + if ( ! $got_gmt_fields ) { + + // Add or subtract time to all dates, to get GMT dates + $add_hours = intval( $diff_gmt_weblogger ); + $add_minutes = intval( 60 * ( $diff_gmt_weblogger - $add_hours ) ); + $wpdb->query( "UPDATE $wpdb->posts SET post_date_gmt = DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)" ); + $wpdb->query( "UPDATE $wpdb->posts SET post_modified = post_date" ); + $wpdb->query( "UPDATE $wpdb->posts SET post_modified_gmt = DATE_ADD(post_modified, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE) WHERE post_modified != '0000-00-00 00:00:00'" ); + $wpdb->query( "UPDATE $wpdb->comments SET comment_date_gmt = DATE_ADD(comment_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)" ); + $wpdb->query( "UPDATE $wpdb->users SET user_registered = DATE_ADD(user_registered, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)" ); + } + +} + +/** + * Execute changes made in WordPress 1.5. + * + * @ignore + * @since 1.5.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_130() { + global $wpdb; + + // Remove extraneous backslashes. + $posts = $wpdb->get_results( "SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts" ); + if ( $posts ) { + foreach ( $posts as $post ) { + $post_content = addslashes( deslash( $post->post_content ) ); + $post_title = addslashes( deslash( $post->post_title ) ); + $post_excerpt = addslashes( deslash( $post->post_excerpt ) ); + if ( empty( $post->guid ) ) { + $guid = get_permalink( $post->ID ); + } else { + $guid = $post->guid; + } + + $wpdb->update( $wpdb->posts, compact( 'post_title', 'post_content', 'post_excerpt', 'guid' ), array( 'ID' => $post->ID ) ); + + } + } + + // Remove extraneous backslashes. + $comments = $wpdb->get_results( "SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments" ); + if ( $comments ) { + foreach ( $comments as $comment ) { + $comment_content = deslash( $comment->comment_content ); + $comment_author = deslash( $comment->comment_author ); + + $wpdb->update( $wpdb->comments, compact( 'comment_content', 'comment_author' ), array( 'comment_ID' => $comment->comment_ID ) ); + } + } + + // Remove extraneous backslashes. + $links = $wpdb->get_results( "SELECT link_id, link_name, link_description FROM $wpdb->links" ); + if ( $links ) { + foreach ( $links as $link ) { + $link_name = deslash( $link->link_name ); + $link_description = deslash( $link->link_description ); + + $wpdb->update( $wpdb->links, compact( 'link_name', 'link_description' ), array( 'link_id' => $link->link_id ) ); + } + } + + $active_plugins = __get_option( 'active_plugins' ); + + /* + * If plugins are not stored in an array, they're stored in the old + * newline separated format. Convert to new format. + */ + if ( ! is_array( $active_plugins ) ) { + $active_plugins = explode( "\n", trim( $active_plugins ) ); + update_option( 'active_plugins', $active_plugins ); + } + + // Obsolete tables + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optionvalues' ); + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiontypes' ); + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroups' ); + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroup_options' ); + + // Update comments table to use comment_type + $wpdb->query( "UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'" ); + $wpdb->query( "UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'" ); + + // Some versions have multiple duplicate option_name rows with the same values + $options = $wpdb->get_results( "SELECT option_name, COUNT(option_name) AS dupes FROM `$wpdb->options` GROUP BY option_name" ); + foreach ( $options as $option ) { + if ( 1 != $option->dupes ) { // Could this be done in the query? + $limit = $option->dupes - 1; + $dupe_ids = $wpdb->get_col( $wpdb->prepare( "SELECT option_id FROM $wpdb->options WHERE option_name = %s LIMIT %d", $option->option_name, $limit ) ); + if ( $dupe_ids ) { + $dupe_ids = join( $dupe_ids, ',' ); + $wpdb->query( "DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)" ); + } + } + } + + make_site_theme(); +} + +/** + * Execute changes made in WordPress 2.0. + * + * @ignore + * @since 2.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_current_db_version + */ +function upgrade_160() { + global $wpdb, $wp_current_db_version; + + populate_roles_160(); + + $users = $wpdb->get_results( "SELECT * FROM $wpdb->users" ); + foreach ( $users as $user ) : + if ( ! empty( $user->user_firstname ) ) { + update_user_meta( $user->ID, 'first_name', wp_slash( $user->user_firstname ) ); + } + if ( ! empty( $user->user_lastname ) ) { + update_user_meta( $user->ID, 'last_name', wp_slash( $user->user_lastname ) ); + } + if ( ! empty( $user->user_nickname ) ) { + update_user_meta( $user->ID, 'nickname', wp_slash( $user->user_nickname ) ); + } + if ( ! empty( $user->user_level ) ) { + update_user_meta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); + } + if ( ! empty( $user->user_icq ) ) { + update_user_meta( $user->ID, 'icq', wp_slash( $user->user_icq ) ); + } + if ( ! empty( $user->user_aim ) ) { + update_user_meta( $user->ID, 'aim', wp_slash( $user->user_aim ) ); + } + if ( ! empty( $user->user_msn ) ) { + update_user_meta( $user->ID, 'msn', wp_slash( $user->user_msn ) ); + } + if ( ! empty( $user->user_yim ) ) { + update_user_meta( $user->ID, 'yim', wp_slash( $user->user_icq ) ); + } + if ( ! empty( $user->user_description ) ) { + update_user_meta( $user->ID, 'description', wp_slash( $user->user_description ) ); + } + + if ( isset( $user->user_idmode ) ) : + $idmode = $user->user_idmode; + if ( $idmode == 'nickname' ) { + $id = $user->user_nickname; + } + if ( $idmode == 'login' ) { + $id = $user->user_login; + } + if ( $idmode == 'firstname' ) { + $id = $user->user_firstname; + } + if ( $idmode == 'lastname' ) { + $id = $user->user_lastname; + } + if ( $idmode == 'namefl' ) { + $id = $user->user_firstname . ' ' . $user->user_lastname; + } + if ( $idmode == 'namelf' ) { + $id = $user->user_lastname . ' ' . $user->user_firstname; + } + if ( ! $idmode ) { + $id = $user->user_nickname; + } + $wpdb->update( $wpdb->users, array( 'display_name' => $id ), array( 'ID' => $user->ID ) ); + endif; + + // FIXME: RESET_CAPS is temporary code to reset roles and caps if flag is set. + $caps = get_user_meta( $user->ID, $wpdb->prefix . 'capabilities' ); + if ( empty( $caps ) || defined( 'RESET_CAPS' ) ) { + $level = get_user_meta( $user->ID, $wpdb->prefix . 'user_level', true ); + $role = translate_level_to_role( $level ); + update_user_meta( $user->ID, $wpdb->prefix . 'capabilities', array( $role => true ) ); + } + + endforeach; + $old_user_fields = array( 'user_firstname', 'user_lastname', 'user_icq', 'user_aim', 'user_msn', 'user_yim', 'user_idmode', 'user_ip', 'user_domain', 'user_browser', 'user_description', 'user_nickname', 'user_level' ); + $wpdb->hide_errors(); + foreach ( $old_user_fields as $old ) { + $wpdb->query( "ALTER TABLE $wpdb->users DROP $old" ); + } + $wpdb->show_errors(); + + // Populate comment_count field of posts table. + $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); + if ( is_array( $comments ) ) { + foreach ( $comments as $comment ) { + $wpdb->update( $wpdb->posts, array( 'comment_count' => $comment->c ), array( 'ID' => $comment->comment_post_ID ) ); + } + } + + /* + * Some alpha versions used a post status of object instead of attachment + * and put the mime type in post_type instead of post_mime_type. + */ + if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { + $objects = $wpdb->get_results( "SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'" ); + foreach ( $objects as $object ) { + $wpdb->update( + $wpdb->posts, + array( + 'post_status' => 'attachment', + 'post_mime_type' => $object->post_type, + 'post_type' => '', + ), + array( 'ID' => $object->ID ) + ); + + $meta = get_post_meta( $object->ID, 'imagedata', true ); + if ( ! empty( $meta['file'] ) ) { + update_attached_file( $object->ID, $meta['file'] ); + } + } + } +} + +/** + * Execute changes made in WordPress 2.1. + * + * @ignore + * @since 2.1.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_current_db_version + */ +function upgrade_210() { + global $wpdb, $wp_current_db_version; + + if ( $wp_current_db_version < 3506 ) { + // Update status and type. + $posts = $wpdb->get_results( "SELECT ID, post_status FROM $wpdb->posts" ); + + if ( ! empty( $posts ) ) { + foreach ( $posts as $post ) { + $status = $post->post_status; + $type = 'post'; + + if ( 'static' == $status ) { + $status = 'publish'; + $type = 'page'; + } elseif ( 'attachment' == $status ) { + $status = 'inherit'; + $type = 'attachment'; + } + + $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_status = %s, post_type = %s WHERE ID = %d", $status, $type, $post->ID ) ); + } + } + } + + if ( $wp_current_db_version < 3845 ) { + populate_roles_210(); + } + + if ( $wp_current_db_version < 3531 ) { + // Give future posts a post_status of future. + $now = gmdate( 'Y-m-d H:i:59' ); + $wpdb->query( "UPDATE $wpdb->posts SET post_status = 'future' WHERE post_status = 'publish' AND post_date_gmt > '$now'" ); + + $posts = $wpdb->get_results( "SELECT ID, post_date FROM $wpdb->posts WHERE post_status ='future'" ); + if ( ! empty( $posts ) ) { + foreach ( $posts as $post ) { + wp_schedule_single_event( mysql2date( 'U', $post->post_date, false ), 'publish_future_post', array( $post->ID ) ); + } + } + } +} + +/** + * Execute changes made in WordPress 2.3. + * + * @ignore + * @since 2.3.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_current_db_version + */ +function upgrade_230() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 5200 ) { + populate_roles_230(); + } + + // Convert categories to terms. + $tt_ids = array(); + $have_tags = false; + $categories = $wpdb->get_results( "SELECT * FROM $wpdb->categories ORDER BY cat_ID" ); + foreach ( $categories as $category ) { + $term_id = (int) $category->cat_ID; + $name = $category->cat_name; + $description = $category->category_description; + $slug = $category->category_nicename; + $parent = $category->category_parent; + $term_group = 0; + + // Associate terms with the same slug in a term group and make slugs unique. + if ( $exists = $wpdb->get_results( $wpdb->prepare( "SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug ) ) ) { + $term_group = $exists[0]->term_group; + $id = $exists[0]->term_id; + $num = 2; + do { + $alt_slug = $slug . "-$num"; + $num++; + $slug_check = $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM $wpdb->terms WHERE slug = %s", $alt_slug ) ); + } while ( $slug_check ); + + $slug = $alt_slug; + + if ( empty( $term_group ) ) { + $term_group = $wpdb->get_var( "SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group" ) + 1; + $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->terms SET term_group = %d WHERE term_id = %d", $term_group, $id ) ); + } + } + + $wpdb->query( + $wpdb->prepare( + "INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES + (%d, %s, %s, %d)", + $term_id, + $name, + $slug, + $term_group + ) + ); + + $count = 0; + if ( ! empty( $category->category_count ) ) { + $count = (int) $category->category_count; + $taxonomy = 'category'; + $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count ) ); + $tt_ids[ $term_id ][ $taxonomy ] = (int) $wpdb->insert_id; + } + + if ( ! empty( $category->link_count ) ) { + $count = (int) $category->link_count; + $taxonomy = 'link_category'; + $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count ) ); + $tt_ids[ $term_id ][ $taxonomy ] = (int) $wpdb->insert_id; + } + + if ( ! empty( $category->tag_count ) ) { + $have_tags = true; + $count = (int) $category->tag_count; + $taxonomy = 'post_tag'; + $wpdb->insert( $wpdb->term_taxonomy, compact( 'term_id', 'taxonomy', 'description', 'parent', 'count' ) ); + $tt_ids[ $term_id ][ $taxonomy ] = (int) $wpdb->insert_id; + } + + if ( empty( $count ) ) { + $count = 0; + $taxonomy = 'category'; + $wpdb->insert( $wpdb->term_taxonomy, compact( 'term_id', 'taxonomy', 'description', 'parent', 'count' ) ); + $tt_ids[ $term_id ][ $taxonomy ] = (int) $wpdb->insert_id; + } + } + + $select = 'post_id, category_id'; + if ( $have_tags ) { + $select .= ', rel_type'; + } + + $posts = $wpdb->get_results( "SELECT $select FROM $wpdb->post2cat GROUP BY post_id, category_id" ); + foreach ( $posts as $post ) { + $post_id = (int) $post->post_id; + $term_id = (int) $post->category_id; + $taxonomy = 'category'; + if ( ! empty( $post->rel_type ) && 'tag' == $post->rel_type ) { + $taxonomy = 'tag'; + } + $tt_id = $tt_ids[ $term_id ][ $taxonomy ]; + if ( empty( $tt_id ) ) { + continue; + } + + $wpdb->insert( + $wpdb->term_relationships, + array( + 'object_id' => $post_id, + 'term_taxonomy_id' => $tt_id, + ) + ); + } + + // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. + if ( $wp_current_db_version < 3570 ) { + /* + * Create link_category terms for link categories. Create a map of link + * cat IDs to link_category terms. + */ + $link_cat_id_map = array(); + $default_link_cat = 0; + $tt_ids = array(); + $link_cats = $wpdb->get_results( 'SELECT cat_id, cat_name FROM ' . $wpdb->prefix . 'linkcategories' ); + foreach ( $link_cats as $category ) { + $cat_id = (int) $category->cat_id; + $term_id = 0; + $name = wp_slash( $category->cat_name ); + $slug = sanitize_title( $name ); + $term_group = 0; + + // Associate terms with the same slug in a term group and make slugs unique. + if ( $exists = $wpdb->get_results( $wpdb->prepare( "SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug ) ) ) { + $term_group = $exists[0]->term_group; + $term_id = $exists[0]->term_id; + } + + if ( empty( $term_id ) ) { + $wpdb->insert( $wpdb->terms, compact( 'name', 'slug', 'term_group' ) ); + $term_id = (int) $wpdb->insert_id; + } + + $link_cat_id_map[ $cat_id ] = $term_id; + $default_link_cat = $term_id; + + $wpdb->insert( + $wpdb->term_taxonomy, + array( + 'term_id' => $term_id, + 'taxonomy' => 'link_category', + 'description' => '', + 'parent' => 0, + 'count' => 0, + ) + ); + $tt_ids[ $term_id ] = (int) $wpdb->insert_id; + } + + // Associate links to cats. + $links = $wpdb->get_results( "SELECT link_id, link_category FROM $wpdb->links" ); + if ( ! empty( $links ) ) { + foreach ( $links as $link ) { + if ( 0 == $link->link_category ) { + continue; + } + if ( ! isset( $link_cat_id_map[ $link->link_category ] ) ) { + continue; + } + $term_id = $link_cat_id_map[ $link->link_category ]; + $tt_id = $tt_ids[ $term_id ]; + if ( empty( $tt_id ) ) { + continue; + } + + $wpdb->insert( + $wpdb->term_relationships, + array( + 'object_id' => $link->link_id, + 'term_taxonomy_id' => $tt_id, + ) + ); + } + } + + // Set default to the last category we grabbed during the upgrade loop. + update_option( 'default_link_category', $default_link_cat ); + } else { + $links = $wpdb->get_results( "SELECT link_id, category_id FROM $wpdb->link2cat GROUP BY link_id, category_id" ); + foreach ( $links as $link ) { + $link_id = (int) $link->link_id; + $term_id = (int) $link->category_id; + $taxonomy = 'link_category'; + $tt_id = $tt_ids[ $term_id ][ $taxonomy ]; + if ( empty( $tt_id ) ) { + continue; + } + $wpdb->insert( + $wpdb->term_relationships, + array( + 'object_id' => $link_id, + 'term_taxonomy_id' => $tt_id, + ) + ); + } + } + + if ( $wp_current_db_version < 4772 ) { + // Obsolete linkcategories table + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories' ); + } + + // Recalculate all counts + $terms = $wpdb->get_results( "SELECT term_taxonomy_id, taxonomy FROM $wpdb->term_taxonomy" ); + foreach ( (array) $terms as $term ) { + if ( ( 'post_tag' == $term->taxonomy ) || ( 'category' == $term->taxonomy ) ) { + $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = 'publish' AND post_type = 'post' AND term_taxonomy_id = %d", $term->term_taxonomy_id ) ); + } else { + $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $term->term_taxonomy_id ) ); + } + $wpdb->update( $wpdb->term_taxonomy, array( 'count' => $count ), array( 'term_taxonomy_id' => $term->term_taxonomy_id ) ); + } +} + +/** + * Remove old options from the database. + * + * @ignore + * @since 2.3.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_230_options_table() { + global $wpdb; + $old_options_fields = array( 'option_can_override', 'option_type', 'option_width', 'option_height', 'option_description', 'option_admin_level' ); + $wpdb->hide_errors(); + foreach ( $old_options_fields as $old ) { + $wpdb->query( "ALTER TABLE $wpdb->options DROP $old" ); + } + $wpdb->show_errors(); +} + +/** + * Remove old categories, link2cat, and post2cat database tables. + * + * @ignore + * @since 2.3.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_230_old_tables() { + global $wpdb; + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'categories' ); + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'link2cat' ); + $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'post2cat' ); +} + +/** + * Upgrade old slugs made in version 2.2. + * + * @ignore + * @since 2.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_old_slugs() { + // Upgrade people who were using the Redirect Old Slugs plugin. + global $wpdb; + $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'" ); +} + +/** + * Execute changes made in WordPress 2.5.0. + * + * @ignore + * @since 2.5.0 + * + * @global int $wp_current_db_version + */ +function upgrade_250() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 6689 ) { + populate_roles_250(); + } + +} + +/** + * Execute changes made in WordPress 2.5.2. + * + * @ignore + * @since 2.5.2 + * + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_252() { + global $wpdb; + + $wpdb->query( "UPDATE $wpdb->users SET user_activation_key = ''" ); +} + +/** + * Execute changes made in WordPress 2.6. + * + * @ignore + * @since 2.6.0 + * + * @global int $wp_current_db_version + */ +function upgrade_260() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 8000 ) { + populate_roles_260(); + } +} + +/** + * Execute changes made in WordPress 2.7. + * + * @ignore + * @since 2.7.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * @global int $wp_current_db_version + */ +function upgrade_270() { + global $wpdb, $wp_current_db_version; + + if ( $wp_current_db_version < 8980 ) { + populate_roles_270(); + } + + // Update post_date for unpublished posts with empty timestamp + if ( $wp_current_db_version < 8921 ) { + $wpdb->query( "UPDATE $wpdb->posts SET post_date = post_modified WHERE post_date = '0000-00-00 00:00:00'" ); + } +} + +/** + * Execute changes made in WordPress 2.8. + * + * @ignore + * @since 2.8.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_280() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 10360 ) { + populate_roles_280(); + } + if ( is_multisite() ) { + $start = 0; + while ( $rows = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options ORDER BY option_id LIMIT $start, 20" ) ) { + foreach ( $rows as $row ) { + $value = $row->option_value; + if ( ! @unserialize( $value ) ) { + $value = stripslashes( $value ); + } + if ( $value !== $row->option_value ) { + update_option( $row->option_name, $value ); + } + } + $start += 20; + } + clean_blog_cache( get_current_blog_id() ); + } +} + +/** + * Execute changes made in WordPress 2.9. + * + * @ignore + * @since 2.9.0 + * + * @global int $wp_current_db_version + */ +function upgrade_290() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 11958 ) { + // Previously, setting depth to 1 would redundantly disable threading, but now 2 is the minimum depth to avoid confusion + if ( get_option( 'thread_comments_depth' ) == '1' ) { + update_option( 'thread_comments_depth', 2 ); + update_option( 'thread_comments', 0 ); + } + } +} + +/** + * Execute changes made in WordPress 3.0. + * + * @ignore + * @since 3.0.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_300() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 15093 ) { + populate_roles_300(); + } + + if ( $wp_current_db_version < 14139 && is_multisite() && is_main_site() && ! defined( 'MULTISITE' ) && get_site_option( 'siteurl' ) === false ) { + add_site_option( 'siteurl', '' ); + } + + // 3.0 screen options key name changes. + if ( wp_should_upgrade_global_tables() ) { + $sql = "DELETE FROM $wpdb->usermeta + WHERE meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key = 'manageedittagscolumnshidden' + OR meta_key = 'managecategoriescolumnshidden' + OR meta_key = 'manageedit-tagscolumnshidden' + OR meta_key = 'manageeditcolumnshidden' + OR meta_key = 'categories_per_page' + OR meta_key = 'edit_tags_per_page'"; + $prefix = $wpdb->esc_like( $wpdb->base_prefix ); + $wpdb->query( + $wpdb->prepare( + $sql, + $prefix . '%' . $wpdb->esc_like( 'meta-box-hidden' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'closedpostboxes' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'manage-' ) . '%' . $wpdb->esc_like( '-columns-hidden' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'meta-box-order' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'metaboxorder' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'screen_layout' ) . '%' + ) + ); + } + +} + +/** + * Execute changes made in WordPress 3.3. + * + * @ignore + * @since 3.3.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb + * @global array $wp_registered_widgets + * @global array $sidebars_widgets + */ +function upgrade_330() { + global $wp_current_db_version, $wpdb, $wp_registered_widgets, $sidebars_widgets; + + if ( $wp_current_db_version < 19061 && wp_should_upgrade_global_tables() ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('show_admin_bar_admin', 'plugins_last_view')" ); + } + + if ( $wp_current_db_version >= 11548 ) { + return; + } + + $sidebars_widgets = get_option( 'sidebars_widgets', array() ); + $_sidebars_widgets = array(); + + if ( isset( $sidebars_widgets['wp_inactive_widgets'] ) || empty( $sidebars_widgets ) ) { + $sidebars_widgets['array_version'] = 3; + } elseif ( ! isset( $sidebars_widgets['array_version'] ) ) { + $sidebars_widgets['array_version'] = 1; + } + + switch ( $sidebars_widgets['array_version'] ) { + case 1: + foreach ( (array) $sidebars_widgets as $index => $sidebar ) { + if ( is_array( $sidebar ) ) { + foreach ( (array) $sidebar as $i => $name ) { + $id = strtolower( $name ); + if ( isset( $wp_registered_widgets[ $id ] ) ) { + $_sidebars_widgets[ $index ][ $i ] = $id; + continue; + } + $id = sanitize_title( $name ); + if ( isset( $wp_registered_widgets[ $id ] ) ) { + $_sidebars_widgets[ $index ][ $i ] = $id; + continue; + } + + $found = false; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( strtolower( $widget['name'] ) == strtolower( $name ) ) { + $_sidebars_widgets[ $index ][ $i ] = $widget['id']; + $found = true; + break; + } elseif ( sanitize_title( $widget['name'] ) == sanitize_title( $name ) ) { + $_sidebars_widgets[ $index ][ $i ] = $widget['id']; + $found = true; + break; + } + } + + if ( $found ) { + continue; + } + + unset( $_sidebars_widgets[ $index ][ $i ] ); + } + } + } + $_sidebars_widgets['array_version'] = 2; + $sidebars_widgets = $_sidebars_widgets; + unset( $_sidebars_widgets ); + + // intentional fall-through to upgrade to the next version. + case 2: + $sidebars_widgets = retrieve_widgets(); + $sidebars_widgets['array_version'] = 3; + update_option( 'sidebars_widgets', $sidebars_widgets ); + } +} + +/** + * Execute changes made in WordPress 3.4. + * + * @ignore + * @since 3.4.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb + */ +function upgrade_340() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 19798 ) { + $wpdb->hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->options DROP COLUMN blog_id" ); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 19799 ) { + $wpdb->hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->comments DROP INDEX comment_approved" ); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 20022 && wp_should_upgrade_global_tables() ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key = 'themes_last_view'" ); + } + + if ( $wp_current_db_version < 20080 ) { + if ( 'yes' == $wpdb->get_var( "SELECT autoload FROM $wpdb->options WHERE option_name = 'uninstall_plugins'" ) ) { + $uninstall_plugins = get_option( 'uninstall_plugins' ); + delete_option( 'uninstall_plugins' ); + add_option( 'uninstall_plugins', $uninstall_plugins, null, 'no' ); + } + } +} + +/** + * Execute changes made in WordPress 3.5. + * + * @ignore + * @since 3.5.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb + */ +function upgrade_350() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 22006 && $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) { + update_option( 'link_manager_enabled', 1 ); // Previously set to 0 by populate_options() + } + + if ( $wp_current_db_version < 21811 && wp_should_upgrade_global_tables() ) { + $meta_keys = array(); + foreach ( array_merge( get_post_types(), get_taxonomies() ) as $name ) { + if ( false !== strpos( $name, '-' ) ) { + $meta_keys[] = 'edit_' . str_replace( '-', '_', $name ) . '_per_page'; + } + } + if ( $meta_keys ) { + $meta_keys = implode( "', '", $meta_keys ); + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('$meta_keys')" ); + } + } + + if ( $wp_current_db_version < 22422 && $term = get_term_by( 'slug', 'post-format-standard', 'post_format' ) ) { + wp_delete_term( $term->term_id, 'post_format' ); + } +} + +/** + * Execute changes made in WordPress 3.7. + * + * @ignore + * @since 3.7.0 + * + * @global int $wp_current_db_version + */ +function upgrade_370() { + global $wp_current_db_version; + if ( $wp_current_db_version < 25824 ) { + wp_clear_scheduled_hook( 'wp_auto_updates_maybe_update' ); + } +} + +/** + * Execute changes made in WordPress 3.7.2. + * + * @ignore + * @since 3.7.2 + * @since 3.8.0 + * + * @global int $wp_current_db_version + */ +function upgrade_372() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26148 ) { + wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); + } +} + +/** + * Execute changes made in WordPress 3.8.0. + * + * @ignore + * @since 3.8.0 + * + * @global int $wp_current_db_version + */ +function upgrade_380() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26691 ) { + deactivate_plugins( array( 'mp6/mp6.php' ), true ); + } +} + +/** + * Execute changes made in WordPress 4.0.0. + * + * @ignore + * @since 4.0.0 + * + * @global int $wp_current_db_version + */ +function upgrade_400() { + global $wp_current_db_version; + if ( $wp_current_db_version < 29630 ) { + if ( ! is_multisite() && false === get_option( 'WPLANG' ) ) { + if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && in_array( WPLANG, get_available_languages() ) ) { + update_option( 'WPLANG', WPLANG ); + } else { + update_option( 'WPLANG', '' ); + } + } + } +} + +/** + * Execute changes made in WordPress 4.2.0. + * + * @ignore + * @since 4.2.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb + */ +function upgrade_420() {} + +/** + * Executes changes made in WordPress 4.3.0. + * + * @ignore + * @since 4.3.0 + * + * @global int $wp_current_db_version Current version. + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_430() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 32364 ) { + upgrade_430_fix_comments(); + } + + // Shared terms are split in a separate process. + if ( $wp_current_db_version < 32814 ) { + update_option( 'finished_splitting_shared_terms', 0 ); + wp_schedule_single_event( time() + ( 1 * MINUTE_IN_SECONDS ), 'wp_split_shared_term_batch' ); + } + + if ( $wp_current_db_version < 33055 && 'utf8mb4' === $wpdb->charset ) { + if ( is_multisite() ) { + $tables = $wpdb->tables( 'blog' ); + } else { + $tables = $wpdb->tables( 'all' ); + if ( ! wp_should_upgrade_global_tables() ) { + $global_tables = $wpdb->tables( 'global' ); + $tables = array_diff_assoc( $tables, $global_tables ); + } + } + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } +} + +/** + * Executes comments changes made in WordPress 4.3.0. + * + * @ignore + * @since 4.3.0 + * + * @global int $wp_current_db_version Current version. + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_430_fix_comments() { + global $wp_current_db_version, $wpdb; + + $content_length = $wpdb->get_col_length( $wpdb->comments, 'comment_content' ); + + if ( is_wp_error( $content_length ) ) { + return; + } + + if ( false === $content_length ) { + $content_length = array( + 'type' => 'byte', + 'length' => 65535, + ); + } elseif ( ! is_array( $content_length ) ) { + $length = (int) $content_length > 0 ? (int) $content_length : 65535; + $content_length = array( + 'type' => 'byte', + 'length' => $length, + ); + } + + if ( 'byte' !== $content_length['type'] || 0 === $content_length['length'] ) { + // Sites with malformed DB schemas are on their own. + return; + } + + $allowed_length = intval( $content_length['length'] ) - 10; + + $comments = $wpdb->get_results( + "SELECT `comment_ID` FROM `{$wpdb->comments}` + WHERE `comment_date_gmt` > '2015-04-26' + AND LENGTH( `comment_content` ) >= {$allowed_length} + AND ( `comment_content` LIKE '%<%' OR `comment_content` LIKE '%>%' )" + ); + + foreach ( $comments as $comment ) { + wp_delete_comment( $comment->comment_ID, true ); + } +} + +/** + * Executes changes made in WordPress 4.3.1. + * + * @ignore + * @since 4.3.1 + */ +function upgrade_431() { + // Fix incorrect cron entries for term splitting + $cron_array = _get_cron_array(); + if ( isset( $cron_array['wp_batch_split_terms'] ) ) { + unset( $cron_array['wp_batch_split_terms'] ); + _set_cron_array( $cron_array ); + } +} + +/** + * Executes changes made in WordPress 4.4.0. + * + * @ignore + * @since 4.4.0 + * + * @global int $wp_current_db_version Current version. + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_440() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 34030 ) { + $wpdb->query( "ALTER TABLE {$wpdb->options} MODIFY option_name VARCHAR(191)" ); + } + + // Remove the unused 'add_users' role. + $roles = wp_roles(); + foreach ( $roles->role_objects as $role ) { + if ( $role->has_cap( 'add_users' ) ) { + $role->remove_cap( 'add_users' ); + } + } +} + +/** + * Executes changes made in WordPress 4.5.0. + * + * @ignore + * @since 4.5.0 + * + * @global int $wp_current_db_version Current database version. + * @global wpdb $wpdb WordPress database abstraction object. + */ +function upgrade_450() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 36180 ) { + wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); + } + + // Remove unused email confirmation options, moved to usermeta. + if ( $wp_current_db_version < 36679 && is_multisite() ) { + $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name REGEXP '^[0-9]+_new_email$'" ); + } + + // Remove unused user setting for wpLink. + delete_user_setting( 'wplink' ); +} + +/** + * Executes changes made in WordPress 4.6.0. + * + * @ignore + * @since 4.6.0 + * + * @global int $wp_current_db_version Current database version. + */ +function upgrade_460() { + global $wp_current_db_version; + + // Remove unused post meta. + if ( $wp_current_db_version < 37854 ) { + delete_post_meta_by_key( '_post_restored_from' ); + } + + // Remove plugins with callback as an array object/method as the uninstall hook, see #13786. + if ( $wp_current_db_version < 37965 ) { + $uninstall_plugins = get_option( 'uninstall_plugins', array() ); + + if ( ! empty( $uninstall_plugins ) ) { + foreach ( $uninstall_plugins as $basename => $callback ) { + if ( is_array( $callback ) && is_object( $callback[0] ) ) { + unset( $uninstall_plugins[ $basename ] ); + } + } + + update_option( 'uninstall_plugins', $uninstall_plugins ); + } + } +} + +/** + * Executes changes made in WordPress 5.0.0. + * + * @ignore + * @since 5.0.0 + * @deprecated 5.1.0 + */ +function upgrade_500() { +} + +/** + * Executes changes made in WordPress 5.1.0. + * + * @ignore + * @since 5.1.0 + */ +function upgrade_510() { + delete_site_option( 'upgrade_500_was_gutenberg_active' ); +} + +/** + * Executes network-level upgrade routines. + * + * @since 3.0.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb + */ +function upgrade_network() { + global $wp_current_db_version, $wpdb; + + // Always clear expired transients + delete_expired_transients( true ); + + // 2.8. + if ( $wp_current_db_version < 11549 ) { + $wpmu_sitewide_plugins = get_site_option( 'wpmu_sitewide_plugins' ); + $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' ); + if ( $wpmu_sitewide_plugins ) { + if ( ! $active_sitewide_plugins ) { + $sitewide_plugins = (array) $wpmu_sitewide_plugins; + } else { + $sitewide_plugins = array_merge( (array) $active_sitewide_plugins, (array) $wpmu_sitewide_plugins ); + } + + update_site_option( 'active_sitewide_plugins', $sitewide_plugins ); + } + delete_site_option( 'wpmu_sitewide_plugins' ); + delete_site_option( 'deactivated_sitewide_plugins' ); + + $start = 0; + while ( $rows = $wpdb->get_results( "SELECT meta_key, meta_value FROM {$wpdb->sitemeta} ORDER BY meta_id LIMIT $start, 20" ) ) { + foreach ( $rows as $row ) { + $value = $row->meta_value; + if ( ! @unserialize( $value ) ) { + $value = stripslashes( $value ); + } + if ( $value !== $row->meta_value ) { + update_site_option( $row->meta_key, $value ); + } + } + $start += 20; + } + } + + // 3.0 + if ( $wp_current_db_version < 13576 ) { + update_site_option( 'global_terms_enabled', '1' ); + } + + // 3.3 + if ( $wp_current_db_version < 19390 ) { + update_site_option( 'initial_db_version', $wp_current_db_version ); + } + + if ( $wp_current_db_version < 19470 ) { + if ( false === get_site_option( 'active_sitewide_plugins' ) ) { + update_site_option( 'active_sitewide_plugins', array() ); + } + } + + // 3.4 + if ( $wp_current_db_version < 20148 ) { + // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. + $allowedthemes = get_site_option( 'allowedthemes' ); + $allowed_themes = get_site_option( 'allowed_themes' ); + if ( false === $allowedthemes && is_array( $allowed_themes ) && $allowed_themes ) { + $converted = array(); + $themes = wp_get_themes(); + foreach ( $themes as $stylesheet => $theme_data ) { + if ( isset( $allowed_themes[ $theme_data->get( 'Name' ) ] ) ) { + $converted[ $stylesheet ] = true; + } + } + update_site_option( 'allowedthemes', $converted ); + delete_site_option( 'allowed_themes' ); + } + } + + // 3.5 + if ( $wp_current_db_version < 21823 ) { + update_site_option( 'ms_files_rewriting', '1' ); + } + + // 3.5.2 + if ( $wp_current_db_version < 24448 ) { + $illegal_names = get_site_option( 'illegal_names' ); + if ( is_array( $illegal_names ) && count( $illegal_names ) === 1 ) { + $illegal_name = reset( $illegal_names ); + $illegal_names = explode( ' ', $illegal_name ); + update_site_option( 'illegal_names', $illegal_names ); + } + } + + // 4.2 + if ( $wp_current_db_version < 31351 && $wpdb->charset === 'utf8mb4' ) { + if ( wp_should_upgrade_global_tables() ) { + $wpdb->query( "ALTER TABLE $wpdb->usermeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->site DROP INDEX domain, ADD INDEX domain(domain(140),path(51))" ); + $wpdb->query( "ALTER TABLE $wpdb->sitemeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain_path, ADD INDEX domain_path(domain(140),path(51))" ); + + $tables = $wpdb->tables( 'global' ); + + // sitecategories may not exist. + if ( ! $wpdb->get_var( "SHOW TABLES LIKE '{$tables['sitecategories']}'" ) ) { + unset( $tables['sitecategories'] ); + } + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } + } + + // 4.3 + if ( $wp_current_db_version < 33055 && 'utf8mb4' === $wpdb->charset ) { + if ( wp_should_upgrade_global_tables() ) { + $upgrade = false; + $indexes = $wpdb->get_results( "SHOW INDEXES FROM $wpdb->signups" ); + foreach ( $indexes as $index ) { + if ( 'domain_path' == $index->Key_name && 'domain' == $index->Column_name && 140 != $index->Sub_part ) { + $upgrade = true; + break; + } + } + + if ( $upgrade ) { + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain_path, ADD INDEX domain_path(domain(140),path(51))" ); + } + + $tables = $wpdb->tables( 'global' ); + + // sitecategories may not exist. + if ( ! $wpdb->get_var( "SHOW TABLES LIKE '{$tables['sitecategories']}'" ) ) { + unset( $tables['sitecategories'] ); + } + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } + } + + // 5.1 + if ( $wp_current_db_version < 44467 ) { + $network_id = get_main_network_id(); + delete_network_option( $network_id, 'site_meta_supported' ); + is_site_meta_supported(); + } +} + +// +// General functions we use to actually do stuff +// + +/** + * Creates a table in the database if it doesn't already exist. + * + * This method checks for an existing database and creates a new one if it's not + * already present. It doesn't rely on MySQL's "IF NOT EXISTS" statement, but chooses + * to query all tables first and then run the SQL statement creating the table. + * + * @since 1.0.0 + * + * @global wpdb $wpdb + * + * @param string $table_name Database table name to create. + * @param string $create_ddl SQL statement to create table. + * @return bool If table already exists or was created by function. + */ +function maybe_create_table( $table_name, $create_ddl ) { + global $wpdb; + + $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) ); + + if ( $wpdb->get_var( $query ) == $table_name ) { + return true; + } + + // Didn't find it try to create it.. + $wpdb->query( $create_ddl ); + + // We cannot directly tell that whether this succeeded! + if ( $wpdb->get_var( $query ) == $table_name ) { + return true; + } + return false; +} + +/** + * Drops a specified index from a table. + * + * @since 1.0.1 + * + * @global wpdb $wpdb + * + * @param string $table Database table name. + * @param string $index Index name to drop. + * @return true True, when finished. + */ +function drop_index( $table, $index ) { + global $wpdb; + $wpdb->hide_errors(); + $wpdb->query( "ALTER TABLE `$table` DROP INDEX `$index`" ); + // Now we need to take out all the extra ones we may have created + for ( $i = 0; $i < 25; $i++ ) { + $wpdb->query( "ALTER TABLE `$table` DROP INDEX `{$index}_$i`" ); + } + $wpdb->show_errors(); + return true; +} + +/** + * Adds an index to a specified table. + * + * @since 1.0.1 + * + * @global wpdb $wpdb + * + * @param string $table Database table name. + * @param string $index Database table index column. + * @return true True, when done with execution. + */ +function add_clean_index( $table, $index ) { + global $wpdb; + drop_index( $table, $index ); + $wpdb->query( "ALTER TABLE `$table` ADD INDEX ( `$index` )" ); + return true; +} + +/** + * Adds column to a database table if it doesn't already exist. + * + * @since 1.3.0 + * + * @global wpdb $wpdb + * + * @param string $table_name The table name to modify. + * @param string $column_name The column name to add to the table. + * @param string $create_ddl The SQL statement used to add the column. + * @return bool True if already exists or on successful completion, false on error. + */ +function maybe_add_column( $table_name, $column_name, $create_ddl ) { + global $wpdb; + foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { + if ( $column == $column_name ) { + return true; + } + } + + // Didn't find it try to create it. + $wpdb->query( $create_ddl ); + + // We cannot directly tell that whether this succeeded! + foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { + if ( $column == $column_name ) { + return true; + } + } + return false; +} + +/** + * If a table only contains utf8 or utf8mb4 columns, convert it to utf8mb4. + * + * @since 4.2.0 + * + * @global wpdb $wpdb + * + * @param string $table The table to convert. + * @return bool true if the table was converted, false if it wasn't. + */ +function maybe_convert_table_to_utf8mb4( $table ) { + global $wpdb; + + $results = $wpdb->get_results( "SHOW FULL COLUMNS FROM `$table`" ); + if ( ! $results ) { + return false; + } + + foreach ( $results as $column ) { + if ( $column->Collation ) { + list( $charset ) = explode( '_', $column->Collation ); + $charset = strtolower( $charset ); + if ( 'utf8' !== $charset && 'utf8mb4' !== $charset ) { + // Don't upgrade tables that have non-utf8 columns. + return false; + } + } + } + + $table_details = $wpdb->get_row( "SHOW TABLE STATUS LIKE '$table'" ); + if ( ! $table_details ) { + return false; + } + + list( $table_charset ) = explode( '_', $table_details->Collation ); + $table_charset = strtolower( $table_charset ); + if ( 'utf8mb4' === $table_charset ) { + return true; + } + + return $wpdb->query( "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" ); +} + +/** + * Retrieve all options as it was for 1.2. + * + * @since 1.2.0 + * + * @global wpdb $wpdb + * + * @return stdClass List of options. + */ +function get_alloptions_110() { + global $wpdb; + $all_options = new stdClass; + if ( $options = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ) ) { + foreach ( $options as $option ) { + if ( 'siteurl' == $option->option_name || 'home' == $option->option_name || 'category_base' == $option->option_name ) { + $option->option_value = untrailingslashit( $option->option_value ); + } + $all_options->{$option->option_name} = stripslashes( $option->option_value ); + } + } + return $all_options; +} + +/** + * Utility version of get_option that is private to installation/upgrade. + * + * @ignore + * @since 1.5.1 + * @access private + * + * @global wpdb $wpdb + * + * @param string $setting Option name. + * @return mixed + */ +function __get_option( $setting ) { + global $wpdb; + + if ( $setting == 'home' && defined( 'WP_HOME' ) ) { + return untrailingslashit( WP_HOME ); + } + + if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) { + return untrailingslashit( WP_SITEURL ); + } + + $option = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s", $setting ) ); + + if ( 'home' == $setting && '' == $option ) { + return __get_option( 'siteurl' ); + } + + if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting || 'tag_base' == $setting ) { + $option = untrailingslashit( $option ); + } + + return maybe_unserialize( $option ); +} + +/** + * Filters for content to remove unnecessary slashes. + * + * @since 1.5.0 + * + * @param string $content The content to modify. + * @return string The de-slashed content. + */ +function deslash( $content ) { + // Note: \\\ inside a regex denotes a single backslash. + + /* + * Replace one or more backslashes followed by a single quote with + * a single quote. + */ + $content = preg_replace( "/\\\+'/", "'", $content ); + + /* + * Replace one or more backslashes followed by a double quote with + * a double quote. + */ + $content = preg_replace( '/\\\+"/', '"', $content ); + + // Replace one or more backslashes with one backslash. + $content = preg_replace( '/\\\+/', '\\', $content ); + + return $content; +} + +/** + * Modifies the database based on specified SQL statements. + * + * Useful for creating new tables and updating existing tables to a new structure. + * + * @since 1.5.0 + * + * @global wpdb $wpdb + * + * @param string[]|string $queries Optional. The query to run. Can be multiple queries + * in an array, or a string of queries separated by + * semicolons. Default empty string. + * @param bool $execute Optional. Whether or not to execute the query right away. + * Default true. + * @return array Strings containing the results of the various update queries. + */ +function dbDelta( $queries = '', $execute = true ) { + global $wpdb; + + if ( in_array( $queries, array( '', 'all', 'blog', 'global', 'ms_global' ), true ) ) { + $queries = wp_get_db_schema( $queries ); + } + + // Separate individual queries into an array + if ( ! is_array( $queries ) ) { + $queries = explode( ';', $queries ); + $queries = array_filter( $queries ); + } + + /** + * Filters the dbDelta SQL queries. + * + * @since 3.3.0 + * + * @param string[] $queries An array of dbDelta SQL queries. + */ + $queries = apply_filters( 'dbdelta_queries', $queries ); + + $cqueries = array(); // Creation Queries + $iqueries = array(); // Insertion Queries + $for_update = array(); + + // Create a tablename index for an array ($cqueries) of queries + foreach ( $queries as $qry ) { + if ( preg_match( '|CREATE TABLE ([^ ]*)|', $qry, $matches ) ) { + $cqueries[ trim( $matches[1], '`' ) ] = $qry; + $for_update[ $matches[1] ] = 'Created table ' . $matches[1]; + } elseif ( preg_match( '|CREATE DATABASE ([^ ]*)|', $qry, $matches ) ) { + array_unshift( $cqueries, $qry ); + } elseif ( preg_match( '|INSERT INTO ([^ ]*)|', $qry, $matches ) ) { + $iqueries[] = $qry; + } elseif ( preg_match( '|UPDATE ([^ ]*)|', $qry, $matches ) ) { + $iqueries[] = $qry; + } else { + // Unrecognized query type + } + } + + /** + * Filters the dbDelta SQL queries for creating tables and/or databases. + * + * Queries filterable via this hook contain "CREATE TABLE" or "CREATE DATABASE". + * + * @since 3.3.0 + * + * @param string[] $cqueries An array of dbDelta create SQL queries. + */ + $cqueries = apply_filters( 'dbdelta_create_queries', $cqueries ); + + /** + * Filters the dbDelta SQL queries for inserting or updating. + * + * Queries filterable via this hook contain "INSERT INTO" or "UPDATE". + * + * @since 3.3.0 + * + * @param string[] $iqueries An array of dbDelta insert or update SQL queries. + */ + $iqueries = apply_filters( 'dbdelta_insert_queries', $iqueries ); + + $text_fields = array( 'tinytext', 'text', 'mediumtext', 'longtext' ); + $blob_fields = array( 'tinyblob', 'blob', 'mediumblob', 'longblob' ); + + $global_tables = $wpdb->tables( 'global' ); + foreach ( $cqueries as $table => $qry ) { + // Upgrade global tables only for the main site. Don't upgrade at all if conditions are not optimal. + if ( in_array( $table, $global_tables ) && ! wp_should_upgrade_global_tables() ) { + unset( $cqueries[ $table ], $for_update[ $table ] ); + continue; + } + + // Fetch the table column structure from the database + $suppress = $wpdb->suppress_errors(); + $tablefields = $wpdb->get_results( "DESCRIBE {$table};" ); + $wpdb->suppress_errors( $suppress ); + + if ( ! $tablefields ) { + continue; + } + + // Clear the field and index arrays. + $cfields = $indices = $indices_without_subparts = array(); + + // Get all of the field names in the query from between the parentheses. + preg_match( '|\((.*)\)|ms', $qry, $match2 ); + $qryline = trim( $match2[1] ); + + // Separate field lines into an array. + $flds = explode( "\n", $qryline ); + + // For every field line specified in the query. + foreach ( $flds as $fld ) { + $fld = trim( $fld, " \t\n\r\0\x0B," ); // Default trim characters, plus ','. + + // Extract the field name. + preg_match( '|^([^ ]*)|', $fld, $fvals ); + $fieldname = trim( $fvals[1], '`' ); + $fieldname_lowercased = strtolower( $fieldname ); + + // Verify the found field name. + $validfield = true; + switch ( $fieldname_lowercased ) { + case '': + case 'primary': + case 'index': + case 'fulltext': + case 'unique': + case 'key': + case 'spatial': + $validfield = false; + + /* + * Normalize the index definition. + * + * This is done so the definition can be compared against the result of a + * `SHOW INDEX FROM $table_name` query which returns the current table + * index information. + */ + + // Extract type, name and columns from the definition. + // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation + preg_match( + '/^' + . '(?P' // 1) Type of the index. + . 'PRIMARY\s+KEY|(?:UNIQUE|FULLTEXT|SPATIAL)\s+(?:KEY|INDEX)|KEY|INDEX' + . ')' + . '\s+' // Followed by at least one white space character. + . '(?:' // Name of the index. Optional if type is PRIMARY KEY. + . '`?' // Name can be escaped with a backtick. + . '(?P' // 2) Name of the index. + . '(?:[0-9a-zA-Z$_-]|[\xC2-\xDF][\x80-\xBF])+' + . ')' + . '`?' // Name can be escaped with a backtick. + . '\s+' // Followed by at least one white space character. + . ')*' + . '\(' // Opening bracket for the columns. + . '(?P' + . '.+?' // 3) Column names, index prefixes, and orders. + . ')' + . '\)' // Closing bracket for the columns. + . '$/im', + $fld, + $index_matches + ); + // phpcs:enable + + // Uppercase the index type and normalize space characters. + $index_type = strtoupper( preg_replace( '/\s+/', ' ', trim( $index_matches['index_type'] ) ) ); + + // 'INDEX' is a synonym for 'KEY', standardize on 'KEY'. + $index_type = str_replace( 'INDEX', 'KEY', $index_type ); + + // Escape the index name with backticks. An index for a primary key has no name. + $index_name = ( 'PRIMARY KEY' === $index_type ) ? '' : '`' . strtolower( $index_matches['index_name'] ) . '`'; + + // Parse the columns. Multiple columns are separated by a comma. + $index_columns = $index_columns_without_subparts = array_map( 'trim', explode( ',', $index_matches['index_columns'] ) ); + + // Normalize columns. + foreach ( $index_columns as $id => &$index_column ) { + // Extract column name and number of indexed characters (sub_part). + preg_match( + '/' + . '`?' // Name can be escaped with a backtick. + . '(?P' // 1) Name of the column. + . '(?:[0-9a-zA-Z$_-]|[\xC2-\xDF][\x80-\xBF])+' + . ')' + . '`?' // Name can be escaped with a backtick. + . '(?:' // Optional sub part. + . '\s*' // Optional white space character between name and opening bracket. + . '\(' // Opening bracket for the sub part. + . '\s*' // Optional white space character after opening bracket. + . '(?P' + . '\d+' // 2) Number of indexed characters. + . ')' + . '\s*' // Optional white space character before closing bracket. + . '\)' // Closing bracket for the sub part. + . ')?' + . '/', + $index_column, + $index_column_matches + ); + + // Escape the column name with backticks. + $index_column = '`' . $index_column_matches['column_name'] . '`'; + + // We don't need to add the subpart to $index_columns_without_subparts + $index_columns_without_subparts[ $id ] = $index_column; + + // Append the optional sup part with the number of indexed characters. + if ( isset( $index_column_matches['sub_part'] ) ) { + $index_column .= '(' . $index_column_matches['sub_part'] . ')'; + } + } + + // Build the normalized index definition and add it to the list of indices. + $indices[] = "{$index_type} {$index_name} (" . implode( ',', $index_columns ) . ')'; + $indices_without_subparts[] = "{$index_type} {$index_name} (" . implode( ',', $index_columns_without_subparts ) . ')'; + + // Destroy no longer needed variables. + unset( $index_column, $index_column_matches, $index_matches, $index_type, $index_name, $index_columns, $index_columns_without_subparts ); + + break; + } + + // If it's a valid field, add it to the field array. + if ( $validfield ) { + $cfields[ $fieldname_lowercased ] = $fld; + } + } + + // For every field in the table. + foreach ( $tablefields as $tablefield ) { + $tablefield_field_lowercased = strtolower( $tablefield->Field ); + $tablefield_type_lowercased = strtolower( $tablefield->Type ); + + // If the table field exists in the field array ... + if ( array_key_exists( $tablefield_field_lowercased, $cfields ) ) { + + // Get the field type from the query. + preg_match( '|`?' . $tablefield->Field . '`? ([^ ]*( unsigned)?)|i', $cfields[ $tablefield_field_lowercased ], $matches ); + $fieldtype = $matches[1]; + $fieldtype_lowercased = strtolower( $fieldtype ); + + // Is actual field type different from the field type in query? + if ( $tablefield->Type != $fieldtype ) { + $do_change = true; + if ( in_array( $fieldtype_lowercased, $text_fields ) && in_array( $tablefield_type_lowercased, $text_fields ) ) { + if ( array_search( $fieldtype_lowercased, $text_fields ) < array_search( $tablefield_type_lowercased, $text_fields ) ) { + $do_change = false; + } + } + + if ( in_array( $fieldtype_lowercased, $blob_fields ) && in_array( $tablefield_type_lowercased, $blob_fields ) ) { + if ( array_search( $fieldtype_lowercased, $blob_fields ) < array_search( $tablefield_type_lowercased, $blob_fields ) ) { + $do_change = false; + } + } + + if ( $do_change ) { + // Add a query to change the column type. + $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN `{$tablefield->Field}` " . $cfields[ $tablefield_field_lowercased ]; + $for_update[ $table . '.' . $tablefield->Field ] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}"; + } + } + + // Get the default value from the array. + if ( preg_match( "| DEFAULT '(.*?)'|i", $cfields[ $tablefield_field_lowercased ], $matches ) ) { + $default_value = $matches[1]; + if ( $tablefield->Default != $default_value ) { + // Add a query to change the column's default value + $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN `{$tablefield->Field}` SET DEFAULT '{$default_value}'"; + $for_update[ $table . '.' . $tablefield->Field ] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}"; + } + } + + // Remove the field from the array (so it's not added). + unset( $cfields[ $tablefield_field_lowercased ] ); + } else { + // This field exists in the table, but not in the creation queries? + } + } + + // For every remaining field specified for the table. + foreach ( $cfields as $fieldname => $fielddef ) { + // Push a query line into $cqueries that adds the field to that table. + $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef"; + $for_update[ $table . '.' . $fieldname ] = 'Added column ' . $table . '.' . $fieldname; + } + + // Index stuff goes here. Fetch the table index structure from the database. + $tableindices = $wpdb->get_results( "SHOW INDEX FROM {$table};" ); + + if ( $tableindices ) { + // Clear the index array. + $index_ary = array(); + + // For every index in the table. + foreach ( $tableindices as $tableindex ) { + + // Add the index to the index data array. + $keyname = strtolower( $tableindex->Key_name ); + $index_ary[ $keyname ]['columns'][] = array( + 'fieldname' => $tableindex->Column_name, + 'subpart' => $tableindex->Sub_part, + ); + $index_ary[ $keyname ]['unique'] = ( $tableindex->Non_unique == 0 ) ? true : false; + $index_ary[ $keyname ]['index_type'] = $tableindex->Index_type; + } + + // For each actual index in the index array. + foreach ( $index_ary as $index_name => $index_data ) { + + // Build a create string to compare to the query. + $index_string = ''; + if ( $index_name == 'primary' ) { + $index_string .= 'PRIMARY '; + } elseif ( $index_data['unique'] ) { + $index_string .= 'UNIQUE '; + } + if ( 'FULLTEXT' === strtoupper( $index_data['index_type'] ) ) { + $index_string .= 'FULLTEXT '; + } + if ( 'SPATIAL' === strtoupper( $index_data['index_type'] ) ) { + $index_string .= 'SPATIAL '; + } + $index_string .= 'KEY '; + if ( 'primary' !== $index_name ) { + $index_string .= '`' . $index_name . '`'; + } + $index_columns = ''; + + // For each column in the index. + foreach ( $index_data['columns'] as $column_data ) { + if ( $index_columns != '' ) { + $index_columns .= ','; + } + + // Add the field to the column list string. + $index_columns .= '`' . $column_data['fieldname'] . '`'; + } + + // Add the column list to the index create string. + $index_string .= " ($index_columns)"; + + // Check if the index definition exists, ignoring subparts. + if ( ! ( ( $aindex = array_search( $index_string, $indices_without_subparts ) ) === false ) ) { + // If the index already exists (even with different subparts), we don't need to create it. + unset( $indices_without_subparts[ $aindex ] ); + unset( $indices[ $aindex ] ); + } + } + } + + // For every remaining index specified for the table. + foreach ( (array) $indices as $index ) { + // Push a query line into $cqueries that adds the index to that table. + $cqueries[] = "ALTER TABLE {$table} ADD $index"; + $for_update[] = 'Added index ' . $table . ' ' . $index; + } + + // Remove the original table creation query from processing. + unset( $cqueries[ $table ], $for_update[ $table ] ); + } + + $allqueries = array_merge( $cqueries, $iqueries ); + if ( $execute ) { + foreach ( $allqueries as $query ) { + $wpdb->query( $query ); + } + } + + return $for_update; +} + +/** + * Updates the database tables to a new schema. + * + * By default, updates all the tables to use the latest defined schema, but can also + * be used to update a specific set of tables in wp_get_db_schema(). + * + * @since 1.5.0 + * + * @uses dbDelta + * + * @param string $tables Optional. Which set of tables to update. Default is 'all'. + */ +function make_db_current( $tables = 'all' ) { + $alterations = dbDelta( $tables ); + echo "
        \n"; + foreach ( $alterations as $alteration ) { + echo "
      1. $alteration
      2. \n"; + } + echo "
      \n"; +} + +/** + * Updates the database tables to a new schema, but without displaying results. + * + * By default, updates all the tables to use the latest defined schema, but can + * also be used to update a specific set of tables in wp_get_db_schema(). + * + * @since 1.5.0 + * + * @see make_db_current() + * + * @param string $tables Optional. Which set of tables to update. Default is 'all'. + */ +function make_db_current_silent( $tables = 'all' ) { + dbDelta( $tables ); +} + +/** + * Creates a site theme from an existing theme. + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param string $theme_name The name of the theme. + * @param string $template The directory name of the theme. + * @return bool + */ +function make_site_theme_from_oldschool( $theme_name, $template ) { + $home_path = get_home_path(); + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + + if ( ! file_exists( "$home_path/index.php" ) ) { + return false; + } + + /* + * Copy files from the old locations to the site theme. + * TODO: This does not copy arbitrary include dependencies. Only the standard WP files are copied. + */ + $files = array( + 'index.php' => 'index.php', + 'wp-layout.css' => 'style.css', + 'wp-comments.php' => 'comments.php', + 'wp-comments-popup.php' => 'comments-popup.php', + ); + + foreach ( $files as $oldfile => $newfile ) { + if ( $oldfile == 'index.php' ) { + $oldpath = $home_path; + } else { + $oldpath = ABSPATH; + } + + // Check to make sure it's not a new index. + if ( $oldfile == 'index.php' ) { + $index = implode( '', file( "$oldpath/$oldfile" ) ); + if ( strpos( $index, 'WP_USE_THEMES' ) !== false ) { + if ( ! @copy( WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME . '/index.php', "$site_dir/$newfile" ) ) { + return false; + } + + // Don't copy anything. + continue; + } + } + + if ( ! @copy( "$oldpath/$oldfile", "$site_dir/$newfile" ) ) { + return false; + } + + chmod( "$site_dir/$newfile", 0777 ); + + // Update the blog header include in each file. + $lines = explode( "\n", implode( '', file( "$site_dir/$newfile" ) ) ); + if ( $lines ) { + $f = fopen( "$site_dir/$newfile", 'w' ); + + foreach ( $lines as $line ) { + if ( preg_match( '/require.*wp-blog-header/', $line ) ) { + $line = '//' . $line; + } + + // Update stylesheet references. + $line = str_replace( "/wp-layout.css", "", $line ); + + // Update comments template inclusion. + $line = str_replace( "", '', $line ); + + fwrite( $f, "{$line}\n" ); + } + fclose( $f ); + } + } + + // Add a theme header. + $header = "/*\nTheme Name: $theme_name\nTheme URI: " . __get_option( 'siteurl' ) . "\nDescription: A theme automatically created by the update.\nVersion: 1.0\nAuthor: Moi\n*/\n"; + + $stylelines = file_get_contents( "$site_dir/style.css" ); + if ( $stylelines ) { + $f = fopen( "$site_dir/style.css", 'w' ); + + fwrite( $f, $header ); + fwrite( $f, $stylelines ); + fclose( $f ); + } + + return true; +} + +/** + * Creates a site theme from the default theme. + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param string $theme_name The name of the theme. + * @param string $template The directory name of the theme. + * @return false|void + */ +function make_site_theme_from_default( $theme_name, $template ) { + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + $default_dir = WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME; + + // Copy files from the default theme to the site theme. + //$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css'); + + $theme_dir = @ opendir( $default_dir ); + if ( $theme_dir ) { + while ( ( $theme_file = readdir( $theme_dir ) ) !== false ) { + if ( is_dir( "$default_dir/$theme_file" ) ) { + continue; + } + if ( ! @copy( "$default_dir/$theme_file", "$site_dir/$theme_file" ) ) { + return; + } + chmod( "$site_dir/$theme_file", 0777 ); + } + } + @closedir( $theme_dir ); + + // Rewrite the theme header. + $stylelines = explode( "\n", implode( '', file( "$site_dir/style.css" ) ) ); + if ( $stylelines ) { + $f = fopen( "$site_dir/style.css", 'w' ); + + foreach ( $stylelines as $line ) { + if ( strpos( $line, 'Theme Name:' ) !== false ) { + $line = 'Theme Name: ' . $theme_name; + } elseif ( strpos( $line, 'Theme URI:' ) !== false ) { + $line = 'Theme URI: ' . __get_option( 'url' ); + } elseif ( strpos( $line, 'Description:' ) !== false ) { + $line = 'Description: Your theme.'; + } elseif ( strpos( $line, 'Version:' ) !== false ) { + $line = 'Version: 1'; + } elseif ( strpos( $line, 'Author:' ) !== false ) { + $line = 'Author: You'; + } + fwrite( $f, $line . "\n" ); + } + fclose( $f ); + } + + // Copy the images. + umask( 0 ); + if ( ! mkdir( "$site_dir/images", 0777 ) ) { + return false; + } + + $images_dir = @ opendir( "$default_dir/images" ); + if ( $images_dir ) { + while ( ( $image = readdir( $images_dir ) ) !== false ) { + if ( is_dir( "$default_dir/images/$image" ) ) { + continue; + } + if ( ! @copy( "$default_dir/images/$image", "$site_dir/images/$image" ) ) { + return; + } + chmod( "$site_dir/images/$image", 0777 ); + } + } + @closedir( $images_dir ); +} + +/** + * Creates a site theme. + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @return false|string + */ +function make_site_theme() { + // Name the theme after the blog. + $theme_name = __get_option( 'blogname' ); + $template = sanitize_title( $theme_name ); + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + + // If the theme already exists, nothing to do. + if ( is_dir( $site_dir ) ) { + return false; + } + + // We must be able to write to the themes dir. + if ( ! is_writable( WP_CONTENT_DIR . '/themes' ) ) { + return false; + } + + umask( 0 ); + if ( ! mkdir( $site_dir, 0777 ) ) { + return false; + } + + if ( file_exists( ABSPATH . 'wp-layout.css' ) ) { + if ( ! make_site_theme_from_oldschool( $theme_name, $template ) ) { + // TODO: rm -rf the site theme directory. + return false; + } + } else { + if ( ! make_site_theme_from_default( $theme_name, $template ) ) { + // TODO: rm -rf the site theme directory. + return false; + } + } + + // Make the new site theme active. + $current_template = __get_option( 'template' ); + if ( $current_template == WP_DEFAULT_THEME ) { + update_option( 'template', $template ); + update_option( 'stylesheet', $template ); + } + return $template; +} + +/** + * Translate user level to user role name. + * + * @since 2.0.0 + * + * @param int $level User level. + * @return string User role name. + */ +function translate_level_to_role( $level ) { + switch ( $level ) { + case 10: + case 9: + case 8: + return 'administrator'; + case 7: + case 6: + case 5: + return 'editor'; + case 4: + case 3: + case 2: + return 'author'; + case 1: + return 'contributor'; + case 0: + return 'subscriber'; + } +} + +/** + * Checks the version of the installed MySQL binary. + * + * @since 2.1.0 + * + * @global wpdb $wpdb + */ +function wp_check_mysql_version() { + global $wpdb; + $result = $wpdb->check_database_version(); + if ( is_wp_error( $result ) ) { + wp_die( $result ); + } +} + +/** + * Disables the Automattic widgets plugin, which was merged into core. + * + * @since 2.2.0 + */ +function maybe_disable_automattic_widgets() { + $plugins = __get_option( 'active_plugins' ); + + foreach ( (array) $plugins as $plugin ) { + if ( basename( $plugin ) == 'widgets.php' ) { + array_splice( $plugins, array_search( $plugin, $plugins ), 1 ); + update_option( 'active_plugins', $plugins ); + break; + } + } +} + +/** + * Disables the Link Manager on upgrade if, at the time of upgrade, no links exist in the DB. + * + * @since 3.5.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb WordPress database abstraction object. + */ +function maybe_disable_link_manager() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version >= 22006 && get_option( 'link_manager_enabled' ) && ! $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) { + update_option( 'link_manager_enabled', 0 ); + } +} + +/** + * Runs before the schema is upgraded. + * + * @since 2.9.0 + * + * @global int $wp_current_db_version + * @global wpdb $wpdb WordPress database abstraction object. + */ +function pre_schema_upgrade() { + global $wp_current_db_version, $wpdb; + + // Upgrade versions prior to 2.9 + if ( $wp_current_db_version < 11557 ) { + // Delete duplicate options. Keep the option with the highest option_id. + $wpdb->query( "DELETE o1 FROM $wpdb->options AS o1 JOIN $wpdb->options AS o2 USING (`option_name`) WHERE o2.option_id > o1.option_id" ); + + // Drop the old primary key and add the new. + $wpdb->query( "ALTER TABLE $wpdb->options DROP PRIMARY KEY, ADD PRIMARY KEY(option_id)" ); + + // Drop the old option_name index. dbDelta() doesn't do the drop. + $wpdb->query( "ALTER TABLE $wpdb->options DROP INDEX option_name" ); + } + + // Multisite schema upgrades. + if ( $wp_current_db_version < 25448 && is_multisite() && wp_should_upgrade_global_tables() ) { + + // Upgrade versions prior to 3.7 + if ( $wp_current_db_version < 25179 ) { + // New primary key for signups. + $wpdb->query( "ALTER TABLE $wpdb->signups ADD signup_id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST" ); + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain" ); + } + + if ( $wp_current_db_version < 25448 ) { + // Convert archived from enum to tinyint. + $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived varchar(1) NOT NULL default '0'" ); + $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived tinyint(2) NOT NULL default 0" ); + } + } + + // Upgrade versions prior to 4.2. + if ( $wp_current_db_version < 31351 ) { + if ( ! is_multisite() && wp_should_upgrade_global_tables() ) { + $wpdb->query( "ALTER TABLE $wpdb->usermeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + } + $wpdb->query( "ALTER TABLE $wpdb->terms DROP INDEX slug, ADD INDEX slug(slug(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->terms DROP INDEX name, ADD INDEX name(name(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->commentmeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->postmeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->posts DROP INDEX post_name, ADD INDEX post_name(post_name(191))" ); + } + + // Upgrade versions prior to 4.4. + if ( $wp_current_db_version < 34978 ) { + // If compatible termmeta table is found, use it, but enforce a proper index and update collation. + if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->termmeta}'" ) && $wpdb->get_results( "SHOW INDEX FROM {$wpdb->termmeta} WHERE Column_name = 'meta_key'" ) ) { + $wpdb->query( "ALTER TABLE $wpdb->termmeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + maybe_convert_table_to_utf8mb4( $wpdb->termmeta ); + } + } +} + +if ( ! function_exists( 'install_global_terms' ) ) : + /** + * Install global terms. + * + * @since 3.0.0 + * + * @global wpdb $wpdb + * @global string $charset_collate + */ + function install_global_terms() { + global $wpdb, $charset_collate; + $ms_queries = " +CREATE TABLE $wpdb->sitecategories ( + cat_ID bigint(20) NOT NULL auto_increment, + cat_name varchar(55) NOT NULL default '', + category_nicename varchar(200) NOT NULL default '', + last_updated timestamp NOT NULL, + PRIMARY KEY (cat_ID), + KEY category_nicename (category_nicename), + KEY last_updated (last_updated) +) $charset_collate; +"; + // now create tables + dbDelta( $ms_queries ); + } +endif; + +/** + * Determine if global tables should be upgraded. + * + * This function performs a series of checks to ensure the environment allows + * for the safe upgrading of global WordPress database tables. It is necessary + * because global tables will commonly grow to millions of rows on large + * installations, and the ability to control their upgrade routines can be + * critical to the operation of large networks. + * + * In a future iteration, this function may use `wp_is_large_network()` to more- + * intelligently prevent global table upgrades. Until then, we make sure + * WordPress is on the main site of the main network, to avoid running queries + * more than once in multi-site or multi-network environments. + * + * @since 4.3.0 + * + * @return bool Whether to run the upgrade routines on global tables. + */ +function wp_should_upgrade_global_tables() { + + // Return false early if explicitly not upgrading + if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + return false; + } + + // Assume global tables should be upgraded + $should_upgrade = true; + + // Set to false if not on main network (does not matter if not multi-network) + if ( ! is_main_network() ) { + $should_upgrade = false; + } + + // Set to false if not on main site of current network (does not matter if not multi-site) + if ( ! is_main_site() ) { + $should_upgrade = false; + } + + /** + * Filters if upgrade routines should be run on global tables. + * + * @param bool $should_upgrade Whether to run the upgrade routines on global tables. + */ + return apply_filters( 'wp_should_upgrade_global_tables', $should_upgrade ); +} diff --git a/wp-admin/includes/user.php b/wp-admin/includes/user.php new file mode 100644 index 000000000..558ff2497 --- /dev/null +++ b/wp-admin/includes/user.php @@ -0,0 +1,1723 @@ +ID = $user_id; + $userdata = get_userdata( $user_id ); + $user->user_login = wp_slash( $userdata->user_login ); + } else { + $update = false; + } + + if ( ! $update && isset( $_POST['user_login'] ) ) { + $user->user_login = sanitize_user( $_POST['user_login'], true ); + } + + $pass1 = $pass2 = ''; + if ( isset( $_POST['pass1'] ) ) { + $pass1 = $_POST['pass1']; + } + if ( isset( $_POST['pass2'] ) ) { + $pass2 = $_POST['pass2']; + } + + if ( isset( $_POST['role'] ) && current_user_can( 'promote_users' ) && ( ! $user_id || current_user_can( 'promote_user', $user_id ) ) ) { + $new_role = sanitize_text_field( $_POST['role'] ); + + // If the new role isn't editable by the logged-in user die with error. + $editable_roles = get_editable_roles(); + if ( ! empty( $new_role ) && empty( $editable_roles[ $new_role ] ) ) { + wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 ); + } + + $potential_role = isset( $wp_roles->role_objects[ $new_role ] ) ? $wp_roles->role_objects[ $new_role ] : false; + + /* + * Don't let anyone with 'promote_users' edit their own role to something without it. + * Multisite super admins can freely edit their roles, they possess all caps. + */ + if ( + ( is_multisite() && current_user_can( 'manage_network_users' ) ) || + $user_id !== get_current_user_id() || + ( $potential_role && $potential_role->has_cap( 'promote_users' ) ) + ) { + $user->role = $new_role; + } + } + + if ( isset( $_POST['email'] ) ) { + $user->user_email = sanitize_text_field( wp_unslash( $_POST['email'] ) ); + } + if ( isset( $_POST['url'] ) ) { + if ( empty( $_POST['url'] ) || $_POST['url'] == 'http://' ) { + $user->user_url = ''; + } else { + $user->user_url = esc_url_raw( $_POST['url'] ); + $protocols = implode( '|', array_map( 'preg_quote', wp_allowed_protocols() ) ); + $user->user_url = preg_match( '/^(' . $protocols . '):/is', $user->user_url ) ? $user->user_url : 'http://' . $user->user_url; + } + } + if ( isset( $_POST['first_name'] ) ) { + $user->first_name = sanitize_text_field( $_POST['first_name'] ); + } + if ( isset( $_POST['last_name'] ) ) { + $user->last_name = sanitize_text_field( $_POST['last_name'] ); + } + if ( isset( $_POST['nickname'] ) ) { + $user->nickname = sanitize_text_field( $_POST['nickname'] ); + } + if ( isset( $_POST['display_name'] ) ) { + $user->display_name = sanitize_text_field( $_POST['display_name'] ); + } + + if ( isset( $_POST['description'] ) ) { + $user->description = trim( $_POST['description'] ); + } + + foreach ( wp_get_user_contact_methods( $user ) as $method => $name ) { + if ( isset( $_POST[ $method ] ) ) { + $user->$method = sanitize_text_field( $_POST[ $method ] ); + } + } + + if ( $update ) { + $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' === $_POST['rich_editing'] ? 'false' : 'true'; + $user->syntax_highlighting = isset( $_POST['syntax_highlighting'] ) && 'false' === $_POST['syntax_highlighting'] ? 'false' : 'true'; + $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh'; + $user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false'; + $user->locale = ''; + + if ( isset( $_POST['locale'] ) ) { + $locale = sanitize_text_field( $_POST['locale'] ); + if ( 'site-default' === $locale ) { + $locale = ''; + } elseif ( '' === $locale ) { + $locale = 'en_US'; + } elseif ( ! in_array( $locale, get_available_languages(), true ) ) { + $locale = ''; + } + + $user->locale = $locale; + } + } + + $user->comment_shortcuts = isset( $_POST['comment_shortcuts'] ) && 'true' == $_POST['comment_shortcuts'] ? 'true' : ''; + + $user->use_ssl = 0; + if ( ! empty( $_POST['use_ssl'] ) ) { + $user->use_ssl = 1; + } + + $errors = new WP_Error(); + + /* checking that username has been typed */ + if ( $user->user_login == '' ) { + $errors->add( 'user_login', __( 'ERROR: Please enter a username.' ) ); + } + + /* checking that nickname has been typed */ + if ( $update && empty( $user->nickname ) ) { + $errors->add( 'nickname', __( 'ERROR: Please enter a nickname.' ) ); + } + + /** + * Fires before the password and confirm password fields are checked for congruity. + * + * @since 1.5.1 + * + * @param string $user_login The username. + * @param string $pass1 The password (passed by reference). + * @param string $pass2 The confirmed password (passed by reference). + */ + do_action_ref_array( 'check_passwords', array( $user->user_login, &$pass1, &$pass2 ) ); + + // Check for blank password when adding a user. + if ( ! $update && empty( $pass1 ) ) { + $errors->add( 'pass', __( 'ERROR: Please enter a password.' ), array( 'form-field' => 'pass1' ) ); + } + + // Check for "\" in password. + if ( false !== strpos( wp_unslash( $pass1 ), '\\' ) ) { + $errors->add( 'pass', __( 'ERROR: Passwords may not contain the character "\\".' ), array( 'form-field' => 'pass1' ) ); + } + + // Checking the password has been typed twice the same. + if ( ( $update || ! empty( $pass1 ) ) && $pass1 != $pass2 ) { + $errors->add( 'pass', __( 'ERROR: Please enter the same password in both password fields.' ), array( 'form-field' => 'pass1' ) ); + } + + if ( ! empty( $pass1 ) ) { + $user->user_pass = $pass1; + } + + if ( ! $update && isset( $_POST['user_login'] ) && ! validate_username( $_POST['user_login'] ) ) { + $errors->add( 'user_login', __( 'ERROR: This username is invalid because it uses illegal characters. Please enter a valid username.' ) ); + } + + if ( ! $update && username_exists( $user->user_login ) ) { + $errors->add( 'user_login', __( 'ERROR: This username is already registered. Please choose another one.' ) ); + } + + /** This filter is documented in wp-includes/user.php */ + $illegal_logins = (array) apply_filters( 'illegal_user_logins', array() ); + + if ( in_array( strtolower( $user->user_login ), array_map( 'strtolower', $illegal_logins ) ) ) { + $errors->add( 'invalid_username', __( 'ERROR: Sorry, that username is not allowed.' ) ); + } + + /* checking email address */ + if ( empty( $user->user_email ) ) { + $errors->add( 'empty_email', __( 'ERROR: Please enter an email address.' ), array( 'form-field' => 'email' ) ); + } elseif ( ! is_email( $user->user_email ) ) { + $errors->add( 'invalid_email', __( 'ERROR: The email address isn’t correct.' ), array( 'form-field' => 'email' ) ); + } elseif ( ( $owner_id = email_exists( $user->user_email ) ) && ( ! $update || ( $owner_id != $user->ID ) ) ) { + $errors->add( 'email_exists', __( 'ERROR: This email is already registered, please choose another one.' ), array( 'form-field' => 'email' ) ); + } + + /** + * Fires before user profile update errors are returned. + * + * @since 2.8.0 + * + * @param WP_Error $errors WP_Error object (passed by reference). + * @param bool $update Whether this is a user update. + * @param stdClass $user User object (passed by reference). + */ + do_action_ref_array( 'user_profile_update_errors', array( &$errors, $update, &$user ) ); + + if ( $errors->has_errors() ) { + return $errors; + } + + if ( $update ) { + $user_id = wp_update_user( $user ); + } else { + $user_id = wp_insert_user( $user ); + $notify = isset( $_POST['send_user_notification'] ) ? 'both' : 'admin'; + + /** + * Fires after a new user has been created. + * + * @since 4.4.0 + * + * @param int $user_id ID of the newly created user. + * @param string $notify Type of notification that should happen. See wp_send_new_user_notifications() + * for more information on possible values. + */ + do_action( 'edit_user_created_user', $user_id, $notify ); + } + return $user_id; +} + +/** + * Fetch a filtered list of user roles that the current user is + * allowed to edit. + * + * Simple function whose main purpose is to allow filtering of the + * list of roles in the $wp_roles object so that plugins can remove + * inappropriate ones depending on the situation or user making edits. + * Specifically because without filtering anyone with the edit_users + * capability can edit others to be administrators, even if they are + * only editors or authors. This filter allows admins to delegate + * user management. + * + * @since 2.8.0 + * + * @return array[] Array of arrays containing role information. + */ +function get_editable_roles() { + $all_roles = wp_roles()->roles; + + /** + * Filters the list of editable roles. + * + * @since 2.8.0 + * + * @param array[] $all_roles Array of arrays containing role information. + */ + $editable_roles = apply_filters( 'editable_roles', $all_roles ); + + return $editable_roles; +} + +/** + * Retrieve user data and filter it. + * + * @since 2.0.5 + * + * @param int $user_id User ID. + * @return WP_User|bool WP_User object on success, false on failure. + */ +function get_user_to_edit( $user_id ) { + $user = get_userdata( $user_id ); + + if ( $user ) { + $user->filter = 'edit'; + } + + return $user; +} + +/** + * Retrieve the user's drafts. + * + * @since 2.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $user_id User ID. + * @return array + */ +function get_users_drafts( $user_id ) { + global $wpdb; + $query = $wpdb->prepare( "SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author = %d ORDER BY post_modified DESC", $user_id ); + + /** + * Filters the user's drafts query string. + * + * @since 2.0.0 + * + * @param string $query The user's drafts query string. + */ + $query = apply_filters( 'get_users_drafts', $query ); + return $wpdb->get_results( $query ); +} + +/** + * Remove user and optionally reassign posts and links to another user. + * + * If the $reassign parameter is not assigned to a User ID, then all posts will + * be deleted of that user. The action {@see 'delete_user'} that is passed the User ID + * being deleted will be run after the posts are either reassigned or deleted. + * The user meta will also be deleted that are for that User ID. + * + * @since 2.0.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $id User ID. + * @param int $reassign Optional. Reassign posts and links to new User ID. + * @return bool True when finished. + */ +function wp_delete_user( $id, $reassign = null ) { + global $wpdb; + + if ( ! is_numeric( $id ) ) { + return false; + } + + $id = (int) $id; + $user = new WP_User( $id ); + + if ( ! $user->exists() ) { + return false; + } + + // Normalize $reassign to null or a user ID. 'novalue' was an older default. + if ( 'novalue' === $reassign ) { + $reassign = null; + } elseif ( null !== $reassign ) { + $reassign = (int) $reassign; + } + + /** + * Fires immediately before a user is deleted from the database. + * + * @since 2.0.0 + * + * @param int $id ID of the user to delete. + * @param int|null $reassign ID of the user to reassign posts and links to. + * Default null, for no reassignment. + */ + do_action( 'delete_user', $id, $reassign ); + + if ( null === $reassign ) { + $post_types_to_delete = array(); + foreach ( get_post_types( array(), 'objects' ) as $post_type ) { + if ( $post_type->delete_with_user ) { + $post_types_to_delete[] = $post_type->name; + } elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) { + $post_types_to_delete[] = $post_type->name; + } + } + + /** + * Filters the list of post types to delete with a user. + * + * @since 3.4.0 + * + * @param string[] $post_types_to_delete Array of post types to delete. + * @param int $id User ID. + */ + $post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $id ); + $post_types_to_delete = implode( "', '", $post_types_to_delete ); + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d AND post_type IN ('$post_types_to_delete')", $id ) ); + if ( $post_ids ) { + foreach ( $post_ids as $post_id ) { + wp_delete_post( $post_id ); + } + } + + // Clean links + $link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id ) ); + + if ( $link_ids ) { + foreach ( $link_ids as $link_id ) { + wp_delete_link( $link_id ); + } + } + } else { + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id ) ); + $wpdb->update( $wpdb->posts, array( 'post_author' => $reassign ), array( 'post_author' => $id ) ); + if ( ! empty( $post_ids ) ) { + foreach ( $post_ids as $post_id ) { + clean_post_cache( $post_id ); + } + } + $link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id ) ); + $wpdb->update( $wpdb->links, array( 'link_owner' => $reassign ), array( 'link_owner' => $id ) ); + if ( ! empty( $link_ids ) ) { + foreach ( $link_ids as $link_id ) { + clean_bookmark_cache( $link_id ); + } + } + } + + // FINALLY, delete user + if ( is_multisite() ) { + remove_user_from_blog( $id, get_current_blog_id() ); + } else { + $meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) ); + foreach ( $meta as $mid ) { + delete_metadata_by_mid( 'user', $mid ); + } + + $wpdb->delete( $wpdb->users, array( 'ID' => $id ) ); + } + + clean_user_cache( $user ); + + /** + * Fires immediately after a user is deleted from the database. + * + * @since 2.9.0 + * + * @param int $id ID of the deleted user. + * @param int|null $reassign ID of the user to reassign posts and links to. + * Default null, for no reassignment. + */ + do_action( 'deleted_user', $id, $reassign ); + + return true; +} + +/** + * Remove all capabilities from user. + * + * @since 2.1.0 + * + * @param int $id User ID. + */ +function wp_revoke_user( $id ) { + $id = (int) $id; + + $user = new WP_User( $id ); + $user->remove_all_caps(); +} + +/** + * @since 2.8.0 + * + * @global int $user_ID + * + * @param false $errors Deprecated. + */ +function default_password_nag_handler( $errors = false ) { + global $user_ID; + // Short-circuit it. + if ( ! get_user_option( 'default_password_nag' ) ) { + return; + } + + // get_user_setting = JS saved UI setting. else no-js-fallback code. + if ( 'hide' == get_user_setting( 'default_password_nag' ) || isset( $_GET['default_password_nag'] ) && '0' == $_GET['default_password_nag'] ) { + delete_user_setting( 'default_password_nag' ); + update_user_option( $user_ID, 'default_password_nag', false, true ); + } +} + +/** + * @since 2.8.0 + * + * @param int $user_ID + * @param object $old_data + */ +function default_password_nag_edit_user( $user_ID, $old_data ) { + // Short-circuit it. + if ( ! get_user_option( 'default_password_nag', $user_ID ) ) { + return; + } + + $new_data = get_userdata( $user_ID ); + + // Remove the nag if the password has been changed. + if ( $new_data->user_pass != $old_data->user_pass ) { + delete_user_setting( 'default_password_nag' ); + update_user_option( $user_ID, 'default_password_nag', false, true ); + } +} + +/** + * @since 2.8.0 + * + * @global string $pagenow + */ +function default_password_nag() { + global $pagenow; + // Short-circuit it. + if ( 'profile.php' == $pagenow || ! get_user_option( 'default_password_nag' ) ) { + return; + } + + echo '
      '; + echo '

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

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

      '; +} + +/** + * @since 3.5.0 + * @access private + */ +function delete_users_add_js() { + ?> + + + + + + + post_type ) { + return new WP_Error( 'privacy_request_error', __( 'Invalid request.' ) ); + } + + $result = wp_send_user_request( $request_id ); + + if ( is_wp_error( $result ) ) { + return $result; + } elseif ( ! $result ) { + return new WP_Error( 'privacy_request_error', __( 'Unable to initiate confirmation request.' ) ); + } + + return true; +} + +/** + * Marks a request as completed by the admin and logs the current timestamp. + * + * @since 4.9.6 + * @access private + * + * @param int $request_id Request ID. + * @return int|WP_Error $result Request ID on success or WP_Error. + */ +function _wp_privacy_completed_request( $request_id ) { + $request_id = absint( $request_id ); + $request = wp_get_user_request_data( $request_id ); + + if ( ! $request ) { + return new WP_Error( 'privacy_request_error', __( 'Invalid request.' ) ); + } + + update_post_meta( $request_id, '_wp_user_request_completed_timestamp', time() ); + + $result = wp_update_post( + array( + 'ID' => $request_id, + 'post_status' => 'request-completed', + ) + ); + + return $result; +} + +/** + * Handle list table actions. + * + * @since 4.9.6 + * @access private + */ +function _wp_personal_data_handle_actions() { + if ( isset( $_POST['privacy_action_email_retry'] ) ) { + check_admin_referer( 'bulk-privacy_requests' ); + + $request_id = absint( current( array_keys( (array) wp_unslash( $_POST['privacy_action_email_retry'] ) ) ) ); + $result = _wp_privacy_resend_request( $request_id ); + + if ( is_wp_error( $result ) ) { + add_settings_error( + 'privacy_action_email_retry', + 'privacy_action_email_retry', + $result->get_error_message(), + 'error' + ); + } else { + add_settings_error( + 'privacy_action_email_retry', + 'privacy_action_email_retry', + __( 'Confirmation request sent again successfully.' ), + 'updated' + ); + } + } elseif ( isset( $_POST['action'] ) ) { + $action = isset( $_POST['action'] ) ? sanitize_key( wp_unslash( $_POST['action'] ) ) : ''; + + switch ( $action ) { + case 'add_export_personal_data_request': + case 'add_remove_personal_data_request': + check_admin_referer( 'personal-data-request' ); + + if ( ! isset( $_POST['type_of_action'], $_POST['username_or_email_for_privacy_request'] ) ) { + add_settings_error( + 'action_type', + 'action_type', + __( 'Invalid action.' ), + 'error' + ); + } + $action_type = sanitize_text_field( wp_unslash( $_POST['type_of_action'] ) ); + $username_or_email_address = sanitize_text_field( wp_unslash( $_POST['username_or_email_for_privacy_request'] ) ); + $email_address = ''; + + if ( ! in_array( $action_type, _wp_privacy_action_request_types(), true ) ) { + add_settings_error( + 'action_type', + 'action_type', + __( 'Invalid action.' ), + 'error' + ); + } + + if ( ! is_email( $username_or_email_address ) ) { + $user = get_user_by( 'login', $username_or_email_address ); + if ( ! $user instanceof WP_User ) { + add_settings_error( + 'username_or_email_for_privacy_request', + 'username_or_email_for_privacy_request', + __( 'Unable to add this request. A valid email address or username must be supplied.' ), + 'error' + ); + } else { + $email_address = $user->user_email; + } + } else { + $email_address = $username_or_email_address; + } + + if ( empty( $email_address ) ) { + break; + } + + $request_id = wp_create_user_request( $email_address, $action_type ); + + if ( is_wp_error( $request_id ) ) { + add_settings_error( + 'username_or_email_for_privacy_request', + 'username_or_email_for_privacy_request', + $request_id->get_error_message(), + 'error' + ); + break; + } elseif ( ! $request_id ) { + add_settings_error( + 'username_or_email_for_privacy_request', + 'username_or_email_for_privacy_request', + __( 'Unable to initiate confirmation request.' ), + 'error' + ); + break; + } + + wp_send_user_request( $request_id ); + + add_settings_error( + 'username_or_email_for_privacy_request', + 'username_or_email_for_privacy_request', + __( 'Confirmation request initiated successfully.' ), + 'updated' + ); + break; + } + } +} + +/** + * Cleans up failed and expired requests before displaying the list table. + * + * @since 4.9.6 + * @access private + */ +function _wp_personal_data_cleanup_requests() { + /** This filter is documented in wp-includes/user.php */ + $expires = (int) apply_filters( 'user_request_key_expiration', DAY_IN_SECONDS ); + + $requests_query = new WP_Query( + array( + 'post_type' => 'user_request', + 'posts_per_page' => -1, + 'post_status' => 'request-pending', + 'fields' => 'ids', + 'date_query' => array( + array( + 'column' => 'post_modified_gmt', + 'before' => $expires . ' seconds ago', + ), + ), + ) + ); + + $request_ids = $requests_query->posts; + + foreach ( $request_ids as $request_id ) { + wp_update_post( + array( + 'ID' => $request_id, + 'post_status' => 'request-failed', + 'post_password' => '', + ) + ); + } +} + +/** + * Personal data export. + * + * @since 4.9.6 + * @access private + */ +function _wp_personal_data_export_page() { + if ( ! current_user_can( 'export_others_personal_data' ) ) { + wp_die( __( 'Sorry, you are not allowed to export personal data on this site.' ) ); + } + + _wp_personal_data_handle_actions(); + _wp_personal_data_cleanup_requests(); + + // "Borrow" xfn.js for now so we don't have to create new files. + wp_enqueue_script( 'xfn' ); + + $requests_table = new WP_Privacy_Data_Export_Requests_Table( + array( + 'plural' => 'privacy_requests', + 'singular' => 'privacy_request', + 'screen' => 'export_personal_data', + ) + ); + + $requests_table->screen->set_screen_reader_content( + array( + 'heading_views' => __( 'Filter export personal data list' ), + 'heading_pagination' => __( 'Export personal data list navigation' ), + 'heading_list' => __( 'Export personal data list' ), + ) + ); + + $requests_table->process_bulk_action(); + $requests_table->prepare_items(); + ?> +
      +

      +
      + + + +
      +

      +

      + +
      + + + +
      + + + +
      +
      + + views(); ?> + +
      + search_box( __( 'Search Requests' ), 'requests' ); ?> + + + + +
      + +
      + display(); + $requests_table->embed_scripts(); + ?> +
      +
      + 'privacy_requests', + 'singular' => 'privacy_request', + 'screen' => 'remove_personal_data', + ) + ); + + $requests_table->screen->set_screen_reader_content( + array( + 'heading_views' => __( 'Filter erase personal data list' ), + 'heading_pagination' => __( 'Erase personal data list navigation' ), + 'heading_list' => __( 'Erase personal data list' ), + ) + ); + + $requests_table->process_bulk_action(); + $requests_table->prepare_items(); + + ?> +
      +

      +
      + + + +
      +

      +

      + +
      + + + +
      + + + +
      +
      + + views(); ?> + +
      + search_box( __( 'Search Requests' ), 'requests' ); ?> + + + + +
      + +
      + display(); + $requests_table->embed_scripts(); + ?> +
      +
      + action_name ) { + wp_send_json_error( __( 'Invalid request ID when processing eraser data.' ) ); + } + + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() ); + $is_last_eraser = count( $erasers ) === $eraser_index; + $eraser_done = $response['done']; + + if ( ! $is_last_eraser || ! $eraser_done ) { + return $response; + } + + _wp_privacy_completed_request( $request_id ); + + /** + * Fires immediately after a personal data erasure request has been marked completed. + * + * @since 4.9.6 + * + * @param int $request_id The privacy request post ID associated with this request. + */ + do_action( 'wp_privacy_personal_data_erased', $request_id ); + + return $response; +} + +/** + * Add requests pages. + * + * @since 4.9.6 + * @access private + */ +function _wp_privacy_hook_requests_page() { + add_submenu_page( 'tools.php', __( 'Export Personal Data' ), __( 'Export Personal Data' ), 'export_others_personal_data', 'export_personal_data', '_wp_personal_data_export_page' ); + add_submenu_page( 'tools.php', __( 'Erase Personal Data' ), __( 'Erase Personal Data' ), 'erase_others_personal_data', 'remove_personal_data', '_wp_personal_data_removal_page' ); +} + +/** + * Add options for the privacy requests screens. + * + * @since 4.9.8 + * @access private + */ +function _wp_privacy_requests_screen_options() { + $args = array( + 'option' => str_replace( 'tools_page_', '', get_current_screen()->id ) . '_requests_per_page', + ); + add_screen_option( 'per_page', $args ); +} + +// TODO: move the following classes in new files. +if ( ! class_exists( 'WP_List_Table' ) ) { + require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); +} + +/** + * WP_Privacy_Requests_Table class. + * + * @since 4.9.6 + */ +abstract class WP_Privacy_Requests_Table extends WP_List_Table { + + /** + * Action name for the requests this table will work with. Classes + * which inherit from WP_Privacy_Requests_Table should define this. + * + * Example: 'export_personal_data'. + * + * @since 4.9.6 + * + * @var string $request_type Name of action. + */ + protected $request_type = 'INVALID'; + + /** + * Post type to be used. + * + * @since 4.9.6 + * + * @var string $post_type The post type. + */ + protected $post_type = 'INVALID'; + + /** + * Get columns to show in the list table. + * + * @since 4.9.6 + * + * @return array Array of columns. + */ + public function get_columns() { + $columns = array( + 'cb' => '', + 'email' => __( 'Requester' ), + 'status' => __( 'Status' ), + 'created_timestamp' => __( 'Requested' ), + 'next_steps' => __( 'Next Steps' ), + ); + return $columns; + } + + /** + * Get a list of sortable columns. + * + * @since 4.9.6 + * + * @return array Default sortable columns. + */ + protected function get_sortable_columns() { + // The initial sorting is by 'Requested' (post_date) and descending. + // With initial sorting, the first click on 'Requested' should be ascending. + // With 'Requester' sorting active, the next click on 'Requested' should be descending. + $desc_first = isset( $_GET['orderby'] ); + + return array( + 'email' => 'requester', + 'created_timestamp' => array( 'requested', $desc_first ), + ); + } + + /** + * Default primary column. + * + * @since 4.9.6 + * + * @return string Default primary column name. + */ + protected function get_default_primary_column_name() { + return 'email'; + } + + /** + * Count number of requests for each status. + * + * @since 4.9.6 + * + * @return object Number of posts for each status. + */ + protected function get_request_counts() { + global $wpdb; + + $cache_key = $this->post_type . '-' . $this->request_type; + $counts = wp_cache_get( $cache_key, 'counts' ); + + if ( false !== $counts ) { + return $counts; + } + + $query = " + SELECT post_status, COUNT( * ) AS num_posts + FROM {$wpdb->posts} + WHERE post_type = %s + AND post_name = %s + GROUP BY post_status"; + + $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $this->post_type, $this->request_type ), ARRAY_A ); + $counts = array_fill_keys( get_post_stati(), 0 ); + + foreach ( $results as $row ) { + $counts[ $row['post_status'] ] = $row['num_posts']; + } + + $counts = (object) $counts; + wp_cache_set( $cache_key, $counts, 'counts' ); + + return $counts; + } + + /** + * Get an associative array ( id => link ) with the list of views available on this table. + * + * @since 4.9.6 + * + * @return array Associative array of views in the format of $view_name => $view_markup. + */ + protected function get_views() { + $current_status = isset( $_REQUEST['filter-status'] ) ? sanitize_text_field( $_REQUEST['filter-status'] ) : ''; + $statuses = _wp_privacy_statuses(); + $views = array(); + $admin_url = admin_url( 'tools.php?page=' . $this->request_type ); + $counts = $this->get_request_counts(); + $total_requests = absint( array_sum( (array) $counts ) ); + + $current_link_attributes = empty( $current_status ) ? ' class="current" aria-current="page"' : ''; + $status_label = sprintf( + /* translators: %s: all requests count */ + _nx( + 'All (%s)', + 'All (%s)', + $total_requests, + 'requests' + ), + number_format_i18n( $total_requests ) + ); + + $views['all'] = sprintf( + '%s', + esc_url( $admin_url ), + $current_link_attributes, + $status_label + ); + + foreach ( $statuses as $status => $label ) { + $post_status = get_post_status_object( $status ); + if ( ! $post_status ) { + continue; + } + + $current_link_attributes = $status === $current_status ? ' class="current" aria-current="page"' : ''; + $total_status_requests = absint( $counts->{$status} ); + $status_label = sprintf( + translate_nooped_plural( $post_status->label_count, $total_status_requests ), + number_format_i18n( $total_status_requests ) + ); + $status_link = add_query_arg( 'filter-status', $status, $admin_url ); + + $views[ $status ] = sprintf( + '%s', + esc_url( $status_link ), + $current_link_attributes, + $status_label + ); + } + + return $views; + } + + /** + * Get bulk actions. + * + * @since 4.9.6 + * + * @return array List of bulk actions. + */ + protected function get_bulk_actions() { + return array( + 'delete' => __( 'Remove' ), + 'resend' => __( 'Resend email' ), + ); + } + + /** + * Process bulk actions. + * + * @since 4.9.6 + */ + public function process_bulk_action() { + $action = $this->current_action(); + $request_ids = isset( $_REQUEST['request_id'] ) ? wp_parse_id_list( wp_unslash( $_REQUEST['request_id'] ) ) : array(); + + $count = 0; + + if ( $request_ids ) { + check_admin_referer( 'bulk-privacy_requests' ); + } + + switch ( $action ) { + case 'delete': + foreach ( $request_ids as $request_id ) { + if ( wp_delete_post( $request_id, true ) ) { + $count ++; + } + } + + add_settings_error( + 'bulk_action', + 'bulk_action', + /* translators: %d: number of requests */ + sprintf( _n( 'Deleted %d request', 'Deleted %d requests', $count ), $count ), + 'updated' + ); + break; + case 'resend': + foreach ( $request_ids as $request_id ) { + $resend = _wp_privacy_resend_request( $request_id ); + + if ( $resend && ! is_wp_error( $resend ) ) { + $count++; + } + } + + add_settings_error( + 'bulk_action', + 'bulk_action', + /* translators: %d: number of requests */ + sprintf( _n( 'Re-sent %d request', 'Re-sent %d requests', $count ), $count ), + 'updated' + ); + break; + } + } + + /** + * Prepare items to output. + * + * @since 4.9.6 + * @since 5.1.0 Added support for column sorting. + */ + public function prepare_items() { + global $wpdb; + + $this->items = array(); + $posts_per_page = $this->get_items_per_page( $this->request_type . '_requests_per_page' ); + $args = array( + 'post_type' => $this->post_type, + 'post_name__in' => array( $this->request_type ), + 'posts_per_page' => $posts_per_page, + 'offset' => isset( $_REQUEST['paged'] ) ? max( 0, absint( $_REQUEST['paged'] ) - 1 ) * $posts_per_page : 0, + 'post_status' => 'any', + 's' => isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '', + ); + + $orderby_mapping = array( + 'requester' => 'post_title', + 'requested' => 'post_date', + ); + + if ( isset( $_REQUEST['orderby'] ) && isset( $orderby_mapping[ $_REQUEST['orderby'] ] ) ) { + $args['orderby'] = $orderby_mapping[ $_REQUEST['orderby'] ]; + } + + if ( isset( $_REQUEST['order'] ) && in_array( strtoupper( $_REQUEST['order'] ), array( 'ASC', 'DESC' ), true ) ) { + $args['order'] = strtoupper( $_REQUEST['order'] ); + } + + if ( ! empty( $_REQUEST['filter-status'] ) ) { + $filter_status = isset( $_REQUEST['filter-status'] ) ? sanitize_text_field( $_REQUEST['filter-status'] ) : ''; + $args['post_status'] = $filter_status; + } + + $requests_query = new WP_Query( $args ); + $requests = $requests_query->posts; + + foreach ( $requests as $request ) { + $this->items[] = wp_get_user_request_data( $request->ID ); + } + + $this->items = array_filter( $this->items ); + + $this->set_pagination_args( + array( + 'total_items' => $requests_query->found_posts, + 'per_page' => $posts_per_page, + ) + ); + } + + /** + * Checkbox column. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + * @return string Checkbox column markup. + */ + public function column_cb( $item ) { + return sprintf( '', esc_attr( $item->ID ) ); + } + + /** + * Status column. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + * @return string Status column markup. + */ + public function column_status( $item ) { + $status = get_post_status( $item->ID ); + $status_object = get_post_status_object( $status ); + + if ( ! $status_object || empty( $status_object->label ) ) { + return '-'; + } + + $timestamp = false; + + switch ( $status ) { + case 'request-confirmed': + $timestamp = $item->confirmed_timestamp; + break; + case 'request-completed': + $timestamp = $item->completed_timestamp; + break; + } + + echo ''; + echo esc_html( $status_object->label ); + + if ( $timestamp ) { + echo ' (' . $this->get_timestamp_as_date( $timestamp ) . ')'; + } + + echo ''; + } + + /** + * Convert timestamp for display. + * + * @since 4.9.6 + * + * @param int $timestamp Event timestamp. + * @return string Human readable date. + */ + protected function get_timestamp_as_date( $timestamp ) { + if ( empty( $timestamp ) ) { + return ''; + } + + $time_diff = time() - $timestamp; + + if ( $time_diff >= 0 && $time_diff < DAY_IN_SECONDS ) { + /* translators: human readable timestamp */ + return sprintf( __( '%s ago' ), human_time_diff( $timestamp ) ); + } + + return date_i18n( get_option( 'date_format' ), $timestamp ); + } + + /** + * Default column handler. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + * @param string $column_name Name of column being shown. + * @return string Default column output. + */ + public function column_default( $item, $column_name ) { + $cell_value = $item->$column_name; + + if ( in_array( $column_name, array( 'created_timestamp' ), true ) ) { + return $this->get_timestamp_as_date( $cell_value ); + } + + return $cell_value; + } + + /** + * Actions column. Overridden by children. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + * @return string Email column markup. + */ + public function column_email( $item ) { + return sprintf( '%2$s %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( array() ) ); + } + + /** + * Next steps column. Overridden by children. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + */ + public function column_next_steps( $item ) {} + + /** + * Generates content for a single row of the table, + * + * @since 4.9.6 + * + * @param WP_User_Request $item The current item. + */ + public function single_row( $item ) { + $status = $item->status; + + echo ''; + $this->single_row_columns( $item ); + echo ''; + } + + /** + * Embed scripts used to perform actions. Overridden by children. + * + * @since 4.9.6 + */ + public function embed_scripts() {} +} + +/** + * WP_Privacy_Data_Export_Requests_Table class. + * + * @since 4.9.6 + */ +class WP_Privacy_Data_Export_Requests_Table extends WP_Privacy_Requests_Table { + /** + * Action name for the requests this table will work with. + * + * @since 4.9.6 + * + * @var string $request_type Name of action. + */ + protected $request_type = 'export_personal_data'; + + /** + * Post type for the requests. + * + * @since 4.9.6 + * + * @var string $post_type The post type. + */ + protected $post_type = 'user_request'; + + /** + * Actions column. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + * @return string Email column markup. + */ + public function column_email( $item ) { + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() ); + $exporters_count = count( $exporters ); + $request_id = $item->ID; + $nonce = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id ); + + $download_data_markup = '
      '; + + $download_data_markup .= '' . + '' . + '' . + ''; + + $download_data_markup .= '
      '; + + $row_actions = array( + 'download-data' => $download_data_markup, + ); + + return sprintf( '%2$s %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) ); + } + + /** + * Displays the next steps column. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + */ + public function column_next_steps( $item ) { + $status = $item->status; + + switch ( $status ) { + case 'request-pending': + esc_html_e( 'Waiting for confirmation' ); + break; + case 'request-confirmed': + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() ); + $exporters_count = count( $exporters ); + $request_id = $item->ID; + $nonce = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id ); + + echo '
      '; + + ?> + + + + + '; + break; + case 'request-failed': + submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item->ID . ']', false ); + break; + case 'request-completed': + echo '' . esc_html__( 'Remove request' ) . ''; + break; + } + } +} + +/** + * WP_Privacy_Data_Removal_Requests_Table class. + * + * @since 4.9.6 + */ +class WP_Privacy_Data_Removal_Requests_Table extends WP_Privacy_Requests_Table { + /** + * Action name for the requests this table will work with. + * + * @since 4.9.6 + * + * @var string $request_type Name of action. + */ + protected $request_type = 'remove_personal_data'; + + /** + * Post type for the requests. + * + * @since 4.9.6 + * + * @var string $post_type The post type. + */ + protected $post_type = 'user_request'; + + /** + * Actions column. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + * @return string Email column markup. + */ + public function column_email( $item ) { + $row_actions = array(); + + // Allow the administrator to "force remove" the personal data even if confirmation has not yet been received. + $status = $item->status; + if ( 'request-confirmed' !== $status ) { + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() ); + $erasers_count = count( $erasers ); + $request_id = $item->ID; + $nonce = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id ); + + $remove_data_markup = '
      '; + + $remove_data_markup .= '' . + '' . + ''; + + $remove_data_markup .= '
      '; + + $row_actions = array( + 'remove-data' => $remove_data_markup, + ); + } + + return sprintf( '%2$s %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) ); + } + + /** + * Next steps column. + * + * @since 4.9.6 + * + * @param WP_User_Request $item Item being shown. + */ + public function column_next_steps( $item ) { + $status = $item->status; + + switch ( $status ) { + case 'request-pending': + esc_html_e( 'Waiting for confirmation' ); + break; + case 'request-confirmed': + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() ); + $erasers_count = count( $erasers ); + $request_id = $item->ID; + $nonce = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id ); + + echo '
      '; + + ?> + + + + '; + + break; + case 'request-failed': + submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item->ID . ']', false ); + break; + case 'request-completed': + echo '' . esc_html__( 'Remove request' ) . ''; + break; + } + } + +} diff --git a/wp-admin/includes/widgets.php b/wp-admin/includes/widgets.php new file mode 100644 index 000000000..e16d459cb --- /dev/null +++ b/wp-admin/includes/widgets.php @@ -0,0 +1,316 @@ + $widget['id'], + 'widget_name' => $widget['name'], + '_display' => 'template', + ); + + if ( isset( $wp_registered_widget_controls[ $widget['id'] ]['id_base'] ) && isset( $widget['params'][0]['number'] ) ) { + $id_base = $wp_registered_widget_controls[ $widget['id'] ]['id_base']; + $args['_temp_id'] = "$id_base-__i__"; + $args['_multi_num'] = next_widget_id_number( $id_base ); + $args['_add'] = 'multi'; + } else { + $args['_add'] = 'single'; + if ( $sidebar ) { + $args['_hide'] = '1'; + } + } + + $args = wp_list_widget_controls_dynamic_sidebar( + array( + 0 => $args, + 1 => $widget['params'][0], + ) + ); + call_user_func_array( 'wp_widget_control', $args ); + } +} + +/** + * Callback to sort array by a 'name' key. + * + * @since 3.1.0 + * @access private + * + * @return int + */ +function _sort_name_callback( $a, $b ) { + return strnatcasecmp( $a['name'], $b['name'] ); +} + +/** + * Show the widgets and their settings for a sidebar. + * Used in the admin widget config screen. + * + * @since 2.5.0 + * + * @param string $sidebar Sidebar ID. + * @param string $sidebar_name Optional. Sidebar name. Default empty. + */ +function wp_list_widget_controls( $sidebar, $sidebar_name = '' ) { + add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' ); + + $description = wp_sidebar_description( $sidebar ); + + echo '
      '; + + if ( $sidebar_name ) { + $add_to = sprintf( + /* translators: %s: widgets sidebar name. */ + __( 'Add to: %s' ), + $sidebar_name + ); + ?> + + + + '; +} + +/** + * Retrieves the widget control arguments. + * + * @since 2.5.0 + * + * @global array $wp_registered_widgets + * + * @staticvar int $i + * + * @param array $params + * @return array + */ +function wp_list_widget_controls_dynamic_sidebar( $params ) { + global $wp_registered_widgets; + static $i = 0; + $i++; + + $widget_id = $params[0]['widget_id']; + $id = isset( $params[0]['_temp_id'] ) ? $params[0]['_temp_id'] : $widget_id; + $hidden = isset( $params[0]['_hide'] ) ? ' style="display:none;"' : ''; + + $params[0]['before_widget'] = "
      "; + $params[0]['after_widget'] = '
      '; + $params[0]['before_title'] = '%BEG_OF_TITLE%'; // deprecated + $params[0]['after_title'] = '%END_OF_TITLE%'; // deprecated + if ( is_callable( $wp_registered_widgets[ $widget_id ]['callback'] ) ) { + $wp_registered_widgets[ $widget_id ]['_callback'] = $wp_registered_widgets[ $widget_id ]['callback']; + $wp_registered_widgets[ $widget_id ]['callback'] = 'wp_widget_control'; + } + + return $params; +} + +/** + * @global array $wp_registered_widgets + * + * @param string $id_base + * @return int + */ +function next_widget_id_number( $id_base ) { + global $wp_registered_widgets; + $number = 1; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) ) { + $number = max( $number, $matches[1] ); + } + } + $number++; + + return $number; +} + +/** + * Meta widget used to display the control form for a widget. + * + * Called from dynamic_sidebar(). + * + * @since 2.5.0 + * + * @global array $wp_registered_widgets + * @global array $wp_registered_widget_controls + * @global array $sidebars_widgets + * + * @param array $sidebar_args + * @return array + */ +function wp_widget_control( $sidebar_args ) { + global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets; + + $widget_id = $sidebar_args['widget_id']; + $sidebar_id = isset( $sidebar_args['id'] ) ? $sidebar_args['id'] : false; + $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[ $sidebar_id ] ) : '-1'; // position of widget in sidebar + $control = isset( $wp_registered_widget_controls[ $widget_id ] ) ? $wp_registered_widget_controls[ $widget_id ] : array(); + $widget = $wp_registered_widgets[ $widget_id ]; + + $id_format = $widget['id']; + $widget_number = isset( $control['params'][0]['number'] ) ? $control['params'][0]['number'] : ''; + $id_base = isset( $control['id_base'] ) ? $control['id_base'] : $widget_id; + $width = isset( $control['width'] ) ? $control['width'] : ''; + $height = isset( $control['height'] ) ? $control['height'] : ''; + $multi_number = isset( $sidebar_args['_multi_num'] ) ? $sidebar_args['_multi_num'] : ''; + $add_new = isset( $sidebar_args['_add'] ) ? $sidebar_args['_add'] : ''; + + $before_form = isset( $sidebar_args['before_form'] ) ? $sidebar_args['before_form'] : '
      '; + $after_form = isset( $sidebar_args['after_form'] ) ? $sidebar_args['after_form'] : '
      '; + $before_widget_content = isset( $sidebar_args['before_widget_content'] ) ? $sidebar_args['before_widget_content'] : '
      '; + $after_widget_content = isset( $sidebar_args['after_widget_content'] ) ? $sidebar_args['after_widget_content'] : '
      '; + + $query_arg = array( 'editwidget' => $widget['id'] ); + if ( $add_new ) { + $query_arg['addnew'] = 1; + if ( $multi_number ) { + $query_arg['num'] = $multi_number; + $query_arg['base'] = $id_base; + } + } else { + $query_arg['sidebar'] = $sidebar_id; + $query_arg['key'] = $key; + } + + /* + * We aren't showing a widget control, we're outputting a template + * for a multi-widget control. + */ + if ( isset( $sidebar_args['_display'] ) && 'template' == $sidebar_args['_display'] && $widget_number ) { + // number == -1 implies a template where id numbers are replaced by a generic '__i__' + $control['params'][0]['number'] = -1; + // With id_base widget id's are constructed like {$id_base}-{$id_number}. + if ( isset( $control['id_base'] ) ) { + $id_format = $control['id_base'] . '-__i__'; + } + } + + $wp_registered_widgets[ $widget_id ]['callback'] = $wp_registered_widgets[ $widget_id ]['_callback']; + unset( $wp_registered_widgets[ $widget_id ]['_callback'] ); + + $widget_title = esc_html( strip_tags( $sidebar_args['widget_name'] ) ); + $has_form = 'noform'; + + echo $sidebar_args['before_widget']; + ?> +
      +
      + + + + + + +
      +

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

      \n"; + } + + $noform_class = ''; + if ( 'noform' === $has_form ) { + $noform_class = ' widget-control-noform'; + } + ?> + + + + + + + + + +
      +
      + + + | + + +
      +
      + 'widget-' . esc_attr( $id_format ) . '-savewidget' ) ); ?> + +
      +
      +
      + +
      + +
      + +
      + ' . __( 'Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab above the screen title.' ) . '

      '; + +$screen = get_current_screen(); + +$screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $help, + ) +); + +// Help tabs + +$help = '

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

      '; +$help .= '

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

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

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

      '; +$help .= '

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

      '; +$help .= '

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

      '; +$help .= '

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

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

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

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

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

      '; +} + +$help .= '

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

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

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

      '; +} + +$help .= '

      ' . sprintf( + /* translators: %s: WordPress Planet URL */ + __( 'WordPress Events and News — Upcoming events near you as well as the latest news from the official WordPress project and the WordPress Planet.' ), + __( 'https://planet.wordpress.org/' ) +) . '

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

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

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

      Error: PHP is not running

      +

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

      + + + + +> + + + + + <?php _e( 'WordPress › Installation' ); ?> + + + + + + prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $wpdb->users ) ); + $user_table = ( $wpdb->get_var( $sql ) != null ); + + // Ensure that Blogs appear in search engines by default. + $blog_public = 1; + if ( isset( $_POST['weblog_title'] ) ) { + $blog_public = isset( $_POST['blog_public'] ); + } + + $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; + $user_name = isset( $_POST['user_name'] ) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; + $admin_email = isset( $_POST['admin_email'] ) ? trim( wp_unslash( $_POST['admin_email'] ) ) : ''; + + if ( ! is_null( $error ) ) { + ?> +

      +

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

      'submit' ) ); ?>

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

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

      ' . + '

      ' . __( 'Log In' ) . '

      ' . + '' + ); +} + +/** + * @global string $wp_version + * @global string $required_php_version + * @global string $required_mysql_version + */ +global $wp_version, $required_php_version, $required_mysql_version; + +$php_version = phpversion(); +$mysql_version = $wpdb->db_version(); +$php_compat = version_compare( $php_version, $required_php_version, '>=' ); +$mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ) || file_exists( WP_CONTENT_DIR . '/db.php' ); + +$version_url = sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( $wp_version ) +); + +/* translators: %s: Update PHP page URL */ +$php_update_message = '

      ' . sprintf( __( 'Learn more about updating PHP.' ), esc_url( wp_get_update_php_url() ) ); + +$annotation = wp_get_update_php_annotation(); +if ( $annotation ) { + $php_update_message .= '

      ' . $annotation . ''; +} + +if ( ! $mysql_compat && ! $php_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Minimum required MySQL version number, 5: Current PHP version number, 6: Current MySQL version number */ + $compat = sprintf( __( 'You cannot install because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s.' ), $version_url, $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ) . $php_update_message; +} elseif ( ! $php_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Current PHP version number */ + $compat = sprintf( __( 'You cannot install because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_php_version, $php_version ) . $php_update_message; +} elseif ( ! $mysql_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required MySQL version number, 4: Current MySQL version number */ + $compat = sprintf( __( 'You cannot install because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_mysql_version, $mysql_version ); +} + +if ( ! $mysql_compat || ! $php_compat ) { + display_header(); + die( '

      ' . __( 'Insufficient Requirements' ) . '

      ' . $compat . '

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

      ' . __( 'Configuration Error' ) . '

      ' . + '

      ' . sprintf( + /* translators: %s: wp-config.php */ + __( 'Your %s file has an empty database table prefix, which is not supported.' ), + 'wp-config.php' + ) . '

      ' + ); +} + +// Set error message if DO_NOT_UPGRADE_GLOBAL_TABLES isn't set as it will break install. +if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + display_header(); + die( + '

      ' . __( 'Configuration Error' ) . '

      ' . + '

      ' . sprintf( + /* translators: %s: DO_NOT_UPGRADE_GLOBAL_TABLES */ + __( 'The constant %s cannot be defined when installing WordPress.' ), + 'DO_NOT_UPGRADE_GLOBAL_TABLES' + ) . '

      ' + ); +} + +/** + * @global string $wp_local_package + * @global WP_Locale $wp_locale + */ +$language = ''; +if ( ! empty( $_REQUEST['language'] ) ) { + $language = preg_replace( '/[^a-zA-Z0-9_]/', '', $_REQUEST['language'] ); +} elseif ( isset( $GLOBALS['wp_local_package'] ) ) { + $language = $GLOBALS['wp_local_package']; +} + +$scripts_to_print = array( 'jquery' ); + +switch ( $step ) { + case 0: // Step 0 + if ( wp_can_install_language_pack() && empty( $language ) && ( $languages = wp_get_available_translations() ) ) { + $scripts_to_print[] = 'language-chooser'; + display_header( 'language-chooser' ); + echo '
      '; + wp_install_language_form( $languages ); + echo '
      '; + break; + } + + // Deliberately fall through if we can't reach the translations API. + + case 1: // Step 1, direct link or from language chooser. + if ( ! empty( $language ) ) { + $loaded_language = wp_download_language_pack( $language ); + if ( $loaded_language ) { + load_default_textdomain( $loaded_language ); + $GLOBALS['wp_locale'] = new WP_Locale(); + } + } + + $scripts_to_print[] = 'user-profile'; + + display_header(); + ?> +

      +

      + +

      +

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

      + +

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

      +
      + +

      + + + + + + + diff --git a/wp-admin/js/accordion.js b/wp-admin/js/accordion.js new file mode 100644 index 000000000..0bec1ce51 --- /dev/null +++ b/wp-admin/js/accordion.js @@ -0,0 +1,94 @@ +/** + * Accordion-folding functionality. + * + * Markup with the appropriate classes will be automatically hidden, + * with one section opening at a time when its title is clicked. + * Use the following markup structure for accordion behavior: + * + *
      + *
      + *

      + *
      + *
      + *
      + *
      + *

      + *
      + *
      + *
      + *
      + *

      + *
      + *
      + *
      + *
      + * + * Note that any appropriate tags may be used, as long as the above classes are present. + * + * @since 3.6.0 + * @output wp-admin/js/accordion.js + */ + +( function( $ ){ + + $( document ).ready( function () { + + // Expand/Collapse accordion sections on click. + $( '.accordion-container' ).on( 'click keydown', '.accordion-section-title', function( e ) { + if ( e.type === 'keydown' && 13 !== e.which ) { // "return" key + return; + } + + e.preventDefault(); // Keep this AFTER the key filter above + + accordionSwitch( $( this ) ); + }); + + }); + + /** + * Close the current accordion section and open a new one. + * + * @param {Object} el Title element of the accordion section to toggle. + * @since 3.6.0 + */ + function accordionSwitch ( el ) { + var section = el.closest( '.accordion-section' ), + sectionToggleControl = section.find( '[aria-expanded]' ).first(), + container = section.closest( '.accordion-container' ), + siblings = container.find( '.open' ), + siblingsToggleControl = siblings.find( '[aria-expanded]' ).first(), + content = section.find( '.accordion-section-content' ); + + // This section has no content and cannot be expanded. + if ( section.hasClass( 'cannot-expand' ) ) { + return; + } + + // Add a class to the container to let us know something is happening inside. + // This helps in cases such as hiding a scrollbar while animations are executing. + container.addClass( 'opening' ); + + if ( section.hasClass( 'open' ) ) { + section.toggleClass( 'open' ); + content.toggle( true ).slideToggle( 150 ); + } else { + siblingsToggleControl.attr( 'aria-expanded', 'false' ); + siblings.removeClass( 'open' ); + siblings.find( '.accordion-section-content' ).show().slideUp( 150 ); + content.toggle( false ).slideToggle( 150 ); + section.toggleClass( 'open' ); + } + + // We have to wait for the animations to finish + setTimeout(function(){ + container.removeClass( 'opening' ); + }, 150); + + // If there's an element with an aria-expanded attribute, assume it's a toggle control and toggle the aria-expanded value. + if ( sectionToggleControl ) { + sectionToggleControl.attr( 'aria-expanded', String( sectionToggleControl.attr( 'aria-expanded' ) === 'false' ) ); + } + } + +})(jQuery); diff --git a/wp-admin/js/accordion.min.js b/wp-admin/js/accordion.min.js new file mode 100644 index 000000000..6f22cd615 --- /dev/null +++ b/wp-admin/js/accordion.min.js @@ -0,0 +1 @@ +!function(a){function b(a){var b=a.closest(".accordion-section"),c=b.find("[aria-expanded]").first(),d=b.closest(".accordion-container"),e=d.find(".open"),f=e.find("[aria-expanded]").first(),g=b.find(".accordion-section-content");b.hasClass("cannot-expand")||(d.addClass("opening"),b.hasClass("open")?(b.toggleClass("open"),g.toggle(!0).slideToggle(150)):(f.attr("aria-expanded","false"),e.removeClass("open"),e.find(".accordion-section-content").show().slideUp(150),g.toggle(!1).slideToggle(150),b.toggleClass("open")),setTimeout(function(){d.removeClass("opening")},150),c&&c.attr("aria-expanded",String("false"===c.attr("aria-expanded"))))}a(document).ready(function(){a(".accordion-container").on("click keydown",".accordion-section-title",function(c){"keydown"===c.type&&13!==c.which||(c.preventDefault(),b(a(this)))})})}(jQuery); \ No newline at end of file diff --git a/wp-admin/js/code-editor.js b/wp-admin/js/code-editor.js new file mode 100644 index 000000000..ea04cea2b --- /dev/null +++ b/wp-admin/js/code-editor.js @@ -0,0 +1,342 @@ +/** + * @output wp-admin/js/code-editor.js + */ + +if ( 'undefined' === typeof window.wp ) { + /** + * @namespace wp + */ + window.wp = {}; +} +if ( 'undefined' === typeof window.wp.codeEditor ) { + /** + * @namespace wp.codeEditor + */ + window.wp.codeEditor = {}; +} + +( function( $, wp ) { + 'use strict'; + + /** + * Default settings for code editor. + * + * @since 4.9.0 + * @type {object} + */ + wp.codeEditor.defaultSettings = { + codemirror: {}, + csslint: {}, + htmlhint: {}, + jshint: {}, + onTabNext: function() {}, + onTabPrevious: function() {}, + onChangeLintingErrors: function() {}, + onUpdateErrorNotice: function() {} + }; + + /** + * Configure linting. + * + * @param {CodeMirror} editor - Editor. + * @param {object} settings - Code editor settings. + * @param {object} settings.codeMirror - Settings for CodeMirror. + * @param {Function} settings.onChangeLintingErrors - Callback for when there are changes to linting errors. + * @param {Function} settings.onUpdateErrorNotice - Callback to update error notice. + * + * @returns {void} + */ + function configureLinting( editor, settings ) { // eslint-disable-line complexity + var currentErrorAnnotations = [], previouslyShownErrorAnnotations = []; + + /** + * Call the onUpdateErrorNotice if there are new errors to show. + * + * @returns {void} + */ + function updateErrorNotice() { + if ( settings.onUpdateErrorNotice && ! _.isEqual( currentErrorAnnotations, previouslyShownErrorAnnotations ) ) { + settings.onUpdateErrorNotice( currentErrorAnnotations, editor ); + previouslyShownErrorAnnotations = currentErrorAnnotations; + } + } + + /** + * Get lint options. + * + * @returns {object} Lint options. + */ + function getLintOptions() { // eslint-disable-line complexity + var options = editor.getOption( 'lint' ); + + if ( ! options ) { + return false; + } + + if ( true === options ) { + options = {}; + } else if ( _.isObject( options ) ) { + options = $.extend( {}, options ); + } + + // Note that rules must be sent in the "deprecated" lint.options property to prevent linter from complaining about unrecognized options. See . + if ( ! options.options ) { + options.options = {}; + } + + // Configure JSHint. + if ( 'javascript' === settings.codemirror.mode && settings.jshint ) { + $.extend( options.options, settings.jshint ); + } + + // Configure CSSLint. + if ( 'css' === settings.codemirror.mode && settings.csslint ) { + $.extend( options.options, settings.csslint ); + } + + // Configure HTMLHint. + if ( 'htmlmixed' === settings.codemirror.mode && settings.htmlhint ) { + options.options.rules = $.extend( {}, settings.htmlhint ); + + if ( settings.jshint ) { + options.options.rules.jshint = settings.jshint; + } + if ( settings.csslint ) { + options.options.rules.csslint = settings.csslint; + } + } + + // Wrap the onUpdateLinting CodeMirror event to route to onChangeLintingErrors and onUpdateErrorNotice. + options.onUpdateLinting = (function( onUpdateLintingOverridden ) { + return function( annotations, annotationsSorted, cm ) { + var errorAnnotations = _.filter( annotations, function( annotation ) { + return 'error' === annotation.severity; + } ); + + if ( onUpdateLintingOverridden ) { + onUpdateLintingOverridden.apply( annotations, annotationsSorted, cm ); + } + + // Skip if there are no changes to the errors. + if ( _.isEqual( errorAnnotations, currentErrorAnnotations ) ) { + return; + } + + currentErrorAnnotations = errorAnnotations; + + if ( settings.onChangeLintingErrors ) { + settings.onChangeLintingErrors( errorAnnotations, annotations, annotationsSorted, cm ); + } + + /* + * Update notifications when the editor is not focused to prevent error message + * from overwhelming the user during input, unless there are now no errors or there + * were previously errors shown. In these cases, update immediately so they can know + * that they fixed the errors. + */ + if ( ! editor.state.focused || 0 === currentErrorAnnotations.length || previouslyShownErrorAnnotations.length > 0 ) { + updateErrorNotice(); + } + }; + })( options.onUpdateLinting ); + + return options; + } + + editor.setOption( 'lint', getLintOptions() ); + + // Keep lint options populated. + editor.on( 'optionChange', function( cm, option ) { + var options, gutters, gutterName = 'CodeMirror-lint-markers'; + if ( 'lint' !== option ) { + return; + } + gutters = editor.getOption( 'gutters' ) || []; + options = editor.getOption( 'lint' ); + if ( true === options ) { + if ( ! _.contains( gutters, gutterName ) ) { + editor.setOption( 'gutters', [ gutterName ].concat( gutters ) ); + } + editor.setOption( 'lint', getLintOptions() ); // Expand to include linting options. + } else if ( ! options ) { + editor.setOption( 'gutters', _.without( gutters, gutterName ) ); + } + + // Force update on error notice to show or hide. + if ( editor.getOption( 'lint' ) ) { + editor.performLint(); + } else { + currentErrorAnnotations = []; + updateErrorNotice(); + } + } ); + + // Update error notice when leaving the editor. + editor.on( 'blur', updateErrorNotice ); + + // Work around hint selection with mouse causing focus to leave editor. + editor.on( 'startCompletion', function() { + editor.off( 'blur', updateErrorNotice ); + } ); + editor.on( 'endCompletion', function() { + var editorRefocusWait = 500; + editor.on( 'blur', updateErrorNotice ); + + // Wait for editor to possibly get re-focused after selection. + _.delay( function() { + if ( ! editor.state.focused ) { + updateErrorNotice(); + } + }, editorRefocusWait ); + }); + + /* + * Make sure setting validities are set if the user tries to click Publish + * while an autocomplete dropdown is still open. The Customizer will block + * saving when a setting has an error notifications on it. This is only + * necessary for mouse interactions because keyboards will have already + * blurred the field and cause onUpdateErrorNotice to have already been + * called. + */ + $( document.body ).on( 'mousedown', function( event ) { + if ( editor.state.focused && ! $.contains( editor.display.wrapper, event.target ) && ! $( event.target ).hasClass( 'CodeMirror-hint' ) ) { + updateErrorNotice(); + } + }); + } + + /** + * Configure tabbing. + * + * @param {CodeMirror} codemirror - Editor. + * @param {object} settings - Code editor settings. + * @param {object} settings.codeMirror - Settings for CodeMirror. + * @param {Function} settings.onTabNext - Callback to handle tabbing to the next tabbable element. + * @param {Function} settings.onTabPrevious - Callback to handle tabbing to the previous tabbable element. + * + * @returns {void} + */ + function configureTabbing( codemirror, settings ) { + var $textarea = $( codemirror.getTextArea() ); + + codemirror.on( 'blur', function() { + $textarea.data( 'next-tab-blurs', false ); + }); + codemirror.on( 'keydown', function onKeydown( editor, event ) { + var tabKeyCode = 9, escKeyCode = 27; + + // Take note of the ESC keypress so that the next TAB can focus outside the editor. + if ( escKeyCode === event.keyCode ) { + $textarea.data( 'next-tab-blurs', true ); + return; + } + + // Short-circuit if tab key is not being pressed or the tab key press should move focus. + if ( tabKeyCode !== event.keyCode || ! $textarea.data( 'next-tab-blurs' ) ) { + return; + } + + // Focus on previous or next focusable item. + if ( event.shiftKey ) { + settings.onTabPrevious( codemirror, event ); + } else { + settings.onTabNext( codemirror, event ); + } + + // Reset tab state. + $textarea.data( 'next-tab-blurs', false ); + + // Prevent tab character from being added. + event.preventDefault(); + }); + } + + /** + * @typedef {object} wp.codeEditor~CodeEditorInstance + * @property {object} settings - The code editor settings. + * @property {CodeMirror} codemirror - The CodeMirror instance. + */ + + /** + * Initialize Code Editor (CodeMirror) for an existing textarea. + * + * @since 4.9.0 + * + * @param {string|jQuery|Element} textarea - The HTML id, jQuery object, or DOM Element for the textarea that is used for the editor. + * @param {object} [settings] - Settings to override defaults. + * @param {Function} [settings.onChangeLintingErrors] - Callback for when the linting errors have changed. + * @param {Function} [settings.onUpdateErrorNotice] - Callback for when error notice should be displayed. + * @param {Function} [settings.onTabPrevious] - Callback to handle tabbing to the previous tabbable element. + * @param {Function} [settings.onTabNext] - Callback to handle tabbing to the next tabbable element. + * @param {object} [settings.codemirror] - Options for CodeMirror. + * @param {object} [settings.csslint] - Rules for CSSLint. + * @param {object} [settings.htmlhint] - Rules for HTMLHint. + * @param {object} [settings.jshint] - Rules for JSHint. + * + * @returns {CodeEditorInstance} Instance. + */ + wp.codeEditor.initialize = function initialize( textarea, settings ) { + var $textarea, codemirror, instanceSettings, instance; + if ( 'string' === typeof textarea ) { + $textarea = $( '#' + textarea ); + } else { + $textarea = $( textarea ); + } + + instanceSettings = $.extend( {}, wp.codeEditor.defaultSettings, settings ); + instanceSettings.codemirror = $.extend( {}, instanceSettings.codemirror ); + + codemirror = wp.CodeMirror.fromTextArea( $textarea[0], instanceSettings.codemirror ); + + configureLinting( codemirror, instanceSettings ); + + instance = { + settings: instanceSettings, + codemirror: codemirror + }; + + if ( codemirror.showHint ) { + codemirror.on( 'keyup', function( editor, event ) { // eslint-disable-line complexity + var shouldAutocomplete, isAlphaKey = /^[a-zA-Z]$/.test( event.key ), lineBeforeCursor, innerMode, token; + if ( codemirror.state.completionActive && isAlphaKey ) { + return; + } + + // Prevent autocompletion in string literals or comments. + token = codemirror.getTokenAt( codemirror.getCursor() ); + if ( 'string' === token.type || 'comment' === token.type ) { + return; + } + + innerMode = wp.CodeMirror.innerMode( codemirror.getMode(), token.state ).mode.name; + lineBeforeCursor = codemirror.doc.getLine( codemirror.doc.getCursor().line ).substr( 0, codemirror.doc.getCursor().ch ); + if ( 'html' === innerMode || 'xml' === innerMode ) { + shouldAutocomplete = + '<' === event.key || + '/' === event.key && 'tag' === token.type || + isAlphaKey && 'tag' === token.type || + isAlphaKey && 'attribute' === token.type || + '=' === token.string && token.state.htmlState && token.state.htmlState.tagName; + } else if ( 'css' === innerMode ) { + shouldAutocomplete = + isAlphaKey || + ':' === event.key || + ' ' === event.key && /:\s+$/.test( lineBeforeCursor ); + } else if ( 'javascript' === innerMode ) { + shouldAutocomplete = isAlphaKey || '.' === event.key; + } else if ( 'clike' === innerMode && 'application/x-httpd-php' === codemirror.options.mode ) { + shouldAutocomplete = 'keyword' === token.type || 'variable' === token.type; + } + if ( shouldAutocomplete ) { + codemirror.showHint( { completeSingle: false } ); + } + }); + } + + // Facilitate tabbing out of the editor. + configureTabbing( codemirror, settings ); + + return instance; + }; + +})( window.jQuery, window.wp ); diff --git a/wp-admin/js/code-editor.min.js b/wp-admin/js/code-editor.min.js new file mode 100644 index 000000000..c677ae23d --- /dev/null +++ b/wp-admin/js/code-editor.min.js @@ -0,0 +1 @@ +"undefined"==typeof window.wp&&(window.wp={}),"undefined"==typeof window.wp.codeEditor&&(window.wp.codeEditor={}),function(a,b){"use strict";function c(b,c){function d(){c.onUpdateErrorNotice&&!_.isEqual(f,g)&&(c.onUpdateErrorNotice(f,b),g=f)}function e(){var e=b.getOption("lint");return!!e&&(!0===e?e={}:_.isObject(e)&&(e=a.extend({},e)),e.options||(e.options={}),"javascript"===c.codemirror.mode&&c.jshint&&a.extend(e.options,c.jshint),"css"===c.codemirror.mode&&c.csslint&&a.extend(e.options,c.csslint),"htmlmixed"===c.codemirror.mode&&c.htmlhint&&(e.options.rules=a.extend({},c.htmlhint),c.jshint&&(e.options.rules.jshint=c.jshint),c.csslint&&(e.options.rules.csslint=c.csslint)),e.onUpdateLinting=function(a){return function(e,h,i){var j=_.filter(e,function(a){return"error"===a.severity});a&&a.apply(e,h,i),_.isEqual(j,f)||(f=j,c.onChangeLintingErrors&&c.onChangeLintingErrors(j,e,h,i),(!b.state.focused||0===f.length||g.length>0)&&d())}}(e.onUpdateLinting),e)}var f=[],g=[];b.setOption("lint",e()),b.on("optionChange",function(a,c){var g,h,i="CodeMirror-lint-markers";"lint"===c&&(h=b.getOption("gutters")||[],g=b.getOption("lint"),!0===g?(_.contains(h,i)||b.setOption("gutters",[i].concat(h)),b.setOption("lint",e())):g||b.setOption("gutters",_.without(h,i)),b.getOption("lint")?b.performLint():(f=[],d()))}),b.on("blur",d),b.on("startCompletion",function(){b.off("blur",d)}),b.on("endCompletion",function(){var a=500;b.on("blur",d),_.delay(function(){b.state.focused||d()},a)}),a(document.body).on("mousedown",function(c){!b.state.focused||a.contains(b.display.wrapper,c.target)||a(c.target).hasClass("CodeMirror-hint")||d()})}function d(b,c){var d=a(b.getTextArea());b.on("blur",function(){d.data("next-tab-blurs",!1)}),b.on("keydown",function(a,e){var f=9,g=27;return g===e.keyCode?void d.data("next-tab-blurs",!0):void(f===e.keyCode&&d.data("next-tab-blurs")&&(e.shiftKey?c.onTabPrevious(b,e):c.onTabNext(b,e),d.data("next-tab-blurs",!1),e.preventDefault()))})}b.codeEditor.defaultSettings={codemirror:{},csslint:{},htmlhint:{},jshint:{},onTabNext:function(){},onTabPrevious:function(){},onChangeLintingErrors:function(){},onUpdateErrorNotice:function(){}},b.codeEditor.initialize=function(e,f){var g,h,i,j;return g=a("string"==typeof e?"#"+e:e),i=a.extend({},b.codeEditor.defaultSettings,f),i.codemirror=a.extend({},i.codemirror),h=b.CodeMirror.fromTextArea(g[0],i.codemirror),c(h,i),j={settings:i,codemirror:h},h.showHint&&h.on("keyup",function(a,c){var d,e,f,g,i=/^[a-zA-Z]$/.test(c.key);h.state.completionActive&&i||(g=h.getTokenAt(h.getCursor()),"string"!==g.type&&"comment"!==g.type&&(f=b.CodeMirror.innerMode(h.getMode(),g.state).mode.name,e=h.doc.getLine(h.doc.getCursor().line).substr(0,h.doc.getCursor().ch),"html"===f||"xml"===f?d="<"===c.key||"/"===c.key&&"tag"===g.type||i&&"tag"===g.type||i&&"attribute"===g.type||"="===g.string&&g.state.htmlState&&g.state.htmlState.tagName:"css"===f?d=i||":"===c.key||" "===c.key&&/:\s+$/.test(e):"javascript"===f?d=i||"."===c.key:"clike"===f&&"application/x-httpd-php"===h.options.mode&&(d="keyword"===g.type||"variable"===g.type),d&&h.showHint({completeSingle:!1})))}),d(h,f),j}}(window.jQuery,window.wp); \ No newline at end of file diff --git a/wp-admin/js/color-picker.js b/wp-admin/js/color-picker.js new file mode 100644 index 000000000..89e6db04a --- /dev/null +++ b/wp-admin/js/color-picker.js @@ -0,0 +1,359 @@ +/** + * @output wp-admin/js/color-picker.js + */ + +/* global wpColorPickerL10n */ +( function( $, undef ) { + + var ColorPicker, + _before = '', + _after = '
      ', + _wrap = '
      ', + _button = '', + _wrappingLabel = '', + _wrappingLabelText = ''; + + /** + * Creates a jQuery UI color picker that is used in the theme customizer. + * + * @class $.widget.wp.wpColorPicker + * + * @since 3.5.0 + */ + ColorPicker = /** @lends $.widget.wp.wpColorPicker.prototype */{ + options: { + defaultColor: false, + change: false, + clear: false, + hide: true, + palettes: true, + width: 255, + mode: 'hsv', + type: 'full', + slider: 'horizontal' + }, + /** + * Creates a color picker that only allows you to adjust the hue. + * + * @since 3.5.0 + * + * @access private + * + * @returns {void} + */ + _createHueOnly: function() { + var self = this, + el = self.element, + color; + + el.hide(); + + // Set the saturation to the maximum level. + color = 'hsl(' + el.val() + ', 100, 50)'; + + // Create an instance of the color picker, using the hsl mode. + el.iris( { + mode: 'hsl', + type: 'hue', + hide: false, + color: color, + /** + * Handles the onChange event if one has been defined in the options. + * + * @ignore + * + * @param {Event} event The event that's being called. + * @param {HTMLElement} ui The HTMLElement containing the color picker. + * + * @returns {void} + */ + change: function( event, ui ) { + if ( $.isFunction( self.options.change ) ) { + self.options.change.call( this, event, ui ); + } + }, + width: self.options.width, + slider: self.options.slider + } ); + }, + /** + * Creates the color picker, sets default values, css classes and wraps it all in HTML. + * + * @since 3.5.0 + * + * @access private + * + * @returns {void} + */ + _create: function() { + // Return early if Iris support is missing. + if ( ! $.support.iris ) { + return; + } + + var self = this, + el = self.element; + + // Override default options with options bound to the element. + $.extend( self.options, el.data() ); + + // Create a color picker which only allows adjustments to the hue. + if ( self.options.type === 'hue' ) { + return self._createHueOnly(); + } + + // Bind the close event. + self.close = $.proxy( self.close, self ); + + self.initialValue = el.val(); + + // Add a CSS class to the input field. + el.addClass( 'wp-color-picker' ); + + /* + * Check if there's already a wrapping label, e.g. in the Customizer. + * If there's no label, add a default one to match the Customizer template. + */ + if ( ! el.parent( 'label' ).length ) { + // Wrap the input field in the default label. + el.wrap( _wrappingLabel ); + // Insert the default label text. + self.wrappingLabelText = $( _wrappingLabelText ) + .insertBefore( el ) + .text( wpColorPickerL10n.defaultLabel ); + } + + /* + * At this point, either it's the standalone version or the Customizer + * one, we have a wrapping label to use as hook in the DOM, let's store it. + */ + self.wrappingLabel = el.parent(); + + // Wrap the label in the main wrapper. + self.wrappingLabel.wrap( _wrap ); + // Store a reference to the main wrapper. + self.wrap = self.wrappingLabel.parent(); + // Set up the toggle button and insert it before the wrapping label. + self.toggler = $( _before ) + .insertBefore( self.wrappingLabel ) + .css( { backgroundColor: self.initialValue } ); + // Set the toggle button span element text. + self.toggler.find( '.wp-color-result-text' ).text( wpColorPickerL10n.pick ); + // Set up the Iris container and insert it after the wrapping label. + self.pickerContainer = $( _after ).insertAfter( self.wrappingLabel ); + // Store a reference to the Clear/Default button. + self.button = $( _button ); + + // Set up the Clear/Default button. + if ( self.options.defaultColor ) { + self.button + .addClass( 'wp-picker-default' ) + .val( wpColorPickerL10n.defaultString ) + .attr( 'aria-label', wpColorPickerL10n.defaultAriaLabel ); + } else { + self.button + .addClass( 'wp-picker-clear' ) + .val( wpColorPickerL10n.clear ) + .attr( 'aria-label', wpColorPickerL10n.clearAriaLabel ); + } + + // Wrap the wrapping label in its wrapper and append the Clear/Default button. + self.wrappingLabel + .wrap( '
      +'; + confirm_delete_users( $_POST['allusers'] ); + echo '
      '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + } else { + wp_redirect( network_admin_url( 'users.php' ) ); + } + exit(); + + case 'allusers': + if ( ! current_user_can( 'manage_network_users' ) ) { + wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); + } + + if ( ( isset( $_POST['action'] ) || isset( $_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) { + check_admin_referer( 'bulk-users-network' ); + + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; + $userfunction = ''; + + foreach ( (array) $_POST['allusers'] as $user_id ) { + if ( ! empty( $user_id ) ) { + switch ( $doaction ) { + case 'delete': + if ( ! current_user_can( 'delete_users' ) ) { + wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); + } + $title = __( 'Users' ); + $parent_file = 'users.php'; + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + echo '
      '; + confirm_delete_users( $_POST['allusers'] ); + echo '
      '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + exit(); + + case 'spam': + $user = get_userdata( $user_id ); + if ( is_super_admin( $user->ID ) ) { + wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); + } + + $userfunction = 'all_spam'; + $blogs = get_blogs_of_user( $user_id, true ); + foreach ( (array) $blogs as $details ) { + if ( $details->userblog_id != get_network()->site_id ) { // main blog not a spam ! + update_blog_status( $details->userblog_id, 'spam', '1' ); + } + } + update_user_status( $user_id, 'spam', '1' ); + break; + + case 'notspam': + $userfunction = 'all_notspam'; + $blogs = get_blogs_of_user( $user_id, true ); + foreach ( (array) $blogs as $details ) { + update_blog_status( $details->userblog_id, 'spam', '0' ); + } + + update_user_status( $user_id, 'spam', '0' ); + break; + } + } + } + + if ( ! in_array( $doaction, array( 'delete', 'spam', 'notspam' ), true ) ) { + $sendback = wp_get_referer(); + + $user_ids = (array) $_POST['allusers']; + /** This action is documented in wp-admin/network/site-themes.php */ + $sendback = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $sendback, $doaction, $user_ids ); + + wp_safe_redirect( $sendback ); + exit(); + } + + wp_safe_redirect( + add_query_arg( + array( + 'updated' => 'true', + 'action' => $userfunction, + ), + wp_get_referer() + ) + ); + } else { + $location = network_admin_url( 'users.php' ); + + if ( ! empty( $_REQUEST['paged'] ) ) { + $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); + } + wp_redirect( $location ); + } + exit(); + + case 'dodelete': + check_admin_referer( 'ms-users-delete' ); + if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) { + wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); + } + + if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { + foreach ( $_POST['blog'] as $id => $users ) { + foreach ( $users as $blogid => $user_id ) { + if ( ! current_user_can( 'delete_user', $id ) ) { + continue; + } + + if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][ $blogid ][ $id ] ) { + remove_user_from_blog( $id, $blogid, $user_id ); + } else { + remove_user_from_blog( $id, $blogid ); + } + } + } + } + $i = 0; + if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) { + foreach ( $_POST['user'] as $id ) { + if ( ! current_user_can( 'delete_user', $id ) ) { + continue; + } + wpmu_delete_user( $id ); + $i++; + } + } + + if ( $i == 1 ) { + $deletefunction = 'delete'; + } else { + $deletefunction = 'all_delete'; + } + + wp_redirect( + add_query_arg( + array( + 'updated' => 'true', + 'action' => $deletefunction, + ), + network_admin_url( 'users.php' ) + ) + ); + exit(); + } +} + +$wp_list_table = _get_list_table( 'WP_MS_Users_List_Table' ); +$pagenum = $wp_list_table->get_pagenum(); +$wp_list_table->prepare_items(); +$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + +if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; +} +$title = __( 'Users' ); +$parent_file = 'users.php'; + +add_screen_option( 'per_page' ); + +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => + '

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

      ' . + '

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

      ' . + '

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

      ' . + '

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

      ' . + '

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

      ' . + '

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support Forums' ) . '

      ' +); + +get_current_screen()->set_screen_reader_content( + array( + 'heading_views' => __( 'Filter users list' ), + 'heading_pagination' => __( 'Users list navigation' ), + 'heading_list' => __( 'Users list' ), + ) +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $_REQUEST['action'] ) ) { + ?> +

      + +

      + +
      +

      + + + + ' . __( 'Search results for “%s”' ) . '', esc_html( $usersearch ) ); + } + ?> + +
      + + views(); ?> + +
      + search_box( __( 'Search Users' ), 'all-user' ); ?> +
      + +
      + display(); ?> +
      +
      + + diff --git a/wp-admin/options-discussion.php b/wp-admin/options-discussion.php new file mode 100644 index 000000000..1f742ea1c --- /dev/null +++ b/wp-admin/options-discussion.php @@ -0,0 +1,320 @@ +add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => '

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

      ' . + '

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

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

      + +

      + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + diff --git a/wp-admin/options-general.php b/wp-admin/options-general.php new file mode 100644 index 000000000..62dd4951b --- /dev/null +++ b/wp-admin/options-general.php @@ -0,0 +1,411 @@ +' . __( 'The fields on this screen determine some of the basics of your site setup.' ) . '

      ' . + '

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

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

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

      ' . + '

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

      '; +} + +$options_help .= '

      ' . __( 'You can set the language, and the translation files will be automatically downloaded and installed (available if your filesystem is writable).' ) . '

      ' . + '

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

      ' . + '

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + diff --git a/wp-admin/options-head.php b/wp-admin/options-head.php new file mode 100644 index 000000000..a0e3a3307 --- /dev/null +++ b/wp-admin/options-head.php @@ -0,0 +1,18 @@ +' . __( 'You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size.' ) . '

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

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

      '; +} + +$media_options_help .= '

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      + +
      + + +

      +

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

      + + + + + + +

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

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

      ' . + '

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

      ' . + '

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

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

      ' . __( 'Permalinks can contain useful information, such as the post date, title, or other elements. You can choose from any of the suggested permalink formats, or you can craft your own if you select Custom Structure.' ) . '

      ' . + '

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

      ' . + '

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

      ' . + '

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

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

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

      ' . + '

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

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

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

      ' . + '

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +$home_path = get_home_path(); +$iis7_permalinks = iis7_supports_permalinks(); +$permalink_structure = get_option( 'permalink_structure' ); + +$prefix = $blog_prefix = ''; +if ( ! got_url_rewrite() ) { + $prefix = '/index.php'; +} + +/** + * In a subdirectory configuration of multisite, the `/blog` prefix is used by + * default on the main site to avoid collisions with other sites created on that + * network. If the `permalink_structure` option has been changed to remove this + * base prefix, WordPress core can no longer account for the possible collision. + */ +if ( is_multisite() && ! is_subdomain_install() && is_main_site() && 0 === strpos( $permalink_structure, '/blog/' ) ) { + $blog_prefix = '/blog'; +} + +$category_base = get_option( 'category_base' ); +$tag_base = get_option( 'tag_base' ); +$update_required = false; + +if ( $iis7_permalinks ) { + if ( ( ! file_exists( $home_path . 'web.config' ) && win_is_writable( $home_path ) ) || win_is_writable( $home_path . 'web.config' ) ) { + $writable = true; + } else { + $writable = false; + } +} elseif ( $is_nginx ) { + $writable = false; +} else { + if ( ( ! file_exists( $home_path . '.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path . '.htaccess' ) ) { + $writable = true; + } else { + $writable = false; + $existing_rules = array_filter( extract_from_markers( $home_path . '.htaccess', 'WordPress' ) ); + $new_rules = array_filter( explode( "\n", $wp_rewrite->mod_rewrite_rules() ) ); + $update_required = ( $new_rules !== $existing_rules ); + } +} + +$using_index_permalinks = $wp_rewrite->using_index_permalinks(); + +if ( isset( $_POST['permalink_structure'] ) || isset( $_POST['category_base'] ) ) { + check_admin_referer( 'update-permalink' ); + + if ( isset( $_POST['permalink_structure'] ) ) { + if ( isset( $_POST['selection'] ) && 'custom' != $_POST['selection'] ) { + $permalink_structure = $_POST['selection']; + } else { + $permalink_structure = $_POST['permalink_structure']; + } + + if ( ! empty( $permalink_structure ) ) { + $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) ); + if ( $prefix && $blog_prefix ) { + $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure ); + } else { + $permalink_structure = $blog_prefix . $permalink_structure; + } + } + + $permalink_structure = sanitize_option( 'permalink_structure', $permalink_structure ); + + $wp_rewrite->set_permalink_structure( $permalink_structure ); + } + + if ( isset( $_POST['category_base'] ) ) { + $category_base = $_POST['category_base']; + if ( ! empty( $category_base ) ) { + $category_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $category_base ) ); + } + $wp_rewrite->set_category_base( $category_base ); + } + + if ( isset( $_POST['tag_base'] ) ) { + $tag_base = $_POST['tag_base']; + if ( ! empty( $tag_base ) ) { + $tag_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $tag_base ) ); + } + $wp_rewrite->set_tag_base( $tag_base ); + } + + $message = __( 'Permalink structure updated.' ); + + if ( $iis7_permalinks ) { + if ( $permalink_structure && ! $using_index_permalinks && ! $writable ) { + $message = __( 'You should update your web.config now.' ); + } elseif ( $permalink_structure && ! $using_index_permalinks && $writable ) { + $message = __( 'Permalink structure updated. Remove write access on web.config file now!' ); + } + } elseif ( ! $is_nginx && $permalink_structure && ! $using_index_permalinks && ! $writable && $update_required ) { + $message = __( 'You should update your .htaccess now.' ); + } + + if ( ! get_settings_errors() ) { + add_settings_error( 'general', 'settings_updated', $message, 'updated' ); + } + + set_transient( 'settings_errors', get_settings_errors(), 30 ); + + wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) ); + exit; +} + +flush_rewrite_rules(); + +require( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
      +

      + +
      + + +

      + number of tags are available, and here are some examples to get you started.' ), + __( 'https://codex.wordpress.org/Using_Permalinks' ) + ); + ?> +

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

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

      +

      +topics as your category base would make your category links like %s/topics/uncategorized/. If you leave these blank the defaults will be used.' ), get_option( 'home' ) . $blog_prefix . $prefix ); +?> +

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

      + writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your %1$s file. Click in the field and press %3$s to select all. Then insert this rule inside of the %4$s element in %1$s file.' ), + 'web.config', + __( 'https://codex.wordpress.org/Changing_File_Permissions' ), + 'CTRL + a', + '/<configuration>/<system.webServer>/<rewrite>/<rules>' + ); + ?> +

      +
      + +

      +
      +

      + web.config' + ); + ?> +

      + +

      + writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your %2$s file. Create a new file, called %2$s in the root directory of your site. Click in the field and press %3$s to select all. Then insert this code into the %2$s file.' ), + __( 'https://codex.wordpress.org/Changing_File_Permissions' ), + 'web.config', + 'CTRL + a' + ); + ?> +

      +
      + +

      +
      +

      + web.config' + ); + ?> +

      + + + +

      Documentation on Nginx configuration.' ); ?>

      + +

      + writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your %1$s file. Click in the field and press %3$s to select all.' ), + '.htaccess', + __( 'https://codex.wordpress.org/Changing_File_Permissions' ), + 'CTRL + a' + ); + ?> +

      +
      + +

      +
      + + + + +
      + + diff --git a/wp-admin/options-reading.php b/wp-admin/options-reading.php new file mode 100644 index 000000000..5921e86ec --- /dev/null +++ b/wp-admin/options-reading.php @@ -0,0 +1,188 @@ +add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => '

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

      ' . + '

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

      ' . + '

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

      ' . + '

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

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

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

      ' . + '

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      + +
      + 'blog_charset' ) ); +} +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + diff --git a/wp-admin/options-writing.php b/wp-admin/options-writing.php new file mode 100644 index 000000000..a5207a32f --- /dev/null +++ b/wp-admin/options-writing.php @@ -0,0 +1,239 @@ +add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => '

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

      ' . + '

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

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

      ' . __( 'Post via email settings allow you to send your WordPress installation an email with the content of your post. You must set up a secret email account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.' ) . '

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

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

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

      +

      + %s', wp_generate_password( 8, false ) ), + sprintf( '%s', wp_generate_password( 8, false ) ), + sprintf( '%s', wp_generate_password( 8, false ) ) + ); + ?> +

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

      + + + +

      + + + + + +

      + Update Services because of your site’s visibility settings.' ), + __( 'https://codex.wordpress.org/Update_Services' ), + 'options-reading.php' + ); + ?> +

      + + + + + + + +
      +
      + + diff --git a/wp-admin/options.php b/wp-admin/options.php new file mode 100644 index 000000000..c07801050 --- /dev/null +++ b/wp-admin/options.php @@ -0,0 +1,370 @@ +' . __( 'You need a higher level of permission.' ) . '' . + '

      ' . __( 'Sorry, you are not allowed to manage these options.' ) . '

      ', + 403 + ); +} + +// Handle admin email change requests +if ( ! empty( $_GET['adminhash'] ) ) { + $new_admin_details = get_option( 'adminhash' ); + $redirect = 'options-general.php?updated=false'; + if ( is_array( $new_admin_details ) && hash_equals( $new_admin_details['hash'], $_GET['adminhash'] ) && ! empty( $new_admin_details['newemail'] ) ) { + update_option( 'admin_email', $new_admin_details['newemail'] ); + delete_option( 'adminhash' ); + delete_option( 'new_admin_email' ); + $redirect = 'options-general.php?updated=true'; + } + wp_redirect( admin_url( $redirect ) ); + exit; +} elseif ( ! empty( $_GET['dismiss'] ) && 'new_admin_email' == $_GET['dismiss'] ) { + check_admin_referer( 'dismiss-' . get_current_blog_id() . '-new_admin_email' ); + delete_option( 'adminhash' ); + delete_option( 'new_admin_email' ); + wp_redirect( admin_url( 'options-general.php?updated=true' ) ); + exit; +} + +if ( is_multisite() && ! current_user_can( 'manage_network_options' ) && 'update' != $action ) { + wp_die( + '

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

      ' . + '

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

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

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

      +

      +
      + 1, // This means "success" for some reason. + 'plugin' => $plugin, + 'file' => $file, + ), + admin_url( 'plugin-editor.php' ) + ) + ); + exit; + } +} + + // List of allowable extensions + $editable_extensions = wp_get_plugin_file_editable_extensions( $plugin ); + +if ( ! is_file( $real_file ) ) { + wp_die( sprintf( '

      %s

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

      %s

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

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

      ' . + '

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

      ' . + '

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

      ' . + '

      ' . __( 'When using a keyboard to navigate:' ) . '

      ' . + '
        ' . + '
      • ' . __( 'In the editing area, the Tab key enters a tab character.' ) . '
      • ' . + '
      • ' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '
      • ' . + '
      • ' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '
      • ' . + '
      ' . + '

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

      ' . + ( is_network_admin() ? '

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

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

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

      ' . + '

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' + ); + + $settings = array( + 'codeEditor' => wp_enqueue_code_editor( array( 'file' => $real_file ) ), + ); + wp_enqueue_script( 'wp-theme-plugin-editor' ); + wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } )', wp_json_encode( $settings ) ) ); + wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'wp.themePluginEditor.themeOrPlugin = "plugin";' ) ); + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + update_recently_edited( WP_PLUGIN_DIR . '/' . $file ); + + if ( ! empty( $posted_content ) ) { + $content = $posted_content; + } else { + $content = file_get_contents( $real_file ); + } + + if ( '.php' == substr( $real_file, strrpos( $real_file, '.' ) ) ) { + $functions = wp_doc_link_parse( $content ); + + if ( ! empty( $functions ) ) { + $docs_select = ''; + } + } + + $content = esc_textarea( $content ); + ?> +
      +

      + + +
      +

      +
      + +
      +

      +
      get_error_message() ? $edit_error->get_error_message() : $edit_error->get_error_code() ); ?>
      +
      + + +
      +
      +

      + ' . esc_html( $file ) . '' ); + } else { + /* translators: %s: plugin file name */ + echo sprintf( __( 'Browsing %s (active)' ), '' . esc_html( $file ) . '' ); + } + } else { + if ( is_writeable( $real_file ) ) { + /* translators: %s: plugin file name */ + echo sprintf( __( 'Editing %s (inactive)' ), '' . esc_html( $file ) . '' ); + } else { + /* translators: %s: plugin file name */ + echo sprintf( __( 'Browsing %s (inactive)' ), '' . esc_html( $file ) . '' ); + } + } + ?> +

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

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

      Warning: Making changes to active plugins is not recommended.' ); ?>

      +
      + +
      +

      + + +

      + +

      the Codex for more information.' ); ?>

      + + +
      +
      +
      + + + get_pagenum(); + +if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) { + $location = remove_query_arg( '_wp_http_referer', wp_unslash( $_SERVER['REQUEST_URI'] ) ); + + if ( ! empty( $_REQUEST['paged'] ) ) { + $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); + } + + wp_redirect( $location ); + exit; +} + +$wp_list_table->prepare_items(); + +$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + +if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; +} + +$title = __( 'Add Plugins' ); +$parent_file = 'plugins.php'; + +wp_enqueue_script( 'plugin-install' ); +if ( 'plugin-information' != $tab ) { + add_thickbox(); +} + +$body_id = $tab; + +wp_enqueue_script( 'updates' ); + +/** + * Fires before each tab on the Install Plugins screen is loaded. + * + * The dynamic portion of the action hook, `$tab`, allows for targeting + * individual tabs, for instance 'install_plugins_pre_plugin-information'. + * + * @since 2.7.0 + */ +do_action( "install_plugins_pre_{$tab}" ); + +/* + * Call the pre upload action on every non-upload plugin installation screen + * because the form is always displayed on these screens. + */ +if ( 'upload' !== $tab ) { + /** This action is documented in wp-admin/plugin-install.php */ + do_action( 'install_plugins_pre_upload' ); +} + +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => + '

      ' . sprintf( __( 'Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official WordPress Plugin Directory are compatible with the license WordPress uses.' ), __( 'https://wordpress.org/plugins/' ) ) . '

      ' . + '

      ' . __( 'You can find new plugins to install by searching or browsing the directory right here in your own Plugins section.' ) . ' ' . __( 'The search results will be updated as you type.' ) . '

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

      ' . __( 'If you know what you’re looking for, Search is your best bet. The Search screen has options to search the WordPress Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting popular tags. Tags in larger type mean more plugins have been labeled with that tag.' ) . '

      ' . + '

      ' . __( 'If you just want to get an idea of what’s available, you can browse Featured and Popular plugins by using the links above the plugins list. These sections rotate regularly.' ) . '

      ' . + '

      ' . __( 'You can also browse a user’s favorite plugins, by using the Favorites link above the plugins list and entering their WordPress.org username.' ) . '

      ' . + '

      ' . __( 'If you want to install a plugin that you’ve downloaded elsewhere, click the Upload Plugin button above the plugins list. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin.' ) . '

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +get_current_screen()->set_screen_reader_content( + array( + 'heading_views' => __( 'Filter plugins list' ), + 'heading_pagination' => __( 'Plugins list navigation' ), + 'heading_list' => __( 'Plugins list' ), + ) +); + +/** + * WordPress Administration Template Header. + */ +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
      "> +

      + +

      + +%s%s', + ( 'upload' === $tab ) ? self_admin_url( 'plugin-install.php' ) : self_admin_url( 'plugin-install.php?tab=upload' ), + __( 'Upload Plugin' ), + __( 'Browse Plugins' ) + ); +} +?> + +
      + + +
      + +
      + views(); + echo '
      '; +} + +/** + * Fires after the plugins list table in each tab of the Install Plugins screen. + * + * The dynamic portion of the action hook, `$tab`, allows for targeting + * individual tabs, for instance 'install_plugins_plugin-information'. + * + * @since 2.7.0 + * + * @param int $paged The current page number of the plugins list table. + */ +do_action( "install_plugins_{$tab}", $paged ); +?> + + +
      + +get_pagenum(); + +$action = $wp_list_table->current_action(); + +$plugin = isset( $_REQUEST['plugin'] ) ? wp_unslash( $_REQUEST['plugin'] ) : ''; +$s = isset( $_REQUEST['s'] ) ? urlencode( wp_unslash( $_REQUEST['s'] ) ) : ''; + +// Clean up request URI from temporary args for screen options/paging uri's to work as expected. +$_SERVER['REQUEST_URI'] = remove_query_arg( array( 'error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce' ), $_SERVER['REQUEST_URI'] ); + +wp_enqueue_script( 'updates' ); + +if ( $action ) { + + switch ( $action ) { + case 'activate': + if ( ! current_user_can( 'activate_plugin', $plugin ) ) { + wp_die( __( 'Sorry, you are not allowed to activate this plugin.' ) ); + } + + if ( is_multisite() && ! is_network_admin() && is_network_only_plugin( $plugin ) ) { + wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + check_admin_referer( 'activate-plugin_' . $plugin ); + + $result = activate_plugin( $plugin, self_admin_url( 'plugins.php?error=true&plugin=' . urlencode( $plugin ) ), is_network_admin() ); + if ( is_wp_error( $result ) ) { + if ( 'unexpected_output' == $result->get_error_code() ) { + $redirect = self_admin_url( 'plugins.php?error=true&charsout=' . strlen( $result->get_error_data() ) . '&plugin=' . urlencode( $plugin ) . "&plugin_status=$status&paged=$page&s=$s" ); + wp_redirect( add_query_arg( '_error_nonce', wp_create_nonce( 'plugin-activation-error_' . $plugin ), $redirect ) ); + exit; + } else { + wp_die( $result ); + } + } + + if ( ! is_network_admin() ) { + $recent = (array) get_option( 'recently_activated' ); + unset( $recent[ $plugin ] ); + update_option( 'recently_activated', $recent ); + } else { + $recent = (array) get_site_option( 'recently_activated' ); + unset( $recent[ $plugin ] ); + update_site_option( 'recently_activated', $recent ); + } + + if ( isset( $_GET['from'] ) && 'import' == $_GET['from'] ) { + wp_redirect( self_admin_url( 'import.php?import=' . str_replace( '-importer', '', dirname( $plugin ) ) ) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix + } elseif ( isset( $_GET['from'] ) && 'press-this' == $_GET['from'] ) { + wp_redirect( self_admin_url( 'press-this.php' ) ); + } else { + wp_redirect( self_admin_url( "plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s" ) ); // overrides the ?error=true one above + } + exit; + + case 'activate-selected': + if ( ! current_user_can( 'activate_plugins' ) ) { + wp_die( __( 'Sorry, you are not allowed to activate plugins for this site.' ) ); + } + + check_admin_referer( 'bulk-plugins' ); + + $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array(); + + if ( is_network_admin() ) { + foreach ( $plugins as $i => $plugin ) { + // Only activate plugins which are not already network activated. + if ( is_plugin_active_for_network( $plugin ) ) { + unset( $plugins[ $i ] ); + } + } + } else { + foreach ( $plugins as $i => $plugin ) { + // Only activate plugins which are not already active and are not network-only when on Multisite. + if ( is_plugin_active( $plugin ) || ( is_multisite() && is_network_only_plugin( $plugin ) ) ) { + unset( $plugins[ $i ] ); + } + // Only activate plugins which the user can activate. + if ( ! current_user_can( 'activate_plugin', $plugin ) ) { + unset( $plugins[ $i ] ); + } + } + } + + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + activate_plugins( $plugins, self_admin_url( 'plugins.php?error=true' ), is_network_admin() ); + + if ( ! is_network_admin() ) { + $recent = (array) get_option( 'recently_activated' ); + } else { + $recent = (array) get_site_option( 'recently_activated' ); + } + + foreach ( $plugins as $plugin ) { + unset( $recent[ $plugin ] ); + } + + if ( ! is_network_admin() ) { + update_option( 'recently_activated', $recent ); + } else { + update_site_option( 'recently_activated', $recent ); + } + + wp_redirect( self_admin_url( "plugins.php?activate-multi=true&plugin_status=$status&paged=$page&s=$s" ) ); + exit; + + case 'update-selected': + check_admin_referer( 'bulk-plugins' ); + + if ( isset( $_GET['plugins'] ) ) { + $plugins = explode( ',', wp_unslash( $_GET['plugins'] ) ); + } elseif ( isset( $_POST['checked'] ) ) { + $plugins = (array) wp_unslash( $_POST['checked'] ); + } else { + $plugins = array(); + } + + $title = __( 'Update Plugins' ); + $parent_file = 'plugins.php'; + + wp_enqueue_script( 'updates' ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + echo '
      '; + echo '

      ' . esc_html( $title ) . '

      '; + + $url = self_admin_url( 'update.php?action=update-selected&plugins=' . urlencode( join( ',', $plugins ) ) ); + $url = wp_nonce_url( $url, 'bulk-update-plugins' ); + + echo ""; + echo '
      '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + exit; + + case 'error_scrape': + if ( ! current_user_can( 'activate_plugin', $plugin ) ) { + wp_die( __( 'Sorry, you are not allowed to activate this plugin.' ) ); + } + + check_admin_referer( 'plugin-activation-error_' . $plugin ); + + $valid = validate_plugin( $plugin ); + if ( is_wp_error( $valid ) ) { + wp_die( $valid ); + } + + if ( ! WP_DEBUG ) { + error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); + } + + @ini_set( 'display_errors', true ); //Ensure that Fatal errors are displayed. + // Go back to "sandbox" scope so we get the same errors as before + plugin_sandbox_scrape( $plugin ); + /** This action is documented in wp-admin/includes/plugin.php */ + do_action( "activate_{$plugin}" ); + exit; + + case 'deactivate': + if ( ! current_user_can( 'deactivate_plugin', $plugin ) ) { + wp_die( __( 'Sorry, you are not allowed to deactivate this plugin.' ) ); + } + + check_admin_referer( 'deactivate-plugin_' . $plugin ); + + if ( ! is_network_admin() && is_plugin_active_for_network( $plugin ) ) { + wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + deactivate_plugins( $plugin, false, is_network_admin() ); + + if ( ! is_network_admin() ) { + update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ) ); + } else { + update_site_option( 'recently_activated', array( $plugin => time() ) + (array) get_site_option( 'recently_activated' ) ); + } + + if ( headers_sent() ) { + echo ""; + } else { + wp_redirect( self_admin_url( "plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s" ) ); + } + exit; + + case 'deactivate-selected': + if ( ! current_user_can( 'deactivate_plugins' ) ) { + wp_die( __( 'Sorry, you are not allowed to deactivate plugins for this site.' ) ); + } + + check_admin_referer( 'bulk-plugins' ); + + $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array(); + // Do not deactivate plugins which are already deactivated. + if ( is_network_admin() ) { + $plugins = array_filter( $plugins, 'is_plugin_active_for_network' ); + } else { + $plugins = array_filter( $plugins, 'is_plugin_active' ); + $plugins = array_diff( $plugins, array_filter( $plugins, 'is_plugin_active_for_network' ) ); + + foreach ( $plugins as $i => $plugin ) { + // Only deactivate plugins which the user can deactivate. + if ( ! current_user_can( 'deactivate_plugin', $plugin ) ) { + unset( $plugins[ $i ] ); + } + } + } + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + deactivate_plugins( $plugins, false, is_network_admin() ); + + $deactivated = array(); + foreach ( $plugins as $plugin ) { + $deactivated[ $plugin ] = time(); + } + + if ( ! is_network_admin() ) { + update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) ); + } else { + update_site_option( 'recently_activated', $deactivated + (array) get_site_option( 'recently_activated' ) ); + } + + wp_redirect( self_admin_url( "plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page&s=$s" ) ); + exit; + + case 'delete-selected': + if ( ! current_user_can( 'delete_plugins' ) ) { + wp_die( __( 'Sorry, you are not allowed to delete plugins for this site.' ) ); + } + + check_admin_referer( 'bulk-plugins' ); + + //$_POST = from the plugin form; $_GET = from the FTP details screen. + $plugins = isset( $_REQUEST['checked'] ) ? (array) wp_unslash( $_REQUEST['checked'] ) : array(); + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + $plugins = array_filter( $plugins, 'is_plugin_inactive' ); // Do not allow to delete Activated plugins. + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url( "plugins.php?error=true&main=true&plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + // Bail on all if any paths are invalid. + // validate_file() returns truthy for invalid files + $invalid_plugin_files = array_filter( $plugins, 'validate_file' ); + if ( $invalid_plugin_files ) { + wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + include( ABSPATH . 'wp-admin/update.php' ); + + $parent_file = 'plugins.php'; + + if ( ! isset( $_REQUEST['verify-delete'] ) ) { + wp_enqueue_script( 'jquery' ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + ?> +
      + $data ) { + $plugin_info[ $plugin_file ] = _get_plugin_data_markup_translate( $plugin_file, $data ); + $plugin_info[ $plugin_file ]['is_uninstallable'] = is_uninstallable_plugin( $plugin ); + if ( ! $plugin_info[ $plugin_file ]['Network'] ) { + $have_non_network_plugins = true; + } + } + } + } + } + $plugins_to_delete = count( $plugin_info ); + ?> + +

      + +

      + +

      + +

      + +

      + +

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

      + +

      +
      + + + '; + } + ?> + + +
      + +
      + +
      +
      + id, $sendback, $action, $plugins ); + wp_safe_redirect( $sendback ); + exit; + } + break; + } +} + +$wp_list_table->prepare_items(); + +wp_enqueue_script( 'plugin-install' ); +add_thickbox(); + +add_screen_option( 'per_page', array( 'default' => 999 ) ); + +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => + '

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

      ' . + '

      ' . __( 'The search for installed plugins will search for terms in their name, description, or author.' ) . ' ' . __( 'The search results will be updated as you type.' ) . '

      ' . + '

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

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

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

      ' . + '

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +get_current_screen()->set_screen_reader_content( + array( + 'heading_views' => __( 'Filter plugins list' ), + 'heading_pagination' => __( 'Plugins list navigation' ), + 'heading_list' => __( 'Plugins list' ), + ) +); + +$title = __( 'Plugins' ); +$parent_file = 'plugins.php'; + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +$invalid = validate_active_plugins(); +if ( ! empty( $invalid ) ) { + foreach ( $invalid as $plugin_file => $error ) { + echo '

      '; + printf( + /* translators: 1: plugin file, 2: error message */ + __( 'The plugin %1$s has been deactivated due to an error: %2$s' ), + '' . esc_html( $plugin_file ) . '', + $error->get_error_message() + ); + echo '

      '; + } +} +?> + +unexpected output during activation.', + 'The plugin generated %d characters of unexpected output during activation.', + $_GET['charsout'] + ), + $_GET['charsout'] + ); + $errmsg .= ' ' . __( 'If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.' ); + } elseif ( 'resuming' === $_GET['error'] ) { + $errmsg = __( 'Plugin could not be resumed because it triggered a fatal error.' ); + } else { + $errmsg = __( 'Plugin could not be activated because it triggered a fatal error.' ); + } + ?> +

      + 'error_scrape', + 'plugin' => urlencode( $plugin ), + '_wpnonce' => urlencode( $_GET['_error_nonce'] ), + ), + admin_url( 'plugins.php' ) + ); + ?> + + +
      + +

      get_error_message() ); ?>

      + +
      +

      + deleted.' ); + } else { + _e( 'The selected plugins have been deleted.' ); + } + ?> +

      +
      + + +

      activated.' ); ?>

      + +

      activated.' ); ?>

      + +

      deactivated.' ); ?>

      + +

      deactivated.' ); ?>

      + +

      + +

      resumed.' ); ?>

      + + +
      +

      + +

      + + + + ' . __( 'Search results for “%s”' ) . '', esc_html( urldecode( $s ) ) ); +} +?> + +
      + + + +views(); ?> + +
      +search_box( __( 'Search Installed Plugins' ), 'plugin' ); ?> +
      + +
      + + + + +display(); ?> +
      + + +
      + + true ) ) ) ) { + $post_type = $_GET['post_type']; +} else { + wp_die( __( 'Invalid post type.' ) ); +} +$post_type_object = get_post_type_object( $post_type ); + +if ( 'post' == $post_type ) { + $parent_file = 'edit.php'; + $submenu_file = 'post-new.php'; +} elseif ( 'attachment' == $post_type ) { + if ( wp_redirect( admin_url( 'media-new.php' ) ) ) { + exit; + } +} else { + $submenu_file = "post-new.php?post_type=$post_type"; + if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) { + $parent_file = $post_type_object->show_in_menu; + // What if there isn't a post-new.php item for this post type? + if ( ! isset( $_registered_pages[ get_plugin_page_hookname( "post-new.php?post_type=$post_type", $post_type_object->show_in_menu ) ] ) ) { + if ( isset( $_registered_pages[ get_plugin_page_hookname( "edit.php?post_type=$post_type", $post_type_object->show_in_menu ) ] ) ) { + // Fall back to edit.php for that post type, if it exists + $submenu_file = "edit.php?post_type=$post_type"; + } else { + // Otherwise, give up and highlight the parent + $submenu_file = $parent_file; + } + } + } else { + $parent_file = "edit.php?post_type=$post_type"; + } +} + +$title = $post_type_object->labels->add_new_item; + +$editing = true; + +if ( ! current_user_can( $post_type_object->cap->edit_posts ) || ! current_user_can( $post_type_object->cap->create_posts ) ) { + wp_die( + '

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

      ' . + '

      ' . __( 'Sorry, you are not allowed to create posts as this user.' ) . '

      ', + 403 + ); +} + +$post = get_default_post_to_edit( $post_type, true ); +$post_ID = $post->ID; + +/** This filter is documented in wp-admin/post.php */ +if ( apply_filters( 'replace_editor', false, $post ) !== true ) { + if ( use_block_editor_for_post( $post ) ) { + include( ABSPATH . 'wp-admin/edit-form-blocks.php' ); + } else { + wp_enqueue_script( 'autosave' ); + include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); + } +} else { + // Flag that we're not loading the block editor. + $current_screen = get_current_screen(); + $current_screen->is_block_editor( false ); +} + +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/post.php b/wp-admin/post.php new file mode 100644 index 000000000..22624dfce --- /dev/null +++ b/wp-admin/post.php @@ -0,0 +1,350 @@ +post_type; + $post_type_object = get_post_type_object( $post_type ); +} + +if ( isset( $_POST['post_type'] ) && $post && $post_type !== $_POST['post_type'] ) { + wp_die( __( 'A post type mismatch has been detected.' ), __( 'Sorry, you are not allowed to edit this item.' ), 400 ); +} + +if ( isset( $_POST['deletepost'] ) ) { + $action = 'delete'; +} elseif ( isset( $_POST['wp-preview'] ) && 'dopreview' == $_POST['wp-preview'] ) { + $action = 'preview'; +} + +$sendback = wp_get_referer(); +if ( ! $sendback || + strpos( $sendback, 'post.php' ) !== false || + strpos( $sendback, 'post-new.php' ) !== false ) { + if ( 'attachment' == $post_type ) { + $sendback = admin_url( 'upload.php' ); + } else { + $sendback = admin_url( 'edit.php' ); + if ( ! empty( $post_type ) ) { + $sendback = add_query_arg( 'post_type', $post_type, $sendback ); + } + } +} else { + $sendback = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'ids' ), $sendback ); +} + +switch ( $action ) { + case 'post-quickdraft-save': + // Check nonce and capabilities + $nonce = $_REQUEST['_wpnonce']; + $error_msg = false; + + // For output of the quickdraft dashboard widget + require_once ABSPATH . 'wp-admin/includes/dashboard.php'; + + if ( ! wp_verify_nonce( $nonce, 'add-post' ) ) { + $error_msg = __( 'Unable to submit this form, please refresh and try again.' ); + } + + if ( ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) { + exit; + } + + if ( $error_msg ) { + return wp_dashboard_quick_press( $error_msg ); + } + + $post = get_post( $_REQUEST['post_ID'] ); + check_admin_referer( 'add-' . $post->post_type ); + + $_POST['comment_status'] = get_default_comment_status( $post->post_type ); + $_POST['ping_status'] = get_default_comment_status( $post->post_type, 'pingback' ); + + edit_post(); + wp_dashboard_quick_press(); + exit; + + case 'postajaxpost': + case 'post': + check_admin_referer( 'add-' . $post_type ); + $post_id = 'postajaxpost' == $action ? edit_post() : write_post(); + redirect_post( $post_id ); + exit(); + + case 'edit': + $editing = true; + + if ( empty( $post_id ) ) { + wp_redirect( admin_url( 'post.php' ) ); + exit(); + } + + if ( ! $post ) { + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + } + + if ( ! $post_type_object ) { + wp_die( __( 'Invalid post type.' ) ); + } + + if ( ! in_array( $typenow, get_post_types( array( 'show_ui' => true ) ) ) ) { + wp_die( __( 'Sorry, you are not allowed to edit posts in this post type.' ) ); + } + + if ( ! current_user_can( 'edit_post', $post_id ) ) { + wp_die( __( 'Sorry, you are not allowed to edit this item.' ) ); + } + + if ( 'trash' == $post->post_status ) { + wp_die( __( 'You can’t edit this item because it is in the Trash. Please restore it and try again.' ) ); + } + + if ( ! empty( $_GET['get-post-lock'] ) ) { + check_admin_referer( 'lock-post_' . $post_id ); + wp_set_post_lock( $post_id ); + wp_redirect( get_edit_post_link( $post_id, 'url' ) ); + exit(); + } + + $post_type = $post->post_type; + if ( 'post' == $post_type ) { + $parent_file = 'edit.php'; + $submenu_file = 'edit.php'; + $post_new_file = 'post-new.php'; + } elseif ( 'attachment' == $post_type ) { + $parent_file = 'upload.php'; + $submenu_file = 'upload.php'; + $post_new_file = 'media-new.php'; + } else { + if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) { + $parent_file = $post_type_object->show_in_menu; + } else { + $parent_file = "edit.php?post_type=$post_type"; + } + $submenu_file = "edit.php?post_type=$post_type"; + $post_new_file = "post-new.php?post_type=$post_type"; + } + + $title = $post_type_object->labels->edit_item; + + /** + * Allows replacement of the editor. + * + * @since 4.9.0 + * + * @param boolean Whether to replace the editor. Default false. + * @param object $post Post object. + */ + if ( apply_filters( 'replace_editor', false, $post ) === true ) { + break; + } + + if ( use_block_editor_for_post( $post ) ) { + include( ABSPATH . 'wp-admin/edit-form-blocks.php' ); + break; + } + + if ( ! wp_check_post_lock( $post->ID ) ) { + $active_post_lock = wp_set_post_lock( $post->ID ); + + if ( 'attachment' !== $post_type ) { + wp_enqueue_script( 'autosave' ); + } + } + + $post = get_post( $post_id, OBJECT, 'edit' ); + + if ( post_type_supports( $post_type, 'comments' ) ) { + wp_enqueue_script( 'admin-comments' ); + enqueue_comment_hotkeys_js(); + } + + include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); + + break; + + case 'editattachment': + check_admin_referer( 'update-post_' . $post_id ); + + // Don't let these be changed + unset( $_POST['guid'] ); + $_POST['post_type'] = 'attachment'; + + // Update the thumbnail filename + $newmeta = wp_get_attachment_metadata( $post_id, true ); + $newmeta['thumb'] = wp_basename( $_POST['thumb'] ); + + wp_update_attachment_metadata( $post_id, $newmeta ); + + // Intentional fall-through to trigger the edit_post() call. + case 'editpost': + check_admin_referer( 'update-post_' . $post_id ); + + $post_id = edit_post(); + + // Session cookie flag that the post was saved + if ( isset( $_COOKIE['wp-saving-post'] ) && $_COOKIE['wp-saving-post'] === $post_id . '-check' ) { + setcookie( 'wp-saving-post', $post_id . '-saved', time() + DAY_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl() ); + } + + redirect_post( $post_id ); // Send user on their way while we keep working + + exit(); + + case 'trash': + check_admin_referer( 'trash-post_' . $post_id ); + + if ( ! $post ) { + wp_die( __( 'The item you are trying to move to the Trash no longer exists.' ) ); + } + + if ( ! $post_type_object ) { + wp_die( __( 'Invalid post type.' ) ); + } + + if ( ! current_user_can( 'delete_post', $post_id ) ) { + wp_die( __( 'Sorry, you are not allowed to move this item to the Trash.' ) ); + } + + if ( $user_id = wp_check_post_lock( $post_id ) ) { + $user = get_userdata( $user_id ); + wp_die( sprintf( __( 'You cannot move this item to the Trash. %s is currently editing.' ), $user->display_name ) ); + } + + if ( ! wp_trash_post( $post_id ) ) { + wp_die( __( 'Error in moving to Trash.' ) ); + } + + wp_redirect( + add_query_arg( + array( + 'trashed' => 1, + 'ids' => $post_id, + ), + $sendback + ) + ); + exit(); + + case 'untrash': + check_admin_referer( 'untrash-post_' . $post_id ); + + if ( ! $post ) { + wp_die( __( 'The item you are trying to restore from the Trash no longer exists.' ) ); + } + + if ( ! $post_type_object ) { + wp_die( __( 'Invalid post type.' ) ); + } + + 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.' ) ); + } + + wp_redirect( add_query_arg( 'untrashed', 1, $sendback ) ); + exit(); + + case 'delete': + check_admin_referer( 'delete-post_' . $post_id ); + + if ( ! $post ) { + wp_die( __( 'This item has already been deleted.' ) ); + } + + if ( ! $post_type_object ) { + wp_die( __( 'Invalid post type.' ) ); + } + + if ( ! current_user_can( 'delete_post', $post_id ) ) { + wp_die( __( 'Sorry, you are not allowed to delete this item.' ) ); + } + + if ( $post->post_type == 'attachment' ) { + $force = ( ! MEDIA_TRASH ); + if ( ! wp_delete_attachment( $post_id, $force ) ) { + wp_die( __( 'Error in deleting.' ) ); + } + } else { + if ( ! wp_delete_post( $post_id, true ) ) { + wp_die( __( 'Error in deleting.' ) ); + } + } + + wp_redirect( add_query_arg( 'deleted', 1, $sendback ) ); + exit(); + + case 'preview': + check_admin_referer( 'update-post_' . $post_id ); + + $url = post_preview(); + + wp_redirect( $url ); + exit(); + + case 'toggle-custom-fields': + check_admin_referer( 'toggle-custom-fields' ); + + $current_user_id = get_current_user_id(); + if ( $current_user_id ) { + $enable_custom_fields = (bool) get_user_meta( $current_user_id, 'enable_custom_fields', true ); + update_user_meta( $current_user_id, 'enable_custom_fields', ! $enable_custom_fields ); + } + + wp_safe_redirect( wp_get_referer() ); + exit(); + + default: + /** + * Fires for a given custom post action request. + * + * The dynamic portion of the hook name, `$action`, refers to the custom post action. + * + * @since 4.6.0 + * + * @param int $post_id Post ID sent with the request. + */ + do_action( "post_action_{$action}", $post_id ); + + wp_redirect( admin_url( 'edit.php' ) ); + exit(); +} // end switch +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/press-this.php b/wp-admin/press-this.php new file mode 100644 index 000000000..666e42b77 --- /dev/null +++ b/wp-admin/press-this.php @@ -0,0 +1,87 @@ +cap->create_posts ) ) { + wp_die( + __( 'Sorry, you are not allowed to create posts as this user.' ), + __( 'You need a higher level of permission.' ), + 403 + ); + } elseif ( is_plugin_active( $plugin_file ) ) { + include( WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php' ); + $wp_press_this = new WP_Press_This_Plugin(); + $wp_press_this->html(); + } elseif ( current_user_can( 'activate_plugins' ) ) { + if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_file ) ) { + $url = wp_nonce_url( + add_query_arg( + array( + 'action' => 'activate', + 'plugin' => $plugin_file, + 'from' => 'press-this', + ), + admin_url( 'plugins.php' ) + ), + 'activate-plugin_' . $plugin_file + ); + $action = sprintf( + '%2$s', + esc_url( $url ), + __( 'Activate Press This' ) + ); + } else { + if ( is_main_site() ) { + $url = wp_nonce_url( + add_query_arg( + array( + 'action' => 'install-plugin', + 'plugin' => $plugin_slug, + 'from' => 'press-this', + ), + self_admin_url( 'update.php' ) + ), + 'install-plugin_' . $plugin_slug + ); + $action = sprintf( + '%3$s', + esc_url( $url ), + esc_attr( $plugin_slug ), + __( 'Install Now' ) + ); + } else { + $action = sprintf( + /* translators: URL to wp-admin/press-this.php */ + __( 'Press This is not installed. Please install Press This from the main site.' ), + get_admin_url( get_current_network_id(), 'press-this.php' ) + ); + } + } + wp_die( + __( 'The Press This plugin is required.' ) . '
      ' . $action, + __( 'Installation Required' ), + 200 + ); + } else { + wp_die( + __( 'Press This is not available. Please contact your site administrator.' ), + __( 'Installation Required' ), + 200 + ); + } +} + +wp_load_press_this(); diff --git a/wp-admin/privacy.php b/wp-admin/privacy.php new file mode 100644 index 000000000..3b0a6b31c --- /dev/null +++ b/wp-admin/privacy.php @@ -0,0 +1,263 @@ + Menus */ + __( 'Privacy Policy page setting updated successfully. Remember to update your menus!' ), + esc_url( add_query_arg( 'autofocus[panel]', 'nav_menus', admin_url( 'customize.php' ) ) ) + ); + } + } + + add_settings_error( + 'page_for_privacy_policy', + 'page_for_privacy_policy', + $privacy_page_updated_message, + 'updated' + ); + } elseif ( 'create-privacy-page' === $action ) { + + if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) { + require_once( ABSPATH . 'wp-admin/includes/misc.php' ); + } + + $privacy_policy_page_content = WP_Privacy_Policy_Content::get_default_content(); + $privacy_policy_page_id = wp_insert_post( + array( + 'post_title' => __( 'Privacy Policy' ), + 'post_status' => 'draft', + 'post_type' => 'page', + 'post_content' => $privacy_policy_page_content, + ), + true + ); + + if ( is_wp_error( $privacy_policy_page_id ) ) { + add_settings_error( + 'page_for_privacy_policy', + 'page_for_privacy_policy', + __( 'Unable to create a Privacy Policy page.' ), + 'error' + ); + } else { + update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id ); + + wp_redirect( admin_url( 'post.php?post=' . $privacy_policy_page_id . '&action=edit' ) ); + exit; + } + } +} + +// If a Privacy Policy page ID is available, make sure the page actually exists. If not, display an error. +$privacy_policy_page_exists = false; +$privacy_policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' ); + +if ( ! empty( $privacy_policy_page_id ) ) { + + $privacy_policy_page = get_post( $privacy_policy_page_id ); + + if ( ! $privacy_policy_page instanceof WP_Post ) { + add_settings_error( + 'page_for_privacy_policy', + 'page_for_privacy_policy', + __( 'The currently selected Privacy Policy page does not exist. Please create or select a new page.' ), + 'error' + ); + } else { + if ( 'trash' === $privacy_policy_page->post_status ) { + add_settings_error( + 'page_for_privacy_policy', + 'page_for_privacy_policy', + sprintf( + /* translators: URL to Pages Trash */ + __( 'The currently selected Privacy Policy page is in the trash. Please create or select a new Privacy Policy page or restore the current page.' ), + 'edit.php?post_status=trash&post_type=page' + ), + 'error' + ); + } else { + $privacy_policy_page_exists = true; + } + } +} + +$title = __( 'Privacy Settings' ); +$parent_file = 'options-general.php'; + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +?> +
      +

      +

      +

      + + +

      +

      + + +

      +

      + + +

      + $privacy_policy_page_id, + 'action' => 'edit', + ), + admin_url( 'post.php' ) + ); + + $view_href = get_permalink( $privacy_policy_page_id ); + + ?> +

      + Edit or view your Privacy Policy page content.' ), + esc_url( $edit_href ), + esc_url( $view_href ) + ); + } else { + printf( + /* translators: 1: URL to edit Privacy Policy page, 2: URL to preview Privacy Policy page */ + __( 'Edit or preview your Privacy Policy page content.' ), + esc_url( $edit_href ), + esc_url( $view_href ) + ); + } + + ?> +

      + +

      + Check out our guide%3$s for recommendations on what content to include, along with policies suggested by your plugins and theme.' ), + esc_url( admin_url( 'tools.php?wp-privacy-policy-guide=1' ) ), + '', + '' + ); + + ?> +

      + +
      + + + + + + +
      +post_parent ) ) { + break; + } + + if ( ! $post = get_post( $revision->post_parent ) ) { + break; + } + + // Restore if revisions are enabled or this is an autosave. + if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; + break; + } + + // Don't allow revision restore when post is locked + if ( wp_check_post_lock( $post->ID ) ) { + break; + } + + check_admin_referer( "restore-post_{$revision->ID}" ); + + wp_restore_post_revision( $revision->ID ); + $redirect = add_query_arg( + array( + 'message' => 5, + 'revision' => $revision->ID, + ), + get_edit_post_link( $post->ID, 'url' ) + ); + break; + case 'view': + case 'edit': + default: + if ( ! $revision = wp_get_post_revision( $revision_id ) ) { + break; + } + if ( ! $post = get_post( $revision->post_parent ) ) { + break; + } + + if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'edit_post', $revision->post_parent ) ) { + break; + } + + // Revisions disabled and we're not looking at an autosave + if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; + break; + } + + $post_edit_link = get_edit_post_link(); + $post_title = '' . _draft_or_post_title() . ''; + /* translators: %s: post title */ + $h1 = sprintf( __( 'Compare Revisions of “%s”' ), $post_title ); + $return_to_post = '' . __( '← Return to editor' ) . ''; + $title = __( 'Revisions' ); + + $redirect = false; + break; +} + +// Empty post_type means either malformed object found, or no valid parent was found. +if ( ! $redirect && empty( $post->post_type ) ) { + $redirect = 'edit.php'; +} + +if ( ! empty( $redirect ) ) { + wp_redirect( $redirect ); + exit; +} + +// This is so that the correct "Edit" menu item is selected. +if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) { + $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type; +} else { + $parent_file = $submenu_file = 'edit.php'; +} + +wp_enqueue_script( 'revisions' ); +wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) ); + +/* Revisions Help Tab */ + +$revisions_overview = '

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

      '; +$revisions_overview .= '

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

      '; +$revisions_overview .= '

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

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

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

      '; +$revisions_sidebar .= '

      ' . __( 'Revisions Management' ) . '

      '; +$revisions_sidebar .= '

      ' . __( 'Support' ) . '

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

      + +
      +wp-config-sample.php' + ) + ); +} + +// Check if wp-config.php has been created +if ( file_exists( ABSPATH . 'wp-config.php' ) ) { + wp_die( + '

      ' . sprintf( + /* translators: 1: wp-config.php, 2: install.php */ + __( 'The file %1$s already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now.' ), + 'wp-config.php', + 'install.php' + ) . '

      ' + ); +} + +// Check if wp-config.php exists above the root directory but is not part of another installation +if ( @file_exists( ABSPATH . '../wp-config.php' ) && ! @file_exists( ABSPATH . '../wp-settings.php' ) ) { + wp_die( + '

      ' . sprintf( + /* translators: 1: wp-config.php, 2: install.php */ + __( 'The file %1$s already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now.' ), + 'wp-config.php', + 'install.php' + ) . '

      ' + ); +} + +$step = isset( $_GET['step'] ) ? (int) $_GET['step'] : -1; + +/** + * Display setup wp-config.php file header. + * + * @ignore + * @since 2.3.0 + * + * @global string $wp_local_package + * @global WP_Locale $wp_locale + * + * @param string|array $body_classes + */ +function setup_config_display_header( $body_classes = array() ) { + $body_classes = (array) $body_classes; + $body_classes[] = 'wp-core-ui'; + $dir_attr = ''; + if ( is_rtl() ) { + $body_classes[] = 'rtl'; + $dir_attr = ' dir="rtl"'; + } + + header( 'Content-Type: text/html; charset=utf-8' ); + ?> + +> + + + + + <?php _e( 'WordPress › Setup Configuration File' ); ?> + + + + + Select a default language'; + echo '
      '; + wp_install_language_form( $languages ); + echo '
      '; + break; + } + + // Deliberately fall through if we can't reach the translations API. + + case 0: + if ( ! empty( $language ) ) { + $loaded_language = wp_download_language_pack( $language ); + if ( $loaded_language ) { + load_default_textdomain( $loaded_language ); + $GLOBALS['wp_locale'] = new WP_Locale(); + } + } + + setup_config_display_header(); + $step_1 = 'setup-config.php?step=1'; + if ( isset( $_REQUEST['noapi'] ) ) { + $step_1 .= '&noapi'; + } + if ( ! empty( $loaded_language ) ) { + $step_1 .= '&language=' . $loaded_language; + } + ?> +

      +

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

      + wp-config.php' + ); + ?> + + wp-config-sample.php', + 'wp-config.php' + ); + ?> + + We got it.' ), + __( 'https://codex.wordpress.org/Editing_wp-config.php' ) + ); + ?> +

      +

      + +

      + +

      +
      +

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

      +
      +

      ' . __( 'Try again' ) . ''; + + if ( empty( $prefix ) ) { + wp_die( __( 'ERROR: "Table Prefix" must not be empty.' ) . $tryagain_link ); + } + + // Validate $prefix: it can only contain letters, numbers and underscores. + if ( preg_match( '|[^a-z0-9_]|i', $prefix ) ) { + wp_die( __( 'ERROR: "Table Prefix" can only contain numbers, letters, and underscores.' ) . $tryagain_link ); + } + + // Test the db connection. + /**#@+ + * + * @ignore + */ + define( 'DB_NAME', $dbname ); + define( 'DB_USER', $uname ); + define( 'DB_PASSWORD', $pwd ); + define( 'DB_HOST', $dbhost ); + /**#@-*/ + + // Re-construct $wpdb with these new values. + unset( $wpdb ); + require_wp_db(); + + /* + * The wpdb constructor bails when WP_SETUP_CONFIG is set, so we must + * fire this manually. We'll fail here if the values are no good. + */ + $wpdb->db_connect(); + + if ( ! empty( $wpdb->error ) ) { + wp_die( $wpdb->error->get_error_message() . $tryagain_link ); + } + + $errors = $wpdb->hide_errors(); + $wpdb->query( "SELECT $prefix" ); + $wpdb->show_errors( $errors ); + if ( ! $wpdb->last_error ) { + // MySQL was able to parse the prefix as a value, which we don't want. Bail. + wp_die( __( 'ERROR: "Table Prefix" is invalid.' ) ); + } + + // Generate keys and salts using secure CSPRNG; fallback to API if enabled; further fallback to original wp_generate_password(). + try { + $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'; + $max = strlen( $chars ) - 1; + for ( $i = 0; $i < 8; $i++ ) { + $key = ''; + for ( $j = 0; $j < 64; $j++ ) { + $key .= substr( $chars, random_int( 0, $max ), 1 ); + } + $secret_keys[] = $key; + } + } catch ( Exception $ex ) { + $no_api = isset( $_POST['noapi'] ); + + if ( ! $no_api ) { + $secret_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); + } + + if ( $no_api || is_wp_error( $secret_keys ) ) { + $secret_keys = array(); + for ( $i = 0; $i < 8; $i++ ) { + $secret_keys[] = wp_generate_password( 64, true, true ); + } + } else { + $secret_keys = explode( "\n", wp_remote_retrieve_body( $secret_keys ) ); + foreach ( $secret_keys as $k => $v ) { + $secret_keys[ $k ] = substr( $v, 28, 64 ); + } + } + } + + $key = 0; + foreach ( $config_file as $line_num => $line ) { + if ( '$table_prefix =' == substr( $line, 0, 15 ) ) { + $config_file[ $line_num ] = '$table_prefix = \'' . addcslashes( $prefix, "\\'" ) . "';\r\n"; + continue; + } + + if ( ! preg_match( '/^define\(\s*\'([A-Z_]+)\',([ ]+)/', $line, $match ) ) { + continue; + } + + $constant = $match[1]; + $padding = $match[2]; + + switch ( $constant ) { + case 'DB_NAME': + case 'DB_USER': + case 'DB_PASSWORD': + case 'DB_HOST': + $config_file[ $line_num ] = "define( '" . $constant . "'," . $padding . "'" . addcslashes( constant( $constant ), "\\'" ) . "' );\r\n"; + break; + case 'DB_CHARSET': + if ( 'utf8mb4' === $wpdb->charset || ( ! $wpdb->charset && $wpdb->has_cap( 'utf8mb4' ) ) ) { + $config_file[ $line_num ] = "define( '" . $constant . "'," . $padding . "'utf8mb4' );\r\n"; + } + break; + case 'AUTH_KEY': + case 'SECURE_AUTH_KEY': + case 'LOGGED_IN_KEY': + case 'NONCE_KEY': + case 'AUTH_SALT': + case 'SECURE_AUTH_SALT': + case 'LOGGED_IN_SALT': + case 'NONCE_SALT': + $config_file[ $line_num ] = "define( '" . $constant . "'," . $padding . "'" . $secret_keys[ $key++ ] . "' );\r\n"; + break; + } + } + unset( $line ); + + if ( ! is_writable( ABSPATH ) ) : + setup_config_display_header(); + ?> +

      + wp-config.php' ); + ?> +

      +

      + wp-config.php' ); + + $config_text = ''; + + foreach ( $config_file as $line ) { + $config_text .= htmlentities( $line, ENT_COMPAT, 'UTF-8' ); + } + ?> +

      + +

      +

      + + +

      +

      + +

      + + + + diff --git a/wp-admin/site-health-info.php b/wp-admin/site-health-info.php new file mode 100644 index 000000000..d65581d9c --- /dev/null +++ b/wp-admin/site-health-info.php @@ -0,0 +1,178 @@ + +
      +
      +

      + +

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

      +
      + +
      + + +

      + +

      + +

      + +

      +

      + +

      + +
      +
      + + +
      +
      + +
      + + $details ) { + if ( ! isset( $details['fields'] ) || empty( $details['fields'] ) ) { + continue; + } + + ?> +

      + +

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

      + +

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

      +
      + +
      +
      +

      + +

      + +

      + +

      + +

      + +

      +
      + +
      +

      + +

      + +

      + +
      +

      + 0' ); + ?> +

      + +
      +
      + + +
      + +
      + +
      + + +
      + + + + $taxnow ), $sendback ); + } + wp_redirect( esc_url( $sendback ) ); + exit; +} + +$tag_ID = absint( $_REQUEST['tag_ID'] ); +$tag = get_term( $tag_ID, $taxnow, OBJECT, 'edit' ); + +if ( ! $tag instanceof WP_Term ) { + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); +} + +$tax = get_taxonomy( $tag->taxonomy ); +$taxonomy = $tax->name; +$title = $tax->labels->edit_item; + +if ( ! in_array( $taxonomy, get_taxonomies( array( 'show_ui' => true ) ) ) || + ! current_user_can( 'edit_term', $tag->term_id ) ) { + + wp_die( + '

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

      ' . + '

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

      ', + 403 + ); +} + +$post_type = get_current_screen()->post_type; + +// Default to the first object_type associated with the taxonomy if no post type was passed. +if ( empty( $post_type ) ) { + $post_type = reset( $tax->object_type ); +} + +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' == $taxonomy ) { + $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"; +} + +get_current_screen()->set_screen_reader_content( + array( + 'heading_pagination' => $tax->labels->items_list_navigation, + 'heading_list' => $tax->labels->items_list, + ) +); +wp_enqueue_script( 'admin-tags' ); +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +include( ABSPATH . 'wp-admin/edit-tag-form.php' ); +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/theme-editor.php b/wp-admin/theme-editor.php new file mode 100644 index 000000000..25769b2ec --- /dev/null +++ b/wp-admin/theme-editor.php @@ -0,0 +1,365 @@ +' . __( 'Sorry, you are not allowed to edit templates for this site.' ) . '

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

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

      ' . + '

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

      ' . + '

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

      ' . + '

      ' . __( 'When using a keyboard to navigate:' ) . '

      ' . + '
        ' . + '
      • ' . __( 'In the editing area, the Tab key enters a tab character.' ) . '
      • ' . + '
      • ' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '
      • ' . + '
      • ' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '
      • ' . + '
      ' . + '

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

      ' . + '

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

      ' . + '

      ' . sprintf( + /* translators: %s: link to documentation on child themes */ + __( 'Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.' ), + __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) + ) . '

      ' . + ( is_network_admin() ? '

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

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

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

      ' . + '

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

      ' . + '

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

      ' . + '

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) ); + +if ( $theme ) { + $stylesheet = $theme; +} else { + $stylesheet = get_stylesheet(); +} + +$theme = wp_get_theme( $stylesheet ); + +if ( ! $theme->exists() ) { + wp_die( __( 'The requested theme does not exist.' ) ); +} + +if ( $theme->errors() && 'theme_no_stylesheet' == $theme->errors()->get_error_code() ) { + wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); +} + +$allowed_files = $style_files = array(); +$has_templates = false; + +$file_types = wp_get_theme_file_editable_extensions( $theme ); + +foreach ( $file_types as $type ) { + switch ( $type ) { + case 'php': + $allowed_files += $theme->get_files( 'php', -1 ); + $has_templates = ! empty( $allowed_files ); + break; + case 'css': + $style_files = $theme->get_files( 'css', -1 ); + $allowed_files['style.css'] = $style_files['style.css']; + $allowed_files += $style_files; + break; + default: + $allowed_files += $theme->get_files( $type, -1 ); + break; + } +} + +// Move functions.php and style.css to the top. +if ( isset( $allowed_files['functions.php'] ) ) { + $allowed_files = array( 'functions.php' => $allowed_files['functions.php'] ) + $allowed_files; +} +if ( isset( $allowed_files['style.css'] ) ) { + $allowed_files = array( 'style.css' => $allowed_files['style.css'] ) + $allowed_files; +} + +if ( empty( $file ) ) { + $relative_file = 'style.css'; + $file = $allowed_files['style.css']; +} else { + $relative_file = wp_unslash( $file ); + $file = $theme->get_stylesheet_directory() . '/' . $relative_file; +} + +validate_file_to_edit( $file, $allowed_files ); + +// Handle fallback editing of file when JavaScript is not available. +$edit_error = null; +$posted_content = null; +if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) { + $r = wp_edit_theme_plugin_file( wp_unslash( $_POST ) ); + if ( is_wp_error( $r ) ) { + $edit_error = $r; + if ( check_ajax_referer( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce', false ) && isset( $_POST['newcontent'] ) ) { + $posted_content = wp_unslash( $_POST['newcontent'] ); + } + } else { + wp_redirect( + add_query_arg( + array( + 'a' => 1, // This means "success" for some reason. + 'theme' => $stylesheet, + 'file' => $relative_file, + ), + admin_url( 'theme-editor.php' ) + ) + ); + exit; + } +} + + $settings = array( + 'codeEditor' => wp_enqueue_code_editor( compact( 'file' ) ), + ); + wp_enqueue_script( 'wp-theme-plugin-editor' ); + wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } )', wp_json_encode( $settings ) ) ); + wp_add_inline_script( 'wp-theme-plugin-editor', 'wp.themePluginEditor.themeOrPlugin = "theme";' ); + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + update_recently_edited( $file ); + + if ( ! is_file( $file ) ) { + $error = true; + } + + $content = ''; + if ( ! empty( $posted_content ) ) { + $content = $posted_content; + } elseif ( ! $error && filesize( $file ) > 0 ) { + $f = fopen( $file, 'r' ); + $content = fread( $f, filesize( $file ) ); + + if ( '.php' == substr( $file, strrpos( $file, '.' ) ) ) { + $functions = wp_doc_link_parse( $content ); + + $docs_select = ''; + } + + $content = esc_textarea( $content ); + } + + $file_description = get_file_description( $relative_file ); + $file_show = array_search( $file, array_filter( $allowed_files ) ); + $description = esc_html( $file_description ); + if ( $file_description != $file_show ) { + $description .= ' (' . esc_html( $file_show ) . ')'; + } + ?> +
      +

      + + +
      +

      +
      + +
      +

      +
      get_error_message() ? $edit_error->get_error_message() : $edit_error->get_error_code() ); ?>
      +
      + + +
      +

      +

      + built-in CSS editor.' ), + esc_url( add_query_arg( 'autofocus[section]', 'custom_css', admin_url( 'customize.php' ) ) ) + ); + ?> +

      +
      + + +
      +
      +

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

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

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

      '; +} +?> +
      +

      +
        + parent() ) && $theme->parent() ) : ?> +
      • + %s', + self_admin_url( 'theme-editor.php?theme=' . urlencode( $theme->get_template() ) ), + $theme->parent()->display( 'Name' ) + ) + ); + ?> +
      • + +
      • +
          + +
        +
      • +
      +
      + +

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

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

      + + + +

      +
      + +
      + +

      + + +

      + +

      the Codex for more information.' ); ?>

      + +
      + +
      + +
      +
      + + + $v ) { + if ( false !== strpos( $k, '/' ) ) { + unset( $installed_themes[ $k ] ); + } +} + +wp_localize_script( + 'theme', + '_wpThemeSettings', + array( + 'themes' => false, + 'settings' => array( + 'isInstall' => true, + 'canInstall' => current_user_can( 'install_themes' ), + 'installURI' => current_user_can( 'install_themes' ) ? self_admin_url( 'theme-install.php' ) : null, + 'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ), + ), + 'l10n' => array( + 'addNew' => __( 'Add New Theme' ), + 'search' => __( 'Search Themes' ), + 'searchPlaceholder' => __( 'Search themes...' ), // placeholder (no ellipsis) + 'upload' => __( 'Upload Theme' ), + 'back' => __( 'Back' ), + 'error' => 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/' ) + ), + 'tryAgain' => __( 'Try Again' ), + 'themesFound' => __( 'Number of Themes found: %d' ), + 'noThemesFound' => __( 'No themes found. Try a different search.' ), + 'collapseSidebar' => __( 'Collapse Sidebar' ), + 'expandSidebar' => __( 'Expand Sidebar' ), + /* translators: accessibility text */ + 'selectFeatureFilter' => __( 'Select one or more Theme features to filter by' ), + ), + 'installedThemes' => array_keys( $installed_themes ), + ) +); + +wp_enqueue_script( 'theme' ); +wp_enqueue_script( 'updates' ); + +if ( $tab ) { + /** + * Fires before each of the tabs are rendered on the Install Themes page. + * + * The dynamic portion of the hook name, `$tab`, refers to the current + * theme installation tab. Possible values are 'dashboard', 'search', 'upload', + * 'featured', 'new', or 'updated'. + * + * @since 2.8.0 + */ + do_action( "install_themes_pre_{$tab}" ); +} + +$help_overview = + '

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

      ' . + '

      ' . __( 'You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter.' ) . ' ' . __( 'The search results will be updated as you type.' ) . '

      ' . + '

      ' . __( 'Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it.' ) . '

      ' . + '

      ' . sprintf( + /* translators: %s: /wp-content/themes */ + __( 'You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your %s directory.' ), + '/wp-content/themes' + ) . '

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

      ' . __( 'Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you’re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look.' ) . '

      ' . + '

      ' . __( 'To install the theme so you can preview it with your site’s content and customize its theme options, click the "Install" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the "Activate" link, or by navigating to your Manage Themes screen and clicking the "Live Preview" link under any installed theme’s thumbnail image.' ) . '

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      + + __( 'Upload Theme' ) ) ); + if ( ! empty( $tabs['upload'] ) && current_user_can( 'upload_themes' ) ) { + echo ' '; + } + ?> + +
      + +
      +

      +
      + +
      + +
      + +

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

      + +

      + + + + +

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

      +
      +
      + +

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

      ' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '

      ', + 403 + ); +} + +if ( current_user_can( 'switch_themes' ) && isset( $_GET['action'] ) ) { + if ( 'activate' == $_GET['action'] ) { + check_admin_referer( 'switch-theme_' . $_GET['stylesheet'] ); + $theme = wp_get_theme( $_GET['stylesheet'] ); + + if ( ! $theme->exists() || ! $theme->is_allowed() ) { + wp_die( + '

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

      ' . + '

      ' . __( 'The requested theme does not exist.' ) . '

      ', + 403 + ); + } + + switch_theme( $theme->get_stylesheet() ); + wp_redirect( admin_url( 'themes.php?activated=true' ) ); + exit; + } elseif ( 'resume' === $_GET['action'] ) { + check_admin_referer( 'resume-theme_' . $_GET['stylesheet'] ); + $theme = wp_get_theme( $_GET['stylesheet'] ); + + if ( ! current_user_can( 'resume_theme', $_GET['stylesheet'] ) ) { + wp_die( + '

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

      ' . + '

      ' . __( 'Sorry, you are not allowed to resume this theme.' ) . '

      ', + 403 + ); + } + + $result = resume_theme( $theme->get_stylesheet(), self_admin_url( 'themes.php?error=resuming' ) ); + + if ( is_wp_error( $result ) ) { + wp_die( $result ); + } + + wp_redirect( admin_url( 'themes.php?resumed=true' ) ); + exit; + } elseif ( 'delete' == $_GET['action'] ) { + check_admin_referer( 'delete-theme_' . $_GET['stylesheet'] ); + $theme = wp_get_theme( $_GET['stylesheet'] ); + + if ( ! current_user_can( 'delete_themes' ) ) { + wp_die( + '

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

      ' . + '

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

      ', + 403 + ); + } + + if ( ! $theme->exists() ) { + wp_die( + '

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

      ' . + '

      ' . __( 'The requested theme does not exist.' ) . '

      ', + 403 + ); + } + + $active = wp_get_theme(); + if ( $active->get( 'Template' ) == $_GET['stylesheet'] ) { + wp_redirect( admin_url( 'themes.php?delete-active-child=true' ) ); + } else { + delete_theme( $_GET['stylesheet'] ); + wp_redirect( admin_url( 'themes.php?deleted=true' ) ); + } + exit; + } +} + +$title = __( 'Manage Themes' ); +$parent_file = 'themes.php'; + +// Help tab: Overview +if ( current_user_can( 'switch_themes' ) ) { + $help_overview = '

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

      ' . + '

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

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

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

      ' . + '

      ' . __( 'The search for installed themes will search for terms in their name, description, author, or tag.' ) . ' ' . __( 'The search results will be updated as you type.' ) . '

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

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

      '; + } else { + $help_install = '

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

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

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

      ' . + '

      ' . __( 'The theme being previewed is fully interactive — navigate to different pages to see how the theme handles posts, archives, and other page templates. The settings may differ depending on what theme features the theme being previewed supports. To accept the new settings and activate the theme all in one step, click the Publish & Activate button above the menu.' ) . '

      ' . + '

      ' . __( 'When previewing on smaller monitors, you can use the collapse icon at the bottom of the left-hand pane. This will hide the pane, giving you more room to preview your site in the new theme. To bring the pane back, click on the collapse icon again.' ) . '

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      + +

      + + + + + +
      + +
      + +

      + +

      + +

      + +

      + +

      + +

      + +

      fatal error.' ); ?>

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

      ' . __( 'ERROR:' ) . ' ' . $ct->errors()->get_error_message() . '

      '; +} + +/* +// Certain error codes are less fatal than others. We can still display theme information in most cases. +if ( ! $ct->errors() || ( 1 == count( $ct->errors()->get_error_codes() ) + && in_array( $ct->errors()->get_error_code(), array( 'theme_no_parent', 'theme_parent_invalid', 'theme_no_index' ) ) ) ) : ?> +*/ + + // Pretend you didn't see this. + $current_theme_actions = array(); +if ( is_array( $submenu ) && isset( $submenu['themes.php'] ) ) { + foreach ( (array) $submenu['themes.php'] as $item ) { + $class = ''; + if ( 'themes.php' == $item[2] || 'theme-editor.php' == $item[2] || 0 === strpos( $item[2], 'customize.php' ) ) { + continue; + } + // 0 = name, 1 = capability, 2 = file + if ( ( strcmp( $self, $item[2] ) == 0 && empty( $parent_file ) ) || ( $parent_file && ( $item[2] == $parent_file ) ) ) { + $class = ' current'; + } + if ( ! empty( $submenu[ $item[2] ] ) ) { + $submenu[ $item[2] ] = array_values( $submenu[ $item[2] ] ); // Re-index. + $menu_hook = get_plugin_page_hook( $submenu[ $item[2] ][0][2], $item[2] ); + if ( file_exists( WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}" ) || ! empty( $menu_hook ) ) { + $current_theme_actions[] = "{$item[0]}"; + } else { + $current_theme_actions[] = "{$item[0]}"; + } + } elseif ( ! empty( $item[2] ) && current_user_can( $item[1] ) ) { + $menu_file = $item[2]; + + if ( current_user_can( 'customize' ) ) { + if ( 'custom-header' === $menu_file ) { + $current_theme_actions[] = "{$item[0]}"; + } elseif ( 'custom-background' === $menu_file ) { + $current_theme_actions[] = "{$item[0]}"; + } + } + + if ( false !== ( $pos = strpos( $menu_file, '?' ) ) ) { + $menu_file = substr( $menu_file, 0, $pos ); + } + + if ( file_exists( ABSPATH . "wp-admin/$menu_file" ) ) { + $current_theme_actions[] = "{$item[0]}"; + } else { + $current_theme_actions[] = "{$item[0]}"; + } + } + } +} + +?> + + +
      +
      + + +
      + +
      + +
      + +
      + + + +
      + +

      Update now' ); ?>

      + +

      + +
      + + + +
      + +
      + +

      + Active: %s' ), $theme['name'] ); + ?> +

      + +

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

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

      +

      + + + + + + + + + + + + + + + + + + + + + errors()->get_error_code() ) { + $stylesheet = $broken_theme->get_stylesheet(); + $resume_url = add_query_arg( + array( + 'action' => 'resume', + 'stylesheet' => urlencode( $stylesheet ), + ), + admin_url( 'themes.php' ) + ); + $resume_url = wp_nonce_url( $resume_url, 'resume-theme_' . $stylesheet ); + ?> + + + + get_stylesheet(); + $delete_url = add_query_arg( + array( + 'action' => 'delete', + 'stylesheet' => urlencode( $stylesheet ), + ), + admin_url( 'themes.php' ) + ); + $delete_url = wp_nonce_url( $delete_url, 'delete-theme_' . $stylesheet ); + ?> + + errors()->get_error_code() ) { + $parent_theme_name = $broken_theme->get( 'Template' ); + $parent_theme = themes_api( 'theme_information', array( 'slug' => urlencode( $parent_theme_name ) ) ); + + if ( ! is_wp_error( $parent_theme ) ) { + $install_url = add_query_arg( + array( + 'action' => 'install-theme', + 'theme' => urlencode( $parent_theme_name ), + ), + admin_url( 'update.php' ) + ); + $install_url = wp_nonce_url( $install_url, 'install-theme_' . $parent_theme_name ); + ?> + + + + +
      get( 'Name' ) ? $broken_theme->display( 'Name' ) : $broken_theme->get_stylesheet(); ?>errors()->get_error_message(); ?>
      +
      + + +
      + + + + + + + wp_get_update_data(), + ) +); + +require( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/tools.php b/wp-admin/tools.php new file mode 100644 index 000000000..c188e3f58 --- /dev/null +++ b/wp-admin/tools.php @@ -0,0 +1,79 @@ +add_help_tab( + array( + 'id' => 'converter', + 'title' => __( 'Categories and Tags Converter' ), + 'content' => '

      ' . __( 'Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '

      ' . + '

      ' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

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

      +

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

      +
      + +
      +locale && 'en_US' == get_locale() ) { + $version_string = $update->current; + } elseif ( 'en_US' == $update->locale && $update->packages->partial && $wp_version == $update->partial_version && ( $updates = get_core_updates() ) && 1 == count( $updates ) ) { + // If the only available update is a partial builds, it doesn't need a language-specific version string. + $version_string = $update->current; + } else { + $version_string = sprintf( '%s–%s', $update->current, $update->locale ); + } + + $current = false; + if ( ! isset( $update->response ) || 'latest' == $update->response ) { + $current = true; + } + $submit = __( 'Update Now' ); + $form_action = 'update-core.php?action=do-core-upgrade'; + $php_version = phpversion(); + $mysql_version = $wpdb->db_version(); + $show_buttons = true; + if ( 'development' == $update->response ) { + $message = __( 'You are using a development version of WordPress. You can update to the latest nightly build automatically:' ); + } else { + if ( $current ) { + $message = sprintf( __( 'If you need to re-install version %s, you can do so here:' ), $version_string ); + $submit = __( 'Re-install Now' ); + $form_action = 'update-core.php?action=do-core-reinstall'; + } else { + $php_compat = version_compare( $php_version, $update->php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) { + $mysql_compat = true; + } else { + $mysql_compat = version_compare( $mysql_version, $update->mysql_version, '>=' ); + } + + $version_url = sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( $update->current ) + ); + + /* translators: %s: Update PHP page URL */ + $php_update_message = '

      ' . sprintf( __( 'Learn more about updating PHP.' ), esc_url( wp_get_update_php_url() ) ); + + $annotation = wp_get_update_php_annotation(); + if ( $annotation ) { + $php_update_message .= '

      ' . $annotation . ''; + } + + if ( ! $mysql_compat && ! $php_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Minimum required MySQL version number, 5: Current PHP version number, 6: Current MySQL version number */ + $message = sprintf( __( 'You cannot update because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s.' ), $version_url, $update->current, $update->php_version, $update->mysql_version, $php_version, $mysql_version ) . $php_update_message; + } elseif ( ! $php_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Current PHP version number */ + $message = sprintf( __( 'You cannot update because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s.' ), $version_url, $update->current, $update->php_version, $php_version ) . $php_update_message; + } elseif ( ! $mysql_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required MySQL version number, 4: Current MySQL version number */ + $message = sprintf( __( 'You cannot update because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s.' ), $version_url, $update->current, $update->mysql_version, $mysql_version ); + } else { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number including locale if necessary */ + $message = sprintf( __( 'You can update to WordPress %2$s automatically:' ), $version_url, $version_string ); + } + if ( ! $mysql_compat || ! $php_compat ) { + $show_buttons = false; + } + } + } + + echo '

      '; + echo $message; + echo '

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

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

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

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

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

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

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

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

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

      '; + } else { + echo '

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

      '; + + echo '

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

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

      '; + echo '' . __( 'BETA TESTERS:' ) . ' ' . __( 'This site is set up to install updates of future beta versions automatically.' ); + echo '

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

      ' . __( 'While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, your site will return to normal.' ) . '

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

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

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

      ' . __( 'Plugins' ) . '

      '; + echo '

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

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

      +

      +
      + +

      + + + + + + + + + + $plugin_data ) { + $plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true ); + + $icon = ''; + $preferred_icons = array( 'svg', '2x', '1x', 'default' ); + foreach ( $preferred_icons as $preferred_icon ) { + if ( ! empty( $plugin_data->update->icons[ $preferred_icon ] ) ) { + $icon = ''; + break; + } + } + + // Get plugin compat for running version of WordPress. + if ( isset( $plugin_data->update->tested ) && version_compare( $plugin_data->update->tested, $cur_wp_version, '>=' ) ) { + $compat = '
      ' . sprintf( __( 'Compatibility with WordPress %1$s: 100%% (according to its author)' ), $cur_wp_version ); + } else { + $compat = '
      ' . sprintf( __( 'Compatibility with WordPress %1$s: Unknown' ), $cur_wp_version ); + } + // Get plugin compat for updated version of WordPress. + if ( $core_update_version ) { + if ( isset( $plugin_data->update->tested ) && version_compare( $plugin_data->update->tested, $core_update_version, '>=' ) ) { + $compat .= '
      ' . sprintf( __( 'Compatibility with WordPress %1$s: 100%% (according to its author)' ), $core_update_version ); + } else { + $compat .= '
      ' . sprintf( __( 'Compatibility with WordPress %1$s: Unknown' ), $core_update_version ); + } + } + + $requires_php = isset( $plugin_data->update->requires_php ) ? $plugin_data->update->requires_php : null; + $compatible_php = is_php_version_compatible( $requires_php ); + + if ( ! $compatible_php && current_user_can( 'update_php' ) ) { + $compat .= '
      ' . __( 'This update doesn’t work with your version of PHP.' ) . ' '; + /* translators: %s: Update PHP page URL */ + $compat .= sprintf( + __( 'Learn more about updating PHP.' ), + esc_url( wp_get_update_php_url() ) + ); + + $annotation = wp_get_update_php_annotation(); + + if ( $annotation ) { + $compat .= '

      ' . $annotation . ''; + } + } + + // Get the upgrade notice for the new plugin version. + if ( isset( $plugin_data->update->upgrade_notice ) ) { + $upgrade_notice = '
      ' . strip_tags( $plugin_data->update->upgrade_notice ); + } else { + $upgrade_notice = ''; + } + + $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin_data->update->slug . '§ion=changelog&TB_iframe=true&width=640&height=662' ); + $details = sprintf( + '%3$s', + esc_url( $details_url ), + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_data->Name, $plugin_data->update->new_version ) ), + /* translators: %s: plugin version */ + sprintf( __( 'View version %s details.' ), $plugin_data->update->new_version ) + ); + + $checkbox_id = 'checkbox_' . md5( $plugin_data->Name ); + ?> +

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

      + + Name; ?> + Version, + $plugin_data->update->new_version + ); + echo ' ' . $details . $compat . $upgrade_notice; + ?> +

      +

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

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

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

      +

      +

      + Please Note: Any customizations you have made to theme files will be lost. Please consider using child themes for modifications.' ), + __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) + ); + ?> +

      +
      + +

      + + + + + + + + + + $theme ) { + $checkbox_id = 'checkbox_' . md5( $theme->get( 'Name' ) ); + ?> + + + + + + + + + + + + + +
      + + +

      + + display( 'Name' ); ?> + display( 'Version' ), + $theme->update['new_version'] + ); + ?> +

      +

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

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

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

      +
      +

      + +

      +
      + new_files ) && ! $update->new_files; + + ?> +
      +

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

      '; +$updates_overview .= '

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

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

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

      '; +$updates_howto .= '

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

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

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

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      +

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

      '; + } + + $last_update_check = false; + $current = get_site_transient( 'update_core' ); + + if ( $current && isset( $current->last_checked ) ) { + $last_update_check = $current->last_checked + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS; + } + + echo '

      '; + /* translators: 1: date, 2: time */ + printf( __( 'Last checked on %1$s at %2$s.' ), date_i18n( __( 'F j, Y' ), $last_update_check ), date_i18n( __( 'g:i a' ), $last_update_check ) ); + echo '   ' . __( 'Check Again' ) . ''; + echo '

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

      ' . __( 'Update Plugins' ) . '

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

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

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

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

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

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

      +

      +

      + +

      ' . sprintf( __( 'Learn more about updating PHP.' ), esc_url( wp_get_update_php_url() ) ); + + $annotation = wp_get_update_php_annotation(); + if ( $annotation ) { + $php_update_message .= '

      ' . $annotation . ''; + } + + if ( ! $mysql_compat && ! $php_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Minimum required MySQL version number, 5: Current PHP version number, 6: Current MySQL version number */ + $message = sprintf( __( 'You cannot update because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s.' ), $version_url, $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ) . $php_update_message; + } elseif ( ! $php_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Current PHP version number */ + $message = sprintf( __( 'You cannot update because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_php_version, $php_version ) . $php_update_message; + } elseif ( ! $mysql_compat ) { + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required MySQL version number, 4: Current MySQL version number */ + $message = sprintf( __( 'You cannot update because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_mysql_version, $mysql_version ); + } + + echo '

      ' . $message . '

      '; + ?> + +

      +

      +

      +

      + +

      +

      +

      + + + + + + diff --git a/wp-admin/upload.php b/wp-admin/upload.php new file mode 100644 index 000000000..c2c59c7f1 --- /dev/null +++ b/wp-admin/upload.php @@ -0,0 +1,373 @@ + $value ) { + if ( ! $value || in_array( $key, $ignore ) ) { + unset( $vars[ $key ] ); + } + } + + wp_localize_script( + 'media-grid', + '_wpMediaGridSettings', + array( + 'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ), + 'queryVars' => (object) $vars, + ) + ); + + get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => + '

      ' . __( 'All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first.' ) . '

      ' . + '

      ' . __( 'You can view your media in a simple visual grid or a list with columns. Switch between these views using the icons to the left above the media.' ) . '

      ' . + '

      ' . __( 'To delete media items, click the Bulk Select button at the top of the screen. Select any items you wish to delete, then click the Delete Selected button. Clicking the Cancel Selection button takes you back to viewing your media.' ) . '

      ', + ) + ); + + get_current_screen()->add_help_tab( + array( + 'id' => 'attachment-details', + 'title' => __( 'Attachment Details' ), + 'content' => + '

      ' . __( 'Clicking an item will display an Attachment Details dialog, which allows you to preview media and make quick edits. Any changes you make to the attachment details will be automatically saved.' ) . '

      ' . + '

      ' . __( 'Use the arrow buttons at the top of the dialog, or the left and right arrow keys on your keyboard, to navigate between media items quickly.' ) . '

      ' . + '

      ' . __( 'You can also delete individual items and access the extended edit screen from the details dialog.' ) . '

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' + ); + + $title = __( 'Media Library' ); + $parent_file = 'upload.php'; + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + ?> +
      +

      + + + + + +
      + +
      +

      + Switch to the list view.' ), + 'upload.php?mode=list' + ); + ?> +

      +
      +
      + get_pagenum(); + +// Handle bulk actions +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer( 'bulk-media' ); + + if ( 'delete_all' == $doaction ) { + $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['media'] ) ) { + $post_ids = $_REQUEST['media']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $post_ids = explode( ',', $_REQUEST['ids'] ); + } + + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) { + $location = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted' ), $referer ); + } + } + + switch ( $doaction ) { + case 'detach': + wp_media_attach_action( $_REQUEST['parent_post_id'], 'detach' ); + break; + + case 'attach': + wp_media_attach_action( $_REQUEST['found_post_id'] ); + break; + + case 'trash': + if ( ! isset( $post_ids ) ) { + break; + } + foreach ( (array) $post_ids as $post_id ) { + if ( ! current_user_can( 'delete_post', $post_id ) ) { + wp_die( __( 'Sorry, you are not allowed to move this item to the Trash.' ) ); + } + + if ( ! wp_trash_post( $post_id ) ) { + wp_die( __( 'Error in moving to Trash.' ) ); + } + } + $location = add_query_arg( + array( + 'trashed' => count( $post_ids ), + 'ids' => join( ',', $post_ids ), + ), + $location + ); + break; + case 'untrash': + if ( ! isset( $post_ids ) ) { + break; + } + foreach ( (array) $post_ids as $post_id ) { + if ( ! current_user_can( 'delete_post', $post_id ) ) { + wp_die( __( '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.' ) ); + } + } + $location = add_query_arg( 'untrashed', count( $post_ids ), $location ); + break; + case 'delete': + if ( ! isset( $post_ids ) ) { + break; + } + foreach ( (array) $post_ids as $post_id_del ) { + if ( ! current_user_can( 'delete_post', $post_id_del ) ) { + wp_die( __( 'Sorry, you are not allowed to delete this item.' ) ); + } + + if ( ! wp_delete_attachment( $post_id_del ) ) { + wp_die( __( 'Error in deleting.' ) ); + } + } + $location = add_query_arg( 'deleted', count( $post_ids ), $location ); + break; + default: + /** This action is documented in wp-admin/edit-comments.php */ + $location = apply_filters( 'handle_bulk_actions-' . get_current_screen()->id, $location, $doaction, $post_ids ); + } + + wp_redirect( $location ); + exit; +} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { + wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +$title = __( 'Media Library' ); +$parent_file = 'upload.php'; + +wp_enqueue_script( 'media' ); + +add_screen_option( 'per_page' ); + +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => + '

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

      ' . + '

      ' . __( 'You can narrow the list by file type/status or by date using the dropdown menus above the media table.' ) . '

      ' . + '

      ' . __( 'You can view your media in a simple visual grid or a list with columns. Switch between these views using the icons to the left above the media.' ) . '

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

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

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

      ' . __( 'If a media file has not been attached to any content, you will see that in the Uploaded To column, and can click on Attach to launch a small popup that will allow you to search for existing content and attach the file.' ) . '

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

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

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

      + + + + ' . __( 'Search results for “%s”' ) . '', get_search_query() ); +} +?> + +
      + +' . __( 'Undo' ) . ''; + $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'trashed' ), $_SERVER['REQUEST_URI'] ); +} + +if ( ! empty( $_GET['untrashed'] ) && $untrashed = absint( $_GET['untrashed'] ) ) { + if ( 1 == $untrashed ) { + $message = __( 'Media file restored from the trash.' ); + } else { + /* translators: %s: number of media files */ + $message = _n( '%s media file restored from the trash.', '%s media files restored from the trash.', $untrashed ); + } + $message = sprintf( $message, number_format_i18n( $untrashed ) ); + $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'untrashed' ), $_SERVER['REQUEST_URI'] ); +} + +$messages[1] = __( 'Media file updated.' ); +$messages[2] = __( 'Media file permanently deleted.' ); +$messages[3] = __( 'Error saving media file.' ); +$messages[4] = __( 'Media file moved to the trash.' ) . ' ' . __( 'Undo' ) . ''; +$messages[5] = __( 'Media file restored from the trash.' ); + +if ( ! empty( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) { + $message = $messages[ $_GET['message'] ]; + $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'message' ), $_SERVER['REQUEST_URI'] ); +} + +if ( ! empty( $message ) ) { + ?> +

      + + +
      + +views(); ?> + +display(); ?> + +
      + +
      +
      + +ID ) ); +} + +if ( ! $user_id && IS_PROFILE_PAGE ) { + $user_id = $current_user->ID; +} elseif ( ! $user_id && ! IS_PROFILE_PAGE ) { + wp_die( __( 'Invalid user ID.' ) ); +} elseif ( ! get_userdata( $user_id ) ) { + wp_die( __( 'Invalid user ID.' ) ); +} + +wp_enqueue_script( 'user-profile' ); + +if ( IS_PROFILE_PAGE ) { + $title = __( 'Profile' ); +} else { + /* translators: %s: user's display name */ + $title = __( 'Edit User %s' ); +} + +if ( current_user_can( 'edit_users' ) && ! IS_PROFILE_PAGE ) { + $submenu_file = 'users.php'; +} else { + $submenu_file = 'profile.php'; +} + +if ( current_user_can( 'edit_users' ) && ! is_user_admin() ) { + $parent_file = 'users.php'; +} else { + $parent_file = 'profile.php'; +} + +$profile_help = '

      ' . __( 'Your profile contains information about you (your “account”) as well as some personal options related to using WordPress.' ) . '

      ' . + '

      ' . __( 'You can change your password, turn on keyboard shortcuts, change the color scheme of your WordPress administration screens, and turn off the WYSIWYG (Visual) editor, among other things. You can hide the Toolbar (formerly called the Admin Bar) from the front end of your site, however it cannot be disabled on the admin screens.' ) . '

      ' . + '

      ' . __( 'You can select the language you wish to use while using the WordPress administration screen without affecting the language site visitors see.' ) . '

      ' . + '

      ' . __( 'Your username cannot be changed, but you can use other fields to enter your real name or a nickname, and change which name to display on your posts.' ) . '

      ' . + '

      ' . __( 'You can log out of other devices, such as your phone or a public computer, by clicking the Log Out Everywhere Else button.' ) . '

      ' . + '

      ' . __( 'Required fields are indicated; the rest are optional. Profile information will only be displayed if your theme is set up to do so.' ) . '

      ' . + '

      ' . __( 'Remember to click the Update Profile button when you are finished.' ) . '

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

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

      ' . + '

      ' . __( 'Documentation on User Profiles' ) . '

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +$wp_http_referer = remove_query_arg( array( 'update', 'delete_count', 'user_id' ), $wp_http_referer ); + +$user_can_edit = current_user_can( 'edit_posts' ) || current_user_can( 'edit_pages' ); + +/** + * Filters whether to allow administrators on Multisite to edit every user. + * + * Enabling the user editing form via this filter also hinges on the user holding + * the 'manage_network_users' cap, and the logged-in user not matching the user + * profile open for editing. + * + * The filter was introduced to replace the EDIT_ANY_USER constant. + * + * @since 3.0.0 + * + * @param bool $allow Whether to allow editing of any user. Default true. + */ +if ( is_multisite() + && ! current_user_can( 'manage_network_users' ) + && $user_id != $current_user->ID + && ! apply_filters( 'enable_edit_any_user_configuration', true ) +) { + wp_die( __( 'Sorry, you are not allowed to edit this user.' ) ); +} + +// Execute confirmed email change. See send_confirmation_on_profile_email(). +if ( IS_PROFILE_PAGE && isset( $_GET['newuseremail'] ) && $current_user->ID ) { + $new_email = get_user_meta( $current_user->ID, '_new_email', true ); + if ( $new_email && hash_equals( $new_email['hash'], $_GET['newuseremail'] ) ) { + $user = new stdClass; + $user->ID = $current_user->ID; + $user->user_email = esc_html( trim( $new_email['newemail'] ) ); + if ( is_multisite() && $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $current_user->user_login ) ) ) { + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $user->user_email, $current_user->user_login ) ); + } + wp_update_user( $user ); + delete_user_meta( $current_user->ID, '_new_email' ); + wp_redirect( add_query_arg( array( 'updated' => 'true' ), self_admin_url( 'profile.php' ) ) ); + die(); + } else { + wp_redirect( add_query_arg( array( 'error' => 'new-email' ), self_admin_url( 'profile.php' ) ) ); + } +} elseif ( IS_PROFILE_PAGE && ! empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' === $_GET['dismiss'] ) { + check_admin_referer( 'dismiss-' . $current_user->ID . '_new_email' ); + delete_user_meta( $current_user->ID, '_new_email' ); + wp_redirect( add_query_arg( array( 'updated' => 'true' ), self_admin_url( 'profile.php' ) ) ); + die(); +} + +switch ( $action ) { + case 'update': + check_admin_referer( 'update-user_' . $user_id ); + + if ( ! current_user_can( 'edit_user', $user_id ) ) { + wp_die( __( 'Sorry, you are not allowed to edit this user.' ) ); + } + + if ( IS_PROFILE_PAGE ) { + /** + * Fires before the page loads on the 'Your Profile' editing screen. + * + * The action only fires if the current user is editing their own profile. + * + * @since 2.0.0 + * + * @param int $user_id The user ID. + */ + do_action( 'personal_options_update', $user_id ); + } else { + /** + * Fires before the page loads on the 'Edit User' screen. + * + * @since 2.7.0 + * + * @param int $user_id The user ID. + */ + do_action( 'edit_user_profile_update', $user_id ); + } + + // Update the email address in signups, if present. + if ( is_multisite() ) { + $user = get_userdata( $user_id ); + + if ( $user->user_login && isset( $_POST['email'] ) && is_email( $_POST['email'] ) && $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $user->user_login ) ) ) { + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $_POST['email'], $user_login ) ); + } + } + + // Update the user. + $errors = edit_user( $user_id ); + + // Grant or revoke super admin status if requested. + if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && ! isset( $super_admins ) && empty( $_POST['super_admin'] ) == is_super_admin( $user_id ) ) { + empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id ); + } + + if ( ! is_wp_error( $errors ) ) { + $redirect = add_query_arg( 'updated', true, get_edit_user_link( $user_id ) ); + if ( $wp_http_referer ) { + $redirect = add_query_arg( 'wp_http_referer', urlencode( $wp_http_referer ), $redirect ); + } + wp_redirect( $redirect ); + exit; + } + + // Intentional fall-through to display $errors. + default: + $profileuser = get_user_to_edit( $user_id ); + + if ( ! current_user_can( 'edit_user', $user_id ) ) { + wp_die( __( 'Sorry, you are not allowed to edit this user.' ) ); + } + + $title = sprintf( $title, $profileuser->display_name ); + $sessions = WP_Session_Tokens::get_instance( $profileuser->ID ); + + include( ABSPATH . 'wp-admin/admin-header.php' ); + ?> + + ID ) && current_user_can( 'manage_network_options' ) ) { ?> +

      + + +
      + +

      + +

      + + +

      + +
      + + +
      + +

      + +
      + + +

      \n

      ", $errors->get_error_messages() ); ?>

      + + +
      +

      + +

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

      + + +

      + +

      + + + + + + + + + + + + + + + + 1 && has_action( 'admin_color_scheme_picker' ) ) : ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      + + + + + + + + ID ) ) : ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      + + + + + + + + + + + + + $desc ) { + ?> + + + + + + + +

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

      + + + + + + + + + + + + + + + + get_all() ) === 1 ) : + ?> + + + + +get_all() ) > 1 ) : ?> + + + + +get_all() ) : ?> + + + + + + + + + + + caps ) > count( $profileuser->roles ) + && apply_filters( 'additional_capabilities_display', true, $profileuser ) + ) : + ?> +

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

      ' . __( 'Sorry, you are not allowed to add users to this network.' ) . '

      ', + 403 + ); + } +} elseif ( ! current_user_can( 'create_users' ) ) { + wp_die( + '

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

      ' . + '

      ' . __( 'Sorry, you are not allowed to create users.' ) . '

      ', + 403 + ); +} + +if ( is_multisite() ) { + add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' ); +} + +if ( isset( $_REQUEST['action'] ) && 'adduser' == $_REQUEST['action'] ) { + check_admin_referer( 'add-user', '_wpnonce_add-user' ); + + $user_details = null; + $user_email = wp_unslash( $_REQUEST['email'] ); + if ( false !== strpos( $user_email, '@' ) ) { + $user_details = get_user_by( 'email', $user_email ); + } else { + if ( current_user_can( 'manage_network_users' ) ) { + $user_details = get_user_by( 'login', $user_email ); + } else { + wp_redirect( add_query_arg( array( 'update' => 'enter_email' ), 'user-new.php' ) ); + die(); + } + } + + if ( ! $user_details ) { + wp_redirect( add_query_arg( array( 'update' => 'does_not_exist' ), 'user-new.php' ) ); + die(); + } + + if ( ! current_user_can( 'promote_user', $user_details->ID ) ) { + wp_die( + '

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

      ' . + '

      ' . __( 'Sorry, you are not allowed to add users to this network.' ) . '

      ', + 403 + ); + } + + // Adding an existing user to this blog + $new_user_email = $user_details->user_email; + $redirect = 'user-new.php'; + $username = $user_details->user_login; + $user_id = $user_details->ID; + if ( $username != null && array_key_exists( $blog_id, get_blogs_of_user( $user_id ) ) ) { + $redirect = add_query_arg( array( 'update' => 'addexisting' ), 'user-new.php' ); + } else { + if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { + $result = add_existing_user_to_blog( + array( + 'user_id' => $user_id, + 'role' => $_REQUEST['role'], + ) + ); + + if ( ! is_wp_error( $result ) ) { + $redirect = add_query_arg( + array( + 'update' => 'addnoconfirmation', + 'user_id' => $user_id, + ), + 'user-new.php' + ); + } else { + $redirect = add_query_arg( array( 'update' => 'could_not_add' ), 'user-new.php' ); + } + } else { + $newuser_key = wp_generate_password( 20, false ); + add_option( + 'new_user_' . $newuser_key, + array( + 'user_id' => $user_id, + 'email' => $user_details->user_email, + 'role' => $_REQUEST['role'], + ) + ); + + $roles = get_editable_roles(); + $role = $roles[ $_REQUEST['role'] ]; + + /** + * Fires immediately after a user is invited to join a site, but before the notification is sent. + * + * @since 4.4.0 + * + * @param int $user_id The invited user's ID. + * @param array $role The role of invited user. + * @param string $newuser_key The key of the invitation. + */ + do_action( 'invite_user', $user_id, $role, $newuser_key ); + + $switched_locale = switch_to_locale( get_user_locale( $user_details ) ); + + /* translators: 1: Site name, 2: site URL, 3: role, 4: activation URL */ + $message = __( + 'Hi, + +You\'ve been invited to join \'%1$s\' at +%2$s with the role of %3$s. + +Please click the following link to confirm the invite: +%4$s' + ); + + /* translators: Joining confirmation notification email subject. %s: Site title */ + wp_mail( $new_user_email, sprintf( __( '[%s] Joining Confirmation' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ) ); + + if ( $switched_locale ) { + restore_previous_locale(); + } + + $redirect = add_query_arg( array( 'update' => 'add' ), 'user-new.php' ); + } + } + wp_redirect( $redirect ); + die(); +} elseif ( isset( $_REQUEST['action'] ) && 'createuser' == $_REQUEST['action'] ) { + check_admin_referer( 'create-user', '_wpnonce_create-user' ); + + if ( ! current_user_can( 'create_users' ) ) { + wp_die( + '

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

      ' . + '

      ' . __( 'Sorry, you are not allowed to create users.' ) . '

      ', + 403 + ); + } + + if ( ! is_multisite() ) { + $user_id = edit_user(); + + if ( is_wp_error( $user_id ) ) { + $add_user_errors = $user_id; + } else { + if ( current_user_can( 'list_users' ) ) { + $redirect = 'users.php?update=add&id=' . $user_id; + } else { + $redirect = add_query_arg( 'update', 'add', 'user-new.php' ); + } + wp_redirect( $redirect ); + die(); + } + } else { + // Adding a new user to this site + $new_user_email = wp_unslash( $_REQUEST['email'] ); + $user_details = wpmu_validate_user_signup( $_REQUEST['user_login'], $new_user_email ); + if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) { + $add_user_errors = $user_details['errors']; + } else { + /** This filter is documented in wp-includes/user.php */ + $new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) ); + if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { + add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email + add_filter( 'wpmu_welcome_user_notification', '__return_false' ); // Disable welcome email + } + wpmu_signup_user( + $new_user_login, + $new_user_email, + array( + 'add_to_blog' => get_current_blog_id(), + 'new_role' => $_REQUEST['role'], + ) + ); + if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { + $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $new_user_email ) ); + $new_user = wpmu_activate_signup( $key ); + if ( is_wp_error( $new_user ) ) { + $redirect = add_query_arg( array( 'update' => 'addnoconfirmation' ), 'user-new.php' ); + } elseif ( ! is_user_member_of_blog( $new_user['user_id'] ) ) { + $redirect = add_query_arg( array( 'update' => 'created_could_not_add' ), 'user-new.php' ); + } else { + $redirect = add_query_arg( + array( + 'update' => 'addnoconfirmation', + 'user_id' => $new_user['user_id'], + ), + 'user-new.php' + ); + } + } else { + $redirect = add_query_arg( array( 'update' => 'newuserconfirmation' ), 'user-new.php' ); + } + wp_redirect( $redirect ); + die(); + } + } +} + +$title = __( 'Add New User' ); +$parent_file = 'users.php'; + +$do_both = false; +if ( is_multisite() && current_user_can( 'promote_users' ) && current_user_can( 'create_users' ) ) { + $do_both = true; +} + +$help = '

      ' . __( 'To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom.' ) . '

      '; + +if ( is_multisite() ) { + $help .= '

      ' . __( 'Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users.' ) . '

      ' . + '

      ' . __( 'New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to receive a welcome email.' ) . '

      '; +} else { + $help .= '

      ' . __( 'New users are automatically assigned a password, which they can change after logging in. You can view or edit the assigned password by clicking the Show Password button. The username cannot be changed once the user has been added.' ) . '

      ' . + + '

      ' . __( 'By default, new users will receive an email letting them know they’ve been added as a user for your site. This email will also contain a password reset link. Uncheck the box if you don’t want to send the new user a welcome email.' ) . '

      '; +} + +$help .= '

      ' . __( 'Remember to click the Add New User button at the bottom of this screen when you are finished.' ) . '

      '; + +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $help, + ) +); + +get_current_screen()->add_help_tab( + array( + 'id' => 'user-roles', + 'title' => __( 'User Roles' ), + 'content' => '

      ' . __( 'Here is a basic overview of the different user roles and the permissions associated with each one:' ) . '

      ' . + '
        ' . + '
      • ' . __( 'Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.' ) . '
      • ' . + '
      • ' . __( 'Contributors can write and manage their posts but not publish posts or upload media files.' ) . '
      • ' . + '
      • ' . __( 'Authors can publish and manage their own posts, and are able to upload files.' ) . '
      • ' . + '
      • ' . __( 'Editors can publish posts, manage posts as well as manage other people’s posts, etc.' ) . '
      • ' . + '
      • ' . __( 'Administrators have access to all the administration features.' ) . '
      • ' . + '
      ', + ) +); + +get_current_screen()->set_help_sidebar( + '

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

      ' . + '

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

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +wp_enqueue_script( 'wp-ajax-response' ); +wp_enqueue_script( 'user-profile' ); + +/** + * Filters whether to enable user auto-complete for non-super admins in Multisite. + * + * @since 3.4.0 + * + * @param bool $enable Whether to enable auto-complete for non-super admins. Default false. + */ +if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' ) + && ( current_user_can( 'manage_network_users' ) || apply_filters( 'autocomplete_users_for_site_admins', false ) ) +) { + wp_enqueue_script( 'user-suggest' ); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( isset( $_GET['update'] ) ) { + $messages = array(); + if ( is_multisite() ) { + $edit_link = ''; + if ( ( isset( $_GET['user_id'] ) ) ) { + $user_id_new = absint( $_GET['user_id'] ); + if ( $user_id_new ) { + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) ); + } + } + + switch ( $_GET['update'] ) { + case 'newuserconfirmation': + $messages[] = __( 'Invitation email sent to new user. A confirmation link must be clicked before their account is created.' ); + break; + case 'add': + $messages[] = __( 'Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.' ); + break; + case 'addnoconfirmation': + if ( empty( $edit_link ) ) { + $messages[] = __( 'User has been added to your site.' ); + } else { + /* translators: %s: edit page url */ + $messages[] = sprintf( __( 'User has been added to your site. Edit user' ), $edit_link ); + } + break; + case 'addexisting': + $messages[] = __( 'That user is already a member of this site.' ); + break; + case 'could_not_add': + $add_user_errors = new WP_Error( 'could_not_add', __( 'That user could not be added to this site.' ) ); + break; + case 'created_could_not_add': + $add_user_errors = new WP_Error( 'created_could_not_add', __( 'User has been created, but could not be added to this site.' ) ); + break; + case 'does_not_exist': + $add_user_errors = new WP_Error( 'does_not_exist', __( 'The requested user does not exist.' ) ); + break; + case 'enter_email': + $add_user_errors = new WP_Error( 'enter_email', __( 'Please enter a valid email address.' ) ); + break; + } + } else { + if ( 'add' == $_GET['update'] ) { + $messages[] = __( 'User added.' ); + } + } +} +?> +
      +

      + +

      + + +
      +
        + get_error_messages() as $err ) { + echo "
      • $err
      • \n"; + } + ?> +
      +
      +

      ' . $msg . '

      '; + } +} +?> + + +
      + get_error_messages() as $message ) { + echo "

      $message

      "; + } + ?> +
      + +
      + +' . __( 'Add Existing User' ) . ''; + } + if ( ! current_user_can( 'manage_network_users' ) ) { + echo '

      ' . __( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '

      '; + $label = __( 'Email' ); + $type = 'email'; + } else { + echo '

      ' . __( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '

      '; + $label = __( 'Email or Username' ); + $type = 'text'; + } + ?> +
      +> + + + + + + + + + + + + + + + + + + + + + 'addusersub' ) ); ?> +
      + ' . __( 'Add New User' ) . ''; + } + ?> +

      +
      +> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 'createusersub' ) ); ?> + +
      + + +domain != $current_site->domain ) || ( $current_blog->path != $current_site->path ) ); +/** + * Filters whether to redirect the request to the User Admin in Multisite. + * + * @since 3.2.0 + * + * @param bool $redirect_user_admin_request Whether the request should be redirected. + */ +$redirect_user_admin_request = apply_filters( 'redirect_user_admin_request', $redirect_user_admin_request ); +if ( $redirect_user_admin_request ) { + wp_redirect( user_admin_url() ); + exit; +} +unset( $redirect_user_admin_request ); diff --git a/wp-admin/user/credits.php b/wp-admin/user/credits.php new file mode 100644 index 000000000..2b4021acb --- /dev/null +++ b/wp-admin/user/credits.php @@ -0,0 +1,13 @@ +' . __( 'You need a higher level of permission.' ) . '' . + '

      ' . __( 'Sorry, you are not allowed to list users.' ) . '

      ', + 403 + ); +} + +$wp_list_table = _get_list_table( 'WP_Users_List_Table' ); +$pagenum = $wp_list_table->get_pagenum(); +$title = __( 'Users' ); +$parent_file = 'users.php'; + +add_screen_option( 'per_page' ); + +// contextual help - choose Help on the top right of admin panel to preview this. +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => '

      ' . __( 'This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.' ) . '

      ' . + '

      ' . __( 'To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section.' ) . '

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

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

      ' . + '
        ' . + '
      • ' . __( 'You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.' ) . '
      • ' . + '
      • ' . __( 'You can filter the list of users by User Role using the text links above the users list to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.' ) . '
      • ' . + '
      • ' . __( 'You can view all posts made by a user by clicking on the number under the Posts column.' ) . '
      • ' . + '
      ', + ) +); + +$help = '

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

      ' . + '
        ' . + '
      • ' . __( 'Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.' ) . '
      • '; + +if ( is_multisite() ) { + $help .= '
      • ' . __( 'Remove allows you to remove a user from your site. It does not delete their content. You can also remove multiple users at once by using Bulk Actions.' ) . '
      • '; +} else { + $help .= '
      • ' . __( 'Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their content. You can also delete multiple users at once by using Bulk Actions.' ) . '
      • '; +} + +$help .= '
      '; + +get_current_screen()->add_help_tab( + array( + 'id' => 'action-links', + 'title' => __( 'Available Actions' ), + 'content' => $help, + ) +); +unset( $help ); + +get_current_screen()->set_help_sidebar( + '

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

      ' . + '

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

      ' . + '

      ' . __( 'Descriptions of Roles and Capabilities' ) . '

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +get_current_screen()->set_screen_reader_content( + array( + 'heading_views' => __( 'Filter users list' ), + 'heading_pagination' => __( 'Users list navigation' ), + 'heading_list' => __( 'Users list' ), + ) +); + +if ( empty( $_REQUEST ) ) { + $referer = ''; +} elseif ( isset( $_REQUEST['wp_http_referer'] ) ) { + $redirect = remove_query_arg( array( 'wp_http_referer', 'updated', 'delete_count' ), wp_unslash( $_REQUEST['wp_http_referer'] ) ); + $referer = ''; +} else { + $redirect = 'users.php'; + $referer = ''; +} + +$update = ''; + +switch ( $wp_list_table->current_action() ) { + + /* Bulk Dropdown menu Role changes */ + case 'promote': + check_admin_referer( 'bulk-users' ); + + if ( ! current_user_can( 'promote_users' ) ) { + wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); + } + + if ( empty( $_REQUEST['users'] ) ) { + wp_redirect( $redirect ); + exit(); + } + + $editable_roles = get_editable_roles(); + $role = false; + if ( ! empty( $_REQUEST['new_role2'] ) ) { + $role = $_REQUEST['new_role2']; + } elseif ( ! empty( $_REQUEST['new_role'] ) ) { + $role = $_REQUEST['new_role']; + } + + if ( ! $role || empty( $editable_roles[ $role ] ) ) { + wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 ); + } + + $userids = $_REQUEST['users']; + $update = 'promote'; + foreach ( $userids as $id ) { + $id = (int) $id; + + if ( ! current_user_can( 'promote_user', $id ) ) { + wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); + } + // The new role of the current user must also have the promote_users cap or be a multisite super admin + if ( $id == $current_user->ID && ! $wp_roles->role_objects[ $role ]->has_cap( 'promote_users' ) + && ! ( is_multisite() && current_user_can( 'manage_network_users' ) ) ) { + $update = 'err_admin_role'; + continue; + } + + // If the user doesn't already belong to the blog, bail. + if ( is_multisite() && ! is_user_member_of_blog( $id ) ) { + wp_die( + '

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

      ' . + '

      ' . __( 'One of the selected users is not a member of this site.' ) . '

      ', + 403 + ); + } + + $user = get_userdata( $id ); + $user->set_role( $role ); + } + + wp_redirect( add_query_arg( 'update', $update, $redirect ) ); + exit(); + + case 'dodelete': + if ( is_multisite() ) { + wp_die( __( 'User deletion is not allowed from this screen.' ), 400 ); + } + + check_admin_referer( 'delete-users' ); + + if ( empty( $_REQUEST['users'] ) ) { + wp_redirect( $redirect ); + exit(); + } + + $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + + if ( empty( $_REQUEST['delete_option'] ) ) { + $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) . '&error=true' ); + $url = str_replace( '&', '&', wp_nonce_url( $url, 'bulk-users' ) ); + wp_redirect( $url ); + exit; + } + + if ( ! current_user_can( 'delete_users' ) ) { + wp_die( __( 'Sorry, you are not allowed to delete users.' ), 403 ); + } + + $update = 'del'; + $delete_count = 0; + + foreach ( $userids as $id ) { + if ( ! current_user_can( 'delete_user', $id ) ) { + wp_die( __( 'Sorry, you are not allowed to delete that user.' ), 403 ); + } + + if ( $id == $current_user->ID ) { + $update = 'err_admin_del'; + continue; + } + switch ( $_REQUEST['delete_option'] ) { + case 'delete': + wp_delete_user( $id ); + break; + case 'reassign': + wp_delete_user( $id, $_REQUEST['reassign_user'] ); + break; + } + ++$delete_count; + } + + $redirect = add_query_arg( + array( + 'delete_count' => $delete_count, + 'update' => $update, + ), + $redirect + ); + wp_redirect( $redirect ); + exit(); + + case 'delete': + if ( is_multisite() ) { + wp_die( __( 'User deletion is not allowed from this screen.' ), 400 ); + } + + check_admin_referer( 'bulk-users' ); + + if ( empty( $_REQUEST['users'] ) && empty( $_REQUEST['user'] ) ) { + wp_redirect( $redirect ); + exit(); + } + + if ( ! current_user_can( 'delete_users' ) ) { + $errors = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to delete users.' ) ); + } + + if ( empty( $_REQUEST['users'] ) ) { + $userids = array( intval( $_REQUEST['user'] ) ); + } else { + $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + } + + /** + * Filters whether the users being deleted have additional content + * associated with them outside of the `post_author` and `link_owner` relationships. + * + * @since 5.2.0 + * + * @param boolean $users_have_additional_content Whether the users have additional content. Default false. + * @param int[] $userids Array of IDs for users being deleted. + */ + $users_have_content = (bool) apply_filters( 'users_have_additional_content', false, $userids ); + + if ( ! $users_have_content ) { + if ( $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE post_author IN( " . implode( ',', $userids ) . ' ) LIMIT 1' ) ) { + $users_have_content = true; + } elseif ( $wpdb->get_var( "SELECT link_id FROM {$wpdb->links} WHERE link_owner IN( " . implode( ',', $userids ) . ' ) LIMIT 1' ) ) { + $users_have_content = true; + } + } + + if ( $users_have_content ) { + add_action( 'admin_head', 'delete_users_add_js' ); + } + + include( ABSPATH . 'wp-admin/admin-header.php' ); + ?> +
      + + + +
      +

      + +
      +

      +
      + + + +

      + +

      + + +
        + ID ) { + /* translators: 1: user id, 2: user login */ + echo '
      • ' . sprintf( __( 'ID #%1$s: %2$s The current user will not be deleted.' ), $id, $user->user_login ) . "
      • \n"; + } else { + /* translators: 1: user id, 2: user login */ + echo '
      • ' . sprintf( __( 'ID #%1$s: %2$s' ), $id, $user->user_login ) . "
      • \n"; + $go_delete++; + } + } + ?> +
      + + + + +

      + +

      + +
        +
      • +
      • + ' . __( 'Attribute all content to:' ) . ' '; + wp_dropdown_users( + array( + 'name' => 'reassign_user', + 'exclude' => array_diff( $userids, array( $current_user->ID ) ), + 'show' => 'display_name_with_login', + ) + ); + ?> +
      • +
      + + + + +

      + +
      +
      + $update ), $redirect ); + wp_redirect( $redirect ); + exit; + + case 'remove': + check_admin_referer( 'bulk-users' ); + + if ( ! is_multisite() ) { + wp_die( __( 'You can’t remove users.' ), 400 ); + } + + if ( empty( $_REQUEST['users'] ) && empty( $_REQUEST['user'] ) ) { + wp_redirect( $redirect ); + exit(); + } + + if ( ! current_user_can( 'remove_users' ) ) { + $error = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to remove users.' ) ); + } + + if ( empty( $_REQUEST['users'] ) ) { + $userids = array( intval( $_REQUEST['user'] ) ); + } else { + $userids = $_REQUEST['users']; + } + + include( ABSPATH . 'wp-admin/admin-header.php' ); + ?> +
      + + + +
      +

      + + +

      + +

      + + +
        + ' . sprintf( __( 'ID #%1$s: %2$s Sorry, you are not allowed to remove this user.' ), $id, $user->user_login ) . "\n"; + } else { + /* translators: 1: user id, 2: user login */ + echo "
      • " . sprintf( __( 'ID #%1$s: %2$s' ), $id, $user->user_login ) . "
      • \n"; + $go_remove = true; + } + } + ?> +
      + + + + +

      + +
      +
      + current_action() && ! empty( $_REQUEST['users'] ) ) { + $userids = $_REQUEST['users']; + $sendback = wp_get_referer(); + + /** This action is documented in wp-admin/edit-comments.php */ + $sendback = apply_filters( 'handle_bulk_actions-' . get_current_screen()->id, $sendback, $wp_list_table->current_action(), $userids ); + + wp_safe_redirect( $sendback ); + 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; + } + + include( ABSPATH . 'wp-admin/admin-header.php' ); + + $messages = array(); + if ( isset( $_GET['update'] ) ) : + switch ( $_GET['update'] ) { + case 'del': + case 'del_many': + $delete_count = isset( $_GET['delete_count'] ) ? (int) $_GET['delete_count'] : 0; + if ( 1 == $delete_count ) { + $message = __( 'User deleted.' ); + } else { + $message = _n( '%s user deleted.', '%s users deleted.', $delete_count ); + } + $messages[] = '

      ' . sprintf( $message, number_format_i18n( $delete_count ) ) . '

      '; + break; + case 'add': + if ( isset( $_GET['id'] ) && ( $user_id = $_GET['id'] ) && current_user_can( 'edit_user', $user_id ) ) { + /* translators: %s: edit page url */ + $messages[] = '

      ' . sprintf( + __( 'New user created. Edit user' ), + esc_url( + add_query_arg( + 'wp_http_referer', + urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), + self_admin_url( 'user-edit.php?user_id=' . $user_id ) + ) + ) + ) . '

      '; + } else { + $messages[] = '

      ' . __( 'New user created.' ) . '

      '; + } + break; + case 'promote': + $messages[] = '

      ' . __( 'Changed roles.' ) . '

      '; + break; + case 'err_admin_role': + $messages[] = '

      ' . __( 'The current user’s role must have user editing capabilities.' ) . '

      '; + $messages[] = '

      ' . __( 'Other user roles have been changed.' ) . '

      '; + break; + case 'err_admin_del': + $messages[] = '

      ' . __( 'You can’t delete the current user.' ) . '

      '; + $messages[] = '

      ' . __( 'Other users have been deleted.' ) . '

      '; + break; + case 'remove': + $messages[] = '

      ' . __( 'User removed from this site.' ) . '

      '; + break; + case 'err_admin_remove': + $messages[] = '

      ' . __( "You can't remove the current user." ) . '

      '; + $messages[] = '

      ' . __( 'Other users have been removed.' ) . '

      '; + break; + } + endif; + ?> + + +
      +
        + get_error_messages() as $err ) { + echo "
      • $err
      • \n"; + } + ?> +
      +
      + + +
      +

      + +

      + + + + + + ' . __( 'Search results for “%s”' ) . '', esc_html( $usersearch ) ); +} +?> + +
      + + views(); ?> + +
      + + search_box( __( 'Search Users' ), 'user' ); ?> + + + + + + display(); ?> +
      + +
      +
      + ' . __( 'You need a higher level of permission.' ) . '' . + '

      ' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '

      ', + 403 + ); +} + +$widgets_access = get_user_setting( 'widgets_access' ); +if ( isset( $_GET['widgets-access'] ) ) { + check_admin_referer( 'widgets-access' ); + + $widgets_access = 'on' == $_GET['widgets-access'] ? 'on' : 'off'; + set_user_setting( 'widgets_access', $widgets_access ); +} + +if ( 'on' == $widgets_access ) { + add_filter( 'admin_body_class', 'wp_widgets_access_body_class' ); +} else { + wp_enqueue_script( 'admin-widgets' ); + + if ( wp_is_mobile() ) { + wp_enqueue_script( 'jquery-touch-punch' ); + } +} + +/** + * Fires early before the Widgets administration screen loads, + * after scripts are enqueued. + * + * @since 2.2.0 + */ +do_action( 'sidebar_admin_setup' ); + +$title = __( 'Widgets' ); +$parent_file = 'themes.php'; + +get_current_screen()->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => + '

      ' . __( 'Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them.' ) . '

      +

      ' . __( 'The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget.' ) . '

      ', + ) +); +get_current_screen()->add_help_tab( + array( + 'id' => 'removing-reusing', + 'title' => __( 'Removing and Reusing' ), + 'content' => + '

      ' . __( 'If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas.' ) . '

      +

      ' . __( 'Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required.' ) . '

      +

      ' . __( 'Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop.' ) . '

      ', + ) +); +get_current_screen()->add_help_tab( + array( + 'id' => 'missing-widgets', + 'title' => __( 'Missing Widgets' ), + 'content' => + '

      ' . __( 'Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area.' ) . '

      ' . + '

      ' . __( 'When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved.' ) . '

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

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

      ' . + '

      ' . __( 'Documentation on Widgets' ) . '

      ' . + '

      ' . __( 'Support' ) . '

      ' +); + +if ( ! current_theme_supports( 'widgets' ) ) { + wp_die( __( 'The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please follow these instructions.' ) ); +} + +// These are the widgets grouped by sidebar +$sidebars_widgets = wp_get_sidebars_widgets(); + +if ( empty( $sidebars_widgets ) ) { + $sidebars_widgets = wp_get_widget_defaults(); +} + +foreach ( $sidebars_widgets as $sidebar_id => $widgets ) { + if ( 'wp_inactive_widgets' == $sidebar_id ) { + continue; + } + + if ( ! is_registered_sidebar( $sidebar_id ) ) { + if ( ! empty( $widgets ) ) { // register the inactive_widgets area as sidebar + register_sidebar( + array( + 'name' => __( 'Inactive Sidebar (not used)' ), + 'id' => $sidebar_id, + 'class' => 'inactive-sidebar orphan-sidebar', + 'description' => __( 'This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar.' ), + 'before_widget' => '', + 'after_widget' => '', + 'before_title' => '', + 'after_title' => '', + ) + ); + } else { + unset( $sidebars_widgets[ $sidebar_id ] ); + } + } +} + +// register the inactive_widgets area as sidebar +register_sidebar( + array( + 'name' => __( 'Inactive Widgets' ), + 'id' => 'wp_inactive_widgets', + 'class' => 'inactive-sidebar', + 'description' => __( 'Drag widgets here to remove them from the sidebar but keep their settings.' ), + 'before_widget' => '', + 'after_widget' => '', + 'before_title' => '', + 'after_title' => '', + ) +); + +retrieve_widgets(); + +// We're saving a widget without js +if ( isset( $_POST['savewidget'] ) || isset( $_POST['removewidget'] ) ) { + $widget_id = $_POST['widget-id']; + check_admin_referer( "save-delete-widget-$widget_id" ); + + $number = isset( $_POST['multi_number'] ) ? (int) $_POST['multi_number'] : ''; + if ( $number ) { + foreach ( $_POST as $key => $val ) { + if ( is_array( $val ) && preg_match( '/__i__|%i%/', key( $val ) ) ) { + $_POST[ $key ] = array( $number => array_shift( $val ) ); + break; + } + } + } + + $sidebar_id = $_POST['sidebar']; + $position = isset( $_POST[ $sidebar_id . '_position' ] ) ? (int) $_POST[ $sidebar_id . '_position' ] - 1 : 0; + + $id_base = $_POST['id_base']; + $sidebar = isset( $sidebars_widgets[ $sidebar_id ] ) ? $sidebars_widgets[ $sidebar_id ] : array(); + + // Delete. + if ( isset( $_POST['removewidget'] ) && $_POST['removewidget'] ) { + + if ( ! in_array( $widget_id, $sidebar, true ) ) { + wp_redirect( admin_url( 'widgets.php?error=0' ) ); + exit; + } + + $sidebar = array_diff( $sidebar, array( $widget_id ) ); + $_POST = array( + 'sidebar' => $sidebar_id, + 'widget-' . $id_base => array(), + 'the-widget-id' => $widget_id, + 'delete_widget' => '1', + ); + + /** + * Fires immediately after a widget has been marked for deletion. + * + * @since 4.4.0 + * + * @param string $widget_id ID of the widget marked for deletion. + * @param string $sidebar_id ID of the sidebar the widget was deleted from. + * @param string $id_base ID base for the widget. + */ + do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base ); + } + + $_POST['widget-id'] = $sidebar; + + foreach ( (array) $wp_registered_widget_updates as $name => $control ) { + if ( $name != $id_base || ! is_callable( $control['callback'] ) ) { + continue; + } + + ob_start(); + call_user_func_array( $control['callback'], $control['params'] ); + ob_end_clean(); + + break; + } + + $sidebars_widgets[ $sidebar_id ] = $sidebar; + + // Remove old position. + if ( ! isset( $_POST['delete_widget'] ) ) { + foreach ( $sidebars_widgets as $key => $sb ) { + if ( is_array( $sb ) ) { + $sidebars_widgets[ $key ] = array_diff( $sb, array( $widget_id ) ); + } + } + array_splice( $sidebars_widgets[ $sidebar_id ], $position, 0, $widget_id ); + } + + wp_set_sidebars_widgets( $sidebars_widgets ); + wp_redirect( admin_url( 'widgets.php?message=0' ) ); + exit; +} + +// Remove inactive widgets without js +if ( isset( $_POST['removeinactivewidgets'] ) ) { + check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); + + if ( $_POST['removeinactivewidgets'] ) { + 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_redirect( admin_url( 'widgets.php?message=0' ) ); + exit; +} + +// Output the widget form without js +if ( isset( $_GET['editwidget'] ) && $_GET['editwidget'] ) { + $widget_id = $_GET['editwidget']; + + if ( isset( $_GET['addnew'] ) ) { + // Default to the first sidebar + $keys = array_keys( $wp_registered_sidebars ); + $sidebar = reset( $keys ); + + if ( isset( $_GET['base'] ) && isset( $_GET['num'] ) ) { // multi-widget + // Copy minimal info from an existing instance of this widget to a new instance + foreach ( $wp_registered_widget_controls as $control ) { + if ( $_GET['base'] === $control['id_base'] ) { + $control_callback = $control['callback']; + $multi_number = (int) $_GET['num']; + $control['params'][0]['number'] = -1; + $widget_id = $control['id'] = $control['id_base'] . '-' . $multi_number; + $wp_registered_widget_controls[ $control['id'] ] = $control; + break; + } + } + } + } + + if ( isset( $wp_registered_widget_controls[ $widget_id ] ) && ! isset( $control ) ) { + $control = $wp_registered_widget_controls[ $widget_id ]; + $control_callback = $control['callback']; + } elseif ( ! isset( $wp_registered_widget_controls[ $widget_id ] ) && isset( $wp_registered_widgets[ $widget_id ] ) ) { + $name = esc_html( strip_tags( $wp_registered_widgets[ $widget_id ]['name'] ) ); + } + + if ( ! isset( $name ) ) { + $name = esc_html( strip_tags( $control['name'] ) ); + } + + if ( ! isset( $sidebar ) ) { + $sidebar = isset( $_GET['sidebar'] ) ? $_GET['sidebar'] : 'wp_inactive_widgets'; + } + + if ( ! isset( $multi_number ) ) { + $multi_number = isset( $control['params'][0]['number'] ) ? $control['params'][0]['number'] : ''; + } + + $id_base = isset( $control['id_base'] ) ? $control['id_base'] : $control['id']; + + // Show the widget form. + $width = ' style="width:' . max( $control['width'], 350 ) . 'px"'; + $key = isset( $_GET['key'] ) ? (int) $_GET['key'] : 0; + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?> +
      +

      +
      > +

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

      \n"; + } + ?> +
      + +

      +
      + + $sbvalue ) { + echo "\t\t\n"; + } + ?> +
      "; + if ( 'wp_inactive_widgets' == $sbname || 'orphaned_widgets' == substr( $sbname, 0, 16 ) ) { + echo ' '; + } else { + if ( ! isset( $sidebars_widgets[ $sbname ] ) || ! is_array( $sidebars_widgets[ $sbname ] ) ) { + $j = 1; + $sidebars_widgets[ $sbname ] = array(); + } else { + $j = count( $sidebars_widgets[ $sbname ] ); + if ( isset( $_GET['addnew'] ) || ! in_array( $widget_id, $sidebars_widgets[ $sbname ], true ) ) { + $j++; + } + } + $selected = ''; + echo "\t\t\n"; + } + echo "
      +
      + +
      + + + + + + + +
      +
      +
      +
      +
      + + +
      +

      + +

      + +%2$s', + esc_url( + add_query_arg( + array( + array( 'autofocus' => array( 'panel' => 'widgets' ) ), + 'return' => urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), + ), + admin_url( 'customize.php' ) + ) + ), + __( 'Manage with Live Preview' ) + ); +} + +$nonce = wp_create_nonce( 'widgets-access' ); +?> + + +
      + + +

      + + +

      + + + + +
      +
      +
      + +
      + +
      + +
      +
      +
      +
      +
      + + $registered_sidebar ) { + if ( false !== strpos( $registered_sidebar['class'], 'inactive-sidebar' ) || 'orphaned_widgets' == substr( $sidebar, 0, 16 ) ) { + $wrap_class = 'widgets-holder-wrap'; + if ( ! empty( $registered_sidebar['class'] ) ) { + $wrap_class .= ' ' . $registered_sidebar['class']; + } + + $is_inactive_widgets = 'wp_inactive_widgets' == $registered_sidebar['id']; + ?> +
      +
      + + + +
      +
      +

      + 'inactive-widgets-control-remove' ); + + if ( empty( $sidebars_widgets['wp_inactive_widgets'] ) ) { + $attributes['disabled'] = ''; + } + + submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes ); + ?> + +

      + +
      +
      + +
      + +

      + +
      + +
      +
      + 1 ) { + $split = ceil( $sidebars_count / 2 ); +} else { + $single_sidebar_class = ' single-sidebar'; +} + +?> +
      +
      + +
      +
      +
      + +
      +
      +
      + +
      +
        +
        + + +
        +
        + +get_error_data() ); + if ( ! empty( $data ) ) { + wp_die( + '

        ' . $comment->get_error_message() . '

        ', + __( 'Comment Submission Failure' ), + array( + 'response' => $data, + 'back_link' => true, + ) + ); + } else { + exit; + } +} + +$user = wp_get_current_user(); +$cookies_consent = ( isset( $_POST['wp-comment-cookies-consent'] ) ); + +/** + * Perform other actions when comment cookies are set. + * + * @since 3.4.0 + * @since 4.9.6 The `$cookies_consent` parameter was added. + * + * @param WP_Comment $comment Comment object. + * @param WP_User $user Comment author's user object. The user may not exist. + * @param boolean $cookies_consent Comment author's consent to store cookies. + */ +do_action( 'set_comment_cookies', $comment, $user, $cookies_consent ); + +$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID; + +// Add specific query arguments to display the awaiting moderation message. +if ( 'unapproved' === wp_get_comment_status( $comment ) && ! empty( $comment->comment_author_email ) ) { + $location = add_query_arg( + array( + 'unapproved' => $comment->comment_ID, + 'moderation-hash' => wp_hash( $comment->comment_date_gmt ), + ), + $location + ); +} + +/** + * Filters the location URI to send the commenter after posting. + * + * @since 2.0.5 + * + * @param string $location The 'redirect_to' URI sent via $_POST. + * @param WP_Comment $comment Comment object. + */ +$location = apply_filters( 'comment_post_redirect', $location, $comment ); + +wp_safe_redirect( $location ); +exit; diff --git a/wp-config-sample.php b/wp-config-sample.php new file mode 100644 index 000000000..d333999fd --- /dev/null +++ b/wp-config-sample.php @@ -0,0 +1,89 @@ +F ,|Q^GsBs3f?jr>$KS|7d~ '); +define('LOGGED_IN_KEY', 'X9ifF<| j*8.o0(0!3N~W{6Ss_q_3@3B$*3KwK2 }Y?cP[ x<)2@6&v`F|`NS}^1'); +define('NONCE_KEY', 'QtA2,uvzL)j ktdCLw9`VR45Y?h!s1sb>b0Eoy*RnyMPSy0OD6GaMZ#D[10m&nmT'); +define('AUTH_SALT', '}zB@Ix)D14D5Xs=ToHEdc!T/4_k~3f+s@W.:XkTBV%Gvae7Y[A}mluCT8NTIgf[k'); +define('SECURE_AUTH_SALT', 'Tmco[AfN9Q?`U:fXYPk0*J!v-:q)Vof~h_Wj]P}Yju^IehayD|ljl%H.&F%D3;V`'); +define('LOGGED_IN_SALT', '_6HB=EV7@{>!g02Documentation on Network Settings" +msgstr "Dokumentation för nätverksinställningar" + +#: wp-admin/network/settings.php:57 +msgid "Super admins can no longer be added on the Options screen. You must now go to the list of existing users on Network Admin > Users and click on Username or the Edit action link below that name. This goes to an Edit User page where you can check a box to grant super admin privileges." +msgstr "Superadministratörer kan inte längre läggas till på inställningssidan. Du måste nu gå till listan över befintliga användare i nätverket Admin > Användare och klicka på Användarnamn eller Redigera-länken för den användaren. Detta tar dig till sidan för att redigera användaren där du kan markera rutan för att bevilja superadmin-privilegier." + +#: wp-admin/network/settings.php:56 +msgid "Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins." +msgstr "Menyinställning aktiverar/inaktiverar tilläggsmenyerna att visas för icke superadministratörer, så att endast superadministratörer, inte webbplatsadministratörer, har tillgång till att aktivera tillägg." + +#: wp-admin/network/settings.php:54 +msgid "Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only)." +msgstr "Inställningar för uppladdningar styr storleken på uppladdade filer och tillgänglig mängd utrymme för varje webbplats. Du kan ändra standardvärdet för specifika webbplatser när du redigerar en viss webbplats. Tillåtna filtyper är också listade (separerade endast med mellanslag)." + +#: wp-admin/network/settings.php:53 +msgid "New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what᾿s put in the first post, page, comment, comment author, and comment URL." +msgstr "Inställningar för nya webbplatser är standardinställningar som tillämpas när en ny webbplats skapas i nätverket. Dessa omfattar välkomstmeddelande för när en ny webbplats eller ett nytt användarkonto registreras, vad som ska anges som första inlägg, sida, kommentar, kommentarsförfattare och kommentars-URL." + +#: wp-admin/network/settings.php:52 +msgid "Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network." +msgstr "Under registreringsinställningar kan publika registreringar aktiveras/inaktiveras. Om du tillåter medlemsregistreringar, installera spamskydd (tillägg). Mellanslag, inte kommatecken används för att separera förbjudna namn på webbplatser för nätverket." + +#: wp-admin/network/settings.php:51 +msgid "Operational settings has fields for the network’s name and admin email." +msgstr "Driftsinställningarna har fält för nätverkets namn och administrativ e-postadress." + +#: wp-admin/network/settings.php:50 +msgid "This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site’s options." +msgstr "Den här sidan används för att konfigurera och ändra inställningar för nätverket som helhet. Den första webbplatsen är den primära webbplatsen i nätverket och nätverksinställningarna hämtas från den ursprungliga webbplatsens inställningar." + +#: wp-admin/network/settings.php:20 wp-admin/network/menu.php:67 +msgid "Network Settings" +msgstr "Nätverksinställningar" + +#: wp-admin/network/site-themes.php:210 +msgid "Network enabled themes are not shown on this screen." +msgstr "Teman aktiverade för nätverket visas inte på sidan." + +#: wp-admin/network/site-themes.php:24 +msgid "Site themes list" +msgstr "Webbplatstemalista" + +#: wp-admin/network/site-themes.php:23 +msgid "Site themes list navigation" +msgstr "Navigation för webbplatstemalista" + +#: wp-admin/network/site-themes.php:22 +msgid "Filter site themes list" +msgstr "Filtrera lista med webbplatsteman" + +#: wp-admin/network/site-themes.php:14 +msgid "Sorry, you are not allowed to manage themes for this site." +msgstr "Du saknar behörighet för att hantera teman för den här webbplatsen." + +#: wp-admin/network/site-new.php:296 +msgid "Add Site" +msgstr "Lägg till webbplats" + +#: wp-admin/network/site-new.php:284 +msgid "The username and a link to set the password will be mailed to this email address." +msgstr "Användarnamnet och en länk för att ange lösenord kommer att skickas till denna e-postadress." + +#: wp-admin/network/site-new.php:284 +msgid "A new user will be created if the above email address is not in the database." +msgstr "En ny användare kommer att skapas om ovan angiven e-postadress inte redan finns i databasen." + +#: wp-admin/network/site-new.php:280 +msgid "Admin Email" +msgstr "E-postadress admin" + +#: wp-admin/network/site-new.php:240 +msgid "Only lowercase letters (a-z), numbers, and hyphens are allowed." +msgstr "Endast små bokstäver (a-z), siffror och bindestreck är tillåtna." + +#: wp-admin/network/site-new.php:198 wp-admin/network/site-new.php:208 +msgid "Add New Site" +msgstr "Lägg till ny webbplats" + +#. translators: 1: dashboard url, 2: network admin edit url +#: wp-admin/network/site-new.php:191 +msgid "Site added. Visit Dashboard or Edit Site" +msgstr "Webbplatsen har lagts till. Besök adminpanel eller Redigera webbplats" + +#: wp-admin/network/site-new.php:166 +msgctxt "email \"From\" field" +msgid "Site Admin" +msgstr "Webbplatsadmin" + +#. translators: 1: user login, 2: site url, 3: site name/title +#: wp-admin/network/site-new.php:154 +msgid "" +"New site created by %1$s\n" +"\n" +"Address: %2$s\n" +"Name: %3$s" +msgstr "" +"Ny webbplats skapad av %1$s\n" +"\n" +"Address: %2$s\n" +"Namn: %3$s" + +#. translators: %s: network name +#: wp-admin/network/site-new.php:149 +msgid "[%s] New Site Created" +msgstr "[%s] Ny webbplats skapad" + +#: wp-admin/network/site-new.php:124 +msgid "There was an error creating the user." +msgstr "Ett fel har uppstått, användaren kunde inte skapas." + +#: wp-admin/network/site-new.php:119 +msgid "The domain or path entered conflicts with an existing username." +msgstr "Domän eller sökväg angiven skapar konflikt med ett existerande användarnamn." + +#: wp-admin/network/site-new.php:89 +msgid "Missing email address." +msgstr "E-postadress saknas." + +#: wp-admin/network/site-new.php:85 +msgid "Missing or invalid site address." +msgstr "Webbplatsadressen saknas eller är felaktig." + +#: wp-admin/network/site-new.php:57 +msgid "The following words are reserved for use by WordPress functions and cannot be used as blog names: %s" +msgstr "Följande namn är reserverade för användning av funktioner i WordPress och kan inte användas som bloggnamn: %s" + +#: wp-admin/network/site-new.php:40 +msgid "Can’t create an empty site." +msgstr "Kan inte skapa en tom webbplats." + +#: wp-admin/network/site-new.php:26 +msgid "If the admin email for the new site does not exist in the database, a new user will also be created." +msgstr "Om administratörens e-postadress för den nya webbplatsen inte finns i databasen så kommer även en ny användare att skapas." + +#: wp-admin/network/site-new.php:25 +msgid "This screen is for Super Admins to add new sites to the network. This is not affected by the registration settings." +msgstr "Den här sidan används av Superadmins för att lägga till nya webbplatser i nätverket. Detta påverkas inte av registreringsinställningarna." + +#: wp-admin/network/site-new.php:17 +msgid "Sorry, you are not allowed to add sites to this network." +msgstr "Du saknar behörighet för att lägga till webbplatser i det här nätverket." + +#: wp-admin/network/users.php:240 +msgid "Users deleted." +msgstr "Användare raderade." + +#: wp-admin/network/users.php:237 +msgid "Users removed from spam." +msgstr "Användare avmarkerade som skräppostare." + +#: wp-admin/network/users.php:234 +msgid "Users marked as spam." +msgstr "Användare markerade för skräppostning." + +#: wp-admin/network/users.php:205 +msgid "You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege." +msgstr "Du kan göra en existerande användare till en extra superadmin genom att gå till sidan för att redigera användare och bocka för rutan som tilldelar denna behörighet." + +#: wp-admin/network/users.php:204 +msgid "The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses." +msgstr "Massåtgärden kommer att permanent radera valda användare, eller markera/avmarkera de som valts som skräppostare. Skräpanvändare kommer att få sina inlägg borttagna och kommer inte att kunna registrera sig med samma e-postadress igen." + +#: wp-admin/network/users.php:203 +msgid "You can sort the table by clicking on any of the table headings and switch between list and excerpt views by using the icons above the users list." +msgstr "Du kan sortera tabellen genom att klicka på någon av rubrikerna i fetstil och växla mellan list- och utdragsvy genom att använda ikonerna ovanför listningen." + +#: wp-admin/network/users.php:202 +msgid "You can also go to the user’s profile page by clicking on the individual username." +msgstr "Du kan också gå till användarens profilsida genom att klicka på det individuella användarnamnet." + +#: wp-admin/network/users.php:201 +msgid "Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site." +msgstr "För muspekaren över en användare i listan för att visa redigeringslänkar. Länken Redigera till vänster tar dig till användarens profil för redigering; länken Redigera till höger om webbplatsnamn tar dig till redigeringssidan för den specifika webbplatsen." + +#: wp-admin/network/users.php:200 +msgid "This table shows all users across the network and the sites to which they are assigned." +msgstr "Denna tabell visar alla användare i nätverket och de webbplatser som de tillhör." + +#: wp-admin/network/users.php:74 +msgid "Warning! User cannot be modified. The user %s is a network administrator." +msgstr "Varning! Användaren kan inte modifieras. Användaren %s är en nätverksadministratör." + +#: wp-admin/network/upgrade.php:138 +msgid "WordPress has been updated! Before we send you on your way, we need to individually upgrade the sites in your network." +msgstr "WordPress har uppdaterats! Innan vi låter dig fortsätta så behöver vi uppdatera webbplatserna i nätverket individuellt." + +#: wp-admin/network/upgrade.php:122 +msgid "Next Sites" +msgstr "Nästkommande webbplatser" + +#: wp-admin/network/upgrade.php:122 +msgid "If your browser doesn’t start loading the next page automatically, click this link:" +msgstr "Om du inte skickas vidare automatiskt, klicka på följande knapp:" + +#. translators: 1: site url, 2: server error message +#: wp-admin/network/upgrade.php:97 +msgid "Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s" +msgstr "Varning! Ett problem uppstod vid uppdatering av %1$s. Din server kanske inte kan anslut mot webbplatser på den. Felmeddelande: %2$s" + +#: wp-admin/network/upgrade.php:73 +msgid "All done!" +msgstr "Allt klart!" + +#: wp-admin/network/upgrade.php:31 +msgid "Documentation on Upgrade Network" +msgstr "Dokumentation för uppgradering av nätverk" + +#: wp-admin/network/upgrade.php:25 +msgid "If this process fails for any reason, users logging in to their sites will force the same update." +msgstr "Om detta misslyckas av någon anledning så kommer användare som loggar in på sina webbplatser att påtvinga samma uppdatering." + +#: wp-admin/network/upgrade.php:24 +msgid "If a version update to core has not happened, clicking this button won’t affect anything." +msgstr "Om ingen uppdatering av WordPress skett så kommer inte denna knapp att påverka någonting." + +#: wp-admin/network/upgrade.php:23 +msgid "Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied." +msgstr "Använd endast denna sida när du uppdaterat till en ny version av WordPress via Uppdateringar/Tillgängliga uppdateringar (via nätverksadministrationens meny eller verktygsfält). Att klicka på knappen Uppdatera nätverk kommer att gå igenom vardera webbplats i nätverket, fem i taget, och kontrollera så att all databasuppdateringar genomförs." + +#: wp-admin/network/upgrade.php:15 wp-admin/network/upgrade.php:42 +#: wp-admin/network/upgrade.php:142 wp-admin/network/menu.php:34 +msgid "Upgrade Network" +msgstr "Uppdatera nätverk" + +#: wp-admin/network/themes.php:312 +msgid "You cannot delete a theme while it is active on the main site." +msgstr "Du kan inte radera ett tema när det är aktivt på den primära webbplatsen." + +#: wp-admin/network/themes.php:310 wp-admin/network/site-themes.php:206 +msgid "No theme selected." +msgstr "Inget tema valt." + +#: wp-admin/network/themes.php:306 +msgid "%s theme deleted." +msgid_plural "%s themes deleted." +msgstr[0] "%s tema raderat." +msgstr[1] "%s teman raderade." + +#: wp-admin/network/themes.php:298 wp-admin/network/site-themes.php:202 +msgid "%s theme disabled." +msgid_plural "%s themes disabled." +msgstr[0] "%s tema inaktiverat." +msgstr[1] "%s teman inaktiverade." + +#: wp-admin/network/themes.php:296 wp-admin/network/site-themes.php:200 +msgid "Theme disabled." +msgstr "Tema inaktiverat." + +#: wp-admin/network/themes.php:290 wp-admin/network/site-themes.php:194 +msgid "%s theme enabled." +msgid_plural "%s themes enabled." +msgstr[0] "%s tema aktiverat." +msgstr[1] "%s teman aktiverade." + +#: wp-admin/network/themes.php:288 wp-admin/network/site-themes.php:192 +msgid "Theme enabled." +msgstr "Tema aktiverat." + +#: wp-admin/network/themes.php:272 wp-admin/network/menu.php:53 +msgctxt "theme" +msgid "Add New" +msgstr "Lägg till nytt" + +#: wp-admin/network/themes.php:253 +msgid "Themes list navigation" +msgstr "Navigation för temalista" + +#: wp-admin/network/themes.php:246 +msgid "Documentation on Network Themes" +msgstr "Dokumentation för nätverksteman" + +#: wp-admin/network/themes.php:240 +msgid "Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes." +msgstr "Teman kan aktiveras per webbplatsbasis av nätverksadmin under redigering av webbplatser, som hittas genom att klicka på länken Redigera på sidan som listar webbplatser. Endast nätverksadministratörer kan installera eller redigera teman." + +#: wp-admin/network/themes.php:239 +msgid "If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site’s Appearance > Themes screen." +msgstr "Om nätverksadministratören inaktiverar ett tema som används så kan det fortfarande användas på webbplatsen. Om ett annat tema väljs så kommer det inaktiverade tema inte att visas i webbplatsens adminpanel under Utseende > Teman." + +#: wp-admin/network/themes.php:238 +msgid "This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using." +msgstr "Den här sidan ger dig möjligheten att aktivera eller inaktivera teman som ska vara tillgängliga under Utseende för alla webbplatser. Detta aktiverar eller inaktiverar inte vilket tema som en webbplats använder för närvarande." + +#: wp-admin/network/themes.php:174 +msgid "No, return me to the theme list" +msgstr "Nej, gå tillbaka till listan över teman" + +#: wp-admin/network/themes.php:166 +msgid "Yes, delete these themes" +msgstr "Ja, radera dessa teman" + +#: wp-admin/network/themes.php:164 +msgid "Yes, delete this theme" +msgstr "Ja, radera detta tema" + +#: wp-admin/network/themes.php:151 +msgid "Are you sure you wish to delete these themes?" +msgstr "Är du säker på att du vill ta bort dessa teman?" + +#: wp-admin/network/themes.php:149 +msgid "Are you sure you wish to delete this theme?" +msgstr "Är du säker på att du vill radera detta tema?" + +#. translators: 1: theme name, 2: theme author +#: wp-admin/network/themes.php:141 +msgctxt "theme" +msgid "%1$s by %2$s" +msgstr "%1$s av %2$s" + +#: wp-admin/network/themes.php:134 +msgid "You are about to remove the following themes:" +msgstr "Du är på väg att ta bort följande teman:" + +#: wp-admin/network/themes.php:133 +msgid "These themes may be active on other sites in the network." +msgstr "Dessa teman kan vara aktiverade på andra webbplatser i nätverket." + +#: wp-admin/network/themes.php:132 +msgid "Delete Themes" +msgstr "Radera teman" + +#: wp-admin/network/themes.php:130 +msgid "You are about to remove the following theme:" +msgstr "Du är på väg att ta bort följande tema:" + +#: wp-admin/network/themes.php:129 +msgid "This theme may be active on other sites in the network." +msgstr "Detta tema kan vara aktivt på andra webbplatser i nätverket." + +#: wp-admin/network/themes.php:128 +msgid "Delete Theme" +msgstr "Radera tema" + +#: wp-admin/network/themes.php:93 +msgid "Sorry, you are not allowed to delete themes for this site." +msgstr "Du saknar behörighet för att radera teman för den här webbplatsen." + +#: wp-admin/network/themes.php:14 +msgid "Sorry, you are not allowed to manage network themes." +msgstr "Du saknar behörighet att hantera teman i nätverket." + +#: wp-admin/network/site-users.php:269 +msgid "Duplicated username or email address." +msgstr "Dubbelt användarnamn eller e-postadress." + +#: wp-admin/network/site-users.php:266 +msgid "Enter the username and email." +msgstr "Ange användarnamn och e-post." + +#: wp-admin/network/site-users.php:263 +msgid "User created." +msgstr "Användare skapad." + +#: wp-admin/network/site-users.php:260 +msgid "Select a user to remove." +msgstr "Välj en användare att ta bort." + +#: wp-admin/network/site-users.php:254 +msgid "Select a user to change role." +msgstr "Välj en användare att ändra roll för." + +#: wp-admin/network/site-users.php:248 +msgid "Enter the username of an existing user." +msgstr "Ange användarnamnet för en befintlig användare." + +#: wp-admin/network/site-users.php:245 +msgid "User could not be added to this site." +msgstr "Kunde inte lägga till användaren till denna webbplats." + +#: wp-admin/network/site-users.php:242 +msgid "User is already a member of this site." +msgstr "Användaren är redan medlem av denna webbplats." + +#: wp-admin/network/site-users.php:27 +msgid "Site users list" +msgstr "Webbplatsanvändarlista" + +#: wp-admin/network/site-users.php:26 +msgid "Site users list navigation" +msgstr "Navigation för webbplatsanvändarlista" + +#: wp-admin/network/site-users.php:25 +msgid "Filter site users list" +msgstr "Filtrera lista med webbplatsanvändare" + +#: wp-admin/network/index.php:55 +msgid "Documentation on the Network Admin" +msgstr "Dokumentation för nätverksadministrationen" + +#: wp-admin/network/index.php:48 +msgid "Quick Tasks" +msgstr "Snabbuppgifter" + +#: wp-admin/network/index.php:43 +msgid "To search for a site, enter the path or domain." +msgstr "För att söka efter en webbplats, ange sökväg eller domän." + +#: wp-admin/network/index.php:42 +msgid "To search for a user, enter an email address or username. Use a wildcard to search for a partial username, such as user*." +msgstr "För att söka efter en användare, ange en e-postadress eller ett användarnamn. Använd jokertecken för att söka efter delar av ett användarnamn, t.ex anv*." + +#: wp-admin/network/index.php:41 +msgid "To search for a user or site, use the search boxes." +msgstr "För att söka efter en användare eller webbplats, använd sökfälten." + +#: wp-admin/network/index.php:40 +msgid "To add a new site, click Create a New Site." +msgstr "För att skapa en ny webbplats, klicka på Skapa en ny webbplats." + +#: wp-admin/network/index.php:39 +msgid "To add a new user, click Create a New User." +msgstr "För att lägga till en ny användare, klicka på Skapa ny användare." + +#: wp-admin/network/index.php:38 +msgid "The Right Now widget on this screen provides current user and site counts on your network." +msgstr "Panelen Just nu på denna sida visar antalet användare och webbplatser i ditt nätverk." + +#: wp-admin/network/index.php:28 +msgid "Modify global network settings" +msgstr "Ändra globala nätverksinställningar" + +#: wp-admin/network/index.php:27 +msgid "Update your network" +msgstr "Uppdatera ditt nätverk" + +#: wp-admin/network/index.php:26 +msgid "Install and activate themes or plugins" +msgstr "Installera och aktivera teman eller tillägg" + +#: wp-admin/network/index.php:25 +msgid "Add and manage sites or users" +msgstr "Skapa och hantera webbplatser eller användare" + +#: wp-admin/network/index.php:24 +msgid "From here you can:" +msgstr "Här kan du:" + +#: wp-admin/network/index.php:23 +msgid "Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network." +msgstr "Välkommen till din nätverksadministration. Denna del av administrationen används för att hantera alla aspekter av ditt webbplatsnätverk." + +#: wp-admin/network/user-new.php:145 wp-admin/network/site-users.php:320 +msgid "Add User" +msgstr "Lägg till användare" + +#: wp-admin/network/user-new.php:133 wp-admin/network/site-users.php:357 +msgid "A password reset link will be sent to the user via email." +msgstr "En länk för att återställa lösenordet kommer att skickas till användaren via e-post." + +#. translators: %s: edit page url +#: wp-admin/network/user-new.php:93 +msgid "User added. Edit user" +msgstr "Användare tillagd. Redigera användare" + +#: wp-admin/network/user-new.php:54 +msgid "Cannot add user." +msgstr "Kan inte lägga till användare." + +#: wp-admin/network/user-new.php:41 +msgid "Cannot create an empty user." +msgstr "Kan inte skapa en tom användare." + +#: wp-admin/network/user-new.php:29 wp-admin/network/users.php:211 +msgid "Documentation on Network Users" +msgstr "Dokumentation för hantering av nätverksanvändare" + +#: wp-admin/network/user-new.php:23 +msgid "Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them." +msgstr "Användare som har registrerat sig i nätverket utan en webbplats läggs till som prenumeranter på den ursprungliga eller primära adminsidan för att ge dem profilsidor att hantera sina konton via. Dessa användare kommer bara att se startsidan av adminpanelen och Mina webbplatser i huvudnavigeringen tills dess att de skapat en webbplats." + +#: wp-admin/network/user-new.php:22 +msgid "Add User will set up a new user account on the network and send that person an email with username and password." +msgstr "Lägg till användare kommer att skapa ett nytt användarkonto i nätverket och skicka dem ett mail med deras användarnamn och lösenord." + +#: wp-admin/network/site-info.php:195 +msgid "Set site attributes" +msgstr "Ange webbplatsattribut" + +#: wp-admin/network/site-info.php:192 +msgid "Attributes" +msgstr "Attribut" + +#. translators: %s: site name +#: wp-admin/network/site-info.php:125 wp-admin/network/site-users.php:201 +#: wp-admin/network/site-themes.php:170 wp-admin/network/site-settings.php:83 +msgid "Edit Site: %s" +msgstr "Redigera webbplats: %s" + +#: wp-admin/network/site-info.php:120 +msgid "Site info updated." +msgstr "Webbplatsinformation uppdaterad." + +#: wp-admin/network/site-info.php:28 wp-admin/network/site-users.php:46 +#: wp-admin/network/site-themes.php:53 wp-admin/network/site-settings.php:28 +msgid "The requested site does not exist." +msgstr "Den efterfrågade webbplatsen finns inte." + +#: wp-admin/network/site-info.php:23 wp-admin/network/site-users.php:41 +#: wp-admin/network/site-themes.php:46 wp-admin/network/site-settings.php:23 +msgid "Invalid site ID." +msgstr "Ogiltig webbplats-ID." + +#: wp-admin/network/site-info.php:14 wp-admin/network/site-users.php:14 +#: wp-admin/network/site-settings.php:14 +msgid "Sorry, you are not allowed to edit this site." +msgstr "Du saknar behörighet för att redigera den här webbplatsen." + +#: wp-admin/includes/class-wp-ms-users-list-table.php:171 +msgctxt "user" +msgid "Registered" +msgstr "Registrerad" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:142 +msgid "Super Admin (%s)" +msgid_plural "Super Admins (%s)" +msgstr[0] "Superadmin (%s)" +msgstr[1] "Superadmins (%s)" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:116 +msgctxt "user" +msgid "Not Spam" +msgstr "Ta bort markering som skräppostare" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:115 +msgctxt "user" +msgid "Mark as Spam" +msgstr "Markera som skräppostare" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:671 +msgid "Active Child Theme" +msgstr "Aktivt barntema" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:586 +msgid "Visit Theme Site" +msgstr "Besök temats webbplats" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-ms-themes-list-table.php:580 +msgid "Visit %s homepage" +msgstr "Besök webbplatsen för %s" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:552 +msgid "Broken Theme:" +msgstr "Trasigt tema:" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-ms-themes-list-table.php:487 +msgctxt "theme" +msgid "Delete %s" +msgstr "Radera %s" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-ms-themes-list-table.php:463 +msgid "Network Disable %s" +msgstr "Inaktivera %s för nätverk" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-ms-themes-list-table.php:460 +msgid "Disable %s" +msgstr "Inaktivera %s" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-ms-themes-list-table.php:437 +msgid "Network Enable %s" +msgstr "Aktivera %s för nätverk" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-ms-themes-list-table.php:434 +msgid "Enable %s" +msgstr "Aktivera %s" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:350 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:470 +msgid "Network Disable" +msgstr "Inaktivera för nätverk" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:350 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:470 +msgid "Disable" +msgstr "Inaktivera" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:347 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:444 +msgid "Enable" +msgstr "Aktivera" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:314 +msgid "Broken (%s)" +msgid_plural "Broken (%s)" +msgstr[0] "Trasigt (%s)" +msgstr[1] "Trasiga (%s)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:308 +msgid "Disabled (%s)" +msgid_plural "Disabled (%s)" +msgstr[0] "Inaktivt (%s)" +msgstr[1] "Inaktiva (%s)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:305 +msgid "Enabled (%s)" +msgid_plural "Enabled (%s)" +msgstr[0] "Aktiverat (%s)" +msgstr[1] "Aktiverade (%s)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:302 +msgctxt "themes" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Alla (%s)" +msgstr[1] "Alla (%s)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:261 +msgid "Theme" +msgstr "Tema" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:251 +msgid "You do not appear to have any themes available at this time." +msgstr "Du verkar inte ha några teman tillgängliga just nu." + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:249 +msgid "No themes found." +msgstr "Inga teman hittades." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:548 +msgctxt "verb; site" +msgid "Archive" +msgstr "Arkiv" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:546 +msgid "Unarchive" +msgstr "Avarkivera" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:372 +msgid "Never" +msgstr "Aldrig" + +#. translators: 1: site name, 2: site tagline. +#: wp-admin/includes/class-wp-ms-sites-list-table.php:345 +msgid "%1$s – %2$s" +msgstr "%1$s – %2$s" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:239 +#: wp-admin/network/site-info.php:175 +msgctxt "site" +msgid "Registered" +msgstr "Registrerad" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:238 +#: wp-admin/network/site-info.php:179 +msgid "Last Updated" +msgstr "Senast uppdaterad" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:211 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:552 +msgctxt "site" +msgid "Not Spam" +msgstr "Inte skräp" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:210 +msgctxt "site" +msgid "Mark as Spam" +msgstr "Markera som skräp" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:199 +msgid "No sites found." +msgstr "Inga webbplatser funna." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:42 +#: wp-admin/network/site-info.php:189 +msgid "Mature" +msgstr "Vuxenmaterial" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:41 +#: wp-admin/network/site-info.php:187 +msgid "Deleted" +msgstr "Inaktiverad" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:40 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:554 +#: wp-admin/network/site-info.php:186 +msgctxt "site" +msgid "Spam" +msgstr "Skräppost" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:39 +#: wp-admin/network/site-info.php:185 +msgid "Archived" +msgstr "Arkiverat" + +#: wp-admin/includes/network.php:662 +msgid "Once you complete these steps, your network is enabled and configured. You will have to log in again." +msgstr "När du genomfört dessa steg så kommer ditt nätverk vara aktiverat och konfigurerat. Du kommer behöva logga in igen." + +#. translators: 1: a filename like .htaccess, 2: a file path +#: wp-admin/includes/network.php:602 wp-admin/includes/network.php:644 +msgid "Add the following to your %1$s file in %2$s, replacing other WordPress rules:" +msgstr "Lägg till följande i din %1$s under %2$s och ersätt befintliga regler för WordPress:" + +#: wp-admin/includes/network.php:538 +msgid "To make your installation more secure, you should also add:" +msgstr "För att göra din installation säkrare bör du även lägga till:" + +#. translators: %s: wp-config.php +#: wp-admin/includes/network.php:533 +msgid "These unique authentication keys are also missing from your %s file." +msgstr "Dessa unika autentiseringsnycklar saknas också i din %s." + +#. translators: %s: wp-config.php +#: wp-admin/includes/network.php:527 +msgid "This unique authentication key is also missing from your %s file." +msgstr "Denna unika autentiseringsnyckel saknas också i din %s." + +#: wp-admin/includes/network.php:478 +msgid "That’s all, stop editing! Happy publishing." +msgstr "Det var allt, du kan sluta redigera här och börja publicera." + +#. translators: 1: wp-config.php, 2: location of wp-config file, 3: translated +#. version of "That's all, stop editing! Happy publishing." +#: wp-admin/includes/network.php:470 +msgid "Add the following to your %1$s file in %2$s above the line reading %3$s:" +msgstr "Lägg till följande i din %1$s under %2$s ovanför raden %3$s:" + +#. translators: %s: wp-config.php +#: wp-admin/includes/network.php:456 +msgid "We recommend you back up your existing %s file." +msgstr "Vi rekommenderar dig att ta backup av den existerande filen %s." + +#. translators: 1: wp-config.php, 2: .htaccess +#. translators: 1: wp-config.php, 2: web.config +#: wp-admin/includes/network.php:440 wp-admin/includes/network.php:448 +msgid "We recommend you back up your existing %1$s and %2$s files." +msgstr "Vi rekommenderar dig att ta backup av de existerande filerna %1$s och %2$s." + +#: wp-admin/includes/network.php:433 +msgid "Complete the following steps to enable the features for creating a network of sites." +msgstr "Genomför följande steg för att aktivera funktionen för att skapa ett nätverk av webbplatser." + +#: wp-admin/includes/network.php:432 +msgid "Enabling the Network" +msgstr "Aktiverar nätverket" + +#: wp-admin/includes/network.php:421 +msgid "Please complete the configuration steps. To create a new network, you will need to empty or remove the network database tables." +msgstr "Vänligen genomför konfigurationsstegen. För att skapa ett nätverk behöver du tömma eller ta bort databastabellerna för nätverket." + +#: wp-admin/includes/network.php:420 +msgid "An existing WordPress network was detected." +msgstr "Ett redan existerande WordPress-nätverk hittades." + +#: wp-admin/includes/network.php:415 +msgid "The original configuration steps are shown here for reference." +msgstr "De ursprungliga konfigurationsstegen visas här som referens." + +#: wp-admin/includes/network.php:363 +msgid "Your email address." +msgstr "Din e-postadress." + +#: wp-admin/includes/network.php:359 wp-admin/network/settings.php:160 +msgid "Network Admin Email" +msgstr "E-post för nätverksadmin" + +#: wp-admin/includes/network.php:354 +msgid "What would you like to call your network?" +msgstr "Vad vill du kalla ditt nätverk?" + +#: wp-admin/includes/network.php:350 wp-admin/network/settings.php:153 +msgid "Network Title" +msgstr "Titel för nätverk" + +#: wp-admin/includes/network.php:329 +msgid "Because your installation is not new, the sites in your WordPress network must use sub-domains." +msgstr "Eftersom din installation inte är ny måste ditt WordPress-nätverk använda subdomäner." + +#: wp-admin/includes/network.php:326 +msgid "Sub-domain Installation" +msgstr "Installation med sub-domäner" + +#: wp-admin/includes/network.php:316 +msgid "Because your installation is in a directory, the sites in your WordPress network must use sub-directories." +msgstr "Eftersom din installation ligger i en undermapp måste ditt WordPress-nätverk använda undermappar." + +#: wp-admin/includes/network.php:306 wp-admin/includes/network.php:319 +#: wp-admin/includes/network.php:330 +msgid "The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links." +msgstr "Huvudwebbplatsen i en undermappsinstallation kommer att behöva använda en modifierad permalänksstruktur som potentiellt kan bryta existerande länkar." + +#. translators: 1: localhost, 2: localhost.localdomain +#: wp-admin/includes/network.php:300 +msgid "Because you are using %1$s, the sites in your WordPress network must use sub-directories. Consider using %2$s if you wish to use sub-domains." +msgstr "Eftersom du använder %1$s så måste webbplatserna i ditt WordPress-nätverk använda undermappar. Överväg att använda %2$s om du vill använda subdomäner." + +#: wp-admin/includes/network.php:295 wp-admin/includes/network.php:313 +msgid "Sub-directory Installation" +msgstr "Installation i underkataloger" + +#: wp-admin/includes/network.php:291 +msgid "Network Details" +msgstr "Detaljer för nätverk" + +#. translators: %s: host name +#: wp-admin/includes/network.php:282 wp-admin/includes/network.php:342 +msgid "The internet address of your network will be %s." +msgstr "Internetadressen för ditt nätverk kommer att vara %s." + +#. translators: 1: site url, 2: host name, 3: www +#: wp-admin/includes/network.php:268 +msgid "We recommend you change your siteurl to %1$s before enabling the network feature. It will still be possible to visit your site using the %3$s prefix with an address like %2$s but any links will not have the %3$s prefix." +msgstr "Vi rekommenderar att du ändrar din webbplatsadress till %1$s innan aktivering av nätverksfunktionen. Det kommer fortfarande vara möjligt att besöka din webbplats med prefixet %3$s med en adress som %2$s, men länkar kommer inte ha prefixet %3$s." + +#: wp-admin/includes/network.php:263 wp-admin/includes/network.php:277 +#: wp-admin/includes/network.php:337 +msgid "Server Address" +msgstr "Serveradress" + +#: wp-admin/includes/network.php:257 wp-admin/includes/network.php:608 +#: wp-admin/includes/network.php:650 +msgid "Subdirectory networks may not be fully compatible with custom wp-content directories." +msgstr "Undermappsnätverk kanske inte är helt kompatibelt med anpassade wp-content-strukturer." + +#. translators: 1: hostname +#: wp-admin/includes/network.php:245 +msgctxt "subdirectory examples" +msgid "like %1$s/site1 and %1$s/site2" +msgstr "som %1$s/webbplats1 och %1$s/webbplats2" + +#: wp-admin/includes/network.php:240 +msgid "Sub-directories" +msgstr "Undermappar" + +#. translators: 1: hostname +#: wp-admin/includes/network.php:233 +msgctxt "subdomain examples" +msgid "like site1.%1$s and site2.%1$s" +msgstr "som webbplats1.%1$s och webbplats2.%1$s" + +#: wp-admin/includes/network.php:228 +msgid "Sub-domains" +msgstr "Subdomän" + +#: wp-admin/includes/network.php:224 +msgid "You will need a wildcard DNS record if you are going to use the virtual host (sub-domain) functionality." +msgstr "Du behöver en post med ett jokertecken i DNSen om du ska använda funktionalitet för virtual host (subdomän)." + +#: wp-admin/includes/network.php:223 +msgid "You cannot change this later." +msgstr "Du kan inte ändra detta senare." + +#: wp-admin/includes/network.php:222 +msgid "Please choose whether you would like sites in your WordPress network to use sub-domains or sub-directories." +msgstr "Vänligen välj om du vill använda subdomäner eller undermappar för dina webbplatser i WordPress-nätverket." + +#: wp-admin/includes/network.php:221 +msgid "Addresses of Sites in your Network" +msgstr "Adresser för webbplatser i ditt nätverk" + +#: wp-admin/includes/network.php:210 +msgid "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." +msgstr "Om %1$s är inaktiverat, be din serveradministratör aktivera modulen, se Dokumentationen för Apache eller hitta annan hjälp för konfiguration." + +#: wp-admin/includes/network.php:200 +msgid "It looks like the Apache %s module is not installed." +msgstr "Det ser ut som Apache-modulen %s inte är installerad." + +#: wp-admin/includes/network.php:192 +msgid "Please make sure the Apache %s module is installed as it will be used at the end of this installation." +msgstr "Vänligen försäkra dig om att Apache-modulen %s är installerad eftersom den kommer att användas i slutet av denna installation." + +#: wp-admin/includes/network.php:189 +msgid "Note:" +msgstr "Notera:" + +#: wp-admin/includes/network.php:177 +msgid "Fill in the information below and you’ll be on your way to creating a network of WordPress sites. We will create configuration files in the next step." +msgstr "Fyll i informationen nedan och du kommer att vara på väg att skapa ett nätverk av WordPress-webbplatser. Vi kommer att skapa konfigurationsfiler i nästa steg." + +#: wp-admin/includes/network.php:176 +msgid "Welcome to the Network installation process!" +msgstr "Välkommen till nätverksinstallationen!" + +#. translators: %s: Default network name +#: wp-admin/includes/network.php:167 +msgid "%s Sites" +msgstr "%s-webbplatser" + +#: wp-admin/includes/network.php:155 +msgid "ERROR: The network could not be created." +msgstr "FEL: Nätverket kunde inte skapas." + +#: wp-admin/includes/network.php:143 +msgid "Return to Dashboard" +msgstr "Återgå till Panelen" + +#. translators: %s: port number +#: wp-admin/includes/network.php:140 +msgid "You cannot use port numbers such as %s." +msgstr "Du kan inte använda portnummer så som %s." + +#: wp-admin/includes/network.php:137 +msgid "You cannot install a network of sites with your server address." +msgstr "Du kan inte installera ett nätverk med webbplatser med din serveradress." + +#: wp-admin/includes/network.php:128 +msgid "Once the network is created, you may reactivate your plugins." +msgstr "När nätverket är skapat kan du återaktivera dina tillägg." + +#. translators: %s: Plugins screen URL +#: wp-admin/includes/network.php:125 +msgid "Please deactivate your plugins before enabling the Network feature." +msgstr "Vänligen inaktivera dina tillägg innan du aktiverar nätverksfunktionaliteten." + +#. translators: %s: DO_NOT_UPGRADE_GLOBAL_TABLES +#: wp-admin/includes/network.php:113 +msgid "The constant %s cannot be defined when creating a network." +msgstr "Konstanten %s får inte vara definierad när man skapar en nätverksinstallation." + +#: wp-admin/network.php:72 +msgid "Network" +msgstr "Nätverk" + +#: wp-admin/network.php:67 wp-admin/network.php:80 +msgid "Documentation on the Network Screen" +msgstr "Dokumentation för nätverkspanelen" + +#: wp-admin/network.php:66 wp-admin/network.php:79 +msgid "Documentation on Creating a Network" +msgstr "Dokumentation för skapande av nätverk" + +#: wp-admin/network.php:64 +msgid "The choice of subdirectory sites is disabled if this setup is more than a month old because of permalink problems with “/blog/” from the main site. This disabling will be addressed in a future version." +msgstr "Valet av webbplatser som underkataloger inaktiveras om denna installation är mer än en månad gammal på grund av problem med permalänk ”/blog/” från den huvudsakliga webbplatsen. Detta är något som kommer att åtgärdas i en framtida version." + +#: wp-admin/network.php:63 +msgid "Once you add this code and refresh your browser, multisite should be enabled. This screen, now in the Network Admin navigation menu, will keep an archive of the added code. You can toggle between Network Admin and Site Admin by clicking on the Network Admin or an individual site name under the My Sites dropdown in the Toolbar." +msgstr "När du lägger till denna kod och uppdatera webbläsaren, bör nätverket vara aktiverat. Denna sida som nu återfinns i nätverksadmins navigationsmeny kommer att agera som ett arkiv av den extra koden du behöver. Du kan växla mellan nätverksadmin och webbplatsadmin genom att klicka på Nätverksadmin eller ett enskilt webbplatsnamn i rullgardinsmenyn Mina webbplatser i verktygsfältet." + +#: wp-admin/network.php:62 +msgid "Add the designated lines of code to wp-config.php (just before /*...stop editing...*/) and .htaccess (replacing the existing WordPress rules)." +msgstr "Lägg till angivna rader av kod i wp-config.php (precis innan /* ...sluta redigera här... */) och .htaccess (som ersätter de nuvarande reglerna för WordPress)." + +#: wp-admin/network.php:61 +msgid "The next screen for Network Setup will give you individually-generated lines of code to add to your wp-config.php and .htaccess files. Make sure the settings of your FTP client make files starting with a dot visible, so that you can find .htaccess; you may have to create this file if it really is not there. Make backup copies of those two files." +msgstr "Nästa sida för nätverk kommer att ge dig individuellt genererade rader kod att lägga till i dina filer wp-config.php och .htaccess. Kontrollera inställningarna i din FTP-klient för att göra filer som börjar med en punkt synliga så att du kan hitta .htaccess. Du kan behöva skapa denna fil om det inte redan finns en. Gör säkerhetskopior av dessa två filer." + +#: wp-admin/network.php:60 +msgid "Choose subdomains or subdirectories; this can only be switched afterwards by reconfiguring your installation. Fill out the network details, and click Install. If this does not work, you may have to add a wildcard DNS record (for subdomains) or change to another setting in Permalinks (for subdirectories)." +msgstr "Välj subdomäner eller undermappar, efteråt kan detta bara ändras genom att man konfigurerar om sin installation. Fyll i nätverksdetaljer, och klicka på installera. Om detta inte fungerar kan du behöva lägga till en jokerpost (*) i DNS:en (för subdomäner) eller byta till en annan inställning i permalänkar (för undermappar)." + +#: wp-admin/network.php:59 +msgid "This screen allows you to configure a network as having subdomains (site1.example.com) or subdirectories (example.com/site1). Subdomains require wildcard subdomains to be enabled in Apache and DNS records, if your host allows it." +msgstr "Den här sidan tillåter dig att konfigurera ett nätverk att använda subdomäner (sida1.exempel.se) eller undermappar (exempel.se/sida1). Subdomäner kräver att jokerteckenposter konfigureras som subdomäner i Apache- och DNS-poster, om ditt webbhotell tillåter det." + +#: wp-admin/network.php:55 +msgid "Create a Network of WordPress Sites" +msgstr "Skapa ett nätverk av WordPress-webbplatser" + +#. translators: 1: WP_ALLOW_MULTISITE 2: wp-config.php +#: wp-admin/network.php:44 +msgid "You must define the %1$s constant as true in your %2$s file to allow creation of a Network." +msgstr "Du måste sätta konstanten %1$s till true i din %2$s för att tillåta skapande av nätverk." + +#: wp-admin/network.php:29 +msgid "The Network creation panel is not for WordPress MU networks." +msgstr "Panelen för skapande av nätverk är inte för WordPress MU nätverk." \ No newline at end of file diff --git a/wp-content/languages/admin-sv_SE.mo b/wp-content/languages/admin-sv_SE.mo new file mode 100644 index 000000000..a9c26f245 Binary files /dev/null and b/wp-content/languages/admin-sv_SE.mo differ diff --git a/wp-content/languages/admin-sv_SE.po b/wp-content/languages/admin-sv_SE.po new file mode 100644 index 000000000..a9668b1ff --- /dev/null +++ b/wp-content/languages/admin-sv_SE.po @@ -0,0 +1,13389 @@ +# Translation of WordPress - 5.2.x - Administration in Swedish +# This file is distributed under the same license as the WordPress - 5.2.x - Administration package. +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-19 13:41:32+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: sv_SE\n" +"Project-Id-Version: WordPress - 5.2.x - Administration\n" + +#. translators: 1: error message, 2: line number +#: wp-admin/link-parse-opml.php:89 +msgid "XML Error: %1$s at line %2$s" +msgstr "XML-fel: %1$s på rad %2$s" + +#: wp-admin/includes/ajax-actions.php:1426 +msgid "Menu Item" +msgstr "Menyval" + +#: wp-admin/user-edit.php:571 +msgid "You can change your profile picture on Gravatar." +msgstr "Du kan ändra din profilbild på Gravatar." + +#: wp-admin/custom-header.php:477 +msgid "You can now manage and live-preview Custom Header in the Customizer." +msgstr "Du kan nu hantera och förhandsgranska anpassade sidhuvuden live i Anpassaren." + +#: wp-admin/custom-header.php:487 +msgid "Header updated. Visit your site to see how it looks." +msgstr "Sidhuvud uppdaterat. Visa din webbplats för att se hur det blev." + +#: wp-admin/custom-header.php:825 wp-admin/custom-header.php:968 +msgid "Image Processing Error" +msgstr "Fel vid bearbetning av bild" + +#: wp-admin/custom-header.php:843 +msgid "Choose the part of the image you want to use as your header." +msgstr "Välj den del av bilden som du vill använda som sidhuvud." + +#: wp-admin/options-discussion.php:270 +msgid "Retro (Generated)" +msgstr "Retro (Genererad)" + +#: wp-admin/edit.php:316 +msgid "%s post updated." +msgid_plural "%s posts updated." +msgstr[0] "%s inlägg uppdaterat." +msgstr[1] "%s inlägg uppdaterade." + +#: wp-admin/edit.php:333 +msgid "%s block not updated, somebody is editing it." +msgid_plural "%s blocks not updated, somebody is editing them." +msgstr[0] "%s block inte uppdaterat, någon håller på att redigera det." +msgstr[1] "%s block inte uppdaterade, någon håller på att redigera dem." + +#: wp-admin/export.php:18 wp-admin/menu.php:265 +msgid "Export" +msgstr "Exportera" + +#: wp-admin/export.php:171 +msgid "When you click the button below WordPress will create an XML file for you to save to your computer." +msgstr "När du trycker på knappen nedan så kommer WordPress att skapa en XML-fil som du kan spara på din dator." + +#: wp-admin/export.php:172 +msgid "This format, which we call WordPress eXtended RSS or WXR, will contain your posts, pages, comments, custom fields, categories, and tags." +msgstr "Formatet, som vi kallar WordPress eXtended RSS eller WXR, innehåller dina inlägg, kommentarer, anpassade fält, kategorier och taggar." + +#: wp-admin/export.php:320 +msgid "Download Export File" +msgstr "Ladda ner exportfil" + +#: wp-admin/custom-header.php:540 +msgid "You can select an image to be shown at the top of your site by uploading from your computer or choosing from your media library. After selecting an image you will be able to crop it." +msgstr "Du kan ladda upp en egen bild eller välja en från mediabiblioteket för sidhuvudet som visas överst på din sida istället för standardbilden. På nästa sida kommer du ha möjligheten att beskära bilden." + +#: wp-admin/maint/repair.php:20 +msgid "WordPress › Database Repair" +msgstr "WordPress › Databasreparation" + +#: wp-admin/maint/repair.php:144 +msgid "Some database problems could not be repaired. Please copy-and-paste the following list of errors to the WordPress support forums to get additional assistance." +msgstr "Vissa databasproblem kunde inte repareras. Var vänlig klipp-och-klistra in följande rader av felmeddelanden i WordPress supportforum för att få assistans." + +#: wp-admin/maint/repair.php:163 +msgid "Repair Database" +msgstr "Reparera databas" + +#: wp-admin/maint/repair.php:165 +msgid "Repair and Optimize Database" +msgstr "Reparera och optimera databas" + +#: wp-admin/menu.php:55 +msgid "Library" +msgstr "Bibliotek" + +#. translators: %s: number of comments in moderation +#: wp-admin/menu.php:86 +msgid "Comments %s" +msgstr "Kommentarer %s" + +#: wp-admin/menu.php:176 +msgid "Appearance" +msgstr "Utseende" + +#: wp-admin/menu.php:251 wp-admin/menu.php:254 +msgid "Your Profile" +msgstr "Din profil" + +#: wp-admin/menu.php:275 +msgctxt "settings screen" +msgid "General" +msgstr "Allmänt" + +#: wp-admin/menu.php:276 +msgid "Writing" +msgstr "Skriva" + +#: wp-admin/menu.php:277 +msgid "Reading" +msgstr "Läsa" + +#: wp-admin/menu.php:280 +msgid "Permalinks" +msgstr "Permalänkar" + +#: wp-admin/options-discussion.php:70 +msgid "Users must be registered and logged in to comment" +msgstr "Användare måste vara registrerade och inloggade för att kunna kommentera" + +#: wp-admin/options-discussion.php:82 +msgid "Automatically close comments on articles older than %s days" +msgstr "Stäng automatiskt kommentering på inlägg äldre än %s dagar" + +#: wp-admin/options-discussion.php:117 +msgid "Enable threaded (nested) comments %s levels deep" +msgstr "Aktivera trådade (nästlade) kommentarer %s nivåer djupt" + +#: wp-admin/options-discussion.php:129 +msgid "last" +msgstr "sista" + +#: wp-admin/options-discussion.php:133 +msgid "first" +msgstr "första" + +#. translators: 1: Form field control for number of top level comments per +#. page, 2: Form field control for the 'first' or 'last' page +#: wp-admin/options-discussion.php:136 +msgid "Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default" +msgstr "Dela upp kommentarer som sidor med %1$s kommentarer per sida och %2$s kommentarssidan visad först" + +#: wp-admin/options-discussion.php:150 +msgid "older" +msgstr "äldsta" + +#: wp-admin/options-discussion.php:154 +msgid "newer" +msgstr "nyaste" + +#: wp-admin/options-discussion.php:156 +msgid "Comments should be displayed with the %s comments at the top of each page" +msgstr "Kommentarer ska visas med %s kommentaren längst upp på vardera sida" + +#: wp-admin/options-discussion.php:163 wp-admin/options-discussion.php:164 +msgid "Email me whenever" +msgstr "Skicka e-post till mig när" + +#: wp-admin/options-discussion.php:167 +msgid "Anyone posts a comment" +msgstr "någon skriver en kommentar" + +#: wp-admin/options-discussion.php:171 +msgid "A comment is held for moderation" +msgstr "en kommentar väntar på moderering" + +#: wp-admin/options-discussion.php:175 wp-admin/options-discussion.php:176 +msgid "Before a comment appears" +msgstr "Innan en kommentar visas" + +#: wp-admin/options-discussion.php:181 +msgid "Comment author must have a previously approved comment" +msgstr "måste kommentarförfattaren ha en tidigare godkänd kommentar" + +#: wp-admin/options-discussion.php:185 wp-admin/options-discussion.php:186 +msgid "Comment Moderation" +msgstr "Kommentarsgranskning" + +#: wp-admin/options-discussion.php:187 +msgid "Hold a comment in the queue if it contains %s or more links. (A common characteristic of comment spam is a large number of hyperlinks.)" +msgstr "Lägg en kommentar i kön om den innehåller mer än %s länkar. (Skräpkommentarer innehåller ofta ett stort antal länkar.)" + +#: wp-admin/options-discussion.php:189 +msgid "When a comment contains any of these words in its content, name, URL, email, or IP address, it will be held in the moderation queue. One word or IP address per line. It will match inside words, so “press” will match “WordPress”." +msgstr "När en kommentar innehåller något av följande ord sin text, namn, URL, e-postadress eller IP-adress placeras den i granskningsskön. Ange ett ord eller en IP-adress per rad. Funktionen letar också inne i ord, t.ex. ”press” kommer att hitta ”WordPress”." + +#: wp-admin/options-discussion.php:196 wp-admin/options-discussion.php:197 +msgid "Comment Blacklist" +msgstr "Svartlista för kommentarer" + +#: wp-admin/options-discussion.php:198 +msgid "When a comment contains any of these words in its content, name, URL, email, or IP address, it will be put in the trash. One word or IP address per line. It will match inside words, so “press” will match “WordPress”." +msgstr "När en kommentar innehåller något av följande ord sin text, namne, URL, e-postadress eller IP-adress kommer den att flyttas till papperskorgen. Skriv ett ord eller en IP-adress per rad. Sökfunktionen fungerar också inom ord, t.ex. hittar en sökning på ”press” ordet ”WordPress”." + +#: wp-admin/options-discussion.php:207 +msgid "Avatars" +msgstr "Profilbilder" + +#: wp-admin/options-discussion.php:223 +msgid "Avatar Display" +msgstr "Avatarsvisning" + +#: wp-admin/options-discussion.php:227 +msgid "Show Avatars" +msgstr "Visa profilbilder" + +#: wp-admin/options-discussion.php:232 wp-admin/options-discussion.php:233 +msgid "Maximum Rating" +msgstr "Rekommendation" + +#. translators: Content suitability rating: +#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system +#: wp-admin/options-discussion.php:238 +msgid "G — Suitable for all audiences" +msgstr "Barntillåtet" + +#. translators: Content suitability rating: +#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system +#: wp-admin/options-discussion.php:240 +msgid "PG — Possibly offensive, usually for audiences 13 and above" +msgstr "från 7år" + +#. translators: Content suitability rating: +#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system +#: wp-admin/options-discussion.php:242 +msgid "R — Intended for adult audiences above 17" +msgstr "från 15år" + +#. translators: Content suitability rating: +#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system +#: wp-admin/options-discussion.php:244 +msgid "X — Even more mature than above" +msgstr "X – från 18 år" + +#: wp-admin/options-discussion.php:255 wp-admin/options-discussion.php:256 +msgid "Default Avatar" +msgstr "Standardprofilbild" + +#: wp-admin/options-discussion.php:259 +msgid "For users without a custom avatar of their own, you can either display a generic logo or a generated one based on their email address." +msgstr "För besökare utan en egen avatar så kan du antingen visa en förvald bild eller generera en baserad på deras e-postadress." + +#: wp-admin/options-discussion.php:265 +msgid "Blank" +msgstr "Blank" + +#: wp-admin/options-discussion.php:266 +msgid "Gravatar Logo" +msgstr "Gravatar logo" + +#: wp-admin/options-discussion.php:267 +msgid "Identicon (Generated)" +msgstr "Identicon (Genererad)" + +#: wp-admin/options-discussion.php:268 +msgid "Wavatar (Generated)" +msgstr "Wavatar (Genererad)" + +#: wp-admin/options-discussion.php:269 +msgid "MonsterID (Generated)" +msgstr "MonsterID (Genererad)" + +#: wp-admin/export.php:186 +msgid "Categories:" +msgstr "Kategorier:" + +#. translators: %s: wp-config-sample.php +#: wp-admin/setup-config.php:52 +msgid "Sorry, I need a %s file to work from. Please re-upload this file to your WordPress installation." +msgstr "Vi behöver filen %s att utgå ifrån. Vänligen ladda upp denna fil på nytt till din WordPress-installation." + +#: wp-admin/edit.php:229 +msgid "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." +msgstr "Du kan filtrera listan för att visa endast inlägg i en viss kategori eller från en specifik månad genom att använda rullgardinsmenyerna ovanför inläggslistan. Klicka på knappen filtrera efter att du gjort ditt val. Du kan också filtrera listan genom att klicka på författare, kategori eller tagg i inläggslistan." + +#: wp-admin/setup-config.php:283 +msgid "ERROR: \"Table Prefix\" can only contain numbers, letters, and underscores." +msgstr "FEL: \"Table Prefix\" kan endast innehålla siffror, bokstäver och understreck." + +#: wp-admin/custom-header.php:648 +msgid "Default Images" +msgstr "Standardbilder" + +#: wp-admin/edit.php:226 +msgid "You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab." +msgstr "Du kan gömma/visa kolumner baserat på dina preferenser och välja hur många inlägg som ska visas per sida genom att ändra inställningarna under fliken Panelinställningar." + +#: wp-admin/custom-header.php:840 +msgid "Crop Header Image" +msgstr "Beskär bild för sidhuvud" + +#: wp-admin/custom-header.php:667 +msgid "This will remove the header image. You will not be able to restore any customizations." +msgstr "Detta kommer att ta bort bilden för sidhuvudet. Du kommer inte kunna återställa ändringar." + +#: wp-admin/export.php:209 wp-admin/export.php:256 wp-admin/export.php:296 +msgid "Start date:" +msgstr "Startdatum:" + +#: wp-admin/edit.php:238 +msgid "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:" +msgstr "För muspekaren över en rad i listan av inlägg så visas länkar för att hantera inlägget i fråga. Följande handlingar kan utföras:" + +#: wp-admin/custom-header.php:668 +msgid "Remove Header Image" +msgstr "Ta bort bild för sidhuvud" + +#: wp-admin/custom-header.php:678 +msgid "Reset Image" +msgstr "Återställ bild" + +#: wp-admin/custom-header.php:680 +msgid "This will restore the original header image. You will not be able to restore any customizations." +msgstr "Detta kommer att återställa originalbilden för sidhuvudet. Du kommer inte kunna återställa några ändringar." + +#: wp-admin/custom-header.php:681 +msgid "Restore Original Header Image" +msgstr "Återställ originalbild för sidhuvud" + +#: wp-admin/custom-header.php:892 +msgid "Image Upload Error" +msgstr "Fel vid uppladdning av bild" + +#: wp-admin/custom-header.php:844 +msgid "You need JavaScript to choose a part of the image." +msgstr "Du behöver JavaScript för att kunna beskära bilden." + +#: wp-admin/export.php:51 +msgid "Once generated, your WXR file can be imported by another WordPress site or by another blogging platform able to access this format." +msgstr "När genererad så kan din WXR-fil importeras i en annan installation av WordPress eller på andra bloggplattformer som har stöd för formatet." + +#: wp-admin/custom-header.php:862 +msgid "Crop and Publish" +msgstr "Beskär och publicera" + +#: wp-admin/custom-header.php:543 +msgid "Images of exactly %1$d × %2$d pixels will be used as-is." +msgstr "Bilder med en exakt storlek av %1$d × %2$d pixlar kommer att användas som de är." + +#: wp-admin/options-discussion.php:73 +msgid "(Signup has been disabled. Only members of this site can comment.)" +msgstr "(Registreringar har inaktiverats. Endast medlemmar på den här webbplatsen kan kommentera.)" + +#: wp-admin/export.php:208 wp-admin/export.php:255 wp-admin/export.php:295 +msgid "Date range:" +msgstr "Datumintervall:" + +#: wp-admin/export.php:181 +msgid "This will contain all of your posts, pages, comments, custom fields, terms, navigation menus, and custom posts." +msgstr "Denna kommer att innehålla alla dina inlägg, sidor, kommentarer, anpassade fält, termer, menyer och anpassade poster." + +#: wp-admin/export.php:175 +msgid "Choose what to export" +msgstr "Välj vad du vill exportera" + +#. translators: Admin screen title. %s: Admin screen name +#: wp-admin/admin-header.php:49 +msgid "%s — WordPress" +msgstr "%s — WordPress" + +#: wp-admin/export.php:191 wp-admin/export.php:238 +msgid "Authors:" +msgstr "Författare:" + +#: wp-admin/export.php:180 +msgid "All content" +msgstr "Allt innehåll" + +#: wp-admin/maint/repair.php:158 +msgid "One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the “Repair Database” button. Repairing can take a while, so please be patient." +msgstr "En eller flera databastabeller är inte tillgängliga. För att möjliggöra för WordPress att försöka reparera dessa tabeller, tryck på knappen \"Reparera databas\". Reparationen kan ta ett tag, ha tålamod." + +#: wp-admin/custom-header.php:289 +msgid "Random: Show a different image on each page." +msgstr "Slumpvis: Visa olika bilder slumpvis på varje sida." + +#: wp-admin/custom-header.php:635 +msgid "Uploaded Images" +msgstr "Uppladdade bilder" + +#: wp-admin/custom-header.php:653 +msgid "You can use one of these cool headers or show a random one on each page." +msgstr "Du kan använda en av dessa sidhuvuden eller visa en slumpvis för varje sida." + +#: wp-admin/custom-header.php:651 +msgid "If you don‘t want to upload your own image, you can use one of these cool headers, or show a random one." +msgstr "Om du inte känner för att ladda upp en egen bild så kan du använda någon av dessa coola sidhuvuden eller slumpa ett." + +#: wp-admin/custom-header.php:637 +msgid "You can choose one of your previously uploaded headers, or show a random one." +msgstr "Du kan använda en av dina tidigare uppladdade sidhuvuden eller visa ett slumpvis." + +#: wp-admin/menu.php:97 +msgid "All Comments" +msgstr "Alla kommentarer" + +#: wp-admin/menu.php:263 +msgid "Available Tools" +msgstr "Tillgängliga verktyg" + +#: wp-admin/menu.php:271 +msgid "Network Setup" +msgstr "Nätverkskonfiguration" + +#. translators: %s: number of pending updates +#: wp-admin/menu.php:46 +msgid "Updates %s" +msgstr "Uppdateringar %s" + +#. translators: %s: table name +#: wp-admin/maint/repair.php:111 +msgid "Successfully repaired the %s table." +msgstr "Tabellen %s har reparerats." + +#: wp-admin/menu.php:226 +msgid "Installed Plugins" +msgstr "Installerade tillägg" + +#. translators: %s: table name +#: wp-admin/maint/repair.php:126 +msgid "The %s table is already optimized." +msgstr "Tabellen %s är redan optimerad." + +#: wp-admin/menu.php:244 +msgid "All Users" +msgstr "Alla användare" + +#. translators: %s: number of pending plugin updates +#: wp-admin/menu.php:224 +msgid "Plugins %s" +msgstr "Tillägg %s" + +#: wp-admin/ms-delete-site.php:32 wp-admin/menu.php:268 +msgid "Delete Site" +msgstr "Radera webbplats" + +#. translators: %s: table name +#: wp-admin/maint/repair.php:101 +msgid "The %s table is okay." +msgstr "Tabellen %s är okej." + +#: wp-admin/export.php:173 +msgid "Once you’ve saved the download file, you can use the Import function in another WordPress installation to import the content from this site." +msgstr "När du har sparat den nedladdade filen kan du använda importfunktionen i en annan WordPress-installation för att importera denna webbplats innehåll." + +#: wp-admin/edit.php:253 +msgid "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." +msgstr "Med massredigering kan du redigera metadata (kategorier, författare, osv.) för alla valda inlägg samtidigt. För att ta bort ett inlägg från grupperingen för massredigering, klicka på x bredvid inläggets titel i redigeringsfältet som visas." + +#: wp-admin/edit.php:277 +msgid "Managing pages is very similar to managing posts, and the screens can be customized in the same way." +msgstr "Hantering av sidor är väldigt lik hanteringen av inlägg och sidorna kan anpassas på samma sätt." + +#: wp-admin/edit.php:278 +msgid "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." +msgstr "Du kan också utföra samma typer av åtgärder, däribland filtrera i listan med hjälp av filter, agera på en sida med de åtgärdslänkar som visas när du för muspekaren över en rad eller genom att använda massredigeringsmenyn för att redigera metadata för flera sidor på en gång." + +#: wp-admin/edit.php:216 +msgid "This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow." +msgstr "Den här sidan ger tillgång till alla dina inlägg. Du kan anpassa visningen av den här sidan så att den passar ditt arbetsflöde." + +#: wp-admin/edit.php:252 +msgid "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." +msgstr "Du kan också redigera eller flytta flera inlägg till papperskorgen på en gång. Markera de poster du vill ska utföra åtgärd för genom att använda kryssrutorna, välj sedan den åtgärd som du vill ta från massredigeringsmenyn och klicka på Verkställ." + +#: wp-admin/plugin-install.php:94 +msgid "Adding Plugins" +msgstr "Lägga till tillägg" + +#: wp-admin/edit.php:224 +msgid "You can customize the display of this screen’s contents in a number of ways:" +msgstr "Du kan anpassa visningen för den här sidan på ett antal olika sätt:" + +#: wp-admin/edit.php:275 +msgid "Managing Pages" +msgstr "Hantera sidor" + +#: wp-admin/edit.php:243 +msgid "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." +msgstr "Förhandsgranska kommer att visa dig vad ditt utkast till meddelande kommer att se ut om du publicerar det. Visa tar dig till den aktiva webbplatsen för att visa inlägget. Vilka länkar som finns tillgängliga beror på ditt inläggs status." + +#: wp-admin/edit.php:242 +msgid "Trash removes your post from this list and places it in the trash, from which you can permanently delete it." +msgstr "Ta bort tar bort ditt inlägg i listan och placerar det i papperskorgen, där du kan ta bort det permanent." + +#. translators: %s: site address +#: wp-admin/ms-delete-site.php:103 +msgid "I'm sure I want to permanently disable my site, and I am aware I can never get it back or use %s again." +msgstr "Jag är säker på att jag permanent vill inaktivera min webbplats, jag vet att den inte kan återställas och jag kan inte använda %s igen." + +#: wp-admin/ms-delete-site.php:108 +msgid "Delete My Site Permanently" +msgstr "Radera min webbplats permanent" + +#: wp-admin/edit.php:241 +msgid "Quick Edit provides inline access to the metadata of your post, allowing you to update post details without leaving this screen." +msgstr "Snabbredigering ger snabb tillgång till metadata för ditt inlägg, så att du kan uppdatera inläggsdetaljerna utan att lämna denna sida." + +#: wp-admin/edit.php:240 +msgid "Edit takes you to the editing screen for that post. You can also reach that screen by clicking on the post title." +msgstr "Redigera tar dig till redigeringssidan för det inlägget. Du kan också nå den genom att klicka på inläggets titel." + +#: wp-admin/menu.php:69 +msgctxt "admin menu" +msgid "All Links" +msgstr "Alla länkar" + +#: wp-admin/ms-delete-site.php:81 +msgid "Delete My Site" +msgstr "Radera min webbplats" + +#. translators: %s: table name +#: wp-admin/maint/repair.php:133 +msgid "Successfully optimized the %s table." +msgstr "Tabellen %s har optimerats." + +#. translators: 1: table name, 2: error message, +#: wp-admin/maint/repair.php:136 +msgid "Failed to optimize the %1$s table. Error: %2$s" +msgstr "Det gick inte att optimera tabellen %1$s. Fel: %2$s" + +#: wp-admin/custom-header.php:825 wp-admin/custom-header.php:968 +#: wp-admin/custom-header.php:1304 +msgid "Image could not be processed. Please go back and try again." +msgstr "Bilden kunde inte bearbetas. Var vänlig gå tillbaka och försök igen." + +#. translators: 1: table name, 2: error message, +#: wp-admin/maint/repair.php:104 +msgid "The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table…" +msgstr "Tabellen %1$s är inte okej. Följande fel rapporteras: %2$s. WordPress kommer att försöka reparera denna tabell…" + +#: wp-admin/maint/repair.php:151 +msgid "Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users." +msgstr "Reparationen är klar. Var vänlig ta bort följande rad i din wp-config.php så att ingen obehörig använder den här sidan." + +#: wp-admin/maint/repair.php:160 +msgid "WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient." +msgstr "WordPress kan automatiskt söka efter vissa vanliga problem med databaser och reparera dem. Reparationen kan ta ett tag, ha tålamod." + +#: wp-admin/maint/repair.php:164 +msgid "WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing." +msgstr "WordPress kan även försöka att optimera databasen. Detta kan i vissa fall förbättra prestandan. Reparation och optimering av databasen kan ta en lång stund och databasen kommer att vara låst under tiden som databasen optimeras." + +#: wp-admin/options-discussion.php:209 +msgid "An avatar is an image that follows you from weblog to weblog appearing beside your name when you comment on avatar enabled sites. Here you can enable the display of avatars for people who comment on your site." +msgstr "En avatar är en slags profilbild som följer dig där du gör avtryck på nätet, den visas t.ex vid kommentering på de webbplatser som har funktionen för avatarer aktiverad. Här kan du aktivera visning av avatarer för besökare som kommenterar på din webbplats." + +#: wp-admin/export.php:50 +msgid "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." +msgstr "Du kan exportera din webbplats innehåll till en fil för att sedan kunna importera det till en annan installation eller plattform. Exportfilen kommer att vara ett XML-filformat som kallas WXR. Inlägg, sidor, kommentarer, anpassade fält, kategorier och taggar kan inkluderas. Du kan filtrera vilket innehålls och vilka publiceringsstatusar som ska tas med i WXR-filen." + +#. translators: 1: table name, 2: error message, +#: wp-admin/maint/repair.php:114 +msgid "Failed to repair the %1$s table. Error: %2$s" +msgstr "Det gick inte att reparera tabellen %1$s. Fel: %2$s" + +#. translators: 1: wp-config.php, 2: install.php +#: wp-admin/setup-config.php:63 +msgid "The file %1$s already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now." +msgstr "Filen %1$s finns redan. Om du behöver ändra detaljer för konfigurationen i denna fil, radera den befintliga först. Du kan försöka installera nu." + +#. translators: 1: wp-config.php, 2: install.php +#: wp-admin/setup-config.php:75 +msgid "The file %1$s already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now." +msgstr "Filen %1$s finns redan en nivå över din installation av WordPress. Om du behöver ändra detaljer för konfigurationen i denna fil, radera den befintliga först. Du kan försöka installera nu." + +#: wp-admin/setup-config.php:112 +msgid "WordPress › Setup Configuration File" +msgstr "WordPress › Skapa konfigurationsfil" + +#: wp-admin/setup-config.php:159 +msgid "Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding." +msgstr "Välkommen till WordPress. Innan vi sätter igång så behöver vi information för databasen. Du behöver ha följande uppgifter innan du fortsätter." + +#: wp-admin/setup-config.php:162 +msgid "Database username" +msgstr "Användarnamn för databas" + +#: wp-admin/setup-config.php:163 +msgid "Database password" +msgstr "Lösenord för databas" + +#: wp-admin/setup-config.php:165 +msgid "Table prefix (if you want to run more than one WordPress in a single database)" +msgstr "Tabellprefix (om du vill köra mer än en installation i samma databas)" + +#: wp-admin/setup-config.php:195 +msgid "Let’s go!" +msgstr "Då kör vi!" + +#: wp-admin/setup-config.php:212 +msgid "Database Name" +msgstr "Databasnamn" + +#: wp-admin/setup-config.php:218 +msgctxt "example username" +msgid "username" +msgstr "användarnamn" + +#: wp-admin/setup-config.php:223 +msgctxt "example password" +msgid "password" +msgstr "lösenord" + +#: wp-admin/setup-config.php:227 +msgid "Database Host" +msgstr "Databasvärd" + +#: wp-admin/setup-config.php:237 +msgid "Table Prefix" +msgstr "Tabellprefix" + +#: wp-admin/setup-config.php:239 +msgid "If you want to run multiple WordPress installations in a single database, change this." +msgstr "Om du vill köra flera installationer av WordPress i en och samma databas, ändra det här." + +#. translators: %s: wp-config.php +#: wp-admin/maint/repair.php:35 +msgid "To allow use of this page to automatically repair database problems, please add the following line to your %s file. Once this line is added to your config, reload this page." +msgstr "För att tillåta denna sida att automatiskt reparera databasproblem, lägg till följande rad i din %s. När du lagt till denna rad i din konfigurationsfil, ladda om den här sidan." + +#: wp-admin/ms-delete-site.php:94 +msgid "Remember, once deleted your site cannot be restored." +msgstr "Kom ihåg, en raderad webbplats kan inte återställas." + +#: wp-admin/ms-delete-site.php:25 +msgid "Sorry, the link you clicked is stale. Please select another option." +msgstr "Länken du klickade på fungerar inte längre. Välj ett annat alternativ." + +#: wp-admin/ms-delete-site.php:23 +msgid "Thank you for using %s, your site has been deleted. Happy trails to you until we meet again." +msgstr "Tack för att du använt %s, din webbplats har raderats. Ha det så bra tills vi ses igen." + +#: wp-admin/ms-delete-site.php:93 +msgid "If you do not want to use your %s site any more, you can delete it using the form below. When you click Delete My Site Permanently you will be sent an email with a link in it. Click on this link to delete your site." +msgstr "Om du inte vill använda din %s webbplats längre så kan du radera den genom att använda formuläret nedan. När du klickar på Radera min webbplats permanent så kommer du att få ett mail med en länk i. Klicka på denna länk för att ta bort din webbplats." + +#: wp-admin/ms-delete-site.php:88 +msgid "Thank you. Please check your email for a link to confirm your action. Your site will not be deleted until this link is clicked." +msgstr "Tack. Var vänlig kontrollera din e-post för en bekräftelselänk. Din webbplats kommer inte att tas bort fören länken har besökts." + +#: wp-admin/custom-header.php:119 wp-admin/custom-header.php:690 +#: wp-admin/custom-header.php:695 +msgid "Header Text" +msgstr "Text i sidhuvud" + +#: wp-admin/custom-header.php:698 +msgid "Show header text with your image." +msgstr "Visa text i sidhuvudet tillsammans med din bild." + +#: wp-admin/custom-header.php:620 +msgid "Set as header" +msgstr "Ange som sidhuvud" + +#: wp-admin/setup-config.php:193 +msgid "In all likelihood, these items were supplied to you by your Web Host. If you don’t have this information, then you will need to contact them before you can continue. If you’re all ready…" +msgstr "Det vanligaste är att man får ovan nämnda uppgifter av sitt webbhotell. Om du inte har denna information, kontakta ditt webbhotell innan du fortsätter. Är du redo?" + +#: wp-admin/custom-header.php:99 +msgid "This screen is used to customize the header section of your theme." +msgstr "Denna sida används för att anpassa sidhuvudet för ditt tema." + +#: wp-admin/custom-header.php:100 +msgid "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." +msgstr "Du kan välja mellan temats standardbilder för sidhuvudet eller ladda upp din egna. Du kan även anpassa hur din sidas titel och slogan visas." + +#: wp-admin/custom-header.php:110 +msgid "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." +msgstr "Vissa teman kommer med flera extra bilder för sidhuvudet inkluderade. Om du ser flera bilder visade, välj den du gillar och klicka på knappen ”Spara ändringar”." + +#: wp-admin/custom-header.php:111 +msgid "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." +msgstr "Om ditt tema har mer än en standardbild för sidhuvudet eller om du laddat upp mer än en anpassad bild så kan du välja att WordPress visar dessa bilder slumpvalt på de olika sidorna. Markera alternativet ”Slumpvalt” vid sidan om uppladdade bilder eller sektionen för standardbilder för att aktivera denna funktion." + +#: wp-admin/custom-header.php:121 +msgid "For most themes, the header text is your Site Title and Tagline, as defined in the General Settings section." +msgstr "För de flesta teman så består texten i sidhuvudet av din sidas titel och slogan som det är angivet under Allmänna inställningar." + +#: wp-admin/custom-header.php:112 +msgid "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”." +msgstr "Om du inte vill ha någon bild alls i sidhuvudet av din webbplats, klicka på knappen ”Ta bort bild i sidhuvud” under sektionen för sidhuvud på denna sida. Om du vill aktivera vid ett senare tillfälle så behöver du bara välja ett av de andra alternativen för sidhuvud och klicka på ”Spara ändringar”." + +#: wp-admin/custom-header.php:865 +msgid "Skip Cropping, Publish Image as Is" +msgstr "Beskär inte, publicera bild som den är" + +#: wp-admin/custom-header.php:109 +msgid "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." +msgstr "Du kan ange en anpassad bild som sidhuvud för din webbplats. Ladda helt enkelt bara upp bilden och beskär den. Bilden för sidhuvudet kommer att uppdateras direkt. Alternativt så kan du använda en redan uppladdad bild från mediabiblioteket genom att klicka på knappen ”Välj bild”." + +#: wp-admin/plugin-install.php:96 +msgid "If you know what you’re looking for, Search is your best bet. The Search screen has options to search the WordPress Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting popular tags. Tags in larger type mean more plugins have been labeled with that tag." +msgstr "Om du vet vad du letar efter så är en sökning ditt bästa alternativ. Söksidan har alternativ för att söka i tilläggsförrådet på WordPress.org efter en specifik term, författare eller tagg. Du kan även söka i förrådet genom att välja en populär tagg. Taggar i större format visar att fler tillägg har den här märkning." + +#: wp-admin/plugin-install.php:98 +msgid "You can also browse a user’s favorite plugins, by using the Favorites link above the plugins list and entering their WordPress.org username." +msgstr "Du kan även bläddra bland användares favorittillägg genom att använda Favorit-länken uppe till vänster på sidan och ange deras användarnamn på WordPress.org." + +#: wp-admin/plugin-install.php:99 +msgid "If you want to install a plugin that you’ve downloaded elsewhere, click the Upload Plugin button above the plugins list. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin." +msgstr "Om du vill installera ett tillägg som du har laddat ner någon annanstans, klicka på knappen Ladda upp ovanför listan med tillägg. Du kommer att uppmanas att ladda upp .zip-filen och när den laddats klart så kan du aktivera det nya tillägget." + +#: wp-admin/setup-config.php:209 +msgid "Below you should enter your database connection details. If you’re not sure about these, contact your host." +msgstr "Nedan anger du dina uppgifter för databasanslutningen. Om du är osäker på dessa uppgifter, kontakta ditt webbhotell/administratör." + +#: wp-admin/setup-config.php:412 +msgid "After you’ve done that, click “Run the installation.”" +msgstr "Efter att du gjort det, klicka på ”Kör installationen.”" + +#: wp-admin/custom-header.php:122 +msgid "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." +msgstr "I textsektionen av sidhuvudet så kan du välja om du vill visa eller gömma texten. Du kan även välja färg på texten genom att klicka på knappen Välj färg ntingen ange en färgkod i formatet HTML-hex, t.ex ”#ff0000” för röd eller genom att använda färgväljaren." + +#: wp-admin/custom-header.php:619 +msgid "Choose a Custom Header" +msgstr "Välj ett anpassat sidhuvud" + +#: wp-admin/custom-header.php:725 +msgctxt "color" +msgid "Default: %s" +msgstr "Standard: %s" + +#: wp-admin/custom-header.php:123 +msgid "Don’t forget to click “Save Changes” when you’re done!" +msgstr "Glöm inte att klicka på ”Spara ändringar” när du är klar!" + +#: wp-admin/setup-config.php:444 +msgid "All right, sparky! You’ve made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to…" +msgstr "Kalas! Du har klarat dig igenom denna del av installationen. WordPress kan nu kommunicera med din databas. Är du redo så fortsätter vi…" + +#: wp-admin/edit.php:318 +msgid "%s post not updated, somebody is editing it." +msgid_plural "%s posts not updated, somebody is editing them." +msgstr[0] "%s inlägg uppdaterades inte, någon annan redigerar det." +msgstr[1] "%s inlägg uppdaterades inte, någon annan redigerar dom." + +#: wp-admin/edit.php:319 +msgid "%s post permanently deleted." +msgid_plural "%s posts permanently deleted." +msgstr[0] "%s inlägg raderades permanent." +msgstr[1] "%s inlägg raderades permanent." + +#: wp-admin/edit.php:320 +msgid "%s post moved to the Trash." +msgid_plural "%s posts moved to the Trash." +msgstr[0] "%s inlägg flyttades till papperskorgen." +msgstr[1] "%s inlägg flyttades till papperskorgen." + +#: wp-admin/edit.php:321 +msgid "%s post restored from the Trash." +msgid_plural "%s posts restored from the Trash." +msgstr[0] "%s inlägg återställt från papperskorgen." +msgstr[1] "%s inlägg återställda från papperskorgen." + +#: wp-admin/edit.php:324 +msgid "%s page updated." +msgid_plural "%s pages updated." +msgstr[0] "%s sida uppdaterad." +msgstr[1] "%s sidor uppdaterade." + +#: wp-admin/edit.php:326 +msgid "%s page not updated, somebody is editing it." +msgid_plural "%s pages not updated, somebody is editing them." +msgstr[0] "%s sida uppdaterades inte, någon redigerar den." +msgstr[1] "%s sidor uppdaterades inte, någon redigerar dom." + +#: wp-admin/edit.php:327 +msgid "%s page permanently deleted." +msgid_plural "%s pages permanently deleted." +msgstr[0] "%s sida raderades permanent." +msgstr[1] "%s sidor raderades permanent." + +#: wp-admin/edit.php:328 +msgid "%s page moved to the Trash." +msgid_plural "%s pages moved to the Trash." +msgstr[0] "%s sida flyttades till papperskorgen." +msgstr[1] "%s sidor flyttades till papperskorgen." + +#: wp-admin/edit.php:329 +msgid "%s page restored from the Trash." +msgid_plural "%s pages restored from the Trash." +msgstr[0] "%s sida återställdes från papperskorgen." +msgstr[1] "%s sidor återställdes från papperskorgen." + +#: wp-admin/options-discussion.php:179 +msgid "Comment must be manually approved" +msgstr "måste kommentaren godkännas manuellt" + +#: wp-admin/maint/repair.php:144 +msgid "https://wordpress.org/support/forum/how-to-and-troubleshooting" +msgstr "https://wordpress.org/support/forum/how-to-and-troubleshooting" + +#: wp-admin/edit.php:284 +msgid "Documentation on Managing Pages" +msgstr "Dokumentation för hantering av sidor" + +#: wp-admin/edit.php:259 +msgid "Documentation on Managing Posts" +msgstr "Dokumentation för hantering av inlägg" + +#: wp-admin/plugin-install.php:105 +msgid "Documentation on Installing Plugins" +msgstr "Dokumentation för hur man installerar tillägg" + +#: wp-admin/export.php:57 +msgid "Documentation on Export" +msgstr "Dokumentation för export" + +#: wp-admin/custom-header.php:129 +msgid "Documentation on Custom Header" +msgstr "Dokumentation för anpassat sidhuvud" + +#: wp-admin/edit.php:325 +msgid "1 page not updated, somebody is editing it." +msgstr "1 sida har inte uppdaterats, någon redigerar den." + +#: wp-admin/edit.php:317 +msgid "1 post not updated, somebody is editing it." +msgstr "1 inlägg har inte uppdaterats, någon redigerar det." + +#. translators: Do not translate USERNAME, URL_DELETE, SITE_NAME: those are +#. placeholders. +#: wp-admin/ms-delete-site.php:50 +msgid "" +"Howdy ###USERNAME###,\n" +"\n" +"You recently clicked the 'Delete Site' link on your site and filled in a\n" +"form on that page.\n" +"\n" +"If you really want to delete your site, click the link below. You will not\n" +"be asked to confirm again so only click this link if you are absolutely certain:\n" +"###URL_DELETE###\n" +"\n" +"If you delete your site, please consider opening a new site here\n" +"some time in the future! (But remember your current site and username\n" +"are gone forever.)\n" +"\n" +"Thanks for using the site,\n" +"Webmaster\n" +"###SITE_NAME###" +msgstr "" +"Hej ###USERNAME###,\n" +"\n" +"Du klickade nyligen på länken 'Radera webbplats' på din webbplats och fyllde i\n" +"ett formulär på samma sida.\n" +"\n" +"Om du verkligen vill radera din webbplats, klicka på länken nedan. Du kommer\n" +"inte bli tillfrågad igen, klicka endast på länken om du är helt säker:\n" +"###URL_DELETE###\n" +"\n" +"Om du raderar din webbplats, vänligen överväg gärna att skapa en ny webbplats\n" +"här i framtiden! (Men kom ihåg att din nuvarande webbplats och användarnamn\n" +"är borta för alltid.)\n" +"\n" +"Tack för att du använder sidan,\n" +"Webmaster\n" +"###SITE_NAME###" + +#: wp-admin/plugin-install.php:50 +msgid "Add Plugins" +msgstr "Lägg till tillägg" + +#: wp-admin/plugin-install.php:135 +msgid "Browse Plugins" +msgstr "Bläddra bland tillägg" + +#: wp-admin/plugin-install.php:97 +msgid "If you just want to get an idea of what’s available, you can browse Featured and Popular plugins by using the links above the plugins list. These sections rotate regularly." +msgstr "Om du bara vill få en uppfattning om vad som finns tillgängligt, kan du bläddra bland utvalda och populära tillägg med hjälp av länkarna i den övre vänstra delen av sidan. Dessa avsnitt roteras regelbundet." + +#: wp-admin/options-discussion.php:264 +msgid "Mystery Person" +msgstr "Mystisk person" + +#: wp-admin/edit-form-comment.php:98 +msgid "Comment status" +msgstr "Kommentarsstatus" + +#. translators: %s: post link +#: wp-admin/edit-form-comment.php:139 +msgid "In response to: %s" +msgstr "Som svar till: %s" + +#. translators: %s: comment link +#: wp-admin/edit-form-comment.php:156 +msgid "In reply to: %s" +msgstr "Som svar till: %s" + +#. translators: 1: wp-config.php, 2: secret key service URL +#: wp-admin/maint/repair.php:67 +msgid "While you are editing your %1$s file, take a moment to make sure you have all 8 keys and that they are unique. You can generate these using the WordPress.org secret key service." +msgstr "Medan du redigerar din %1$s. kontrollera även så att du har alla 8 nycklar angivna och att dessa är unika. Du kan generera dessa med tjänsten för hemliga nycklar på WordPress.org" + +#: wp-admin/custom-header.php:763 wp-admin/custom-header.php:927 +msgid "The current theme does not support uploading a custom header image." +msgstr "Aktuellt tema har inte stöd för uppladdning av anpassade bilder för sidhuvud." + +#: wp-admin/custom-header.php:935 +msgid "The current theme does not support a flexible sized header image." +msgstr "Aktuellt tema har inte stöd för sidhuvudsbild i flexible storlek." + +#: wp-admin/edit-form-comment.php:32 +msgctxt "comment" +msgid "Permalink:" +msgstr "Permalänk:" + +#. translators: %s: comment date +#: wp-admin/edit-form-comment.php:113 +msgid "Submitted on: %s" +msgstr "Postad: %s" + +#: wp-admin/edit.php:228 +msgid "You can view posts in a simple title list or with an excerpt using the Screen Options tab." +msgstr "Du kan visa inlägg i en enkel titellista eller tillsammans med utdrag genom att använda fliken Panelinställningar." + +#: wp-admin/export.php:178 +msgid "Content to export" +msgstr "Innehåll att exportera" + +#: wp-admin/export.php:214 wp-admin/export.php:261 wp-admin/export.php:301 +msgid "End date:" +msgstr "Slutdatum:" + +#: wp-admin/maint/repair.php:64 +msgid "Check secret keys" +msgstr "Kontrollera hemliga nycklar" + +#: wp-admin/maint/repair.php:155 +msgid "WordPress database repair" +msgstr "WordPress databasreparation" + +#: wp-admin/setup-config.php:158 +msgid "Before getting started" +msgstr "Innan vi börjar" + +#: wp-admin/setup-config.php:207 +msgid "Set up your database connection" +msgstr "Konfigurera din databasanslutning" + +#: wp-admin/setup-config.php:443 +msgid "Successful database connection" +msgstr "Anslutning till databasen lyckades" + +#: wp-admin/maint/repair.php:30 +msgid "Allow automatic database repair" +msgstr "Tillåt automatisk reparation av databasen" + +#: wp-admin/maint/repair.php:71 +msgid "Database repair results" +msgstr "Resultat för databasreparation" + +#: wp-admin/setup-config.php:171 +msgid "We’re going to use this information to create a %s file." +msgstr "Vi kommer att använda denna information för att skapa filen %s." + +#: wp-admin/setup-config.php:179 +msgid "If for any reason this automatic file creation doesn’t work, don’t worry. All this does is fill in the database information to a configuration file. You may also simply open %1$s in a text editor, fill in your information, and save it as %2$s." +msgstr "Om filen av någon anledning inte kan skapas automatiskt, oroa dig inte. Allt detta gör är att spara databasuppgifter som en konfigurationsfil. Du kan helt enkelt öppna %1$s i valfri textredigerare, fylla i dina uppgifter och spara den som %2$s." + +#: wp-admin/setup-config.php:188 +msgid "Need more help? We got it." +msgstr "Behöver du mer hjälp? Vi har den." + +#. translators: %s: localhost +#: wp-admin/setup-config.php:232 +msgid "You should be able to get this info from your web host, if %s doesn’t work." +msgstr "Du bör kunna få denna information från ditt webbhotell om %s inte fungerar." + +#. translators: %s: wp-config.php +#: wp-admin/setup-config.php:396 +msgid "Sorry, but I can’t write the %s file." +msgstr "Ledsen, det går inte att skriva till filen %s." + +#. translators: %s: wp-config.php +#: wp-admin/setup-config.php:402 +msgid "You can create the %s file manually and paste the following text into it." +msgstr "Du kan skapa filen %s manuellt och klistra in följande text i den." + +#. translators: %s: size in pixels +#: wp-admin/custom-header.php:548 +msgid "Images should be at least %s wide." +msgstr "Bilder bör vara minst %s breda." + +#. translators: %d: custom header width +#. translators: %d: custom header height +#: wp-admin/custom-header.php:551 wp-admin/custom-header.php:563 +#: wp-admin/custom-header.php:576 wp-admin/custom-header.php:587 +msgid "%d pixels" +msgstr "%d pixlar" + +#. translators: %s: size in pixels +#: wp-admin/custom-header.php:560 +msgid "Images should be at least %s tall." +msgstr "Bilder bör vara minst %s höga." + +#. translators: %s: size in pixels +#: wp-admin/custom-header.php:573 +msgid "Suggested width is %s." +msgstr "Föreslagen bredd är %s." + +#. translators: %s: size in pixels +#: wp-admin/custom-header.php:584 +msgid "Suggested height is %s." +msgstr "Föreslagen höjd är %s." + +#: wp-admin/edit-form-comment.php:100 +msgctxt "comment status" +msgid "Pending" +msgstr "Väntande" + +#: wp-admin/setup-config.php:214 +msgid "The name of the database you want to use with WordPress." +msgstr "Namnet på databasen du vill använda för WordPress." + +#: wp-admin/setup-config.php:219 +msgid "Your database username." +msgstr "Din databasanvändare." + +#: wp-admin/setup-config.php:224 +msgid "Your database password." +msgstr "Ditt databaslösenord." + +#: wp-admin/custom-header.php:1016 +msgid "Sorry, you are not allowed to customize headers." +msgstr "Du har inte behörighet att anpassa sidhuvuden." + +#: wp-admin/edit.php:227 +msgid "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." +msgstr "Du kan filtrera listan av inlägg efter inläggsstatus genom att använda textlänkarna ovanför listan för att endast visa inlägg med specifik status. Som standard visas alla inlägg." + +#: wp-admin/export.php:13 +msgid "Sorry, you are not allowed to export the content of this site." +msgstr "Du har inte behörighet att exportera innehållet på den här webbplatsen." + +#: wp-admin/ms-delete-site.php:17 +msgid "Sorry, you are not allowed to delete this site." +msgstr "Du har inte behörighet att radera den här webbplatsen." + +#: wp-admin/setup-config.php:316 +msgid "ERROR: \"Table Prefix\" is invalid." +msgstr "FEL: \"Tabellprefix\" är ogiltigt.." + +#: wp-admin/plugin-install.php:86 +msgid "Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official WordPress Plugin Directory are compatible with the license WordPress uses." +msgstr "Tillägg kan användas för att utöka WordPress funktionalitet med anpassade funktioner. Tillägg utvecklas av tusentals utvecklare världen över, oberoende av WordPress kärnutveckling. Alla tillägg i den officiella tilläggskatalogen är kompatibla med licensen som WordPress använder." + +#: wp-admin/plugin-install.php:87 +msgid "You can find new plugins to install by searching or browsing the directory right here in your own Plugins section." +msgstr "Du kan hitta nya tillägg att installera genom att söka eller bläddra i katalogen direkt här i din tilläggspanel." + +#: wp-admin/setup-config.php:278 +msgid "ERROR: \"Table Prefix\" must not be empty." +msgstr "FEL: ”Tabellprefix” får inte vara tomt." + +#: wp-admin/setup-config.php:413 wp-admin/setup-config.php:446 +msgid "Run the installation" +msgstr "Kör installationen" + +#: wp-admin/edit.php:333 +msgid "1 block not updated, somebody is editing it." +msgstr "1 block kunde inte uppdateras eftersom någon redigerar det." + +#: wp-admin/edit.php:332 +msgid "%s block updated." +msgid_plural "%s blocks updated." +msgstr[0] "%s block uppdaterat." +msgstr[1] "%s block uppdaterade." + +#: wp-admin/edit.php:334 +msgid "%s block permanently deleted." +msgid_plural "%s blocks permanently deleted." +msgstr[0] "%s block permanent borttaget." +msgstr[1] "%s block permanent borttagna." + +#: wp-admin/edit.php:335 +msgid "%s block moved to the Trash." +msgid_plural "%s blocks moved to the Trash." +msgstr[0] "%s block har lagts i papperskorgen." +msgstr[1] "%s block har lagts i papperskorgen." + +#: wp-admin/edit.php:336 +msgid "%s block restored from the Trash." +msgid_plural "%s blocks restored from the Trash." +msgstr[0] "%s block har återställts från papperskorgen." +msgstr[1] "%s block har återställts från papperskorgen." + +#: wp-admin/options-discussion.php:91 +msgid "Show comments cookies opt-in checkbox, allowing comment author cookies to be set." +msgstr "Visa en kryssruta för att tacka ja till att kommentars-cookies sätts." + +#: wp-admin/menu.php:212 +msgid "Theme Editor" +msgstr "Temaredigeraren" + +#: wp-admin/menu.php:231 +msgid "Plugin Editor" +msgstr "Tilläggsredigeraren" + +#: wp-admin/js/site-health.js:247 +msgid "Please wait..." +msgstr "Vänta ..." + +#: wp-admin/js/site-health.js:274 +msgid "All site health tests have finished running." +msgstr "Alla hälsokontroller för webbplatsen är klara." + +#. translators: %s: The percentage score for the tests. +#: wp-admin/js/site-health.js:152 +msgid "All site health tests have finished running. Your site scored %s, and the results are now available on the page." +msgstr "Alla hälsokontroller för webbplatsen är klara. Poängen för din webbplats är %s och resultaten är nu tillgängliga på sidan." + +#: wp-admin/js/site-health.js:25 +msgid "Site information has been added to your clipboard." +msgstr "Information om webbplatsen har kopierats till ditt urklipp." + +#: wp-admin/site-health.php:83 +msgid "Great job!" +msgstr "Stiligt!" + +#: wp-admin/site-health.php:87 +msgid "Everything is running smoothly here." +msgstr "Här är allt som det ska." + +#: wp-admin/site-health.php:17 wp-admin/site-health.php:93 +msgid "Site Health Status" +msgstr "Hälsostatus för webbplats" + +#: wp-admin/site-health.php:96 +msgid "The site health check shows critical information about your WordPress configuration and items that require your attention." +msgstr "Hälsokontrollen för webbplatsen visar avgörande information om konfigurationen av din WordPress-webbplats och saker du behöver uppmärksamma." + +#. translators: %s: number of recommended improvements +#: wp-admin/site-health.php:113 wp-admin/js/site-health.js:70 +msgid "%s Recommended improvement" +msgid_plural "%s Recommended improvements" +msgstr[0] "%s rekommenderad förbättring" +msgstr[1] "%s rekommenderade förbättringar" + +#. translators: %s: number of items with no issues +#: wp-admin/site-health.php:132 wp-admin/js/site-health.js:72 +msgid "%s Item with no issues detected" +msgid_plural "%s Items with no issues detected" +msgstr[0] "%s objekt utan detekterade problem" +msgstr[1] "%s objekt utan detekterade problem" + +#: wp-admin/site-health.php:20 +msgid "Sorry, you are not allowed to access site health information." +msgstr "Du saknar behörighet att se information om webbplatsens hälsotillstånd." + +#: wp-admin/site-health.php:123 +msgid "Passed tests" +msgstr "Klarade prov" + +#. translators: %s: number of critical issues found +#: wp-admin/site-health.php:102 wp-admin/js/site-health.js:68 +msgid "%s Critical issue" +msgid_plural "%s Critical issues" +msgstr[0] "%s allvarligt problem" +msgstr[1] "%s allvarliga problem" + +#: wp-admin/user-edit.php:733 +msgid "Capabilities" +msgstr "Behörigheter" + +#: wp-admin/admin.php:256 +msgid "Invalid plugin page." +msgstr "Ogiltig tilläggssida." + +#: wp-admin/admin.php:260 +msgid "Cannot load %s." +msgstr "Kan inte ladda %s." + +#: wp-admin/admin.php:320 wp-admin/import.php:18 wp-admin/menu.php:264 +msgid "Import" +msgstr "Importera" + +#: wp-admin/custom-background.php:243 +msgid "Background updated. Visit your site to see how it looks." +msgstr "Bakgrund uppdaterad. Visa din webbplats för att se hur det blev." + +#: wp-admin/custom-background.php:322 wp-admin/custom-header.php:597 +msgid "Choose an image from your computer:" +msgstr "Välj en bild på din dator:" + +#: wp-admin/upgrade.php:133 +msgid "Your WordPress database has been successfully updated!" +msgstr "Din WordPress-databas har uppdaterats!" + +#. translators: %s: number of comments approved +#: wp-admin/edit-comments.php:280 +msgid "%s comment approved" +msgid_plural "%s comments approved" +msgstr[0] "%s kommentar godkänd" +msgstr[1] "%s kommentarer godkända" + +#. translators: %s: number of comments marked as spam +#: wp-admin/edit-comments.php:286 +msgid "%s comment marked as spam." +msgid_plural "%s comments marked as spam." +msgstr[0] "%s kommentar markerad som skräp." +msgstr[1] "%s kommentarer markerade som skräp." + +#. translators: %s: number of comments restored from the spam +#: wp-admin/edit-comments.php:291 +msgid "%s comment restored from the spam" +msgid_plural "%s comments restored from the spam" +msgstr[0] "%s kommentar återställd från att ha varit markerad som skräp" +msgstr[1] "%s kommentarer återställda från att ha varit markerade som skräp" + +#. translators: %s: number of comments permanently deleted +#: wp-admin/edit-comments.php:307 +msgid "%s comment permanently deleted" +msgid_plural "%s comments permanently deleted" +msgstr[0] "%s kommentar raderad permanent" +msgstr[1] "%s kommentarer raderade permanent" + +#: wp-admin/edit-comments.php:333 +msgid "Search Comments" +msgstr "Sök kommentarer" + +#: wp-admin/edit-form-advanced.php:168 wp-admin/edit-form-advanced.php:182 +msgid "Custom field updated." +msgstr "Anpassat fält uppdaterat." + +#: wp-admin/edit-form-advanced.php:169 wp-admin/edit-form-advanced.php:183 +msgid "Custom field deleted." +msgstr "Anpassat fält borttaget." + +#. translators: %s: date and time of the revision +#: wp-admin/edit-form-advanced.php:172 +msgid "Post restored to revision from %s." +msgstr "Inlägg återställt till version från %s." + +#: wp-admin/edit-form-advanced.php:174 +msgid "Post saved." +msgstr "Inlägg sparat." + +#. translators: %s: date and time of the revision +#: wp-admin/edit-form-advanced.php:186 +msgid "Page restored to revision from %s." +msgstr "Sida återställd till version från %s." + +#: wp-admin/themes.php:203 wp-admin/themes.php:207 +msgid "Visit site" +msgstr "Besök sida" + +#: wp-admin/edit-link-form.php:15 +msgid "Links / Edit Link" +msgstr "Länkar / Redigera länk" + +#: wp-admin/edit-link-form.php:20 +msgid "Links / Add New Link" +msgstr "Länkar / Lägg till ny länk" + +#: wp-admin/edit-link-form.php:93 +msgid "Link added." +msgstr "Länken sparad." + +#: wp-admin/edit-link-form.php:115 +msgid "Example: Nifty blogging software" +msgstr "Exempel: Intressant bloggmjukvara" + +#: wp-admin/edit-link-form.php:120 +msgid "Web Address" +msgstr "Webbadress" + +#: wp-admin/edit-link-form.php:123 +msgid "Example: http://wordpress.org/ — don’t forget the http://" +msgstr "Exampel: http://wordpress.org/ — glöm inte http://" + +#: wp-admin/edit-link-form.php:131 +msgid "This will be shown when someone hovers over the link in the blogroll, or optionally below the link." +msgstr "Detta kommer att visas om man för muspekaren över en länk i länklistan eller valfritt under länken." + +#: wp-admin/import.php:96 +msgid "No importers are available." +msgstr "Inga tillgängliga importörer." + +#: wp-admin/theme-install.php:117 +msgid "To install the theme so you can preview it with your site’s content and customize its theme options, click the \"Install\" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the \"Activate\" link, or by navigating to your Manage Themes screen and clicking the \"Live Preview\" link under any installed theme’s thumbnail image." +msgstr "För att installera temat så att du kan förhandsgranska din webbplats innehåll och anpassa temainställningar, klicka på knappen \"Installera\" uppe till vänster. Filerna för temat kommer att laddas ner till din webbplats automatiskt. När detta är klart så kan temat aktiveras, vilket du gör genom att klicka på länken \"Aktivera\" eller genom att navigera dig fram till sidan med installerade teman och klicka på länken \"Förhandsgranska live\" under temats miniatyrbild." + +#: wp-admin/edit-form-advanced.php:295 +msgid "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." +msgstr "Att skapa en sida påminner mycket om att skapa ett inlägg och panelerna kan anpassas på samma sätt genom att använda dra och släpp, fliken Panelinställningar och minimera/maximera paneler efter egna önskemål. Denna sida har även det nya fullskärmsläget som är tillgängligt både i det visuella- och Text-läget via knappen för fullskärmsläget. Sidredigeraren fungerar i stort på samma sätt som inläggsredigeraren, men det finns vissa sidspecifika funktioner i panelen Sidattribut:" + +#: wp-admin/menu-header.php:264 +msgid "Skip to main content" +msgstr "Hoppa till innehåll" + +#: wp-admin/user-new.php:297 +msgid "User has been added to your site." +msgstr "Användare har lagts till på din webbplats." + +#: wp-admin/custom-background.php:331 +msgid "Choose a Background Image" +msgstr "Välj en bakgrundsbild" + +#: wp-admin/users.php:56 +msgid "Remove allows you to remove a user from your site. It does not delete their content. You can also remove multiple users at once by using Bulk Actions." +msgstr "Ta bort låter dig att ta bort användare från din webbplats med tar inte bort deras innehåll. Du kan även ta bort flera användare samtidigt genom att använda massåtgärder." + +#: wp-admin/themes.php:87 +msgid "Manage Themes" +msgstr "Hantera teman" + +#: wp-admin/widgets.php:406 +msgid "Enable accessibility mode" +msgstr "Aktivera kompatibilitetsläge" + +#: wp-admin/widgets.php:406 +msgid "Disable accessibility mode" +msgstr "Inaktivera kompatibilitetsläge" + +#: wp-admin/link-add.php:16 +msgid "Add New Link" +msgstr "Lägg till ny länk" + +#: wp-admin/media-new.php:42 +msgid "Upload New Media" +msgstr "Ladda upp ny mediafil" + +#: wp-admin/media.php:23 wp-admin/media.php:60 +msgid "Sorry, you are not allowed to edit this attachment." +msgstr "Du har inte behörighet att redigera den här bilagan." + +#: wp-admin/media.php:66 +msgid "You attempted to edit an attachment that doesn’t exist. Perhaps it was deleted?" +msgstr "Du försökte redigera en bilaga som inte existerar. Har den kanske raderats?" + +#: wp-admin/media.php:72 +msgid "You can’t edit this attachment because it is in the Trash. Please move it out of the Trash and try again." +msgstr "Du kan inte redigera denna bilaga eftersom den ligger i papperskorgen. Återställ den och försök igen." + +#: wp-admin/media.php:135 wp-admin/media.php:155 +msgid "Update Media" +msgstr "Uppdatera media" + +#. translators: add new file +#: wp-admin/media.php:128 wp-admin/upload.php:90 wp-admin/upload.php:270 +#: wp-admin/menu.php:57 +msgctxt "file" +msgid "Add New" +msgstr "Lägg till ny" + +#. translators: add new plugin +#: wp-admin/plugins.php:580 wp-admin/menu.php:230 +msgctxt "plugin" +msgid "Add New" +msgstr "Lägg till nytt" + +#: wp-admin/user-edit.php:31 wp-admin/user/menu.php:14 wp-admin/menu.php:239 +msgid "Profile" +msgstr "Profil" + +#: wp-admin/update-core.php:415 wp-admin/update-core.php:467 +#: wp-admin/update-core.php:819 wp-admin/update-core.php:824 +msgid "Update Themes" +msgstr "Uppdatera teman" + +#: wp-admin/edit-form-advanced.php:375 wp-admin/options-discussion.php:15 +msgid "Discussion Settings" +msgstr "Inställningar för diskussioner" + +#: wp-admin/options-discussion.php:46 wp-admin/options-discussion.php:47 +msgid "Default article settings" +msgstr "Förvalda inläggsinställningar" + +#: wp-admin/options-discussion.php:60 +msgid "These settings may be overridden for individual articles." +msgstr "Inställningarna för individuella inlägg går före dessa förvalda värden." + +#: wp-admin/options-discussion.php:64 wp-admin/options-discussion.php:65 +msgid "Other comment settings" +msgstr "Övriga inställningar för kommentarer" + +#: wp-admin/options-discussion.php:66 +msgid "Comment author must fill out name and email" +msgstr "Kommentarsförfattaren måste fylla i namn och e-postadress" + +#: wp-admin/options-media.php:51 +msgid "Image sizes" +msgstr "Bildstorlek" + +#: wp-admin/options-media.php:56 wp-admin/options-media.php:57 +msgid "Thumbnail size" +msgstr "Miniatyrstorlek" + +#: wp-admin/options-media.php:65 +msgid "Crop thumbnail to exact dimensions (normally thumbnails are proportional)" +msgstr "Beskär miniatyrer till exakta dimensioner (normalt är miniatyrer proportionella)" + +#: wp-admin/options-media.php:70 wp-admin/options-media.php:71 +msgid "Medium size" +msgstr "Mediumstorlek" + +#: wp-admin/options-media.php:72 wp-admin/options-media.php:83 +msgid "Max Width" +msgstr "Max bredd" + +#: wp-admin/options-media.php:75 wp-admin/options-media.php:86 +msgid "Max Height" +msgstr "Max höjd" + +#: wp-admin/options-media.php:81 wp-admin/options-media.php:82 +msgid "Large size" +msgstr "Stor storlek" + +#: wp-admin/options-media.php:107 +msgid "Uploading Files" +msgstr "Laddar upp filer" + +#: wp-admin/options-media.php:114 +msgid "Store uploads in this folder" +msgstr "Spara uppladdade filer i den här katalogen" + +#: wp-admin/options-media.php:126 +msgid "Full URL path to files" +msgstr "Full URL-sökväg till filer" + +#: wp-admin/options-media.php:128 +msgid "Configuring this is optional. By default, it should be blank." +msgstr "Konfigurering av det här är valfritt, som standard bör det lämnas tomt." + +#: wp-admin/options-media.php:139 +msgid "Organize my uploads into month- and year-based folders" +msgstr "Organisera mina uppladdade filer i kataloger enligt månad och år" + +#: wp-admin/options-permalink.php:16 wp-admin/options-permalink.php:32 +msgid "Permalink Settings" +msgstr "Permalänksinställningar" + +#: wp-admin/options-permalink.php:146 +msgid "Permalink structure updated. Remove write access on web.config file now!" +msgstr "Permalänksstrukturen uppdaterad. Återställ filrättigheterna för web.config-filen nu!" + +#: wp-admin/options-permalink.php:149 +msgid "You should update your .htaccess now." +msgstr "Du bör uppdatera din .htaccess nu." + +#: wp-admin/options-permalink.php:140 +msgid "Permalink structure updated." +msgstr "Permalänkstrukturen uppdaterad." + +#: wp-admin/options-permalink.php:204 +msgid "Day and name" +msgstr "Dag och namn" + +#: wp-admin/options-permalink.php:208 +msgid "Month and name" +msgstr "Månad och namn" + +#: wp-admin/options-permalink.php:212 +msgid "Numeric" +msgstr "Numerisk" + +#: wp-admin/options-permalink.php:222 +msgid "Custom Structure" +msgstr "Anpassad struktur" + +#: wp-admin/options-permalink.php:295 +msgid "Optional" +msgstr "Valfritt" + +#. translators: prefix for category permalinks +#: wp-admin/options-permalink.php:305 +msgid "Category base" +msgstr "Kategoribas" + +#: wp-admin/options-permalink.php:309 +msgid "Tag base" +msgstr "Taggbas" + +#. translators: %s: web.config +#: wp-admin/options-permalink.php:345 +msgid "If you temporarily make your %s file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved." +msgstr "Om du temporärt gör din fil %s skrivbar så kan WordPress att generera reglerna automatiskt, glöm inte att återställa rättigheterna efter att reglerna har sparats." + +#. translators: %s: web.config +#: wp-admin/options-permalink.php:370 +msgid "If you temporarily make your site’s root directory writable for us to generate the %s file automatically, do not forget to revert the permissions after the file has been created." +msgstr "Om du temporärt gör din rotkatalog för webbservern skrivbar för att WordPress ska kunna generera filen %s automatiskt, glöm inte att återställa rättigheterna efter att filen har skapats." + +#: wp-admin/options.php:318 +msgid "All Settings" +msgstr "Alla Inställningar" + +#: wp-admin/plugins.php:349 +msgid "Are you sure you wish to delete these files?" +msgstr "Är du säker på att du vill radera dessa filer?" + +#: wp-admin/plugins.php:362 +msgid "Yes, delete these files" +msgstr "Ja, radera dessa filer" + +#: wp-admin/plugins.php:368 +msgid "No, return me to the plugin list" +msgstr "Nej, skicka tillbaka mig till listan med tillägg" + +#: wp-admin/plugins.php:439 +msgid "Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here." +msgstr "Tillägg utvidgar och utvecklar WordPress funktioner. När ett tillägg är installerat kan du aktivera eller inaktivera det här." + +#. translators: WP_PLUGIN_DIR constant value +#: wp-admin/plugins.php:456 +msgid "If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the %s directory and it will be automatically deactivated." +msgstr "Om det uppstår ett fel i ett tillägg och du inte kan använda WordPress så kan du inaktivera det genom att radera eller byta namn på tilläggsfilen i katalogen %s." + +#. translators: 1: plugin file, 2: error message +#: wp-admin/plugins.php:487 +msgid "The plugin %1$s has been deactivated due to an error: %2$s" +msgstr "Tillägget %1$s har inaktiverats pga fel: %2$s" + +#: wp-admin/plugins.php:514 +msgid "Plugin could not be activated because it triggered a fatal error." +msgstr "Tillägget kunde inte aktiveras eftersom det orsakade ett allvarligt fel." + +#: wp-admin/plugins.php:542 +msgid "Plugin could not be deleted due to an error: %s" +msgstr "Tillägget kunde inte raderas pga av ett fel: %s" + +#: wp-admin/plugins.php:550 +msgid "The selected plugins have been deleted." +msgstr "Alla markerade tillägg har raderats." + +#: wp-admin/plugins.php:557 +msgid "Plugin activated." +msgstr "Tillägget aktiverat." + +#: wp-admin/plugins.php:559 +msgid "Selected plugins activated." +msgstr "Valda tillägg aktiverade." + +#: wp-admin/plugins.php:561 +msgid "Plugin deactivated." +msgstr "Tillägg inaktiverat." + +#: wp-admin/plugins.php:563 +msgid "Selected plugins deactivated." +msgstr "Valda tillägg inaktiverade." + +#: wp-admin/post.php:134 +msgid "You can’t edit this item because it is in the Trash. Please restore it and try again." +msgstr "Du kan inte redigera den här posten eftersom den ligger i papperskorgen. Återställ den och försök igen." + +#: wp-admin/edit-form-advanced.php:136 +msgid "View post" +msgstr "Visa inlägg" + +#. translators: %s: post title +#: wp-admin/revision.php:93 +msgid "Compare Revisions of “%s”" +msgstr "Jämför versioner av ”%s”" + +#: wp-admin/themes.php:212 +msgid "Theme deleted." +msgstr "Temat raderat." + +#: wp-admin/themes.php:375 +msgid "Broken Themes" +msgstr "Trasiga teman" + +#: wp-admin/update-core.php:124 +msgid "Hide this update" +msgstr "Dölj denna uppdatering" + +#: wp-admin/update-core.php:126 +msgid "Bring back this update" +msgstr "Visa denna uppdatering" + +#: wp-admin/update-core.php:131 +msgid "This localized version contains both the translation and various other localization fixes. You can skip upgrading if you want to keep your current translation." +msgstr "Denna språkversion innehåller både översättningen och diverse andra regionala anpassningar. Du kan hoppa över uppdateringen om du vill behålla nuvarande översättning." + +#: wp-admin/update-core.php:152 wp-admin/update-core.php:163 +msgid "Show hidden updates" +msgstr "Visa gömda uppdateringar" + +#: wp-admin/update-core.php:153 +msgid "Hide hidden updates" +msgstr "Göm gömda uppdateringar" + +#: wp-admin/update-core.php:293 wp-admin/update-core.php:300 +msgid "Compatibility with WordPress %1$s: 100%% (according to its author)" +msgstr "Kompatibilitet med WordPress %1$s: 100%% (enligt dess skapare)" + +#: wp-admin/update-core.php:295 wp-admin/update-core.php:302 +msgid "Compatibility with WordPress %1$s: Unknown" +msgstr "Kompatibilitet med WordPress %1$s: Okänt" + +#: wp-admin/upgrade.php:77 +msgid "Your WordPress database is already up-to-date!" +msgstr "Din databas för WordPress är redan uppdaterad!" + +#: wp-admin/upgrade.php:138 +msgid "%s queries" +msgstr "%s förfrågningar" + +#: wp-admin/upgrade.php:140 +msgid "%s seconds" +msgstr "%s sekunder" + +#: wp-admin/upload.php:313 wp-admin/upload.php:346 +msgid "Media file permanently deleted." +msgstr "Mediafil raderad permanent." + +#: wp-admin/upload.php:324 wp-admin/upload.php:348 +msgid "Media file moved to the trash." +msgstr "Mediafil flyttad till papperskorgen." + +#: wp-admin/upload.php:336 wp-admin/upload.php:349 +msgid "Media file restored from the trash." +msgstr "Mediafil återställd från papperskorgen." + +#: wp-admin/user-edit.php:198 +msgid "User updated." +msgstr "Användaren uppdaterad." + +#: wp-admin/user-edit.php:256 +msgid "Personal Options" +msgstr "Personliga inställningar" + +#: wp-admin/user-edit.php:262 +msgid "Disable the visual editor when writing" +msgstr "Stäng av den visuella redigeraren när du skriver" + +#: wp-admin/user-edit.php:311 +msgid "Enable keyboard shortcuts for comment moderation." +msgstr "Aktivera kortkommandon för kommentarsmoderering. " + +#: wp-admin/user-new.php:476 wp-admin/user-edit.php:429 +msgid "First Name" +msgstr "Förnamn" + +#: wp-admin/user-new.php:480 wp-admin/user-edit.php:434 +msgid "Last Name" +msgstr "Efternamn" + +#: wp-admin/user-edit.php:439 +msgid "Nickname" +msgstr "Smeknamn" + +#: wp-admin/user-edit.php:444 +msgid "Display name publicly as" +msgstr "Visa namn offentligt som" + +#: wp-admin/user-edit.php:483 +msgid "Contact Info" +msgstr "Kontaktinformation" + +#: wp-admin/user-edit.php:552 +msgid "About Yourself" +msgstr "Om dig själv" + +#: wp-admin/user-edit.php:552 +msgid "About the user" +msgstr "Om användaren" + +#: wp-admin/user-edit.php:556 +msgid "Biographical Info" +msgstr "Biografi" + +#: wp-admin/user-edit.php:558 +msgid "Share a little biographical information to fill out your profile. This may be shown publicly." +msgstr "Skriv ner några rader om dig själv. Det här visas eventuellt offentligt om ditt tema har stöd för det." + +#: wp-admin/user-edit.php:612 +msgid "New Password" +msgstr "Nytt lösenord" + +#: wp-admin/user-edit.php:636 +msgid "Type your new password again." +msgstr "Skriv ditt nya lösenord igen." + +#: wp-admin/user-edit.php:730 +msgid "Additional Capabilities" +msgstr "Ytterligare behörigheter" + +#: wp-admin/user-edit.php:755 +msgid "Update Profile" +msgstr "Uppdatera profil" + +#: wp-admin/user-edit.php:755 +msgid "Update User" +msgstr "Uppdatera användare" + +#. translators: Joining confirmation notification email subject. %s: Site title +#: wp-admin/user-new.php:127 +msgid "[%s] Joining Confirmation" +msgstr "[%s] Bekräftelse av ny användare" + +#: wp-admin/user-new.php:290 +msgid "Invitation email sent to new user. A confirmation link must be clicked before their account is created." +msgstr "E-postinbjudan skickad till den nya användaren. En bekräftelselänk måste besökas innan kontot skapas." + +#: wp-admin/user-new.php:410 wp-admin/user-new.php:551 +msgid "Skip Confirmation Email" +msgstr "Skippa bekräftelsemail" + +#: wp-admin/users.php:267 +msgid "Delete Users" +msgstr "Radera användare" + +#: wp-admin/users.php:340 +msgid "There are no valid users selected for deletion." +msgstr "Inga giltiga användare är valda för radering." + +#: wp-admin/users.php:499 +msgid "New user created." +msgstr "Ny användare skapad." + +#: wp-admin/users.php:506 +msgid "The current user’s role must have user editing capabilities." +msgstr "Den nuvarande användarens roll måste ha rättigheten för att ändra användares rättigheter." + +#: wp-admin/users.php:507 +msgid "Other user roles have been changed." +msgstr "Andra användares roller har ändrats." + +#: wp-admin/users.php:510 +msgid "You can’t delete the current user." +msgstr "Du kan inte radera den nuvarande användaren." + +#: wp-admin/users.php:511 +msgid "Other users have been deleted." +msgstr "Andra användare har raderats." + +#: wp-admin/widgets.php:126 +msgid "Inactive Widgets" +msgstr "Inaktiva widgetar" + +#: wp-admin/widgets.php:294 +msgid "Widget %s" +msgstr "Widget %s" + +#: wp-admin/widgets.php:307 +msgid "Select both the sidebar for this widget and the position of the widget in that sidebar." +msgstr "Välj både panel och position i den panelen för denna widget." + +#: wp-admin/widgets.php:309 +msgid "Position" +msgstr "Position" + +#: wp-admin/widgets.php:351 +msgid "Save Widget" +msgstr "Spara widget" + +#: wp-admin/widgets.php:373 +msgid "Error in displaying the widget settings form." +msgstr "Ett fel uppstod när inställningsformuläret för widgeten skulle visas." + +#: wp-admin/widgets.php:432 wp-admin/widgets.php:435 +msgid "Available Widgets" +msgstr "Tillgängliga widgetar" + +#: wp-admin/widgets.php:129 +msgid "Drag widgets here to remove them from the sidebar but keep their settings." +msgstr "Dra widgetar hit för att inaktivera dem på sidan men behålla dess inställningar." + +#: wp-admin/edit-comments.php:313 +msgid "This comment is already approved." +msgstr "Denna kommentar är redan godkänd." + +#: wp-admin/edit-comments.php:158 wp-admin/edit-comments.php:224 +msgid "Comments on “%s”" +msgstr "Kommentarer till ”%s”" + +#: wp-admin/plugins.php:321 +msgid "You are about to remove the following plugin:" +msgstr "Du är på väg att ta bort följande tillägg:" + +#: wp-admin/plugins.php:323 +msgid "Delete Plugins" +msgstr "Radera tillägg" + +#: wp-admin/plugins.php:317 +msgid "Delete Plugin" +msgstr "Radera tillägg" + +#: wp-admin/plugins.php:347 +msgid "Are you sure you wish to delete these files and data?" +msgstr "Är du säker på att du vill radera dessa filer och data?" + +#: wp-admin/plugins.php:362 +msgid "Yes, delete these files and data" +msgstr "Ja, ta bort dessa filer och data" + +#: wp-admin/about.php:260 +msgid "Go to Dashboard" +msgstr "Gå till adminpanelen" + +#: wp-admin/edit-comments.php:316 +msgid "This comment is already in the Trash." +msgstr "Denna kommentar ligger redan i papperskorgen." + +#: wp-admin/edit-comments.php:316 +msgid "View Trash" +msgstr "Visa papperskorg" + +#: wp-admin/edit-comments.php:319 +msgid "This comment is already marked as spam." +msgstr "Denna kommentar är redan markerad som skräp." + +#: wp-admin/user-edit.php:407 wp-admin/user-edit.php:409 +msgid "— No role for this site —" +msgstr "— Ingen roll för den här webbplatsen —" + +#: wp-admin/index.php:35 +msgid "Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab above the screen title." +msgstr "Välkommen till din adminpanel för WordPress! Det här är sidan du kommer att se när du loggar in på din webbplats. Den ger dig tillgång till alla administrativa sidor för att hantera din webbplats. Du kan hitta hjälp för alla sidor i administrationen genom att klicka på fliken Hjälp uppe i hörnet." + +#: wp-admin/update-core.php:626 wp-admin/update-core.php:669 +msgid "WordPress Updates" +msgstr "Uppdateringar för WordPress" + +#: wp-admin/update-core.php:530 +msgid "Update WordPress" +msgstr "Uppdatera WordPress" + +#: wp-admin/update-core.php:268 wp-admin/update-core.php:384 +#: wp-admin/update-core.php:781 wp-admin/update-core.php:785 +#: wp-admin/plugins.php:140 +msgid "Update Plugins" +msgstr "Uppdatera tillägg" + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number, +#. 3: Minimum required PHP version number, 4: Minimum required MySQL version +#. number, 5: Current PHP version number, 6: Current MySQL version number +#: wp-admin/update-core.php:89 wp-admin/upgrade.php:98 +msgid "You cannot update because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s." +msgstr "Du kan inte uppdatera eftersom WordPress %2$s kräver PHP-version %3$s eller högre och MySQL-version %4$s eller högre. Du använder PHP-version %5$s MySQL-version %6$s." + +#: wp-admin/edit-form-advanced.php:512 +msgid "Get Shortlink" +msgstr "Hämta kortlänk" + +#: wp-admin/nav-menus.php:892 wp-admin/nav-menus.php:1003 +msgid "Save Menu" +msgstr "Spara meny" + +#: wp-admin/user-new.php:304 +msgid "That user is already a member of this site." +msgstr "Den användaren är redan medlem på den här webbplatsen." + +#: wp-admin/user-new.php:293 +msgid "Invitation email sent to user. A confirmation link must be clicked for them to be added to your site." +msgstr "E-postinbjudan skickad till användaren. En bekräftelselänk måste besökas innan de läggs till på din webbplats." + +#: wp-admin/users.php:414 +msgid "You have specified these users for removal:" +msgstr "Du har markerat följande användare för radering:" + +#: wp-admin/options-media.php:19 +msgid "You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size." +msgstr "Du kan ange maximala storlekar för bilder som infogas i innehåll, du kan även infoga bilder i originalstorlek." + +#: wp-admin/update-core.php:265 +msgid "The following plugins have new versions available. Check the ones you want to update and then click “Update Plugins”." +msgstr "Följande tillägg har nya versioner tillgängliga. Markera de som du vill uppdatera och klicka sedan på ”Uppdatera tillägg”." + +#: wp-admin/post.php:280 wp-admin/upload.php:179 wp-admin/edit.php:142 +msgid "Error in restoring from Trash." +msgstr "Fel vid återställning från papperskorgen." + +#: wp-admin/user-edit.php:391 +msgid "Usernames cannot be changed." +msgstr "Användarnamn kan inte ändras." + +#: wp-admin/post.php:276 wp-admin/upload.php:175 wp-admin/edit.php:138 +msgid "Sorry, you are not allowed to restore this item from the Trash." +msgstr "Du har inte behörighet att återställa det här objektet från papperskorgen." + +#: wp-admin/post.php:250 wp-admin/upload.php:158 wp-admin/edit.php:119 +msgid "Error in moving to Trash." +msgstr "Fel vid förflyttning till papperskorgen." + +#: wp-admin/edit-form-advanced.php:188 +msgid "Page saved." +msgstr "Sidan sparad." + +#: wp-admin/user-edit.php:421 +msgid "Grant this user super admin privileges for the Network." +msgstr "Ge den här användaren superadminbehörigheter för nätverket." + +#: wp-admin/user-edit.php:191 +msgid "This user has super admin privileges." +msgstr "Den här användaren har superadminbehörigheter." + +#: wp-admin/update-core.php:403 +msgid "The following themes have new versions available. Check the ones you want to update and then click “Update Themes”." +msgstr "Följande teman har nya versioner tillgängliga. Markera de som du vill uppdatera och klicka sedan på “Uppdatera teman“." + +#. translators: %s: number of comments restored from the Trash +#: wp-admin/edit-comments.php:302 +msgid "%s comment restored from the Trash" +msgid_plural "%s comments restored from the Trash" +msgstr[0] "%s kommentar återställd från papperskorgen" +msgstr[1] "%s kommentarer återställda från papperskorgen" + +#. translators: %s: number of comments moved to the Trash +#: wp-admin/edit-comments.php:297 +msgid "%s comment moved to the Trash." +msgid_plural "%s comments moved to the Trash." +msgstr[0] "%s kommentar flyttad till papperskorgen." +msgstr[1] "%s kommentarer flyttade till papperskorgen." + +#: wp-admin/custom-background.php:297 +msgid "This will remove the background image. You will not be able to restore any customizations." +msgstr "Det här tar bort bakgrundsbilden. Du kommer inte kunna återställa några förändringar." + +#: wp-admin/custom-background.php:341 +msgid "Display Options" +msgstr "Visningsalternativ" + +#: wp-admin/custom-background.php:93 +msgid "Don’t forget to click on the Save Changes button when you are finished." +msgstr "Glöm inte att klicka på knappen Spara ändringar när du är klar." + +#: wp-admin/post.php:241 wp-admin/upload.php:154 wp-admin/edit.php:110 +msgid "Sorry, you are not allowed to move this item to the Trash." +msgstr "Du har inte behörighet att flytta det här objektet till papperskorgen." + +#: wp-admin/users.php:159 wp-admin/users.php:217 +msgid "User deletion is not allowed from this screen." +msgstr "Radering av användare är inte tillåtet via denna skärm." + +#: wp-admin/users.php:436 +msgid "Confirm Removal" +msgstr "Bekräfta borttagning" + +#: wp-admin/users.php:438 +msgid "There are no valid users selected for removal." +msgstr "Inga giltiga användare är valda för borttagning." + +#: wp-admin/users.php:517 +msgid "You can't remove the current user." +msgstr "Du kan inte radera den nuvarande användaren." + +#: wp-admin/users.php:518 +msgid "Other users have been removed." +msgstr "Andra användare har tagits bort." + +#: wp-admin/post.php:304 wp-admin/post.php:308 wp-admin/upload.php:194 +#: wp-admin/edit.php:160 wp-admin/edit.php:164 +msgid "Error in deleting." +msgstr "Fel vid radering." + +#: wp-admin/import.php:72 +msgid "If you have posts or comments in another system, WordPress can import those into this site. To get started, choose a system to import from below:" +msgstr "Om du har inlägg eller kommentarer i ett annat system kan WordPress importera dem till den här webbplatsen. Välj ett system att importera från för att sätta igång:" + +#: wp-admin/custom-background.php:311 +msgid "This will restore the original background image. You will not be able to restore any customizations." +msgstr "Det här återställer den ursprunliga bakgrundsbilden. Du kommer inte kunna återställa några tidigare gjorda förändringar." + +#: wp-admin/plugins.php:611 +msgid "Search Installed Plugins" +msgstr "Sök bland installerade tillägg" + +#: wp-admin/users.php:409 +msgid "Remove Users from Site" +msgstr "Ta bort användare från webbplats" + +#. translators: %s: Featured Image +#: wp-admin/edit-form-advanced.php:356 +msgid "%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." +msgstr "%s — Den här funktionen tillåter dig att associera en bild med ditt inlägg utan att infoga den. Detta är endast användbart om ditt tema har stöd för funktionen att använda utvalda bilder som inläggsminiatyrer på startsidan, i ett anpassat sidhuvud, osv." + +#: wp-admin/update-core.php:364 wp-admin/update-core.php:448 +msgid "You have version %1$s installed. Update to %2$s." +msgstr "Du har version %1$s installerad. Uppdatera till %2$s." + +#: wp-admin/custom-background.php:296 +msgid "Remove Background Image" +msgstr "Ta bort bakgrundsbild" + +#: wp-admin/users.php:42 +msgid "You can customize the display of this screen in a number of ways:" +msgstr "Du kan anpassa visningen för den här skärmen på ett antal olika sätt:" + +#: wp-admin/widgets.php:67 +msgid "Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required." +msgstr "Widgetar kan användas flera gånger. Du kan ange en titel som visas på din sida för varje widget, men det är inte obligatoriskt." + +#: wp-admin/user-new.php:245 +msgid "Contributors can write and manage their posts but not publish posts or upload media files." +msgstr "Medarbetare kan skapa och hantera sina egna inlägg, men kan inte publicera inlägg eller ladda upp mediafiler." + +#: wp-admin/user-new.php:248 +msgid "Administrators have access to all the administration features." +msgstr "Administratörer har behörigheter till alla administrativa funktioner." + +#: wp-admin/widgets.php:68 +msgid "Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop." +msgstr "Att aktivera kompatibilitetsläge via Panelinställningar tillåter dig att använda knapparna Lägg till och Redigera istället för dra och släpp." + +#: wp-admin/edit-form-advanced.php:271 +msgid "Title — Enter a title for your post. After you enter a title, you’ll see the permalink below, which you can edit." +msgstr "Titel — Ange en titel för ditt inlägg. När du angivit en titel så kommer du att se permalänken nedan, vilken du sedan kan redigera." + +#: wp-admin/update-core.php:236 +msgid "While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, your site will return to normal." +msgstr "Under den tid som din webbplats uppdateras så kommer den att sättas i underhållsläge. Så snart uppdateringen är genomförd så återgår webbplatsen till normalt läge igen." + +#: wp-admin/widgets.php:57 +msgid "Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them." +msgstr "Widgetar är oberoende delar av innehåll som kan placeras i de widgetfält som finns i ditt tema (allmänt kallat sidopanel). För att fylla dina sidopaneler/widgetfält med enskilda widgetar, dra och släpp titellisterna till önskat fält. Som standard så är bara den första widgetfältet utvidgat. Om du vill fylla ytterligare widgetfält, klicka på deras titelrad för att expandera dem." + +#: wp-admin/edit-form-advanced.php:370 +msgid "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." +msgstr "Diskussion - Du kan stänga av kommentarer/pingar och om det finns kommentarer till inlägget så kan du se och moderera dem här." + +#: wp-admin/plugins.php:453 +msgid "Most of the time, plugins play nicely with the core of WordPress and with other plugins. Sometimes, though, a plugin’s code will get in the way of another plugin, causing compatibility issues. If your site starts doing strange things, this may be the problem. Try deactivating all your plugins and re-activating them in various combinations until you isolate which one(s) caused the issue." +msgstr "För det mesta så fungerar tillägg bra med WordPress och andra tillägg. Ibland kan det dock vara så att ett tillägg kan störa ett annat tillägg och skapa kompabilitetsproblem. Om din webbplats börjar bete sig märkligt, så kan just detta vara problemet. Försök att inaktivera alla dina tillägg och återaktivera dem i olika kombinationer tills du isolerar vilka tillägg som orsakar problemen." + +#. translators: %s: /wp-content/themes +#: wp-admin/theme-install.php:103 +msgid "You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your %s directory." +msgstr "Du kan ladda upp ett tema manuellt om du redan har laddat ner dess ZIP-arkiv på din dator (se till att det kommer från en betrodd och ursprunglig källa). Du kan också göra det på det gamla vanliga sättet och ladda upp den uppackade temamappen via FTP till din %s-mapp." + +#: wp-admin/update-core.php:252 +msgid "Your plugins are all up to date." +msgstr "Du har den senaste versionen av alla tillägg." + +#: wp-admin/update-core.php:190 +msgid "You have the latest version of WordPress." +msgstr "Du har den senaste versionen av WordPress." + +#: wp-admin/update-core.php:396 +msgid "Your themes are all up to date." +msgstr "Du har den senaste versionen av alla teman." + +#: wp-admin/edit-form-advanced.php:381 +msgid "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." +msgstr "Mall — Vissa teman har anpassade mallar som kan användas för speciella sidor som kanske har extra funktioner eller anpassad layout. Om det finns mallar tillgängliga så kommer dessa att visas i denna rullgardinsmeny." + +#: wp-admin/edit-form-advanced.php:380 +msgid "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." +msgstr "Överordnad — Du kan arrangera dina sidor i hierarkier. Till exempel kan du ha en sida ”Om” som har sidorna ”Min historia” och ”Min katt” under sig. Det finns inga gränser för hur många nivåer du kan nästla sidor." + +#: wp-admin/update-core.php:213 +msgid "An updated version of WordPress is available." +msgstr "En uppdaterad version av WordPress finns tillgänglig" + +#: wp-admin/themes.php:231 wp-admin/import.php:64 wp-admin/users.php:270 +msgid "ERROR:" +msgstr "FEL:" + +#: wp-admin/import.php:24 +msgid "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." +msgstr "Den här sidan länkar till tillägg för att importera innehåll från andra system. Välj den plattform du vill importera från och klicka på Installera nu när du ombedes i popup-fönstret. Om din plattform inte är med i listan, klicka på länken för att söka i tilläggsförrådet efter andra importeringstillägg för se om det finns något för din plattform." + +#: wp-admin/options-permalink.php:44 +msgid "The Optional fields let you customize the “category” and “tag” base names that will appear in archive URLs. For example, the page listing all posts in the “Uncategorized” category could be /topics/uncategorized instead of /category/uncategorized." +msgstr "Fälten under valfritt låter dig anpassa basnamnen som visas i arkiv-urler istället för ”category” eller ”tag.” T.ex, sidan som visar alla inlägg för kategori ”okategoriserade” skulle kunna bli /amnen/okategoriserade istället för /category/okategoriserade." + +#: wp-admin/edit-link-form.php:66 +msgid "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." +msgstr "Du kan lägga till länkar på den här sidan genom att ange dess information i varder panel. Endast länkens webbadress och namn (texten du vill ska visas på din sida som en länk) är obligatoriska." + +#: wp-admin/edit-link-form.php:67 +msgid "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." +msgstr "Panelerna för länknamn, webbadress och beskrivning har en fixerad position, medans de andra kan arrangeras om genom att använda dra och släpp. Du kan också gömma paneler som inte används under fliken Panelinställningar eller minimera paneler genom att klicka på titelraden för panelen i fråga." + +#: wp-admin/user-edit.php:52 +msgid "Your username cannot be changed, but you can use other fields to enter your real name or a nickname, and change which name to display on your posts." +msgstr "Ditt användarnamn kan inte ändras, men du kan använda något av övriga fält för att ange ett riktigt namn eller smeknamn och för att ändra vilket visningsnamn som ska visas i dina inlägg." + +#: wp-admin/user-edit.php:54 +msgid "Required fields are indicated; the rest are optional. Profile information will only be displayed if your theme is set up to do so." +msgstr "Obligatoriska fält är markerade, resterande fält är valfria. Profilinformation visas endast om temat är konfigurerat för det." + +#: wp-admin/user-edit.php:55 +msgid "Remember to click the Update Profile button when you are finished." +msgstr "Glöm inte att klicka på knappen Uppdatera profil när du är klar." + +#: wp-admin/user-new.php:247 +msgid "Editors can publish posts, manage posts as well as manage other people’s posts, etc." +msgstr "Redaktörer kan publicera inlägg, hantera inlägg och även andra användares inlägg, osv." + +#: wp-admin/widgets.php:66 +msgid "If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas." +msgstr "Om du vill ta bort widgetar men spara dess inställningar för framtida användning, dra helt enkelt bara widgeten till panelen Inaktiva widgetar. Du kan när som helst återanvända dessa widgetar. Kan vara särskilt användbart när man byter till ett tema med en annan uppsättning widgetar." + +#: wp-admin/users.php:34 +msgid "To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section." +msgstr "För att lägga till nya användare på din webbplats, klicka på knappen Lägg till ny överst på sidan eller Lägg till ny i menysektionen för användare." + +#: wp-admin/options-permalink.php:35 +msgid "When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %category% or %tag%." +msgstr "När du tilldelar inlägg flera kategorier eller taggar så kan endast en av dessa visas som i din permalänksstruktur, den lägst numrerade kategorin. Detta innefattar anpassade strukturer som använder %category% eller %tag%." + +#: wp-admin/custom-background.php:90 +msgid "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." +msgstr "Du kan anpassa utseendet på din webbplats utan att behöva röra någon kod i temat genom att använda en anpassad bakgrundsbild. Din bakgrund kan vara en bild eller en färg." + +#: wp-admin/user-edit.php:49 +msgid "Your profile contains information about you (your “account”) as well as some personal options related to using WordPress." +msgstr "Din profil innehåller information om dig (ditt ”konto”) och ett antal personliga inställningar för användning av WordPress." + +#: wp-admin/edit-form-advanced.php:382 +msgid "Order — Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field." +msgstr "Ordning — Sidor ordnas vanligtvis alfabetiskt, men du kan ange en siffra (1 för första, osv.) i detta fält för att ändra ordning i vilken sidorna ska visas." + +#: wp-admin/edit-form-advanced.php:369 +msgid "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." +msgstr "Skicka trackbacks — Trackbacks är ett sätt att notifiera olika bloggsystem att du har länkat till dem. Ange URL(erna) du vill skicka trackbacks till. Om du länkar till andra WordPress-webbplatser så notifieras dessa automatiskt genom att använda pingbacks, då behöver inget anges i detta fält." + +#: wp-admin/options-permalink.php:34 +msgid "If you pick an option other than Plain, your general URL path with structure tags (terms surrounded by %) will also appear in the custom structure field and your path can be further modified there." +msgstr "Om du väljer ett annat alternativ än Förvald så kommer din standardsökväg med strukturtaggar (termer omgivna av %) också att visas i fältet för anpassad struktur och din sökväg kan modifieras ytterligare i detta fält." + +#: wp-admin/edit-form-advanced.php:288 +msgid "You can also create posts with the Press This bookmarklet." +msgstr "Du kan även skapa inlägg med genvägen Blogga det här." + +#: wp-admin/widgets.php:76 +msgid "Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area." +msgstr "Många teman visar ett par widgetar som standard tills du redigera din sidopaneler, men de visas inte automatiskt i widgethanteraren. När du gör dina första ändringar för widgetfälten så kan du lägga till motsvarande standardwidgets från panelen Tillgängliga widgetar." + +#: wp-admin/edit-link-form.php:68 +msgid "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." +msgstr "XFN står för XHTML Friends Network, vilket är valfritt att ange. WordPress tillåter generering av XFN-attribut för att visa vilken relation du har till författaren/ägaren av webbplatsen du länkar till." + +#. translators: %s: link to documentation on child themes +#: wp-admin/update-core.php:408 +msgid "Please Note: Any customizations you have made to theme files will be lost. Please consider using child themes for modifications." +msgstr "Notera: Alla anpassningar du har genomfört i temats filer går förlorade. Vänligen överväg att använda barnteman för modifikationer." + +#: wp-admin/update-core.php:676 +msgid "Please select one or more plugins to update." +msgstr "Välj ett eller flera tillägg att uppdatera." + +#: wp-admin/update-core.php:674 +msgid "Please select one or more themes to update." +msgstr "Välj ett eller flera teman att uppdatera." + +#. translators: 1: date, 2: time +#: wp-admin/update-core.php:690 +msgid "Last checked on %1$s at %2$s." +msgstr "Senast kontrollerat den %1$s kl. %2$s." + +#: wp-admin/update-core.php:691 +msgid "Check Again" +msgstr "Kontrollera igen" + +#: wp-admin/theme-install.php:206 wp-admin/theme-install.php:226 +msgid "Apply Filters" +msgstr "Tillämpa filter" + +#: wp-admin/themes.php:168 +msgid "Search Installed Themes" +msgstr "Sök bland installerade teman" + +#: wp-admin/themes.php:169 +msgid "Search installed themes..." +msgstr "Sök bland installerade teman..." + +#: wp-admin/upgrade.php:122 +msgid "Update WordPress Database" +msgstr "Uppdatera WordPress databas" + +#: wp-admin/update-core.php:134 +msgid "You are about to install WordPress %s in English (US). There is a chance this update will break your translation. You may prefer to wait for the localized version to be released." +msgstr "Dessa knappar (om)installerar WordPress %s på engelska (US). Detta kan medföra att ditt nuvarande svenska språkpaket inte kommer att fungera som det ska. Du kanske hellre vill vänta tills den nya svenska versionen släpps (visas ovanför den engelska när den är tillgänglig)." + +#: wp-admin/widgets.php:58 +msgid "The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget." +msgstr "Sektionen Tillgängliga widgetar innehåller alla widgetar som du kan välja mellan. När du drar en widget till en sidopanel så kommer den att öppna för att låta dig konfigurera dess inställningar. När du är nöjd med widgeten inställningarna klickar du på knappen Spara och widget kommer att visas live på din webbplats. Om du klickar Ta bort så tas widgeten bort." + +#: wp-admin/upgrade.php:121 +msgid "The database update process may take a little while, so please be patient." +msgstr "Uppdateringen av databasen kan ta en liten stund, ha tålamod." + +#: wp-admin/upgrade.php:65 +msgid "WordPress › Update" +msgstr "WordPress › Uppdatera" + +#: wp-admin/user-edit.php:423 +msgid "Super admin privileges cannot be removed because this user has the network admin email." +msgstr "Superadmin privilegier kan inte tas bort eftersom den här användaren har e-postadressen för nätverketsadmin." + +#: wp-admin/upgrade.php:132 +msgid "Update Complete" +msgstr "Uppdatering klar" + +#: wp-admin/user-new.php:379 +msgid "Email or Username" +msgstr "E-post eller användarnamn" + +#: wp-admin/media.php:89 wp-admin/edit-form-advanced.php:320 +msgid "Remember to click Update Media to save metadata entered or changed." +msgstr "Kom ihåg att klicka på Uppdatera Media för att spara metadata som angivits eller ändrats." + +#: wp-admin/media.php:88 wp-admin/edit-form-advanced.php:319 +msgid "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." +msgstr "Notera att du beskära bilden genom att klicka på den (beskärningsverktyget är redan markerat) och dra beskärningsramen för att välja önskad del. Klicka sedan på Spara för att spara vald beskärning." + +#: wp-admin/media.php:87 wp-admin/edit-form-advanced.php:318 +msgid "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." +msgstr "Endast för bilder, du kan klicka på Redigera bild under bilden för att öppna en bildredigerare med verktyg för att beskära, rotera eller vända bilden liksom för att ångra och göra om. Rutorna till höger ger dig fler alternativ för att ändra skalan på bilden, för beskära den, och för att beskära miniatyrbilden på ett annat sätt än du beskära den ursprungliga bilden. Du kan klicka på Hjälp i panelerna för att få mer information." + +#: wp-admin/media.php:86 +msgid "This screen allows you to edit five fields for metadata in a file within the media library." +msgstr "Den här sidan tillåter dig att redigera fem fält för metadata för en fil i mediebiblioteket." + +#: wp-admin/upgrade.php:119 +msgid "Database Update Required" +msgstr "Uppdatering av databasen krävs" + +#: wp-admin/upgrade.php:120 +msgid "WordPress has been updated! Before we send you on your way, we have to update your database to the newest version." +msgstr "WordPress har uppdaterats! Innan vi skickar dig vidare så måste vi uppdatera din databas till den senaste versionen." + +#: wp-admin/index.php:73 +msgid "The boxes on your Dashboard screen are:" +msgstr "Panelerna som visas i administrationen är:" + +#: wp-admin/upgrade.php:76 +msgid "No Update Required" +msgstr "Ingen uppdatering nödvändig" + +#: wp-admin/users.php:33 +msgid "This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role." +msgstr "Den här sidan listar alla existerande användare för din webbplats. Varje användare har en av fem roller som definierats av webbplatsadministratören: Webbplatsadministratör, Redaktör, Författare, Medarbetare eller Prenumerant. Användare med roller annat än Administratör kommer se färre val i administrationen när de är inloggade, baserat på roll." + +#: wp-admin/plugins.php:319 +msgid "This plugin may be active on other sites in the network." +msgstr "Detta tillägg kan vara aktivt på andra webbplatser i nätverket. " + +#: wp-admin/user-edit.php:229 wp-admin/users.php:556 +msgctxt "user" +msgid "Add Existing" +msgstr "Lägg till befintlig" + +#: wp-admin/user-edit.php:201 +msgid "← Back to Users" +msgstr "← Tillbaka till användare" + +#: wp-admin/menu-header.php:263 +msgid "Main menu" +msgstr "Huvudmeny" + +#: wp-admin/users.php:277 +msgid "You have specified these users for deletion:" +msgstr "Du har markerat följande användare för radering:" + +#: wp-admin/users.php:275 +msgid "You have specified this user for deletion:" +msgstr "Du har markerat denna användare för radering:" + +#. translators: URL to wp-admin/import.php +#: wp-admin/import.php:164 +msgid "This importer is not installed. Please install importers from the main site." +msgstr "Denna importör har inte installerats. Installera importörer från huvudsidan." + +#. translators: %s: https://wordpressfoundation.org/trademark-policy +#: wp-admin/freedoms.php:125 +msgid "WordPress grows when people like you tell their friends about it, and the thousands of businesses and services that are built on and around WordPress share that fact with their users. We’re flattered every time someone spreads the good word, just make sure to check out our trademark guidelines first." +msgstr "WordPress växer när människor som du berätta för sina vänner om det, och de tusentals företag och tjänster som bygger på och runt WordPress delar med sig av detta faktum med sina användare. Vi är smickrade varje gång någon sprider det goda ordet, se bara till att kolla in våra riktlinjer för varumärken först." + +#: wp-admin/widgets.php:435 +msgctxt "removing-widget" +msgid "Deactivate" +msgstr "Inaktivera" + +#: wp-admin/menu-header.php:257 +msgid "Collapse menu" +msgstr "Minimera meny" + +#: wp-admin/freedoms.php:138 +msgid "Don’t you wish all software came with these freedoms? So do we! For more information, check out the Free Software Foundation." +msgstr "Önskar du inte alla program kom med dessa friheter? Det gör vi! För mer information, se Free Software Foundation." + +#. translators: %s: https://wordpress.org/about/license +#: wp-admin/freedoms.php:93 +msgid "WordPress is Free and open source software, built by a distributed community of mostly volunteer developers from around the world. WordPress comes with some awesome, worldview-changing rights courtesy of its license, the GPL." +msgstr "WordPress är fri och öppen källkod, byggt av en distribuerad gemenskap av mestadels frivilliga utvecklare från hela världen. WordPress kommer med några grymma, världsbildsförändrande rättigheter med hjälp av sin licens, GPL." + +#. translators: %s: https://wordpress.org/about/license +#: wp-admin/freedoms.php:134 +msgid "Every plugin and theme in WordPress.org’s directory is 100%% GPL or a similarly free and compatible license, so you can feel safe finding 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." +msgstr "Alla tillägg och tema i katalogen på WordPress.org är 100%% GPL eller liknande fri och kompatibel licens, så att du kan känna dig trygg med att hitta tillägg och teman där. Om du skaffar ett tillägg eller tema från en annan källa, se till att först fråga dem om det är GPL. Om de inte respekterar WordPress-licensen så rekommenderar vi dem inte." + +#: wp-admin/update-core.php:63 +msgid "Re-install Now" +msgstr "Ominstallera nu" + +#. translators: %s: Theme Directory URL +#: wp-admin/theme-install.php:96 +msgid "You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the WordPress Theme Directory. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses." +msgstr "Du kan hitta ytterligare teman för din webbplats med hjälp av temakatalogen på den här sidan. Teman hämtas från WordPress.orgs temakatalog. Dessa teman har skapats av oberoende utvecklare, är kompatibla med licensen som WordPress använder (GPL) och är gratis." + +#: wp-admin/themes.php:385 +msgctxt "theme name" +msgid "Name" +msgstr "Namn" + +#. translators: %s: WordPress Plugin Directory URL +#: wp-admin/plugins.php:443 +msgid "If you would like to see more plugins to choose from, click on the “Add New” button and you will be able to browse or search for additional plugins from the WordPress Plugin Directory. Plugins in the WordPress Plugin Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!" +msgstr "Om du vill se fler tillägg att välja mellan, klicka på knappen ”Lägg till” så får du möjlighet att bläddra bland och söka efter andra tillägg i tilläggskatalogen på WordPress.org. Tillägg i katalogen på WordPress.org är designade och är utvecklade av oberoende utvecklare. Alla tillägg har licenser som är kompatibla med WordPress och är gratis!" + +#: wp-admin/options-discussion.php:50 +msgid "Attempt to notify any blogs linked to from the article" +msgstr "Försök meddela alla bloggar som länkas från den posten" + +#: wp-admin/index.php:49 +msgid "The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom." +msgstr "Den vänstra navigationsmenyn innehåller länkar till alla WordPress administrativa sidor, med undermenyer som visas när muspekaren föres över. Du kan minimera denna meny för att istället visa en smal remsa ikoner genom att klicka på Minimera meny-pilen längst ner." + +#: wp-admin/index.php:55 +msgid "Navigation" +msgstr "Navigation" + +#: wp-admin/options.php:218 +msgid "ERROR: options page not found." +msgstr "FEL: Inställningssidan kunde inte hittas." + +#: wp-admin/options-permalink.php:216 +msgid "Post name" +msgstr "Inläggsnamn" + +#: wp-admin/options-permalink.php:205 wp-admin/options-permalink.php:209 +#: wp-admin/options-permalink.php:217 +msgctxt "sample permalink structure" +msgid "sample-post" +msgstr "exempel-inlagg" + +#: wp-admin/options-permalink.php:193 wp-admin/options-permalink.php:213 +msgctxt "sample permalink base" +msgid "archives" +msgstr "arkiv" + +#: wp-admin/user-new.php:209 wp-admin/user-new.php:330 +#: wp-admin/user-new.php:439 wp-admin/user-new.php:565 wp-admin/menu.php:256 +#: wp-admin/menu.php:258 +msgid "Add New User" +msgstr "Lägg till ny användare" + +#: wp-admin/edit-form-advanced.php:300 +msgid "About Pages" +msgstr "Om sidor" + +#: wp-admin/index.php:62 +msgid "Drag and Drop — To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box." +msgstr "Dra och släpp — För att ordna panelerna, dra och släppa genom att klicka på namnlisten för den valda panelen och släpp när du ser en grå streckad rektangel på den plats du vill placera panelen." + +#. translators: %s: plugin version +#: wp-admin/update-core.php:338 +msgid "View version %s details." +msgstr "Visa detaljer för version %s." + +#: wp-admin/index.php:60 +msgid "You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well." +msgstr "Du kan använda följande kontroller för att arrangera dina administrationspaneler så att de passar ditt arbetsflöde. Detta gäller även på de flesta andra administrativa sidor." + +#: wp-admin/user-new.php:321 +msgid "User added." +msgstr "Användare har lagts till." + +#: wp-admin/users.php:352 wp-admin/users.php:384 +msgid "You can’t remove users." +msgstr "Du har inte tillräcklig behörighet för att radera användare." + +#: wp-admin/users.php:503 +msgid "Changed roles." +msgstr "Rollerna är ändrade." + +#: wp-admin/users.php:514 +msgid "User removed from this site." +msgstr "Användaren har tagits bort från den här webbplatsen." + +#: wp-admin/user-new.php:332 wp-admin/user-new.php:371 +#: wp-admin/user-new.php:432 +msgid "Add Existing User" +msgstr "Lägg till befintlig användare" + +#: wp-admin/edit-form-advanced.php:266 +msgid "Customizing This Display" +msgstr "Anpassa denna vy" + +#: wp-admin/edit-form-advanced.php:282 +msgid "Title and Post Editor" +msgstr "Rubrik- och inläggsredigerare" + +#: wp-admin/user-edit.php:227 wp-admin/users.php:554 wp-admin/menu.php:246 +#: wp-admin/menu.php:248 +msgctxt "user" +msgid "Add New" +msgstr "Lägg till ny" + +#: wp-admin/options-media.php:22 +msgid "Uploading Files allows you to choose the folder and path for storing your uploaded files." +msgstr "Ladda upp filer låter dig välja den mapp och sökväg du vill använda för lagring av dina uppladdade filer." + +#: wp-admin/themes.php:112 +msgid "Installing themes on Multisite can only be done from the Network Admin section." +msgstr "Installera teman i ett nätverk kan endast göras från sektionen för nätverksadmin." + +#: wp-admin/options-permalink.php:23 +msgid "Permalinks are the permanent URLs to your individual pages and blog posts, as well as your category and tag archives. A permalink is the web address used to link to your content. The URL to each post should be permanent, and never change — hence the name permalink." +msgstr "Permalänkar är permanenta webbadresser till dina enskilda sidor och blogginlägg, liksom ditt kategori- och taggarkiv. En permalänk är webbadressen som används för att länka till ditt innehåll. Webbadressen för varje post bör vara permanent, och aldrig förändras - därav namnet permalänk (på svenska en förkortad variant på permanent länk)." + +#: wp-admin/tools.php:63 +msgid "If you want to convert your categories to tags (or vice versa), use the Categories and Tags Converter available from the Import screen." +msgstr "Om du vill konvertera dina kategorier till taggar (eller tvärtom), använd Kategori- och tagg-konverteraren som kan hittas på importeringssidan." + +#: wp-admin/user-new.php:228 +msgid "Remember to click the Add New User button at the bottom of this screen when you are finished." +msgstr "Glöm inte att klicka på knappen Lägg till användare längst ner på sidan när du är klar." + +#. translators: 1: WordPress version number, 2: plural number of bugs. Singular +#. security issue. +#: wp-admin/about.php:291 +msgid "Version %1$s addressed a security issue and fixed %2$s bug." +msgid_plural "Version %1$s addressed a security issue and fixed %2$s bugs." +msgstr[0] "Version %1$s åtgärdar en säkerhetsrisk och %2$s bugg." +msgstr[1] "Version %1$s åtgärdar en säkerhetsrisk och %2$s buggar." + +#: wp-admin/widgets.php:107 +msgid "Inactive Sidebar (not used)" +msgstr "Inaktiv sidopanel (används inte)" + +#: wp-admin/widgets.php:110 +msgid "This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar." +msgstr "Denna sidopanel är inte längre tillgänglig och visas inte någonstans på din webbplats. Ta bort varje widget nedan för att helt ta bort denna inaktiva sidopanel." + +#: wp-admin/user-edit.php:50 +msgid "You can change your password, turn on keyboard shortcuts, change the color scheme of your WordPress administration screens, and turn off the WYSIWYG (Visual) editor, among other things. You can hide the Toolbar (formerly called the Admin Bar) from the front end of your site, however it cannot be disabled on the admin screens." +msgstr "Du kan ändra ditt lösenord, aktivera kortkommandon, ändra färgschemat för dina administrationssidor av WordPress och stäng av WYSIWYG (visuell) redigeraren osv. Du kan dölja verktygsfältet (tidigare kallat adminmeny) från främre delen av din webbplats, men det kan inte inaktiveras på adminsidor." + +#: wp-admin/options-permalink.php:24 +msgid "This screen allows you to choose your permalink structure. You can choose from common settings or create custom URL structures." +msgstr "Den här sidan låter dig välja din permalänksstruktur, Du kan välja mellan vanligt använda inställningar eller skapa en anpassad URL-struktur." + +#: wp-admin/upload.php:241 +msgid "Attaching Files" +msgstr "Bifoga filer" + +#: wp-admin/user-new.php:242 +msgid "Here is a basic overview of the different user roles and the permissions associated with each one:" +msgstr "Här är en grundläggande översikt över de olika användarroller och behörigheter associerade med dessa:" + +#: wp-admin/user-new.php:241 +msgid "User Roles" +msgstr "Användarroller" + +#. translators: %s: HelpHub URL +#. translators: %s: Codex URL +#: wp-admin/about.php:64 wp-admin/about.php:89 wp-admin/about.php:114 +#: wp-admin/about.php:139 wp-admin/about.php:303 +msgid "For more information, see the release notes." +msgstr "För mer information, se detaljer för releasen." + +#: wp-admin/edit-comments.php:182 +msgid "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." +msgstr "Du kan hantera kommentarer på din webbplats på samma sätt som du hanterar inlägg och annat innehåll. Den här sidan är anpassningsbara på samma sätt som andra administrativa sidor och du kan ange åtgärder för kommentarer genom att föra muspekaren över en kommentar för att visa åtgärdslänkar eller massredigering." + +#: wp-admin/edit-comments.php:191 +msgid "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." +msgstr "I kolumnen Författare visas utöver författarens namn, e-postadress och webbadress kommentatorns IP-adress. När du klickar på denna länk så visas alla kommentarer gjorda av denna IP-adress." + +#: wp-admin/user-new.php:217 +msgid "To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom." +msgstr "För att lägga till nya användare på din webbplats, fyll i formuläret på denna sida och klicka på knappen Lägg till användare." + +#: wp-admin/media-new.php:52 +msgid "Drag and drop your files into the area below. Multiple files are allowed." +msgstr "Dra och släpp dina filer till området nedanför. Flera filer är tillåtna." + +#: wp-admin/post.php:81 +msgid "Unable to submit this form, please refresh and try again." +msgstr "Kunde inte skicka formulär, vänligen uppdatera sidan och försök igen." + +#: wp-admin/update-core.php:239 +msgid "Learn more about WordPress %2$s." +msgstr "Läs mer om WordPress %2$s." + +#: wp-admin/media-new.php:53 +msgid "Clicking Select Files opens a navigation window showing you files in your operating system. Selecting Open after clicking on the file you want activates a progress bar on the uploader screen." +msgstr "Om du klickar Välj filer öppnas ett bläddringsfönster som visar filer i operativsystemet. Välja Öppna efter att ha klickat på filen du vill ladda upp och en förloppsindikator kommer att visas på sidan." + +#: wp-admin/edit-comments.php:188 +msgid "Moderating Comments" +msgstr "Moderera kommentarer" + +#: wp-admin/user-new.php:244 +msgid "Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content." +msgstr "Prenumeranter kan läsa kommentarer/kommentera/ta emot nyhetsbrev osv, men kan inte skapat annat webbplatsinnehåll." + +#: wp-admin/widgets.php:64 +msgid "Removing and Reusing" +msgstr "Borttagning och återanvändning" + +#: wp-admin/index.php:50 +msgid "Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information." +msgstr "Länkar i verktygsfältet längst upp på sidan kopplar adminpanelen och den främre delen av din webbplats till varandra, ger tillgång till din profil och hjälpsam information för WordPress." + +#: wp-admin/import.php:225 +msgid "If the importer you need is not listed, search the plugin directory to see if an importer is available." +msgstr "Om importören du behöver inte är listad, sök i tilläggskatalogen för att se om en importör finns tillgänglig." + +#: wp-admin/about.php:257 +msgid "Return to Updates" +msgstr "Återgå till uppdateringar" + +#: wp-admin/about.php:276 +msgid "Maintenance and Security Release" +msgstr "Underhålls och säkerhetsrelease" + +#: wp-admin/upload.php:233 wp-admin/users.php:66 wp-admin/edit.php:236 +msgid "Available Actions" +msgstr "Tillgängliga åtgärder" + +#: wp-admin/user-new.php:246 +msgid "Authors can publish and manage their own posts, and are able to upload files." +msgstr "Författare kan publicera och hantera sina egna inlägg och kan även ladda upp filer." + +#: wp-admin/update-core.php:650 +msgid "How to Update" +msgstr "Hur man uppdaterar" + +#: wp-admin/upload.php:235 +msgid "Hovering over a row reveals action links: Edit, Delete Permanently, and View. Clicking Edit or on the media file’s name displays a simple screen to edit that individual file’s metadata. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). View will take you to the display page for that file." +msgstr "Att föra muspekaren över en rad visar åtgärdslänkar: Redigera, Radera permanent och Visa. Att klicka på Redigera eller på mediafilens namn visar en enkel sida för att redigera den enskilda filens metadata. Att klicka på Radera permanent tar bort filen från mediabibliotek (såväl som från de inlägg som den är idag bifogats till). Länken Visa kommer ta dig till sidan för den filen på webbplatsen." + +#: wp-admin/widgets.php:74 +msgid "Missing Widgets" +msgstr "Saknade widgetar" + +#: wp-admin/upload.php:243 +msgid "If a media file has not been attached to any content, you will see that in the Uploaded To column, and can click on Attach to launch a small popup that will allow you to search for existing content and attach the file." +msgstr "Om en mediafil inte varit knuten till något inlägg, kommer du se det i kolumnen Uppladdad till, och kan klicka på Bifoga fil för att öppna ett litet fönster som gör att du kan söka efter ett innehåll och bifoga filen till." + +#: wp-admin/upload.php:225 +msgid "All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen." +msgstr "Alla filer du har laddat upp listas i mediebiblioteket, med de senaste inlagda visade först. Du kan använda fliken Panelinställningar för att anpassa visningen av denna sida." + +#: wp-admin/edit-form-advanced.php:294 wp-admin/edit.php:269 +msgid "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." +msgstr "Sidor liknar inlägg i att de har en titel, brödtext och tillhörande metadata, men de är olika i att de inte är en del av den kronologiska bloggflödet, ungefär som statiska inlägg. Sidorna är inte kategoriserade eller har taggar, men kan anges i hierarki. Du kan kapsla sidor under andra sidor genom att göra en till \"Överordnad\" för de andra och på så sätt skapa en grupp av sidor." + +#: wp-admin/users.php:41 wp-admin/edit.php:222 +msgid "Screen Content" +msgstr "Panelinnehåll" + +#: wp-admin/themes.php:120 +msgid "Adding Themes" +msgstr "Lägga till teman" + +#: wp-admin/user-new.php:220 +msgid "Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users." +msgstr "Eftersom detta är en Multisite-installation kan du lägga till konton som redan finns på nätverket genom att ange ett användarnamn eller e-post och definiera en roll. För fler alternativ, till exempel att ange ett lösenord, måste du vara en nätverksadministratör och använda hover-länken under en befintlig användares namn för att redigera användarprofil under Nätverksadmin > Alla användare." + +#: wp-admin/users.php:44 +msgid "You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab." +msgstr "Du kan dölja/visa kolumner baserat på dina behov och bestämma hur många användare att lista per sida med hjälp av fliken Panelinställningar." + +#. translators: 1: WordPress version number, 2: plural number of bugs. More +#. than one security issue. +#: wp-admin/about.php:77 wp-admin/about.php:297 +msgid "Version %1$s addressed some security issues and fixed %2$s bug." +msgid_plural "Version %1$s addressed some security issues and fixed %2$s bugs." +msgstr[0] "Version %1$s åtgärdar ett par sårbarheter och %2$s bugg." +msgstr[1] "Version %1$s åtgärdar ett par sårbarheter och %2$s buggar." + +#: wp-admin/options-permalink.php:197 +msgid "Common Settings" +msgstr "Vanliga inställningar" + +#: wp-admin/plugins.php:451 +msgid "Troubleshooting" +msgstr "Felsökning" + +#: wp-admin/about.php:260 +msgid "Go to Dashboard → Home" +msgstr "Gå till Adminpanel → Hem" + +#: wp-admin/edit-comments.php:195 +msgid "Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more." +msgstr "Många människor dra nytta av kortkommandon till för att moderera sina kommentarer snabbare. Använd länken på sidan om för att läsa mer." + +#: wp-admin/about.php:257 +msgid "Return to Dashboard → Updates" +msgstr "Återgå till Adminpanel → Uppdateringar" + +#. translators: 1: WordPress version number, 2: plural number of bugs. +#: wp-admin/about.php:102 wp-admin/about.php:127 wp-admin/about.php:285 +msgid "Version %1$s addressed %2$s bug." +msgid_plural "Version %1$s addressed %2$s bugs." +msgstr[0] "Version %1$s åtgärdar %2$s bugg." +msgstr[1] "Version %1$s åtgärdar %2$s buggar." + +#: wp-admin/options-permalink.php:43 +msgid "Custom Structures" +msgstr "Anpassade strukturer" + +#: wp-admin/about.php:273 +msgid "Security Release" +msgstr "Säkerhetsrelease" + +#: wp-admin/about.php:270 +msgid "Maintenance Release" +msgstr "Underhållsrelease" + +#: wp-admin/media-new.php:50 +msgid "You can upload media files here without creating a post first. This allows you to upload files to use with posts and pages later and/or to get a web link for a particular file that you can share. There are three options for uploading files:" +msgstr "Du kan ladda upp mediafiler utan att skapa ett inlägg först. Detta tillåter dig att ladda upp filer som du kan använda för sidor och inlägg vid ett senare tillfälle och/eller för att skapa en specifik url till filen för att dela med andra. Det finns tre alternativ för filuppladdningar:" + +#: wp-admin/user-edit.php:196 +msgid "Profile updated." +msgstr "Profil uppdaterad." + +#: wp-admin/users.php:51 +msgid "Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:" +msgstr "Att föra muspekaren över en rad i användarlistan visas åtgärdslänkar som gör att du kan hantera användare. Du kan utföra följande åtgärder:" + +#: wp-admin/user-edit.php:319 +msgid "Show Toolbar when viewing site" +msgstr "Visa verktygsrad på framsidan" + +#: wp-admin/users.php:53 +msgid "Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username." +msgstr "Redigera tar dig till redigeringssidan för användaren. Du kan också nå samma sida genom att klicka på användarnamnet." + +#. translators: 1: Site name, 2: site URL, 3: role, 4: activation URL +#: wp-admin/user-new.php:116 +msgid "" +"Hi,\n" +"\n" +"You've been invited to join '%1$s' at\n" +"%2$s with the role of %3$s.\n" +"\n" +"Please click the following link to confirm the invite:\n" +"%4$s" +msgstr "" +"Hej,\n" +"\n" +"Du har blivit inbjuden att bli medlem på '%1$s' på\n" +"adressen %2$s som %3$s.\n" +"\n" +"Klicka på följande länk för att bekräfta inbjudan:\n" +"%4$s" + +#. translators: %s: WordPress version number +#: wp-admin/about.php:57 wp-admin/about.php:282 +msgid "Version %s addressed some security issues." +msgstr "Version %s åtgärdar sårbarheter." + +#: wp-admin/user-edit.php:563 +msgid "Profile Picture" +msgstr "Profilbild" + +#: wp-admin/users.php:46 +msgid "You can view all posts made by a user by clicking on the number under the Posts column." +msgstr "Du kan visa alla inlägg som gjorts av en användare genom att klicka på antalet i inläggskolumnen." + +#: wp-admin/options-discussion.php:24 +msgid "This screen provides many options for controlling the management and display of comments and links to your posts/pages. So many, in fact, they won’t all fit here! :) Use the documentation links to get information on what each discussion setting does." +msgstr "Den här sidan har ett antal alternativ för hantering och visning av kommentarer och länkar till dina inlägg/sidor. Så många att de faktiskt inte alla får plats här! :) Använd länken till dokumentation nedan för att läsa mer om vad varje diskussionsinställningen gör." + +#: wp-admin/themes.php:198 +msgid "The active theme is broken. Reverting to the default theme." +msgstr "Det valda temat är trasigt. Återgår till ett standardtema." + +#: wp-admin/users.php:45 +msgid "You can filter the list of users by User Role using the text links above the users list to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed." +msgstr "Du kan filtrera listan över användare efter användarens roll genom att använda textlänkarna uppe till vänster för att visa Alla, Administratörer, Redaktörer, Författare, Medarbetare eller Prenumeranter. Standard är att visa alla användare. Oanvända användarroller visas inte." + +#: wp-admin/edit-form-advanced.php:234 +msgid "There is an autosave of this post that is more recent than the version below. View the autosave" +msgstr "Det finns en autosparad version av det här inlägget som är nyare än versionen nedan. Visa den autosparade versionen." + +#: wp-admin/user-new.php:378 +msgid "Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite." +msgstr "Ange e-postadressen eller användarnamnet för en existerande användare i nätverket för att bjuda in dem till denna webbplats. Denna person kommer att få ett mail för att bekräfta inbjudan." + +#: wp-admin/user-new.php:221 +msgid "New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to receive a welcome email." +msgstr "Nya användare kommer att få ett mail för att låta dem veta att de har lagts till som användare för din webbplats. Detta e-postmeddelande kommer också att innehålla deras lösenord. Markera rutan om du inte vill att användaren ska få ett välkomstmeddelande." + +#: wp-admin/options-permalink.php:144 +msgid "You should update your web.config now." +msgstr "Du bör uppdatera din web.config nu." + +#: wp-admin/user-new.php:374 +msgid "Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite." +msgstr "Ange e-postadressen för en befintlig användare i nätverket för att bjuda in dem till denna webbplats. Denna person kommer att få ett mail för att bekräfta inbjudan." + +#: wp-admin/theme-install.php:346 +msgid "This theme has not been rated yet." +msgstr "Det här temat har inga omdömen än." + +#: wp-admin/import.php:25 +msgid "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." +msgstr "I tidigare versioner av WordPress var alla importörer inbyggda. De har nu mer gjorts om till tillägg eftersom de flesta människor bara använder dem en någon gång." + +#: wp-admin/index.php:92 +msgid "Welcome — Shows links for some of the most common tasks when setting up a new site." +msgstr "Välkommen — Visa länkar till några av de vanligaste inställningarna när man skapar en ny webbplats." + +#: wp-admin/edit-comments.php:313 wp-admin/edit-comments.php:319 +msgid "Edit comment" +msgstr "Redigera kommentar" + +#: wp-admin/edit-form-advanced.php:573 +msgid "Word count: %s" +msgstr "Antal ord: %s" + +#: wp-admin/custom-background.php:332 +msgid "Set as background" +msgstr "Ange som bakgrund" + +#: wp-admin/users.php:479 +msgid "User deleted." +msgstr "Användare raderad." + +#: wp-admin/users.php:489 +msgid "New user created. Edit user" +msgstr "Ny användare skapad. Redigera användare" + +#: wp-admin/media-new.php:54 +msgid "Revert to the Browser Uploader by clicking the link below the drag and drop box." +msgstr "Använd den Webbläsarbaserade uppladdaren genom att klicka på länken under dra & släpp-boxen." + +#: wp-admin/tools.php:28 +msgid "Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content." +msgstr "Kategorier kan anges i hierarki, vilket innebär att du kan nästla underkategorier. Taggar kan inte anges i hierarki och kan inte nästlas. Ibland börjar folk med att använda det ena men inser sedan att det andra fungerar bättre för deras innehåll." + +#: wp-admin/tools.php:29 +msgid "The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa." +msgstr "Länken Kategori och tagg-konvertering på denna sida tar dig till sidan för importer där detta är en av tilläggen du kan installera. När tillägget är installerat så tar länken Aktivera tillägg & kör import dig till sidan där du kan välja att konvertera taggar till kategorier eller vise versa." + +#: wp-admin/theme-install.php:116 +msgid "Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you’re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look." +msgstr "När du genererat en lista av teman så kan du förhandsgranska och installera något av dessa. Klicka på miniatyren för temat du är intresserad av att förhandsgranska det. Detta kommer att öppna en sida i fullstorlek för att ge dig en bättre idé om hur temat kommer att se ut." + +#: wp-admin/theme-install.php:122 +msgid "Previewing and Installing" +msgstr "Förhandsgranskning och installering" + +#: wp-admin/themes.php:136 +msgid "Previewing and Customizing" +msgstr "Förhandsgranskning och anpassning" + +#: wp-admin/media.php:69 +msgid "You attempted to edit an item that isn’t an attachment. Please go back and try again." +msgstr "Du försökte att redigera en post som inte är en bilaga. Gå tillbaka och försök igen." + +#: wp-admin/custom-background.php:319 wp-admin/custom-header.php:538 +msgid "Select Image" +msgstr "Välj bild" + +#: wp-admin/custom-background.php:329 wp-admin/custom-header.php:616 +msgid "Or choose an image from your media library:" +msgstr "Eller välj en bild från ditt mediabibliotek:" + +#: wp-admin/edit-form-advanced.php:317 +msgid "This screen allows you to edit four fields for metadata in a file within the media library." +msgstr "Den här sidan låter dig att redigera fem fält av metadata för en fil i mediebiblioteket." + +#: wp-admin/users.php:270 +msgid "Please select an option." +msgstr "Var vänlig ange ett val." + +#. translators: 1: user id, 2: user login +#: wp-admin/users.php:287 +msgid "ID #%1$s: %2$s The current user will not be deleted." +msgstr "ID #%1$s: %2$s Aktuell användare kommer inte att raderas." + +#. translators: 1: user id, 2: user login +#: wp-admin/users.php:290 wp-admin/users.php:428 +msgid "ID #%1$s: %2$s" +msgstr "ID #%1$s: %2$s" + +#: wp-admin/edit-comments.php:193 +msgid "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." +msgstr "I kolumnen Som svar till så finns tre element. Texten är titeln för för inlägget som inspirerade kommentaren och länkar till sidan för att redigera inlägget i fråga. Länken Visa inlägg leder dig till inlägget på sidan. Den lilla pratbubblan med en siffra i visar antalet godkända kommentarer för inlägget. Om pratbubblan är grå så har alla kommentarer redan granskats för inlägget. Om den är röd så finns det nya kommentarer att granska. Att klicka på pratbubblan filtrerar redigeringssidan för att endast visa kommentarer för inlägget i fråga." + +#: wp-admin/custom-background.php:92 +msgid "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." +msgstr "Du kan även välja en bakgrundsfärg genom att klicka på knappen Välj färg och antingen ange en färgkod i formatet HTML-hex, t.ex ”#ff0000” för röd eller genom att använda färgväljaren." + +#: wp-admin/custom-background.php:91 +msgid "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." +msgstr "För att använda en bakgrundsbild, ladda helt enkelt bara upp den eller välj en bild som redan har laddats upp i ditt mediabibliotek genom att på knappen ”Välj bild”. Du kan välja hur bilden ska visas, utsträckt, upprepad eller som den är. Du kan ha din bild fixerad på sin plats eller låta den rulla med innehållet på sidan." + +#: wp-admin/edit-form-advanced.php:261 +msgid "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." +msgstr "Tiltelfältet och det stora textfältet är fixerade fält, men du kan ändra plats för alla andra paneler genom att dra och släppa dessa. Du kan även minimera eller expandera panelerna genom att klicka på titelraden. Använd fliken Panelinställningar för visa fler paneler (Utdrag, Skicka trackbacks, Anpassade fält, Diskussion, Permalänk, Författare) eller välj hur många kolumner de ska visas i." + +#: wp-admin/edit-form-advanced.php:338 +msgid "Inserting Media" +msgstr "Infogar media" + +#: wp-admin/edit-form-advanced.php:345 +msgid "Several boxes on this screen contain settings for how your content will be published, including:" +msgstr "Flera paneler på den här sidan innehåller inställningar för hur ditt innehåll kommer att publicera, inkluderat:" + +#: wp-admin/widgets.php:77 +msgid "When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved." +msgstr "När man ändrar teman så förekommer ofta variationer på antal tillgängliga widgetfält och detta kan i vissa fall röra till det. Om du byter teman och verkar sakna widgetar, rulla ner en bit på denna sida, till panelen Inaktiva widgetar där du hittar alla dina widgetar med sina inställningar sparade." + +#: wp-admin/edit-form-advanced.php:332 +msgid "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." +msgstr "Du kan ladda upp och infoga media (bilder, ljud, dokument, osv.) genom att klicka på knappen Lägg till media. Du kan välja bland bilder och filer som redan har laddats upp i mediabiblioteket eller ladda upp ny media att lägga till på din sida eller i ditt inlägg. För att skapa ett bildgaller, välj bilder att lägga till och klicka på knappen ”Skapa ett nytt galleri”." + +#: wp-admin/nav-menus.php:904 +msgid "Edit your default menu by adding or removing items. Drag each item into the order you prefer. Click Create Menu to save your changes." +msgstr "Redigera din standardmeny genom att lägga till eller ta bort menyval. Dra i menyvalen för att ordna dem som du vill. Klicka på Skapa meny för att spara dina ändringar." + +#: wp-admin/nav-menus.php:918 +msgid "Give your menu a name, then click Create Menu." +msgstr "Ge din meny ett namn och klicka på Skapa meny." + +#: wp-admin/nav-menus.php:946 +msgid "Auto add pages" +msgstr "Lägg till sidor automatiskt" + +#: wp-admin/nav-menus.php:775 +msgid "Select a menu to edit:" +msgstr "Välj en meny att redigera:" + +#: wp-admin/post.php:246 +msgid "You cannot move this item to the Trash. %s is currently editing." +msgstr "Du kan inte kasta denna post i papperskorgen. %s redigerar den just nu." + +#: wp-admin/nav-menus.php:866 +msgid "Menu structure" +msgstr "Menystruktur" + +#: wp-admin/nav-menus.php:931 +msgid "Menu Settings" +msgstr "Menyinställningar" + +#: wp-admin/user-edit.php:742 +msgid "Denied: %s" +msgstr "Nekad: %s" + +#: wp-admin/revision.php:123 +msgid "This screen is used for managing your content revisions." +msgstr "Denna sida används för att hantera versioner av ditt innehåll." + +#: wp-admin/revision.php:124 +msgid "Revisions are saved copies of your post or page, which are periodically created as you update your content. The red text on the left shows the content that was removed. The green text on the right shows the content that was added." +msgstr "Versioner är sparade kopior av din sida eller ditt inlägg som skapas periodvis när du uppdaterar ditt innehåll. Den röda texten till vänster visar innehåll som tagits bort. Den gröna texten till höger visar innehålls som lagts till." + +#: wp-admin/revision.php:125 +msgid "From this screen you can review, compare, and restore revisions:" +msgstr "Via denna sida kan du förhandsgranska, jämföra och återställa versioner:" + +#: wp-admin/revision.php:128 +msgid "To restore a revision, click Restore This Revision." +msgstr "För att återställa en version, klicka på Återställ denna version." + +#: wp-admin/nav-menus.php:904 +msgid "Drag each item into the order you prefer. Click the arrow on the right of the item to reveal additional configuration options." +msgstr "Dra varje val för att ordna de som du vill. Klicka på pilen till höger om valet för att visa extra inställningsmöjligheter." + +#: wp-admin/post.php:233 +msgid "The item you are trying to move to the Trash no longer exists." +msgstr "Posten du försöker flytta till papperskorgen finns inte längre." + +#: wp-admin/post.php:268 +msgid "The item you are trying to restore from the Trash no longer exists." +msgstr "Posten du försöker återställa från papperskorgen finns inte längre." + +#: wp-admin/post.php:290 +msgid "This item has already been deleted." +msgstr "Denna post har redan raderats." + +#: wp-admin/revision.php:126 +msgid "To navigate between revisions, drag the slider handle left or right or use the Previous or Next buttons." +msgstr "För att bläddra mellan versioner, dra slidern till höger eller vänster eller använd knapparna Föregående/Nästa." + +#: wp-admin/user-edit.php:633 +msgid "Repeat New Password" +msgstr "Upprepa nytt lösenord" + +#: wp-admin/edit-form-advanced.php:418 +msgid "Connection lost. Saving has been disabled until you’re reconnected." +msgstr "Anslutningen avbröts. Möjligheten att spara har inaktiverats tills att du är ansluten igen." + +#: wp-admin/edit-form-advanced.php:419 +msgid "We’re backing up this post in your browser, just in case." +msgstr "Vi tar en backup av detta inlägg i webbläsaren, för att vara på den säkra sidan." + +#: wp-admin/revision.php:127 +msgid "Compare two different revisions by selecting the “Compare any two revisions” box to the side." +msgstr "Jämför två olika versioner genom att använda boxen ”Jämför två versioner” vid sidan om." + +#: wp-admin/options-media.php:52 +msgid "The sizes listed below determine the maximum dimensions in pixels to use when adding an image to the Media Library." +msgstr "Storlekarna listade nedan avgör maximala dimensioner i pixlar att använda när en bild läggs till i mediabiblioteket." + +#: wp-admin/user-new.php:442 +msgid "Create a brand new user and add them to this site." +msgstr "Skapa en ny användare och lägg denne på den här webbplatsen." + +#: wp-admin/update-core.php:203 +msgid "Future security updates will be applied automatically." +msgstr "Framtida säkerhetsuppdateringar kommer att installeras automatiskt." + +#: wp-admin/update-core.php:479 wp-admin/update-core.php:487 +msgid "Translations" +msgstr "Översättningar" + +#: wp-admin/update-core.php:480 +msgid "Your translations are all up to date." +msgstr "Du har de senaste versionerna av alla översättningar." + +#: wp-admin/index.php:61 +msgid "Screen Options — Use the Screen Options tab to choose which Dashboard boxes to show." +msgstr "Panelinställningar — Använd fliken Panelinställningar för att bestämma vilka paneler som ska visas." + +#: wp-admin/index.php:79 +msgid "Activity — Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them." +msgstr "Aktivitet — Visar schemalagda inlägg, nyligen publicerade inlägg och de senaste kommentarerna till dina inlägg, samt tillåter dig att granska dessa." + +#: wp-admin/index.php:82 +msgid "Quick Draft — Allows you to create a new post and save it as a draft. Also displays links to the 3 most recent draft posts you've started." +msgstr "Snabbutkast — Låter dig skapa ett nytt inlägg och spara det som ett utkast. Här visas även länkar till de senaste 3 utkasten du skapat." + +#: wp-admin/themes.php:163 +msgid "" +"Are you sure you want to delete this theme?\n" +"\n" +"Click 'Cancel' to go back, 'OK' to confirm the delete." +msgstr "" +"Är du säker på att du vill radera detta tema?\n" +"\n" +"Klicka på 'Avbryt' för att gå tillbaka, 'OK' för att bekräfta radering." + +#: wp-admin/themes.php:167 wp-admin/theme-install.php:55 +msgid "Add New Theme" +msgstr "Lägg till nytt tema" + +#: wp-admin/themes.php:189 +msgctxt "Add new theme" +msgid "Add New" +msgstr "Lägg till nytt" + +#: wp-admin/admin.php:296 wp-admin/import.php:15 +msgid "Sorry, you are not allowed to import content." +msgstr "Du har inte behörighet att importera innehåll." + +#: wp-admin/widgets.php:556 +msgid "Add Widget" +msgstr "Lägg till widget" + +#: wp-admin/widgets.php:439 +msgid "To activate a widget drag it to a sidebar or click on it. To deactivate a widget and delete its settings, drag it back." +msgstr "För att aktivera en widget, dra den till ett widgetfält eller klicka på den. För att inaktivera en widget och radera dess inställningar, dra den tillbaka." + +#: wp-admin/themes.php:92 +msgid "This screen is used for managing your installed themes. Aside from the default theme(s) included with your WordPress installation, themes are designed and developed by third parties." +msgstr "Den här sidan används för att hantera dina installerade teman. Bortsett från WordPress standardteman som följer med installationen så är teman designade och utvecklade av tredje part." + +#: wp-admin/themes.php:94 +msgid "Hover or tap to see Activate and Live Preview buttons" +msgstr "Knacka eller för muspekaren över för att se knapparna för att aktivera eller visa en förhandsgranskning" + +#: wp-admin/themes.php:95 +msgid "Click on the theme to see the theme name, version, author, description, tags, and the Delete link" +msgstr "Klicka på ett tema för att se namn, version, skapare, beskrivning, taggar och länken för att radera temat." + +#: wp-admin/themes.php:96 +msgid "Click Customize for the current theme or Live Preview for any other theme to see a live preview" +msgstr "Klicka på Anpassa för nuvarande tema eller Förhandsgranska på något av de andra temana för att visa en förhandsgranskning live." + +#: wp-admin/themes.php:97 +msgid "The current theme is displayed highlighted as the first theme." +msgstr "Nuvarande tema visas markerat som första tema." + +#: wp-admin/themes.php:129 +msgid "Tap or hover on any theme then click the Live Preview button to see a live preview of that theme and change theme options in a separate, full-screen view. You can also find a Live Preview button at the bottom of the theme details screen. Any installed theme can be previewed and customized in this way." +msgstr "Knacka eller för muspekaren över ett tema och klicka på knappen Förhandsgranska för att se en förhandsgranskning live av det temat och för möjligheten att ändra inställningarna i ett separat fullskärmsläge. Du hitta även en knapp för att förhandsgranska ett tema live under den detaljerade beskrivningen av ett tema. Alla installerade teman kan förhandsgranskas och anpassas på detta sätt." + +#: wp-admin/themes.php:130 +msgid "The theme being previewed is fully interactive — navigate to different pages to see how the theme handles posts, archives, and other page templates. The settings may differ depending on what theme features the theme being previewed supports. To accept the new settings and activate the theme all in one step, click the Publish & Activate button above the menu." +msgstr "Temat som förhandsgranskas är fullt interaktivt — navigera dig runt på olika sidor för att se hur temat i fråga hanterar inlägg, arkiv och andra sidmallar. Inställningarna kan skilja sig beroende på vilka funktioner det förhandsgranskade temat stöder. För att använda de nya inställningarna och aktivera temat, allt på en gång, klickar du på knappen Spara och aktivera ovanför menyn." + +#: wp-admin/themes.php:131 +msgid "When previewing on smaller monitors, you can use the collapse icon at the bottom of the left-hand pane. This will hide the pane, giving you more room to preview your site in the new theme. To bring the pane back, click on the collapse icon again." +msgstr "När man förhandsgranskar på mindre skärma så kan man använda minimeringsknappen nere till vänster i panelen. Detta gömmer panelen och ger dig mer rum att förhandsgranska din webbplats med det nya temat. För att maximera panelen igen, klicka på samma knapp igen." + +#: wp-admin/themes.php:114 +msgid "If you would like to see more themes to choose from, click on the “Add New” button and you will be able to browse or search for additional themes from the WordPress Theme Directory. Themes in the WordPress Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!" +msgstr "Om du vill se fler teman att välja mellan, klicka på knappen ”Lägg till” så får du möjlighet att bläddra bland och söka efter andra teman i temakatalogen på WordPress.org. Teman i katalogen på WordPress.org är designade och är utvecklade av oberoende utvecklare. Alla teman har licenser som är kompatibla med WordPress och är gratis!" + +#: wp-admin/update-core.php:629 +msgid "On this screen, you can update to the latest version of WordPress, as well as update your themes, plugins, and translations from the WordPress.org repositories." +msgstr "På denna sida kan du uppdatera WordPress till den senaste versionen och även uppdatera dina teman och tillägg från katalogerna på WordPress.org." + +#: wp-admin/update-core.php:641 +msgid "Themes and Plugins — To update individual themes or plugins from this screen, use the checkboxes to make your selection, then click on the appropriate “Update” button. To update all of your themes or plugins at once, you can check the box at the top of the section to select all before clicking the update button." +msgstr "Teman och tillägg — För att uppdatera individuella teman eller tillägg på denna sida, använd checkboxarna för att välja vad som ska uppdateras och klicka sedan på avsedd ”Uppdatera”-knapp. För att uppdatera alla teman eller tillägg i ett svep, markera checkboxen uppe i hörnet på sektionen för att markera alla innan du klickar på knappen 'Uppdatera'." + +#: wp-admin/update-core.php:630 +msgid "If an update is available, you᾿ll see a notification appear in the Toolbar and navigation menu." +msgstr "Om en uppdatering är tillgänglig så visas en notifikation i verktygsfältet och i adminmenyn." + +#: wp-admin/update-core.php:640 +msgid "WordPress — Updating your WordPress installation is a simple one-click procedure: just click on the “Update Now” button when you are notified that a new version is available." +msgstr "WordPress — Att uppdatera din installation av WordPress kräver bara ett klick: klicka bara på knappen ”Uppdatera nu” så snart en notifikation dyker upp." + +#: wp-admin/update-core.php:640 +msgid "In most cases, WordPress will automatically apply maintenance and security updates in the background for you." +msgstr "I de flesta fallen kommer WordPress automatiskt att uppdatera din installation för underhålls- och säkerhetsuppdateringar i bakgrunden." + +#: wp-admin/update-core.php:644 +msgid "Translations — The files translating WordPress into your language are updated for you whenever any other updates occur. But if these files are out of date, you can click the “Update Translations” button." +msgstr "Översättningar — Filerna som översätter WordPress till ditt valda språk uppdateras automatiskt i samband med att andra uppdateringar körs. Men om filerna är föråldrade så kan du klicka på knappen ”Uppdatera översättningar”." + +#: wp-admin/admin-footer.php:35 +msgid "Thank you for creating with WordPress." +msgstr "Tack för att du skapar med WordPress." + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:233 +msgid "%s (The year of the post, four digits, for example 2004.)" +msgstr "%s (Inläggets år, fyra siffror, till exempel 2004.)" + +#: wp-admin/themes.php:43 +msgid "Sorry, you are not allowed to resume this theme." +msgstr "Du saknar behörighet för att återstarta detta tema." + +#: wp-admin/index.php:63 +msgid "Box Controls — Click the title bar of the box to expand or collapse it. Some boxes added by plugins may have configurable content, and will show a “Configure” link in the title bar if you hover over it." +msgstr "Panelkontroller — Klicka på titelraden i en panel för att minimera eller maximera den. Vissa paneler som lagts till av tillägg kan ha konfigurerbart innehåll och kommer att visa en ”Konfigurera”-länk när du för muspekaren över titelraden." + +#: wp-admin/index.php:76 +msgid "At A Glance — Displays a summary of the content on your site and identifies which theme and version of WordPress you are using." +msgstr "Just nu — Visar en sammanfattning av innehållet på din webbplats samt identifierar vilket tema och version av WordPress som används." + +#: wp-admin/revision.php:94 +msgid "← Return to editor" +msgstr "← Återgå till inläggsredigeraren" + +#: wp-admin/theme-install.php:24 +msgid "Add Themes" +msgstr "Lägg till teman" + +#: wp-admin/theme-install.php:56 +msgid "Search Themes" +msgstr "Sök teman" + +#: wp-admin/theme-install.php:57 +msgid "Search themes..." +msgstr "Sök efter teman..." + +#: wp-admin/theme-install.php:269 +msgctxt "theme" +msgid "Details & Preview" +msgstr "Detaljer & förhandsgranskning" + +#: wp-admin/users.php:58 +msgid "Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their content. You can also delete multiple users at once by using Bulk Actions." +msgstr "Radera tar dig till sidan för radering av användare för bekräftelse, där kan du permanent radera användaren och deras innehåll från din webbplats. Du kan även ta bort flera användare samtidigt genom att använda massåtgärder." + +#: wp-admin/users.php:304 +msgid "What should be done with content owned by this user?" +msgstr "Vad ska göras med innehåll som skapats av denna användare?" + +#: wp-admin/users.php:306 +msgid "What should be done with content owned by these users?" +msgstr "Vad vill du göra med innehåll som skapats av dessa användare?" + +#: wp-admin/theme-install.php:175 +msgctxt "themes" +msgid "Popular" +msgstr "Populära" + +#: wp-admin/edit-comments.php:190 +msgid "A red bar on the left means the comment is waiting for you to moderate it." +msgstr "En röd linje till vänster betyder att kommentaren inväntar din moderation." + +#: wp-admin/edit-form-advanced.php:277 +msgid "Keyboard users: When you’re working in the visual editor, you can use Alt + F10 to access the toolbar." +msgstr "Tangentbordsanvändare: När du arbetar i den visuella redigeraren så kan du använda Alt + F10 för att visa verktygsraden." + +#: wp-admin/theme-install.php:230 +msgid "Filtering by:" +msgstr "Filtrering efter:" + +#: wp-admin/revision.php:139 +msgid "Revisions Management" +msgstr "Versionshantering" + +#: wp-admin/edit-form-advanced.php:333 +msgid "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." +msgstr "Du kan även bädda in media från flera populära webbplatser inklusive Twitter, YouTube, Flickr med fler genom att klistra in objektets URL på en egen rad av innehåller för ditt inlägg/sida. För att ta reda på mer om inbäddningar, se dokumentationen för WordPress." + +#: wp-admin/edit-form-advanced.php:351 +msgid "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." +msgstr "Format - Inläggsformat bestämmer hur ditt tema kommer att visa specifika inlägg. Exempel, du kan ha ett standard-blogginlägg med en rubrik och stycken eller en kort notis som består av en rubrik och en kort text. Besök dokumentationen för beskrivningar av alla inläggstyper. Ditt tema kan aktivera alla eller något av de 10 olika formaten." + +#: wp-admin/edit-form-advanced.php:307 +msgid "Documentation on Adding New Pages" +msgstr "Dokumentation för att lägga till nya sidor" + +#: wp-admin/import.php:31 +msgid "Documentation on Import" +msgstr "Dokumentation för import" + +#: wp-admin/custom-background.php:99 +msgid "Documentation on Custom Background" +msgstr "Dokumentation för anpassad bakgrund" + +#: wp-admin/widgets.php:83 +msgid "Documentation on Widgets" +msgstr "Dokumentation för widgetar" + +#: wp-admin/index.php:107 +msgid "Documentation on Dashboard" +msgstr "Dokumentation för adminpanelen" + +#: wp-admin/user-new.php:255 +msgid "Documentation on Adding New Users" +msgstr "Dokumentation för hur man lägger till användare" + +#: wp-admin/edit-link-form.php:74 +msgid "Documentation on Creating Links" +msgstr "Dokumentation för hur man skapa länkar" + +#: wp-admin/options-discussion.php:31 +msgid "Documentation on Discussion Settings" +msgstr "Dokumentation för diskussionsinställningar" + +#: wp-admin/options-permalink.php:51 +msgid "Documentation on Permalinks Settings" +msgstr "Dokumentation för inställning av permalänkar" + +#: wp-admin/user-edit.php:67 +msgid "Documentation on User Profiles" +msgstr "Dokumentation för användarprofiler" + +#: wp-admin/media-new.php:60 +msgid "Documentation on Uploading Media Files" +msgstr "Dokumentation för hur man laddar upp mediafiler" + +#: wp-admin/users.php:74 +msgid "Documentation on Managing Users" +msgstr "Dokumentation för hantering av användare" + +#: wp-admin/edit-form-advanced.php:290 +msgid "Documentation on Writing and Editing Posts" +msgstr "Dokumentation för skapande och redigering av inlägg" + +#: wp-admin/update-core.php:657 +msgid "Documentation on Updating WordPress" +msgstr "Dokumentation för uppdatering av WordPress" + +#: wp-admin/options-media.php:37 +msgid "Documentation on Media Settings" +msgstr "Dokumentation för mediainställningar" + +#: wp-admin/tools.php:35 +msgid "Documentation on Tools" +msgstr "Dokumentation för verktyg" + +#: wp-admin/edit-form-advanced.php:308 +msgid "Documentation on Editing Pages" +msgstr "Dokumentation för redigering av sidor" + +#: wp-admin/upload.php:75 wp-admin/upload.php:249 +msgid "Documentation on Media Library" +msgstr "Dokumentation för mediabibliotek" + +#: wp-admin/media.php:95 wp-admin/edit-form-advanced.php:326 +msgid "Documentation on Edit Media" +msgstr "Dokumentation för redigering av media" + +#: wp-admin/users.php:75 +msgid "Descriptions of Roles and Capabilities" +msgstr "Dokumentation för roller och rättigheter" + +#: wp-admin/options-permalink.php:52 +msgid "Documentation on Using Permalinks" +msgstr "Dokumentation för användning av permalänkar " + +#: wp-admin/edit-comments.php:203 +msgid "Documentation on Keyboard Shortcuts" +msgstr "Dokumentation för tangentbordskommandon" + +#: wp-admin/edit-comments.php:202 +msgid "Documentation on Comment Spam" +msgstr "Dokumentation för skräpkommentarer" + +#: wp-admin/user-edit.php:311 +msgid "More information" +msgstr "Mer information" + +#: wp-admin/update-core.php:209 +msgid "Important: Before updating, please back up your database and files. For help with updates, visit the Updating WordPress Codex page." +msgstr "Viktigt: Innan du uppdaterar, gör en säkerhetskopia av din databas och dina filer. För mer hjälp med uppdateringar se WordPress Codex (engelska)." + +#: wp-admin/theme-install.php:129 +msgid "Documentation on Adding New Themes" +msgstr "Dokumentation för att lägga till nya teman" + +#: wp-admin/plugins.php:464 +msgid "Documentation on Managing Plugins" +msgstr "Dokumentation för hantering av tillägg" + +#. translators: %s: the option/setting +#: wp-admin/options.php:268 +msgid "The %s setting is unregistered. Unregistered settings are deprecated. See https://codex.wordpress.org/Settings_API" +msgstr "Inställningen %s är inte registrerad. Användning av icke registrerade inställningar har upphört. Se https://codex.wordpress.org/Settings_API" + +#: wp-admin/widgets.php:88 +msgid "The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please follow these instructions." +msgstr "Temat du använder stöder inte widgetar. Det innebär att det inte finns några sidopaneler som du kan ändra på. Följ de här instruktionerna för att lägga till stöd för widgetar i ditt tema." + +#. translators: 1: plugin name, 2: plugin author +#: wp-admin/plugins.php:335 +msgid "%1$s by %2$s (will also delete its data)" +msgstr "%1$s av %2$s (kommer även radera dess data)" + +#: wp-admin/themes.php:98 +msgid "The search for installed themes will search for terms in their name, description, author, or tag." +msgstr "Funktionen för att söka efter installerade teman kommer att söka efter termer i namn, beskrivning, författare och taggar." + +#: wp-admin/theme-install.php:100 +msgid "Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it." +msgstr "Alternativt, du kan bläddra bland teman som är utvalda, populära eller de nyaste. När du hittar ett tema du gillar så kan du förhandsgranska eller installera det." + +#: wp-admin/theme-install.php:99 +msgid "You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter." +msgstr "Du kan söka efter teman baserat på nyckelord, författare, taggar eller så kan du vara än mer specifik och söka på kriterier i utvalda filter." + +#: wp-admin/themes.php:170 wp-admin/theme-install.php:66 +msgid "Number of Themes found: %d" +msgstr "Antal hittade teman: %d" + +#: wp-admin/users.php:481 +msgid "%s user deleted." +msgid_plural "%s users deleted." +msgstr[0] "%s användare raderad." +msgstr[1] "%s användare raderade." + +#: wp-admin/plugins.php:327 +msgid "You are about to remove the following plugins:" +msgstr "Du är på väg att ta bort följande tillägg:" + +#: wp-admin/plugins.php:325 +msgid "These plugins may be active on other sites in the network." +msgstr "Dessa tillägg kan vara aktiverade på andra webbplatser i nätverket." + +#. translators: %s: theme name +#. translators: %s: Theme name +#: wp-admin/themes.php:336 wp-admin/themes.php:502 +msgid "Active: %s" +msgstr "Aktivt: %s" + +#: wp-admin/update-core.php:489 +msgid "New translations are available." +msgstr "Nya översättningar är tillgängliga." + +#: wp-admin/user-edit.php:53 +msgid "You can log out of other devices, such as your phone or a public computer, by clicking the Log Out Everywhere Else button." +msgstr "Du kan logga ut från andra enheter, så som din mobiltelefon eller en offentlig dator genom att klicka på knappen Logga ut från alla enheter." + +#: wp-admin/update-core.php:222 +msgid "BETA TESTERS:" +msgstr "BETA-TESTARE:" + +#: wp-admin/update-core.php:222 +msgid "This site is set up to install updates of future beta versions automatically." +msgstr "Denna webbplats har konfigurerats för att installera kommande betaversioner automatiskt." + +#. translators: %s: list view URL +#: wp-admin/upload.php:102 +msgid "The grid view for the Media Library requires JavaScript. Switch to the list view." +msgstr "Rutnätsvyn för mediabiblioteket kräver JavaScript. Växla till listvyn." + +#: wp-admin/user-new.php:413 wp-admin/user-new.php:554 +msgid "Add the user without sending an email that requires their confirmation." +msgstr "Lägg till användaren utan att skicka ett mail som kräver deras bekräftelse." + +#: wp-admin/upload.php:56 +msgid "All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first." +msgstr "Alla filer du har laddat upp listas i mediabiblioteket, med senaste uppladdningen visad först." + +#: wp-admin/upload.php:57 wp-admin/upload.php:227 +msgid "You can view your media in a simple visual grid or a list with columns. Switch between these views using the icons to the left above the media." +msgstr "Du kan visa media i en enkel rutnätsvy eller som en lista med kolumner. Växla mellan dessa vyer genom att använda ikonerna ovanför medialistningen uppe till vänster." + +#: wp-admin/upload.php:58 +msgid "To delete media items, click the Bulk Select button at the top of the screen. Select any items you wish to delete, then click the Delete Selected button. Clicking the Cancel Selection button takes you back to viewing your media." +msgstr "För att radera mediaobjekt, klicka på knappen Välj flera ovanför mediavyn. Markera de objekt du vill radera, klicka sedan på knappen Radera valda. För att avbryta och gå tillbaka till den vanliga visningen, klicka på Avbryt." + +#: wp-admin/upload.php:67 +msgid "Clicking an item will display an Attachment Details dialog, which allows you to preview media and make quick edits. Any changes you make to the attachment details will be automatically saved." +msgstr "Att klicka på ett objekt kommer att öppna en dialogruta med detaljer för mediafilen. Här tillåts du att förhandsgranska och genomföra enklare redigeringar. Alla ändringar du gör kommer att sparas automatiskt." + +#: wp-admin/upload.php:69 +msgid "You can also delete individual items and access the extended edit screen from the details dialog." +msgstr "Du kan även radera individuella objekt och få tillgång till utökade redigeringsmöjligheter från dialogrutan." + +#: wp-admin/upload.php:68 +msgid "Use the arrow buttons at the top of the dialog, or the left and right arrow keys on your keyboard, to navigate between media items quickly." +msgstr "Använd navigeringsknapparna i den övre delen av dialogrutan eller piltangenterna på tangentbordet för att enkelt bläddra mellan mediaobjekt." + +#. translators: %s: placeholder that must come at the start of the URL +#: wp-admin/options-permalink.php:299 +msgid "If you like, you may enter custom structures for your category and tag URLs here. For example, using topics as your category base would make your category links like %s/topics/uncategorized/. If you leave these blank the defaults will be used." +msgstr "Om du vill kan du ange en anpassad struktur för dina kategori och tagg-URLer här. Exempel, att använda amnen som din kategoribas skulle ge länkar enligt modellen %s/amnen/okategoriserat/. Om du lämnar detta tomt används standardstrukturen." + +#: wp-admin/themes.php:216 +msgid "You cannot delete a theme while it has an active child theme." +msgstr "Du kan inte radera ett tema när det har ett aktivt barntema." + +#: wp-admin/user-edit.php:658 +msgid "You are only logged in at this location." +msgstr "Du är endast inloggad från denna plats." + +#: wp-admin/edit-form-advanced.php:276 +msgid "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." +msgstr "Du kan aktivera distraktionsfritt skrivläge via ikonen till höger. Den här funktionen är inte tillgänglig för äldre webbläsare eller enheter med små skärmar och kräver att fullhöjdsredigeraren är aktiverad under Panelinställningar." + +#: wp-admin/user-edit.php:676 +msgid "Log Out Everywhere" +msgstr "Logga ut överallt" + +#: wp-admin/custom-background.php:233 +msgid "You can now manage and live-preview Custom Backgrounds in the Customizer." +msgstr "Du kan nu hantera och förhandsgranska anpassade bakgrunder live i Anpassaren." + +#: wp-admin/edit-form-advanced.php:275 +msgid "You can insert media files by clicking the button above the post editor and following the directions. You can align or edit images using the inline formatting toolbar available in Visual mode." +msgstr "Du kan infoga mediafiler genom att klicka på knappen ovanför inläggsredigeraren och följa instruktionerna. Du kan justera eller redigera bilder med formateringslisten som visas i texten i visuellt lägge." + +#: wp-admin/edit-form-advanced.php:272 +msgid "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." +msgstr "Inläggsredigerare — Ange texten för ditt inlägg. Det finns två stycken redigeringslägen: visuellt och text. Välj läge genom att klicka på motsvarande flik." + +#: wp-admin/users.php:412 +msgid "You have specified this user for removal:" +msgstr "Du har markerat följande användare för borttagning:" + +#. translators: %s: user's display name +#: wp-admin/user-edit.php:680 +msgid "Log %s out of all locations." +msgstr "Logga ut %s från alla enheter." + +#: wp-admin/user-edit.php:668 +msgid "Did you lose your phone or leave your account logged in at a public computer? You can log out everywhere else, and stay logged in here." +msgstr "Har du förlorat din telefon eller har du lämnat en offentlig dator fortfarande inloggad? Du kan logga ut från alla andra platser, men förbli inloggad här." + +#: wp-admin/user-edit.php:656 wp-admin/user-edit.php:666 +msgid "Log Out Everywhere Else" +msgstr "Logga ut på alla andra enheter" + +#: wp-admin/user-new.php:506 wp-admin/user-edit.php:624 +msgid "Cancel password change" +msgstr "Avbryt ändring av lösenord" + +#: wp-admin/user-edit.php:654 wp-admin/user-edit.php:664 +#: wp-admin/user-edit.php:674 +msgid "Sessions" +msgstr "Sessioner" + +#: wp-admin/user-edit.php:609 +msgid "Account Management" +msgstr "Kontohantering" + +#: wp-admin/user-edit.php:615 +msgid "Generate Password" +msgstr "Generera lösenord" + +#: wp-admin/edit-comments.php:151 +msgid "Comments (%1$s) on “%2$s”" +msgstr "Kommentarer (%1$s) till ”%2$s”" + +#: wp-admin/edit-comments.php:192 +msgid "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." +msgstr "I kolumnen Kommentar ger musaktivitet över en kommentar möjlighet att godkänna, svara (och godkänna), snabbredigera, redigera, märka som skräppost eller ta bort kommentaren." + +#: wp-admin/edit-comments.php:194 +msgid "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." +msgstr "I kolumnen Postad visar datum och tid för när kommentaren postades på din webbplats. Att klicka på ett datum/tid tar dig till kommentaren på webbplatsens framsida." + +#: wp-admin/edit-comments.php:209 +msgid "Filter comments list" +msgstr "Filtrera lista med kommentarer" + +#: wp-admin/edit-comments.php:210 +msgid "Comments list navigation" +msgstr "Navigation för kommentarslista" + +#: wp-admin/edit-comments.php:211 +msgid "Comments list" +msgstr "Kommentarslista" + +#: wp-admin/edit-form-advanced.php:122 wp-admin/edit-form-advanced.php:129 +msgid "Preview post" +msgstr "Förhandsgranska inlägg" + +#: wp-admin/edit-form-advanced.php:143 wp-admin/edit-form-advanced.php:150 +msgid "Preview page" +msgstr "Förhandsgranska sidan" + +#: wp-admin/edit-form-advanced.php:157 +msgid "View page" +msgstr "Visa sida" + +#: wp-admin/edit-form-advanced.php:175 +msgid "Post submitted." +msgstr "Inlägg sparat." + +#: wp-admin/edit-form-advanced.php:176 +msgid "Post scheduled for: %s." +msgstr "Inlägg schemalagt för: %s." + +#: wp-admin/edit-form-advanced.php:177 +msgid "Post draft updated." +msgstr "Utkast av inlägg uppdaterat." + +#: wp-admin/edit-form-advanced.php:189 +msgid "Page submitted." +msgstr "Sida skickad." + +#: wp-admin/edit-form-advanced.php:190 +msgid "Page scheduled for: %s." +msgstr "Sida schemalagd för: %s." + +#: wp-admin/edit-form-advanced.php:191 +msgid "Page draft updated." +msgstr "Utkast av sida uppdaterat." + +#: wp-admin/options-permalink.php:378 +msgid "Documentation on Nginx configuration." +msgstr "Dokumentation för konfiguration i Nginx." + +#: wp-admin/plugins.php:470 wp-admin/plugin-install.php:111 +msgid "Filter plugins list" +msgstr "Filtrera lista med tillägg" + +#: wp-admin/plugins.php:471 wp-admin/plugin-install.php:112 +msgid "Plugins list navigation" +msgstr "Navigation för tilläggslista" + +#: wp-admin/plugins.php:472 wp-admin/plugin-install.php:113 +msgid "Plugins list" +msgstr "Tilläggslista" + +#: wp-admin/plugins.php:548 +msgid "The selected plugin has been deleted." +msgstr "Valt tillägg har raderats." + +#: wp-admin/plugins.php:565 +msgid "All selected plugins are up to date." +msgstr "Alla valda tillägg är uppdaterade." + +#: wp-admin/theme-install.php:166 +msgid "Filter themes list" +msgstr "Filtrera lista med teman" + +#: wp-admin/theme-install.php:236 +msgid "Themes list" +msgstr "Temalista" + +#: wp-admin/themes.php:452 +msgid "Install Parent Theme" +msgstr "Installera temaförälder" + +#: wp-admin/upload.php:255 +msgid "Filter media items list" +msgstr "Filtrera lista med mediaposter" + +#: wp-admin/upload.php:256 +msgid "Media items list navigation" +msgstr "Navigation för mediaobjektslista" + +#: wp-admin/upload.php:257 +msgid "Media items list" +msgstr "Mediaobjektslista" + +#: wp-admin/users.php:81 +msgid "Filter users list" +msgstr "Filtrera lista med användare" + +#: wp-admin/users.php:82 +msgid "Users list navigation" +msgstr "Navigation för användarlista" + +#: wp-admin/users.php:83 +msgid "Users list" +msgstr "Användarlista" + +#: wp-admin/users.php:145 +msgid "One of the selected users is not a member of this site." +msgstr "En av de valda användarna är inte medlem på denna webbplats." + +#: wp-admin/widgets.php:476 +msgid "Clear Inactive Widgets" +msgstr "Rensa inaktiva widgetar" + +#: wp-admin/widgets.php:486 +msgid "This will clear all items from the inactive widgets list. You will not be able to restore any customizations." +msgstr "Detta rensar alla poster från listan med inaktiva widgetar. Du kommer inte kunna återställa några anpassningar." + +#: wp-admin/options.php:50 +msgid "Sorry, you are not allowed to manage these options." +msgstr "Du har inte behörighet att uppdatera dessa alternativ." + +#: wp-admin/theme-install.php:177 +msgctxt "themes" +msgid "Favorites" +msgstr "Favoriter" + +#: wp-admin/theme-install.php:194 +msgid "If you have marked themes as favorites on WordPress.org, you can browse them here." +msgstr "Om du har markerat teman som favoriter på WordPress.org så kan du bläddra bland dessa här." + +#. translators: %s: wp-content/uploads +#: wp-admin/options-media.php:119 +msgid "Default is %s" +msgstr "Standard är %s" + +#: wp-admin/options-permalink.php:33 +msgid "Permalinks can contain useful information, such as the post date, title, or other elements. You can choose from any of the suggested permalink formats, or you can craft your own if you select Custom Structure." +msgstr "Permalänkar kan innehålla användbar information, så som inläggsdatum, titel eller andra element. Du kan kan välja mellan något av de föreslagna permalänksformaten eller så kan du skapa ett eget format genom att välja anpassad struktur." + +#: wp-admin/options-permalink.php:200 +msgid "Plain" +msgstr "Enkel" + +#: wp-admin/about.php:271 +msgid "Maintenance Releases" +msgstr "Underhållsrelease" + +#: wp-admin/about.php:274 +msgid "Security Releases" +msgstr "Säkerhetsrelease" + +#: wp-admin/about.php:52 wp-admin/about.php:277 +msgid "Maintenance and Security Releases" +msgstr "Underhålls- och säkerhetsrelease" + +#: wp-admin/user-edit.php:572 +msgid "https://en.gravatar.com/" +msgstr "https://sv.gravatar.com/" + +#. translators: %s: WordPress version number +#: wp-admin/about.php:280 +msgid "Version %s addressed one security issue." +msgstr "Version %s åtgärdar en sårbarhet." + +#. translators: %s: menu name +#: wp-admin/nav-menus.php:965 +msgctxt "menu location" +msgid "(Currently set to: %s)" +msgstr "(Just nu satt till: %s)" + +#: wp-admin/user-new.php:530 +msgid "Send User Notification" +msgstr "Skicka användaren en notifikation" + +#: wp-admin/user-new.php:533 +msgid "Send the new user an email about their account." +msgstr "Skicka ett meddelande till nya användare med kontouppgifter." + +#. translators: %s: Codex URL +#: wp-admin/options-permalink.php:176 +msgid "WordPress offers you the ability to create a custom URL structure for your permalinks and archives. Custom URL structures can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started." +msgstr "WordPress ger dig möjligheten att skapa en anpassad URL-struktur för dina permalänkar och arkiv. En anpassad URL-struktur kan förbättra estetiken och användarvänligheten hos dina länkar och göra dem framtidskompatibla. Ett antal automatiska etiketter finns tillgängliga och här följer några exempel för att komma igång." + +#. translators: %s: importer slug +#: wp-admin/import.php:67 +msgid "The %s importer is invalid or is not installed." +msgstr "Importören %s är ogiltig eller är inte installerad." + +#: wp-admin/index.php:131 +msgid "Dismiss the welcome panel" +msgstr "Stäng välkomstpanelen" + +#. translators: 1: plugin name, 2: plugin author +#: wp-admin/plugins.php:339 +msgctxt "plugin" +msgid "%1$s by %2$s" +msgstr "%1$s av %2$s" + +#: wp-admin/users.php:187 +msgid "Sorry, you are not allowed to delete that user." +msgstr "Du har inte behörighet att ta bort den användaren." + +#: wp-admin/freedoms.php:132 wp-admin/themes.php:114 +#: wp-admin/theme-install.php:97 +msgid "https://wordpress.org/themes/" +msgstr "https://sv.wordpress.org/themes/" + +#: wp-admin/themes.php:203 +msgid "Settings saved and theme activated." +msgstr "Inställningar sparade och tema aktiverat." + +#: wp-admin/themes.php:207 +msgid "New theme activated." +msgstr "Nytt tema aktiverat." + +#: wp-admin/themes.php:376 +msgid "The following themes are installed but incomplete." +msgstr "Följande teman är installerade men inte kompletta." + +#: wp-admin/upload.php:226 +msgid "You can narrow the list by file type/status or by date using the dropdown menus above the media table." +msgstr "Du kan filtrera listan till att visa specifika filtyper/statusar eller datum genom att använda rullgardinsmenyn ovanför tabellen." + +#: wp-admin/user-edit.php:208 +msgid "Error while saving the new email address. Please try again." +msgstr "Ett fel uppstod när den nya e-postadressen skulle sparas. Vänligen försök igen." + +#. translators: %s: new email +#: wp-admin/user-edit.php:506 +msgid "There is a pending change of your email to %s." +msgstr "En ändring av din e-postadress till %s står som väntande." + +#. translators: %s: edit page url +#: wp-admin/user-new.php:300 +msgid "User has been added to your site. Edit user" +msgstr "Användaren har lagts till på din webbplats. Redigera användare" + +#: wp-admin/edit-form-advanced.php:347 +msgid "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." +msgstr "Publicera — Du kan ställa in villkoren för att publicera inlägget i panelen Publicera. För status, synlighet, och publicera (direkt), klicka på länken Redigera för att visa fler alternativ. Synlighet omfattar alternativ för att lösenordsskydda ett inlägg eller för att klistra det överst i ditt flöde på obestämd tid. Alternativet för att lösenordsskydda kan användas för att ange ett valfritt lösenord för varje post. Det privata alternativet döljer inlägget från alla utom redaktörer och administratörer. Under alternativet publicera (direkt) kan du tidsinställa publiceringen framåt eller bakåt i tiden." + +#: wp-admin/media.php:107 wp-admin/upload.php:285 wp-admin/upload.php:345 +#: wp-admin/edit-form-advanced.php:193 +msgid "Media file updated." +msgstr "Mediafil uppdaterad." + +#: wp-admin/upload.php:291 +msgid "Media file attached." +msgstr "Mediafil bifogad." + +#. translators: %s: number of media files +#: wp-admin/upload.php:294 +msgid "%s media file attached." +msgid_plural "%s media files attached." +msgstr[0] "%s mediafil bifogad." +msgstr[1] "%s mediafiler bifogade." + +#: wp-admin/upload.php:302 +msgid "Media file detached." +msgstr "Mediafil borttagen som bilaga." + +#. translators: %s: number of media files +#: wp-admin/upload.php:305 +msgid "%s media file detached." +msgid_plural "%s media files detached." +msgstr[0] "%s mediafil borttagen som bilaga." +msgstr[1] "%s mediafiler borttagna som bilagor." + +#. translators: %s: number of media files +#: wp-admin/upload.php:316 +msgid "%s media file permanently deleted." +msgid_plural "%s media files permanently deleted." +msgstr[0] "%s mediafil raderad permanent." +msgstr[1] "%s mediafiler raderade permanent." + +#. translators: %s: number of media files +#: wp-admin/upload.php:327 +msgid "%s media file moved to the trash." +msgid_plural "%s media files moved to the trash." +msgstr[0] "%s mediafil flyttad till papperskorgen." +msgstr[1] "%s mediafiler flyttade till papperskorgen." + +#. translators: %s: number of media files +#: wp-admin/upload.php:339 +msgid "%s media file restored from the trash." +msgid_plural "%s media files restored from the trash." +msgstr[0] "%s mediafil återställd från papperskorgen." +msgstr[1] "%s mediafiler återställda från papperskorgen." + +#: wp-admin/upload.php:347 +msgid "Error saving media file." +msgstr "Fel vid sparande av mediafil." + +#: wp-admin/edit-form-advanced.php:273 +msgid "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." +msgstr "Det visuella läget ger dig en redigeraren som kan liknas vid en ordbehandlare. Klicka på knappen för utökad verktygsrad för att få ytterligare en rad med verktyg." + +#: wp-admin/edit-form-advanced.php:274 +msgid "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." +msgstr "Text-läget låter dig ange HTML tillsammans med innehållstexten. Notera att taggarna <p> och <br> automatiskt konverteras till radbrytningar när man växlar läge i redigeraren för att göra det mindre rörigt. När du skriver kan en enkelt radbrytning användas istället för att ange <br> och två radbrytningar kan användas för styckeindelning. Radbrytningarna konverteras automatiskt tillbaka till taggar." + +#: wp-admin/customize.php:191 +msgid "Close the Customizer and go back to the previous page" +msgstr "Stäng anpassaren och gå tillbaka till föregående sida" + +#: wp-admin/link-add.php:13 +msgid "Sorry, you are not allowed to add links to this site." +msgstr "Du har inte behörighet att lägga till länkar på den här webbplatsen." + +#: wp-admin/options.php:223 +msgid "Sorry, you are not allowed to modify unregistered settings for this site." +msgstr "Du har inte behörighet att redigera oregistrerade inställningar för den här webbplatsen." + +#: wp-admin/plugins.php:76 +msgid "Sorry, you are not allowed to activate plugins for this site." +msgstr "Du har inte behörighet att aktivera tillägg på den här webbplatsen." + +#: wp-admin/plugins.php:209 +msgid "Sorry, you are not allowed to deactivate plugins for this site." +msgstr "Du har inte behörighet att inaktivera tillägg på den här webbplatsen." + +#: wp-admin/themes.php:321 wp-admin/themes.php:483 +msgid "New version available. " +msgstr "Ny version tillgänglig. " + +#: wp-admin/theme-install.php:159 +msgid "The Theme Installer screen requires JavaScript." +msgstr "Sidan för installation av teman kräver JavaScript." + +#: wp-admin/update-core.php:23 wp-admin/update-core.php:728 +#: wp-admin/update-core.php:764 wp-admin/update-core.php:802 +#: wp-admin/update-core.php:842 +msgid "Sorry, you are not allowed to update this site." +msgstr "Du har inte behörighet att uppdatera den här webbplatsen." + +#: wp-admin/customize.php:35 +msgid "Sorry, you are not allowed to edit this changeset." +msgstr "Du har inte behörighet att redigera denna version." + +#: wp-admin/user-edit.php:644 +msgid "Confirm use of potentially weak password" +msgstr "Bekräfta användning av ett eventuellt svagt lösenord" + +#: wp-admin/user-new.php:16 wp-admin/user-new.php:56 +msgid "Sorry, you are not allowed to add users to this network." +msgstr "Du har inte behörighet att lägga till användare i det här nätverket." + +#: wp-admin/users.php:361 wp-admin/users.php:393 +msgid "Sorry, you are not allowed to remove users." +msgstr "Du har inte behörighet att ta bort användare." + +#: wp-admin/plugins.php:440 +msgid "The search for installed plugins will search for terms in their name, description, or author." +msgstr "Vid sökning bland installerade tillägg så används termer i dess namn, beskrivning eller skaparens namn." + +#: wp-admin/nav-menus.php:955 +msgid "Display location" +msgstr "Visa plats" + +#: wp-admin/user-new.php:223 +msgid "New users are automatically assigned a password, which they can change after logging in. You can view or edit the assigned password by clicking the Show Password button. The username cannot be changed once the user has been added." +msgstr "Nya användare får automatiskt ett lösenord genererat som de sedan kan ändra efter att ha loggat in. Du kan visa eller ändra genererat lösenord genom att klicka på knappen, Visa lösenord. Användarnamnet kan inte ändras när användaren lagts till." + +#: wp-admin/user-new.php:225 +msgid "By default, new users will receive an email letting them know they’ve been added as a user for your site. This email will also contain a password reset link. Uncheck the box if you don’t want to send the new user a welcome email." +msgstr "Som standard kommer nya användare att få ett meddelande som berättar att de har lagts till på din webbplats. Meddelandet innehåller även en återställningslänk för lösenord. Avmarkera det här alternativet om du inte vill skicka ett välkomstmeddelande till nya användare." + +#: wp-admin/theme-install.php:69 +msgid "Expand Sidebar" +msgstr "Visa sidopanel" + +#: wp-admin/custom-background.php:423 +msgctxt "Original Size" +msgid "Original" +msgstr "Oförändrad" + +#: wp-admin/custom-background.php:431 wp-admin/custom-background.php:432 +msgctxt "Background Repeat" +msgid "Repeat" +msgstr "Upprepa" + +#: wp-admin/custom-background.php:439 wp-admin/custom-background.php:440 +msgctxt "Background Scroll" +msgid "Scroll" +msgstr "Rulla" + +#: wp-admin/customize.php:72 wp-admin/customize.php:81 +msgid "Customize New Changes" +msgstr "Acceptera ändringar" + +#. translators: accessibility text +#: wp-admin/theme-install.php:71 +msgid "Select one or more Theme features to filter by" +msgstr "Välj en eller flera temafunktioner att filtrera efter" + +#: wp-admin/theme-install.php:207 wp-admin/theme-install.php:227 +msgid "Clear current filters" +msgstr "Rensa filterinställningar" + +#: wp-admin/theme-install.php:232 +msgid "Edit Filters" +msgstr "Filtrera" + +#: wp-admin/update-core.php:59 +msgid "You are using a development version of WordPress. You can update to the latest nightly build automatically:" +msgstr "Du använder en utvecklingsversion av WordPress. Du kan uppdatera till den senaste dagliga versionen automatiskt:" + +#: wp-admin/update-core.php:62 +msgid "If you need to re-install version %s, you can do so here:" +msgstr "Om du behöver ominstallera version %s kan du göra det här:" + +#: wp-admin/user-edit.php:51 +msgid "You can select the language you wish to use while using the WordPress administration screen without affecting the language site visitors see." +msgstr "Du kan välja vilket språk du vill använda i WordPress adminpanel utan att ändra vilket språk dina besökare ser." + +#. translators: 1: user id, 2: user login +#: wp-admin/users.php:425 +msgid "ID #%1$s: %2$s Sorry, you are not allowed to remove this user." +msgstr "ID #%1$s: %2$s Du har inte behörighet att ta bort denna användare." + +#: wp-admin/customize.php:231 +msgctxt "short (~12 characters) label for hide controls button" +msgid "Hide Controls" +msgstr "Dölj kontroller" + +#: wp-admin/customize.php:217 +msgid "The Customizer allows you to preview changes to your site before publishing them. You can navigate to different pages on your site within the preview. Edit shortcuts are shown for some editable elements." +msgstr "Anpassaren låter dig förhandsgranska ändringar på din webbplats innan du uppdaterar dem. Du kan navigera till olika sidor på din webbplats inom förhandsgranskningsfönstret. Element med ikoner kan redigeras direkt." + +#: wp-admin/user-new.php:23 wp-admin/user-new.php:144 +msgid "Sorry, you are not allowed to create users." +msgstr "Du har inte behörighet att skapa nya användare." + +#: wp-admin/users.php:179 wp-admin/users.php:228 +msgid "Sorry, you are not allowed to delete users." +msgstr "Du har inte behörighet att ta bort användare." + +#. translators: %s: user's display name +#: wp-admin/user-edit.php:34 +msgid "Edit User %s" +msgstr "Redigera användaren %s" + +#. translators: tab heading for Site Health Info page +#: wp-admin/site-health-info.php:59 wp-admin/site-health.php:64 +msgctxt "Site Health" +msgid "Info" +msgstr "Info" + +#: wp-admin/customize.php:71 +msgid "Your scheduled changes just published" +msgstr "Dina schemalagda ändringar publicerades nyss" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:235 +msgid "%s (Month of the year, for example 05.)" +msgstr "%s (Månad på året, till exempel 05.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:237 +msgid "%s (Day of the month, for example 28.)" +msgstr "%s (Dag i månaden, till exempel 28.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:239 +msgid "%s (Hour of the day, for example 15.)" +msgstr "%s (Timma på dagen, till exempel 15.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:241 +msgid "%s (Minute of the hour, for example 43.)" +msgstr "%s (Minuttal, till exempel 43.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:243 +msgid "%s (Second of the minute, for example 33.)" +msgstr "%s (Sekund på minuten, till exempel 33.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:245 +msgid "%s (The unique ID of the post, for example 423.)" +msgstr "%s (Det unika ID-numret för inlägget, till exempel 423.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:247 +msgid "%s (The sanitized post title (slug).)" +msgstr "%s (Den säkerhetsfiltrerade inläggsrubriken (slug).)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:249 +msgid "%s (Category slug. Nested sub-categories appear as nested directories in the URL.)" +msgstr "%s (Kategorimärke. Kapslade underkategorier visas som underkataloger i URL:en.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:251 +msgid "%s (A sanitized version of the author name.)" +msgstr "%s (En säkerhetsfiltrerad version av författarens namn.)" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:264 +msgid "%s added to permalink structure" +msgstr "%s har lagts till permalänkstrukturen" + +#. translators: %s: permalink structure tag +#: wp-admin/options-permalink.php:267 +msgid "%s (already used in permalink structure)" +msgstr "%s (används redan i permalänkstrukturen)" + +#: wp-admin/options-permalink.php:271 +msgid "Available tags:" +msgstr "Tillgängliga taggar:" + +#: wp-admin/plugins.php:34 wp-admin/plugins.php:159 +msgid "Sorry, you are not allowed to activate this plugin." +msgstr "Du saknar behörighet för att aktivera detta tillägg." + +#: wp-admin/plugins.php:182 +msgid "Sorry, you are not allowed to deactivate this plugin." +msgstr "Du saknar behörighet att inaktivera detta tillägg." + +#: wp-admin/user-edit.php:279 +msgid "Syntax Highlighting" +msgstr "Syntaxmarkering" + +#: wp-admin/user-edit.php:281 +msgid "Disable syntax highlighting when editing code" +msgstr "Inaktivera syntaxmarkering vid redigering av kod" + +#: wp-admin/user-new.php:307 +msgid "That user could not be added to this site." +msgstr "Användaren kunde inte läggas till på denna webbplats." + +#: wp-admin/user-new.php:310 +msgid "User has been created, but could not be added to this site." +msgstr "Användaren har skapats, men kunde inte läggas till på denna webbplats." + +#: wp-admin/freedoms.php:69 +msgid "From time to time, your WordPress site may send data to WordPress.org — including, but not limited to — the version of WordPress you are using, and a list of installed plugins and themes." +msgstr "Emellanåt kan din WordPress-webbplats skicka data till WordPress.org som bland annat innehåller uppgift om vilken version av WordPress du har, samt en lista med installerade tillägg och teman." + +#. translators: %s: https://wordpress.org/about/privacy +#: wp-admin/freedoms.php:81 +msgid "We take privacy and transparency very seriously. To learn more about what data we collect, and how we use it, please visit WordPress.org/about/privacy." +msgstr "Vi ser seriöst på personlig integritet och öppenhet. För att läsa mer om vilka uppgifter vi samlar in och hur vi använder dem kan du gå till WordPress.org/about/privacy." + +#: wp-admin/about.php:220 +msgid "Developer Happiness" +msgstr "Lycka för utvecklare" + +#: wp-admin/options-permalink.php:177 +msgid "https://codex.wordpress.org/Using_Permalinks" +msgstr "https://codex.wordpress.org/Using_Permalinks" + +#: wp-admin/options-permalink.php:331 wp-admin/options-permalink.php:356 +#: wp-admin/options-permalink.php:389 +msgid "https://codex.wordpress.org/Changing_File_Permissions" +msgstr "https://codex.wordpress.org/Changing_File_Permissions" + +#. translators: 1: .htaccess, 2: Codex URL, 3: CTRL + a +#: wp-admin/options-permalink.php:387 +msgid "If your %1$s file was writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your %1$s file. Click in the field and press %3$s to select all." +msgstr "Om din fil %1$s vore skrivbar skulle vi ändrat detta automatiskt. Nu är den inte skrivbar, så här är de mod_rewrite-regler du behöver ha i din fil %1$s. Klicka någonstans i fältet och tryck på %3$s för att markera allt." + +#. translators: 1: web.config, 2: Codex URL, 3: CTRL + a, 4: element code +#: wp-admin/options-permalink.php:329 +msgid "If your %1$s file was writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your %1$s file. Click in the field and press %3$s to select all. Then insert this rule inside of the %4$s element in %1$s file." +msgstr "Om din fil %1$s vore skrivbar skulle vi ändrat detta automatiskt. Nu är den inte skrivbar, så här är den ändringsregel för URL du bör ha i din fil %1$s. Klicka någonstans i fältet och tryck på %3$s för att markera allt. Klistra sedan in denna regel inuti elementet %4$s i filen %1$s." + +#. translators: 1: Codex URL, 2: web.config, 3: CTRL + a +#: wp-admin/options-permalink.php:355 +msgid "If the root directory of your site was writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your %2$s file. Create a new file, called %2$s in the root directory of your site. Click in the field and press %3$s to select all. Then insert this code into the %2$s file." +msgstr "Om rotkatalogen för din webbplats vore skrivbar skulle vi kunnat utföra detta automatiskt. Nu är den inte skrivbar, så här är de mod_rewrite-regler du behöver ha i din fil %2$s. Skapa en ny fil med namnet %2$s i webbplatsens rotkatalog. Klicka någonstans i fältet och tryck på %3$s för att markera allt. Klistra sedan in denna kod i filen %2$s." + +#. translators: %s: https://wordpress.org/about/stats +#: wp-admin/freedoms.php:74 +msgid "This data is used to provide general enhancements to WordPress, which includes helping to protect your site by finding and automatically installing new updates. It is also used to calculate statistics, such as those shown on the WordPress.org stats page." +msgstr "Denna information används för allmänna förbättringar av WordPress, bland annat för att skydda din webbplats genom att automatiskt hitta och installera nya uppdateringar. Den används också till att beräkna statistik, såsom det som visas på statistik-sidan för WordPress.org." + +#: wp-admin/edit-form-blocks.php:158 +msgid "Default template" +msgstr "Standardmall" + +#: wp-admin/customize.php:80 +msgid "This changeset cannot be further modified." +msgstr "Detta anpassningspaket kan inte ändras mer." + +#: wp-admin/tools.php:15 +msgid "Privacy Policy Guide" +msgstr "Guide för integritetspolicy" + +#: wp-admin/edit-form-blocks.php:416 +msgid "https://wordpress.org/plugins/classic-editor/" +msgstr "https://wordpress.org/plugins/classic-editor/" + +#. translators: Page title of the About WordPress page in the admin. +#: wp-admin/about.php:13 +msgctxt "page title" +msgid "About" +msgstr "Om WordPress" + +#. Translators: Use this to specify the CSS font family for the default font +#: wp-admin/edit-form-blocks.php:179 +msgctxt "CSS Font Family for Editor Font" +msgid "Noto Serif" +msgstr "Noto Serif" + +#: wp-admin/freedoms.php:101 +msgid "The 1st Freedom" +msgstr "Den första friheten" + +#: wp-admin/freedoms.php:102 +msgid "To run the program for any purpose." +msgstr "Att köra programmet för vilket ändamål som helst." + +#: wp-admin/freedoms.php:106 +msgid "The 2nd Freedom" +msgstr "Den andra friheten" + +#: wp-admin/freedoms.php:107 +msgid "To study how the program works and change it to make it do what you wish." +msgstr "Att studera hur programmet fungerar och ändra det så att det gör det du vill." + +#: wp-admin/freedoms.php:111 +msgid "The 3rd Freedom" +msgstr "Den tredje friheten" + +#: wp-admin/freedoms.php:112 +msgid "To redistribute." +msgstr "Att distribuera vidare." + +#: wp-admin/freedoms.php:116 +msgid "The 4th Freedom" +msgstr "Den fjärde friheten" + +#: wp-admin/freedoms.php:117 +msgid "To distribute copies of your modified versions to others." +msgstr "Att distribuera kopior av din modifierade versioner till andra." + +#: wp-admin/post.php:46 +msgid "A post type mismatch has been detected." +msgstr "Inläggstyp stämmer inte överens." + +#. translators: %s: Classic Editor plugin URL +#: wp-admin/edit-form-blocks.php:415 +msgid "The block editor requires JavaScript. Please enable JavaScript in your browser settings, or try the Classic Editor plugin." +msgstr "Blockredigeraren behöver JavaScript för att fungera. Aktivera JavaScript i inställningarna för din webbläsare eller prova med tillägget Classic Editor." + +#. translators: tab heading for Site Health Status page +#: wp-admin/site-health-info.php:52 wp-admin/site-health.php:57 +msgctxt "Site Health" +msgid "Status" +msgstr "Status" + +#: wp-admin/nav-menus.php:819 +msgid "or create a new menu. Don’t forget to save your changes!" +msgstr "eller skapa en ny meny. Glöm inte att spara dina ändringar!" + +#: wp-admin/nav-menus.php:852 +msgid "Add menu items" +msgstr "Lägg till menyval" + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number, +#. 3: Minimum required PHP version number, 4: Current PHP version number +#: wp-admin/update-core.php:92 wp-admin/upgrade.php:101 +msgid "You cannot update because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s." +msgstr "Du kan inte uppdatera eftersom WordPress %2$s kräver PHP-version %3$s eller senare. Du har version %4$s." + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number, +#. 3: Minimum required MySQL version number, 4: Current MySQL version number +#: wp-admin/update-core.php:95 wp-admin/upgrade.php:104 +msgid "You cannot update because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s." +msgstr "Du kan inte uppdatera eftersom WordPress %2$s kräver MySQL-version %3$s eller senare. Du har version %4$s." + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number +#. including locale if necessary +#: wp-admin/update-core.php:98 +msgid "You can update to WordPress %2$s automatically:" +msgstr "Du kan uppdatera automatiskt till WordPress %2$s:" + +#. translators: %s: WordPress Planet URL +#: wp-admin/index.php:87 +msgid "WordPress Events and News — Upcoming events near you as well as the latest news from the official WordPress project and the WordPress Planet." +msgstr "WordPress-händelser och -nyheter — kommande evenamang i din närhet och de senaste nyheterna från det officiella WordPress-projektet och WordPress Planet." + +#: wp-admin/plugins.php:398 +msgid "Sorry, you are not allowed to resume this plugin." +msgstr "Du saknar behörighet att återstarta detta tillägg." + +#: wp-admin/plugins.php:503 +msgid "The plugin generated %d character of unexpected output during activation." +msgid_plural "The plugin generated %d characters of unexpected output during activation." +msgstr[0] "Tillägget gav upphov till %d tecken oväntad utmatning vid dess aktivering." +msgstr[1] "Tillägget gav upphov till %d tecken oväntad utmatning vid dess aktivering." + +#: wp-admin/plugins.php:510 +msgid "If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin." +msgstr "Om du ser meddelanden om att ”headers redan har skickats”, problem med RSS-flöden eller andra problem kan du försöka att inaktivera eller ta bort detta tillägg." + +#: wp-admin/themes.php:224 +msgid "Theme could not be resumed because it triggered a fatal error." +msgstr "Temat kunde inte återstartas eftersom det gav upphov till ett allvarligt fel." + +#: wp-admin/plugins.php:567 +msgid "Plugin resumed." +msgstr "Tillägget har återstartats." + +#: wp-admin/themes.php:220 +msgid "Theme resumed." +msgstr "Temat har återstartats." + +#: wp-admin/user-edit.php:493 +msgid "If you change this we will send you an email at your new address to confirm it. The new address will not become active until confirmed." +msgstr "Om du ändrar detta kommer vi att skicka e-post till din nya adress för en bekräftelse. Den nya adressen aktiveras först när den har bekräftats." + +#: wp-admin/theme-install.php:314 +msgid "Previous theme" +msgstr "Föregående tema" + +#: wp-admin/theme-install.php:315 +msgid "Next theme" +msgstr "Nästa tema" + +#: wp-admin/site-health-info.php:35 wp-admin/site-health.php:40 +#: wp-admin/menu.php:266 +msgid "Site Health" +msgstr "Hälsokontroll för webbplatser" + +#: wp-admin/update-core.php:310 +msgid "This update doesn’t work with your version of PHP." +msgstr "Denna uppdatering fungerar inte med din version av PHP." + +#: wp-admin/site-health-info.php:12 wp-admin/site-health-info.php:81 +msgid "Site Health Info" +msgstr "Information om webbplatsens hälsa" + +#: wp-admin/site-health-info.php:15 +msgid "Sorry, you are not allowed to access the debug data." +msgstr "Du saknar behörighet att komma åt felsökningsinformation." + +#: wp-admin/site-health-info.php:43 wp-admin/site-health.php:48 +msgid "Current health score:" +msgstr "Aktuell hälsopoäng:" + +#: wp-admin/site-health-info.php:68 wp-admin/site-health.php:73 +msgid "The Site Health check requires JavaScript." +msgstr "Kontrollen av webbplatsens hälsa kräver JavaScript för att fungera." + +#: wp-admin/site-health-info.php:85 +msgid "This page can show you every detail about the configuration of your WordPress website. If we see anything here that could be improved, we will let you know on the Site Health Status page." +msgstr "Sidan kan visa dig all information om hur din WordPress-webbplats är konfigurerad. Om vi ser något här som skulle kunna förbättras kommer vi att berätta om det på sidan för webbplatsens hälsostatus." + +#: wp-admin/site-health-info.php:88 +msgid "If you want to export a handy list of all the information on this page, you can use the button below to copy it to the clipboard. You can then paste it in a text file and save it to your harddrive, or paste it in an email exchange with a support engineer or theme/plugin developer for example." +msgstr "Om du vill exportera en bekväm lista med all information som finns på denna sida kan du använda knapparna nedan för att kopiera detta till urklipp. Sedan kan du klistra in det i en textfil och spara på hårddisken, eller klistra in det i ett e-postmeddelande till, exempelvis, någon supportperson eller utvecklare av något tema eller tillägg.." + +#: wp-admin/site-health-info.php:94 +msgid "Copy site info to clipboard" +msgstr "Kopiera information om webbplatsen till urklipp" + +#: wp-admin/plugins.php:512 +msgid "Plugin could not be resumed because it triggered a fatal error." +msgstr "Tillägget kunde inte återstartas eftersom det orsakade ett allvarligt fel." + +#: wp-admin/about.php:151 +msgid "Keeping Your Site Safe" +msgstr "Håll din webbplats säker" + +#: wp-admin/about.php:152 +msgid "WordPress 5.2 gives you even more robust tools for identifying and fixing configuration issues and fatal errors. Whether you are a developer helping clients or you manage your site solo, these tools can help get you the right information when you need it." +msgstr "WordPress 5.2 ger dig ännu bättre verktyg för att upptäcka och lösa konfigurationsproblem och allvarliga fel. Oavsett om du är en utvecklare som ger support till dina kunder eller om du hanterar din webbplats på egen hand kan dessa verktyg ge dig rätt information när du behöver den." + +#: wp-admin/about.php:162 +msgid "Site Health Check" +msgstr "Hälsokontroll för webbplatsen" + +#: wp-admin/about.php:168 +msgid "https://wordpress.org/news/2019/02/betty/" +msgstr "https://wordpress.org/news/2019/02/betty/" + +#: wp-admin/about.php:198 +msgid "PHP Error Protection" +msgstr "Skydd mot PHP-fel" + +#: wp-admin/about.php:199 +msgid "This administrator-focused update will let you safely fix or manage fatal errors without requiring a developer. It features better handling of the so-called “white screen of death”, and a way to enter recovery mode, which pauses error-causing plugins or themes." +msgstr "Denna uppdatering som riktar sig till administratörer låter dig på ett säkert sätt lösa allvarliga fel utan att någon utvecklare behöver hjälpa till. Den erbjuder bättre hantering av problem av typen ”vit skärm” och ett sätt att aktivera räddningsläge, där tillägg eller teman som orsakat problem pausas." + +#: wp-admin/about.php:205 +msgid "Improvements for Everyone" +msgstr "Förbättringar för alla" + +#: wp-admin/about.php:209 +msgid "Accessibility Updates" +msgstr "Uppdateringar för åtkomlighet" + +#: wp-admin/about.php:210 +msgid "A number of changes work together to improve contextual awareness and keyboard navigation flow for those using screen readers and other assistive technologies." +msgstr "Ett antal förändringar samverkar för att förbättra kännedom om kontexten och ett flödeför navigering via tangentbordet för dem som använder skärmläsare och andra stödlösningar." + +#: wp-admin/about.php:213 +msgid "New Dashboard Icons" +msgstr "Nya ikoner i adminpanelen" + +#: wp-admin/about.php:214 +msgid "Thirteen new icons include Instagram, a suite of icons for BuddyPress, and rotated Earth icons for global inclusion. Find them in the Dashboard and have some fun!" +msgstr "Tretton nya ikoner, inklusive Instagram, en rad ikoner för BuddyPress och roterade jordglobsikoner för att inkludera alla. Leta reda på dem i adminpanelen och ha lite kul med dem!" + +#: wp-admin/about.php:224 +msgid "PHP Version Bump" +msgstr "Höjd PHP-version" + +#: wp-admin/about.php:225 +msgid "The minimum supported PHP version is now 5.6.20. As of WordPress 5.2, themes and plugins can safely take advantage of namespaces, anonymous functions, and more!" +msgstr "Den lägsta PHP-versionen som stöds är nu 5.6.20. Från och med WordPress 5.2 kan teman och tillägg utan problem dra nytta av namespace, anonyma funktioner m.m.!" + +#: wp-admin/about.php:228 +msgid "Privacy Updates" +msgstr "Nyheter kring integritet" + +#: wp-admin/about.php:229 +msgid "A new theme page template, a conditional function, and two CSS classes make designing and customizing the Privacy Policy page easier." +msgstr "En ny mall för temasidor, en villkorlig funktion och två CSS-klasser gör det enklare att utforma och anpassa sidan för integritetspolicy." + +#: wp-admin/about.php:234 +msgid "New Body Tag Hook" +msgstr "Ny hook för body-taggen" + +#: wp-admin/about.php:247 +msgid "Building JavaScript" +msgstr "Att bygga med JavaScript" + +#: wp-admin/about.php:248 +msgid "With the addition of webpack and Babel configurations in the @wordpress/scripts package, developers won’t have to worry about setting up complex build tools to write modern JavaScript." +msgstr "Nu när konfigurationer för webpack och Babel har lagts till i paketet @wordpress/scripts behöver utvecklare inte längre bekymra sig över att konfigurera komplicerade byggverktyg för att kunna använda modernt JavaScript." + +#. translators: 1: link to the WordPress 5.1 release post +#: wp-admin/about.php:167 +msgid "Building on the Site Health features introduced in 5.1, this release adds two new pages to help debug common configuration issues. It also adds space where developers can include debugging information for site maintainers." +msgstr "Som en vidareutveckling av funktionerna för webbplatsens hälsa som introducerades i version 5.1, tillkommer det i denna version två nya sidor som kan hjälpa till vid felsökning av vanliga konfigurationsproblem. Dessutom definierar detta ett utrymme där utvecklare kan inkludera felsökningsinformation för dem som underhåller webbplatser." + +#. translators: 1: link to /wp-admin/site-health.php 2: link to +#. /wp-admin/site-health.php?tab=debug +#: wp-admin/about.php:174 +msgid " Check your site status, and learn how to debug issues." +msgstr " Kontrollera statusen för din webbplats och lär dig mer om hur du felsöker problem." + +#. translators: 1: wp_body_open 2: +#: wp-admin/about.php:239 +msgid "5.2 introduces a %1$s hook, which lets themes support injecting code right at the beginning of the %2$s element." +msgstr "5.2 introducerar hooken %1$s som låter teman stödja inkludering av kod precis i början av elementet %2$s." + +#. translators: %d: comment ID +#: wp-admin/includes/ajax-actions.php:914 +msgid "Comment %d does not exist" +msgstr "Kommentar %d existerar inte." + +#: wp-admin/includes/taxonomy.php:131 +msgid "You did not enter a category name." +msgstr "Du angav inget kategorinamn." + +#: wp-admin/includes/ajax-actions.php:1230 +msgid "Sorry, you must be logged in to reply to a comment." +msgstr "Du måste vara inloggad för att svara på en kommentar." + +#: wp-admin/includes/ajax-actions.php:1495 +#: wp-admin/includes/ajax-actions.php:1501 +msgid "Please provide a custom field value." +msgstr "Var vänlig ange ett värde för det anpassade fältet." + +#: wp-admin/includes/ajax-actions.php:1895 +msgid "Someone" +msgstr "Någon" + +#. translators: %s: user who is currently editing the page +#: wp-admin/includes/ajax-actions.php:1901 +msgid "Saving is disabled: %s is currently editing this page." +msgstr "Sparande inaktiverat: %s redigerar just nu denna sida." + +#. translators: %s: user who is currently editing the post +#: wp-admin/includes/ajax-actions.php:1898 +msgid "Saving is disabled: %s is currently editing this post." +msgstr "Sparande inaktiverat: %s redigerar just nu detta inlägg." + +#: wp-admin/includes/template.php:443 wp-admin/comment.php:42 +#: wp-admin/edit-form-comment.php:17 +msgid "Edit Comment" +msgstr "Redigera kommentar" + +#: wp-admin/comment.php:74 +msgid "This comment is in the Trash. Please move it out of the Trash if you want to edit it." +msgstr "Denna kommentar har placerats i papperskorgen. Om du vill redigera kommentaren så måste du flytta den från papperskorgen." + +#: wp-admin/comment.php:121 +msgid "You are about to mark the following comment as spam:" +msgstr "Du håller på att markera följande kommentar som skräp:" + +#: wp-admin/comment.php:125 +msgid "You are about to move the following comment to the Trash:" +msgstr "Du är på väg att flytta följande kommentar till papperskorgen:" + +#: wp-admin/comment.php:129 +msgid "You are about to delete the following comment:" +msgstr "Du håller på att radera följande kommentar:" + +#: wp-admin/comment.php:130 +msgid "Permanently Delete Comment" +msgstr "Radera kommentar permanent" + +#: wp-admin/comment.php:133 +msgid "You are about to approve the following comment:" +msgstr "Du håller på att godkänna följande kommentar:" + +#: wp-admin/comment.php:134 +msgid "Approve Comment" +msgstr "Godkänn kommentar" + +#: wp-admin/comment.php:352 +msgid "Unknown action." +msgstr "Okänd åtgärd." + +#: wp-admin/includes/template.php:2295 wp-admin/nav-menus.php:734 +#: wp-admin/options.php:364 +msgid "Save Changes" +msgstr "Spara ändringar" + +#: wp-admin/includes/deprecated.php:602 +msgid "Displaying %s–%s of %s" +msgstr "Visar %s–%s av %s" + +#: wp-admin/includes/class-wp-list-table.php:466 wp-admin/edit.php:250 +msgid "Bulk Actions" +msgstr "Massåtgärder" + +#. translators: 1: display_name of last user, 2: date of last edit, 3: time of +#. last edit. +#. translators: 1: Name of most recent post author, 2: Post edited date, 3: +#. Post edited time +#: wp-admin/includes/ajax-actions.php:2605 wp-admin/edit-form-advanced.php:581 +msgid "Last edited by %1$s on %2$s at %3$s" +msgstr "Senast ändrat av %1$s den %2$s kl. %3$s" + +#. translators: 1: date of last edit, 2: time of last edit. +#. translators: 1: Post edited date, 2: Post edited time +#: wp-admin/includes/ajax-actions.php:2608 wp-admin/edit-form-advanced.php:584 +msgid "Last edited on %1$s at %2$s" +msgstr "Senast ändrat den %1$s kl. %2$s" + +#: wp-admin/includes/template.php:485 +msgid "Update Comment" +msgstr "Uppdatera kommentar" + +#: wp-admin/includes/class-wp-posts-list-table.php:306 +msgctxt "posts" +msgid "Mine (%s)" +msgid_plural "Mine (%s)" +msgstr[0] "Min (%s)" +msgstr[1] "Mina (%s)" + +#: wp-admin/includes/class-wp-posts-list-table.php:326 +msgctxt "posts" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Alla (%s)" +msgstr[1] "Alla (%s)" + +#. translators: %s: directory name +#: wp-admin/includes/class-wp-filesystem-base.php:282 +msgid "Changing to %s" +msgstr "Ändrar till %s" + +#. translators: %s: directory name +#: wp-admin/includes/class-wp-filesystem-base.php:298 +msgid "Found %s" +msgstr "Funna %s" + +#: wp-admin/includes/class-wp-upgrader.php:149 +msgid "Invalid data provided." +msgstr "Ogiltig data tillhandahållen." + +#: wp-admin/includes/class-wp-upgrader.php:152 +msgid "Unable to locate WordPress root directory." +msgstr "Kunde inte hitta WordPress rot-katalog." + +#: wp-admin/includes/class-wp-upgrader.php:153 +msgid "Unable to locate WordPress content directory (wp-content)." +msgstr "Oförmögen att lokalisera WordPress innehållskatalog (wp-content)." + +#: wp-admin/includes/class-wp-upgrader.php:154 wp-admin/includes/plugin.php:922 +msgid "Unable to locate WordPress plugin directory." +msgstr "Oförmögen att lokalisera WordPress tilläggskatalog." + +#. translators: %s: directory name +#: wp-admin/includes/class-wp-upgrader.php:157 +msgid "Unable to locate needed folder (%s)." +msgstr "Oförmögen att lokalisera efterfrågad katalog (%s)." + +#: wp-admin/includes/class-wp-upgrader.php:160 +msgid "Installing the latest version…" +msgstr "Installerar den senaste versionen…" + +#: wp-admin/includes/class-wp-upgrader.php:162 +msgid "Destination folder already exists." +msgstr "Målmappen finns redan." + +#: wp-admin/includes/file.php:1429 wp-admin/includes/file.php:1564 +msgid "Incompatible Archive." +msgstr "Inkompatibelt arkiv." + +#. translators: %s: theme name +#. translators: %s: post title +#: wp-admin/includes/class-wp-theme-install-list-table.php:268 +#: wp-admin/includes/class-wp-posts-list-table.php:1383 +msgid "Preview “%s”" +msgstr "Förhandsgranska ”%s”" + +#: wp-admin/includes/class-file-upload-upgrader.php:56 +#: wp-admin/includes/class-file-upload-upgrader.php:95 +#: wp-admin/includes/class-file-upload-upgrader.php:110 +msgid "Please select a file" +msgstr "Vänligen välj en fil" + +#: wp-admin/includes/file.php:863 +msgid "The uploaded file could not be moved to %s." +msgstr "Kunde inte flytta den uppladdade filen till %s." + +#: wp-admin/includes/dashboard.php:51 +msgid "Right Now" +msgstr "Just nu" + +#: wp-admin/includes/dashboard.php:1382 +msgid "Other WordPress News" +msgstr "Fler WordPressnyheter" + +#: wp-admin/includes/dashboard.php:122 +msgid "View all" +msgstr "Visa alla" + +#: wp-admin/includes/dashboard.php:177 +msgid "Configure" +msgstr "Konfigurera" + +#: wp-admin/includes/template.php:449 wp-admin/edit-form-comment.php:72 +msgid "Comment" +msgstr "Kommentar" + +#: wp-admin/includes/nav-menu.php:380 wp-admin/includes/nav-menu.php:709 +msgid "Page" +msgstr "Sida" + +#. translators: 1: comment author, 2: post link, 3: notification if the comment +#. is pending +#: wp-admin/includes/dashboard.php:707 +msgid "From %1$s on %2$s %3$s" +msgstr "Från %1$s på %2$s %3$s" + +#: wp-admin/includes/dashboard.php:710 wp-admin/includes/dashboard.php:717 +#: wp-admin/includes/dashboard.php:747 wp-admin/includes/dashboard.php:754 +msgid "[Pending]" +msgstr "[Väntande]" + +#. translators: 1: type of comment, 2: notification if the comment is pending +#: wp-admin/includes/dashboard.php:752 +msgctxt "dashboard" +msgid "%1$s %2$s" +msgstr "%1$s %2$s" + +#: wp-admin/includes/dashboard.php:997 +msgid "Loading…" +msgstr "Laddar…" + +#: wp-admin/includes/dashboard.php:997 wp-admin/includes/dashboard.php:1173 +msgid "This widget requires JavaScript." +msgstr "Denna widget kräver JavaScript." + +#: wp-admin/includes/file.php:25 +msgid "Main Index Template" +msgstr "Huvudmall" + +#: wp-admin/includes/file.php:56 +msgid "RTL Stylesheet" +msgstr "RTL Stilmall" + +#: wp-admin/includes/file.php:64 +msgid "Popup Comments" +msgstr "Popup-kommentarer" + +#: wp-admin/includes/file.php:29 +msgid "Category Template" +msgstr "Mall för kategorier" + +#: wp-admin/includes/file.php:21 +msgid "Search Form" +msgstr "Sökformulär" + +#: wp-admin/includes/file.php:36 +msgid "Single Post" +msgstr "Enskilt inlägg" + +#: wp-admin/includes/file.php:22 +msgid "404 Template" +msgstr "404-mall" + +#: wp-admin/includes/file.php:23 +msgid "Links Template" +msgstr "Mall för länkar" + +#: wp-admin/includes/file.php:16 +msgid "Theme Functions" +msgstr "Temafunktioner" + +#: wp-admin/includes/file.php:41 +msgid "Attachment Template" +msgstr "Mall för bilagor" + +#: wp-admin/includes/file.php:42 +msgid "Image Attachment Template" +msgstr "Mall för bildbilagor" + +#: wp-admin/includes/file.php:43 +msgid "Video Attachment Template" +msgstr "Mall för videobilagor" + +#: wp-admin/includes/file.php:44 +msgid "Audio Attachment Template" +msgstr "Mall för ljudbilagor" + +#: wp-admin/includes/file.php:45 +msgid "Application Attachment Template" +msgstr "Mall för formbilagor" + +#: wp-admin/includes/file.php:58 +msgid "my-hacks.php (legacy hacks support)" +msgstr "my-hacks.php (stöd för gamla hack)" + +#: wp-admin/includes/file.php:59 +msgid ".htaccess (for rewrite rules )" +msgstr ".htaccess (för omskrivningsregler)" + +#: wp-admin/includes/file.php:62 +msgid "Comments Template" +msgstr "Mall för kommentarer" + +#: wp-admin/includes/file.php:63 +msgid "Popup Comments Template" +msgstr "Mall för poppuppkommentarer" + +#: wp-admin/includes/file.php:756 +msgid "The uploaded file was only partially uploaded." +msgstr "Filen är endast delvis uppladdad." + +#: wp-admin/includes/file.php:757 +msgid "No file was uploaded." +msgstr "Ingen fil laddades upp." + +#: wp-admin/includes/file.php:759 +msgid "Missing a temporary folder." +msgstr "En temporär katalog saknas." + +#: wp-admin/includes/file.php:760 +msgid "Failed to write file to disk." +msgstr "Kan inte skriva till disken." + +#: wp-admin/includes/file.php:761 +msgid "File upload stopped by extension." +msgstr "Filuppladdningen stoppades av PHP-tillägget." + +#: wp-admin/includes/file.php:775 +msgid "Invalid form submission." +msgstr "Ogiltigt formulär." + +#: wp-admin/includes/file.php:785 +msgid "Specified file failed upload test." +msgstr "Den valda filen klarade inte uppladdningsprovet." + +#: wp-admin/includes/file.php:979 +msgid "Invalid URL Provided." +msgstr "Ogiltig URL angiven." + +#: wp-admin/includes/file.php:986 +msgid "Could not create Temporary file." +msgstr "Kunde inte skapa temporär fil." + +#: wp-admin/includes/file.php:1436 wp-admin/includes/file.php:1500 +msgid "Could not retrieve file from archive." +msgstr "Kunde inte hämta fil från arkiv." + +#: wp-admin/includes/file.php:1518 +msgid "Could not extract file from archive." +msgstr "Kunde inte packa upp fil från arkiv." + +#: wp-admin/includes/file.php:1568 +msgid "Empty archive." +msgstr "Tomt arkiv." + +#: wp-admin/includes/file.php:2031 +msgid "FTP" +msgstr "FTP" + +#: wp-admin/includes/file.php:2034 +msgid "FTPS (SSL)" +msgstr "FTPS (SSL)" + +#: wp-admin/includes/file.php:2037 +msgid "SSH2" +msgstr "SSH2" + +#: wp-admin/includes/file.php:2064 +msgid "Connection Information" +msgstr "Uppgifter för anslutning" + +#: wp-admin/includes/file.php:2098 +msgid "Hostname" +msgstr "Servernamn" + +#: wp-admin/includes/file.php:2141 +msgid "Authentication Keys" +msgstr "Identifieringsnycklar" + +#: wp-admin/includes/file.php:2143 +msgid "Public Key:" +msgstr "Publik nyckel:" + +#: wp-admin/includes/file.php:2147 +msgid "Private Key:" +msgstr "Privat nyckel:" + +#: wp-admin/includes/file.php:2120 +msgid "Connection Type" +msgstr "Anslutningstyp" + +#: wp-admin/includes/file.php:2164 +msgid "Proceed" +msgstr "Fortsätt" + +#: wp-admin/includes/class-wp-posts-list-table.php:1652 +msgid "Main Page (no parent)" +msgstr "Huvudsida (utan överordnad)" + +#: wp-admin/includes/plugin-install.php:267 +msgid "Popular tags" +msgstr "Populära taggar" + +#: wp-admin/includes/plugin-install.php:268 +msgid "You may also browse based on the most popular tags in the Plugin Directory:" +msgstr "Du kan också bläddra baserat på populära taggar i tilläggskatalogen:" + +#: wp-admin/includes/plugin-install.php:321 +#: wp-admin/includes/plugin-install.php:324 +msgid "Search Plugins" +msgstr "Sök efter tillägg" + +#: wp-admin/includes/plugin-install.php:337 +msgid "If you have a plugin in a .zip format, you may install it by uploading it here." +msgstr "Om du har ett tillägg i .zip-format så kan du installera det genom att ladda upp det här." + +#: wp-admin/includes/plugin-install.php:340 +msgid "Plugin zip file" +msgstr "Tillägg - ziparkivsfil" + +#: wp-admin/includes/plugin-install.php:697 +msgid "(based on %s rating)" +msgid_plural "(based on %s ratings)" +msgstr[0] "(baserat på %s omdöme)" +msgstr[1] "(baserat på %s omdömen)" + +#: wp-admin/includes/plugin-install.php:832 +msgid "Install Update Now" +msgstr "Installera uppdatering nu" + +#. translators: %s: Plugin version +#: wp-admin/includes/plugin-install.php:843 +msgid "Newer Version (%s) Installed" +msgstr "Nyare version (%s) installerad" + +#: wp-admin/includes/plugin-install.php:846 +msgid "Latest Version Installed" +msgstr "Senaste versionen installerad" + +#: wp-admin/includes/plugin-install.php:646 +msgid "Requires WordPress Version:" +msgstr "Kräver WordPress version:" + +#. translators: %s: version number +#: wp-admin/includes/plugin-install.php:649 +#: wp-admin/includes/plugin-install.php:659 +msgid "%s or higher" +msgstr "%s eller högre" + +#: wp-admin/includes/plugin-install.php:653 +msgid "Compatible up to:" +msgstr "Kompatibelt upp till:" + +#: wp-admin/includes/plugin-install.php:679 +msgid "WordPress.org Plugin Page »" +msgstr "WordPress.org tilläggssida »" + +#: wp-admin/includes/plugin-install.php:687 +msgid "Average Rating" +msgstr "Genomsnittligt omdöme" + +#: wp-admin/includes/plugin-install.php:783 +msgid "Warning: This plugin has not been tested with your current version of WordPress." +msgstr "Varning: Det här tillägget har inte testats med din nuvarande version av WordPress." + +#: wp-admin/includes/plugin.php:704 +msgid "The plugin generated unexpected output." +msgstr "Tillägget genererade oväntad output." + +#: wp-admin/includes/plugin.php:851 +msgid "One of the plugins is invalid." +msgstr "Ett av tilläggen är ogiltigt." + +#. translators: %s: comma-separated list of plugin filenames +#: wp-admin/includes/plugin.php:1005 +msgid "Could not fully remove the plugins %s." +msgstr "Kunde inte ta bort tillägg(en) %s fullständigt." + +#: wp-admin/includes/plugin.php:1065 +msgid "Invalid plugin path." +msgstr "Ogiltigt sökväg för tillägg." + +#: wp-admin/includes/plugin.php:1068 +msgid "Plugin file does not exist." +msgstr "Tilläggets fil saknas." + +#: wp-admin/includes/plugin.php:1073 +msgid "The plugin does not have a valid header." +msgstr "Tillägget saknar en riktig 'header'." + +#. translators: manage posts column name +#: wp-admin/includes/class-wp-posts-list-table.php:606 +msgctxt "column name" +msgid "Title" +msgstr "Rubrik" + +#: wp-admin/includes/class-wp-posts-list-table.php:1520 +msgid "Bulk Edit" +msgstr "Massredigera" + +#: wp-admin/includes/class-wp-posts-list-table.php:1574 +#: wp-admin/includes/class-wp-posts-list-table.php:1658 +#: wp-admin/includes/class-wp-posts-list-table.php:1697 +#: wp-admin/includes/class-wp-posts-list-table.php:1737 +#: wp-admin/includes/class-wp-posts-list-table.php:1746 +#: wp-admin/includes/class-wp-posts-list-table.php:1780 +#: wp-admin/includes/class-wp-posts-list-table.php:1801 +#: wp-admin/includes/class-wp-posts-list-table.php:1829 +msgid "— No Change —" +msgstr "— Ingen ändring —" + +#. translators: Between password field and private checkbox on post quick edit +#. interface +#: wp-admin/includes/class-wp-posts-list-table.php:1603 +msgid "–OR–" +msgstr "—ELLER—" + +#: wp-admin/includes/class-wp-posts-list-table.php:1738 +#: wp-admin/includes/class-wp-posts-list-table.php:1747 +msgid "Allow" +msgstr "Tillåt" + +#: wp-admin/includes/class-wp-posts-list-table.php:1739 +#: wp-admin/includes/class-wp-posts-list-table.php:1748 +msgid "Do not allow" +msgstr "Tillåt inte" + +#: wp-admin/includes/class-wp-posts-list-table.php:1765 +msgid "Allow Pings" +msgstr "Tillåt pingar" + +#: wp-admin/includes/template.php:2047 +#: wp-admin/includes/class-wp-posts-list-table.php:1799 +#: wp-admin/includes/class-wp-posts-list-table.php:1802 +msgid "Sticky" +msgstr "Klistrad" + +#: wp-admin/includes/class-wp-posts-list-table.php:1803 +msgid "Not Sticky" +msgstr "Ej klistrad" + +#: wp-admin/includes/class-wp-posts-list-table.php:1811 +msgid "Make this post sticky" +msgstr "Klistra det här inlägget" + +#: wp-admin/includes/class-wp-posts-list-table.php:1077 +msgid "Missed schedule" +msgstr "Missad tidsinställning" + +#: wp-admin/includes/class-wp-posts-list-table.php:1082 +msgid "Last Modified" +msgstr "Senast modifierat" + +#: wp-admin/includes/template.php:444 +msgid "Reply to Comment" +msgstr "Svara på kommentar" + +#: wp-admin/includes/template.php:486 +msgid "Submit Reply" +msgstr "Skicka svar" + +#: wp-admin/includes/template.php:527 +msgid "Comment by %s moved to the trash." +msgstr "Kommentar av %s flyttad till papperskorgen." + +#: wp-admin/includes/template.php:530 +msgid "Comment by %s marked as spam." +msgstr "Kommentar av %s markerad som skräp." + +#: wp-admin/includes/template.php:550 wp-admin/includes/template.php:565 +#: wp-admin/includes/template.php:632 wp-admin/includes/template.php:693 +msgid "Value" +msgstr "Värde" + +#: wp-admin/includes/template.php:622 +msgid "Key" +msgstr "Nyckel" + +#: wp-admin/includes/template.php:688 +msgid "Add New Custom Field:" +msgstr "Lägg till nytt anpassat fält:" + +#: wp-admin/includes/template.php:715 +msgid "Enter new" +msgstr "Ange nytt" + +#: wp-admin/includes/template.php:728 +msgid "Add Custom Field" +msgstr "Lägg till anpassat fält" + +#: wp-admin/includes/template.php:944 +msgid "Before you can upload your import file, you will need to fix the following error:" +msgstr "Innan du kan ladda upp din importeringsfil så måste du åtgärda följande problem:" + +#: wp-admin/includes/template.php:951 +msgid "Choose a file from your computer:" +msgstr "Välj en fil på din dator:" + +#: wp-admin/includes/template.php:951 +msgid "Maximum size: %s" +msgstr "Maximal storlek: %s" + +#: wp-admin/includes/template.php:956 +msgid "Upload file and import" +msgstr "Ladda upp fil och importera" + +#: wp-admin/includes/template.php:2056 +msgid "Front Page" +msgstr "Startsida" + +#: wp-admin/update.php:243 +msgid "Install Themes" +msgstr "Installera teman" + +#: wp-admin/includes/theme-install.php:138 wp-admin/theme-install.php:180 +msgid "Feature Filter" +msgstr "Filter för egenskaper" + +#: wp-admin/includes/theme-install.php:171 +msgid "Find Themes" +msgstr "Hitta teman" + +#: wp-admin/includes/theme-install.php:181 +msgid "If you have a theme in a .zip format, you may install it by uploading it here." +msgstr "Om du har ett tema i ZIP-format så kan du installera det genom att ladda upp det här." + +#: wp-admin/install.php:73 +msgid "WordPress › Installation" +msgstr "WordPress › Installation" + +#: wp-admin/install.php:123 +msgid "User(s) already exists." +msgstr "Användare(n) existerar redan." + +#: wp-admin/install.php:178 +msgid "Your Email" +msgstr "Din e-post" + +#: wp-admin/install.php:180 +msgid "Double-check your email address before continuing." +msgstr "Dubbelkolla e-postadressen innan du fortsätter." + +#: wp-admin/install.php:208 +msgid "Install WordPress" +msgstr "Installera WordPress" + +#: wp-admin/install.php:334 +msgid "Information needed" +msgstr "Information som behövs" + +#: wp-admin/install.php:335 +msgid "Please provide the following information. Don’t worry, you can always change these settings later." +msgstr "Var vänlig ange följande information. Bara lugn, du kan ändra dessa inställningar senare." + +#: wp-admin/install.php:391 +msgid "Success!" +msgstr "Klart!" + +#: wp-admin/link.php:116 +msgid "Link not found." +msgstr "Hittade inte länken." + +#: wp-admin/nav-menus.php:405 +msgid "Menu locations updated." +msgstr "Position för meny uppdaterad." + +#: wp-admin/my-sites.php:13 wp-admin/ms-delete-site.php:13 +msgid "Multisite support is not enabled." +msgstr "Stöd för multiwebbplatser är inte aktiverat." + +#: wp-admin/my-sites.php:122 +msgid "Visit" +msgstr "Besök" + +#: wp-admin/options-general.php:19 +msgid "General Settings" +msgstr "Allmänna inställningar" + +#: wp-admin/options-general.php:140 wp-admin/options-general.php:141 +msgid "Membership" +msgstr "Medlemskap" + +#: wp-admin/options-general.php:143 +msgid "Anyone can register" +msgstr "Vem som helst kan registrera sig" + +#: wp-admin/options-general.php:148 +msgid "New User Default Role" +msgstr "Förvald roll för nya användare" + +#: wp-admin/options-general.php:261 +msgid "This timezone is currently in standard time." +msgstr "Denna tidszon är för närvarande i standardtid." + +#: wp-admin/options-general.php:336 wp-admin/options-general.php:373 +msgid "Custom:" +msgstr "Anpassad:" + +#: wp-admin/options-general.php:386 +msgid "Week Starts On" +msgstr "Veckan startar med" + +#: wp-admin/privacy.php:120 +msgid "Privacy Settings" +msgstr "Integritetsinställningar" + +#: wp-admin/plugin-editor.php:21 +msgid "Edit Plugins" +msgstr "Redigera tillägg" + +#: wp-admin/includes/file.php:463 wp-admin/plugin-editor.php:108 +msgid "No such file exists! Double check the name and try again." +msgstr "Någon sådan fil existerar inte! Kontrollera namnet och försök på nytt." + +#: wp-admin/includes/file.php:471 wp-admin/plugin-editor.php:115 +msgid "Files of this type are not editable." +msgstr "Filer av denna typ är inte redigeringsbara." + +#: wp-admin/includes/ajax-actions.php:4448 wp-admin/theme-editor.php:189 +#: wp-admin/plugin-editor.php:183 +msgid "File edited successfully." +msgstr "Redigering av fil genomförd." + +#: wp-admin/plugin-editor.php:218 +msgid "Select plugin to edit:" +msgstr "Välj tillägg att redigera:" + +#: wp-admin/plugin-editor.php:241 +msgid "Plugin Files" +msgstr "Filer för tillägg" + +#: wp-admin/theme-editor.php:289 wp-admin/plugin-editor.php:268 +msgid "Documentation:" +msgstr "Dokumentation:" + +#: wp-admin/theme-editor.php:311 wp-admin/plugin-editor.php:279 +msgid "Update File" +msgstr "Uppdatera fil" + +#: wp-admin/theme-editor.php:21 +msgid "Edit Themes" +msgstr "Redigera teman" + +#: wp-admin/theme-editor.php:224 +msgid "Select theme to edit:" +msgstr "Välj tema att redigera:" + +#: wp-admin/theme-editor.php:275 +msgid "Oops, no such file exists! Double check the name and try again, merci." +msgstr "Oj då, filen existerar inte! Kontrollera filnamnet och försök på nytt, tack." + +#: wp-admin/includes/class-wp-automatic-updater.php:377 +#: wp-admin/update-core.php:570 +msgid "Installation Failed" +msgstr "Installationen misslyckades" + +#: wp-admin/update.php:85 +msgid "Plugin Reactivation" +msgstr "Återaktivering av tillägget" + +#: wp-admin/update.php:87 +msgid "Plugin reactivated successfully." +msgstr "Återaktiveringen av tillägget lyckades" + +#: wp-admin/update.php:91 +msgid "Plugin failed to reactivate due to a fatal error." +msgstr "Tillägget kunde inte aktiveras eftersom det orsakade ett allvarligt fel." + +#: wp-admin/update.php:127 +msgid "Installing Plugin: %s" +msgstr "Installerar tillägg: %s" + +#: wp-admin/update.php:156 +msgid "Installing Plugin from uploaded file: %s" +msgstr "Installerar tillägg från uppladdad fil: %s" + +#: wp-admin/update.php:248 +msgid "Installing Theme: %s" +msgstr "Installerar tema: %s" + +#: wp-admin/update.php:268 wp-admin/theme-install.php:58 +#: wp-admin/theme-install.php:150 wp-admin/theme-install.php:152 +msgid "Upload Theme" +msgstr "Ladda upp tema" + +#: wp-admin/update.php:274 +msgid "Installing Theme from uploaded file: %s" +msgstr "Installerar tema från uppladdad fil: %s" + +#. translators: %s: theme version +#: wp-admin/includes/class-wp-theme-install-list-table.php:303 +#: wp-admin/includes/class-wp-theme-install-list-table.php:461 +msgid "Update to version %s" +msgstr "Uppdatera till %s" + +#: wp-admin/comment.php:145 +msgid "This comment is currently marked as spam." +msgstr "Denna kommentar är för närvarande markerad som skräppost." + +#: wp-admin/comment.php:87 +msgid "Moderate Comment" +msgstr "Moderera kommentar" + +#: wp-admin/comment.php:142 +msgid "This comment is currently approved." +msgstr "Denna kommentar är för närvarande godkänd." + +#: wp-admin/includes/plugin.php:482 +msgid "Executed before Multisite is loaded." +msgstr "Körs innan multiwebbplatsnätverk laddas." + +#: wp-admin/includes/plugin.php:476 +msgid "External object cache." +msgstr "Extern objektcache." + +#: wp-admin/includes/plugin.php:475 +msgid "Custom maintenance message." +msgstr "Anpassat underhållsmeddelande." + +#: wp-admin/includes/plugin.php:473 +msgid "Custom database error message." +msgstr "Anpassat databasfelmeddelande." + +#: wp-admin/includes/file.php:792 +msgid "File is empty. Please upload something more substantial." +msgstr "Filen är tom. Var vänlig ladda upp något mer substantiellt." + +#. translators: %s: theme name +#. translators: %s: plugin name +#. translators: %s: Theme name +#: wp-admin/includes/class-wp-theme-install-list-table.php:321 +#: wp-admin/includes/deprecated.php:1381 wp-admin/theme-install.php:297 +msgid "Install %s" +msgstr "Installera %s" + +#: wp-admin/includes/plugin.php:472 +msgid "Custom database class." +msgstr "Anpassad databasklass." + +#: wp-admin/includes/plugin.php:471 +msgid "Advanced caching plugin." +msgstr "Avancerat cachetillägg." + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number, +#. 3: Minimum required PHP version number, 4: Minimum required MySQL version +#. number, 5: Current PHP version number, 6: Current MySQL version number +#: wp-admin/install.php:253 +msgid "You cannot install because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s." +msgstr "Du kan inte installera eftersom WordPress %2$s kräver PHP-version %3$s eller högre och MySQL-version %4$s eller högre. Du använder PHP-version %5$s MySQL-version %6$s." + +#: wp-admin/options-general.php:112 +msgid "This address is used for admin purposes. If you change this we will send you an email at your new address to confirm it. The new address will not become active until confirmed." +msgstr "Den här adressen används för administrativa behov. Om du ändrar den så kommer vi att skicka ett meddelande till din nya adress för att bekräfta ändringen. Den nya adressen kommer att börja gälla först när den bekräftats." + +#: wp-admin/comment.php:148 +msgid "This comment is currently in the Trash." +msgstr "Denna kommentar ligger för närvarande i papperskorgen." + +#: wp-admin/nav-menus.php:352 wp-admin/nav-menus.php:362 +msgid "Please enter a valid menu name." +msgstr "Ange ett giltigt menynamn." + +#: wp-admin/includes/nav-menu.php:430 wp-admin/includes/nav-menu.php:759 +msgid "View All" +msgstr "Visa alla" + +#: wp-admin/options-general.php:259 +msgid "This timezone is currently in daylight saving time." +msgstr "Denna tidszon har för närvarande sommartid." + +#: wp-admin/options-general.php:296 +msgid "This timezone does not observe daylight saving time." +msgstr "Denna tidszon använder inte sommartid." + +#: wp-admin/includes/class-wp-theme-install-list-table.php:151 +#: wp-admin/setup-config.php:275 +msgid "Try again" +msgstr "Försök igen" + +#. translators: 1: name of theme being updated, 2: number of updating themes, +#. 3: total number of themes being updated +#: wp-admin/includes/class-bulk-theme-upgrader-skin.php:24 +msgid "Updating Theme %1$s (%2$d/%3$d)" +msgstr "Uppdaterar temat %1$s (%2$d/%3$d)" + +#: wp-admin/includes/plugin.php:483 +msgid "Custom site deleted message." +msgstr "Anpassat meddelande för raderad webbplats." + +#: wp-admin/includes/nav-menu.php:1069 +msgid "Link Target" +msgstr "Länkmål" + +#: wp-admin/options-general.php:71 +msgid "In a few words, explain what this site is about." +msgstr "Berätta med några ord vad den här webbplatsen handlar om." + +#: wp-admin/includes/nav-menu.php:1067 +msgid "Show advanced menu properties" +msgstr "Visa avancerade menyegenskaper" + +#: wp-admin/includes/file.php:27 +msgid "Author Template" +msgstr "Mall för författare" + +#: wp-admin/includes/file.php:54 +msgid "Visual Editor Stylesheet" +msgstr "Stilmall för den visuella redigeraren" + +#: wp-admin/includes/file.php:30 +msgid "Tag Template" +msgstr "Mall för taggar" + +#: wp-admin/nav-menus.php:248 +msgid "The menu item has been successfully deleted." +msgstr "Menyvalet har raderats." + +#: wp-admin/nav-menus.php:19 +msgid "Your theme does not support navigation menus or widgets." +msgstr "Ditt tema har inte stöd för anpassade menyer eller widgetar." + +#: wp-admin/nav-menus.php:269 +msgid "The menu has been successfully deleted." +msgstr "Menyn har raderats." + +#: wp-admin/includes/dashboard.php:1349 +msgid "WordPress Blog" +msgstr "WordPress-blogg" + +#: wp-admin/install.php:152 wp-admin/user-edit.php:191 +msgid "Important:" +msgstr "Viktigt:" + +#: wp-admin/includes/plugin.php:485 +msgid "Custom site suspended message." +msgstr "Anpassat meddelande för avstängd webbplats." + +#: wp-admin/includes/plugin.php:484 +msgid "Custom site inactive message." +msgstr "Anpassat meddelande för inaktiv webbplats." + +#: wp-admin/includes/ajax-actions.php:1521 +msgid "Please provide a custom field name." +msgstr "Var vänlig ange ett namn för det anpassade fältet." + +#: wp-admin/includes/nav-menu.php:361 wp-admin/includes/nav-menu.php:679 +msgid "No items." +msgstr "Inga poster" + +#: wp-admin/includes/plugin-install.php:319 +msgctxt "Plugin Installer" +msgid "Tag" +msgstr "Tagg" + +#: wp-admin/includes/nav-menu.php:425 +msgid "Most Recent" +msgstr "Senaste" + +#: wp-admin/theme-editor.php:167 wp-admin/plugin-editor.php:168 +msgid "Function Name…" +msgstr "Funktionsnamn…" + +#: wp-admin/plugin-editor.php:126 +msgid "Choose a plugin to edit from the dropdown menu and click the Select button. Click once on any file name to load it in the editor, and make your changes. Don’t forget to save your changes (Update File) when you’re finished." +msgstr "Välj ett tillägg att redigera i menyn uppe till höger och klicka på knappen Välj. Enkelklicka på valfritt filnamn för att ladda den i redigeraren och genomför dina ändringar. Glöm inte att spara dina ändringar (Uppdatera fil) när du är klar." + +#: wp-admin/theme-editor.php:29 +msgid "You can use the theme editor to edit the individual CSS and PHP files which make up your theme." +msgstr "Du kan använda temaredigeraren för att redigera de individuella CSS- och PHP-filer som ingår i ditt tema." + +#: wp-admin/theme-editor.php:30 +msgid "Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme’s template files. Clicking once on any file name causes the file to appear in the large Editor box." +msgstr "Börja genom att välja ett tema att redigera i rullgardinsmenyn och klicka på Välj. En lista med alla temafiler kommer att visas. Att enkelklicka på något av filnamnen kommer att ladda filen i redigeraren." + +#: wp-admin/nav-menus.php:656 +msgid "Your theme supports one menu. Select which menu you would like to use." +msgstr "Ditt tema har stöd för %s meny. Välj vilken meny du vill använda." + +#: wp-admin/nav-menus.php:658 +msgid "Your theme supports %s menu. Select which menu appears in each location." +msgid_plural "Your theme supports %s menus. Select which menu appears in each location." +msgstr[0] "Ditt tema har stöd för %s meny. Välj vilken meny som ska visas på vilken plats." +msgstr[1] "Ditt tema har stöd för %s menyer. Välj vilken meny som ska visas på vilken plats." + +#: wp-admin/plugin-editor.php:125 +msgid "You can use the plugin editor to make changes to any of your plugins’ individual PHP files. Be aware that if you make changes, plugins updates will overwrite your customizations." +msgstr "Du kan använda tilläggredigeraren för att göra ändringar i dina tilläggs individuella PHP-filer. Var medveten om att när du gör ändringar så kommer dessa att skrivas över om tillägget uppdateras." + +#: wp-admin/options-general.php:35 +msgid "UTC means Coordinated Universal Time." +msgstr "UTC står för koordinerad universell tid (eller Coordinated Universal Time)." + +#: wp-admin/theme-editor.php:39 +msgid "Advice: Think very carefully about your site crashing if you are live-editing the theme currently in use." +msgstr "Tips: Överväg noga risken för att din webbplats kraschar om du redigerar ett tema live, som du för närvarande använder." + +#: wp-admin/theme-editor.php:38 +msgid "After typing in your edits, click Update File." +msgstr "Efter att du angett dina ändringar, klicka på Uppdatera fil." + +#: wp-admin/options-general.php:26 +msgid "The fields on this screen determine some of the basics of your site setup." +msgstr "Fälten på den här sidan utgör några av de grundläggande inställningarna för din webbplats." + +#: wp-admin/options-general.php:30 +msgid "The WordPress URL and the Site URL can be the same (example.com) or different; for example, having the WordPress core files (example.com/wordpress) in a subdirectory instead of the root directory." +msgstr "WordPressadress och webbplatsadress kan vara samma url (exempel.se) eller olika, t.ex om man har WordPress huvudfiler i en undermapp (exempel.se/wordpress) istället för i rotmappen." + +#: wp-admin/comment.php:50 +msgid "You can also moderate the comment from this screen using the Status box, where you can also change the timestamp of the comment." +msgstr "Du kan även moderera kommentaren på den här sidan genom att använda statusrutan, där du också kan ändra tidsangivelsen för kommentaren." + +#: wp-admin/comment.php:49 +msgid "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." +msgstr "Du kan ändra informationen i kommentaren om nödvändigt. Detta kan vara användbart när man upptäcker felskrivningar av kommentarsförfattaren." + +#: wp-admin/options-general.php:27 +msgid "Most themes display the site title at the top of every page, in the title bar of the browser, and as the identifying name for syndicated feeds. The tagline is also displayed by many themes." +msgstr "I de flesta teman visas webbplatsens titel högst upp på varje sida, i webbläsarens titelrad och som identifierande namn för syndikationsflöden. Många teman visar även webbplatsens slogan." + +#: wp-admin/includes/file.php:2074 +msgid "Please enter your FTP or SSH credentials to proceed." +msgstr "Var vänlig ange dina FTP- eller SSH-uppgifter för att fortsätta." + +#: wp-admin/includes/file.php:2078 +msgid "Please enter your FTP credentials to proceed." +msgstr "Var vänlig ange dina FTP-uppgifter för att fortsätta." + +#: wp-admin/includes/file.php:2084 +msgid "If you do not remember your credentials, you should contact your web host." +msgstr "Om du inte minns dina uppgifter, kontakta ditt webbhotell." + +#: wp-admin/includes/file.php:2080 +msgid "FTP Password" +msgstr "FTP-lösenord" + +#: wp-admin/includes/file.php:2079 +msgid "FTP Username" +msgstr "FTP-användarnamn" + +#: wp-admin/includes/file.php:2076 +msgid "FTP/SSH Password" +msgstr "FTP/SSH-lösenord" + +#: wp-admin/includes/file.php:2075 +msgid "FTP/SSH Username" +msgstr "FTP/SSH-användarnamn" + +#: wp-admin/includes/dashboard.php:1446 +msgid "Storage Space" +msgstr "Utrymmeskvot" + +#: wp-admin/includes/dashboard.php:403 +msgid "Create a New Site" +msgstr "Skapa en ny webbplats" + +#: wp-admin/includes/nav-menu.php:1041 +msgid "Click Save Menu to make pending menu items public." +msgstr "Klicka på Spara meny för att göra ej sparade menyobjekt publika." + +#: wp-admin/includes/class-wp-list-table.php:848 +#: wp-admin/includes/class-wp-list-table.php:852 +msgid "Current Page" +msgstr "Nuvarande sida" + +#: wp-admin/includes/class-wp-posts-list-table.php:375 +msgctxt "posts" +msgid "Sticky (%s)" +msgid_plural "Sticky (%s)" +msgstr[0] "Klistrad (%s)" +msgstr[1] "Klistrade (%s)" + +#: wp-admin/includes/dashboard.php:454 wp-admin/includes/dashboard.php:456 +msgid "Search Sites" +msgstr "Sök webbplatser" + +#: wp-admin/includes/dashboard.php:406 +msgid "Create a New User" +msgstr "Skapa en ny användare" + +#. translators: 1: text indicating the number of sites on the network, 2: text +#. indicating the number of users on the network +#: wp-admin/includes/dashboard.php:418 +msgid "You have %1$s and %2$s." +msgstr "Du har %1$s och %2$s." + +#. translators: %s: number of sites on the network +#: wp-admin/includes/dashboard.php:415 +msgid "%s site" +msgid_plural "%s sites" +msgstr[0] "%s webbplats" +msgstr[1] "%s webbplatser" + +#. translators: %s: number of users on the network +#: wp-admin/includes/dashboard.php:413 +msgid "%s user" +msgid_plural "%s users" +msgstr[0] "%s användare" +msgstr[1] "%s användare" + +#: wp-admin/includes/file.php:2070 +msgid "To perform the requested action, WordPress needs to access your web server." +msgstr "För att utföra den begärda åtgärden behöver WordPress få tillgång till din webbserver." + +#: wp-admin/includes/dashboard.php:1331 +msgid "https://wordpress.org/news/" +msgstr "https://sv.wordpress.org/news/" + +#: wp-admin/includes/dashboard.php:1340 +msgid "https://wordpress.org/news/feed/" +msgstr "https://sv.wordpress.org/news/feed/" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:168 +msgid "No themes match your request." +msgstr "Inga teman matchade din efterfrågan." + +#: wp-admin/theme-editor.php:255 +msgid "This child theme inherits templates from a parent theme, %s." +msgstr "Detta barntema ärver mallar från ett modertema, %s." + +#: wp-admin/includes/plugin.php:209 +msgid "By %s." +msgstr "Av %s." + +#: wp-admin/my-sites.php:77 +msgid "You must be a member of at least one site to use this page." +msgstr "Du måste vara medlem i minst en webbplats för att kunna använda denna sida." + +#: wp-admin/my-sites.php:111 +msgid "Global Settings" +msgstr "Globala inställningar" + +#: wp-admin/includes/file.php:55 +msgid "Visual Editor RTL Stylesheet" +msgstr "RTL-stilmall för visuell redigerare " + +#. translators: 1: the rating, 2: the number of ratings +#: wp-admin/includes/template.php:2467 +msgid "%1$s rating based on %2$s rating" +msgid_plural "%1$s rating based on %2$s ratings" +msgstr[0] "%1$s betyg baserat på %2$s röst" +msgstr[1] "%1$s betyg baserat på %2$s röster" + +#: wp-admin/includes/dashboard.php:56 +msgid "Activity" +msgstr "Aktivitet" + +#: wp-admin/includes/class-plugin-upgrader-skin.php:31 wp-admin/update.php:58 +msgid "Update Plugin" +msgstr "Uppdatera tillägg" + +#: wp-admin/theme-editor.php:304 +msgid "This is a file in your current parent theme." +msgstr "Detta är en fil i ditt nuvarande modertema." + +#: wp-admin/install.php:109 wp-admin/install.php:331 +msgctxt "Howdy" +msgid "Welcome" +msgstr "Välkommen" + +#: wp-admin/plugin-editor.php:134 +msgid "If you want to make changes but don’t want them to be overwritten when the plugin is updated, you may be ready to think about writing your own plugin. For information on how to edit plugins, write your own from scratch, or just better understand their anatomy, check out the links below." +msgstr "Om du vill genomföra ändringar men inte vill att de ska skrivas över när tillägget uppdateras så kanske du vill fundera på att skapa ett eget tillägg. För mer information på hur man redigerar ett tillägg, skapar ett eget från grunden eller bara vill lära sig hur anatomin för tillägg ser ut, se länkarna nedan." + +#: wp-admin/theme-editor.php:45 wp-admin/plugin-editor.php:135 +msgid "Any edits to files from this screen will be reflected on all sites in the network." +msgstr "Eventuella ändringar i filer på den här sidan kommer att återspeglas på alla webbplatser i nätverket." + +#: wp-admin/includes/ajax-actions.php:4287 wp-admin/plugins.php:500 +msgid "You cannot delete a plugin while it is active on the main site." +msgstr "Du kan inte radera ett tillägg när det är aktivt på den primära webbplatsen." + +#: wp-admin/includes/class-wp-list-table.php:858 +msgctxt "paging" +msgid "%1$s of %2$s" +msgstr "%1$s av %2$s" + +#: wp-admin/includes/file.php:90 +msgid "%s Page Template" +msgstr "%s sidmall" + +#: wp-admin/includes/dashboard.php:32 +msgid "You are using an insecure browser!" +msgstr "Du använder en osäker webbläsare!" + +#: wp-admin/includes/dashboard.php:34 +msgid "Your browser is out of date!" +msgstr "Din webbläsare är föråldrad!" + +#. translators: %s: Support e-mail +#: wp-admin/includes/class-wp-automatic-updater.php:737 +msgid "The WordPress team is willing to help you. Forward this email to %s and the team will work with you to make sure your site is working." +msgstr "Teamet bakom WordPress är villiga att hjälpa dig. Vidarebefordra detta e-postmeddelande till %s så kommer teamet att hjälpa dig och försäkra sig om att din webbplats fungerar." + +#: wp-admin/includes/file.php:754 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." +msgstr "Den uppladdade filen överskrider upload_max_filesize direktivet i php.ini." + +#: wp-admin/includes/file.php:755 +msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." +msgstr "Den uppladdade filen överskrider MAX_FILE_SIZE direktivet som angavs i HTML-formuläret." + +#: wp-admin/includes/template.php:549 wp-admin/includes/template.php:564 +#: wp-admin/includes/template.php:692 +msgctxt "meta name" +msgid "Name" +msgstr "Namn" + +#: wp-admin/includes/nav-menu.php:1045 +msgid "There are some invalid menu items. Please check or delete them." +msgstr "Det finns ogiltiga menyposter. Kontrollera eller radera dem." + +#: wp-admin/includes/dashboard.php:1493 +msgid "It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." +msgstr "Det ser ut som du använder en osäker version av %s. Att använda en gammal webbläsare gör din dator osäker. För bästa upplevelse med WordPress, vänligen uppdatera din webbläsare." + +#: wp-admin/includes/dashboard.php:1499 +msgid "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." +msgstr "Det ser ut som du använder en gammal version av %s. För bästa upplevelse med WordPress, vänligen uppdatera din webbläsare." + +#: wp-admin/options-general.php:110 +msgid "Email Address" +msgstr "E-postadress" + +#: wp-admin/comment.php:156 wp-admin/theme-editor.php:303 +#: wp-admin/plugins.php:319 wp-admin/plugins.php:325 +msgid "Caution:" +msgstr "Varning:" + +#: wp-admin/my-sites.php:58 wp-admin/options-head.php:15 +#: wp-admin/options.php:303 +msgid "Settings saved." +msgstr "Inställningarna sparade." + +#: wp-admin/includes/dashboard.php:446 wp-admin/includes/dashboard.php:448 +#: wp-admin/users.php:572 +msgid "Search Users" +msgstr "Sök användare" + +#: wp-admin/includes/file.php:2022 +msgid "ERROR: There was an error connecting to the server, Please verify the settings are correct." +msgstr "FEL: Det uppstod ett fel vid anslutning till servern. Kontrollera att inställningarna är korrekta." + +#: wp-admin/includes/ajax-actions.php:1206 +msgid "ERROR: you are replying to a comment on a draft post." +msgstr "FEL: du svarar på en kommentar i ett utkast." + +#: wp-admin/includes/ajax-actions.php:1234 +#: wp-admin/includes/ajax-actions.php:1332 +msgid "ERROR: please type a comment." +msgstr "FEL: Skriv en kommentar." + +#: wp-admin/includes/dashboard.php:1519 +msgid "Update %2$s or learn how to browse happy" +msgstr "Uppdatera %2$s eller lär dig mer om hur dusurfar med glädje" + +#: wp-admin/options-general.php:31 +msgid "If you want site visitors to be able to register themselves, as opposed to by the site administrator, check the membership box. A default user role can be set for all new users, whether self-registered or registered by the site admin." +msgstr "Om du vill att besökarna ska kunna registrera sig, i stället för att registreras av administratören, bocka för rutan medlemskap . En standardroll för nya användare kan anges oavsett om registreringen skett av en administratören eller av besökaren själv." + +#: wp-admin/includes/dashboard.php:1687 wp-admin/includes/dashboard.php:1689 +msgid "Customize Your Site" +msgstr "Anpassa din webbplats" + +#: wp-admin/includes/ajax-actions.php:2063 +msgid "Type" +msgstr "Typ" + +#: wp-admin/includes/plugin-install.php:294 +msgid "%s plugins" +msgstr "%s tillägg" + +#: wp-admin/includes/plugin-install.php:293 +msgid "%s plugin" +msgstr "%s tillägg" + +#: wp-admin/includes/class-wp-upgrader.php:164 +msgid "The package could not be installed." +msgstr "Paketet kunde inte installeras." + +#: wp-admin/includes/plugin-install.php:681 +msgid "Plugin Homepage »" +msgstr "Tilläggets hemsida »" + +#: wp-admin/includes/plugin-install.php:554 +msgctxt "Plugin installer section title" +msgid "Changelog" +msgstr "Ändringslogg" + +#: wp-admin/my-sites.php:33 +msgid "The primary site you chose does not exist." +msgstr "Den primära webbplatsen som du har valt existerar inte." + +#: wp-admin/includes/plugin-install.php:556 +msgctxt "Plugin installer section title" +msgid "Other Notes" +msgstr "Övriga noteringar" + +#: wp-admin/includes/plugin-install.php:552 +msgctxt "Plugin installer section title" +msgid "FAQ" +msgstr "Vanliga frågor" + +#: wp-admin/includes/plugin-install.php:551 +msgctxt "Plugin installer section title" +msgid "Installation" +msgstr "Installation" + +#: wp-admin/includes/plugin-install.php:550 +msgctxt "Plugin installer section title" +msgid "Description" +msgstr "Beskrivning" + +#: wp-admin/includes/plugin-install.php:553 +msgctxt "Plugin installer section title" +msgid "Screenshots" +msgstr "Skärmdumpar" + +#: wp-admin/includes/template.php:445 +msgid "Add new Comment" +msgstr "Lägg till ny kommentar" + +#: wp-admin/includes/template.php:484 +msgid "Add Comment" +msgstr "Lägg till kommentar" + +#: wp-admin/options-general.php:340 wp-admin/options-general.php:377 +msgid "Preview:" +msgstr "Förhandsgranska:" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:387 +#: wp-admin/theme-install.php:68 wp-admin/theme-install.php:359 +msgid "Collapse Sidebar" +msgstr "Minimera sidopanel" + +#: wp-admin/includes/class-wp-list-table.php:1099 +#: wp-admin/includes/nav-menu.php:623 wp-admin/includes/nav-menu.php:860 +#: wp-admin/update-core.php:273 wp-admin/update-core.php:380 +#: wp-admin/update-core.php:420 wp-admin/update-core.php:463 +msgid "Select All" +msgstr "Välj alla" + +#: wp-admin/install.php:160 wp-admin/user-new.php:467 wp-admin/user-new.php:471 +#: wp-admin/user-new.php:491 wp-admin/user-new.php:515 +#: wp-admin/user-edit.php:439 wp-admin/user-edit.php:487 +msgid "(required)" +msgstr "(obligatoriskt)" + +#: wp-admin/theme-editor.php:244 +msgid "This theme is broken." +msgstr "Detta tema är trasigt." + +#: wp-admin/includes/theme-install.php:139 +msgid "Find a theme based on specific features." +msgstr "Hitta ett tema baserat på specifika funktioner." + +#: wp-admin/install.php:270 wp-admin/install.php:283 +msgid "Configuration Error" +msgstr "Konfigurationsfel" + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-theme-install-list-table.php:331 +msgid "Preview %s" +msgstr "Förhandsgranska %s" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:311 +#: wp-admin/includes/class-wp-theme-install-list-table.php:469 +msgid "This theme is already installed and is up to date" +msgstr "Detta tema är redan installerat och är den senaste versionen." + +#: wp-admin/includes/class-wp-theme-install-list-table.php:389 +#: wp-admin/theme-install.php:361 +msgid "Collapse" +msgstr "Minimera" + +#: wp-admin/includes/dashboard.php:354 +msgid "Search Engines Discouraged" +msgstr "Sökmotorer blockerade" + +#: wp-admin/includes/dashboard.php:1681 +msgid "Welcome to WordPress!" +msgstr "Välkommen till WordPress!" + +#: wp-admin/includes/dashboard.php:1682 +msgid "We’ve assembled some links to get you started:" +msgstr "Vi har sammanställt ett par länkar så att du kan komma igång:" + +#: wp-admin/includes/dashboard.php:1686 +msgid "Get Started" +msgstr "Kom igång" + +#: wp-admin/includes/dashboard.php:1692 +msgid "or, change your theme completely" +msgstr "eller ändra tema helt" + +#: wp-admin/includes/dashboard.php:1699 wp-admin/includes/dashboard.php:1702 +msgid "Edit your front page" +msgstr "Redigera din startsida" + +#: wp-admin/includes/dashboard.php:1700 wp-admin/includes/dashboard.php:1703 +msgid "Add additional pages" +msgstr "Lägg till ytterligare sidor" + +#: wp-admin/includes/dashboard.php:1704 +msgid "Add a blog post" +msgstr "Skapa ett blogginlägg" + +#: wp-admin/includes/dashboard.php:1706 +msgid "Write your first blog post" +msgstr "Skriv ditt första inlägg" + +#: wp-admin/includes/dashboard.php:1707 +msgid "Add an About page" +msgstr "Lägg till en sida om dig själv" + +#: wp-admin/includes/dashboard.php:1710 +msgid "View your site" +msgstr "Visa din webbplats" + +#: wp-admin/includes/plugin-install.php:357 +msgid "If you have marked plugins as favorites on WordPress.org, you can browse them here." +msgstr "Om du har markerat ett tillägg som favorit på WordPress.org så kan du bläddra bland dessa här." + +#: wp-admin/includes/plugin-install.php:361 wp-admin/theme-install.php:197 +msgid "Your WordPress.org username:" +msgstr "Ditt användarnamn på WordPress.org:" + +#: wp-admin/includes/plugin-install.php:363 wp-admin/theme-install.php:200 +msgid "Get Favorites" +msgstr "Hämta favoriter" + +#: wp-admin/includes/dashboard.php:1714 +msgid "More Actions" +msgstr "Fler åtgärder" + +#: wp-admin/includes/dashboard.php:1734 +msgid "Turn comments on or off" +msgstr "Slå på eller av kommentarer" + +#: wp-admin/includes/dashboard.php:1736 +msgid "Learn more about getting started" +msgstr "Ta reda på mer om hur du kommer igång" + +#: wp-admin/includes/ajax-actions.php:2356 wp-admin/custom-background.php:485 +#: wp-admin/custom-header.php:886 +msgid "The uploaded file is not a valid image. Please try again." +msgstr "Den uppladdade filen är inte en giltig bildfil. Vänligen försök igen." + +#: wp-admin/async-upload.php:56 +msgctxt "media item" +msgid "Edit" +msgstr "Redigera" + +#: wp-admin/includes/dashboard.php:1721 +msgid "Manage widgets or menus" +msgstr "Hantera widgetar eller menyer" + +#: wp-admin/plugin-editor.php:127 +msgid "The Documentation menu below the editor lists the PHP functions recognized in the plugin file. Clicking Look Up takes you to a web page about that particular function." +msgstr "Dokumentationsmenyn under redigeraren listar PHP-funktionerna som känns igen i tilläggsfilen. Att klicka på Kolla upp tar dig till webbsidan med information för den specifika funktionen." + +#: wp-admin/theme-editor.php:291 wp-admin/plugin-editor.php:268 +msgid "Look Up" +msgstr "Kolla upp" + +#: wp-admin/theme-editor.php:31 +msgid "For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function." +msgstr "För PHP-filer så kan du använda dokumentationsmenyn för att välja mellan funktioner som känns igen i filen. Kolla upp tar dig till webbsidan med referensmaterial för den specifika funktionen." + +#: wp-admin/nav-menus.php:288 +msgid "Selected menus have been successfully deleted." +msgstr "Valda menyer har raderats." + +#. translators: 1: Post creation date, 2: Post creation time +#: wp-admin/includes/ajax-actions.php:1480 +msgid "Draft created on %1$s at %2$s" +msgstr "Utkast skapat den %1$s kl. %2$s" + +#: wp-admin/includes/template.php:2410 +msgid "The backup of this post in your browser is different from the version below." +msgstr "Backupen av detta inlägg i din webbläsare skiljer sig från versionen nedan." + +#: wp-admin/includes/template.php:2411 +msgid "Restore the backup" +msgstr "Återställ backup" + +#: wp-admin/nav-menus.php:536 +msgid "This screen is used for managing your navigation menus." +msgstr "Denna sida används för att hantera dina navigationsmenyer." + +#: wp-admin/nav-menus.php:539 wp-admin/themes.php:93 +msgid "From this screen you can:" +msgstr "Från denna sida kan du:" + +#: wp-admin/nav-menus.php:540 +msgid "Create, edit, and delete menus" +msgstr "Skapa, redigera och ta bort menyer" + +#: wp-admin/nav-menus.php:541 +msgid "Add, organize, and modify individual menu items" +msgstr "Lägga till, organisera och modifiera individuella menyposter" + +#: wp-admin/nav-menus.php:551 +msgid "The menu management box at the top of the screen is used to control which menu is opened in the editor below." +msgstr "Boxen för menyhantering på den över delen av sidan används för att kontrollera vilken meny som är öppnad i redigeraren nedan." + +#: wp-admin/nav-menus.php:552 +msgid "To edit an existing menu, choose a menu from the drop down and click Select" +msgstr "För att redigera en existerande meny, välj en meny från rullisten och klicka på Välj" + +#: wp-admin/nav-menus.php:554 +msgid "You can assign theme locations to individual menus by selecting the desired settings at the bottom of the menu editor. To assign menus to all theme locations at once, visit the Manage Locations tab at the top of the screen." +msgstr "Du kan tilldela temapositioner för enskilda menyerna genom att välja önskade inställningar längst ned i menynredigeraren. För att tilldela menyer till alla temapositioner samtidigt, använd fliken Hantera positioner längst upp på sidan." + +#: wp-admin/nav-menus.php:559 +msgid "Menu Management" +msgstr "Menyhantering" + +#: wp-admin/nav-menus.php:564 +msgid "Each navigation menu may contain a mix of links to pages, categories, custom URLs or other content types. Menu links are added by selecting items from the expanding boxes in the left-hand column below." +msgstr "Varje navigationsmeny kan innehålla en blandning av länkar till sidor, kategorier, anpassade URL:er eller andra innehållstyper. Menylänkar läggs till genom att man väljer objekt i panelerna till vänster nedan." + +#: wp-admin/nav-menus.php:566 +msgid "Add one or several items at once by selecting the checkbox next to each item and clicking Add to Menu" +msgstr "Lägg till ett eller flera val samtidigt genom att bocka för checkboxarna intill vardera val och klicka på Lägg till i meny" + +#: wp-admin/nav-menus.php:568 +msgid "To reorganize menu items, drag and drop items with your mouse or use your keyboard. Drag or move a menu item a little to the right to make it a submenu" +msgstr "För att ordna dina menyval, dra och släpp valen med musen eller använd tangentbordet. Dra/flytta ett menyval ett litet snäpp till höger för att göra det till ett underval" + +#: wp-admin/nav-menus.php:569 +msgid "Delete a menu item by expanding it and clicking the Remove link" +msgstr "Radera ett menyval genom att expandera det och klicka på länken Ta bort" + +#: wp-admin/nav-menus.php:574 +msgid "Editing Menus" +msgstr "Redigera menyer" + +#: wp-admin/nav-menus.php:579 +msgid "This screen is used for globally assigning menus to locations defined by your theme." +msgstr "Denna sida används för att globalt tilldela menyer till positioner definierade i ditt tema." + +#: wp-admin/nav-menus.php:580 +msgid "To assign menus to one or more theme locations, select a menu from each location’s drop down. When you’re finished, click Save Changes" +msgstr "För att tilldela menyer till en eller flera positioner i temat, välj en meny från vardera positionsmeny. När du är klar, klicka på Spara ändringar" + +#: wp-admin/nav-menus.php:581 +msgid "To edit a menu currently assigned to a theme location, click the adjacent ’Edit’ link" +msgstr "För att redigera en meny som för närvarande är tilldelad en position i temat, klicka på avsedd ’Redigera’-länk" + +#: wp-admin/nav-menus.php:582 +msgid "To add a new menu instead of assigning an existing one, click the ’Use new menu’ link. Your new menu will be automatically assigned to that theme location" +msgstr "För att lägga till en ny meny istället för att tilldela en existerande, klicka på länken ’Använd ny meny’. Din nya meny kommer automatiskt att tilldelas temapositionen" + +#: wp-admin/nav-menus.php:633 +msgid "Edit Menus" +msgstr "Redigera menyer" + +#: wp-admin/nav-menus.php:643 +msgid "Manage Locations" +msgstr "Hantera positioner" + +#: wp-admin/nav-menus.php:666 +msgid "Theme Location" +msgstr "Temaposition" + +#: wp-admin/nav-menus.php:667 +msgid "Assigned Menu" +msgstr "Tilldela meny" + +#: wp-admin/nav-menus.php:676 +msgid "Select a Menu" +msgstr "Välj en meny" + +#: wp-admin/nav-menus.php:706 +msgctxt "menu" +msgid "Edit" +msgstr "Redigera" + +#: wp-admin/nav-menus.php:725 +msgctxt "menu" +msgid "Use new menu" +msgstr "Använd ny meny" + +#: wp-admin/nav-menus.php:553 +msgid "If you haven’t yet created any menus, click the ’create a new menu’ link to get started" +msgstr "Om du inte skapat några menyer än, klicka på länken ’Skapa en ny meny’ för att komma igång." + +#: wp-admin/includes/class-wp-upgrader.php:161 +msgid "The package contains no files." +msgstr "Paketet innehåller inga filer." + +#: wp-admin/includes/plugin-install.php:262 +msgid "Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the WordPress Plugin Directory or upload a plugin in .zip format by clicking the button at the top of this page." +msgstr "Tillägg utvidgar och utvecklar WordPress funktioner. Du kan automatiskt installera tillägg från WordPress tilläggskatalog eller ladda upp ett tillägg i .zip-format genom att använda knappen överst på den här sidan." + +#: wp-admin/includes/nav-menu.php:1000 +msgid "Add menu items from the column on the left." +msgstr "Lägg till menyval från kolumnen till vänster." + +#: wp-admin/install.php:159 wp-admin/user-new.php:515 +msgid "Repeat Password" +msgstr "Upprepa lösenord" + +#. translators: 1: folder to locate, 2: folder to start searching from +#: wp-admin/includes/class-wp-filesystem-base.php:254 +msgid "Looking for %1$s in %2$s" +msgstr "Letar efter %1$s i %2$s" + +#. translators: %s: WordPress version +#: wp-admin/includes/class-wp-automatic-updater.php:318 +msgid "Updating to WordPress %s" +msgstr "Uppdaterar WordPress till version %s" + +#. translators: %s: WordPress version +#: wp-admin/includes/class-wp-automatic-updater.php:320 +msgid "WordPress %s" +msgstr "WordPress %s" + +#: wp-admin/includes/file.php:1146 +msgid "The checksum of the file (%1$s) does not match the expected checksum value (%2$s)." +msgstr "Kontrollsumman för filen (%1$s) matchar inte det förväntade värdet för kontrollsumman (%2$s)." + +#: wp-admin/includes/file.php:2114 +msgid "This password will not be stored on the server." +msgstr "Det här lösenordet kommer inte att lagras på servern." + +#: wp-admin/install.php:367 +msgid "Please provide a valid username." +msgstr "Vänligen ange ett giltigt användarnamn." + +#: wp-admin/install.php:370 +msgid "The username you provided has invalid characters." +msgstr "Angivet användarnamn innehåller ogiltiga tecken." + +#: wp-admin/install.php:374 +msgid "Your passwords do not match. Please try again." +msgstr "Dina lösenord matchar inte. Vänligen försök igen." + +#: wp-admin/install.php:378 +msgid "You must provide an email address." +msgstr "Du måste ange en e-postadress." + +#: wp-admin/install.php:382 +msgid "Sorry, that isn’t a valid email address. Email addresses look like username@example.com." +msgstr "Beklagar, det är inte en giltig e-postadress. E-postadresser anges på följande sätt namn@exampel.se." + +#: wp-admin/nav-menus.php:532 +msgid "Your theme does not natively support menus, but you can use them in sidebars by adding a “Navigation Menu” widget on the Widgets screen." +msgstr "Ditt tema saknar inbyggt stöd för anpassade menyer, men du kan använda dem i sidopaneler genom att lägga till widgeten ”Navigationsmeny” på widgetsidan." + +#: wp-admin/nav-menus.php:565 +msgid "Clicking the arrow to the right of any menu item in the editor will reveal a standard group of settings. Additional settings such as link target, CSS classes, link relationships, and link descriptions can be enabled and disabled via the Screen Options tab." +msgstr "Att klicka på pilen till höger om en menypost i redigeringsområdet kommer att visa ett antal standardinställningar. Extra inställningar, så som länkmål, CSS-klasser, länkrelationer och länkbeskrivning kan aktiveras under fliken Panelinställningar." + +#. translators: %s: link to documentation on child themes +#: wp-admin/theme-editor.php:42 +msgid "Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead." +msgstr "Att uppdatera ett tema till en nyare version kommer att skriva över alla eventuella ändringar du gjort i temat. För att undvika detta, överväg att skapa ett barntema istället." + +#. translators: 1: Widgets admin screen URL, 2 and 3: The name of the default +#. themes +#: wp-admin/nav-menus.php:538 +msgid "Menus can be displayed in locations defined by your theme, even used in sidebars by adding a “Navigation Menu” widget on the Widgets screen. If your theme does not support the navigation menus feature (the default themes, %2$s and %3$s, do), you can learn about adding this support by following the Documentation link to the side." +msgstr "Menyer kan visas på fördefinierade platser i ditt tema och även användas i sidopaneler med hjälp av widgeten ”Navigationsmeny” på widgetsidan. Om ditt tema inte har stöd för anpassade menyer (något som standardtemana, %2$s och %3$s har) så kan du lära dig hur man lägger till stödet genom att följa dokumentationen i länken vid sidan om här." + +#: wp-admin/includes/class-language-pack-upgrader.php:113 +msgid "Some of your translations need updating. Sit tight for a few more seconds while we update them as well." +msgstr "Några av dina översättningar behöver uppdateras. Vänta ett par sekunder medan vi uppdaterar dessa också." + +#: wp-admin/includes/class-language-pack-upgrader.php:114 +msgid "The translations are up to date." +msgstr "Du har den senaste versionen av översättningarna." + +#: wp-admin/includes/class-language-pack-upgrader.php:119 +msgid "Translation update failed." +msgstr "Uppdatering av översättning misslyckades." + +#: wp-admin/includes/class-language-pack-upgrader.php:120 +msgid "Translation updated successfully." +msgstr "Översättning uppdaterad." + +#. translators: %s: Theme name +#: wp-admin/includes/class-wp-automatic-updater.php:327 +msgid "Updating theme: %s" +msgstr "Uppdaterar tema: %s" + +#. translators: %s: Plugin name +#: wp-admin/includes/class-wp-automatic-updater.php:334 +msgid "Updating plugin: %s" +msgstr "Uppdaterar tillägg: %s" + +#: wp-admin/includes/class-language-pack-upgrader-skin.php:31 +#: wp-admin/update-core.php:491 wp-admin/update-core.php:852 +msgid "Update Translations" +msgstr "Uppdatera översättningar" + +#. translators: 1: Name of language item, 2: Language +#. translators: 1: name of project, 2: language +#: wp-admin/includes/class-wp-automatic-updater.php:341 +#: wp-admin/includes/class-language-pack-upgrader-skin.php:51 +msgid "Updating translations for %1$s (%2$s)…" +msgstr "Uppdaterar översättningar för %1$s (%2$s)…" + +#. translators: %s: Name of language item +#: wp-admin/includes/class-wp-automatic-updater.php:339 +msgid "Translations for %s" +msgstr "Översättningar för %s" + +#. translators: Site updated notification email subject. 1: Site title, 2: +#. WordPress version number. +#: wp-admin/includes/class-wp-automatic-updater.php:652 +msgid "[%1$s] Your site has updated to WordPress %2$s" +msgstr "[%1$s] Din webbplats har uppdaterats till WordPress %2$s" + +#. translators: Update available notification email subject. 1: Site title, 2: +#. WordPress version number. +#: wp-admin/includes/class-wp-automatic-updater.php:658 +msgid "[%1$s] WordPress %2$s is available. Please update!" +msgstr "[%1$s] WordPress %2$s finns tillgängligt. Vänligen uppdatera!" + +#. translators: Site down notification email subject. 1: Site title. +#: wp-admin/includes/class-wp-automatic-updater.php:663 +msgid "[%1$s] URGENT: Your site may be down due to a failed update" +msgstr "[%1$s] BRÅDSKANDE: Din webbplats kan ligga nera pga en misslyckad uppdatering" + +#. translators: 1: Home URL, 2: WordPress version +#: wp-admin/includes/class-wp-automatic-updater.php:679 +msgid "Howdy! Your site at %1$s has been updated automatically to WordPress %2$s." +msgstr "Hejsan! Din webbplats på %1$s har automatiskt uppdaterats till WordPress %2$s." + +#: wp-admin/includes/class-wp-automatic-updater.php:682 +msgid "No further action is needed on your part." +msgstr "Ingen ytterligare åtgärd krävs från din sida." + +#. translators: %s: WordPress core version +#: wp-admin/includes/class-wp-automatic-updater.php:688 +msgid "For more on version %s, see the About WordPress screen:" +msgstr "För mer om version %s, se sidan Om WordPress:" + +#. translators: 1: Home URL, 2: WordPress core latest version +#: wp-admin/includes/class-wp-automatic-updater.php:703 +msgid "Please update your site at %1$s to WordPress %2$s." +msgstr "Vänligen uppdatera din webbplats på %1$s till WordPress %2$s." + +#: wp-admin/includes/class-wp-automatic-updater.php:710 +msgid "We tried but were unable to update your site automatically." +msgstr "Vi försökte, men kunde inte, uppdatera din webbplats automatiskt." + +#: wp-admin/includes/class-wp-automatic-updater.php:694 +#: wp-admin/includes/class-wp-automatic-updater.php:713 +msgid "Updating is easy and only takes a few moments:" +msgstr "Att uppdatera är enkelt och är snabbt gjort:" + +#. translators: 1: Home URL, 2: Core update version +#: wp-admin/includes/class-wp-automatic-updater.php:723 +msgid "Your site at %1$s experienced a critical failure while trying to update to the latest version of WordPress, %2$s." +msgstr "Din webbplats på %1$s upplevde kritiska fel vid uppdatering till den senaste versionen av WordPress, %2$s" + +#: wp-admin/includes/class-wp-automatic-updater.php:726 +msgid "This means your site may be offline or broken. Don't panic; this can be fixed." +msgstr "Det betyder att din webbplats kan vara offline eller inte fungerar som den ska. Få inte panik, det går att lösa." + +#: wp-admin/includes/class-wp-automatic-updater.php:728 +msgid "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so:" +msgstr "Vänligen kontrollera din webbplats nu. Saker kan fortfarande fungera som de ska. Om du blir uppmanad att uppdatera så bör du göra det:" + +#: wp-admin/includes/class-wp-automatic-updater.php:746 +#: wp-admin/update-core.php:630 +msgid "Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers." +msgstr "Att hålla din webbplats uppdatera är viktigt för säkerheten. Det gör även Internet till en säkrare plats för dig och dina besökare." + +#: wp-admin/includes/class-wp-automatic-updater.php:740 +msgid "If you experience any issues or need support, the volunteers in the WordPress.org support forums may be able to help." +msgstr "Om du upplever problem eller behöver support så kan kanske supportforumet på WordPress.org vara till hjälp." + +#: wp-admin/includes/class-wp-automatic-updater.php:755 +msgid "You also have some plugins or themes with updates available. Update them now:" +msgstr "Du har även ett par tillägg eller teman med uppdateringar tillgängliga. Uppdatera dessa nu:" + +#: wp-admin/includes/class-wp-automatic-updater.php:759 +msgid "The WordPress Team" +msgstr "WordPress-teamet" + +#: wp-admin/includes/class-wp-automatic-updater.php:765 +msgid "We have some data that describes the error your site encountered." +msgstr "Vi har lite data som beskriver felet som uppstod på din webbplats." + +#: wp-admin/includes/class-wp-automatic-updater.php:766 +msgid "Your hosting company, support forum volunteers, or a friendly developer may be able to use this information to help you:" +msgstr "Ditt webbhotell, personer i supportforumet eller utvecklare kan använda denna information för att hjälpa dig:" + +#. translators: %s: Error code +#: wp-admin/includes/class-wp-automatic-updater.php:782 +msgid "Error code: %s" +msgstr "Felkod: %s" + +#. translators: %s: WordPress core latest version +#: wp-admin/includes/class-wp-automatic-updater.php:693 +msgid "WordPress %s is also now available." +msgstr "WordPress %s är också tillgängligt nu." + +#. translators: 1: Home URL, 2: WordPress core latest version +#: wp-admin/includes/class-wp-automatic-updater.php:720 +msgid "Your site at %1$s experienced a critical failure while trying to update WordPress to version %2$s." +msgstr "Ett kritiskt fel uppstod på din webbplats på %1$s vid uppdatering av WordPress till version %2$s." + +#. translators: %s: WordPress version +#: wp-admin/includes/class-wp-automatic-updater.php:764 +msgid "Your site was running version %s." +msgstr "Din webbplats använder version %s." + +#: wp-admin/includes/class-wp-automatic-updater.php:865 +msgid "The following plugins were successfully updated:" +msgstr "Följande tillägg har uppdaterats:" + +#. translators: %s: Network home URL +#: wp-admin/includes/class-wp-automatic-updater.php:841 +msgid "WordPress site: %s" +msgstr "WordPress-webbplats: %s" + +#. translators: %s: WordPress core version +#: wp-admin/includes/class-wp-automatic-updater.php:848 +msgid "SUCCESS: WordPress was successfully updated to %s" +msgstr "GENOMFÖRD: WordPress har uppdaterats till %s" + +#. translators: %s: WordPress core version +#: wp-admin/includes/class-wp-automatic-updater.php:851 +msgid "FAILED: WordPress failed to update to %s" +msgstr "MISSLYCKAD: WordPress misslyckades med att uppdateras till %s" + +#. translators: %s: name of plugin / theme / translations +#: wp-admin/includes/class-wp-automatic-updater.php:873 +msgid "SUCCESS: %s" +msgstr "GENOMFÖRD: %s" + +#. translators: %s: name of plugin / theme / translations +#: wp-admin/includes/class-wp-automatic-updater.php:888 +msgid "FAILED: %s" +msgstr "MISSLYCKAD: %s" + +#: wp-admin/includes/dashboard.php:61 +msgid "Quick Draft" +msgstr "Snabbutkast" + +#: wp-admin/includes/dashboard.php:531 +msgid "What’s on your mind?" +msgstr "Vad har du på hjärtat?" + +#: wp-admin/includes/dashboard.php:786 +msgid "Publishing Soon" +msgstr "Publiceras snart" + +#: wp-admin/includes/dashboard.php:795 +msgid "Recently Published" +msgstr "Nyligen publicerat" + +#: wp-admin/includes/dashboard.php:805 +msgid "No activity yet!" +msgstr "Ingen aktivitet än!" + +#: wp-admin/includes/dashboard.php:869 +msgid "Tomorrow" +msgstr "Imorgon" + +#: wp-admin/includes/deprecated.php:1378 +msgid "Popular Plugin" +msgstr "Populärt tillägg" + +#: wp-admin/includes/dashboard.php:1460 wp-admin/includes/dashboard.php:1475 +msgid "Manage Uploads" +msgstr "Hantera uppladdningar" + +#: wp-admin/includes/dashboard.php:47 +msgid "At a Glance" +msgstr "I korthet" + +#: wp-admin/includes/class-wp-automatic-updater.php:866 +msgid "The following themes were successfully updated:" +msgstr "Följande teman har uppdaterats:" + +#: wp-admin/includes/class-wp-automatic-updater.php:867 +msgid "The following translations were successfully updated:" +msgstr "Följande översättningar har uppdaterats:" + +#: wp-admin/includes/class-wp-automatic-updater.php:879 +msgid "The following plugins failed to update:" +msgstr "Följande uppdateringar av tillägg misslyckades:" + +#: wp-admin/includes/class-wp-automatic-updater.php:880 +msgid "The following themes failed to update:" +msgstr "Följande uppdateringar av teman misslyckades:" + +#: wp-admin/includes/class-wp-automatic-updater.php:881 +msgid "The following translations failed to update:" +msgstr "Följande uppdateringar av översättningar misslyckades:" + +#. translators: 1: Error code, 2: Error message. +#: wp-admin/includes/class-wp-automatic-updater.php:952 +msgid "Rollback Error: [%1$s] %2$s" +msgstr "Fel vid återställning: [%1$s] %2$s" + +#: wp-admin/my-sites.php:45 +msgid "This screen shows an individual user all of their sites in this network, and also allows that user to set a primary site. They can use the links under each site to visit either the front end or the dashboard for that site." +msgstr "Den här sidan visar individuella användare alla sina webbplatser under detta nätverk och tillåter användaren att ange primär webbplats. De kan använda länkarna under vardera webbplats för att gå till webbplatsen eller dess adminpanel." + +#. translators: %s: the rating +#: wp-admin/includes/template.php:2471 +msgid "%s rating" +msgstr "%s betyg" + +#: wp-admin/includes/dashboard.php:272 +msgid "%s Post" +msgid_plural "%s Posts" +msgstr[0] "%s inlägg" +msgstr[1] "%s inlägg" + +#: wp-admin/includes/dashboard.php:274 +msgid "%s Page" +msgid_plural "%s Pages" +msgstr[0] "%s sida" +msgstr[1] "%s sidor" + +#. translators: date and time format for recent posts on the dashboard, see +#. https://secure.php.net/date +#: wp-admin/includes/dashboard.php:875 +msgid "M jS" +msgstr "j M" + +#. translators: %s: number of megabytes +#: wp-admin/includes/dashboard.php:1453 +msgid "%s MB Space Allowed" +msgstr "%s MB tillgängligt utrymme" + +#. translators: 1: number of megabytes, 2: percentage +#: wp-admin/includes/dashboard.php:1467 +msgid "%1$s MB (%2$s%%) Space Used" +msgstr "%1$s MB (%2$s%%) utrymme använt" + +#: wp-admin/includes/plugin-install.php:663 +msgid "Active Installations:" +msgstr "Aktiva installationer:" + +#: wp-admin/includes/plugin.php:474 +msgid "Custom installation script." +msgstr "Anpassade intallationsskript." + +#: wp-admin/includes/theme-install.php:244 +msgid "Theme Installation" +msgstr "Installation av tema" + +#: wp-admin/includes/plugin-install.php:721 +msgid "%d star" +msgid_plural "%d stars" +msgstr[0] "%d stjärna" +msgstr[1] "%d stjärnor" + +#: wp-admin/includes/dashboard.php:1726 +msgid "Manage widgets" +msgstr "Hantera widgetar" + +#: wp-admin/includes/dashboard.php:1728 +msgid "Manage menus" +msgstr "Hantera menyer" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:64 +#: wp-admin/theme-install.php:174 +msgctxt "themes" +msgid "Featured" +msgstr "Utvalda" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:66 +#: wp-admin/theme-install.php:176 +msgctxt "themes" +msgid "Latest" +msgstr "Senaste" + +#. translators: %s: URL which cannot be embedded, between code tags +#: wp-admin/includes/ajax-actions.php:3439 +msgid "%s failed to embed." +msgstr "%s kunde inte bäddas in." + +#: wp-admin/includes/class-wp-automatic-updater.php:750 +msgid "If you reach out to us, we'll also ensure you'll never have this problem again." +msgstr "Om du kontaktar oss så försäkrar vi även att du aldrig kommer uppleva detta problem igen." + +#: wp-admin/includes/dashboard.php:1736 +msgid "https://codex.wordpress.org/First_Steps_With_WordPress" +msgstr "https://codex.wordpress.org/First_Steps_With_WordPress" + +#: wp-admin/nav-menus.php:595 +msgid "Documentation on Menus" +msgstr "Dokumentation för menyer" + +#: wp-admin/plugin-editor.php:141 +msgid "Documentation on Editing Plugins" +msgstr "Dokumentation för redigering av tillägg" + +#: wp-admin/comment.php:56 wp-admin/edit-comments.php:201 +msgid "Documentation on Comments" +msgstr "Dokumentation för kommentarer" + +#: wp-admin/options-general.php:48 +msgid "Documentation on General Settings" +msgstr "Dokumentation för allmänna inställningar" + +#: wp-admin/my-sites.php:51 +msgid "Documentation on My Sites" +msgstr "Dokumentation för Mina webbplatser" + +#: wp-admin/plugin-editor.php:142 +msgid "Documentation on Writing Plugins" +msgstr "Dokumentation för hur man skapar tillägg" + +#: wp-admin/options-general.php:380 +msgid "Documentation on date and time formatting." +msgstr "Dokumentation för hur man formaterar datum och tid ." + +#: wp-admin/theme-editor.php:51 +msgid "Documentation on Theme Development" +msgstr "Dokumentation för utveckling av teman" + +#: wp-admin/theme-editor.php:52 wp-admin/themes.php:144 +msgid "Documentation on Using Themes" +msgstr "Dokumentation för hur man använder teman" + +#: wp-admin/theme-editor.php:53 +msgid "Documentation on Editing Files" +msgstr "Dokumentation filredigering" + +#: wp-admin/theme-editor.php:54 +msgid "Documentation on Template Tags" +msgstr "Dokumentation för malletiketter" + +#: wp-admin/includes/file.php:312 wp-admin/theme-editor.php:315 +#: wp-admin/plugin-editor.php:283 +msgid "You need to make this file writable before you can save your changes. See the Codex for more information." +msgstr "Du måste göra denna fil skrivbar innan du kan spara ändringar. Se dokumentationen för mer information." + +#: wp-admin/includes/file.php:2099 +msgid "example: www.wordpress.org" +msgstr "exempel: www.wordpress.org" + +#: wp-admin/options-general.php:374 +msgid "Custom time format:" +msgstr "Anpassat tidsformat:" + +#: wp-admin/options-general.php:373 +msgid "enter a custom time format in the following field" +msgstr "ange ett anpassat tidsformat i följande fält" + +#: wp-admin/options-general.php:337 +msgid "Custom date format:" +msgstr "Anpassat datumformat:" + +#: wp-admin/options-general.php:336 +msgid "enter a custom date format in the following field" +msgstr "ange ett anpassat datumformat i följande fält" + +#: wp-admin/includes/file.php:2150 +msgid "Enter the location on the server where the public and private keys are located. If a passphrase is needed, enter that in the password field above." +msgstr "Ange sökvägen på servern där de publika och privata nycklarna är lokaliserade. Om en lösenordsfras behövs, ange den i lösenordsfältet ovan." + +#. translators: date and time format for exact current time, mainly about +#. timezones, see https://secure.php.net/date +#: wp-admin/options-general.php:22 +msgctxt "timezone date format" +msgid "Y-m-d H:i:s" +msgstr "Y-m-d H:i:s" + +#: wp-admin/nav-menus.php:567 +msgid "To add a custom link, expand the Custom Links section, enter a URL and link text, and click Add to Menu" +msgstr "För att lägga till en anpassad länk, öppna sektionen för Anpassade länkar, ange en adress och länktext, klicka sedan på Lägg till i meny" + +#: wp-admin/includes/template.php:2495 +msgid "You are currently editing the page that shows your latest posts." +msgstr "Du redigerar just nu sidan som visar dina senaste inlägg." + +#: wp-admin/includes/template.php:2060 wp-admin/includes/file.php:31 +msgid "Posts Page" +msgstr "Inläggssida" + +#: wp-admin/includes/class-wp-automatic-updater.php:922 +msgid "" +"UPDATE LOG\n" +"==========" +msgstr "" +"UPPDATERINGSLOGG\n" +"==========" + +#: wp-admin/includes/class-wp-posts-list-table.php:1060 +msgid "Y/m/d g:i:s a" +msgstr "Y-m-d H:i:s" + +#: wp-admin/includes/ajax-actions.php:3815 +#: wp-admin/includes/ajax-actions.php:3945 +#: wp-admin/includes/ajax-actions.php:4007 +#: wp-admin/includes/ajax-actions.php:4107 +#: wp-admin/includes/ajax-actions.php:4233 +#: wp-admin/includes/ajax-actions.php:4300 +msgid "Unable to connect to the filesystem. Please confirm your credentials." +msgstr "Kunde inte ansluta till filsystemet. Vänligen kontrollera dina uppgifter." + +#: wp-admin/comment.php:202 +msgid "Submitted on" +msgstr "Postad" + +#: wp-admin/install.php:332 +msgid "Welcome to the famous five-minute WordPress installation process! Just fill in the information below and you’ll be on your way to using the most extendable and powerful personal publishing platform in the world." +msgstr "Välkommen till WordPress berömda 5-minutersinstallation! Fyll i uppgifterna nedan och du är snart igång med den mest flexibla och kraftfulla personliga publiceringsplattformen i världen." + +#: wp-admin/includes/class-wp-automatic-updater.php:899 +msgid "" +"BETA TESTING?\n" +"=============\n" +"\n" +"This debugging email is sent when you are using a development version of WordPress.\n" +"\n" +"If you think these failures might be due to a bug in WordPress, could you report it?\n" +" * Open a thread in the support forums: https://wordpress.org/support/forum/alphabeta\n" +" * Or, if you're comfortable writing a bug report: https://core.trac.wordpress.org/\n" +"\n" +"Thanks! -- The WordPress Team" +msgstr "" +"BETATESTNING?\n" +"=============\n" +"\n" +"Detta felsökningsmeddelande skickas när du använder en utvecklingsversion av WordPress.\n" +"\n" +"Om du misstänker att dessa fel beror på en bugg i WordPress, vill du vara vänlig och rapportera det?\n" +" * Starta ett ämne i supportforumet: https://wordpress.org/support/forum/alphabeta\n" +" * Eller, om du är bekväm med att skapa en buggrapport: https://core.trac.wordpress.org/\n" +"\n" +"Tack! -- Teamet bakom WordPress" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:67 +msgctxt "themes" +msgid "Recently Updated" +msgstr "Nyligen uppdaterade" + +#: wp-admin/includes/plugin-install.php:555 +msgctxt "Plugin installer section title" +msgid "Reviews" +msgstr "Omdömen" + +#: wp-admin/includes/plugin-install.php:683 +#: wp-admin/includes/plugin-install.php:751 +msgid "Donate to this plugin »" +msgstr "Donera till detta tillägg »" + +#: wp-admin/includes/plugin-install.php:733 +msgid "Contributors" +msgstr "Bidragslämnare" + +#: wp-admin/includes/class-wp-list-table.php:464 +msgid "Select bulk action" +msgstr "Välj massåtgärd" + +#: wp-admin/options-general.php:186 +msgid "The %1$s constant in your %2$s file is no longer needed." +msgstr "Konstanten %1$s behöver inte längre vara angiven i filen %2$s." + +#: wp-admin/includes/plugin-install.php:387 +msgid "These suggestions are based on the plugins you and other users have installed." +msgstr "Dessa rekommendationer baseras på tillägg som du och andra användare har installerade." + +#: wp-admin/options-general.php:34 +msgid "You can set the language, and the translation files will be automatically downloaded and installed (available if your filesystem is writable)." +msgstr "Du kan ange språk, språkfilerna laddas då ner och installeras automatiskt (tillgängligt om systemet har skrivrättigheter)." + +#: wp-admin/install.php:128 +msgid "Usernames can have only alphanumeric characters, spaces, underscores, hyphens, periods, and the @ symbol." +msgstr "Användarnamn kan bara bestå av alfanumeriska tecken, mellanslag, understreck, bindestreck, punkter och @-symbolen." + +#: wp-admin/includes/dashboard.php:1373 +msgid "https://planet.wordpress.org/feed/" +msgstr "https://wpsv.se/?wpsvorg_feed=1" + +#: wp-admin/includes/dashboard.php:1364 wp-admin/index.php:88 +msgid "https://planet.wordpress.org/" +msgstr "https://planet.wordpress.org/" + +#: wp-admin/includes/ajax-actions.php:3591 +msgid "You are now logged out everywhere else." +msgstr "Du är nu utloggad överallt annars." + +#. translators: %s: User's display name. +#: wp-admin/includes/ajax-actions.php:3595 +msgid "%s has been logged out." +msgstr "%s har loggats ut." + +#: wp-admin/includes/ajax-actions.php:3582 +msgid "Could not log out user sessions. Please try again." +msgstr "Kunde inte avsluta inloggningssession. Vänligen försök igen." + +#: wp-admin/includes/ajax-actions.php:3470 +msgid "This preview is unavailable in the editor." +msgstr "Denna förhandsgranskning är inte tillgänglig i redigeraren." + +#: wp-admin/includes/class-wp-list-table.php:830 +msgid "First page" +msgstr "Första sidan" + +#: wp-admin/includes/class-wp-list-table.php:877 +msgid "Last page" +msgstr "Sista sidan" + +#: wp-admin/install.php:168 wp-admin/user-new.php:521 +#: wp-admin/user-edit.php:640 +msgid "Confirm Password" +msgstr "Bekräfta lösenord" + +#: wp-admin/includes/ajax-actions.php:3619 +msgid "Image could not be processed." +msgstr "Bilden kunde inte behandlas." + +#: wp-admin/includes/class-wp-list-table.php:664 +msgid "%s comment" +msgid_plural "%s comments" +msgstr[0] "%s kommentar" +msgstr[1] "%s kommentarer" + +#: wp-admin/includes/class-wp-list-table.php:665 +msgid "%s approved comment" +msgid_plural "%s approved comments" +msgstr[0] "%s godkänd kommentar" +msgstr[1] "%s godkända kommentarer" + +#: wp-admin/includes/class-wp-list-table.php:666 +msgid "%s pending comment" +msgid_plural "%s pending comments" +msgstr[0] "%s väntande kommentar" +msgstr[1] "%s väntande kommentarer" + +#: wp-admin/includes/class-wp-list-table.php:672 +#: wp-admin/includes/class-wp-list-table.php:694 +#: wp-admin/includes/class-wp-list-table.php:717 +msgid "No comments" +msgstr "Inga kommentarer" + +#: wp-admin/includes/class-wp-list-table.php:694 +msgid "No approved comments" +msgstr "Inga godkända kommentarer" + +#. translators: The non-breaking space prevents 1Password from thinking the +#. text "log in" should trigger a password save prompt. +#: wp-admin/install.php:154 +msgid "You will need this password to log in. Please store it in a secure location." +msgstr "Du behöver det här lösenordet för att logga in. Spara det på ett säkert ställe." + +#. translators: %s: the new user +#: wp-admin/includes/ajax-actions.php:1599 +msgid "User %s added" +msgstr "Användaren %s tillagd" + +#: wp-admin/includes/class-wp-list-table.php:717 +msgid "No pending comments" +msgstr "Inga väntande kommentarer" + +#: wp-admin/includes/dashboard.php:583 +msgid "View all drafts" +msgstr "Visa alla utkast" + +#. translators: 1: comment author, 2: notification if the comment is pending +#: wp-admin/includes/dashboard.php:715 +msgid "From %1$s %2$s" +msgstr "Från %1$s %2$s" + +#. translators: date and time format for recent posts on the dashboard, from a +#. different calendar year, see https://secure.php.net/date +#: wp-admin/includes/dashboard.php:872 +msgid "M jS Y" +msgstr "j M Y" + +#: wp-admin/includes/file.php:18 +msgid "Theme Footer" +msgstr "Sidfot för tema" + +#: wp-admin/includes/file.php:17 +msgid "Theme Header" +msgstr "Sidhuvud för tema" + +#: wp-admin/includes/template.php:1288 +msgid "Warning:" +msgstr "Varning:" + +#. translators: 1: Site Wide Only: true, 2: Network: true +#: wp-admin/includes/plugin.php:89 +msgid "The %1$s plugin header is deprecated. Use %2$s instead." +msgstr "Tilläggshuvudet %1$s har fasats ut. Använd %2$s istället." + +#: wp-admin/includes/template.php:1281 +msgid "Toggle panel: %s" +msgstr "Växla panel: %s" + +#: wp-admin/my-sites.php:72 +msgctxt "site" +msgid "Add New" +msgstr "Skapa ny" + +#: wp-admin/options-general.php:243 +msgid "Local time is %s." +msgstr "Lokal tid är %s." + +#. translators: %s: plugin file name +#: wp-admin/plugin-editor.php:199 +msgid "Editing %s (active)" +msgstr "Redigerar %s (aktiv)" + +#. translators: %s: plugin file name +#: wp-admin/plugin-editor.php:202 +msgid "Browsing %s (active)" +msgstr "Visar %s (aktiv)" + +#. translators: %s: plugin file name +#: wp-admin/plugin-editor.php:207 +msgid "Editing %s (inactive)" +msgstr "Redigera %s (inaktiv)" + +#. translators: %s: plugin file name +#: wp-admin/plugin-editor.php:210 +msgid "Browsing %s (inactive)" +msgstr "Visar %s (inaktiv)" + +#. translators: %s: date and time +#: wp-admin/options-general.php:284 +msgid "Daylight saving time begins on: %s." +msgstr "Sommartiden startar: %s." + +#. translators: %s: date and time +#: wp-admin/options-general.php:286 +msgid "Standard time begins on: %s." +msgstr "Vintertiden startar: %s." + +#: wp-admin/includes/nav-menu.php:1024 +msgid "The Walker class named %s does not exist." +msgstr "'Walker'-klassen med namnet %s existerar inte." + +#: wp-admin/includes/nav-menu.php:1200 +msgid "%s has been updated." +msgstr "%s har uppdaterats." + +#. translators: 1: .po, 2: .mo +#: wp-admin/includes/class-language-pack-upgrader.php:350 +msgid "The language pack is missing either the %1$s or %2$s files." +msgstr "Språkpaketet saknar antingen %1$s- eller %2$s-filen." + +#. translators: 1: user_login, 2: user_email +#: wp-admin/includes/ajax-actions.php:318 +msgctxt "user autocomplete result" +msgid "%1$s (%2$s)" +msgstr "%1$s (%2$s)" + +#: wp-admin/includes/class-plugin-upgrader-skin.php:49 +#: wp-admin/update-core.php:786 wp-admin/update-core.php:825 +msgid "Update progress" +msgstr "Uppdateringsframsteg" + +#: wp-admin/includes/dashboard.php:661 +msgid "View this comment" +msgstr "Visa denna kommentar" + +#. translators: 1: type of comment, 2: post link, 3: notification if the +#. comment is pending +#: wp-admin/includes/dashboard.php:744 +msgctxt "dashboard" +msgid "%1$s on %2$s %3$s" +msgstr "%1$s till %2$s %3$s" + +#: wp-admin/includes/dashboard.php:953 +msgid "View more comments" +msgstr "Visa fler kommentarer" + +#: wp-admin/includes/dashboard.php:1520 +msgid "Dismiss the browser warning panel" +msgstr "Stäng panelen med webbläsarvarningen" + +#: wp-admin/includes/file.php:28 +msgid "Taxonomy Template" +msgstr "Taxonomimall" + +#: wp-admin/includes/file.php:33 +msgid "Date Template" +msgstr "Datummall" + +#: wp-admin/includes/file.php:35 +msgid "Singular Template" +msgstr "Mall för enskilda inlägg" + +#: wp-admin/includes/file.php:37 +msgid "Single Page" +msgstr "Enskild sida" + +#: wp-admin/includes/plugin-install.php:391 +msgid "You are using a development version of WordPress. These feature plugins are also under development. Learn more." +msgstr "Du använder en utvecklingsversion av WordPress. Dessa funktionstillägg är också under utveckling. Ta reda på mer." + +#: wp-admin/includes/plugin-install.php:703 +msgid "Reviews" +msgstr "Omdömen" + +#: wp-admin/includes/plugin-install.php:704 +msgid "Read all reviews on WordPress.org or write your own!" +msgstr "Läs alla omdömen eller lägg till ett eget på WordPress.org!" + +#: wp-admin/includes/plugin-install.php:712 +msgid "Reviews with %1$d star: %2$s. Opens in a new tab." +msgid_plural "Reviews with %1$d stars: %2$s. Opens in a new tab." +msgstr[0] "Omdömen med %1$d stjärna: %2$d. Öppnas i ett nytt fönster." +msgstr[1] "Omdömen med %1$d stjärnor: %2$d. Öppnas i ett nytt fönster." + +#: wp-admin/includes/plugin-install.php:766 +msgid "Error: This plugin requires a newer version of PHP." +msgstr "Fel: Detta tillägg kräver en nyare version av PHP." + +#: wp-admin/includes/template.php:1819 +msgid "Attach to existing content" +msgstr "Bifoga till existerande innehåll" + +#: wp-admin/includes/theme-install.php:184 +msgid "Theme zip file" +msgstr "Zip-fil med tema" + +#. translators: %s: wp-config.php +#: wp-admin/install.php:273 +msgid "Your %s file has an empty database table prefix, which is not supported." +msgstr "Din %s saknar angivet databasprefix, vilket inte stöds." + +#. translators: %s: DO_NOT_UPGRADE_GLOBAL_TABLES +#: wp-admin/install.php:286 +msgid "The constant %s cannot be defined when installing WordPress." +msgstr "Konstanten %s kan inte vara angiven vid installation av WordPress." + +#: wp-admin/install.php:393 +msgid "WordPress has been installed. Thank you, and enjoy!" +msgstr "WordPress har installerats. Tack. Ha det så kul!" + +#. translators: %s: new admin email +#: wp-admin/options-general.php:122 +msgid "There is a pending change of the admin email to %s." +msgstr "En ändring av e-postadress för admin till %s står som väntande. " + +#: wp-admin/options-general.php:232 +msgid "Universal time (%1$s) is %2$s." +msgstr "Universal tid (%1$s) är %2$s." + +#. translators: 1: relative date, 2: time +#: wp-admin/includes/dashboard.php:885 +msgctxt "dashboard" +msgid "%1$s, %2$s" +msgstr "%1$s, %2$s" + +#: wp-admin/includes/ajax-actions.php:3759 +#: wp-admin/includes/ajax-actions.php:3882 +#: wp-admin/includes/ajax-actions.php:3977 +msgid "No theme specified." +msgstr "Inget tema specificerat." + +#: wp-admin/includes/ajax-actions.php:3772 wp-admin/update.php:222 +#: wp-admin/update.php:261 wp-admin/theme-install.php:16 +msgid "Sorry, you are not allowed to install themes on this site." +msgstr "Du har inte behörighet att installera teman på den här webbplatsen." + +#: wp-admin/includes/ajax-actions.php:3956 +msgid "Update failed." +msgstr "Uppdateringen misslyckades." + +#: wp-admin/includes/ajax-actions.php:3989 +msgid "Sorry, you are not allowed to delete themes on this site." +msgstr "Du har inte behörighet att radera teman på den här webbplatsen." + +#: wp-admin/includes/ajax-actions.php:4025 +msgid "Theme could not be deleted." +msgstr "Temat kunde inte raderas." + +#: wp-admin/includes/ajax-actions.php:4049 +#: wp-admin/includes/ajax-actions.php:4158 +#: wp-admin/includes/ajax-actions.php:4265 +msgid "No plugin specified." +msgstr "Inget tillägg specificerat." + +#: wp-admin/includes/ajax-actions.php:4060 wp-admin/update.php:102 +#: wp-admin/update.php:144 wp-admin/plugin-install.php:19 +msgid "Sorry, you are not allowed to install plugins on this site." +msgstr "Du har inte behörighet att installera tillägg på den här webbplatsen." + +#: wp-admin/includes/ajax-actions.php:4173 wp-admin/update.php:25 +#: wp-admin/update.php:53 wp-admin/update.php:75 +msgid "Sorry, you are not allowed to update plugins for this site." +msgstr "Du har inte behörighet att uppdatera tillägg på den här webbplatsen." + +#: wp-admin/includes/ajax-actions.php:4278 wp-admin/plugins.php:252 +msgid "Sorry, you are not allowed to delete plugins for this site." +msgstr "Du har inte behörighet att radera tillägg på den här webbplatsen." + +#: wp-admin/includes/ajax-actions.php:4316 +msgid "Plugin could not be deleted." +msgstr "Tillägg kunde inte raderas." + +#: wp-admin/includes/ajax-actions.php:4349 +#: wp-admin/includes/ajax-actions.php:4401 wp-admin/plugins.php:13 +msgid "Sorry, you are not allowed to manage plugins for this site." +msgstr "Du har inte behörighet att hantera tillägg på den här webbplatsen." + +#: wp-admin/privacy.php:13 +msgid "Sorry, you are not allowed to manage privacy on this site." +msgstr "Du saknar behörighet för att hantera integritet på den här webbplatsen." + +#: wp-admin/includes/file.php:47 +msgid "Embed Template" +msgstr "Inbäddningsmall" + +#: wp-admin/includes/file.php:48 +msgid "Embed 404 Template" +msgstr "404-mall för inbäddning" + +#: wp-admin/includes/file.php:49 +msgid "Embed Content Template" +msgstr "Innehållsmall för inbäddning" + +#: wp-admin/includes/file.php:50 +msgid "Embed Header Template" +msgstr "Sidhuvudmall för inbäddning" + +#: wp-admin/includes/file.php:51 +msgid "Embed Footer Template" +msgstr "Sidfotmall för inbäddning" + +#: wp-admin/includes/menu.php:348 wp-admin/my-sites.php:17 +msgid "Sorry, you are not allowed to access this page." +msgstr "Du har inte behörighet att se den här sidan." + +#: wp-admin/includes/template.php:1820 +msgid "Close media attachment panel" +msgstr "Stäng panelen med mediabilagor" + +#: wp-admin/includes/template.php:2414 +msgid "This will replace the current editor content with the last backup version. You can use undo and redo in the editor to get the old content back or to return to the restored version." +msgstr "Det här kommer att ersätta nuvarande innehåll i redigeraren med den senaste sparade versionen. Du kan använda knapparna ångra och gör om i redigeraren för att återställa önskad version." + +#: wp-admin/nav-menus.php:618 wp-admin/widgets.php:399 +msgid "Manage with Live Preview" +msgstr "Hantera med förhandsgranskning live" + +#: wp-admin/includes/file.php:378 wp-admin/plugin-editor.php:18 +msgid "Sorry, you are not allowed to edit plugins for this site." +msgstr "Du har inte behörighet att redigera tillägg på den här webbplatsen." + +#: wp-admin/includes/file.php:410 wp-admin/theme-editor.php:18 +msgid "Sorry, you are not allowed to edit templates for this site." +msgstr "Du har inte behörighet att redigera malla på den här webbplatsen." + +#: wp-admin/includes/ajax-actions.php:3896 wp-admin/update.php:173 +#: wp-admin/update.php:194 +msgid "Sorry, you are not allowed to update themes for this site." +msgstr "Du har inte behörighet att uppdatera teman för på den här webbplatsen." + +#: wp-admin/includes/plugin-install.php:315 +msgid "Search plugins by:" +msgstr "Sök efter tillägg baserat på:" + +#: wp-admin/includes/plugin-install.php:262 +#: wp-admin/includes/plugin-install.php:679 wp-admin/freedoms.php:131 +#: wp-admin/plugins.php:444 wp-admin/plugin-install.php:86 +msgid "https://wordpress.org/plugins/" +msgstr "https://wordpress.org/plugins/" + +#: wp-admin/includes/ajax-actions.php:2330 +msgid "Sorry, you are not allowed to attach files to this post." +msgstr "Du har inte behörighet att bifoga filer i detta inlägg." + +#. translators: %s: post title +#: wp-admin/includes/class-wp-posts-list-table.php:929 +msgid "“%s” is locked" +msgstr "”%s” är låst" + +#: wp-admin/includes/plugin-install.php:322 +msgid "Search plugins..." +msgstr "Sök tillägg..." + +#: wp-admin/includes/template.php:2118 +msgid "Current Header Image" +msgstr "Nuvarande sidhuvudsbild" + +#: wp-admin/includes/template.php:2131 +msgid "Current Background Image" +msgstr "Nuvarande bakgrundsbild" + +#: wp-admin/options-general.php:225 +msgid "Choose either a city in the same timezone as you or a UTC timezone offset." +msgstr "Välj en stad i samma tidszon som du, alternativt valfri tidsskillnad från UTC (GMT)." + +#: wp-admin/includes/plugin-install.php:578 wp-admin/update.php:122 +msgid "Plugin Installation" +msgstr "Installation av tillägg" + +#: wp-admin/includes/dashboard.php:66 +msgid "WordPress Events and News" +msgstr "Evenemang och nyheter om WordPress" + +#: wp-admin/includes/dashboard.php:1128 +msgid "Meetups" +msgstr "Träffar" + +#: wp-admin/includes/dashboard.php:1140 +msgid "WordCamps" +msgstr "WordCamp" + +#: wp-admin/includes/dashboard.php:1198 +msgid "Edit city" +msgstr "Redigera stad" + +#: wp-admin/includes/dashboard.php:1205 +msgid "City:" +msgstr "Stad:" + +#: wp-admin/includes/dashboard.php:1217 +msgid "Cincinnati" +msgstr "Stockholm" + +#. translators: %s: the name of a city +#: wp-admin/includes/dashboard.php:1247 +msgid "Attend an upcoming event near %s." +msgstr "Besök ett kommande evenemang i närheten av %s." + +#. translators: 1: the city the user searched for, 2: meetup organization +#. documentation URL +#: wp-admin/includes/dashboard.php:1294 +msgid "There aren’t any events scheduled near %1$s at the moment. Would you like to organize one?" +msgstr "För närvarande finns det inga planerade evenemang i närheten av %1$s. Vill du kanske organisera ett?" + +#: wp-admin/includes/dashboard.php:1296 wp-admin/includes/dashboard.php:1305 +msgid "https://make.wordpress.org/community/handbook/meetup-organizer/welcome/" +msgstr "https://make.wordpress.org/community/handbook/meetup-organizer/welcome/" + +#. translators: %s: meetup organization documentation URL +#: wp-admin/includes/dashboard.php:1304 +msgid "There aren’t any events scheduled near you at the moment. Would you like to organize one?" +msgstr "Det finns inga evenemang inplanerade i din närhet just nu. Du kanske vill organisera ett?" + +#: wp-admin/includes/file.php:2406 +msgid "Unable to add data to export file." +msgstr "Det går inte att lägga till data i exportfilen." + +#: wp-admin/theme-editor.php:199 +msgid "Did you know?" +msgstr "Känner du till detta?" + +#: wp-admin/includes/dashboard.php:61 wp-admin/includes/dashboard.php:585 +msgid "Your Recent Drafts" +msgstr "Dina senaste utkast" + +#. translators: If a Rosetta site exists (e.g. https://es.wordpress.org/news/), +#. then use that. Otherwise, leave untranslated. +#: wp-admin/includes/dashboard.php:1152 +msgctxt "Events and News dashboard widget" +msgid "https://wordpress.org/news/" +msgstr "https://wordpress.org/news/" + +#. translators: 1: line number, 2: file path +#: wp-admin/includes/file.php:304 +msgid "Your PHP code changes were rolled back due to an error on line %1$s of file %2$s. Please fix and try saving again." +msgstr "Dina ändringar i PHP-kod har återställts till tidigare version på grund av ett fel i rad %1$s i filen %2$s. Vi ber dig korrigera och försöka att spara en gång till." + +#: wp-admin/includes/file.php:489 +msgid "Unable to write to file." +msgstr "Det går inte att skriva till filen." + +#: wp-admin/theme-editor.php:193 wp-admin/plugin-editor.php:187 +msgid "There was an error while trying to update the file. You may need to fix something and try updating again." +msgstr "Ett fel inträffade när filen skulle uppdateras. Du kan behöva fixa någonting och sedan försöka uppdatera igen." + +#: wp-admin/theme-editor.php:281 wp-admin/plugin-editor.php:261 +msgid "Selected file content:" +msgstr "Innehåll i vald fil:" + +#: wp-admin/plugin-editor.php:274 +msgid "Warning: Making changes to active plugins is not recommended." +msgstr "Varning: Det är inte rekommenderat att göra ändringar i aktiva tillägg." + +#: wp-admin/theme-editor.php:343 wp-admin/plugin-editor.php:307 +msgid "Heads up!" +msgstr "Observera!" + +#: wp-admin/theme-editor.php:357 wp-admin/plugin-editor.php:313 +msgid "I understand" +msgstr "Jag förstår" + +#: wp-admin/press-this.php:44 +msgid "Activate Press This" +msgstr "Aktivera Blogga detta" + +#. translators: URL to wp-admin/press-this.php +#: wp-admin/press-this.php:68 +msgid "Press This is not installed. Please install Press This from the main site." +msgstr "Blogga detta är inte installerat. Installera Blogga detta från huvudwebbplatsen." + +#: wp-admin/press-this.php:80 +msgid "Press This is not available. Please contact your site administrator." +msgstr "Blogga detta är inte tillgängligt. Kontakta administratören för din webbplats." + +#. translators: %s: plugin filename +#: wp-admin/includes/plugin.php:1002 +msgid "Could not fully remove the plugin %s." +msgstr "Det gick inte att ta bort tillägget %s fullständigt." + +#: wp-admin/press-this.php:75 wp-admin/press-this.php:81 +msgid "Installation Required" +msgstr "Installation krävs" + +#: wp-admin/includes/file.php:546 +msgid "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." +msgstr "Det går inte att kommunicera med webbplatsen för att kontrollera om det finns några allvarliga, därför har din ändring av PHP rullats tillbaka. Du behöver ladda upp din ändrade PHP-fil på något annat sätt, exempelvis med hjälp av SFTP." + +#: wp-admin/theme-editor.php:248 +msgid "Theme Files" +msgstr "Temafiler" + +#: wp-admin/includes/template.php:2036 wp-admin/includes/template.php:2041 +msgid "Customization Draft" +msgstr "Anpassningsutkast" + +#. translators: 1: wp-admin/includes/template.php, 2: add_meta_box(), 3: +#. add_meta_boxes +#: wp-admin/includes/template.php:2384 +msgid "Likely direct inclusion of %1$s in order to use %2$s. This is very wrong. Hook the %2$s call into the %3$s action instead." +msgstr "Sannolikt en direkt inkludering av %1$s för att kunna använda %2$s. Detta är väldigt fel. Skapa en hook för anropet %2$s till åtgärden %3$s istället." + +#. translators: %s: package URL +#: wp-admin/includes/class-language-pack-upgrader.php:117 +msgid "Downloading translation from %s…" +msgstr "Laddar ner översättning från %s…" + +#. translators: %s: Codex URL +#: wp-admin/options-general.php:98 +msgid "Enter the address here if you want your site home page to be different from your WordPress installation directory." +msgstr "Skriv in adressen här om du vill att startsidan för din webbplats ska ligga i en annan katalog än där WordPress är installerat." + +#: wp-admin/options-general.php:99 +msgid "https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory" +msgstr "https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory" + +#: wp-admin/plugin-editor.php:308 +msgid "You appear to be making direct edits to your plugin in the WordPress dashboard. We recommend that you don’t! Editing plugins directly may introduce incompatibilities that break your site and your changes may be lost in future updates." +msgstr "Det verkar som om du gör direktredigeringar av ditt tillägg via adminpanelen i WordPress. Vi rekommenderar att du inte gör så! Om man direktredigerar tillägg riskerar man att skapa kompatibilitetsproblem som får webbplatsen att sluta fungera, och dina ändringar riskerar att försvinna i samband med uppdateringar i framtiden." + +#: wp-admin/plugin-editor.php:309 +msgid "If you absolutely have to make direct edits to this plugin, use a file manager to create a copy with a new name and hang on to the original. That way, you can re-enable a functional version if something goes wrong." +msgstr "Om du absolut måste göra direktredigeringar av detta tillägg bör du använda en filhanterare och skapa en kopia under nytt namn för att behålla originalet. På så sätt kan du återaktivera en fungerande version om något skulle gå fel." + +#. translators: %s: link to documentation on child themes +#: wp-admin/theme-editor.php:348 +msgid "You appear to be making direct edits to your theme in the WordPress dashboard. We recommend that you don’t! Editing your theme directly could break your site and your changes may be lost in future updates. If you need to tweak more than your theme’s CSS, you might want to try making a child theme." +msgstr "Det verkar som om du gör direktredigeringar i ditt tema via administrationspanelen i WordPress. Vi rekommenderar att du inte gör så! Om du redigerar ditt tema direkt riskerar du att webbplatsen slutar fungera. Dessutom kan dina förändringar gå förlorade i samband med uppdateringar i framtiden. Om du behöver göra större förändringar i ditt tema än dess CSS-filer kan det vara idé att skapa ett barntema." + +#: wp-admin/theme-editor.php:353 +msgid "If you decide to go ahead with direct edits anyway, use a file manager to create a copy with a new name and hang on to the original. That way, you can re-enable a functional version if something goes wrong." +msgstr "Om du ändå bestämmer dig för att direktredigera bör du använda en filhanterare och att skapa en kopia av filen under nytt namn för att behålla originalet. På så sätt kan du återaktivera en fungerande version om något skulle gå fel." + +#. translators: %s: link to Custom CSS section in the Customizer +#: wp-admin/theme-editor.php:204 +msgid "There’s no need to change your CSS here — you can edit and live preview CSS changes in the built-in CSS editor." +msgstr "Om du vill ändra något i din CSS-kod, behöver du inte göra det här. Det är bättre att redigera CSS med direkt förhandsvisning i den inbyggda CSS-redigeraren." + +#: wp-admin/includes/plugin-install.php:656 +msgid "Requires PHP Version:" +msgstr "Kräver PHP-version:" + +#: wp-admin/includes/ajax-actions.php:4670 +msgid "Invalid email address in request." +msgstr "Ogiltig e-postadress i beställningen." + +#: wp-admin/includes/ajax-actions.php:4711 +msgid "Eraser index cannot be less than one." +msgstr "Raderarindex kan inte vara mindre än ett." + +#: wp-admin/includes/ajax-actions.php:4536 +#: wp-admin/includes/ajax-actions.php:4719 +msgid "Page index cannot be less than one." +msgstr "Sidindex kan inte vara mindre än ett." + +#. translators: %d: eraser array index +#: wp-admin/includes/ajax-actions.php:4728 +msgid "Expected an array describing the eraser at index %d." +msgstr "Förväntade en matris som beskriver raderaren vid index %d." + +#. translators: %d: eraser array index +#: wp-admin/includes/ajax-actions.php:4733 +msgid "Eraser array at index %d does not include a friendly name." +msgstr "Raderingsmatrisen vid index %d innehåller inget filtrerat användarnamn." + +#. translators: 1: eraser friendly name, 2: eraser array index +#: wp-admin/includes/ajax-actions.php:4769 +msgid "Did not receive array from %1$s eraser (index %2$d)." +msgstr "Mottog ingen matris från från raderingsrutinen %1$s (index %2$d)." + +#. translators: 1: eraser friendly name, 2: eraser array index +#: wp-admin/includes/ajax-actions.php:4780 +msgid "Expected items_removed key in response array from %1$s eraser (index %2$d)." +msgstr "Förväntade nyckeln num_items_removed i svarsmatrisen från raderingsrutinen %1$s (index %2$d)." + +#. translators: 1: eraser friendly name, 2: eraser array index +#: wp-admin/includes/ajax-actions.php:4791 +msgid "Expected items_retained key in response array from %1$s eraser (index %2$d)." +msgstr "Förväntade nyckeln num_items_retained i svarsmatrisen från raderingsrutinen %1$s (index %2$d)." + +#. translators: 1: eraser friendly name, 2: eraser array index +#: wp-admin/includes/ajax-actions.php:4802 +msgid "Expected messages key in response array from %1$s eraser (index %2$d)." +msgstr "Förväntade meddelandenyckel i svarsmatrisen från raderingsrutinen %1$s (index %2$d)." + +#. translators: 1: eraser friendly name, 2: eraser array index +#: wp-admin/includes/ajax-actions.php:4813 +msgid "Expected messages key to reference an array in response array from %1$s eraser (index %2$d)." +msgstr "Meddelandets nyckel förväntades peka på en matris som svar på en matris från raderingsrutinen %1$s (index %2$d)." + +#. translators: 1: eraser friendly name, 2: eraser array index +#: wp-admin/includes/ajax-actions.php:4824 +msgid "Expected done flag in response array from %1$s eraser (index %2$d)." +msgstr "Förväntade flaggan ”utfört” i svarsmatrisen från raderingsrutinen %1$s (index %2$d)." + +#: wp-admin/includes/ajax-actions.php:4467 +#: wp-admin/includes/ajax-actions.php:4650 +msgid "Invalid request ID." +msgstr "Ogiltigt beställnings-ID." + +#: wp-admin/includes/ajax-actions.php:4485 +msgid "A valid email address must be given." +msgstr "En giltig e-postadress måste anges." + +#: wp-admin/includes/file.php:2259 +msgid "Unable to generate export file. ZipArchive not available." +msgstr "Det går inte att skapa exportfilen. ZipArchive är inte tillgängligt." + +#: wp-admin/includes/file.php:2266 +msgid "Invalid request ID when generating export file." +msgstr "Ogiltigt beställnings-ID vid generering av exportfil." + +#: wp-admin/includes/file.php:2272 +msgid "Invalid email address when generating export file." +msgstr "Ogiltig e-postadress vid generering av exportfil." + +#: wp-admin/includes/file.php:2288 +msgid "Unable to protect export folder from browsing." +msgstr "Det går inte att skydda exportkatalogen från bläddring." + +#: wp-admin/includes/file.php:2302 +msgid "Unable to open export file (HTML report) for writing." +msgstr "Kan inte öppna exportfilen (HTML-rapport) för skrivning." + +#. translators: %s: user's email address +#: wp-admin/includes/file.php:2307 +msgid "Personal Data Export for %s" +msgstr "Export av personuppgifter för %s" + +#: wp-admin/includes/file.php:2334 +msgid "Personal Data Export" +msgstr "Export av personuppgifter" + +#: wp-admin/includes/file.php:2425 +msgid "Unable to open export file (archive) for writing." +msgstr "Kan inte öppna exportfilen (arkivfil) för skrivning." + +#: wp-admin/includes/file.php:2449 +msgid "Invalid request ID when sending personal data export email." +msgstr "Ogiltigt beställnings-ID vid sändning av e-post med export av personuppgifter." + +#. translators: Personal data export notification email subject. %s: Site title +#: wp-admin/includes/file.php:2512 +msgid "[%s] Personal Data Export" +msgstr "[%s] Export av personuppgifter" + +#: wp-admin/includes/file.php:2523 +msgid "Unable to send personal data export email." +msgstr "Kan inte skicka e-post om export av personuppgifter." + +#: wp-admin/includes/file.php:2568 +msgid "Invalid request ID when merging exporter data." +msgstr "Ogiltigt beställnings-ID vid sammanläggning av exportdata." + +#. translators: %s: admin_init +#: wp-admin/includes/plugin.php:2170 +msgid "The suggested privacy policy content should be added only in wp-admin by using the %s (or later) action." +msgstr "Det föreslagna innehållet för integritetspolicy bör endast läggas in i wp-admin med hjälp av åtgärden %s (eller senare)." + +#. translators: %s: URL to Customizer -> Menus +#: wp-admin/privacy.php:42 +msgid "Privacy Policy page setting updated successfully. Remember to update your menus!" +msgstr "Sidan för integritetspolicy har uppdaterats. Kom ihåg att uppdatera dina menyer!" + +#: wp-admin/privacy.php:75 +msgid "Unable to create a Privacy Policy page." +msgstr "Det går inte att skapa en sida för integritetspolicy." + +#: wp-admin/privacy.php:99 +msgid "The currently selected Privacy Policy page does not exist. Please create or select a new page." +msgstr "Den nuvarande valda sidan för integritetspolicy finns inte. Skapa eller välj en ny sida." + +#. translators: URL to Pages Trash +#: wp-admin/privacy.php:109 +msgid "The currently selected Privacy Policy page is in the trash. Please create or select a new Privacy Policy page or restore the current page." +msgstr "Den sida för integritetspolicy som valts ligger i papperskorgen. Skapa eller välj en ny sida för integritetspolicy eller återställ den befintliga sidan." + +#. translators: Do not translate EXPIRATION, LINK, SITENAME, SITEURL: those are +#. placeholders. +#: wp-admin/includes/file.php:2466 +msgid "" +"Howdy,\n" +"\n" +"Your request for an export of personal data has been completed. You may\n" +"download your personal data by clicking on the link below. For privacy\n" +"and security, we will automatically delete the file on ###EXPIRATION###,\n" +"so please download it before then.\n" +"\n" +"###LINK###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"Din begäran om export av personuppgifter har utförts. Du kan ladda ned dina egna uppgifter genom att klicka på länken nedan. Av integritets- och säkerhetsskäl kommer filen automatiskt att raderas ###EXPIRATION###,\n" +"så se till att ladda ned den före dess.\n" +"\n" +"###LINK###\n" +"\n" +"Hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#: wp-admin/privacy.php:128 +msgid "Privacy Policy page" +msgstr "Sida med integritetspolicy" + +#: wp-admin/privacy.php:131 +msgid "If you already have a Privacy Policy page, please select it below. If not, please create one." +msgstr "Om du redan har en sida för integritetspolicy ska du välja den här nedan. I annat fall bör du skapa en nu." + +#: wp-admin/privacy.php:134 +msgid "The new page will include help and suggestions for your Privacy Policy." +msgstr "Den nya sidan kommer att innehålla hjälp och förslag för din integritetspolicy." + +#: wp-admin/privacy.php:135 +msgid "However, it is your responsibility to use those resources correctly, to provide the information that your Privacy Policy requires, and to keep that information current and accurate." +msgstr "Det är dock ditt ansvar att använda dessa resurser på rätt sätt för att tillhandahålla den information som krävs för din integritetspolicy, samt att hålla denna information uppdaterad och korrekt." + +#: wp-admin/privacy.php:139 +msgid "We would also suggest reviewing your Privacy Policy from time to time, especially after installing or updating any themes or plugins. There may be changes or new suggested information for you to consider adding to your policy." +msgstr "Vi rekommenderar även att du granskar din integritetspolicy emellanåt, i synnerhet efter att du uppdaterat något tema eller tillägg. Det kan finnas ändringar eller förslag på ny information som du bör överväga att inkludera i din policy." + +#. translators: 1: URL to edit Privacy Policy page, 2: URL to view Privacy +#. Policy page +#: wp-admin/privacy.php:161 +msgid "Edit or view your Privacy Policy page content." +msgstr "Redigera eller visa innehållet i din sida för integritetspolicy." + +#: wp-admin/privacy.php:199 +msgid "Change your Privacy Policy page" +msgstr "Ändra sida för din integritetspolicy" + +#: wp-admin/privacy.php:201 +msgid "Select a Privacy Policy page" +msgstr "Välj en sida för integritetspolicy" + +#: wp-admin/privacy.php:235 +msgid "Use This Page" +msgstr "Använd denna sida" + +#: wp-admin/privacy.php:254 +msgid "Create New Page" +msgstr "Skapa ny sida" + +#: wp-admin/includes/ajax-actions.php:4480 +#: wp-admin/includes/ajax-actions.php:4664 +msgid "Invalid request type." +msgstr "Ogiltig typ av beställning." + +#: wp-admin/includes/ajax-actions.php:4489 +msgid "Missing exporter index." +msgstr "Exportörens index saknas." + +#: wp-admin/includes/ajax-actions.php:4494 +#: wp-admin/includes/ajax-actions.php:4680 +msgid "Missing page index." +msgstr "Sidans index saknas." + +#: wp-admin/includes/ajax-actions.php:4522 +msgid "An exporter has improperly used the registration filter." +msgstr "En exportör har använt registreringsfiltret på fel sätt." + +#: wp-admin/includes/ajax-actions.php:4528 +msgid "Exporter index cannot be negative." +msgstr "Exportörens index kan inte vara negativt." + +#: wp-admin/includes/ajax-actions.php:4532 +msgid "Exporter index is out of range." +msgstr "Exportörens index ligger utom intervallet." + +#. translators: %s: exporter array index +#: wp-admin/includes/ajax-actions.php:4546 +msgid "Expected an array describing the exporter at index %s." +msgstr "Förväntade en matris som beskriver exportören vid index %s." + +#. translators: %s: exporter friendly name +#: wp-admin/includes/ajax-actions.php:4561 +msgid "Exporter does not include a callback: %s." +msgstr "Exportören innehåller ingen callback: %s." + +#. translators: %s: exporter friendly name +#: wp-admin/includes/ajax-actions.php:4567 +msgid "Exporter callback is not a valid callback: %s." +msgstr "Exportörens callback är ingen giltig callback: %s." + +#. translators: %s: exporter friendly name +#: wp-admin/includes/ajax-actions.php:4581 +msgid "Expected response as an array from exporter: %s." +msgstr "Förväntade svar i en matris från exportören: %s." + +#. translators: %s: exporter friendly name +#: wp-admin/includes/ajax-actions.php:4587 +msgid "Expected data in response array from exporter: %s." +msgstr "Förväntade data i svarsmatris från exportören: %s." + +#. translators: %s: exporter friendly name +#: wp-admin/includes/ajax-actions.php:4593 +msgid "Expected data array in response array from exporter: %s." +msgstr "Förväntade datamatris i svarsmatris från exportören: %s." + +#. translators: %s: exporter friendly name +#: wp-admin/includes/ajax-actions.php:4599 +msgid "Expected done (boolean) in response array from exporter: %s." +msgstr "Förväntade klarflagga (boolesk variabel) i svarsmatrisen från exportören: %s." + +#: wp-admin/includes/ajax-actions.php:4674 +msgid "Missing eraser index." +msgstr "Raderarindex saknas." + +#: wp-admin/includes/ajax-actions.php:4715 +msgid "Eraser index is out of range." +msgstr "Raderarindex ligger utom sitt intervall." + +#. translators: %s: exporter array index +#: wp-admin/includes/ajax-actions.php:4552 +msgid "Exporter array at index %s does not include a friendly name." +msgstr "Exportmatrisen vid index %s innehåller inget filtrerat användarnamn." + +#: wp-admin/includes/file.php:2346 +msgctxt "email address" +msgid "Report generated for" +msgstr "Rapporten skapad för" + +#: wp-admin/includes/file.php:2350 +msgctxt "website name" +msgid "For site" +msgstr "För webbplatsen" + +#: wp-admin/includes/file.php:2354 +msgctxt "website URL" +msgid "At URL" +msgstr "Med URL" + +#: wp-admin/includes/file.php:2358 +msgctxt "date/time" +msgid "On" +msgstr "den" + +#: wp-admin/privacy.php:130 +msgid "As a website owner, you may need to follow national or international privacy laws. For example, you may need to create and display a Privacy Policy." +msgstr "Som ägare av en webbplats kan du behöva följa nationella eller internationella integritetslagar. Till exempel kan du behöva skapa en integritetspolicy och göra den tillgänglig." + +#. translators: 1: Privacy Policy guide URL, 2: additional link attributes, 3: +#. accessibility text +#: wp-admin/privacy.php:184 +msgid "Need help putting together your new Privacy Policy page? Check out our guide%3$s for recommendations on what content to include, along with policies suggested by your plugins and theme." +msgstr "Behöver ni hjälp med att sammanställa er nya sida med integritetspolicy? Kolla in vår guide%3$s med rekommendationer om vilket innehåll ni bör inkludera utöver policyer som rekommenderas av era tillägg och ert tema." + +#: wp-admin/privacy.php:138 +msgid "After your Privacy Policy page is set, we suggest that you edit it." +msgstr "När sidan för integritetspolicy är vald föreslår vi att du redigerar den." + +#: wp-admin/privacy.php:245 +msgid "Or:" +msgstr "eller:" + +#: wp-admin/privacy.php:247 +msgid "There are no pages." +msgstr "Det finns inga sidor." + +#: wp-admin/includes/file.php:2280 +msgid "Unable to create export folder." +msgstr "Det gick inte att skapa exportkatalogen." + +#. translators: %s: admin_init +#: wp-admin/includes/plugin.php:2181 +msgid "The suggested privacy policy content should be added by using the %s (or later) action. Please see the inline documentation." +msgstr "Det föreslagna innehållet för integritetspolicyn bör läggas till med hjälp av åtgärden %s (eller senare). Mer information finns i kommentarerna i själva programkoden." + +#: wp-admin/privacy.php:25 +msgid "Privacy Policy page updated successfully." +msgstr "Sidan för integritetspolicy har uppdaterats." + +#: wp-admin/includes/template.php:2065 wp-admin/includes/file.php:39 +msgid "Privacy Policy Page" +msgstr "Integritetspolicysida" + +#. translators: 1: URL to edit Privacy Policy page, 2: URL to preview Privacy +#. Policy page +#: wp-admin/privacy.php:168 +msgid "Edit or preview your Privacy Policy page content." +msgstr "Redigera eller förhandsvisa innehållet i din sida för integritetspolicyn." + +#. translators: Header for the About section in a personal data export. +#: wp-admin/includes/file.php:2342 +msgctxt "personal data group label" +msgid "About" +msgstr "Allmänna uppgifter" + +#. translators: %s: the name of the plugin that generated this meta box. +#: wp-admin/includes/template.php:1103 wp-admin/includes/template.php:1302 +msgid "This meta box, from the %s plugin, isn't compatible with the block editor." +msgstr "Denna metabox från tillägget %s är inte kompatibel med blockredigeraren." + +#. translators: %s: post title +#: wp-admin/includes/class-wp-posts-list-table.php:1403 +msgid "Export “%s” as JSON" +msgstr "Exportera ”%s” i JSON-format" + +#: wp-admin/includes/class-wp-posts-list-table.php:1404 +msgid "Export as JSON" +msgstr "Exportera i JSON-format" + +#: wp-admin/includes/template.php:1105 +msgid "This meta box isn't compatible with the block editor." +msgstr "Denna meta-ruta är inte kompatibel med blockredigeraren." + +#. translators: %s: A link to install the Classic Editor plugin. +#: wp-admin/includes/template.php:1113 +msgid "Please install the Classic Editor plugin to use this meta box." +msgstr "Installera tillägget Classic Editor för att kunna använda denna meta-ruta." + +#. translators: %s: A link to activate the Classic Editor plugin. +#: wp-admin/includes/template.php:1121 +msgid "Please activate the Classic Editor plugin to use this meta box." +msgstr "Aktivera tillägget Classic Editor för att kunna använda denna meta-ruta." + +#. translators: %s: A link to use the Classic Editor plugin. +#: wp-admin/includes/template.php:1134 +msgid "Please open the classic editor to use this meta box." +msgstr "Öppna den klassiska redigeraren för att använda denna meta-ruta." + +#. translators: %s: "Update PHP" page URL +#: wp-admin/includes/plugin-install.php:770 +msgid "Click here to learn more about updating PHP." +msgstr "Klicka här för att läsa mer om uppdatering av PHP." + +#: wp-admin/includes/plugin-install.php:787 +msgid "Error: This plugin requires a newer version of WordPress." +msgstr "Fel: Detta tillägg kräver en senare version av WordPress." + +#. translators: %s: "Update WordPress" screen URL +#: wp-admin/includes/plugin-install.php:791 +msgid "Click here to update WordPress." +msgstr "Klicka här för att uppdatera WordPress." + +#: wp-admin/includes/class-language-pack-upgrader.php:121 +msgid "Removing the old version of the translation…" +msgstr "Tar bort den gamla versionen av översättningen..." + +#: wp-admin/includes/class-language-pack-upgrader.php:122 +msgid "Could not remove the old translation." +msgstr "Det gick inte att ta bort den gamla översättningen." + +#: wp-admin/includes/plugin.php:477 +msgid "Custom PHP error message." +msgstr "Anpassat felmeddelande för PHP." + +#: wp-admin/includes/plugin.php:478 +msgid "Custom PHP fatal error handler." +msgstr "Anpassad hantering av allvarliga PHP-fel." + +#: wp-admin/includes/plugin.php:2291 +msgid "Could not resume the plugin." +msgstr "Det gick inte att återstarta tillägget." + +#: wp-admin/includes/plugin.php:2318 +msgid "One or more plugins failed to load properly." +msgstr "Ett eller flera tillägg kunde inte laddas på rätt sätt." + +#: wp-admin/includes/plugin.php:2319 +msgid "You can find more details and make changes on the Plugins screen." +msgstr "Du hittar mer information och kan göra ändringar på skärmen med tilläggslistan." + +#: wp-admin/includes/dashboard.php:42 +msgid "PHP Update Required" +msgstr "En uppdatering av PHP krävs" + +#: wp-admin/includes/dashboard.php:1622 +msgid "WordPress has detected that your site is running on an insecure version of PHP." +msgstr "WordPress har upptäckt att din webbplats använder en osäker version av PHP." + +#: wp-admin/includes/dashboard.php:1624 +msgid "WordPress has detected that your site is running on an outdated version of PHP." +msgstr "WordPress har upptäckt att din webbplats använder en föråldrad version av PHP." + +#: wp-admin/includes/dashboard.php:1630 +msgid "What is PHP and how does it affect my site?" +msgstr "Vad är PHP och hur påverkar det min webbplats?" + +#: wp-admin/includes/dashboard.php:1708 +msgid "Set up your homepage" +msgstr "Konfigurera din startsida" + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number, +#. 3: Minimum required PHP version number, 4: Current PHP version number +#: wp-admin/install.php:256 +msgid "You cannot install because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s." +msgstr "Du kan inte installera eftersom WordPress %2$s kräver PHP-version %3$s eller senare. Du har version %4$s." + +#. translators: 1: URL to WordPress release notes, 2: WordPress version number, +#. 3: Minimum required MySQL version number, 4: Current MySQL version number +#: wp-admin/install.php:259 +msgid "You cannot install because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s." +msgstr "Du kan inte installera eftersom WordPress %2$s kräver MySQL-version %3$s eller senare. Du har version %4$s." + +#: wp-admin/nav-menus.php:751 +msgid "Create your first menu below." +msgstr "Skapa din första meny nedan." + +#: wp-admin/nav-menus.php:752 +msgid "Fill in the Menu Name and click the Create Menu button to create your first menu." +msgstr "Fyll i menyns namn och klicka på knappen Skapa meny för att skapa din första meny." + +#: wp-admin/nav-menus.php:758 +msgid "Edit your menu below, or create a new menu. Don’t forget to save your changes!" +msgstr "Redigera din meny nedan, eller skapa en ny meny. Glöm inte att spara dina ändringar!" + +#: wp-admin/nav-menus.php:770 wp-admin/nav-menus.php:831 +msgid "Click the Save Menu button to save your changes." +msgstr "Klicka på knappen Spara meny för att spara dina ändringar." + +#: wp-admin/includes/ajax-actions.php:4471 +#: wp-admin/includes/ajax-actions.php:4655 +msgid "Sorry, you are not allowed to perform this action." +msgstr "Du saknar behörighet att utföra denna åtgärd." + +#. translators: %s: eraser friendly name +#: wp-admin/includes/ajax-actions.php:4742 +msgid "Eraser does not include a callback: %s." +msgstr "Raderaren saknar återanrop: %s." + +#. translators: %s: eraser friendly name +#: wp-admin/includes/ajax-actions.php:4752 +msgid "Eraser callback is not valid: %s." +msgstr "Ogiltigt återanrop för raderaren: %s." + +#. translators: %s: The filename of the package. +#: wp-admin/includes/file.php:1171 wp-admin/includes/file.php:1191 +#: wp-admin/includes/file.php:1222 +msgid "The authenticity of %s could not be verified as signature verification is unavailable on this system." +msgstr "Äktheten hos %s kunde inte bekräftas eftersom kontroll av signaturer inte kan göras på detta system." + +#. translators: %s: The filename of the package. +#: wp-admin/includes/file.php:1240 +msgid "The authenticity of %s could not be verified as no signature was found." +msgstr "Äktheten hos %s kunde inte bekräftas eftersom signatur saknades." + +#. translators: %s: The filename of the package. +#: wp-admin/includes/file.php:1287 +msgid "The authenticity of %s could not be verified." +msgstr "Äktheten hos %s kunde inte bekräftas." + +#. translators: %s: plugin name +#: wp-admin/includes/plugin.php:1112 +msgid "Error: Current WordPress and PHP versions do not meet minimum requirements for %s." +msgstr "Fel: De nuvarande versionerna av WordPress och PHP uppfyller inte lägstakraven för %s." + +#. translators: %s: plugin name +#: wp-admin/includes/plugin.php:1121 +msgid "Error: Current PHP version does not meet minimum requirements for %s." +msgstr "Fel: Den nuvarande versionen av PHP uppfyller inte lägstakraven för %s." + +#. translators: %s: plugin name +#: wp-admin/includes/plugin.php:1130 +msgid "Error: Current WordPress version does not meet minimum requirements for %s." +msgstr "Fel: Den nuvarande versionen av WordPress uppfyller inte lägstakraven för %s." + +#: wp-admin/includes/plugin.php:2321 +msgid "Go to the Plugins screen" +msgstr "Gå till inläggslistan" + +#: wp-admin/includes/class-wp-posts-list-table.php:499 +msgid "Filter by post format" +msgstr "Filtrera med avseende på inläggsformat" + +#: wp-admin/includes/class-wp-posts-list-table.php:501 +msgid "All formats" +msgstr "Alla format" + +#. translators: Background update failed notification email subject. %s: Site +#. title +#: wp-admin/includes/class-wp-automatic-updater.php:915 +msgid "[%s] Background Update Failed" +msgstr "[%s] Bakgrundsuppdatering misslyckades" + +#. translators: Background update finished notification email subject. %s: Site +#. title +#: wp-admin/includes/class-wp-automatic-updater.php:918 +msgid "[%s] Background Update Finished" +msgstr "[%s] Bakgrundsuppdatering slutförd" + +#: wp-admin/includes/media.php:2639 wp-admin/includes/nav-menu.php:378 +#: wp-admin/includes/nav-menu.php:707 +msgid "«" +msgstr "«" + +#: wp-admin/includes/media.php:2640 wp-admin/includes/nav-menu.php:379 +#: wp-admin/includes/nav-menu.php:708 +msgid "»" +msgstr "»" + +#. translators: draft saved date format, see https://secure.php.net/date +#: wp-admin/includes/misc.php:1136 +msgid "g:i:s a" +msgstr "H:i:s" + +#: wp-admin/includes/misc.php:1140 +msgid "Draft saved at %s." +msgstr "Utkast sparat kl. %s." + +#: wp-admin/includes/edit-tag-messages.php:18 +#: wp-admin/includes/ajax-actions.php:2015 +#: wp-admin/includes/ajax-actions.php:2021 +msgid "Item not updated." +msgstr "Posten uppdaterades inte." + +#: wp-admin/includes/misc.php:972 +#: wp-admin/includes/class-wp-posts-list-table.php:996 +msgid "%s is currently editing" +msgstr "%s utför just nu redigeringar" + +#. translators: %s: attachment title +#. translators: %s: post title +#: wp-admin/includes/class-wp-media-list-table.php:698 +#: wp-admin/includes/class-wp-media-list-table.php:756 +#: wp-admin/includes/class-wp-posts-list-table.php:1392 +msgid "View “%s”" +msgstr "Visa ”%s”" + +#: wp-admin/includes/class-wp-media-list-table.php:451 +#: wp-admin/includes/class-wp-posts-list-table.php:1057 +msgid "Unpublished" +msgstr "Opublicerat" + +#: wp-admin/includes/class-wp-media-list-table.php:520 +msgid "(Unattached)" +msgstr "(Ej bifogat)" + +#: wp-admin/includes/class-wp-media-list-table.php:161 +#: wp-admin/includes/class-wp-media-list-table.php:530 +#: wp-admin/includes/class-wp-media-list-table.php:708 +msgid "Attach" +msgstr "Bifoga" + +#: wp-admin/includes/class-wp-comments-list-table.php:337 +#: wp-admin/includes/class-wp-comments-list-table.php:621 +#: wp-admin/includes/class-wp-comments-list-table.php:627 +#: wp-admin/includes/dashboard.php:650 +msgid "Unapprove" +msgstr "Godkänn ej" + +#: wp-admin/includes/class-wp-comments-list-table.php:340 +#: wp-admin/includes/class-wp-comments-list-table.php:623 +#: wp-admin/includes/class-wp-comments-list-table.php:626 +#: wp-admin/includes/dashboard.php:649 +msgid "Approve" +msgstr "Godkänn" + +#: wp-admin/includes/class-wp-comments-list-table.php:394 +#: wp-admin/includes/class-wp-posts-list-table.php:1744 +msgid "Pings" +msgstr "Pingar" + +#: wp-admin/includes/class-wp-comments-list-table.php:415 +msgid "Empty Spam" +msgstr "Radera skräppost" + +#: wp-admin/includes/class-wp-media-list-table.php:189 +#: wp-admin/includes/class-wp-comments-list-table.php:415 +#: wp-admin/includes/class-wp-posts-list-table.php:561 +msgid "Empty Trash" +msgstr "Töm papperskorgen" + +#: wp-admin/includes/class-wp-comments-list-table.php:204 +msgid "No comments found." +msgstr "Inga kommentarer hittade." + +#: wp-admin/includes/meta-boxes.php:1462 +msgid "Send Trackbacks" +msgstr "Skicka trackbacks" + +#: wp-admin/includes/meta-boxes.php:1036 wp-admin/edit-link-form.php:16 +msgid "Update Link" +msgstr "Uppdatera länk" + +#: wp-admin/includes/edit-tag-messages.php:15 +msgid "Item deleted." +msgstr "Posten raderad." + +#: wp-admin/includes/edit-tag-messages.php:16 +msgid "Item updated." +msgstr "Posten uppdaterad." + +#: wp-admin/includes/edit-tag-messages.php:17 +msgid "Item not added." +msgstr "Posten lades inte till." + +#: wp-admin/includes/edit-tag-messages.php:19 +msgid "Items deleted." +msgstr "Poster raderade." + +#: wp-admin/includes/class-wp-screen.php:1289 +#: wp-admin/includes/class-wp-list-table.php:170 +msgid "Excerpt View" +msgstr "Lista med utdrag" + +#: wp-admin/includes/media.php:1609 wp-admin/upgrade.php:78 +#: wp-admin/upgrade.php:134 +msgid "Continue" +msgstr "Fortsätt" + +#: wp-admin/includes/class-wp-users-list-table.php:337 wp-admin/export.php:183 +msgid "Posts" +msgstr "Inlägg" + +#: wp-admin/includes/import.php:183 +msgid "Blogger" +msgstr "Blogger" + +#: wp-admin/includes/import.php:195 +msgid "LiveJournal" +msgstr "LiveJournal" + +#: wp-admin/includes/widgets.php:253 +msgctxt "widget" +msgid "Add" +msgstr "Lägg till" + +#: wp-admin/includes/widgets.php:252 +msgctxt "widget" +msgid "Edit" +msgstr "Redigera" + +#: wp-admin/includes/theme-install.php:116 +msgid "Search by tag" +msgstr "Sök efter tagg" + +#: wp-admin/includes/theme-install.php:113 +msgid "Search by author" +msgstr "Sök efter författare" + +#: wp-admin/includes/theme-install.php:110 +#: wp-admin/includes/theme-install.php:122 +msgid "Search by keyword" +msgstr "Sök efter nyckelord" + +#: wp-admin/includes/theme-install.php:100 +msgid "Type of search" +msgstr "Typ av sökning" + +#: wp-admin/includes/class-wp-screen.php:1022 +msgid "Screen Options Tab" +msgstr "Panelinställningar" + +#: wp-admin/includes/import.php:201 +msgid "Movable Type and TypePad" +msgstr "Movable Type och TypePad" + +#: wp-admin/includes/class-wp-screen.php:833 +msgid "Contextual Help Tab" +msgstr "Hjälp" + +#: wp-admin/includes/class-wp-comments-list-table.php:691 +msgid "Select comment" +msgstr "Välj kommentar" + +#: wp-admin/includes/import.php:207 +msgid "Blogroll" +msgstr "Länklista" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:69 +msgid "The ssh2 PHP extension is not available" +msgstr "PHP-tillägget för SSH2 är inte tillgängligt" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:92 +msgid "SSH2 hostname is required" +msgstr "SSH2-servernamn är obligatoriskt" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:106 +msgid "SSH2 username is required" +msgstr "SSH2-användarnamn är obligatoriskt" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:116 +msgid "SSH2 password is required" +msgstr "SSH2-lösenord är obligatoriskt" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:142 +msgid "Failed to connect to SSH2 Server %s" +msgstr "Anslutningen till SSH2-servern misslyckades %s" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:167 +msgid "Public and Private keys incorrect for %s" +msgstr "Publika och privata nycklar felaktiga för %s" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:229 +msgid "Unable to perform command: %s" +msgstr "Oförmögen att utföra kommandot: %s" + +#: wp-admin/includes/user.php:1533 wp-admin/includes/class-wp-upgrader.php:159 +msgid "Download failed." +msgstr "Nerladdning misslyckades." + +#: wp-admin/includes/update-core.php:1296 +#: wp-admin/includes/class-wp-upgrader.php:163 wp-admin/includes/file.php:1493 +#: wp-admin/includes/file.php:1618 wp-admin/includes/file.php:1684 +msgid "Could not create directory." +msgstr "Kunde inte skapa katalogen." + +#: wp-admin/includes/update-core.php:1033 +#: wp-admin/includes/class-wp-upgrader.php:167 +msgid "Enabling Maintenance mode…" +msgstr "Aktiverar underhållsläge…" + +#: wp-admin/includes/update-core.php:1128 +#: wp-admin/includes/class-wp-upgrader.php:168 +msgid "Disabling Maintenance mode…" +msgstr "Inaktiverar underhållsläge…" + +#: wp-admin/includes/class-core-upgrader.php:29 +msgid "WordPress is at the latest version." +msgstr "WordPress är av den senaste versionen." + +#: wp-admin/includes/class-core-upgrader.php:35 +msgid "Could not copy files." +msgstr "Kunde inte kopiera filer." + +#: wp-admin/includes/class-wp-comments-list-table.php:623 +#: wp-admin/includes/class-wp-comments-list-table.php:626 +#: wp-admin/includes/dashboard.php:649 +msgid "Approve this comment" +msgstr "Godkänn denna kommentar" + +#: wp-admin/includes/class-wp-comments-list-table.php:621 +#: wp-admin/includes/class-wp-comments-list-table.php:627 +#: wp-admin/includes/dashboard.php:650 +msgid "Unapprove this comment" +msgstr "Förkasta denna kommentar" + +#: wp-admin/includes/class-wp-comments-list-table.php:653 +#: wp-admin/includes/dashboard.php:652 +msgid "Reply to this comment" +msgstr "Svara på denna kommentar" + +#: wp-admin/includes/class-wp-comments-list-table.php:631 +#: wp-admin/includes/dashboard.php:653 +msgid "Mark this comment as spam" +msgstr "Markera denna kommentar som skräppost" + +#. translators: mark as spam link +#: wp-admin/includes/class-wp-comments-list-table.php:631 +#: wp-admin/includes/dashboard.php:653 +msgctxt "verb" +msgid "Spam" +msgstr "Skräppost" + +#: wp-admin/includes/class-wp-comments-list-table.php:643 +#: wp-admin/includes/dashboard.php:658 +msgid "Move this comment to the Trash" +msgstr "Flytta denna kommentar till papperskorgen" + +#: wp-admin/includes/class-wp-media-list-table.php:680 +#: wp-admin/includes/class-wp-media-list-table.php:736 +#: wp-admin/includes/class-wp-comments-list-table.php:643 +#: wp-admin/includes/class-wp-posts-list-table.php:1361 +#: wp-admin/includes/dashboard.php:658 +msgctxt "verb" +msgid "Trash" +msgstr "Kasta i papperskorgen" + +#: wp-admin/includes/user.php:851 wp-admin/includes/user.php:935 +msgid "Search Requests" +msgstr "Beställningar av sökningar" + +#: wp-admin/includes/import.php:85 wp-admin/includes/file.php:794 +msgid "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." +msgstr "Filen är tom. Vänligen ladda upp något med lite mer substans. Felet kan också bero på att uppladdningar är inaktiverade i din php.ini eller att den post_max_size som har definierats är lägre än upload_max_filesize i php.ini" + +#: wp-admin/includes/update-core.php:1168 +#: wp-admin/includes/update-core.php:1290 wp-admin/includes/file.php:1522 +#: wp-admin/includes/file.php:1639 wp-admin/includes/file.php:1678 +msgid "Could not copy file." +msgstr "Kunde inte kopiera fil." + +#: wp-admin/includes/media.php:18 +msgid "From Computer" +msgstr "Från dator" + +#: wp-admin/includes/media.php:19 +msgid "From URL" +msgstr "Från URL" + +#: wp-admin/includes/media.php:63 +msgid "Gallery (%s)" +msgstr "Galleri (%s)" + +#: wp-admin/includes/media.php:490 +msgid "Uploads" +msgstr "Uppladdningar" + +#: wp-admin/includes/media.php:1160 wp-admin/includes/media.php:1319 +msgid "File URL" +msgstr "Filadress" + +#: wp-admin/includes/media.php:1370 wp-admin/includes/media.php:2784 +msgid "Alt text for the image, e.g. “The Mona Lisa”" +msgstr "Alternerande text, ex. ”Mona Lisa”" + +#: wp-admin/includes/media.php:1239 +msgid "Empty Title filled from filename." +msgstr "Rensa titel ifylld från filnamnet." + +#: wp-admin/includes/media.php:1323 +msgid "Location of the uploaded file." +msgstr "Plats för den uppladdade filen." + +#: wp-admin/includes/media.php:1575 +msgid "Upload date:" +msgstr "Uppladdat den:" + +#: wp-admin/includes/media.php:1597 wp-admin/includes/media.php:2814 +#: wp-admin/includes/media.php:2820 +msgid "Insert into Post" +msgstr "Infoga i innehåll" + +#: wp-admin/includes/media.php:2167 +msgid "Add media files from your computer" +msgstr "Välj en fil på din dator" + +#: wp-admin/includes/media.php:2196 wp-admin/includes/media.php:2412 +#: wp-admin/includes/media.php:2716 +msgid "Save all changes" +msgstr "Spara alla ändringar" + +#: wp-admin/includes/media.php:2385 +msgid "All Tabs:" +msgstr "Alla flikar" + +#: wp-admin/includes/media.php:2389 +msgid "Sort Order:" +msgstr "Sorteringsordning:" + +#: wp-admin/includes/media.php:2390 wp-admin/includes/media.php:2469 +msgid "Ascending" +msgstr "Stigande" + +#: wp-admin/includes/media.php:2391 wp-admin/includes/media.php:2472 +msgid "Descending" +msgstr "Fallande" + +#: wp-admin/includes/media.php:2433 +msgid "Link thumbnails to:" +msgstr "Länka miniatyrer till:" + +#: wp-admin/includes/media.php:2438 +msgid "Image File" +msgstr "Bildfil" + +#: wp-admin/includes/media.php:2448 +msgid "Order images by:" +msgstr "Ordna bilder efter:" + +#: wp-admin/includes/media.php:2453 +msgid "Menu order" +msgstr "Menyordning" + +#: wp-admin/includes/media.php:2455 +msgid "Date/Time" +msgstr "Datum/Tid" + +#: wp-admin/includes/media.php:2456 +msgid "Random" +msgstr "Slumpvis" + +#: wp-admin/includes/media.php:2464 +msgid "Order:" +msgstr "Ordning:" + +#: wp-admin/includes/media.php:2479 +msgid "Gallery columns:" +msgstr "Gallerikolumner:" + +#: wp-admin/includes/media.php:2500 +msgid "Update gallery settings" +msgstr "Uppdatera inställningar för galleri" + +#: wp-admin/includes/media.php:2597 +msgid "All Types" +msgstr "Alla typer" + +#: wp-admin/includes/media.php:2686 +msgid "Filter »" +msgstr "Filtrera »" + +#: wp-admin/includes/media.php:2737 +msgid "Image Caption" +msgstr "Bildbeskrivning" + +#: wp-admin/includes/media.php:2803 +msgid "Link Image To:" +msgstr "Länka bild till:" + +#: wp-admin/includes/media.php:2808 +msgid "Link to image" +msgstr "Länk till bild" + +#: wp-admin/includes/media.php:2777 +msgid "Link text, e.g. “Ransom Demands (PDF)”" +msgstr "Länktext, ex. ”Min CV (PDF)”" + +#: wp-admin/includes/meta-boxes.php:59 +msgid "Preview Changes" +msgstr "Förhandsgranska ändringar" + +#: wp-admin/includes/meta-boxes.php:91 wp-admin/export.php:222 +#: wp-admin/export.php:269 +msgid "Status:" +msgstr "Status:" + +#: wp-admin/includes/meta-boxes.php:158 wp-admin/includes/meta-boxes.php:183 +#: wp-admin/includes/template.php:2029 +msgid "Password protected" +msgstr "Lösenordsskyddat" + +#: wp-admin/includes/meta-boxes.php:181 +msgid "Stick this post to the front page" +msgstr "Klistra det här inlägget till förstasidan" + +#. translators: Post date information. %s: Date on which the post is currently +#. scheduled to be published +#: wp-admin/includes/meta-boxes.php:202 +msgid "Scheduled for: %s" +msgstr "Tidsinställt för: %s" + +#. translators: Post date information. %s: Date on which the post was published +#: wp-admin/includes/meta-boxes.php:205 +msgid "Published on: %s" +msgstr "Publicerat den: %s" + +#: wp-admin/includes/meta-boxes.php:207 wp-admin/includes/meta-boxes.php:217 +msgid "Publish immediately" +msgstr "Publicera direkt" + +#. translators: Post date information. %s: Date on which the post is to be +#. published +#: wp-admin/includes/meta-boxes.php:210 +msgid "Schedule for: %s" +msgstr "Tidsinställ för: %s" + +#. translators: Post date information. %s: Date on which the post is to be +#. published +#: wp-admin/includes/meta-boxes.php:213 +msgid "Publish on: %s" +msgstr "Publicera den: %s" + +#: wp-admin/includes/meta-boxes.php:1090 wp-admin/includes/meta-boxes.php:1092 +msgid "+ Add New Category" +msgstr "+ Lägg till ny kategori" + +#: wp-admin/includes/meta-boxes.php:1093 +msgid "New category name" +msgstr "Nytt kategorinamn" + +#: wp-admin/includes/meta-boxes.php:686 +msgid "Already pinged:" +msgstr "Redan pingat:" + +#: wp-admin/includes/meta-boxes.php:696 +msgid "Send trackbacks to:" +msgstr "Skicka trackbacks till:" + +#: wp-admin/includes/meta-boxes.php:699 +msgid "Separate multiple URLs with spaces" +msgstr "Separera flera URLer med mellanslag" + +#: wp-admin/includes/meta-boxes.php:831 +msgid "Show comments" +msgstr "Visa kommentarer" + +#: wp-admin/includes/meta-boxes.php:924 +#: wp-admin/includes/class-wp-posts-list-table.php:1646 +msgid "Parent" +msgstr "Överordnad" + +#: wp-admin/includes/meta-boxes.php:958 +#: wp-admin/includes/class-wp-posts-list-table.php:1701 +msgid "Default Template" +msgstr "Standardmall" + +#: wp-admin/includes/meta-boxes.php:1007 +msgid "Visit Link" +msgstr "Besök länk" + +#: wp-admin/includes/meta-boxes.php:1015 +msgid "Keep this link private" +msgstr "Behåll denna länk privat" + +#: wp-admin/includes/meta-boxes.php:1116 +msgid "_blank — new window or tab." +msgstr "_blank — nytt fönster eller flik." + +#: wp-admin/includes/meta-boxes.php:1119 +msgid "_top — current window or tab, with no frames." +msgstr "_top — nuvarande fönster eller flik, utan ramar." + +#: wp-admin/includes/meta-boxes.php:1122 +msgid "_none — same window or tab." +msgstr "_none — samma fönster eller flik." + +#: wp-admin/includes/meta-boxes.php:1124 +msgid "Choose the target frame for your link." +msgstr "Välj hur din länk ska öppnas." + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1180 +msgid "rel:" +msgstr "rel:" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1184 wp-admin/includes/meta-boxes.php:1185 +msgid "identity" +msgstr "identitet" + +#: wp-admin/includes/meta-boxes.php:1188 +msgid "another web address of mine" +msgstr "en annan webbsida jag skapat" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1192 wp-admin/includes/meta-boxes.php:1193 +msgid "friendship" +msgstr "vänskap" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1195 +msgid "contact" +msgstr "kontakt" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1198 +msgid "acquaintance" +msgstr "bekant" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1201 +msgid "friend" +msgstr "vän" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1204 wp-admin/includes/meta-boxes.php:1237 +#: wp-admin/includes/meta-boxes.php:1260 +msgid "none" +msgstr "inget" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1209 wp-admin/includes/meta-boxes.php:1210 +msgid "physical" +msgstr "fysisk" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1212 +msgid "met" +msgstr "träffats" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1217 wp-admin/includes/meta-boxes.php:1218 +msgid "professional" +msgstr "arbete" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1220 +msgid "co-worker" +msgstr "arbetskamrat" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1223 +msgid "colleague" +msgstr "kollega" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1228 wp-admin/includes/meta-boxes.php:1229 +msgid "geographical" +msgstr "geografisk" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1231 +msgid "co-resident" +msgstr "samboende" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1234 +msgid "neighbor" +msgstr "granne" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1242 wp-admin/includes/meta-boxes.php:1243 +msgid "family" +msgstr "familj" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1245 +msgid "child" +msgstr "underordnad" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1248 +msgid "kin" +msgstr "släkt" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1251 +msgid "parent" +msgstr "överordnad" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1254 +msgid "sibling" +msgstr "syskon" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1257 +msgid "spouse" +msgstr "make/maka" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1265 wp-admin/includes/meta-boxes.php:1266 +msgid "romantic" +msgstr "romantisk" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1268 +msgid "muse" +msgstr "inspiration" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1271 +msgid "crush" +msgstr "förälskelse" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1274 +msgid "date" +msgstr "träff" + +#. translators: xfn: http://gmpg.org/xfn +#: wp-admin/includes/meta-boxes.php:1277 +msgid "sweetheart" +msgstr "älskling" + +#: wp-admin/includes/meta-boxes.php:1283 +msgid "If the link is to a person, you can specify your relationship with them using the above form. If you would like to learn more about the idea check out XFN." +msgstr "Om länken är till en person så kan du specificera din relation till personen med valen ovan. Om du vill veta mer om relationslänkar så kan du besöka XFN." + +#: wp-admin/includes/meta-boxes.php:1298 +msgid "Image Address" +msgstr "Bildadress" + +#: wp-admin/includes/meta-boxes.php:1302 +msgid "RSS Address" +msgstr "RSS-adress" + +#: wp-admin/includes/meta-boxes.php:1306 +msgid "Notes" +msgstr "Noteringar" + +#: wp-admin/includes/meta-boxes.php:1321 +msgid "(Leave at 0 for no rating.)" +msgstr "(lämna som 0 om du inte vill ange omdöme)" + +#: wp-admin/includes/post.php:34 wp-admin/includes/post.php:79 +msgid "Sorry, you are not allowed to edit pages as this user." +msgstr "Du har inte behörighet att redigera sidor som den här användaren." + +#: wp-admin/includes/post.php:36 wp-admin/includes/post.php:81 +msgid "Sorry, you are not allowed to edit posts as this user." +msgstr "Du har inte behörighet att redigera inlägg som den här användaren." + +#: wp-admin/includes/post.php:664 +msgid "Auto Draft" +msgstr "Automatiskt utkast" + +#. translators: site tagline +#: wp-admin/includes/schema.php:418 +msgid "Just another WordPress site" +msgstr "En till WordPress-webbplats" + +#. translators: site tagline +#: wp-admin/includes/schema.php:556 +msgid "Just another %s site" +msgstr "En till %s webbplats" + +#: wp-admin/includes/schema.php:1081 +msgid "Warning! Wildcard DNS may not be configured correctly!" +msgstr "Varning! Joker-dns-posten är kanske inte korrekt konfigurerad!" + +#: wp-admin/includes/class-wp-terms-list-table.php:624 +#: wp-admin/includes/class-wp-posts-list-table.php:1520 +msgid "Quick Edit" +msgstr "Snabbredigera" + +#: wp-admin/includes/class-wp-terms-list-table.php:469 +#: wp-admin/includes/class-wp-comments-list-table.php:651 +#: wp-admin/includes/class-wp-posts-list-table.php:1341 +msgid "Quick Edit" +msgstr "Snabbredigera" + +#. translators: column name +#: wp-admin/includes/class-wp-media-list-table.php:286 +msgctxt "column name" +msgid "File" +msgstr "Fil" + +#. translators: column name +#: wp-admin/includes/class-wp-media-list-table.php:322 +msgctxt "column name" +msgid "Date" +msgstr "Datum" + +#: wp-admin/includes/class-wp-comments-list-table.php:455 +#: wp-admin/includes/class-wp-post-comments-list-table.php:27 +msgctxt "column name" +msgid "Comment" +msgstr "Kommentar" + +#: wp-admin/includes/class-wp-screen.php:932 +msgid "Screen Options" +msgstr "Skärmalternativ" + +#: wp-admin/includes/update-core.php:963 +msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s." +msgstr "Uppdateringen kan inte installeras eftersom WordPress %1$s kräver minst PHP %2$s och MySQL %3$s eller senare. Du kör PHP %4$s och MySQL %5$s." + +#: wp-admin/includes/update-core.php:965 +msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s." +msgstr "Uppdateringen kan inte installeras eftersom WordPress %1$s kräver minst PHP %2$s eller senare. Du kör PHP %3$s." + +#: wp-admin/includes/update-core.php:967 +msgid "The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "Uppdateringen kan inte installeras eftersom WordPress %1$s kräver minst MySQL %2$s eller nyare. Du kör MySQL %3$s." + +#: wp-admin/includes/update-core.php:902 +msgid "Verifying the unpacked files…" +msgstr "Verifierar uppackade filer…" + +#: wp-admin/includes/update-core.php:915 +msgid "The update could not be unpacked" +msgstr "Uppdateringen kunde inte packas upp" + +#: wp-admin/includes/update-core.php:1217 +msgid "Upgrading database…" +msgstr "Uppdaterar databasen…" + +#: wp-admin/includes/upgrade.php:80 +msgid "Note that password carefully! It is a random password that was generated just for you." +msgstr "Var noga med att komma ihåg lösenordet! Det är ett datorgenererat lösenord som skapades just för dig." + +#. translators: Default category slug +#: wp-admin/includes/upgrade.php:144 +msgctxt "Default category slug" +msgid "Uncategorized" +msgstr "Okategoriserade" + +#. translators: %s: site link +#. translators: first post content, %s: site link +#: wp-admin/includes/schema.php:1243 wp-admin/includes/upgrade.php:197 +msgid "Welcome to %s. This is your first post. Edit or delete it, then start writing!" +msgstr "Välkommen till %s. Det här är ditt första inlägg. Redigera eller radera det. Sedan kan du börja skriva!" + +#: wp-admin/includes/upgrade.php:224 +msgid "Hello world!" +msgstr "Hej världen!" + +#. translators: Default post slug +#: wp-admin/includes/upgrade.php:226 wp-admin/includes/upgrade.php:536 +msgctxt "Default post slug" +msgid "hello-world" +msgstr "hej-varlden" + +#: wp-admin/includes/user.php:167 +msgid "ERROR: Please enter a password." +msgstr "FEL: Vänligen ange ett lösenord." + +#: wp-admin/includes/user.php:172 +msgid "ERROR: Passwords may not contain the character \"\\\"." +msgstr "FEL: Lösenord kan inte innehålla tecknet \"\\\"." + +#: wp-admin/includes/user.php:177 +msgid "ERROR: Please enter the same password in both password fields." +msgstr "FEL: Var vänlig och ange samma lösenord i båda lösenordsfälten." + +#: wp-admin/includes/user.php:201 +msgid "ERROR: Please enter an email address." +msgstr "FEL: vänligen ange en e-postadress." + +#: wp-admin/includes/class-wp-users-list-table.php:159 +#: wp-admin/includes/deprecated.php:569 +msgid "No users found." +msgstr "Inga användare funna." + +#. translators: %s: current user's comments count +#: wp-admin/includes/class-wp-comments-list-table.php:228 +msgctxt "comments" +msgid "Mine (%s)" +msgid_plural "Mine (%s)" +msgstr[0] "Min (%s)" +msgstr[1] "Mina (%s)" + +#: wp-admin/includes/user.php:555 +msgid "Use https" +msgstr "Använd https" + +#: wp-admin/includes/user.php:556 +msgid "Always use https when visiting the admin" +msgstr "Använd alltid https vid besök till adminpanelen" + +#: wp-admin/includes/misc.php:877 wp-admin/user-edit.php:287 +msgid "Admin Color Scheme" +msgstr "Färgschema för adminpanel" + +#. translators: User role name with count +#: wp-admin/includes/class-wp-users-list-table.php:211 +#: wp-admin/includes/class-wp-users-list-table.php:225 +msgid "%1$s (%2$s)" +msgstr "%1$s (%2$s)" + +#: wp-admin/includes/class-wp-users-list-table.php:270 +#: wp-admin/includes/class-wp-users-list-table.php:272 +msgid "Change role to…" +msgstr "Ändra roll till…" + +#: wp-admin/includes/class-wp-users-list-table.php:276 +msgid "Change" +msgstr "Ändra" + +#: wp-admin/includes/misc.php:1132 wp-admin/includes/post.php:1912 +#: wp-admin/widgets.php:372 +msgid "Error while saving." +msgstr "Fel vid sparande." + +#: wp-admin/includes/class-walker-nav-menu-edit.php:156 +msgid "Edit menu item" +msgstr "Redigera menyval" + +#: wp-admin/includes/upgrade.php:101 +msgid "The password you chose during installation." +msgstr "Lösenordet du valde under installationen." + +#: wp-admin/includes/upgrade.php:89 +msgid "User already exists. Password inherited." +msgstr "Användaren finns redan. Lösenordet ärvdes." + +#: wp-admin/includes/update-core.php:1353 +#: wp-admin/includes/class-wp-automatic-updater.php:379 +#: wp-admin/update-core.php:576 +msgid "WordPress updated successfully" +msgstr "WordPress uppdaterades utan problem" + +#. translators: 1: name of plugin being updated, 2: number of updating plugin, +#. 3: total number of plugins being updated +#: wp-admin/includes/class-bulk-plugin-upgrader-skin.php:24 +msgid "Updating Plugin %1$s (%2$d/%3$d)" +msgstr "Uppdaterar tillägget %1$s (%2$d/%3$d)" + +#: wp-admin/includes/user.php:515 +msgid "Notice:" +msgstr "Notera:" + +#: wp-admin/includes/post.php:805 +msgid "Sorry, you are not allowed to create posts or drafts on this site." +msgstr "Du har inte behörighet att skapa inlägg eller utkast på den här webbplatsen." + +#: wp-admin/includes/class-walker-nav-menu-edit.php:190 +msgid "CSS Classes (optional)" +msgstr "CSS-klasser (valfritt)" + +#: wp-admin/includes/schema.php:969 +msgid "You must provide a domain name." +msgstr "Du måste ange ett domännamn." + +#: wp-admin/includes/schema.php:972 +msgid "You must provide a name for your network of sites." +msgstr "Du måste ange ett namn för ditt nätverk av webbplatser." + +#: wp-admin/includes/schema.php:979 wp-admin/includes/schema.php:983 +msgid "The network already exists." +msgstr "Nätverket finns redan." + +#: wp-admin/includes/schema.php:988 +msgid "You must provide a valid email address." +msgstr "Du måste ange en giltig e-postadress." + +#. translators: %s: error message +#: wp-admin/includes/schema.php:1090 +msgid "This resulted in an error message: %s" +msgstr "Detta resulterade i ett felmeddelande: %s" + +#: wp-admin/includes/schema.php:1100 +msgid "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." +msgstr "Du kan fortfarande använda din webbplats men alla underdomän du skapar kanske inte är tillgänglig. Om du vet att dina DNS-inställningar är korrekta så kan du ignorera det här meddelandet." + +#: wp-admin/includes/media.php:2392 +msgctxt "verb" +msgid "Clear" +msgstr "Rensa" + +#: wp-admin/includes/user.php:518 +msgid "Yes, take me to my profile page" +msgstr "Ja, ta mig till min profil" + +#: wp-admin/includes/upgrade.php:86 +msgid "Your chosen password." +msgstr "Ditt valda lösenord." + +#: wp-admin/includes/user.php:519 +msgid "No thanks, do not remind me again" +msgstr "Nej tack. Påminn mig inte igen" + +#: wp-admin/includes/post.php:803 +msgid "Sorry, you are not allowed to create pages on this site." +msgstr "Du har inte behörighet att skapa sidor på den här webbplatsen." + +#: wp-admin/includes/schema.php:416 +msgid "My Site" +msgstr "Min webbplats" + +#. translators: %s: asterisk symbol (*) +#: wp-admin/includes/schema.php:1096 +msgid "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." +msgstr "Om du vill använda en subdomänkonfiguration så måste du skapa en jokerpost i din DNS. Detta innebär oftast att man anger en %s som en 'hostname'-post pekat mot servern i DNS-konfigurationen." + +#. translators: %s: host name +#: wp-admin/includes/schema.php:1085 +msgid "The installer attempted to contact a random hostname (%s) on your domain." +msgstr "Installeraren försökte slumpvis ansluta till hostnamn (%s) för din domän." + +#: wp-admin/includes/upgrade.php:611 +msgid "New WordPress Site" +msgstr "Ny WordPresswebbplats" + +#: wp-admin/includes/theme-install.php:104 +msgctxt "Theme Installer" +msgid "Tag" +msgstr "Tagg" + +#: wp-admin/includes/class-wp-comments-list-table.php:349 +#: wp-admin/includes/class-wp-comments-list-table.php:633 +msgctxt "comment" +msgid "Not Spam" +msgstr "Inte skräppost" + +#. translators: New admin email address notification email subject. %s: Site +#. title +#: wp-admin/includes/misc.php:1293 +msgid "[%s] New Admin Email Address" +msgstr "[%s] Ny e-postadress för admin" + +#: wp-admin/includes/class-wp-comments-list-table.php:343 +#: wp-admin/comment.php:122 +msgctxt "comment" +msgid "Mark as Spam" +msgstr "Markera som skräppost" + +#: wp-admin/includes/meta-boxes.php:905 +msgid "(no parent)" +msgstr "(utan överordnad)" + +#: wp-admin/includes/class-bulk-plugin-upgrader-skin.php:48 +#: wp-admin/includes/class-language-pack-upgrader-skin.php:74 +#: wp-admin/includes/class-bulk-theme-upgrader-skin.php:48 +msgid "Return to WordPress Updates page" +msgstr "Återgå till sidan med uppdateringar för WordPress" + +#: wp-admin/includes/import.php:189 wp-admin/tools.php:27 wp-admin/tools.php:62 +msgid "Categories and Tags Converter" +msgstr "Kategori och tagg-konvertering" + +#: wp-admin/includes/class-wp-comments-list-table.php:637 +msgid "Restore this comment from the Trash" +msgstr "Återställ denna kommentar från papperskorgen" + +#: wp-admin/includes/class-wp-comments-list-table.php:641 +#: wp-admin/includes/dashboard.php:656 +msgid "Delete this comment permanently" +msgstr "Radera denna kommentar permanent" + +#: wp-admin/includes/meta-boxes.php:760 +msgid "Allow comments" +msgstr "Tillåt kommentarer" + +#. translators: %s: front page title +#: wp-admin/includes/class-walker-nav-menu-checklist.php:99 +msgctxt "nav menu front page title" +msgid "Home: %s" +msgstr "Hem: %s" + +#: wp-admin/includes/class-theme-upgrader-skin.php:29 wp-admin/update.php:180 +msgid "Update Theme" +msgstr "Uppdatera tema" + +#. translators: Gigabytes +#: wp-admin/includes/ms.php:255 +msgid "GB" +msgstr "GB" + +#. translators: Megabytes +#: wp-admin/includes/ms.php:259 +msgid "MB" +msgstr "MB" + +#. translators: Default page slug +#: wp-admin/includes/upgrade.php:320 +msgid "sample-page" +msgstr "exempelsida" + +#: wp-admin/includes/upgrade.php:318 +msgid "Sample Page" +msgstr "Exempelsida" + +#. translators: default start of the week. 0 = Sunday, 1 = Monday +#: wp-admin/includes/schema.php:422 +msgctxt "start of week" +msgid "1" +msgstr "1" + +#: wp-admin/includes/user.php:570 +msgid "" +"Hi,\n" +"You've been invited to join '%1$s' at\n" +"%2$s with the role of %3$s.\n" +"If you do not want to join this site please ignore\n" +"this email. This invitation will expire in a few days.\n" +"\n" +"Please click the following link to activate your user account:\n" +"%%s" +msgstr "" +"Hej,\n" +"Du har blivit inbjuden att bli medlem på \n" +"'%1$s' - %2$s som %3$s.\n" +"Om du inte vill bli medlem på denna webbplats ignorera\n" +"detta meddelande. Den här inbjudan kommer att upphöra inom ett par dagar. \n" +"\n" +"Klicka på följande länk för att aktivera ditt konto:\n" +"%%s" + +#: wp-admin/includes/ms.php:1008 wp-admin/users.php:338 +msgid "Confirm Deletion" +msgstr "Bekräfta radering" + +#: wp-admin/includes/media.php:2759 +msgid "Audio, Video, or Other File" +msgstr "Ljud, video eller annan fil" + +#: wp-admin/includes/class-wp-terms-list-table.php:487 +#: wp-admin/includes/class-wp-users-list-table.php:446 +#: wp-admin/includes/class-wp-media-list-table.php:699 +#: wp-admin/includes/class-wp-media-list-table.php:757 +#: wp-admin/includes/class-wp-posts-list-table.php:1393 +#: wp-admin/includes/dashboard.php:661 +msgid "View" +msgstr "Visa" + +#: wp-admin/includes/class-wp-users-list-table.php:415 +#: wp-admin/user-edit.php:418 +msgid "Super Admin" +msgstr "Superadmin" + +#. translators: 1: link start tag, 2: link end tag, 3: width, 4: height +#: wp-admin/includes/media.php:2889 +msgid "Scale images to match the large size selected in %1$simage options%2$s (%3$d × %4$d)." +msgstr "Skala bilder för att matcha den storlek valts under %1$sbildinställningar%2​​$s (%3$d × %4$d)." + +#: wp-admin/includes/class-wp-users-list-table.php:336 +#: wp-admin/user-new.php:402 wp-admin/user-new.php:538 +#: wp-admin/user-edit.php:395 +msgid "Role" +msgstr "Roll" + +#: wp-admin/includes/media.php:2234 +msgid "Insert media from another website" +msgstr "Infoga media från en annan webbplats" + +#: wp-admin/includes/import.php:219 +msgid "Tumblr" +msgstr "Tumblr" + +#: wp-admin/includes/update-core.php:1357 wp-admin/update-core.php:578 +msgid "Welcome to WordPress %1$s. Learn more." +msgstr "Välkommen till WordPress %1$s. Läs mer." + +#: wp-admin/includes/schema.php:406 +msgctxt "default GMT offset or timezone string" +msgid "0" +msgstr "Europe/Stockholm" + +#: wp-admin/includes/media.php:1161 +msgid "Attachment Post URL" +msgstr "Bilagans inläggsadress" + +#: wp-admin/includes/media.php:2074 +msgid "Drop files here" +msgstr "Släpp filer här" + +#: wp-admin/includes/class-wp-comments-list-table.php:202 +msgid "No comments awaiting moderation." +msgstr "Inga kommentarer inväntar granskning." + +#: wp-admin/includes/ms.php:654 +msgid "Visit Dashboard" +msgstr "Besök adminpanel" + +#: wp-admin/includes/ms.php:648 +msgid "Your Sites" +msgstr "Dina webbplatser" + +#: wp-admin/includes/ms.php:646 +msgid "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." +msgstr "Om du nått denna sida av misstag och menade att besöka en av dina egna sajter så följer här några genvägar för att hjälpa dig att hitta vägen." + +#: wp-admin/includes/ms.php:642 wp-admin/includes/ms.php:645 +msgid "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." +msgstr "Du försökte få tillgång till adminpanelen för \"%1$s\", men du har för närvarande inte behörighet på denna webbplats. Om du anser att du bör kunna få tillgång till adminpanelen på \"%1$s\", kontakta din nätverksadministratör." + +#: wp-admin/includes/ms.php:308 +msgid "MB (Leave blank for network default)" +msgstr "MB (Lämna tomt för nätverksstandard)" + +#: wp-admin/includes/ms.php:702 +msgid "British English" +msgstr "Engelska (Brittisk)" + +#: wp-admin/includes/ms.php:655 +msgid "View Site" +msgstr "Visa webbplats" + +#: wp-admin/includes/ms.php:698 +msgid "American English" +msgstr "Engelska (Amerikansk)" + +#. translators: My sites label +#: wp-admin/includes/ms.php:808 +msgid "Primary Site" +msgstr "Primär webbplats" + +#: wp-admin/includes/class-wp-media-list-table.php:516 +msgid "Detach" +msgstr "Ta bort bifogning" + +#: wp-admin/includes/meta-boxes.php:807 +msgid "Add comment" +msgstr "Lägg till kommentar" + +#: wp-admin/includes/theme-install.php:102 +#: wp-admin/includes/plugin-install.php:317 +msgid "Keyword" +msgstr "Nyckelord" + +#: wp-admin/includes/class-wp-media-list-table.php:151 +#: wp-admin/includes/class-wp-media-list-table.php:728 +#: wp-admin/includes/class-wp-comments-list-table.php:347 +#: wp-admin/includes/class-wp-comments-list-table.php:637 +#: wp-admin/includes/class-wp-posts-list-table.php:405 +#: wp-admin/includes/class-wp-posts-list-table.php:1353 +msgid "Restore" +msgstr "Återställ" + +#: wp-admin/includes/media.php:2401 +msgid "Actions" +msgstr "Åtgärder" + +#: wp-admin/includes/misc.php:1695 +msgid "↑ Return to Top" +msgstr "↑ Gå tillbaka längst upp" + +#: wp-admin/includes/meta-boxes.php:821 +msgid "No comments yet." +msgstr "Inga kommentarer än." + +#: wp-admin/includes/media.php:1312 wp-admin/includes/media.php:2809 +msgid "Enter a link URL or click above for presets." +msgstr "Ange en länkadress eller klicka för förinställningar ovan." + +#: wp-admin/includes/user.php:151 +msgid "ERROR: Please enter a nickname." +msgstr "FEL: Vänligen ange ett smeknamn." + +#. translators: %s: theme name +#: wp-admin/includes/class-theme-upgrader-skin.php:71 +msgid "Customize “%s”" +msgstr "Anpassa ”%s”" + +#: wp-admin/includes/revision.php:415 +msgid "Revision by %s" +msgstr "Version av %s" + +#: wp-admin/includes/theme-install.php:94 +msgid "Search for themes by keyword." +msgstr "Sök teman baserat på nyckelord." + +#: wp-admin/includes/class-core-upgrader.php:36 wp-admin/includes/file.php:1467 +#: wp-admin/includes/file.php:1592 +msgid "Could not copy files. You may have run out of disk space." +msgstr "Kunde inte kopiera filer. Du ha kanske slut på diskutrymme." + +#: wp-admin/includes/media.php:2859 +msgid "You are using the browser’s built-in file uploader. The WordPress uploader includes multiple file selection and drag and drop capability. Switch to the multi-file uploader." +msgstr "Du använder den webbläsarbaserade uppladdaren. WordPress uppladdare inkluderar funktioner för att välja flera filer åt gången och dra och släpp. Växla till multifilsuppladdaren." + +#: wp-admin/includes/user.php:1099 wp-admin/includes/dashboard.php:1696 +msgid "Next Steps" +msgstr "Nästa steg" + +#: wp-admin/includes/media.php:3091 +msgid "File URL:" +msgstr "Fil-URL:" + +#: wp-admin/includes/update-core.php:1356 wp-admin/update-core.php:577 +msgid "Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here." +msgstr "Välkommen till WordPress %1$s. Du kommer att omdirigeras till sidan om WordPress. Om inte, klicka här." + +#. translators: Storage space that's been used. 1: Percentage of used space, 2: +#. Total space allowed in megabytes or gigabytes +#: wp-admin/includes/ms.php:265 +msgid "Used: %1$s%% of %2$s" +msgstr "Använt: %1$s%% av %2$s" + +#: wp-admin/includes/class-wp-media-list-table.php:316 +msgctxt "column name" +msgid "Uploaded to" +msgstr "Uppladdad till" + +#: wp-admin/includes/media.php:2846 +msgid "You are using the multi-file uploader. Problems? Try the browser uploader instead." +msgstr "Du använder multifilsuppladdaren. Problem? Försök med webbläsarbaserade uppladdaren istället." + +#: wp-admin/includes/class-walker-nav-menu-edit.php:118 +msgid "sub item" +msgstr "underval" + +#: wp-admin/includes/ms.php:753 +msgid "Thank you for Updating! Please visit the Upgrade Network page to update all your sites." +msgstr "Tack för att du uppdaterar! Vänligen besök sidan för nätverksuppdatering för att uppdatera alla dina webbplatser." + +#: wp-admin/includes/misc.php:1015 +msgid "%s has taken over and is currently editing." +msgstr "%s har tagit över och redigerar just nu." + +#: wp-admin/includes/class-walker-nav-menu-edit.php:209 +msgid "Move" +msgstr "Flytta" + +#: wp-admin/includes/class-walker-nav-menu-edit.php:210 +msgid "Up one" +msgstr "Upp ett steg" + +#: wp-admin/includes/class-walker-nav-menu-edit.php:211 +msgid "Down one" +msgstr "Ner ett steg" + +#: wp-admin/includes/class-walker-nav-menu-edit.php:214 +msgid "To the top" +msgstr "Till toppen" + +#: wp-admin/includes/revision.php:386 +msgctxt "Followed by post revision info" +msgid "From:" +msgstr "Från:" + +#: wp-admin/includes/revision.php:435 +msgid "Restore This Revision" +msgstr "Återställ denna version" + +#. translators: 1: audio album title, 2: artist name +#: wp-admin/includes/media.php:340 +msgid "%1$s by %2$s." +msgstr "%1$s av %2$s." + +#. translators: Audio file track information. %d: Year of audio track release +#: wp-admin/includes/media.php:352 +msgid "Released: %d." +msgstr "Släppt: %d." + +#. translators: Audio file track information. 1: Audio track number, 2: Total +#. audio tracks +#: wp-admin/includes/media.php:359 +msgid "Track %1$s of %2$s." +msgstr "Spår %1$s av %2$s." + +#. translators: Audio file genre information. %s: Audio genre name +#: wp-admin/includes/media.php:368 +msgid "Genre: %s." +msgstr "Genre: %s." + +#: wp-admin/includes/media.php:3178 +msgid "Audio Format:" +msgstr "Ljudformat:" + +#: wp-admin/includes/media.php:3179 +msgid "Audio Codec:" +msgstr "Ljud-codec:" + +#: wp-admin/includes/post.php:1748 +msgid "Your latest changes were saved as a revision." +msgstr "Din senaste ändring sparades som en egen version." + +#: wp-admin/includes/revision.php:359 +msgctxt "Button label for a previous revision" +msgid "Previous" +msgstr "Föregående" + +#: wp-admin/includes/revision.php:363 +msgctxt "Button label for a next revision" +msgid "Next" +msgstr "Nästa" + +#: wp-admin/includes/revision.php:388 +msgctxt "Followed by post revision info" +msgid "To:" +msgstr "Till:" + +#: wp-admin/includes/revision.php:447 +msgid "Sorry, something went wrong. The requested comparison could not be loaded." +msgstr "Ett fel uppstod. Efterfrågad jämförelse kunde inte laddas." + +#. translators: 1: audio track title, 2: album title, 3: artist name +#: wp-admin/includes/media.php:325 +msgid "\"%1$s\" from %2$s by %3$s." +msgstr "\"%1$s\" från %2$s av %3$s." + +#. translators: 1: audio track title, 2: album title +#: wp-admin/includes/media.php:328 +msgid "\"%1$s\" from %2$s." +msgstr "\"%1$s\" från %2$s." + +#. translators: 1: audio track title, 2: artist name +#: wp-admin/includes/media.php:331 +msgid "\"%1$s\" by %2$s." +msgstr "\"%1$s\" av %2$s." + +#. translators: 1: audio track title +#: wp-admin/includes/media.php:334 +msgid "\"%s\"." +msgstr "\"%s\"." + +#. translators: Post revisions heading. %s: The number of available revisions +#: wp-admin/includes/meta-boxes.php:226 +msgid "Revisions: %s" +msgstr "Versioner: %s" + +#: wp-admin/includes/meta-boxes.php:228 +msgctxt "revisions" +msgid "Browse" +msgstr "Bläddra" + +#: wp-admin/includes/revision.php:397 +msgid "Autosave by %s" +msgstr "Autosparat av %s" + +#: wp-admin/includes/revision.php:406 +msgid "Current Revision by %s" +msgstr "Aktuell version av %s" + +#: wp-admin/includes/revision.php:433 +msgid "Restore This Autosave" +msgstr "Återställ denna autosparade version" + +#: wp-admin/includes/revision.php:377 +msgid "Compare any two revisions" +msgstr "Jämför två valfria versioner" + +#: wp-admin/includes/edit-tag-messages.php:24 +msgid "Category added." +msgstr "Kategori tillagd." + +#: wp-admin/includes/edit-tag-messages.php:25 +msgid "Category deleted." +msgstr "Kategori raderad." + +#: wp-admin/includes/edit-tag-messages.php:26 +msgid "Category updated." +msgstr "Kategori uppdaterad." + +#: wp-admin/includes/edit-tag-messages.php:27 +msgid "Category not added." +msgstr "Kategori ej tillagd." + +#: wp-admin/includes/edit-tag-messages.php:28 +msgid "Category not updated." +msgstr "Kategori ej uppdaterad." + +#: wp-admin/includes/edit-tag-messages.php:29 +msgid "Categories deleted." +msgstr "Kategorier raderade." + +#: wp-admin/includes/edit-tag-messages.php:34 +msgid "Tag added." +msgstr "Tagg tillagd." + +#: wp-admin/includes/edit-tag-messages.php:35 +msgid "Tag deleted." +msgstr "Tagg raderad." + +#: wp-admin/includes/edit-tag-messages.php:36 +msgid "Tag updated." +msgstr "Tagg uppdaterad." + +#: wp-admin/includes/edit-tag-messages.php:37 +msgid "Tag not added." +msgstr "Tagg ej tillagd." + +#: wp-admin/includes/edit-tag-messages.php:38 +msgid "Tag not updated." +msgstr "Tagg ej uppdaterad." + +#: wp-admin/includes/edit-tag-messages.php:39 +msgid "Tags deleted." +msgstr "Taggar raderade." + +#: wp-admin/includes/class-core-upgrader.php:37 +msgid "Attempting to roll back to previous version." +msgstr "Försöker återgå till föregående version." + +#: wp-admin/includes/class-core-upgrader.php:38 +msgid "Due to an error during updating, WordPress has rolled back to your previous version." +msgstr "På grund av ett fel vid uppdateringen så har WordPress återställts till din tidigare använda version." + +#: wp-admin/includes/update-core.php:971 +msgid "Preparing to install the latest version…" +msgstr "Förbereder installation av den senaste versionen…" + +#: wp-admin/includes/update-core.php:1041 +msgid "Copying the required files…" +msgstr "Kopierar nödvändiga filer…" + +#: wp-admin/includes/update-core.php:1093 +msgid "There is not enough free disk space to complete the update." +msgstr "Det finns inte tillräckligt med ledigt utrymme för att slutföra uppdateringen." + +#: wp-admin/includes/class-wp-site-health.php:1795 +msgid "Background updates" +msgstr "Uppdateringar i bakgrunden" + +#: wp-admin/includes/update-core.php:927 wp-admin/includes/update-core.php:1027 +#: wp-admin/includes/update-core.php:1052 +#: wp-admin/includes/class-core-upgrader.php:159 +#: wp-admin/includes/class-wp-upgrader.php:165 +msgid "The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions." +msgstr "Uppdateringen kan inte installeras eftersom vi inte kommer kunna kopiera vissa filer. Detta beror oftast på inkonsekventa filrättigheter." + +#. translators: 1: The HTTP response code. 2: The error message returned. +#. translators: 1: Error code, 2: Error message. +#: wp-admin/includes/class-wp-site-health.php:1684 +#: wp-admin/includes/class-wp-site-health.php:1966 +#: wp-admin/includes/class-wp-automatic-updater.php:955 +msgid "Error: [%1$s] %2$s" +msgstr "Fel: [%1$s] %2$s" + +#: wp-admin/includes/ms.php:1176 +msgid "Support Forums" +msgstr "Supportforum" + +#. translators: %s: user's display name +#: wp-admin/includes/post.php:1706 +msgid "%s is already editing this post. Do you want to take over?" +msgstr "%s redigerar redan detta inlägg. Vill du ta över?" + +#. translators: %s: user's display name +#: wp-admin/includes/post.php:1709 +msgid "%s is already editing this post." +msgstr "%s redigerar redan detta inlägg." + +#: wp-admin/includes/meta-boxes.php:121 +msgid "Edit status" +msgstr "Redigera status" + +#: wp-admin/includes/meta-boxes.php:171 +msgid "Edit visibility" +msgstr "Redigera synlighet" + +#: wp-admin/includes/meta-boxes.php:228 +msgid "Browse revisions" +msgstr "Bläddra bland versioner" + +#: wp-admin/includes/meta-boxes.php:238 wp-admin/edit-form-comment.php:118 +msgid "Edit date and time" +msgstr "Redigera datum och tid" + +#: wp-admin/includes/ms.php:976 wp-admin/users.php:310 +msgid "Delete all content." +msgstr "Radera allt innehåll." + +#: wp-admin/includes/ms.php:978 wp-admin/users.php:313 +msgid "Attribute all content to:" +msgstr "Associera allt innehåll till:" + +#: wp-admin/includes/class-wp-comments-list-table.php:381 +msgid "All comment types" +msgstr "Alla kommentarstyper" + +#: wp-admin/includes/media.php:3056 +msgid "Displayed on attachment pages." +msgstr "Visas på bilagssidan." + +#: wp-admin/includes/meta-boxes.php:705 wp-admin/includes/meta-boxes.php:766 +msgid "https://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments" +msgstr "https://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments" + +#: wp-admin/includes/options.php:132 +msgid "The character encoding of your site (UTF-8 is recommended)" +msgstr "Teckenkodningen för din webbplats (UTF-8 är rekommenderat)" + +#: wp-admin/includes/class-wp-screen.php:1188 +msgid "Number of items per page:" +msgstr "Antal poster per sida:" + +#: wp-admin/includes/ms.php:308 +msgid "Size in megabytes" +msgstr "Storlek i megabyte" + +#: wp-admin/includes/ms.php:305 +msgid "Site Upload Space Quota" +msgstr "Kvot för uppladdningsutrymme på webbplats" + +#. translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: +#. those are placeholders. +#: wp-admin/includes/misc.php:1243 +msgid "" +"Howdy ###USERNAME###,\n" +"\n" +"You recently requested to have the administration email address on\n" +"your site changed.\n" +"\n" +"If this is correct, please click on the following link to change it:\n" +"###ADMIN_URL###\n" +"\n" +"You can safely ignore and delete this email if you do not want to\n" +"take this action.\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej ###USERNAME###,\n" +"\n" +"Du efterfrågade nyligen en ändring av e-postadress för administration på\n" +"din webbplats.\n" +"\n" +"Om detta är korrekt, vänligen klicka på följande länka för att genomföra ändringen:\n" +"###ADMIN_URL###\n" +"\n" +"Du kan ignorera och radera detta meddelande om du inte vill genomföra denna\n" +"ändring.\n" +"\n" +"Det här e-postmeddelandet skickades till ###EMAIL###\n" +"\n" +"Mvh,\n" +"###SITENAME###\n" +"###SITEURL###" + +#. translators: column name or table row header +#: wp-admin/includes/class-wp-comments-list-table.php:459 +#: wp-admin/comment.php:176 +msgid "In Response To" +msgstr "Som svar till" + +#: wp-admin/includes/class-wp-terms-list-table.php:190 +msgctxt "Number/count of items" +msgid "Count" +msgstr "Antal" + +#: wp-admin/includes/revision.php:240 wp-admin/includes/revision.php:282 +msgctxt "revision date short format" +msgid "j M @ H:i" +msgstr "j M @ H:i" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:749 +msgid "Incompatible with your version of WordPress" +msgstr "Inkompatibelt med din version av WordPress" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:751 +msgid "Compatible with your version of WordPress" +msgstr "Kompatibelt med din version av WordPress" + +#: wp-admin/includes/class-wp-screen.php:1090 +msgctxt "Welcome panel" +msgid "Welcome" +msgstr "Välkommen" + +#: wp-admin/includes/class-wp-users-list-table.php:197 +msgctxt "users" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Alla (%s)" +msgstr[1] "Alla (%s)" + +#. translators: Localized Support reference. +#: wp-admin/includes/class-wp-site-health.php:1181 +msgid "https://wordpress.org/support" +msgstr "https://sv.wordpress.org/support" + +#: wp-admin/includes/upgrade.php:588 +msgid "" +"Your new WordPress site has been successfully set up at:\n" +"\n" +"%1$s\n" +"\n" +"You can log in to the administrator account with the following information:\n" +"\n" +"Username: %2$s\n" +"Password: %3$s\n" +"Log in here: %4$s\n" +"\n" +"We hope you enjoy your new site. Thanks!\n" +"\n" +"--The WordPress Team\n" +"https://wordpress.org/\n" +msgstr "" +"Din nya WordPress-webbplats har skapats på:\n" +"\n" +"%1$s\n" +"\n" +"Du kan logga in som administratör med följande information:\n" +"\n" +"Användarnamn: %2$s\n" +"Lösenord: %3$s\n" +"Logga in här: %4$s\n" +"\n" +"Vi hoppas att du kommer gilla din nya webbplats. Tack!\n" +"\n" +"--Teamet bakom WordPress\n" +"https://wordpress.org/\n" + +#: wp-admin/includes/class-wp-screen.php:967 +msgid "Enable full-height editor and distraction-free functionality." +msgstr "Aktivera fullhöjdsredigerare och distraktionsfri funktionalitet." + +#: wp-admin/includes/class-wp-comments-list-table.php:379 +msgid "Filter by comment type" +msgstr "Filtrera på kommentarstyp" + +#. translators: Publish box date format, see https://secure.php.net/date +#: wp-admin/includes/meta-boxes.php:198 wp-admin/includes/meta-boxes.php:369 +#: wp-admin/includes/revision.php:239 wp-admin/includes/revision.php:281 +#: wp-admin/edit-form-advanced.php:163 wp-admin/edit-form-comment.php:107 +msgid "M j, Y @ H:i" +msgstr "j M, Y @ H:i" + +#: wp-admin/includes/user.php:516 +msgid "You’re using the auto-generated password for your account. Would you like to change it?" +msgstr "Du använder det automatiskt genererade lösenordet för ditt konto. Vill du ändra det?" + +#: wp-admin/includes/meta-boxes.php:240 wp-admin/edit-form-comment.php:120 +msgid "Date and time" +msgstr "Datum och tid" + +#: wp-admin/includes/class-wp-users-list-table.php:527 +msgid "%s post by this author" +msgid_plural "%s posts by this author" +msgstr[0] "%s inlägg av denna författare" +msgstr[1] "%s inlägg av denna författare" + +#: wp-admin/includes/class-wp-comments-list-table.php:633 +msgid "Restore this comment from the spam" +msgstr "Avmarkera denna kommentar som skräppost" + +#. translators: %s: comment link +#: wp-admin/includes/class-wp-comments-list-table.php:712 +#: wp-admin/comment.php:194 +msgid "In reply to %s." +msgstr "Som svar till %s." + +#. translators: %s: all comments count +#: wp-admin/includes/class-wp-comments-list-table.php:221 +msgctxt "comments" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Alla (%s)" +msgstr[1] "Alla (%s)" + +#. translators: %s: pending comments count +#: wp-admin/includes/class-wp-comments-list-table.php:235 +msgctxt "comments" +msgid "Pending (%s)" +msgid_plural "Pending (%s)" +msgstr[0] "Väntande (%s)" +msgstr[1] "Väntande (%s)" + +#. translators: %s: approved comments count +#: wp-admin/includes/class-wp-comments-list-table.php:242 +msgctxt "comments" +msgid "Approved (%s)" +msgid_plural "Approved (%s)" +msgstr[0] "Godkänd (%s)" +msgstr[1] "Godkända (%s)" + +#. translators: %s: spam comments count +#: wp-admin/includes/class-wp-comments-list-table.php:249 +msgctxt "comments" +msgid "Spam (%s)" +msgid_plural "Spam (%s)" +msgstr[0] "Skräppost (%s)" +msgstr[1] "Skräpposter (%s)" + +#. translators: %s: trashed comments count +#: wp-admin/includes/class-wp-comments-list-table.php:256 +msgctxt "comments" +msgid "Trash (%s)" +msgid_plural "Trash (%s)" +msgstr[0] "Papperskorg (%s)" +msgstr[1] "Papperskorg (%s)" + +#: wp-admin/includes/class-wp-comments-list-table.php:462 +msgctxt "column name" +msgid "Submitted On" +msgstr "Postad" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:181 +msgid "Failed to initialize a SFTP subsystem session with the SSH2 Server %s" +msgstr "Det gick inte att initiera en SFTP subsystemssession med SSH2-servern %s" + +#: wp-admin/includes/class-wp-screen.php:738 +msgid "Filter items list" +msgstr "Filtrera lista med poster" + +#: wp-admin/includes/class-wp-screen.php:739 +msgid "Items list navigation" +msgstr "Navigation för postlista" + +#: wp-admin/includes/class-wp-screen.php:740 +msgid "Items list" +msgstr "Postlista" + +#: wp-admin/includes/class-wp-screen.php:965 +msgid "Additional settings" +msgstr "Ytterligare inställningar" + +#: wp-admin/includes/class-wp-screen.php:1074 +msgid "Boxes" +msgstr "Paneler" + +#: wp-admin/includes/class-wp-screen.php:1167 +msgid "%s column" +msgid_plural "%s columns" +msgstr[0] "%s kolumn" +msgstr[1] "%s kolumner" + +#: wp-admin/includes/class-wp-screen.php:1228 +msgid "Pagination" +msgstr "Sidindelning" + +#: wp-admin/includes/class-wp-screen.php:1282 +msgid "View Mode" +msgstr "Visningsläge" + +#: wp-admin/includes/class-wp-users-list-table.php:223 +msgid "No role" +msgstr "Ingen roll" + +#: wp-admin/includes/class-wp-users-list-table.php:588 +msgctxt "no user roles" +msgid "None" +msgstr "Ingen" + +#: wp-admin/includes/media.php:929 +msgid "Invalid image URL" +msgstr "Ogiltig bild-URL" + +#: wp-admin/includes/ms.php:905 +msgid "You have chosen to delete the user from all networks and sites." +msgstr "Du har valt att radera användaren från alla nätverk och webbplatser." + +#: wp-admin/includes/ms.php:907 +msgid "You have chosen to delete the following users from all networks and sites." +msgstr "Du har valt att radera följande användare från alla nätverk och webbplatser." + +#: wp-admin/includes/ms.php:924 +msgid "Warning! User %s cannot be deleted." +msgstr "Varning! Användaren %s kan inte raderas." + +#: wp-admin/includes/ms.php:928 +msgid "Warning! User cannot be deleted. The user %s is a network administrator." +msgstr "Varning! Användaren kan inte raderas. Användaren %s är nätverksadministratör." + +#. translators: user login +#: wp-admin/includes/ms.php:944 +msgid "What should be done with content owned by %s?" +msgstr "Vad ska göras med innehåll skapat av %s?" + +#: wp-admin/includes/ms.php:959 +msgid "Select a user" +msgstr "Välj en användare" + +#: wp-admin/includes/ms.php:974 +msgid "Site: %s" +msgstr "Webbplats:%s" + +#: wp-admin/includes/ms.php:987 +msgid "User has no sites or content and will be deleted." +msgstr "Användaren har inga webbplatser eller innehåll och kommer att raderas." + +#: wp-admin/includes/ms.php:1002 +msgid "Once you hit “Confirm Deletion”, the user will be permanently removed." +msgstr "När du trycker på knappen ”Bekräfta radering” så kommer användaren att raderas permanent." + +#: wp-admin/includes/ms.php:1004 +msgid "Once you hit “Confirm Deletion”, these users will be permanently removed." +msgstr "När du trycker på knappen ”Bekräfta radering” så kommer dessa användare att raderas permanent." + +#: wp-admin/includes/class-wp-site-health.php:880 +#: wp-admin/includes/class-wp-site-health.php:1486 +msgid "Warning" +msgstr "Varning" + +#: wp-admin/includes/post.php:1452 +msgid "Edit permalink" +msgstr "Redigera permalänk" + +#: wp-admin/includes/post.php:1747 +msgid "Saving revision…" +msgstr "Sparar version…" + +#. translators: %s: file name +#: wp-admin/includes/media.php:1608 +msgid "You are about to delete %s." +msgstr "Du är på väg att radera %s." + +#: wp-admin/includes/class-wp-comments-list-table.php:647 +#: wp-admin/includes/dashboard.php:651 +msgid "Edit this comment" +msgstr "Redigera denna kommentar" + +#: wp-admin/includes/class-wp-comments-list-table.php:651 +msgid "Quick edit this comment inline" +msgstr "Snabbredigera denna kommentar direkt" + +#. translators: %s: stream_get_contents() +#: wp-admin/includes/class-wp-filesystem-ssh2.php:77 +msgid "The ssh2 PHP extension is available, however, we require the PHP5 function %s" +msgstr "SSH2 PHP-tillägget är tillgängligt, men kräver PHP5-funktionen %s" + +#: wp-admin/includes/class-wp-media-list-table.php:137 +msgctxt "attachment filter" +msgid "Trash" +msgstr "Papperskorg" + +#. translators: %s: taxonomy term name +#. translators: %s: attachment title +#. translators: %s: post title +#: wp-admin/includes/class-wp-terms-list-table.php:400 +#: wp-admin/includes/class-wp-media-list-table.php:387 +#: wp-admin/includes/class-wp-posts-list-table.php:1014 +msgid "“%s” (Edit)" +msgstr "”%s” (Redigera)" + +#. translators: %s: title of the post the attachment is attached to +#: wp-admin/includes/class-wp-media-list-table.php:515 +msgid "Detach from “%s”" +msgstr "Ta bort som bifogad från ”%s”" + +#. translators: %s: attachment title +#: wp-admin/includes/class-wp-media-list-table.php:529 +#: wp-admin/includes/class-wp-media-list-table.php:707 +msgid "Attach “%s” to existing content" +msgstr "Bifoga ”%s” till existerande innehåll" + +#. translators: %s: attachment title +#. translators: %s: post title +#: wp-admin/includes/class-wp-media-list-table.php:679 +#: wp-admin/includes/class-wp-media-list-table.php:735 +#: wp-admin/includes/class-wp-posts-list-table.php:1360 +msgid "Move “%s” to the Trash" +msgstr "Flytta ”%s” till papperskorgen" + +#. translators: %s: attachment title +#. translators: %s: post title +#: wp-admin/includes/class-wp-media-list-table.php:689 +#: wp-admin/includes/class-wp-media-list-table.php:746 +#: wp-admin/includes/class-wp-posts-list-table.php:1369 +msgid "Delete “%s” permanently" +msgstr "Radera ”%s” permanent" + +#. translators: %s: attachment title +#. translators: %s: post title +#: wp-admin/includes/class-wp-media-list-table.php:727 +#: wp-admin/includes/class-wp-posts-list-table.php:1352 +msgid "Restore “%s” from the Trash" +msgstr "Äterställ ”%s” från papperskorgen" + +#. translators: %s: taxonomy term name +#. translators: %s: post title +#: wp-admin/includes/class-wp-terms-list-table.php:468 +#: wp-admin/includes/class-wp-posts-list-table.php:1340 +msgid "Quick edit “%s” inline" +msgstr "Snabbredigera ”%s” direkt" + +#. translators: %s: taxonomy term name +#: wp-admin/includes/class-wp-terms-list-table.php:477 +msgid "Delete “%s”" +msgstr "Radera ”%s”" + +#. translators: %s: taxonomy term name +#: wp-admin/includes/class-wp-terms-list-table.php:486 +msgid "View “%s” archive" +msgstr "Visa arkiv för ”%s”" + +#: wp-admin/includes/class-core-upgrader.php:30 +msgid "Another update is currently in progress." +msgstr "En annan uppdatering körs för närvarande." + +#: wp-admin/includes/post.php:1528 +msgid "Click the image to edit or update" +msgstr "Klicka på bilden för att redigera eller uppdatera" + +#. translators: %s: Codex URL +#: wp-admin/includes/meta-boxes.php:667 +msgid "Excerpts are optional hand-crafted summaries of your content that can be used in your theme. Learn more about manual excerpts." +msgstr "Utdrag är en handgjord valfri summering av innehållet som kan användas i temat. Lär dig mer om manuella utdrag." + +#. translators: %s: Codex URL +#: wp-admin/includes/meta-boxes.php:704 +msgid "Trackbacks are a way to notify legacy blog systems that you’ve linked to them. If you link other WordPress sites, they’ll be notified automatically using pingbacks, no other action necessary." +msgstr "Trackbacks är ett sätt att notifiera olika bloggsystem att du har länkat till dem. Ange URL(erna) du vill skicka trackbacks till. Om du länkar till andra WordPress-webbplatser så notifieras dessa automatiskt genom att använda pingbacks, då behöver inget anges i detta fält." + +#. translators: %s: Codex URL +#: wp-admin/includes/meta-boxes.php:741 +msgid "Custom fields can be used to add extra metadata to a post that you can use in your theme." +msgstr "Anpassade fält kan användas för att lägga till extra metadata som du sedan kan hämta via ditt tema." + +#: wp-admin/includes/meta-boxes.php:742 +msgid "https://codex.wordpress.org/Using_Custom_Fields" +msgstr "https://codex.wordpress.org/Using_Custom_Fields" + +#. translators: %s: Codex URL +#: wp-admin/includes/meta-boxes.php:765 +msgid "Allow trackbacks and pingbacks on this page" +msgstr "Tillåt trackbacks and pingar till den här sidan" + +#: wp-admin/includes/class-wp-media-list-table.php:499 +msgid "(Private post)" +msgstr "(Privat inlägg)" + +#: wp-admin/includes/meta-boxes.php:978 +msgid "Need help? Use the Help tab above the screen title." +msgstr "Behöver du hjälp? Använd fliken hjälp uppe till höger på sidan." + +#: wp-admin/includes/ms.php:1075 +msgid "Info" +msgstr "Info" + +#: wp-admin/includes/upgrade.php:252 +msgid "A WordPress Commenter" +msgstr "En kommentarsförfattare" + +#: wp-admin/includes/upgrade.php:255 +msgid "" +"Hi, this is a comment.\n" +"To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\n" +"Commenter avatars come from Gravatar." +msgstr "" +"Hej, Det här är en kommentar.\n" +"För att komma igång med moderering, redigering och radering av kommentarer, besök sidan för kommentarer i adminpanelen.\n" +"Kommentarsförfattares visningsbilder kommer från Gravatar." + +#: wp-admin/includes/import.php:184 +msgid "Import posts, comments, and users from a Blogger blog." +msgstr "Importera inlägg, kommentarer och användare från en Blogger-blogg." + +#: wp-admin/includes/import.php:190 +msgid "Convert existing categories to tags or tags to categories, selectively." +msgstr "Konvertera existerande kategorier till taggar eller taggar till kategorier, selektivt." + +#: wp-admin/includes/import.php:196 +msgid "Import posts from LiveJournal using their API." +msgstr "Importera inlägg från LiveJournal via dess API." + +#: wp-admin/includes/import.php:202 +msgid "Import posts and comments from a Movable Type or TypePad blog." +msgstr "Importera inlägg och kommentarer från en blogg av typen Movable Type eller TypePad." + +#: wp-admin/includes/import.php:208 +msgid "Import links in OPML format." +msgstr "Importera länkar i OPML-format." + +#: wp-admin/includes/import.php:214 +msgid "Import posts from an RSS feed." +msgstr "Importera inlägg från ett RSS-flöde." + +#: wp-admin/includes/import.php:220 +msgid "Import posts & media from Tumblr using their API." +msgstr "Importera inlägg & media från Tumblr via deras API." + +#: wp-admin/includes/import.php:226 +msgid "Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file." +msgstr "Importera inlägg, sidor, kommentarer, anpassade fält, kategorier och taggar från en WordPress-exporterad fil." + +#: wp-admin/includes/meta-boxes.php:125 +msgid "Set status" +msgstr "Ställ in status" + +#. translators: %d: numeric HTTP status code, e.g. 400, 403, 500, 504, etc. +#: wp-admin/includes/class-wp-community-events.php:117 +msgid "Invalid API response code (%d)" +msgstr "Ogiltigt svarskod från API (%d)" + +#: wp-admin/includes/class-wp-community-events.php:122 +msgid "Unknown API error." +msgstr "Okänt API-fel." + +#. translators: Date format for upcoming events on the dashboard. Include the +#. day of the week. See https://secure.php.net/date. +#: wp-admin/includes/class-wp-community-events.php:379 +msgid "l, M j, Y" +msgstr "D j M Y" + +#: wp-admin/includes/widgets.php:247 +msgid "Edit widget: %s" +msgstr "Redigera widget: %s" + +#: wp-admin/includes/class-wp-site-health.php:1182 +msgid "Get help resolving this issue." +msgstr "Be om hjälp att lösa detta problem." + +#. translators: Documentation explaining debugging in WordPress. +#: wp-admin/includes/class-wp-site-health.php:1219 +msgid "https://wordpress.org/support/article/debugging-in-wordpress/" +msgstr "https://wordpress.org/support/article/debugging-in-wordpress/" + +#: wp-admin/includes/class-wp-terms-list-table.php:527 +msgid "No description" +msgstr "Ingen beskrivning" + +#. translators: %s: author's display name +#: wp-admin/includes/class-wp-users-list-table.php:445 +msgid "View posts by %s" +msgstr "Visa inlägg av %s" + +#: wp-admin/includes/class-wp-users-list-table.php:514 +msgctxt "name" +msgid "Unknown" +msgstr "Okänt" + +#: wp-admin/includes/ms.php:1158 +msgid "The menu is for editing information specific to individual sites, particularly if the admin area of a site is unavailable." +msgstr "Denna meny avser redigering av information som specifik avser individuella webbplatser, i synnerhet om admin-sidorna för en webbplats inte går att nå." + +#: wp-admin/includes/ms.php:1159 +msgid "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." +msgstr "Info — Webbplatsens URL redigeras sällan då det kan leda till att webbplatsen inte fungerar som den ska. Här visas registreringsdatum och datum för senaste uppdatering. Nätverksadministratörer kan markera en webbplats som arkiverad, spam, raderad, riktiad till vuxen publik eller avlägsna webbplatsen från publika listor, alternativt inaktivera den." + +#: wp-admin/includes/ms.php:1160 +msgid "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." +msgstr "Användare — Detta visar användare som är förknippade med denna webbplats. Här kan du även ändra deras roller, återställa deras lösenord eller ta bort dem från webbplatsen. Att ta bort en användare från en webbplats tar inte bort honom eller henne från nätverket." + +#: wp-admin/includes/ms.php:1175 +msgid "Documentation on Site Management" +msgstr "Dokumentation om Webbplatshantering" + +#: wp-admin/includes/ms.php:1161 +msgid "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." +msgstr "Teman — Här visas teman som ännu inte är gjorts tillgängliga för hela nätverket. När man tillgängliggör ett tema i denna meny blir det tillgängligt för webbplatsen. Temat aktiveras inte, men kommer att kunna visas i webbplatsens menu för utseende. Se sidan Nätverksteman för att göra ett tema tillgängligt för hela nätverket." + +#: wp-admin/includes/ms.php:1162 +msgid "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." +msgstr "Inställningar — Denna sida visar en lista med alla inställningar som är förknippade med denna webbplats. Vissa skapas av WordPress och andra av tillägg som du har aktiverat. Notera att vissa fält visas i grått och är märkta ”Serialiserade data”. På grund av hur de är sparade i databasen kan du inte ändra dessa värden." + +#: wp-admin/includes/misc.php:342 wp-admin/includes/misc.php:431 +msgid "folder" +msgstr "mapp" + +#. translators: %s: URL to the Customizer +#: wp-admin/includes/meta-boxes.php:252 +msgid "This draft comes from your unpublished customization changes. You can edit, but there’s no need to publish now. It will be published automatically with those changes." +msgstr "Detta utkast avser dina ännu opublicerade förändringar i anpassaren. Du kan redigera dem, men är inte tvungen att publicera dem direkt. Förändringarna kommer att publiceras automatiskt med de förändringarna." + +#. translators: Attachment information. %s: Date the attachment was uploaded +#: wp-admin/includes/meta-boxes.php:374 +msgid "Uploaded on: %s" +msgstr "Uppladdad: %s" + +#: wp-admin/includes/user.php:608 wp-admin/includes/user.php:734 +msgid "Unable to initiate confirmation request." +msgstr "Det går inte att initiera en bekräftelsebegäran." + +#: wp-admin/includes/user.php:667 +msgid "Confirmation request sent again successfully." +msgstr "Begäran om bekräftelse har skickats igen." + +#: wp-admin/includes/user.php:706 +msgid "Unable to add this request. A valid email address or username must be supplied." +msgstr "Det går inte att lägga till denna beställning. Giltig e-postadress eller giltigt användarnamn måste anges." + +#: wp-admin/includes/user.php:745 +msgid "Confirmation request initiated successfully." +msgstr "Bekräftelsebegäran har initierats." + +#: wp-admin/includes/user.php:834 +msgid "Add Data Export Request" +msgstr "Lägg till beställning av dataexport" + +#: wp-admin/includes/user.php:835 wp-admin/includes/user.php:919 +msgid "An email will be sent to the user at this email address asking them to verify the request." +msgstr "Ett e-postmeddelande kommer att skickas till användaren med denna e-postadress med en begäran att bekräfta beställningen." + +#: wp-admin/includes/user.php:838 wp-admin/includes/user.php:922 +msgid "Username or email address" +msgstr "Användarnamn eller e-postadress" + +#: wp-admin/includes/user.php:840 wp-admin/includes/user.php:924 +msgid "Send Request" +msgstr "Skicka beställning" + +#: wp-admin/includes/user.php:1096 +msgid "Requester" +msgstr "Beställare" + +#: wp-admin/includes/user.php:1098 +msgid "Requested" +msgstr "Beställt" + +#: wp-admin/includes/user.php:1240 +msgid "Resend email" +msgstr "Skicka e-post igen" + +#. translators: %d: number of requests +#: wp-admin/includes/user.php:1271 +msgid "Deleted %d request" +msgid_plural "Deleted %d requests" +msgstr[0] "%d beställning har raderats" +msgstr[1] "%d beställningar har raderats" + +#. translators: %d: number of requests +#: wp-admin/includes/user.php:1288 +msgid "Re-sent %d request" +msgid_plural "Re-sent %d requests" +msgstr[0] "%d beställning har sänts igen" +msgstr[1] "%d beställningar har sänts igen" + +#: wp-admin/includes/user.php:1530 +msgid "Download Personal Data" +msgstr "Ladda ned personuppgifter" + +#: wp-admin/includes/user.php:1531 +msgid "Downloading Data..." +msgstr "Laddar ned data..." + +#: wp-admin/includes/user.php:1533 wp-admin/includes/user.php:1576 +#: wp-admin/includes/user.php:1582 wp-admin/includes/user.php:1654 +#: wp-admin/includes/user.php:1697 wp-admin/includes/user.php:1704 +msgid "Retry" +msgstr "Försök igen" + +#: wp-admin/includes/user.php:1556 wp-admin/includes/user.php:1678 +msgid "Waiting for confirmation" +msgstr "Väntar på bekräftelse" + +#: wp-admin/includes/user.php:1596 wp-admin/includes/user.php:1718 +msgid "Remove request" +msgstr "Ta bort begäran" + +#: wp-admin/includes/user.php:1652 +msgid "Force Erase Personal Data" +msgstr "Tvinga borttagning av personuppgifter" + +#: wp-admin/includes/user.php:1532 +msgid "Download Personal Data Again" +msgstr "Ladda ned personuppgifterna en gång till" + +#: wp-admin/includes/user.php:1574 +msgid "Sending Email..." +msgstr "Skickar e-post..." + +#: wp-admin/includes/user.php:1575 +msgid "Email sent." +msgstr "E-post har skickats." + +#: wp-admin/includes/misc.php:1734 +msgid "Copy suggested policy text from %s." +msgstr "Kopiera föreslagen policytext från %s." + +#. translators: Privacy Policy page slug +#: wp-admin/includes/upgrade.php:365 +msgid "privacy-policy" +msgstr "Integritetspolicy" + +#: wp-admin/includes/user.php:799 +msgid "Sorry, you are not allowed to export personal data on this site." +msgstr "Du saknar behörighet att exportera personuppgifter från denna webbplats." + +#: wp-admin/includes/user.php:882 +msgid "Sorry, you are not allowed to erase data on this site." +msgstr "Du saknar behörighet att radera data på denna webbplats." + +#: wp-admin/includes/user.php:1576 +msgid "Email could not be sent." +msgstr "Det gick inte att skicka e-post." + +#: wp-admin/includes/user.php:1654 +msgid "Force Erase has failed." +msgstr "Tvingad borttagning misslyckades." + +#: wp-admin/includes/user.php:1697 +msgid "Erasing Data has failed." +msgstr "Borttagning av data misslyckades." + +#: wp-admin/includes/misc.php:1758 +msgid "Hello," +msgstr "Hej," + +#: wp-admin/includes/misc.php:1759 +msgid "This text template will help you to create your web site’s privacy policy." +msgstr "Denna textmall kommer att hjälpa er skapa en integritetspolicy för er webbplats." + +#: wp-admin/includes/misc.php:1761 +msgid "Please edit your privacy policy content, making sure to delete the summaries, and adding any information from your theme and plugins. Once you publish your policy page, remember to add it to your navigation menu." +msgstr "Redigera innehåller i er integritetspolicy och se till att radera sammanfattningarna och lägga till all tillämplig information från era teman och tillägg. När ni har publicerat sidan med er policy måste ni komma ihåg att lägga till den i er navigeringsmeny." + +#: wp-admin/includes/misc.php:1762 +msgid "It is your responsibility to write a comprehensive privacy policy, to make sure it reflects all national and international legal requirements on privacy, and to keep your policy current and accurate." +msgstr "Det är ert ansvar att skriva en heltäckande integritetspolicy, se till att den uppfyller alla nationella och internationella lagkrav avseende integritet och att hålla er integritetspolicy uppdaterad och korrekt." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1793 +msgid "Who we are" +msgstr "Vilka vi är" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1797 +msgid "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." +msgstr "I denna sektion bör ni ange adressen för er webbplats samt namnet på det företag, den organisation eller person som står för webbplatsen och någon korrekt kontaktinformation." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1799 +msgid "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." +msgstr "Hur mycket information ni kan behöva visa kan variera beroende på lokala och nationella affärslagar. Ni kanske är tvungna att visa en fysisk besöksadress, en juridisk adress eller ert företags registreringsnummer." + +#. translators: default privacy policy text, %s Site URL. +#: wp-admin/includes/misc.php:1803 +msgid "Our website address is: %s." +msgstr "Vår webbplatsadress är: %s." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1806 +msgid "What personal data we collect and why we collect it" +msgstr "Vilka personuppgifter vi samlar in och varför vi samlar in dem" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1812 +msgid "You should also note any collection and retention of sensitive personal data, such as data concerning health." +msgstr "Ni ska också ange all insamling och lagring av känsliga personuppgifter, såsom t.ex. hälsouppgifter." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1814 +msgid "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." +msgstr "Dessutom, utöver att räkna upp vilka personuppgifter ni samlar in, behöver ni ange varför ni samlar in dem. Dessa förklaringar behöver ange antingen den lagliga grunden för er datainsamling och -lagring eller att aktivt samtycke har erhållits från användaren." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1816 +msgid "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." +msgstr "Personuppgifter skapas inte enbart genom att användare interagerar med er webbplats. Personuppgifter genereras även av tekniska processer, såsom kontaktformulär, kommentarer, cookie-filer, analysverktyg och inbäddat innehåll från tredje part." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1818 +msgid "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." +msgstr "Som standard samlar WordPress inte in några personuppgifter om besökare och samlar endast in de uppgifter som visas på skärmen för användaruppgifter för registrerade användare. Men vissa av era tillägg kan också samla in uppgifter. Lägg till relevant information nedan." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1843 +msgid "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." +msgstr "Om du laddar upp bilder till webbplatsen bör du undvika att ladda upp bilder där EXIF-data inkluderar data från GPS-lokalisering. Besökare till webbplatsen kan ladda ned och ta fram alla positioneringsuppgifter från bilder på webbplatsen." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1846 +msgid "Contact forms" +msgstr "Kontaktformulär" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1850 +msgid "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." +msgstr "Som standard innehåller WordPress inget kontaktformulär. Om ni använder ett tillägg för kontaktformulär bör ni i denna undersektion ange vilka personuppgifter som samlas in när någon skickar in ett kontaktformulär och hur länge dessa uppgifter sparas. Ni kan till exempel ange att ni sparar uppgifter från kontaktformulär en viss tid för kundtjänständamål, men att den insamlade informationen inte används för marknadsföring." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1830 +msgid "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." +msgstr "När besökare lämnar kommentarer på webbplatsen samlar vi in de uppgifter som visas i kommentarsformuläret samt besökarens ip-adress och user agent-sträng som hjälp för detektering av skräpmeddelanden." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1832 +msgid "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." +msgstr "En anonymiserad sträng som skapats utifrån din e-postadress (även kallat hash-värde) kan komma att sändas till tjänsten Gravatar för att avgöra om du finns registrerad där. Integritetspolicyn för tjänsten Gravatar finns på https://automattic.com/privacy/. När din kommentar har godkänts kommer din profilbild att visas publikt tillsammans med din kommentar." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1854 +msgid "Cookies" +msgstr "Cookie-filer" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1858 +msgid "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." +msgstr "I denna undersektion bör du räkna upp vilka cookie-filer din webbplats använder, inklusive dem som skapas av dina tillägg, sociala media och analysverktyg. Vi tillhandahåller de cookie-filer som WordPress installerar som standard." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1862 +msgid "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." +msgstr "Om du lämnar en kommentar på vår webbplats kan du välja att spara ditt namn, din e-postadress och webbplatsadress i cookie-filer. Detta är för din bekvämlighet för att du inte ska behöva fylla i dessa uppgifter igen nästa gång du skriver en kommentar. Dessa cookie-filer gäller i ett år." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1864 +msgid "If you visit our login page, 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." +msgstr "Om du besöker vår inloggningssida kommer vi att sätta en tillfällig cookie för att undersöka om din webbläsare accepterar dem. Denna cookie innehåller inga personuppgifter och den försvinner när du stänger din webbläsare." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1866 +msgid "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." +msgstr "När du loggar in kommer vi dessutom att skapa flera cookie-filer för att spara information om din inloggning och dina val för utformning av skärmlayouten. Cookie-filer för inloggning gäller i två dagar och cookie-filer för layoutval gäller i ett år. Om du kryssar i ”Kom ihåg mig” kommer din cookie att finnas kvar i två veckor. Om du loggar ut från ditt konto kommer cookie-filerna för inloggning att tas bort." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1868 +msgid "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." +msgstr "Om du redigerar eller publicerar en artikel kommer en extra cookie-fil att sparas i din webbläsare. Denna cookie-fil innehåller inga personuppgifter utan anger endast inläggs-ID för den artikel du just redigerade. Den gäller under 1 dygn." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1871 +msgid "Embedded content from other websites" +msgstr "Inbäddad innehåll från andra webbplatser" + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1873 +msgid "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." +msgstr "Artiklar på denna webbplats kan innehålla inbäddat innehåll (exempelvis videoklipp, bilder, artiklar o.s.v.). Inbäddat innehåll från andra webbplatser beter sig precis på samma sätt som om besökaren har besökt den andra webbplatsen." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1875 +msgid "These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website." +msgstr "Dessa webbplatser kan samla in uppgifter om dig, använda cookie-filer, bädda in ytterligare spårning från tredje part och övervaka din interaktion med sagda inbäddade innehåll, inklusive spårning av din interaktion med detta inbäddade innehåll om du har ett konto och är inloggad på webbplatsen i fråga." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1878 +msgid "Analytics" +msgstr "Analys" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1884 +msgid "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." +msgstr "Som standard samlar WordPress inte in någon information för analys. Men många webbservrar samlar in viss anonym analysinformation. Ni kanske också har installerat något WordPress-tillägg som tillhandahåller analystjänster. I så fall behöver information från det tillägget läggas till här." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1888 +msgid "Who we share your data with" +msgstr "Vilka vi delar dina data med" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1892 +msgid "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." +msgstr "I denna sektion bör ni ange och räkna upp alla tredjepartsleverantörer, med vilka ni delar data från webbplatsen, inklusive partner, molnbaserade tjänster, betalningshanterare och tredjepartsleverantörer av tjänster, samt uppge vilka uppgifter ni delar med dem och för vilket ändamål. Länka till deras egna integritetspolicyer där så är möjligt." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1894 +msgid "By default WordPress does not share any personal data with anyone." +msgstr "Som standard delar inte WordPress några personliga uppgifter med någon." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1898 +msgid "How long we retain your data" +msgstr "Hur länge vi behåller era uppgifter" + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1906 +msgid "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." +msgstr "Om du skriver en kommentar kommer kommentaren och dess metadata att sparas utan tidsgräns. Anledningen till detta är att vi behöver kunna hitta och godkänna uppföljningskommentarer automatiskt och inte lägga dem i kö för granskning." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1911 +msgid "What rights you have over your data" +msgstr "Vilka rättigheter du har över dina data" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1915 +msgid "In this section you should explain what rights your users have over their data and how they can invoke those rights." +msgstr "I denna sektion bör du förklara vilka rättigheter dina användare har avseende sina uppgifter och hur de kan hävda dessa rättigheter." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1902 +msgid "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." +msgstr "I denna sektion bör ni förklara hur länge personuppgifter som samlats in eller bearbetas av er webbplats sparas. Även om det är ert ansvar att upprätta ett schema för hur länge varje typ av uppgift sparas och för vilket ändamål, behöver denna information listas här. Ni kan, till exempel, ange att ni behåller uppgifter från kontaktformulär i sex månader, analysposter i ett år och inköpsdata för kunder i tio år." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1908 +msgid "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." +msgstr "För användare som registrerar sig på er webbplats (om sådana finns) sparar vi även de personuppgifter de anger i sin användarprofil. Alla användare kan se, redigera eller radera sina personuppgifter när som helst (med undantaget att de inte kan ändra sitt användarnamn). Även webbplatsens administratörer kan se och redigera denna information." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1919 +msgid "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." +msgstr "Om du har ett konto eller har skrivit några kommentarer på denna webbplats kan du begära en exportfil med de personuppgifter vi har om dig, inklusive alla uppgifter du har gett oss. Du kan också begära att vi tar bort alla personuppgifter vi har om dig. Detta omfattar inte eventuella uppgifter som vi är tvungna att spara av administrativa, legala eller säkerhetsändamål." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1922 +msgid "Where we send your data" +msgstr "Vart vi skickar dina upgifter" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1926 +msgid "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." +msgstr "I denna sektion bör ni räkna upp all dataöverföring av information utanför Europeiska Unionen och beskriva på vilket sätt dessa uppgifter skyddas till samma nivå som Europeiskt dataskydd kräver. Detta kan omfatta ert webbhotell, datalagring i molnet eller andra tredjepartstjänster." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1928 +msgid "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." +msgstr "Den europeiska dataskyddsförordningen kräver att uppgifter om boende i Europa, som skickas utanför Europeiska Unionen ska skyddas på samma sätt som om informationen fanns kvar i Europa. Därför, utöver att räkna upp vart informationen skickas bör ni beskriva hur ni säkerställer att dessa standarder uppfylls av antingen er eller era tredjepartsleverantörer, och om detta regleras i ett avtal, såsom Privacy Shield, standardvillkor i era kontrakt eller obligatoriska koncernregler." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1935 +msgid "Your contact information" +msgstr "Din kontaktinformation" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1939 +msgid "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." +msgstr "I denna sektion bör ni uppge en kontaktväg för integritetsfrågor. Om ni är tvungna att ha ett dataskyddsombud ska dennes namn och fullständiga kontaktuppgifter också anges här." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1943 +msgid "Additional information" +msgstr "Ytterligare information" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1947 +msgid "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." +msgstr "Om ni använder webbplatsen för kommersiella ändamål och genomför mer omfattande insamling eller bearbetning av personuppgifter bör ni inkludera följande information i er integritetsinformation utöver den information som redan diskuterats." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1951 +msgid "How we protect your data" +msgstr "Hur vi skyddar din information" + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1959 +msgid "What data breach procedures we have in place" +msgstr "Vilka procedurer vi har för dataläckor" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1955 +msgid "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." +msgstr "I denna sektion bör ni förklara vilka åtgärder som vidtagits för att skydda användarnas information. Det kan omfatta tekniska åtgärder, såsom kryptering, säkerhetsåtgärder, såsom tvåfaktorsautenticering och mänskliga åtgärder, såsom utbildning av personalen kring dataintegritet. Om ni har genomfört en utvärdering av påverkan från integritetsfrågor kan ni även nämna det här." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1963 +msgid "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." +msgstr "I denna sektion bör ni förklara vilka procedurer ni har skapat för hantering av dataläckor, potentiella eller faktiska, såsom interna rapportsystem, kontaktvägar och belöningar för hittade programfel." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1967 +msgid "What third parties we receive data from" +msgstr "Från vilka utomstående parter vi tar emot data" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1971 +msgid "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." +msgstr "Om er webbplats data om användare från tredje part, inklusive annonsörer, måste information om detta inkluderas i sektionen om data från tredje part i er integritetspolicy." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1975 +msgid "What automated decision making and/or profiling we do with user data" +msgstr "Vilket automatiserat beslutsfattande och/eller profilskapande vi gör med våra användaruppgifter" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1979 +msgid "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." +msgstr "Om er webbplats erbjuder en tjänst som omfattar automatiskt beslutsfattande – exempelvis låter kunder ansöka om kredit eller samlar in uppgifter om kunden till en annonseringsprofil – måste ni berätta att detta sker och inkludera information om hur denna information används, vilka beslut som fattas utifrån de insamlade uppgifterna och vilka rättigheter användare har med avseende på de beslut som tas utan mänsklig inblandning." + +#. translators: default privacy policy heading. +#: wp-admin/includes/misc.php:1983 +msgid "Industry regulatory disclosure requirements" +msgstr " Branschkrav om delgivning av information" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1987 +msgid "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." +msgstr "Om ni verkar inom en reglerad bransch eller om ni lyder under ytterligare integritetslagar kan det krävas att ni uppger den informationen här." + +#: wp-admin/includes/user.php:1573 +msgid "Send Export Link" +msgstr "Skicka länk för dataexport" + +#: wp-admin/includes/user.php:918 +msgid "Add Data Erasure Request" +msgstr "Lägg till begäran att ta bort data" + +#: wp-admin/includes/user.php:1653 wp-admin/includes/user.php:1696 +msgid "Erasing Data..." +msgstr "Tar bort data..." + +#: wp-admin/includes/user.php:1003 +msgid "Invalid request ID when processing eraser data." +msgstr "Vid behandling borttagarens data var ID för begäran ogiltigt." + +#: wp-admin/includes/misc.php:1643 +msgid "Need help putting together your new Privacy Policy page? Check out our guide for recommendations on what content to include, along with policies suggested by your plugins and theme." +msgstr "Behöver du hjälp att sammanställa din nya sida med integritetspolicy? Kolla in vår guide med rekommendationer om vilket innehåll du behöver inkludera, inklusive policytexter from rekommenderas av dina tillägg och teman." + +#: wp-admin/includes/misc.php:1692 wp-admin/includes/misc.php:1757 +msgid "Introduction" +msgstr "Introduktion" + +#: wp-admin/includes/misc.php:1703 +msgid "Removed %s." +msgstr "Tog bort %s" + +#: wp-admin/includes/misc.php:1705 +msgid "You deactivated this plugin on %s and may no longer need this policy." +msgstr "Du inaktiverade detta tillägg den %s och kanske inte längre behöver denna policy." + +#: wp-admin/includes/misc.php:1710 +msgid "Updated %s." +msgstr "Uppdaterades %s" + +#. translators: %s: plugin name +#: wp-admin/includes/misc.php:1724 +msgid "Source: %s" +msgstr "Källa: %s" + +#: wp-admin/includes/misc.php:1760 +msgid "We have suggested the sections you will need. Under each section heading you will find a short summary of what information you should provide, which will help you to get started. Some sections include suggested policy content, others will have to be completed with information from your theme and plugins." +msgstr "Vi har föreslagit vilka sektioner du kommer att behöva. Under rubriken för varje sektion finns en kort sammanfattning av vilken information du bör uppge, som en hjälp för att komma igång. Vissa sektioner innehåller förslag på innehåll i policyn medan andra behöver kompletteras med information från era teman och tillägg." + +#: wp-admin/includes/misc.php:1783 +msgid "Suggested text:" +msgstr "Föreslagen text:" + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1810 +msgid "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." +msgstr "I denna sektion bör ni uppge vilka personuppgifter ni samlar in från användare och webbplatsbesökare. Det kan omfatta personuppgifter, såsom namn, e-postadress, personliga val i kontot, transaktionsuppgifter, såsom inköpsinformation och tekniska uppgifter, såsom information om cookie-filer." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1826 +msgid "In this subsection you should note what information is captured through comments. We have noted the data which WordPress collects by default." +msgstr "I denna delsektion bör ni uppge vilken information som hämtas in via kommentarer. Vi har uppgett vilka uppgifter WordPress som standard samlar in." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1839 +msgid "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." +msgstr "I denna delsektion bör ni uppge vilken information som kan bli tillgänglig om användare som kan ladda upp mediafiler. Alla uppladdade filer är normalt publikt åtkomliga." + +#. translators: privacy policy tutorial. +#: wp-admin/includes/misc.php:1882 +msgid "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." +msgstr "I denna delsektion bör ni uppge vilken lösning ni använder för trafikanalys, hur användare kan frånsäga sig spårning för analysändamål samt i förekommande fall länka till integritetspolicyn för leverantören av ert lösning för analyser." + +#. translators: default privacy policy text. +#: wp-admin/includes/misc.php:1932 +msgid "Visitor comments may be checked through an automated spam detection service." +msgstr "Kommentarer från besökare kanske kontrolleras via en automatiserad tjänst för detektering av skräppost." + +#. translators: %s: Privacy Policy Guide URL +#: wp-admin/includes/misc.php:1461 +msgid "The suggested privacy policy text has changed. Please review the guide and update your privacy policy." +msgstr "Den föreslagna texten för integritetspolicy har ändrats. Vi föreslår att du granskar guiden och uppdaterar din integritetspolicy." + +#. translators: %s: Page Title +#: wp-admin/includes/misc.php:1315 +msgid "%s (Draft)" +msgstr "%s (utkast)" + +#: wp-admin/includes/upgrade.php:363 wp-admin/privacy.php:63 +msgid "Privacy Policy" +msgstr "Integritetspolicy" + +#. translators: first post content, %s: site link +#: wp-admin/includes/upgrade.php:212 +msgid "Welcome to WordPress. This is your first post. Edit or delete it, then start writing!" +msgstr "Välkommen till WordPress. Detta är ditt första inlägg. Du kan redigera det eller ta bort det. Sedan är det bara att börja skriva!" + +#. translators: first page content +#: wp-admin/includes/upgrade.php:281 +msgid "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:" +msgstr "Detta är en exempelsida. Den skiljer sig från ett blogginlägg genom att den finns kvar på samma plats och kommer att visas i din webbplatsnavigering (i de flesta teman). De flesta börjar med en Om-sida som presenterar dem för potentiella besökare. Den skulle t.ex kunna ha följande innehåll:" + +#. translators: first page content +#: wp-admin/includes/upgrade.php:286 +msgid "Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)" +msgstr "Hej där! Jag är cykelbud på dagen, blivande skådespelare på natten och detta är min blogg. Jag bor i Örebro, har en katt som heter Lurv och jag gillar Pina Coladas. (och att simma i Göta kanal)." + +#. translators: first page content +#: wp-admin/includes/upgrade.php:291 +msgid "...or something like this:" +msgstr "... eller något liknande detta:" + +#. translators: first page content +#: wp-admin/includes/upgrade.php:296 +msgid "The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community." +msgstr "Företaget AB grundades 1971 och har sedan dess varit den största leverantören av grunk-manicker på den svenska marknaden. FAB finns i utkanten av Grönköping, har drygt 20 000 anställda och läser veckobladet varje år." + +#. translators: first page content, %s: site admin URL +#: wp-admin/includes/upgrade.php:302 +msgid "As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!" +msgstr "Som ny WordPress-användare bör du gå till din adminpanel för att radera denna sida och skapa nya sidor för ditt innehåll. Lycka till!" + +#: wp-admin/includes/class-wp-screen.php:285 wp-admin/post.php:20 +msgid "A post ID mismatch has been detected." +msgstr "Inläggs-ID stämmer inte överens." + +#: wp-admin/includes/schema.php:1230 +msgid "My Network" +msgstr "Mitt nätverk" + +#: wp-admin/includes/misc.php:1694 +msgid "Copy this section to clipboard" +msgstr "Kopiera denna sektion till urklipp" + +#. translators: Audio file track information. %s: Audio track number +#: wp-admin/includes/media.php:362 +msgid "Track %s." +msgstr "Spår %s." + +#. translators: %s: widgets sidebar name. +#: wp-admin/includes/widgets.php:95 +msgid "Add to: %s" +msgstr "Lägg till i: %s" + +#: wp-admin/includes/widgets.php:248 +msgid "Add widget: %s" +msgstr "Lägg till widget: %s" + +#: wp-admin/includes/class-wp-site-health.php:657 +#: wp-admin/includes/dashboard.php:1638 +msgid "Learn more about updating PHP" +msgstr "Lär dig mer om hur du uppdaterar PHP" + +#. translators: %s: all requests count +#: wp-admin/includes/user.php:1189 +msgctxt "requests" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Endast (%s)" +msgstr[1] "Alla (%d)" + +#. translators: %s: Your current version of WordPress. +#: wp-admin/includes/class-wp-site-health.php:199 +msgid "WordPress version %s" +msgstr "WordPress-version %s" + +#: wp-admin/includes/class-wp-site-health.php:205 +msgid "We were unable to check if any new versions of WordPress are available." +msgstr "Vi lyckades inte kontrollera om det finns nya versioner av WordPress." + +#: wp-admin/includes/class-wp-site-health.php:211 +msgid "Check for updates manually" +msgstr "Kontrollera uppdateringar manuellt" + +#. translators: %s: The latest version of WordPress available. +#: wp-admin/includes/class-wp-site-health.php:224 +msgid "WordPress update available (%s)" +msgstr "WordPress-uppdatering tillgänglig (%s)" + +#: wp-admin/includes/class-wp-site-health.php:231 +msgid "Install the latest version of WordPress" +msgstr "Installera den senaste versionen av WordPress." + +#: wp-admin/includes/class-wp-site-health.php:239 +msgid "A new version of WordPress is available." +msgstr "En ny version av WordPress är tillgänglig." + +#: wp-admin/includes/class-wp-site-health.php:247 +msgid "A new minor update is available for your site. Because minor updates often address security, it’s important to install them." +msgstr "Det finns en mindre uppdatering för din webbplats. Eftersom mindre uppdateringar ofta löser säkerhetsproblem är det viktigt att installera dem." + +#. translators: %s: The current version of WordPress installed on this site. +#: wp-admin/includes/class-wp-site-health.php:254 +msgid "Your WordPress version is up to date (%s)" +msgstr "Din WordPress-version är uppdaterad (%s)" + +#: wp-admin/includes/class-wp-site-health.php:260 +msgid "You are currently running the latest version of WordPress available, keep it up!" +msgstr "Just nu använder du den senaste versionen av WordPress. Fortsätt så!" + +#: wp-admin/includes/class-wp-site-health.php:280 +msgid "Your plugins are up to date" +msgstr "Dina tillägg är uppdaterade" + +#: wp-admin/includes/class-wp-site-health.php:288 +msgid "Plugins extend your site’s functionality with things like contact forms, ecommerce and much more. That means they have deep access to your site, so it’s vital to keep them up to date." +msgstr "Tillägg utökar funktionaliteten hos din webbplats med sådana saker som kontaktformulär, e-handel och mycket annat. Det innebär att de har djup åtkomst till din webbplats. Därför är det viktigt att hålla dem uppdaterade." + +#: wp-admin/includes/class-wp-site-health.php:326 +msgid "You have plugins waiting to be updated" +msgstr "Du har tillägg som väntar på att uppdateras" + +#. translators: %d: The number of outdated plugins. +#: wp-admin/includes/class-wp-site-health.php:332 +msgid "Your site has %d plugin waiting to be updated." +msgid_plural "Your site has %d plugins waiting to be updated." +msgstr[0] "Din webbplats har %d tillägg som väntar på att uppdateras." +msgstr[1] "Din webbplats har %d tillägg som väntar på att uppdateras." + +#. translators: %d: The number of active plugins. +#: wp-admin/includes/class-wp-site-health.php:357 +msgid "Your site has %d active plugin, and it is up to date." +msgid_plural "Your site has %d active plugins, and they are all up to date." +msgstr[0] "Din webbplats har %d aktivt tillägg och det är uppdaterat." +msgstr[1] "Din webbplats har %d aktiva tillägg och de är alla uppdaterade." + +#: wp-admin/includes/class-wp-site-health.php:412 +msgid "Your themes are up to date" +msgstr "Dina teman är uppdaterade" + +#: wp-admin/includes/class-wp-site-health.php:420 +msgid "Themes add your site’s look and feel. It’s important to keep them up to date, to stay consistent with your brand and keep your site secure." +msgstr "Teman formar utseendet och känslan hos din webbplats. Det är viktigt att hålla dem uppdaterade för att stödja ert varumärke och hålla webbplatsen säker." + +#: wp-admin/includes/class-wp-site-health.php:487 +msgid "You have themes waiting to be updated" +msgstr "Du har teman som behöver uppdateras" + +#. translators: %d: The number of outdated themes. +#: wp-admin/includes/class-wp-site-health.php:493 +msgid "Your site has %d theme waiting to be updated." +msgid_plural "Your site has %d themes waiting to be updated." +msgstr[0] "Din webbplats har %d tema som väntar på att uppdateras." +msgstr[1] "Din webbplats har %d teman som väntar på att uppdateras." + +#. translators: %d: The number of themes. +#: wp-admin/includes/class-wp-site-health.php:513 +msgid "Your site has %d installed theme, and it is up to date." +msgid_plural "Your site has %d installed themes, and they are all up to date." +msgstr[0] "Din webbplats har %d installerat tema, och det är uppdaterat." +msgstr[1] "Din webbplats har %d installerade teman, och alla är uppdaterade." + +#: wp-admin/includes/class-wp-site-health.php:374 +msgid "You should remove inactive plugins" +msgstr "Du bör ta bort inaktiva tillägg" + +#. translators: %d: The number of inactive plugins. +#: wp-admin/includes/class-wp-site-health.php:380 +msgid "Your site has %d inactive plugin." +msgid_plural "Your site has %d inactive plugins." +msgstr[0] "Din webbplats har %d inaktivt tillägg." +msgstr[1] "Din webbplats har %d inaktiva tillägg." + +#. translators: 1: The currently active theme. 2: The active theme's parent +#. theme. +#: wp-admin/includes/class-wp-site-health.php:547 +msgid "To enhance your site’s security, we recommend you remove any themes you’re not using. You should keep your current theme, %1$s, and %2$s, its parent theme." +msgstr "För att höja säkerheten för din webbplats rekommenderar vi att du tar bort alla teman du inte använder. Du bör behålla %1$s – ditt aktuella tema och %2$s – dess huvudtema." + +#. translators: 1: The default theme for WordPress. 2: The currently active +#. theme. 3: The active theme's parent theme. +#: wp-admin/includes/class-wp-site-health.php:566 +msgid "To enhance your site’s security, we recommend you remove any themes you’re not using. You should keep %1$s, the default WordPress theme, %2$s, your current theme, and %3$s, its parent theme." +msgstr "För att höja säkerheten för din webbplats rekommenderar vi att du tar bort alla teman du inte använder. Du bör behålla %1$s – WordPress standardtema, %2$s – ditt aktuella tema och %3$s – dess huvudtema." + +#. translators: 1: The amount of inactive themes. 2: The currently active +#. theme. +#: wp-admin/includes/class-wp-site-health.php:584 +msgid "Your site has %1$d inactive theme, other than %2$s, your active theme." +msgid_plural "Your site has %1$d inactive themes, other than %2$s, your active theme." +msgstr[0] "Din webbplats har %1$d inaktivt tema, utöver %2$s – ditt aktiva tema." +msgstr[1] "Din webbplats har %1$d inaktiva teman, utöver %2$s – ditt aktiva tema." + +#: wp-admin/includes/class-wp-site-health.php:618 +msgid "Have a default theme available" +msgstr "Se till att ha ett standardtema tillgängligt" + +#: wp-admin/includes/class-wp-site-health.php:622 +msgid "Your site does not have any default theme. Default themes are used by WordPress automatically if anything is wrong with your normal theme." +msgstr "Din webbplats har inget standardtema. WordPress använder automatiskt standardteman om något är fel med ditt vanliga tema." + +#. translators: %s: The current PHP version. +#: wp-admin/includes/class-wp-site-health.php:642 +msgid "PHP is up to date (%s)" +msgstr "PHP är uppdaterat (%s)" + +#: wp-admin/includes/class-wp-site-health.php:671 +msgid "We recommend that you update PHP" +msgstr "Vi rekommenderar att du uppdaterar PHP" + +#: wp-admin/includes/class-wp-site-health.php:679 +msgid "Your PHP version should be updated" +msgstr "Din PHP-version bör uppdateras" + +#: wp-admin/includes/class-wp-site-health.php:686 +msgid "Your PHP version requires an update" +msgstr "Din PHP-version behöver uppdateras" + +#: wp-admin/includes/class-wp-site-health.php:733 +msgid "Required and recommended modules are installed" +msgstr "Obligatoriska och rekommenderade moduler är installerade" + +#: wp-admin/includes/class-wp-site-health.php:872 +#: wp-admin/includes/class-wp-site-health.php:1168 +#: wp-admin/includes/class-wp-site-health.php:1478 +msgid "Error" +msgstr "Fel" + +#. translators: %s: The module name. +#: wp-admin/includes/class-wp-site-health.php:875 +msgid "The required module, %s, is not installed, or has been disabled." +msgstr "Den nödvändiga modulen %s är inte installerad eller är inaktiverad." + +#. translators: %s: The module name. +#: wp-admin/includes/class-wp-site-health.php:883 +msgid "The optional module, %s, is not installed, or has been disabled." +msgstr "Den valfria modulen %s är inte installerad eller är inaktiverad." + +#: wp-admin/includes/class-wp-site-health.php:911 +msgid "One or more recommended modules are missing" +msgstr "En eller flera rekommenderade moduler saknas" + +#: wp-admin/includes/class-wp-site-health.php:914 +msgid "One or more required modules are missing" +msgstr "En eller flera nödvändiga moduler saknas" + +#: wp-admin/includes/class-wp-site-health.php:935 +msgid "SQL server is up to date" +msgstr "SQL-servern är uppdaterad" + +#: wp-admin/includes/class-wp-site-health.php:961 +msgid "Outdated SQL server" +msgstr "Föråldrad SQL-server" + +#. translators: 1: The database engine in use (MySQL or MariaDB). 2: Database +#. server recommended version number. +#: wp-admin/includes/class-wp-site-health.php:967 +msgid "For optimal performance and security reasons, we recommend running %1$s version %2$s or higher. Contact your web hosting company to correct this." +msgstr "För optimala prestanda och av säkerhetskä rekommenderar vi att man använder %1$s version %2$s eller senare. Kontakta ditt webbhotell för att korrigera detta." + +#: wp-admin/includes/class-wp-site-health.php:977 +msgid "Severely outdated SQL server" +msgstr "SQL-servern är kraftigt föråldrad" + +#. translators: 1: The database engine in use (MySQL or MariaDB). 2: Database +#. server minimum version number. +#: wp-admin/includes/class-wp-site-health.php:984 +msgid "WordPress requires %1$s version %2$s or higher. Contact your web hosting company to correct this." +msgstr "WordPress kräver %1$s version %2$s eller senare. Kontakta ditt webbhotell för att korrigera detta." + +#: wp-admin/includes/class-wp-site-health.php:1022 +msgid "UTF8MB4 is supported" +msgstr "UTF8MB4 stöds" + +#: wp-admin/includes/class-wp-site-health.php:1030 +msgid "UTF8MB4 is a database storage attribute that makes sure your site can store non-English text and other strings (for instance emoticons) without unexpected problems." +msgstr "UTF8MB4 är en parameter för databaslagring som säkerställer att din webbplats kan lagra text och andra strängar som inte är på engelska (t.ex. emotikoner) utan att oväntade problem uppstår." + +#: wp-admin/includes/class-wp-site-health.php:1040 +msgid "utf8mb4 requires a MySQL update" +msgstr "För utf8mb4 behöver MySQL uppdateras" + +#: wp-admin/includes/class-wp-site-health.php:1053 +msgid "Your MySQL version supports utf8mb4." +msgstr "Din version av MySQL har stöd för utf8mb4." + +#: wp-admin/includes/class-wp-site-health.php:1060 +msgid "utf8mb4 requires a MariaDB update" +msgstr "För utf8mb4 behöver MariaDB uppdateras" + +#: wp-admin/includes/class-wp-site-health.php:1073 +msgid "Your MariaDB version supports utf8mb4." +msgstr "Din version av MariaDB har stöd för utf8mb4." + +#: wp-admin/includes/class-wp-site-health.php:1095 +#: wp-admin/includes/class-wp-site-health.php:1111 +msgid "utf8mb4 requires a newer client library" +msgstr "För utf8mb4 krävs ett nyare klientbibliotek" + +#: wp-admin/includes/class-wp-site-health.php:1137 +msgid "Can communicate with WordPress.org" +msgstr "Kommunikation med WordPress.org fungerar" + +#: wp-admin/includes/class-wp-site-health.php:1145 +msgid "Communicating with the WordPress servers is used to check for new versions, and to both install and update WordPress core, themes or plugins." +msgstr "Kommunikation med WordPress servrar används för att kontrollera om det finns nya versioner och för att båda installera och uppdatera WordPress-kärnan, teman och tillägg." + +#: wp-admin/includes/class-wp-site-health.php:1162 +msgid "Could not reach WordPress.org" +msgstr "Kunde inte nå WordPress.org" + +#. translators: 1: The IP address WordPress.org resolves to. 2: The error +#. returned by the lookup. +#: wp-admin/includes/class-wp-site-health.php:1171 +msgid "Your site is unable to reach WordPress.org at %1$s, and returned the error: %2$s" +msgstr "Din webbplats kan inte nå WordPress.org via %1$s, utan ger följande felkod: %2$s" + +#: wp-admin/includes/class-wp-site-health.php:1206 +msgid "Your site is not set to output debug information" +msgstr "Din webbplats är inte inställd för att lämna ut någon felsökningsinformation" + +#: wp-admin/includes/class-wp-site-health.php:1214 +msgid "Debug mode is often enabled to gather more details about an error or site failure, but may contain sensitive information which should not be available on a publicly available website." +msgstr "Felsökningsläge aktiveras ofta för att samla in mer information om ett fel eller en webbplats som inte fungerar. Men de kan innehålla känslig information som inte borde vara publikt tillgänglig." + +#: wp-admin/includes/class-wp-site-health.php:1229 +msgid "Your site is set to log errors to a potentially public file." +msgstr "Din webbplats är inställd så att den loggar fel till en fil som kan vara publikt åtkomlig." + +#. translators: %s: WP_DEBUG_LOG +#: wp-admin/includes/class-wp-site-health.php:1237 +msgid "The value, %s, has been added to this website’s configuration file. This means any errors on the site will be written to a file which is potentially available to normal users." +msgstr "Detta värde – %s, har lagts till i din konfigurationsfil. Det innebär att information om alla fel kommer att skrivas till en fil som eventuellt är tillgänglig för vanliga användare." + +#: wp-admin/includes/class-wp-site-health.php:1244 +msgid "Your site is set to display errors to site visitors" +msgstr "Din webbplats är inställd så att den visar information om fel till besökare" + +#: wp-admin/includes/class-wp-site-health.php:1303 +msgid "Only parts of your site are using HTTPS" +msgstr "Endast delar av din webbplats använder HTTPS" + +#. translators: %s: URL to Settings > General to change options. +#: wp-admin/includes/class-wp-site-health.php:1309 +msgid "You are accessing this website using HTTPS, but your WordPress Address is not set up to use HTTPS by default." +msgstr "Du använder denna webbplats via HTTPS, men din WordPressadress är inte inställd på att som standard använda HTTPS." + +#: wp-admin/includes/class-wp-site-health.php:1317 +msgid "Update your site addresses" +msgstr "Uppdatera adresserna till din webbplats" + +#: wp-admin/includes/class-wp-site-health.php:1275 +msgid "Your website is using an active HTTPS connection." +msgstr "Din webbplats använder en aktiv HTTPS-förbindelse." + +#: wp-admin/includes/class-wp-site-health.php:1323 +msgid "Your site does not use HTTPS" +msgstr "Din webbplats använder inte HTTPS" + +#: wp-admin/includes/class-wp-site-health.php:1283 +msgid "An HTTPS connection is needed for many features on the web today, it also gains the trust of your visitors by helping to protecting their online privacy." +msgstr "HTTPS-anslutningar krävs för många funktioner på webben idag. Det stärker även förtroendet hos dina besökare genom att det hjälper till att skydda deras integritet på nätet." + +#. translators: Documentation explaining HTTPS and why it should be used. +#: wp-admin/includes/class-wp-site-health.php:1288 +msgid "https://wordpress.org/support/article/why-should-i-use-https/" +msgstr "https://wordpress.org/support/article/why-should-i-use-https/" + +#: wp-admin/includes/class-wp-site-health.php:1289 +msgid "Read more about why you should use HTTPS" +msgstr "Läs mer om varför du bör använda HTTPS" + +#: wp-admin/includes/class-wp-site-health.php:1346 +msgid "Securely communicating between servers are needed for transactions such as fetching files, conducting sales on store sites, and much more." +msgstr "Man behöver säker kommunikation mellan servrar för olika transaktiner, såsom att hämta filer, hantera försäljning i e-butiker och många andra saker." + +#: wp-admin/includes/class-wp-site-health.php:1357 +msgid "Your site can communicate securely with other services" +msgstr "Din webbplats kan kommunicera säkert med andra tjänster" + +#: wp-admin/includes/class-wp-site-health.php:1361 +msgid "Your site is unable to communicate securely with other services" +msgstr "Din webbplats kan inte kommunicera säkert med andra tjänster" + +#: wp-admin/includes/class-wp-site-health.php:1365 +msgid "Talk to your web host about OpenSSL support for PHP." +msgstr "Kontakta ditt webbhotell och fråga om OpenSSL-stöd för PHP." + +#: wp-admin/includes/class-wp-site-health.php:1384 +msgid "Scheduled events are running" +msgstr "Schemalagda händelser körs" + +#: wp-admin/includes/class-wp-site-health.php:1392 +msgid "Scheduled events are what periodically looks for updates to plugins, themes and WordPress itself. It is also what makes sure scheduled posts are published on time. It may also be used by various plugins to make sure that planned actions are executed." +msgstr "Det är schemalagda händelser som regelbundet kontrollerar om det finns uppdateringar för tillägg, teman och själva WordPress. De ser också till att schemalagda inlägg publiceras när de ska. De kan också användas av olika tillägg för att se till att planerade åtgärder utförs." + +#: wp-admin/includes/class-wp-site-health.php:1403 +msgid "It was not possible to check your scheduled events" +msgstr "Det gick inte att kontrollera dina schemalagda händelser" + +#. translators: %s: The error message returned while from the cron scheduler. +#: wp-admin/includes/class-wp-site-health.php:1409 +msgid "While trying to test your site’s scheduled events, the following error was returned: %s" +msgstr "När vi försökte att testa schemalgda händelser på din webbplats inträffade följande fel: %s" + +#: wp-admin/includes/class-wp-site-health.php:1417 +msgid "A scheduled event has failed" +msgstr "En schemalagd händelse har misslyckats" + +#. translators: %s: The name of the failed cron event. +#: wp-admin/includes/class-wp-site-health.php:1423 +msgid "The scheduled event, %s, failed to run. Your site still works, but this may indicate that scheduling posts or automated updates may not work as intended." +msgstr "Den schemalagda händelsen, %s, kördes inte. Din webbplats fungerar ändå, men det kan innebära att schemlagda publicering och automatiska uppdateringar kanske inte fungerar som förväntat." + +#: wp-admin/includes/class-wp-site-health.php:1445 +msgid "Background updates are working" +msgstr "Uppdateringar i bakgrunden fungerar" + +#: wp-admin/includes/class-wp-site-health.php:1453 +msgid "Background updates ensure that WordPress can auto-update if a security update is released for the version you are currently using." +msgstr "Uppdateringar i bakgrunden säkereställer att WordPress kan uppdateras automatiskt om en säkerhetsuppdatering släpps för den version du för närvarande använder." + +#: wp-admin/includes/class-wp-site-health.php:1471 +msgid "Passed" +msgstr "Klarat" + +#: wp-admin/includes/class-wp-site-health.php:1474 +msgid "Background updates are not working as expected" +msgstr "Uppdateringar i bakgrunden fungerar inte som de ska" + +#: wp-admin/includes/class-wp-site-health.php:1482 +msgid "Background updates may not be working properly" +msgstr "Uppdateringar i bakgrunden kanske inte fungerar som de ska" + +#: wp-admin/includes/class-wp-site-health.php:1521 +msgid "Your site can perform loopback requests" +msgstr "Din webbplats kan utföra återanrop" + +#: wp-admin/includes/class-wp-site-health.php:1529 +msgid "Loopback requests are used to run scheduled events, and are also used by the built-in editors for themes and plugins to verify code stability." +msgstr "Återanrop används för körning av schemalagda händelser, och utnyttjas även av de inbyggda redigerarna för teman och tillägg för att kontrollera stabiliteten hos kod som sparas." + +#: wp-admin/includes/class-wp-site-health.php:1540 +msgid "Your site could not complete a loopback request" +msgstr "Din webbplats kunde inte genomföra något återanrop" + +#: wp-admin/includes/class-wp-site-health.php:1563 +msgid "HTTP requests seem to be working as expected" +msgstr "HTTP-förfrågningar verkar fungera som förväntat" + +#: wp-admin/includes/class-wp-site-health.php:1571 +msgid "It is possible for site maintainers to block all, or some, communication to other sites and services. If set up incorrectly, this may prevent plugins and themes from working as intended." +msgstr "Det är möjligt för dem som underhåller webbplatsen att blockera all, eller viss, kommunikation till andra webbplatser och tjänster. Om detta är felaktigt konfigurerat kan det hindra tillägg och teman från att fungera som förväntat." + +#: wp-admin/includes/class-wp-site-health.php:1591 +msgid "HTTP requests are blocked" +msgstr "HTTP-förfrågningar blockeras" + +#: wp-admin/includes/class-wp-site-health.php:1606 +msgid "HTTP requests are partially blocked" +msgstr "HTTP-förfrågningar blockeras delvis" + +#: wp-admin/includes/class-wp-site-health.php:1634 +msgid "The REST API is available" +msgstr "REST-API är tillgängligt" + +#: wp-admin/includes/class-wp-site-health.php:1642 +msgid "The REST API is one way WordPress, and other applications, communicate with the server. One example is the block editor screen, which relies on this to display, and save, your posts and pages." +msgstr "REST-API är ett sätt WordPress och andra tillämpningar kommunicerar med servern. Ett exempel är sidan med blockredigeraren, som använder gränssnittet för att visa och spara dina inlägg och sidor." + +#: wp-admin/includes/class-wp-site-health.php:1675 +msgid "The REST API encountered an error" +msgstr "REST-API gav ett fel" + +#: wp-admin/includes/class-wp-site-health.php:1681 +msgid "The REST API request failed due to an error." +msgstr "Förfrågan över REST-API misslyckades på grund av ett fel." + +#: wp-admin/includes/class-wp-site-health.php:1693 +msgid "The REST API encountered an unexpected result" +msgstr "REST-API fick ett oväntat resultat" + +#. translators: 1: The HTTP response code returned. 2: The error message +#. returned. +#: wp-admin/includes/class-wp-site-health.php:1699 +msgid "The REST API call gave the following unexpected result: (%1$d) %2$s." +msgstr "Anropet till REST-API gav följande oväntade resultat: (%1$d) %2$s." + +#: wp-admin/includes/class-wp-site-health.php:1710 +msgid "The REST API did not behave correctly" +msgstr "REST-API betedde sig inte korrekt" + +#. translators: %s: the name of the query parameter being tested. +#: wp-admin/includes/class-wp-site-health.php:1716 +msgid "The REST API did not process the %s query parameter correctly." +msgstr "REST-API behandlade inte förfråningsparametern %s korrekt." + +#: wp-admin/includes/class-wp-site-health.php:1741 +msgid "WordPress Version" +msgstr "Version av WordPress" + +#: wp-admin/includes/class-wp-site-health.php:1745 +msgid "Plugin Versions" +msgstr "Versioner av tillägg" + +#: wp-admin/includes/class-wp-site-health.php:1749 +msgid "Theme Versions" +msgstr "Versioner av teman" + +#: wp-admin/includes/class-wp-site-health.php:1753 +msgid "PHP Version" +msgstr "PHP-version" + +#: wp-admin/includes/class-wp-site-health.php:1757 +msgid "Database Server version" +msgstr "Databasserverns version" + +#: wp-admin/includes/class-wp-site-health.php:1761 +msgid "PHP Extensions" +msgstr "PHP-utökningar" + +#: wp-admin/includes/class-wp-site-health.php:1765 +msgid "MySQL utf8mb4 support" +msgstr "Stöd för MySQL utf8mb4" + +#: wp-admin/includes/class-wp-site-health.php:1769 +msgid "HTTPS status" +msgstr "HTTPS-status" + +#: wp-admin/includes/class-wp-site-health.php:1773 +msgid "Secure communication" +msgstr "Säker kommunikation" + +#: wp-admin/includes/class-wp-site-health.php:1777 +msgid "Scheduled events" +msgstr "Schemalagda händelser" + +#: wp-admin/includes/class-wp-site-health.php:1781 +msgid "HTTP Requests" +msgstr "HTTP-förfrågningar" + +#: wp-admin/includes/class-wp-site-health.php:1785 +msgid "Debugging enabled" +msgstr "Felsökning aktiverad" + +#: wp-admin/includes/class-wp-site-health.php:1799 +msgid "Loopback request" +msgstr "Egenanrop" + +#: wp-admin/includes/class-wp-site-health.php:1808 +msgid "REST API availability" +msgstr "Tillgänglighet för REST-API" + +#: wp-admin/includes/class-wp-site-health.php:1883 +msgid "No scheduled events exist on this site." +msgstr "Det finns inga schemalagda händelser på denna webbplats." + +#: wp-admin/includes/class-wp-site-health.php:1963 +msgid "The loopback request to your site failed, this means features relying on them are not currently working as expected." +msgstr "Återanropet till din webbplats misslyckades. Det betyder att funktioner som är beroende av dem för närvarande inte fungerar som förväntat." + +#. translators: %d: The HTTP response code returned. +#: wp-admin/includes/class-wp-site-health.php:1979 +msgid "The loopback request returned an unexpected http status code, %d, it was not possible to determine if this will prevent features from working as expected." +msgstr "Begäran om återanrop fick en oväntad http-svarskod, %d. Det gick inte att avgöra om detta kan hindra vissa funktioner att fungera som förväntat." + +#: wp-admin/includes/class-wp-site-health.php:1987 +msgid "The loopback request to your site completed successfully." +msgstr "Egenanrop till din egen webbplats lyckades." + +#: wp-admin/includes/misc.php:1645 +msgid "View Privacy Policy Guide." +msgstr "Visa guiden för integritetspolicy." + +#: wp-admin/includes/class-wp-site-health.php:592 +#: wp-admin/includes/class-wp-site-health.php:608 +msgid "We recommend removing any unused themes to enhance your site’s security." +msgstr "Vi rekommenderar att du tar bort oanvända teman för att öka webbplatsens säkerhet." + +#. translators: %s: Name of the constant used. +#: wp-admin/includes/class-wp-site-health.php:1597 +msgid "HTTP requests have been blocked by the %s constant, with no allowed hosts." +msgstr "HTTP-anrop har blockerats av konstanten %s utan några godkända adresser." + +#: wp-admin/includes/user.php:818 +msgid "Filter export personal data list" +msgstr "Filtrera lista för export av personuppgifter" + +#: wp-admin/includes/user.php:819 +msgid "Export personal data list navigation" +msgstr "Navigering i lista för export av personuppgifter" + +#: wp-admin/includes/user.php:820 +msgid "Export personal data list" +msgstr "Exportera lista med personuppgifter" + +#: wp-admin/includes/user.php:901 +msgid "Filter erase personal data list" +msgstr "Filtrera lista för radering av personuppgifter" + +#: wp-admin/includes/user.php:902 +msgid "Erase personal data list navigation" +msgstr "Navigering i lista för radering av personuppgifter" + +#: wp-admin/includes/user.php:903 +msgid "Erase personal data list" +msgstr "Lista för radering av personuppgifter" + +#: wp-admin/includes/class-wp-site-health.php:244 +#: wp-admin/includes/class-wp-site-health.php:283 +#: wp-admin/includes/class-wp-site-health.php:415 +#: wp-admin/includes/class-wp-site-health.php:688 +#: wp-admin/includes/class-wp-site-health.php:978 +#: wp-admin/includes/class-wp-site-health.php:1140 +#: wp-admin/includes/class-wp-site-health.php:1209 +#: wp-admin/includes/class-wp-site-health.php:1278 +#: wp-admin/includes/class-wp-site-health.php:1341 +#: wp-admin/includes/class-wp-site-health.php:1448 +msgid "Security" +msgstr "Säkerhet" + +#: wp-admin/includes/class-wp-site-health.php:387 +msgid "Inactive plugins are tempting targets for attackers. If you’re not going to use a plugin, we recommend you remove it." +msgstr "Inaktiva tillägg är lockande måltavlor att attackera. Om du inte kommer att använda något tillägg rekommenderar vi att du tar bort det." + +#. translators: %d: The number of inactive themes. +#: wp-admin/includes/class-wp-site-health.php:538 +#: wp-admin/includes/class-wp-site-health.php:557 +msgid "Your site has %d inactive theme." +msgid_plural "Your site has %d inactive themes." +msgstr[0] "Din webbplats har %d inaktivt tema." +msgstr[1] "Din webbplats har %d inaktiva teman." + +#. translators: 1: The amount of inactive themes. 2: The default theme for +#. WordPress. 3: The currently active theme. +#: wp-admin/includes/class-wp-site-health.php:599 +msgid "Your site has %1$d inactive theme, other than %2$s, the default WordPress theme, and %3$s, your active theme." +msgid_plural "Your site has %1$d inactive themes, other than %2$s, the default WordPress theme, and %3$s, your active theme." +msgstr[0] "Din webbplats har %1$d inaktivt tema, utöver %2$s – standardtemat för WordPress theme, och %3$s – ditt aktiva tema." +msgstr[1] "Din webbplats har %1$d inaktiva teman, utöver %2$s – standardtemat för WordPress theme, och %3$s – ditt aktiva tema." + +#: wp-admin/includes/class-wp-site-health.php:183 +#: wp-admin/includes/class-wp-site-health.php:647 +#: wp-admin/includes/class-wp-site-health.php:736 +#: wp-admin/includes/class-wp-site-health.php:938 +#: wp-admin/includes/class-wp-site-health.php:1025 +#: wp-admin/includes/class-wp-site-health.php:1387 +#: wp-admin/includes/class-wp-site-health.php:1524 +#: wp-admin/includes/class-wp-site-health.php:1566 +#: wp-admin/includes/class-wp-site-health.php:1637 +msgid "Performance" +msgstr "Prestanda" + +#. translators: 1: Link to the hosting group page about recommended PHP +#. modules. 2: Additional link attributes. 3: Accessibility text. +#: wp-admin/includes/class-wp-site-health.php:744 +msgid "The WordPress Hosting Team maintains a list of those modules, both recommended and required, in the team handbook%3$s." +msgstr "Webbserver-teamet underhåller en lista över dessa moduler, både rekommenderade och nödvändiga, i gruppens handbok%3$s." + +#. translators: Localized team handbook, if one exists. +#: wp-admin/includes/class-wp-site-health.php:746 +msgid "https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions" +msgstr "https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions" + +#. translators: 1: The name of the drop-in. 2: The name of the database engine. +#: wp-admin/includes/class-wp-site-health.php:997 +msgid "You are using a %1$s drop-in which might mean that a %2$s database is not being used." +msgstr "Du använder insticksprogrammet %1$s vilket kan innebära att det inte är en %2$s-databas som används." + +#. translators: 1: Name of the constant used. 2: List of hostnames whitelisted. +#: wp-admin/includes/class-wp-site-health.php:1612 +msgid "HTTP requests have been blocked by the %1$s constant, with some hosts whitelisted: %2$s." +msgstr "HTTP-anrop har blockerats av konstanten %1$s med några vitlistade adresser: %2$s." + +#: wp-admin/includes/class-wp-site-health.php:350 +msgid "Your site has 1 active plugin, and it is up to date." +msgstr "Din webbplats har 1 aktivt tillägg, och det är uppdaterat." + +#: wp-admin/includes/class-wp-site-health.php:506 +msgid "Your site has 1 installed theme, and it is up to date." +msgstr "Din webbplats har 1 tema installerat, och det är uppdaterat." + +#: wp-admin/includes/class-wp-site-health.php:531 +#: wp-admin/includes/class-wp-site-health.php:577 +msgid "You should remove inactive themes" +msgstr "Du bör ta bort inaktiva teman" + +#. translators: 1: WP_DEBUG_DISPLAY, 2: WP_DEBUG +#: wp-admin/includes/class-wp-site-health.php:1252 +msgid "The value, %1$s, has either been enabled by %2$s or added to your configuration file. This will make errors display on the front end of your site." +msgstr "Detta värde, %1$s, har antingen aktiverats av %2$s eller lagts in i din konfigurationsfil. Detta innebär att eventuella fel visas på webbplatsens front-end." + +#: wp-admin/includes/class-wp-site-health.php:293 +msgid "Manage your plugins" +msgstr "Hantera dina tillägg" + +#: wp-admin/includes/class-wp-site-health.php:344 +msgid "Update your plugins" +msgstr "Uppdatera dina tillägg" + +#: wp-admin/includes/class-wp-site-health.php:393 +msgid "Manage inactive plugins" +msgstr "Hantera inaktiva tillägg" + +#: wp-admin/includes/class-wp-site-health.php:425 +msgid "Manage your themes" +msgstr "Hantera dina teman" + +#: wp-admin/includes/class-wp-site-health.php:652 +#: wp-admin/includes/dashboard.php:1631 +msgid "PHP is the programming language we use to build and maintain WordPress. Newer versions of PHP are both faster and more secure, so updating will have a positive effect on your site’s performance." +msgstr "PHP är programmeringsspråket vi använder för att bygga och underhålla WordPress. Nyare versioner av PHP är mycket snabbare och säkrare. En uppdatering kommer alltså att förbättra webbplatsens prestanda." + +#: wp-admin/includes/class-wp-site-health.php:741 +msgid "PHP modules perform most of the tasks on the server that make your site run. Any changes to these must be made by your server administrator." +msgstr "PHP-moduler utför de flesta av serverns uppgifter som behövs för att webbplatsen ska fungera. Eventuella ändringar i dessa måste utföras av er serveradministratör." + +#: wp-admin/includes/class-wp-site-health.php:943 +msgid "The SQL server is a required piece of software for the database WordPress uses to store all your site’s content and settings." +msgstr "SQL-servern är en nödvändig programvara som WordPress använder för att lagra allt innehåll och alla inställningar för din webbplats." + +#. translators: Localized version of WordPress requirements if one exists. +#: wp-admin/includes/class-wp-site-health.php:948 +msgid "https://wordpress.org/about/requirements/" +msgstr "https://wordpress.org/about/requirements/" + +#: wp-admin/includes/class-wp-site-health.php:949 +msgid "Read more about what WordPress requires to run." +msgstr "Läs mer om vad som krävs för att köra WordPress." + +#. translators: %s: Version number. +#: wp-admin/includes/class-wp-site-health.php:1046 +msgid "WordPress’ utf8mb4 support requires MySQL version %s or greater. Please contact your server administrator." +msgstr "För utf8mb4-stöd i WordPress krävs MySQL version %s eller senare. Kontakta din serveradministratör." + +#. translators: %s: Version number. +#: wp-admin/includes/class-wp-site-health.php:1066 +msgid "WordPress’ utf8mb4 support requires MariaDB version %s or greater. Please contact your server administrator." +msgstr "För utf8mb4-stöd i WordPress krävs MariaDB version %s eller senare. Kontakta din serveradministratör." + +#. translators: 1: Name of the library, 2: Number of version. +#: wp-admin/includes/class-wp-site-health.php:1101 +#: wp-admin/includes/class-wp-site-health.php:1117 +msgid "WordPress’ utf8mb4 support requires MySQL client library (%1$s) version %2$s or newer. Please contact your server administrator." +msgstr "För utf8mb4-stöd i WordPress krävs MySQL klientbibliotek (%1$s) version %2$s eller senare. Kontakta din serveradministratör." + +#: wp-admin/includes/class-wp-site-health.php:1220 +msgid "Read about debugging in WordPress." +msgstr "Läs om felavhjälpning i WordPress." + +#: wp-admin/includes/comment.php:52 wp-admin/comment.php:267 +#: wp-admin/edit-comments.php:260 +msgid "Sorry, you are not allowed to edit comments on this post." +msgstr "Du har inte behörighet att redigera kommentarer på det här inlägget." + +#: wp-admin/includes/theme.php:276 wp-admin/custom-background.php:226 +msgid "Custom Background" +msgstr "Anpassad bakgrund" + +#: wp-admin/includes/theme.php:278 wp-admin/custom-header.php:470 +msgid "Custom Header" +msgstr "Anpassa sidhuvudet" + +#. translators: %s: link name +#. translators: %s: taxonomy term name +#. translators: %s: attachment title +#. translators: %s: post title +#: wp-admin/includes/class-wp-links-list-table.php:190 +#: wp-admin/includes/class-wp-terms-list-table.php:462 +#: wp-admin/includes/class-wp-media-list-table.php:669 +#: wp-admin/includes/class-wp-media-list-table.php:717 +#: wp-admin/includes/class-wp-posts-list-table.php:1332 +#: wp-admin/includes/dashboard.php:593 wp-admin/includes/dashboard.php:888 +msgid "Edit “%s”" +msgstr "Redigera ”%s”" + +#. translators: %s: link to documentation on child themes +#: wp-admin/includes/class-wp-themes-list-table.php:245 +msgid "This child theme requires its parent theme, %2$s." +msgstr "Detta barntema kräver ett modertema, %2$s." + +#: wp-admin/includes/class-bulk-upgrader-skin.php:41 +msgid "The update process is starting. This process may take a while on some hosts, so please be patient." +msgstr "Uppdateringen börjar. Denna process kan ta ett tag på vissa webbhotell, ha tålamod." + +#: wp-admin/includes/class-wp-links-list-table.php:119 +#: wp-admin/includes/class-wp-media-list-table.php:185 +#: wp-admin/includes/class-wp-comments-list-table.php:410 +#: wp-admin/includes/class-wp-posts-list-table.php:556 +msgid "Filter" +msgstr "Filtrera" + +#: wp-admin/edit-tags.php:439 wp-admin/includes/meta-boxes.php:849 +#: wp-admin/includes/meta-boxes.php:1511 +#: wp-admin/includes/class-wp-terms-list-table.php:184 +#: wp-admin/includes/class-wp-terms-list-table.php:632 +#: wp-admin/includes/class-wp-posts-list-table.php:1541 +#: wp-admin/edit-tag-form.php:138 +msgid "Slug" +msgstr "Slug" + +#: wp-admin/edit-tags.php:441 wp-admin/edit-tag-form.php:156 +msgid "The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "Permalänken är den URL-vänliga varianten av namnet. Den består vanligtvis endast av små bokstäver, siffror och bindestreck." + +#: wp-admin/edit-tags.php:493 wp-admin/edit-tag-form.php:191 +msgid "The description is not prominent by default; however, some themes may show it." +msgstr "Beskrivningen visas inte som standard, men går att visa med vissa teman." + +#: wp-admin/edit-tags.php:435 wp-admin/edit-tag-form.php:134 +msgid "The name is how it appears on your site." +msgstr "Namnet är hur den visas på sidan." + +#: wp-admin/edit-tags.php:484 wp-admin/edit-tag-form.php:181 +msgid "Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have children categories for Bebop and Big Band. Totally optional." +msgstr "Kategorier kan till skillnad från taggar sättas i hierarki. Du kanske vill ha en kategori för musik, och under den ha två underkategorier för rock och pop. Helt valfritt." + +#: wp-admin/edit-tags.php:117 wp-admin/post.php:298 wp-admin/themes.php:63 +#: wp-admin/upload.php:190 wp-admin/edit.php:155 +msgid "Sorry, you are not allowed to delete this item." +msgstr "Du har inte behörighet att radera det här objektet." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:278 +#: wp-admin/theme-install.php:65 +msgid "Try Again" +msgstr "Försök igen" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-links-list-table.php:172 +#: wp-admin/includes/class-wp-plugins-list-table.php:772 +#: wp-admin/includes/class-wp-terms-list-table.php:353 +#: wp-admin/includes/class-wp-users-list-table.php:466 +#: wp-admin/includes/class-wp-media-list-table.php:360 +#: wp-admin/includes/class-wp-posts-list-table.php:919 +#: wp-admin/update-core.php:351 wp-admin/update-core.php:436 +msgid "Select %s" +msgstr "Välj %s" + +#: wp-admin/edit-tags.php:602 +msgid "Tags can be selectively converted to categories using the tag to category converter." +msgstr "Taggar kan selektivt konverteras till kategorier genom att använda tagg till kategori-konverteraren." + +#: wp-admin/edit-tags.php:253 +msgid "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." +msgstr "Du kan ta bort Länkkategorier i massredigeringsmenyn, åtgärderna tar inte bort länkarna inom kategorin. Istället flyttas de till standard kategorin för länkar." + +#: wp-admin/includes/bookmark.php:208 +msgid "Could not update link in the database" +msgstr "Kunde inte uppdatera länken i databasen" + +#: wp-admin/includes/bookmark.php:216 +msgid "Could not insert link into the database" +msgstr "Kunde inte infoga länken i databasen" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:37 +msgid "The ftp PHP extension is not available" +msgstr "PHP-tillägget för FTP är inte tillgängligt" + +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:48 +#: wp-admin/includes/class-wp-filesystem-ftpext.php:54 +msgid "FTP hostname is required" +msgstr "FTP-servernamn är obligatoriskt" + +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:55 +#: wp-admin/includes/class-wp-filesystem-ftpext.php:61 +msgid "FTP username is required" +msgstr "FTP-användarnamn är obligatoriskt" + +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:61 +#: wp-admin/includes/class-wp-filesystem-ftpext.php:67 +msgid "FTP password is required" +msgstr "FTP-lösenord är obligatoriskt" + +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:86 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:98 +#: wp-admin/includes/class-wp-filesystem-ftpext.php:97 +msgid "Failed to connect to FTP Server %s" +msgstr "Anslutningen till FTP-servern misslyckades %s" + +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:110 +#: wp-admin/includes/class-wp-filesystem-ftpext.php:109 +#: wp-admin/includes/class-wp-filesystem-ssh2.php:155 +msgid "Username/Password incorrect for %s" +msgstr "Användarnamn/Lösenord felaktigt för %s" + +#: wp-admin/includes/theme.php:61 +#: wp-admin/includes/class-wp-automatic-updater.php:366 +#: wp-admin/includes/class-wp-upgrader.php:150 wp-admin/includes/file.php:1353 +#: wp-admin/includes/plugin.php:912 +msgid "Could not access filesystem." +msgstr "Kunde inte komma åt filsystemet." + +#: wp-admin/includes/theme.php:65 wp-admin/includes/class-wp-upgrader.php:151 +#: wp-admin/includes/plugin.php:916 +msgid "Filesystem error." +msgstr "Filsystemsfel." + +#: wp-admin/includes/class-plugin-upgrader.php:47 +msgid "The plugin is at the latest version." +msgstr "Tillägget är av den senaste versionen." + +#: wp-admin/includes/class-plugin-upgrader.php:51 +#: wp-admin/includes/class-theme-upgrader.php:50 +#: wp-admin/includes/class-core-upgrader.php:34 +#: wp-admin/includes/class-language-pack-upgrader.php:118 +msgid "Unpacking the update…" +msgstr "Packar upp uppdatering…" + +#: wp-admin/includes/class-plugin-upgrader.php:52 +msgid "Removing the old version of the plugin…" +msgstr "Tar bort den gamla versionen av tillägget…" + +#: wp-admin/includes/class-plugin-upgrader.php:53 +msgid "Could not remove the old plugin." +msgstr "Kunde inte ta bort det gamla tillägget." + +#: wp-admin/includes/class-plugin-upgrader.php:65 +#: wp-admin/includes/class-theme-upgrader.php:63 +msgid "Installation package not available." +msgstr "Uppdateringspaketet ej tillgängligt." + +#: wp-admin/includes/class-plugin-upgrader.php:68 +#: wp-admin/includes/class-theme-upgrader.php:66 +msgid "Unpacking the package…" +msgstr "Packar upp paketet…" + +#: wp-admin/includes/class-plugin-upgrader.php:69 +msgid "Installing the plugin…" +msgstr "Installerar tillägget…" + +#: wp-admin/includes/class-plugin-upgrader.php:72 +msgid "Plugin installed successfully." +msgstr "Tillägget installerades utan problem." + +#: wp-admin/includes/class-theme-upgrader.php:46 +msgid "The theme is at the latest version." +msgstr "Temat är av den senaste versionen." + +#: wp-admin/includes/class-theme-upgrader.php:51 +msgid "Removing the old version of the theme…" +msgstr "Tar bort den gamla versionen av temat…" + +#: wp-admin/includes/class-theme-upgrader.php:52 +msgid "Could not remove the old theme." +msgstr "Kunde inte ta bort det gamla temat." + +#: wp-admin/includes/class-theme-upgrader.php:67 +msgid "Installing the theme…" +msgstr "Installerar temat…" + +#: wp-admin/includes/class-theme-upgrader.php:70 +msgid "Theme installed successfully." +msgstr "Temat har installerats." + +#: wp-admin/includes/class-plugin-installer-skin.php:64 +#: wp-admin/includes/class-plugin-upgrader-skin.php:55 +msgid "Activate Plugin" +msgstr "Aktivera tillägget" + +#: wp-admin/includes/class-plugin-installer-skin.php:79 +#: wp-admin/includes/class-bulk-plugin-upgrader-skin.php:47 +#: wp-admin/includes/class-plugin-upgrader-skin.php:56 +msgid "Return to Plugins page" +msgstr "Återgå till sidan för tillägg" + +#. translators: 1: name of API, 2: version of API +#: wp-admin/includes/class-plugin-installer-skin.php:46 +msgid "Successfully installed the plugin %1$s %2$s." +msgstr "Tillägget %1$s %2$s har installerats." + +#: wp-admin/includes/class-plugin-installer-skin.php:75 +#: wp-admin/includes/class-plugin-installer-skin.php:77 +msgid "Return to Plugin Installer" +msgstr "Återgå till tilläggsinstalleraren" + +#. translators: 1: theme name, 2: version +#: wp-admin/includes/class-theme-upgrader.php:72 +msgid "Successfully installed the theme %1$s %2$s." +msgstr "Temat %1$s %2$s har installerats." + +#. translators: %s: theme name +#: wp-admin/includes/class-wp-themes-list-table.php:190 +#: wp-admin/includes/class-theme-installer-skin.php:93 +#: wp-admin/includes/class-theme-upgrader-skin.php:83 +msgid "Activate “%s”" +msgstr "Aktivera ”%s”" + +#: wp-admin/includes/class-theme-installer-skin.php:100 +msgid "Return to Theme Installer" +msgstr "Återgå till temainstalleraren" + +#: wp-admin/includes/class-theme-installer-skin.php:102 +#: wp-admin/includes/class-theme-upgrader-skin.php:91 +#: wp-admin/includes/class-bulk-theme-upgrader-skin.php:47 +msgid "Return to Themes page" +msgstr "Återgå till sidan för teman" + +#: wp-admin/options-reading.php:26 +msgid "You can choose what’s displayed on the homepage of your site. It can be posts in reverse chronological order (classic blog), or a fixed/static page. To set a static homepage, you first need to create two Pages. One will become the homepage, and the other will be where your posts are displayed." +msgstr "Du kan välja vad som ska visas på startsidan av din webbplats. Det kan vara inlägg i omvänd kronologisk ordning (klassisk blogg) eller en statisk sida. För att ange en statisk startsida behöver du första skapa två sidor. Den ena kommer att bli startsidan och på den andra kommer dina blogginlägg att visas." + +#: wp-admin/includes/image-edit.php:28 wp-admin/includes/image-edit.php:799 +msgid "Image data does not exist. Please re-upload the image." +msgstr "Bilddata saknas. Var vänlig ladda upp bilden igen." + +#: wp-admin/includes/image-edit.php:195 +msgid "Crop" +msgstr "Beskär" + +#: wp-admin/includes/image-edit.php:207 +msgid "Rotate counter-clockwise" +msgstr "Rotera moturs" + +#: wp-admin/includes/image-edit.php:208 +msgid "Rotate clockwise" +msgstr "Rotera medurs" + +#: wp-admin/includes/image-edit.php:217 +msgid "Flip vertically" +msgstr "Vänd vertikalt" + +#: wp-admin/includes/image-edit.php:218 +msgid "Flip horizontally" +msgstr "Vänd horizontalt" + +#: wp-admin/includes/image-edit.php:54 +msgid "Scale Image" +msgstr "Skala bild" + +#: wp-admin/includes/image-edit.php:60 +msgid "Original dimensions %s" +msgstr "Ursprungsdimensioner %s" + +#: wp-admin/includes/image-edit.php:87 wp-admin/custom-background.php:306 +#: wp-admin/custom-background.php:310 +msgid "Restore Original Image" +msgstr "Återställ ursprunglig bild" + +#: wp-admin/includes/image-edit.php:91 +msgid "Discard any changes and restore the original image." +msgstr "Förkasta alla ändringar och återställ originalbilden." + +#: wp-admin/includes/image-edit.php:94 +msgid "Previously edited copies of the image will not be deleted." +msgstr "Tidigare redigerade kopior av bilden kommer inte att raderas." + +#: wp-admin/includes/image-edit.php:100 +msgid "Restore image" +msgstr "Återställ bild" + +#: wp-admin/includes/image-edit.php:110 +msgid "Image Crop" +msgstr "Beskär bild" + +#: wp-admin/includes/image-edit.php:116 +msgid "Crop Aspect Ratio" +msgstr "Beskär bildförhållande" + +#: wp-admin/includes/image-edit.php:119 +msgid "Crop Selection" +msgstr "Beskär markering" + +#: wp-admin/includes/image-edit.php:125 +msgid "Aspect ratio:" +msgstr "Bildförhållande:" + +#: wp-admin/includes/image-edit.php:138 +msgid "Selection:" +msgstr "Markering:" + +#: wp-admin/includes/image-edit.php:159 +msgid "Thumbnail Settings" +msgstr "Inställningar för miniatyr" + +#: wp-admin/includes/image-edit.php:166 +msgid "Current thumbnail" +msgstr "Nuvarande miniatyr" + +#: wp-admin/includes/image-edit.php:171 +msgid "Apply changes to:" +msgstr "Verkställ ändringar till:" + +#: wp-admin/includes/image-edit.php:175 +msgid "All image sizes" +msgstr "Alla bildstorlekar" + +#: wp-admin/includes/image-edit.php:183 +msgid "All sizes except thumbnail" +msgstr "Alla storlekar förutom miniatyr" + +#: wp-admin/includes/image-edit.php:667 +msgid "Cannot load image metadata." +msgstr "Kan inte ladda bildens metadata." + +#: wp-admin/includes/image-edit.php:727 +msgid "Cannot save image metadata." +msgstr "Kan inte spara bildens metadata." + +#: wp-admin/includes/image-edit.php:732 +msgid "Image metadata is inconsistent." +msgstr "Bildens metadata är inkonsekvent." + +#: wp-admin/includes/image-edit.php:734 +msgid "Image restored successfully." +msgstr "Bilden har återställts." + +#: wp-admin/includes/image-edit.php:758 +msgid "Unable to create new image." +msgstr "Kunde inte skapa ny bild." + +#: wp-admin/includes/image-edit.php:782 +msgid "Error while saving the scaled image. Please reload the page and try again." +msgstr "Ett fel uppstod när den skalade bilden skulle sparas. Ladda om sidan och försök igen." + +#: wp-admin/includes/image-edit.php:791 +msgid "Nothing to save, the image has not changed." +msgstr "Det finns inget att spara, bilden har inte ändrats." + +#: wp-admin/includes/image-edit.php:840 +msgid "Unable to save the image." +msgstr "Kunde inte spara bilden." + +#: wp-admin/includes/image-edit.php:965 +msgid "Image saved" +msgstr "Bild sparad" + +#: wp-admin/includes/class-wp-debug-data.php:59 wp-admin/includes/misc.php:2031 +#: wp-admin/includes/media.php:490 wp-admin/includes/template.php:1912 +#: wp-admin/install.php:77 wp-admin/upgrade.php:72 +#: wp-admin/setup-config.php:116 wp-admin/maint/repair.php:24 +msgid "WordPress" +msgstr "WordPress" + +#: wp-admin/includes/class-wp-links-list-table.php:323 +#: wp-admin/includes/meta-boxes.php:1030 +msgid "" +"You are about to delete this link '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Vill du radera den här länken '%s'?\n" +" 'Avbryt' för att avbryta, 'OK' för att radera." + +#: wp-admin/includes/class-wp-links-list-table.php:136 +#: wp-admin/includes/meta-boxes.php:1310 +msgid "Rating" +msgstr "Omdöme" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:726 +#: wp-admin/includes/plugin-install.php:638 +msgid "Last Updated:" +msgstr "Senast uppdaterat:" + +#: wp-admin/includes/class-wp-links-list-table.php:134 +msgid "Relationship" +msgstr "Relationer" + +#: wp-admin/includes/class-wp-links-list-table.php:135 +msgid "Visible" +msgstr "Synlig" + +#: wp-admin/includes/theme.php:292 +msgid "One Column" +msgstr "En kolumn" + +#: wp-admin/includes/theme.php:293 +msgid "Two Columns" +msgstr "Två kolumner" + +#: wp-admin/includes/theme.php:294 +msgid "Three Columns" +msgstr "Tre kolumner" + +#: wp-admin/includes/theme.php:295 +msgid "Four Columns" +msgstr "Fyra kolumner" + +#: wp-admin/includes/theme.php:296 +msgid "Left Sidebar" +msgstr "Vänster sidopanel" + +#: wp-admin/includes/theme.php:297 +msgid "Right Sidebar" +msgstr "Höger sidopanel" + +#: wp-admin/includes/theme.php:274 wp-admin/includes/theme.php:325 +msgid "Features" +msgstr "Funktioner" + +#: wp-admin/includes/theme.php:277 +msgid "Custom Colors" +msgstr "Anpassade färger" + +#: wp-admin/includes/theme.php:287 +msgid "Theme Options" +msgstr "Temainställningar" + +#: wp-admin/includes/theme.php:286 +msgid "Sticky Post" +msgstr "Klistrat inlägg" + +#: wp-admin/includes/theme.php:262 wp-admin/includes/theme.php:326 +msgid "Subject" +msgstr "Ämne" + +#: wp-admin/includes/theme.php:268 +msgid "Holiday" +msgstr "Semester" + +#: wp-admin/includes/class-wp-themes-list-table.php:231 +#: wp-admin/includes/class-wp-theme-install-list-table.php:364 +#: wp-admin/import.php:204 +msgid "Details" +msgstr "Detaljer" + +#. translators: %s: Theme version +#: wp-admin/includes/theme.php:718 wp-admin/themes.php:547 +#: wp-admin/theme-install.php:351 +msgid "Version: %s" +msgstr "Version: %s" + +#: wp-admin/includes/theme.php:71 wp-admin/includes/class-wp-upgrader.php:155 +msgid "Unable to locate WordPress theme directory." +msgstr "Kan inte lokalisera WordPress temakatalog." + +#: wp-admin/includes/theme.php:79 +msgid "Could not fully remove the theme %s." +msgstr "Kunde inte ta bort temat %s fullständigt." + +#. translators: 1: WordPress version number, 2: WordPress updates admin screen +#. URL +#: wp-admin/includes/update.php:233 +msgid "You are using a development version (%1$s). Cool! Please stay updated." +msgstr "Du använder en utvecklingsversion (%1$s). Coolt! Vänligen håll dig uppdaterad." + +#: wp-admin/includes/update.php:304 +msgid "Update to %s" +msgstr "Uppdatera till %s" + +#: wp-admin/includes/update.php:304 +msgid "Latest" +msgstr "Senaste" + +#: wp-admin/includes/update.php:683 +msgid "An automated WordPress update has failed to complete - please attempt the update again now." +msgstr "Automatisk uppdatering av WordPress misslyckades! - var vänlig försök att uppdatera igen nu." + +#: wp-admin/includes/update.php:685 +msgid "An automated WordPress update has failed to complete! Please notify the site administrator." +msgstr "En automatisk WordPress-uppdatering misslyckades! Vänligen meddela webbplatsens administratör." + +#. translators: add new links +#: wp-admin/link-manager.php:96 wp-admin/edit-link-form.php:88 +#: wp-admin/menu.php:71 +msgctxt "link" +msgid "Add New" +msgstr "Lägg till ny" + +#: wp-admin/link-manager.php:111 +msgid "%s link deleted." +msgid_plural "%s links deleted" +msgstr[0] "%s länk raderad" +msgstr[1] "%s länkar raderade" + +#: wp-admin/link-manager.php:119 +msgid "Search Links" +msgstr "Sök länkar" + +#: wp-admin/includes/class-wp-links-list-table.php:80 +msgid "No links found." +msgstr "Inga länkar funna." + +#: wp-admin/credits.php:49 wp-admin/freedoms.php:63 wp-admin/about.php:48 +#: wp-admin/menu.php:281 +msgid "Privacy" +msgstr "Integritet" + +#: wp-admin/options-reading.php:16 +msgid "Reading Settings" +msgstr "Läsinställningar" + +#: wp-admin/options-reading.php:86 +msgid "A static page (select below)" +msgstr "En statisk sida (välj nedan)" + +#: wp-admin/options-reading.php:109 +msgid "Posts page: %s" +msgstr "Inläggssida: %s" + +#: wp-admin/options-reading.php:124 +msgid "Warning: these pages should not be the same!" +msgstr "Varning: de här sidorna borde inte vara likadana!" + +#: wp-admin/options-reading.php:130 +msgid "Blog pages show at most" +msgstr "Inlägg per sida" + +#: wp-admin/options-reading.php:136 +msgid "Syndication feeds show the most recent" +msgstr "Syndikeringsflöden visar" + +#: wp-admin/options-reading.php:140 wp-admin/options-reading.php:141 +msgid "For each article in a feed, show" +msgstr "Inlägg i flödet visas som" + +#: wp-admin/options-reading.php:142 +msgid "Full text" +msgstr "Hel text" + +#: wp-admin/options-reading.php:143 +msgid "Summary" +msgstr "Sammanfattning" + +#: wp-admin/options-reading.php:58 +msgid "Encoding for pages and feeds" +msgstr "Teckenkodning för sidor och syndikering" + +#: wp-admin/options-writing.php:16 +msgid "Writing Settings" +msgstr "Skrivinställningar" + +#: wp-admin/options-writing.php:72 +msgid "Convert emoticons like :-) and :-P to graphics on display" +msgstr "Konvertera :-) och :-P till bild-smileys." + +#: wp-admin/options-writing.php:73 +msgid "WordPress should correct invalidly nested XHTML automatically" +msgstr "WordPress skall automatiskt korrigera felaktig XHTML" + +#: wp-admin/options-writing.php:78 +msgid "Default Post Category" +msgstr "Standardkategori för inlägg" + +#: wp-admin/options-writing.php:112 +msgid "Default Link Category" +msgstr "Standardkategori för länk" + +#: wp-admin/options-writing.php:140 +msgid "Post via email" +msgstr "Inlägg via e-post" + +#. translators: 1, 2, 3: examples of random email addresses +#: wp-admin/options-writing.php:145 +msgid "To post to WordPress by email you must set up a secret email account with POP3 access. Any mail received at this address will be posted, so it’s a good idea to keep this address very secret. Here are three random strings you could use: %1$s, %2$s, %3$s." +msgstr "För att skriva inlägg i WordPress per e-post måste du ha satt upp en hemlig e-postadress med POP3-åtkomst. Alla e-postmeddelanden som kommer till denna adress publiceras, så det är mycket viktigt att hålla e-postadressen väldigt hemlig. Här är tre slumpmässiga strängar du kan använda: %1$s, %2$s, %3$s." + +#: wp-admin/options-writing.php:155 +msgid "Mail Server" +msgstr "E-postserver" + +#: wp-admin/options-writing.php:157 +msgid "Port" +msgstr "Port" + +#: wp-admin/options-writing.php:162 +msgid "Login Name" +msgstr "Användarnamn" + +#: wp-admin/options-writing.php:172 +msgid "Default Mail Category" +msgstr "Förvald e-postkategori" + +#: wp-admin/options-writing.php:44 wp-admin/options-writing.php:201 +msgid "Update Services" +msgstr "Uppdateringstjänster" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:107 +msgctxt "Plugin Installer" +msgid "Featured" +msgstr "Utvalda" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:108 +msgctxt "Plugin Installer" +msgid "Popular" +msgstr "Populära" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:492 +#: wp-admin/includes/class-wp-plugins-list-table.php:645 +msgid "Network Deactivate" +msgstr "Inaktivera för nätverk" + +#: wp-admin/includes/class-wp-plugins-list-table.php:855 +msgid "Visit plugin site" +msgstr "Besök tilläggets webbplats" + +#: wp-admin/includes/class-wp-plugins-list-table.php:535 +msgid "Clear List" +msgstr "Rensa lista" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:433 +msgctxt "plugins" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Alla (%s)" +msgstr[1] "Alla (%s)" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:437 +msgid "Active (%s)" +msgid_plural "Active (%s)" +msgstr[0] "Aktivt (%s)" +msgstr[1] "Aktiva (%s)" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:441 +msgid "Recently Active (%s)" +msgid_plural "Recently Active (%s)" +msgstr[0] "Nyligen aktivt (%s)" +msgstr[1] "Nyligen aktiva (%s)" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:445 +msgid "Inactive (%s)" +msgid_plural "Inactive (%s)" +msgstr[0] "Inaktivt (%s)" +msgstr[1] "Inaktiva (%s)" + +#: wp-admin/includes/class-wp-plugins-list-table.php:359 +msgid "No plugins found." +msgstr "Inga tillägg funna." + +#: wp-admin/edit-tags.php:160 wp-admin/edit-tags.php:180 wp-admin/post.php:118 +#: wp-admin/term.php:26 +msgid "You attempted to edit an item that doesn’t exist. Perhaps it was deleted?" +msgstr "Du försökte redigera en post som inte existerar. Den har kanske raderats?" + +#: wp-admin/edit-tags.php:173 wp-admin/includes/post.php:1918 +#: wp-admin/includes/class-wp-screen.php:285 wp-admin/async-upload.php:48 +#: wp-admin/post.php:20 wp-admin/post.php:46 wp-admin/post.php:130 +#: wp-admin/term.php:38 wp-admin/media-upload.php:47 +msgid "Sorry, you are not allowed to edit this item." +msgstr "Du har inte behörighet att redigera det här objektet." + +#: wp-admin/includes/theme.php:752 wp-admin/themes.php:563 +msgid "Tags:" +msgstr "Taggar:" + +#: wp-admin/includes/theme.php:716 wp-admin/themes.php:545 +msgid "Current Theme" +msgstr "Nuvarande tema" + +#: wp-admin/includes/class-wp-themes-list-table.php:199 +msgid "" +"You are about to delete this theme '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Du håller på att ta bort detta tema ”%s”\n" +" ”Avbryt” för att stoppa, ”OK” för att ta bort." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:114 +#: wp-admin/update.php:151 wp-admin/plugin-install.php:134 +msgid "Upload Plugin" +msgstr "Ladda upp tillägg" + +#: wp-admin/edit-tags.php:137 wp-admin/options.php:78 +msgid "Sorry, you are not allowed to delete these items." +msgstr "Du har inte behörighet att radera de här objekten." + +#: wp-admin/includes/class-wp-plugins-list-table.php:621 +msgid "Inactive:" +msgstr "Inaktivt:" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:449 +msgid "Must-Use (%s)" +msgid_plural "Must-Use (%s)" +msgstr[0] "Obligatoriskt (%s)" +msgstr[1] "Obligatoriska (%s)" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:453 +msgid "Drop-in (%s)" +msgid_plural "Drop-ins (%s)" +msgstr[0] "Insticksprogram (%s)" +msgstr[1] "Insticksprogram (%s)" + +#. translators: %s: Title of an update +#: wp-admin/includes/class-bulk-upgrader-skin.php:45 +msgid "The update of %s failed." +msgstr "Uppdateringen av %s misslyckades." + +#: wp-admin/options-reading.php:35 wp-admin/options-reading.php:148 +#: wp-admin/options-reading.php:149 wp-admin/install.php:183 +#: wp-admin/install.php:186 +msgid "Site Visibility" +msgstr "Webbplatsens synlighet" + +#: wp-admin/options-reading.php:137 +msgid "items" +msgstr "poster" + +#: wp-admin/includes/class-wp-themes-list-table.php:117 +msgid "Only the current theme is available to you. Contact the %s administrator for information about accessing additional themes." +msgstr "Endast det aktiva temat är tillgängligt för dig. Kontakta %s administratören för information om möjligheten att aktivera fler teman." + +#: wp-admin/link-manager.php:57 +msgid "You can customize the display of this screen using the Screen Options tab and/or the dropdown filters above the links table." +msgstr "Du kan ändra hur denna sida visas under fliken Panelinställningar och/eller via rullgardinsmenyerna för filtrering ovanför tabellen." + +#. translators: %s: plugin name +#. translators: %s: plugin name and version +#. translators: %s: Importer name +#: wp-admin/includes/class-wp-plugins-list-table.php:847 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:613 +#: wp-admin/import.php:203 +msgid "More information about %s" +msgstr "Mer information om %s" + +#. translators: %s: Title of an update +#: wp-admin/includes/class-bulk-upgrader-skin.php:47 +msgid "%s updated successfully." +msgstr "%s har uppdaterats utan problem." + +#: wp-admin/includes/class-bulk-upgrader-skin.php:154 +msgid "Show details." +msgstr "Visa detaljer." + +#: wp-admin/includes/class-wp-debug-data.php:177 +#: wp-admin/includes/class-wp-debug-data.php:182 +#: wp-admin/includes/class-wp-debug-data.php:191 +#: wp-admin/includes/class-wp-debug-data.php:200 +#: wp-admin/includes/class-wp-debug-data.php:209 +#: wp-admin/includes/class-wp-debug-data.php:249 +#: wp-admin/includes/class-wp-debug-data.php:254 +#: wp-admin/includes/class-wp-debug-data.php:264 +#: wp-admin/includes/class-wp-debug-data.php:269 +msgid "Enabled" +msgstr "Aktiverat" + +#: wp-admin/edit-tags.php:270 +msgid "When adding a new tag on this screen, you’ll fill in the following fields:" +msgstr "När du lägger till en tagg på den här sidan så fyller du i följande fält:" + +#: wp-admin/edit-tags.php:245 +msgid "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." +msgstr "Du kan använda kategorier för att definiera sektioner av din webbplats och gruppera relaterande inlägg. Standardkategorin är ”Okategoriserade” tills att du ändrar det i dina skrivinställningar. " + +#: wp-admin/edit-tags.php:255 +msgid "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." +msgstr "Vad är skillnaden mellan kategorier och taggar? Normalt är taggar särskilda-nyckelord som identifierar viktig information i ditt inlägg (namn, ämnen, osv.) som kan eller inte kan återkomma i andra inlägg, medan kategorier är förutbestämda sektioner. Om du tänker på din webbplats som en bok, kategorierna är som innehållsförteckningen och taggarna är som termerna i indexet." + +#: wp-admin/edit-tags.php:286 +msgid "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." +msgstr "Du kan ändra hur denna sida visas under fliken Panelinställningar, hur många poster som visas per sida och för att gömma/vissa kolumner i tabellen." + +#: wp-admin/edit-tags.php:284 +msgid "Description — The description is not prominent by default; however, some themes may display it." +msgstr "Beskrivning — Beskrivningen visas inte som standard, men vissa tema kanske väljer att framhäva dessa." + +#: wp-admin/edit-tags.php:274 +msgid "Name — The name is how it appears on your site." +msgstr "Namn — Namnet är hur det visas på din sida." + +#: wp-admin/edit-tags.php:268 +msgid "When adding a new category on this screen, you’ll fill in the following fields:" +msgstr "När du lägger till en ny kategori på den här sidan så fyller du i följande fält:" + +#: wp-admin/includes/class-bulk-upgrader-skin.php:48 +msgid "All updates have been completed." +msgstr "Alla uppdateringar har genomförts." + +#: wp-admin/options-reading.php:25 +msgid "This screen contains the settings that affect the display of your content." +msgstr "Den här sidan innehåller de inställningar som påverkar visningen av ditt innehåll." + +#: wp-admin/options-reading.php:28 wp-admin/options-writing.php:24 +#: wp-admin/options-general.php:36 wp-admin/options-permalink.php:25 +#: wp-admin/options-permalink.php:36 wp-admin/options-permalink.php:45 +#: wp-admin/options-media.php:25 wp-admin/options-discussion.php:25 +msgid "You must click the Save Changes button at the bottom of the screen for new settings to take effect." +msgstr "Du måste klicka på knappen Spara ändringar längst ner på sidan för att de nya inställningarna ska börja gälla." + +#: wp-admin/edit-tags.php:596 +msgid "Categories can be selectively converted to tags using the category to tag converter." +msgstr "Kategorier kan selektivt konverteras till taggar med kategori till tagg-konverteraren." + +#: wp-admin/includes/class-plugin-installer-skin.php:73 +msgid "Return to Importers" +msgstr "Återgå till importörer" + +#: wp-admin/includes/class-plugin-installer-skin.php:60 +msgid "Activate Plugin & Run Importer" +msgstr "Aktivera tillägget & kör importering" + +#: wp-admin/link-manager.php:55 +msgid "You can add links here to be displayed on your site, usually using Widgets. By default, links to several sites in the WordPress community are included as examples." +msgstr "Du kan lägga till länkar här för visning på din webbplats, vanligtvis genom att använda widgetar. Som standard så inkluderas ett antal länkar till webbplatser i WordPress-communityn för att ge exempel." + +#: wp-admin/link-manager.php:65 +msgid "If you delete a link, it will be removed permanently, as Links do not have a Trash function yet." +msgstr "Om du raderar en länk så kommer den att tas bort permanent då länkar inte har någon papperskorgsfunktion än." + +#: wp-admin/edit-tags.php:277 +msgid "Slug — The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "Permalänk — ”Permalänken” är den URL-vänliga versionen av namnet. Dessa anges oftast bara med gemener och innehåller endast bokstäver, siffror och bindestreck." + +#: wp-admin/includes/theme.php:200 wp-admin/includes/update.php:412 +#: wp-admin/includes/update.php:585 +msgid "There is a new version of %1$s available. View version %4$s details." +msgstr "En ny version av %1$s finns tillgänglig. Visa detaljer för version %4$s." + +#: wp-admin/includes/theme.php:280 +msgid "Editor Style" +msgstr "Stilmall för redigerare" + +#: wp-admin/includes/class-plugin-upgrader.php:55 +msgid "Plugin updated successfully." +msgstr "Tillägget uppdaterades utan problem." + +#: wp-admin/includes/class-wp-themes-list-table.php:100 +msgid "You only have one theme enabled for this site right now. Visit the Network Admin to enable or install more themes." +msgstr "Du har bara ett tema aktiverat för att denna webbplats just nu. Besök nätverksadmin för att aktivera eller installera fler teman." + +#: wp-admin/includes/update.php:425 +msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin." +msgstr "Det finns en ny version av %1$s tillgänglig. Visa detaljer för version %4$s. Automatisk uppdatering för detta tillägg finns inte tillgänglig." + +#: wp-admin/includes/class-plugin-upgrader.php:54 +#: wp-admin/includes/ajax-actions.php:4217 +#: wp-admin/includes/ajax-actions.php:4244 +msgid "Plugin update failed." +msgstr "Uppdateringen av tillägg misslyckades." + +#: wp-admin/includes/class-theme-upgrader.php:53 +msgid "Theme update failed." +msgstr "Uppdatering av tema misslyckades." + +#: wp-admin/includes/class-theme-upgrader.php:54 +msgid "Theme updated successfully." +msgstr "Tema uppdaterades utan problem." + +#: wp-admin/includes/theme.php:213 wp-admin/includes/update.php:598 +msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme." +msgstr "En ny version av %1$s är tillgänglig. Visa detaljer för version %4$s. Automatisk uppdatering är ej tillgängligt för detta tema." + +#: wp-admin/includes/class-plugin-upgrader.php:48 +#: wp-admin/includes/class-theme-upgrader.php:47 +#: wp-admin/includes/class-core-upgrader.php:31 +#: wp-admin/includes/class-language-pack-upgrader.php:115 +msgid "Update package not available." +msgstr "Uppdateringspaketet ej tillgängligt." + +#: wp-admin/options-writing.php:98 +msgid "Default Post Format" +msgstr "Inläggsformat standard" + +#: wp-admin/includes/class-wp-themes-list-table.php:104 +msgid "You only have one theme enabled for this site right now. Visit the Network Admin to enable more themes." +msgstr "Du har bara ett tema aktiverat för att denna webbplats just nu. Besök nätverksadmin för att aktivera fler teman." + +#: wp-admin/includes/class-wp-themes-list-table.php:111 +msgid "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." +msgstr "Du har bara ett tema installerat just nu. Leva lite! Du kan välja mellan över 1000 gratis teman i temakatalogen på WordPress.org när som helst: klicka bara på installera teman ovan." + +#: wp-admin/includes/theme.php:284 +msgid "Full Width Template" +msgstr "Fullbreddsmall " + +#: wp-admin/credits.php:148 +msgid "Lead Developer" +msgstr "Utvecklingsledare" + +#: wp-admin/credits.php:84 +msgctxt "Translate this to be the equivalent of English Translators in your language for the credits page Translators section" +msgid "Translators" +msgstr "Svenska översättare" + +#: wp-admin/includes/theme.php:290 wp-admin/includes/theme.php:324 +#: wp-admin/includes/class-wp-screen.php:1160 wp-admin/index.php:68 +msgid "Layout" +msgstr "Layout" + +#. translators: %s: https://make.wordpress.org +#: wp-admin/credits.php:76 +msgid "Want to see your name in lights on this page? Get involved in WordPress." +msgstr "Vill du se ditt namn i neon på denna sida? Engagera dig i WordPress." + +#: wp-admin/credits.php:13 wp-admin/credits.php:47 wp-admin/freedoms.php:61 +#: wp-admin/about.php:46 +msgid "Credits" +msgstr "Erkännanden" + +#: wp-admin/credits.php:147 +msgid "Cofounder, Project Lead" +msgstr "Grundare, projektledare" + +#. translators: %s: The current WordPress version number +#: wp-admin/credits.php:145 +msgid "Core Contributors to WordPress %s" +msgstr "Bidragslämnare för kärnan till WordPress %s" + +#. translators: %s: wp-content directory name +#: wp-admin/includes/class-wp-plugins-list-table.php:545 +msgid "Drop-ins are advanced plugins in the %s directory that replace WordPress functionality when present." +msgstr "Insticksprogram (drop-in) är avancerade tillägg i katalogen %s som, när de förekommer, ersätter funktionalitet i WordPress." + +#: wp-admin/credits.php:48 wp-admin/freedoms.php:12 wp-admin/freedoms.php:62 +#: wp-admin/freedoms.php:89 wp-admin/about.php:47 +msgid "Freedoms" +msgstr "Friheterna" + +#. translators: 1: https://wordpress.org/about/, 2: https://make.wordpress.org +#: wp-admin/credits.php:61 +msgid "WordPress is created by a worldwide team of passionate individuals. Get involved in WordPress." +msgstr "WordPress är skapat av ett globalt team av passionerade individer. Engagera dig i WordPress." + +#: wp-admin/credits.php:143 +msgid "Project Leaders" +msgstr "Projektledare" + +#: wp-admin/edit-tags.php:433 +#: wp-admin/includes/class-wp-terms-list-table.php:182 +#: wp-admin/includes/class-wp-terms-list-table.php:627 +#: wp-admin/edit-tag-form.php:132 +msgctxt "term name" +msgid "Name" +msgstr "Namn" + +#: wp-admin/includes/theme.php:285 wp-admin/includes/meta-boxes.php:455 +msgid "Post Formats" +msgstr "Inläggsformat" + +#: wp-admin/credits.php:153 +msgid "External Libraries" +msgstr "Externa bibliotek" + +#: wp-admin/includes/theme.php:281 +msgid "Featured Image Header" +msgstr "Utvald sidhuvudsbild" + +#: wp-admin/includes/theme.php:282 +msgid "Featured Images" +msgstr "Utvalda bilder" + +#: wp-admin/options-reading.php:155 wp-admin/install.php:194 +msgid "Note: Neither of these options blocks access to your site — it is up to search engines to honor your request." +msgstr "Notera: Inget av dessa alternativ blockerar åtkomst till din webbplats - det är upp till sökmotorer att tillmötesgå din begäran." + +#: wp-admin/includes/class-wp-debug-data.php:67 +#: wp-admin/options-general.php:165 +msgid "Site Language" +msgstr "Webbplatsspråk" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:461 +msgid "Update Available (%s)" +msgid_plural "Update Available (%s)" +msgstr[0] "Uppdatering tillgänglig (%s)" +msgstr[1] "Uppdateringar tillgängliga (%s)" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:492 +#: wp-admin/includes/class-wp-plugins-list-table.php:669 +msgid "Deactivate" +msgstr "Inaktivera" + +#. translators: %s: The current WordPress version number +#. translators: %s: Plugin version number. +#. translators: %s: Theme version number. +#. translators: %s: plugin version number +#. translators: %s: Plugin version +#: wp-admin/credits.php:41 wp-admin/includes/class-wp-debug-data.php:789 +#: wp-admin/includes/class-wp-debug-data.php:827 +#: wp-admin/includes/class-wp-debug-data.php:940 +#: wp-admin/includes/class-wp-plugins-list-table.php:825 +#: wp-admin/includes/update.php:210 wp-admin/includes/update.php:240 +#: wp-admin/includes/ajax-actions.php:4183 +#: wp-admin/includes/ajax-actions.php:4226 wp-admin/freedoms.php:55 +#: wp-admin/about.php:40 +msgid "Version %s" +msgstr "Version %s" + +#. translators: %s: Plugin author name. +#. translators: %s: Theme author name. +#. translators: %s: plugin version number +#. translators: %s: theme author +#. translators: %s: Theme author name +#: wp-admin/includes/class-wp-debug-data.php:783 +#: wp-admin/includes/class-wp-debug-data.php:821 +#: wp-admin/includes/class-wp-debug-data.php:934 +#: wp-admin/includes/class-wp-themes-list-table.php:225 +#: wp-admin/includes/theme.php:719 +#: wp-admin/includes/class-wp-plugins-list-table.php:833 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:502 +#: wp-admin/includes/class-wp-theme-install-list-table.php:355 +#: wp-admin/includes/class-wp-theme-install-list-table.php:487 +#: wp-admin/themes.php:329 wp-admin/themes.php:493 wp-admin/themes.php:548 +#: wp-admin/theme-install.php:273 wp-admin/theme-install.php:328 +msgid "By %s" +msgstr "Av %s" + +#: wp-admin/options-reading.php:24 wp-admin/edit-tags.php:261 +#: wp-admin/link-manager.php:53 wp-admin/options-writing.php:22 +#: wp-admin/includes/ms.php:1156 wp-admin/includes/class-wp-screen.php:816 +#: wp-admin/my-sites.php:43 wp-admin/options-general.php:41 +#: wp-admin/comment.php:47 wp-admin/theme-editor.php:27 +#: wp-admin/plugin-editor.php:123 wp-admin/nav-menus.php:546 +#: wp-admin/nav-menus.php:587 wp-admin/update-core.php:635 +#: wp-admin/options-permalink.php:22 wp-admin/user-new.php:233 +#: wp-admin/index.php:42 wp-admin/plugins.php:437 wp-admin/themes.php:103 +#: wp-admin/edit-comments.php:180 wp-admin/media.php:84 +#: wp-admin/revision.php:133 wp-admin/upload.php:54 wp-admin/upload.php:223 +#: wp-admin/edit-form-advanced.php:315 wp-admin/custom-background.php:88 +#: wp-admin/import.php:23 wp-admin/widgets.php:55 wp-admin/options-media.php:30 +#: wp-admin/edit-link-form.php:64 wp-admin/user-edit.php:60 +#: wp-admin/users.php:32 wp-admin/media-new.php:48 +#: wp-admin/theme-install.php:110 wp-admin/options-discussion.php:23 +#: wp-admin/edit.php:214 wp-admin/edit.php:267 wp-admin/plugin-install.php:84 +#: wp-admin/export.php:49 wp-admin/custom-header.php:97 +msgid "Overview" +msgstr "Översikt" + +#. translators: %s: plugin name +#: wp-admin/includes/theme.php:768 +#: wp-admin/includes/class-wp-theme-install-list-table.php:478 +#: wp-admin/includes/deprecated.php:1381 wp-admin/theme-install.php:299 +#: wp-admin/theme-install.php:319 +msgid "Install" +msgstr "Installera" + +#: wp-admin/options-reading.php:42 wp-admin/edit-tags.php:297 +#: wp-admin/link-manager.php:70 wp-admin/options-writing.php:51 +#: wp-admin/includes/ms.php:1174 wp-admin/my-sites.php:50 +#: wp-admin/options-general.php:47 wp-admin/comment.php:55 +#: wp-admin/theme-editor.php:50 wp-admin/plugin-editor.php:140 +#: wp-admin/nav-menus.php:594 wp-admin/update-core.php:656 +#: wp-admin/options-permalink.php:50 wp-admin/user-new.php:254 +#: wp-admin/index.php:106 wp-admin/plugins.php:463 wp-admin/themes.php:143 +#: wp-admin/edit-comments.php:200 wp-admin/media.php:94 +#: wp-admin/revision.php:138 wp-admin/upload.php:74 wp-admin/upload.php:248 +#: wp-admin/edit-form-advanced.php:289 wp-admin/edit-form-advanced.php:306 +#: wp-admin/edit-form-advanced.php:325 wp-admin/custom-background.php:98 +#: wp-admin/tools.php:34 wp-admin/import.php:30 wp-admin/widgets.php:82 +#: wp-admin/options-media.php:36 wp-admin/edit-link-form.php:73 +#: wp-admin/user-edit.php:66 wp-admin/users.php:73 wp-admin/media-new.php:59 +#: wp-admin/theme-install.php:128 wp-admin/options-discussion.php:30 +#: wp-admin/edit.php:258 wp-admin/edit.php:283 wp-admin/plugin-install.php:104 +#: wp-admin/export.php:56 wp-admin/custom-header.php:128 +msgid "For more information:" +msgstr "För mer information:" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-links-list-table.php:88 +#: wp-admin/includes/class-wp-links-list-table.php:323 +#: wp-admin/includes/class-wp-themes-list-table.php:200 +#: wp-admin/includes/theme.php:763 +#: wp-admin/includes/class-wp-plugins-list-table.php:500 +#: wp-admin/includes/class-wp-plugins-list-table.php:654 +#: wp-admin/includes/class-wp-plugins-list-table.php:683 +#: wp-admin/includes/meta-boxes.php:1030 +#: wp-admin/includes/class-wp-terms-list-table.php:159 +#: wp-admin/includes/class-wp-terms-list-table.php:478 +#: wp-admin/includes/class-wp-users-list-table.php:249 +#: wp-admin/includes/class-wp-users-list-table.php:432 +#: wp-admin/includes/media.php:1605 wp-admin/includes/widgets.php:286 +#: wp-admin/includes/template.php:625 wp-admin/themes.php:434 +#: wp-admin/themes.php:585 wp-admin/widgets.php:349 +#: wp-admin/edit-tag-form.php:278 +msgid "Delete" +msgstr "Ta bort" + +#. translators: 1: Theme name. 2: Theme slug. +#: wp-admin/includes/class-wp-debug-data.php:955 +msgid "%1$s (%2$s)" +msgstr "%1$s (%2$s)" + +#: wp-admin/options-writing.php:23 +msgid "You can submit content in several different ways; this screen holds the settings for all of them. The top section controls the editor within the dashboard, while the rest control external publishing methods. For more information on any of these methods, use the documentation links." +msgstr "Du kan posta innehåll på flera olika sätt. Den här sidan innehåller inställningarna för alla dessa. Den övre sektionen kontrollerar redigeraren för dessa administrationssidor och resterande inställningar externa publiceringsmetoder. För mer information för dessa metoder, använd dokumentationslänkarna." + +#: wp-admin/options-writing.php:33 +msgid "Post Via Email" +msgstr "Skriv inlägg via e-post" + +#: wp-admin/edit-tags.php:247 +msgid "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." +msgstr "Du kan skapa grupper av länkar med hjälp av Länkkategorier. Länkkategori måste vara unika och är skilda från de kategorier som du använder för inlägg." + +#: wp-admin/edit-tags.php:249 +msgid "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." +msgstr "Du kan tilldela sökord till dina inlägg med taggar. Till skillnad från kategorier, har taggar ingen hierarki, dvs. det finns ingen relation mellan en tagg till en annan." + +#: wp-admin/link-manager.php:63 +msgid "Deleting Links" +msgstr "Radera länkar" + +#: wp-admin/options-writing.php:45 +msgid "If desired, WordPress will automatically alert various services of your new posts." +msgstr "Om du vill så kan WordPress automatiskt skicka notifikationer till diverse tjänster när du postar nya inlägg." + +#: wp-admin/link-manager.php:56 +msgid "Links may be separated into Link Categories; these are different than the categories used on your posts." +msgstr "Länkar kan delas upp i länkkategorier, dessa är annorlunda mot de kategorier som används för dina inlägg." + +#: wp-admin/edit-tags.php:291 +msgid "Adding Categories" +msgstr "Lägga till kategorier" + +#: wp-admin/edit-tags.php:291 +msgid "Adding Tags" +msgstr "Lägga till taggar" + +#: wp-admin/credits.php:46 wp-admin/freedoms.php:60 wp-admin/about.php:45 +msgid "What’s New" +msgstr "Vad är nytt" + +#: wp-admin/includes/class-plugin-upgrader.php:70 +msgid "The plugin contains no files." +msgstr "Tillägget innehåller inga filer." + +#: wp-admin/includes/class-plugin-upgrader.php:370 +msgid "No valid plugins were found." +msgstr "Inget giltigt tillägg hittades." + +#: wp-admin/credits.php:72 +msgid "WordPress is created by a worldwide team of passionate individuals." +msgstr "WordPress är skapat av ett världsomspännande team av passionerade individer." + +#: wp-admin/credits.php:152 +msgid "Core Developer" +msgstr "Kärnutvecklare" + +#: wp-admin/options-writing.php:34 +msgid "Post via email settings allow you to send your WordPress installation an email with the content of your post. You must set up a secret email account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret." +msgstr "Inställningar för publicera via e-post ger dig möjligheten att publicera inlägg genom att skicka e-post till din installation av WordPress. För att skriva inlägg i WordPress via e-post måste du först skapa en hemlig e-postadress med POP3-åtkomst. Alla e-postmeddelanden som kommer till denna adress publiceras, så det finns god anledning att hålla e-postadressen väldigt hemlig." + +#: wp-admin/includes/image-edit.php:244 +msgid "There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor." +msgstr "Det finns icke sparade ändringar som kommer att gå förlorade. 'OK' för att fortsätta, 'Avbryt' för att återgå till bildredigeraren." + +#: wp-admin/includes/class-wp-debug-data.php:755 wp-admin/setup-config.php:161 +msgid "Database name" +msgstr "Databasens namn" + +#: wp-admin/includes/class-wp-debug-data.php:749 wp-admin/setup-config.php:164 +msgid "Database host" +msgstr "Databasvärd" + +#. translators: %s: plugin count +#: wp-admin/includes/class-wp-plugins-list-table.php:457 +msgid "Paused (%s)" +msgid_plural "Paused (%s)" +msgstr[0] "Aktiverat (%s)" +msgstr[1] "Aktiverade (%s)" + +#: wp-admin/includes/class-wp-debug-data.php:172 +#: wp-admin/includes/class-wp-debug-data.php:182 +#: wp-admin/includes/class-wp-debug-data.php:191 +#: wp-admin/includes/class-wp-debug-data.php:200 +#: wp-admin/includes/class-wp-debug-data.php:209 +#: wp-admin/includes/class-wp-debug-data.php:249 +#: wp-admin/includes/class-wp-debug-data.php:254 +#: wp-admin/includes/class-wp-debug-data.php:264 +#: wp-admin/includes/class-wp-debug-data.php:269 +msgid "Disabled" +msgstr "Inaktiverat" + +#. Plugin Name of the plugin +msgid "Hello Dolly" +msgstr "Hello Dolly" + +#. Description of the plugin +msgid "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from Hello, Dolly in the upper right of your admin screen on every page." +msgstr "Detta är inte bara ett tillägg, det symboliserar hopp och entusiasm för en hel generation summerat i två ord, mest känt vokaliserat av Louis Armstrong: Hello, Dolly. När aktiverat så visas slumpvalda delar av texten från Hello, Dolly uppe i det högra hörnet av din adminpanel." + +#. Author of the plugin +msgid "Matt Mullenweg" +msgstr "Matt Mullenweg" + +#. Author URI of the plugin +msgid "http://ma.tt/" +msgstr "http://ma.tt/" + +#: wp-admin/includes/theme.php:226 wp-admin/includes/update.php:439 +#: wp-admin/includes/update.php:611 +msgid "There is a new version of %1$s available. View version %4$s details or update now." +msgstr "Det finns en ny version tillgänglig av %1$s. Visa detaljer för version %4$s eller uppdatera nu." + +#: wp-admin/includes/class-theme-upgrader.php:73 +msgid "This theme requires a parent theme. Checking if it is installed…" +msgstr "Detta tema kräver ett modertema. Kontrollerar om det finns installerat…" + +#. translators: 1: theme name, 2: version +#: wp-admin/includes/class-theme-upgrader.php:75 +msgid "Preparing to install %1$s %2$s…" +msgstr "Förbereder installation av %1$s %2$s…" + +#. translators: 1: theme name, 2: version +#: wp-admin/includes/class-theme-upgrader.php:77 +msgid "The parent theme, %1$s %2$s, is currently installed." +msgstr "Modertemat, %1$s %2$s, är installerat." + +#. translators: 1: theme name, 2: version +#: wp-admin/includes/class-theme-upgrader.php:79 +msgid "Successfully installed the parent theme, %1$s %2$s." +msgstr "Modertemat har installerats, %1$s %2$s." + +#. translators: %s: theme name +#: wp-admin/includes/class-theme-upgrader.php:81 +msgid "The parent theme could not be found. You will need to install the parent theme, %s, before you can use this child theme." +msgstr "Modertemat kunde inte hittas. Du behöver installera modertemat, %s, innan du kan använda detta barntema." + +#: wp-admin/includes/class-wp-debug-data.php:62 +#: wp-admin/includes/class-wp-debug-data.php:879 +msgid "Version" +msgstr "Version" + +#: wp-admin/includes/class-wp-plugins-list-table.php:404 +msgid "Plugin" +msgstr "Tillägg" + +#: wp-admin/includes/class-wp-themes-list-table.php:239 +#: wp-admin/includes/class-wp-theme-install-list-table.php:504 +#: wp-admin/includes/plugin-install.php:634 +msgid "Version:" +msgstr "Version:" + +#: wp-admin/includes/image-edit.php:75 +msgid "Scale" +msgstr "Skala" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:597 +msgctxt "plugin" +msgid "Installed" +msgstr "Installerat" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:110 +msgctxt "Plugin Installer" +msgid "Favorites" +msgstr "Favoriter" + +#: wp-admin/options-reading.php:27 +msgid "You can also control the display of your content in RSS feeds, including the maximum number of posts to display and whether to show full text or a summary." +msgstr "Du kan även kontrollera visningen av innehållet i dina RSS-flöden, inklusive maximalt antal inlägg att visa och om de ska visas fullständiga eller som utdrag." + +#: wp-admin/options-reading.php:35 wp-admin/options-reading.php:148 +#: wp-admin/options-reading.php:149 wp-admin/install.php:183 +#: wp-admin/install.php:186 +msgid "Search Engine Visibility" +msgstr "Synlighet i sökmotorer" + +#: wp-admin/options-reading.php:152 wp-admin/install.php:191 +msgid "Allow search engines to index this site" +msgstr "Tillåt sökmotorer att indexera denna webbplats" + +#: wp-admin/options-reading.php:154 wp-admin/options-reading.php:174 +#: wp-admin/install.php:193 wp-admin/install.php:201 +msgid "Discourage search engines from indexing this site" +msgstr "Be sökmotorer att inte indexera denna webbplats" + +#: wp-admin/options-reading.php:175 wp-admin/install.php:202 +msgid "It is up to search engines to honor this request." +msgstr "Det är upp till sökmotorerna att anamma denna begäran." + +#: wp-admin/includes/image-edit.php:278 wp-admin/includes/image-edit.php:346 +#: wp-admin/includes/image-edit.php:492 +msgid "$image needs to be an WP_Image_Editor object" +msgstr "$image måste vara ett WP_Image_Editor objekt" + +#: wp-admin/options-reading.php:36 +msgid "You can choose whether or not your site will be crawled by robots, ping services, and spiders. If you want those services to ignore your site, click the checkbox next to “Discourage search engines from indexing this site” and click the Save Changes button at the bottom of the screen. Note that your privacy is not complete; your site is still visible on the web." +msgstr "Du kan välja om din webbplats ska sökas igenom av olika indexeringstjänster eller inte. Om du vill att dessa tjänster ska ignorera din webbplats, markera valet ”Be sökmotorer att inte indexera denna webbplats” och klicka sedan på knappen Spara ändringar längst ner på sidan. Notera att detta inte gör din sida helt privat, den kan fortfarande besökas som vanligt och är med andra ord synlig som vanligt på Internet." + +#: wp-admin/edit-tags.php:281 +msgid "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." +msgstr "Överordnade — Kategorier, till skillnad från taggar, kan placeras i hierarki. Du kanske har en Jazz-kategori och under denna har du en underkategori för Bebop och Storband. Det är helt valfritt. För att skapa en underkategori, välj en överordnad kategori i rullgardinsmenyn." + +#. translators: %s: URL of link manager plugin +#: wp-admin/includes/bookmark.php:323 +msgid "If you are looking to use the link manager, please install the Link Manager plugin." +msgstr "Om du vill använda länkhanteringen, vänligen installera tillägget Link Manager." + +#: wp-admin/includes/image-edit.php:211 +msgid "Image rotation is not supported by your web host." +msgstr "Rotering av bilder stöds inte av ditt webbhotell." + +#: wp-admin/includes/class-wp-debug-data.php:738 +msgid "Client version" +msgstr "Klientversion" + +#: wp-admin/includes/image-edit.php:114 +msgid "To crop the image, click on it and drag to make your selection." +msgstr "För att beskära bild, klicka på den och dra för att skapa din markering." + +#: wp-admin/includes/class-wp-debug-data.php:396 +#: wp-admin/includes/dashboard.php:1184 wp-admin/customize.php:150 +msgid "Loading…" +msgstr "Laddar…" + +#: wp-admin/includes/class-theme-upgrader.php:68 +msgid "The theme contains no files." +msgstr "Temat innehåller inga filer." + +#. Plugin URI of the plugin +msgid "http://wordpress.org/plugins/hello-dolly/" +msgstr "http://wordpress.org/plugins/hello-dolly/" + +#. translators: 1: version number, 2: theme name +#: wp-admin/includes/update.php:309 +msgid "WordPress %1$s running %2$s theme." +msgstr "WordPress %1$s med temat %2$s." + +#: wp-admin/includes/theme.php:740 wp-admin/themes.php:552 +msgid "Update Available" +msgstr "Uppdatering tillgänglig" + +#: wp-admin/includes/theme.php:701 wp-admin/themes.php:530 +msgid "Show previous theme" +msgstr "Visa föregående tema" + +#: wp-admin/includes/theme.php:702 wp-admin/themes.php:531 +msgid "Show next theme" +msgstr "Visa nästa tema" + +#: wp-admin/options-reading.php:37 +msgid "When this setting is in effect, a reminder is shown in the At a Glance box of the Dashboard that says, “Search Engines Discouraged,” to remind you that your site is not being crawled." +msgstr "När denna inställning används så visas en påminnelse i panelen 'I korthet' på adminpanelens startsida. Detta visas med texten ”Sökmotorer undanbedes”, för att påminna dig om att din webbplats inte kommer att indexeras. " + +#: wp-admin/includes/theme.php:275 +msgid "Accessibility Ready" +msgstr "Tillgänglighetsanpassat" + +#: wp-admin/includes/theme.php:746 wp-admin/themes.php:559 +msgid "This is a child theme of %s." +msgstr "Det här är ett barntema för %s." + +#. translators: %s: The current WordPress version number +#: wp-admin/credits.php:24 wp-admin/freedoms.php:38 wp-admin/about.php:23 +msgid "Welcome to WordPress %s" +msgstr "Välkommen till WordPress %s" + +#: wp-admin/credits.php:63 wp-admin/credits.php:77 +msgid "https://make.wordpress.org/" +msgstr "https://make.wordpress.org/" + +#: wp-admin/includes/image-edit.php:57 +msgid "You can proportionally scale the original image. For best results, scaling should be done before you crop, flip, or rotate. Images can only be scaled down, not up." +msgstr "Du kan skala originalbilden proportionellt. För bästa resultat bör skalning ske innan beskärning, vändning eller rotering. Bilder kan endast skalas ner, inte upp. " + +#: wp-admin/includes/image-edit.php:117 +msgid "The aspect ratio is the relationship between the width and height. You can preserve the aspect ratio by holding down the shift key while resizing your selection. Use the input box to specify the aspect ratio, e.g. 1:1 (square), 4:3, 16:9, etc." +msgstr "Bildförhållanden är relationen mellan bredd och höjd. Du kan bevara bildförhållandet genom att hålla nere shift-tangenten under tiden du ändrar storlek. Använd fältet för bildförhållande för att specificera detsamma, ex. 1:1 (fyrkant), 4:3, 16:9 osv." + +#: wp-admin/includes/image-edit.php:120 +msgid "Once you have made your selection, you can adjust it by entering the size in pixels. The minimum selection size is the thumbnail size as set in the Media settings." +msgstr "När du gjort din markering så kan du justera den genom att ange storleken i pixlar. Minsta markeringsstorlek är storleken som är satt för miniatyrer under mediainställningar." + +#: wp-admin/includes/image-edit.php:161 +msgid "You can edit the image while preserving the thumbnail. For example, you may wish to have a square thumbnail that displays just a section of the image." +msgstr "Du kan redigera bilden samtidigt som du bevarar miniatyren. Exempel, du kanske vill ha en fyrkantig miniatyr som endast visar en del av bilden." + +#: wp-admin/edit-tags.php:304 +msgid "Documentation on Tags" +msgstr "Dokumentation för etiketter" + +#: wp-admin/options-writing.php:52 +msgid "Documentation on Writing Settings" +msgstr "Dokumentation för skrivinställningar" + +#: wp-admin/edit-tags.php:302 +msgid "Documentation on Link Categories" +msgstr "Dokumentation för länkkategorier" + +#: wp-admin/edit-tags.php:300 +msgid "Documentation on Categories" +msgstr "Dokumentation för kategorier" + +#: wp-admin/options-reading.php:43 +msgid "Documentation on Reading Settings" +msgstr "Dokumentation för läsinställningar" + +#: wp-admin/link-manager.php:71 +msgid "Documentation on Managing Links" +msgstr "Dokumentation för hantering av länkar" + +#. translators: %s: Codex URL +#: wp-admin/options-writing.php:209 +msgid "When you publish a new post, WordPress automatically notifies the following site update services. For more about this, see Update Services on the Codex. Separate multiple service URLs with line breaks." +msgstr "När du publicerar ett nytt inlägg meddelar WordPress automatiskt följande uppdateringstjänster. För mer information om detta, se Update Services i dokumentationen. Ange en URL per rad." + +#: wp-admin/includes/class-plugin-upgrader.php:56 +msgid "Plugins updated successfully." +msgstr "Tillägg uppdaterade." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:733 +#: wp-admin/includes/plugin-install.php:668 +msgctxt "Active plugin installations" +msgid "%s+ Million" +msgid_plural "%s+ Million" +msgstr[0] "Över %s miljon " +msgstr[1] "Över %s miljoner" + +#: wp-admin/includes/theme.php:703 wp-admin/themes.php:532 +msgid "Close details dialog" +msgstr "Stäng detaljdialog" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:105 +msgctxt "Plugin Installer" +msgid "Beta Testing" +msgstr "Beta-testning" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:458 +msgctxt "Plugin installer group title" +msgid "Performance" +msgstr "Prestanda" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:459 +msgctxt "Plugin installer group title" +msgid "Social" +msgstr "Socialt" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:460 +msgctxt "Plugin installer group title" +msgid "Tools" +msgstr "Verktyg" + +#. translators: %s: plugin name and version +#. translators: %s: Importer name +#: wp-admin/includes/class-wp-plugin-install-list-table.php:526 +#: wp-admin/import.php:158 +msgid "Install %s now" +msgstr "Installera %s nu" + +#. translators: %s: theme name +#. translators: %s: plugin name +#. translators: %s: plugin name and version +#: wp-admin/includes/theme.php:239 wp-admin/includes/update.php:452 +#: wp-admin/includes/update.php:624 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:548 +msgid "Update %s now" +msgstr "Uppdatera %s nu" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:615 +msgid "More Details" +msgstr "Fler detaljer" + +#: wp-admin/includes/class-wp-plugins-list-table.php:849 +msgid "View details" +msgstr "Visa detaljer" + +#: wp-admin/credits.php:149 +msgid "Release Lead" +msgstr "Ledare för utgåvan" + +#: wp-admin/includes/translation-install.php:23 +msgid "Invalid translation type." +msgstr "Ogiltig översättningstyp." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:109 +msgctxt "Plugin Installer" +msgid "Recommended" +msgstr "Rekommenderade" + +#: wp-admin/includes/class-wp-links-list-table.php:131 +#: wp-admin/edit-link-form.php:112 +msgctxt "link name" +msgid "Name" +msgstr "Namn" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:747 +msgid "Untested with your version of WordPress" +msgstr "Inte testat med din version av WordPress" + +#: wp-admin/includes/class-wp-links-list-table.php:117 +#: wp-admin/includes/class-wp-posts-list-table.php:456 +msgid "Filter by category" +msgstr "Filtrera efter kategori" + +#: wp-admin/includes/update.php:755 +#: wp-admin/includes/class-wp-comments-list-table.php:680 +#: wp-admin/includes/class-wp-list-table.php:528 +#: wp-admin/includes/class-wp-list-table.php:1350 +msgid "Show more details" +msgstr "Visa fler detaljer" + +#. translators: %s: theme name +#: wp-admin/includes/class-theme-installer-skin.php:88 +#: wp-admin/includes/class-theme-upgrader-skin.php:78 +msgid "Live Preview “%s”" +msgstr "Förhandsvisning ”%s”" + +#: wp-admin/includes/class-wp-plugins-list-table.php:660 +msgid "Network Active" +msgstr "Aktivt för nätverk" + +#: wp-admin/includes/class-wp-plugins-list-table.php:664 +msgid "Network Only" +msgstr "Endast nätverk" + +#. translators: 1: Title of an update, 2: Error message +#: wp-admin/includes/class-bulk-upgrader-skin.php:43 +msgid "An error occurred while updating %1$s: %2$s" +msgstr "Ett fel uppstod vid uppdatering av %1$s: %2$s" + +#: wp-admin/includes/update.php:236 +msgid "Get Version %s" +msgstr "Hämta version %s" + +#: wp-admin/link-manager.php:77 +msgid "Links list" +msgstr "Länklista" + +#. translators: %s: mu-plugins directory name +#: wp-admin/includes/class-wp-plugins-list-table.php:539 +msgid "Files in the %s directory are executed automatically." +msgstr "Filer i mappen %s körs automatiskt." + +#. translators: 1: drop-in constant name, 2: wp-config.php +#: wp-admin/includes/class-wp-plugins-list-table.php:624 +msgid "Requires %1$s in %2$s file." +msgstr "Kräver %1$s i %2$s." + +#. translators: %s: style.css +#: wp-admin/includes/class-theme-upgrader.php:478 +msgid "The theme is missing the %s stylesheet." +msgstr "Temat saknar stilmallen %s." + +#. translators: %s: style.css +#: wp-admin/includes/class-theme-upgrader.php:498 +msgid "The %s stylesheet doesn’t contain a valid theme header." +msgstr "Stilmallen %s saknar giltigt informationshuvud." + +#. translators: %s: index.php +#: wp-admin/includes/class-theme-upgrader.php:511 +msgid "The theme is missing the %s file." +msgstr "Temat saknar filen %s." + +#. translators: %s: plugin search term +#: wp-admin/includes/class-wp-plugins-list-table.php:352 +msgid "No plugins found for “%s”." +msgstr "Inga tillägg funna för ”%s”." + +#: wp-admin/includes/class-wp-plugins-list-table.php:356 +msgid "Search for plugins in the WordPress Plugin Directory." +msgstr "Sök efter tillägg i WordPress tilläggskatalog." + +#: wp-admin/includes/image-edit.php:55 +msgid "Scale Image Help" +msgstr "Hjälp för skalning av bilder" + +#: wp-admin/includes/image-edit.php:65 +msgid "New dimensions:" +msgstr "Nya dimensioner:" + +#: wp-admin/includes/image-edit.php:67 +msgid "scale width" +msgstr "skalningsbredd" + +#: wp-admin/includes/image-edit.php:71 +msgid "scale height" +msgstr "skalningshöjd" + +#: wp-admin/includes/image-edit.php:111 +msgid "Image Crop Help" +msgstr "Hjälp för beskärning av bilder" + +#: wp-admin/includes/image-edit.php:127 +msgid "crop ratio width" +msgstr "bredd beskärningsförhållande" + +#: wp-admin/includes/image-edit.php:131 +msgid "crop ratio height" +msgstr "höjd beskärningsförhållande" + +#: wp-admin/includes/image-edit.php:140 +msgid "selection width" +msgstr "markeringsbredd" + +#: wp-admin/includes/image-edit.php:144 +msgid "selection height" +msgstr "markeringshöjd" + +#: wp-admin/includes/image-edit.php:160 +msgid "Thumbnail Settings Help" +msgstr "Hjälp för miniatyrinställningar" + +#: wp-admin/includes/theme.php:880 +msgid "Could not resume the theme." +msgstr "Det gick inte att återstarta temat." + +#. translators: 1: theme name, 2: version number +#. translators: 1: plugin name, 2: version number +#: wp-admin/includes/theme.php:206 wp-admin/includes/theme.php:219 +#: wp-admin/includes/theme.php:232 wp-admin/includes/update.php:418 +#: wp-admin/includes/update.php:431 wp-admin/includes/update.php:445 +#: wp-admin/includes/update.php:464 wp-admin/includes/update.php:591 +#: wp-admin/includes/update.php:604 wp-admin/includes/update.php:617 +#: wp-admin/update-core.php:336 +msgid "View %1$s version %2$s details" +msgstr "Visa detaljer för version %2$s av %1$s" + +#: wp-admin/credits.php:150 +msgid "Release Design Lead" +msgstr "Designansvarig för utgåvan" + +#: wp-admin/credits.php:151 +msgid "Release Deputy" +msgstr "Ställföreträdare för release" + +#: wp-admin/link-manager.php:12 wp-admin/link-manager.php:84 +#: wp-admin/includes/bookmark.php:32 wp-admin/includes/bookmark.php:326 +msgid "Sorry, you are not allowed to edit the links for this site." +msgstr "Du har inte behörighet att redigera länkar på den här webbplatsen." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:566 +msgctxt "plugin" +msgid "Active" +msgstr "Aktivt" + +#: wp-admin/includes/theme.php:291 +msgid "Grid Layout" +msgstr "Rutnätslayout" + +#: wp-admin/includes/theme.php:283 +msgid "Footer Widgets" +msgstr "Sidfotwidgetar" + +#: wp-admin/includes/theme.php:263 +msgid "Blog" +msgstr "Blogg" + +#: wp-admin/includes/theme.php:264 +msgid "E-Commerce" +msgstr "E-handel" + +#: wp-admin/includes/theme.php:265 +msgid "Education" +msgstr "Utbildning" + +#: wp-admin/includes/theme.php:266 +msgid "Entertainment" +msgstr "Underhållning" + +#: wp-admin/includes/theme.php:267 +msgid "Food & Drink" +msgstr "Mat & dryck" + +#: wp-admin/includes/theme.php:269 wp-admin/includes/dashboard.php:1153 +msgid "News" +msgstr "Nyheter" + +#: wp-admin/includes/theme.php:270 +msgid "Photography" +msgstr "Fotografi" + +#: wp-admin/includes/theme.php:271 +msgid "Portfolio" +msgstr "Portfolio" + +#. translators: 1: URL to WordPress release notes, 2: new WordPress version, 3: +#. URL to network admin, 4: accessibility text +#: wp-admin/includes/update.php:274 +msgid "WordPress %2$s is available! Please update now." +msgstr "WordPress %2$s är tillgängligt! Vänligen uppdatera nu." + +#: wp-admin/includes/update.php:278 +msgid "Please update WordPress now" +msgstr "Vänligen uppdatera WordPress nu" + +#. translators: 1: URL to WordPress release notes, 2: new WordPress version +#: wp-admin/includes/update.php:283 +msgid "WordPress %2$s is available! Please notify the site administrator." +msgstr "WordPress %2$s finns tillgängligt! Vänligen notifiera webbplatsens administratör." + +#. translators: %s: Number of plugins +#: wp-admin/includes/update.php:720 +msgid "%s plugin successfully updated." +msgstr "%s tillägg uppdaterades." + +#. translators: %s: Number of themes +#: wp-admin/includes/update.php:725 +msgid "%s theme successfully updated." +msgstr "%s tema uppdaterades." + +#. translators: %s: Number of plugins +#: wp-admin/includes/update.php:732 +msgid "%s plugins successfully updated." +msgstr "%s tillägg uppdaterades." + +#. translators: %s: Number of themes +#: wp-admin/includes/update.php:737 +msgid "%s themes successfully updated." +msgstr "%s teman uppdaterades." + +#. translators: %s: Theme name +#: wp-admin/includes/update.php:823 +msgctxt "theme" +msgid "%s was successfully deleted." +msgstr "%s har raderats." + +#: wp-admin/options-reading.php:13 wp-admin/options-writing.php:13 +#: wp-admin/options-general.php:16 wp-admin/options-permalink.php:13 +#: wp-admin/options-media.php:13 wp-admin/options-discussion.php:12 +msgid "Sorry, you are not allowed to manage options for this site." +msgstr "Du har inte behörighet att hantera inställningar för den här webbplatsen." + +#: wp-admin/includes/theme.php:279 +msgid "Custom Logo" +msgstr "Anpassad logotyp" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:645 +msgctxt "plugin" +msgid "Network Deactivate %s" +msgstr "Inaktivera %s för nätverket" + +#. translators: %s: Plugin name +#: wp-admin/includes/update.php:815 +msgctxt "plugin" +msgid "%s was successfully deleted." +msgstr "%s har raderats." + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:654 +#: wp-admin/includes/class-wp-plugins-list-table.php:683 +msgctxt "plugin" +msgid "Delete %s" +msgstr "Radera %s" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:669 +msgctxt "plugin" +msgid "Deactivate %s" +msgstr "Inaktivera %s" + +#: wp-admin/includes/class-wp-plugins-list-table.php:389 +msgid "Search installed plugins..." +msgstr "Sök bland installerade tillägg..." + +#. translators: %s: Number of failed updates +#: wp-admin/includes/update.php:747 +msgid "%s update failed." +msgstr "%s uppdatering misslyckades." + +#. translators: %s: Number of failed updates +#: wp-admin/includes/update.php:752 +msgid "%s updates failed." +msgstr "%s uppdateringar misslyckades." + +#: wp-admin/options-reading.php:44 wp-admin/edit-tags.php:307 +#: wp-admin/link-manager.php:72 wp-admin/options-writing.php:53 +#: wp-admin/my-sites.php:52 wp-admin/options-general.php:49 +#: wp-admin/comment.php:57 wp-admin/theme-editor.php:55 +#: wp-admin/plugin-editor.php:143 wp-admin/nav-menus.php:596 +#: wp-admin/update-core.php:658 wp-admin/options-permalink.php:53 +#: wp-admin/user-new.php:256 wp-admin/index.php:108 wp-admin/plugins.php:465 +#: wp-admin/themes.php:145 wp-admin/edit-comments.php:204 wp-admin/media.php:96 +#: wp-admin/revision.php:140 wp-admin/upload.php:76 wp-admin/upload.php:250 +#: wp-admin/edit-form-advanced.php:291 wp-admin/edit-form-advanced.php:309 +#: wp-admin/edit-form-advanced.php:327 wp-admin/custom-background.php:100 +#: wp-admin/tools.php:36 wp-admin/import.php:32 wp-admin/widgets.php:84 +#: wp-admin/options-media.php:38 wp-admin/edit-link-form.php:75 +#: wp-admin/user-edit.php:68 wp-admin/users.php:76 wp-admin/media-new.php:61 +#: wp-admin/theme-install.php:130 wp-admin/options-discussion.php:32 +#: wp-admin/edit.php:260 wp-admin/edit.php:285 wp-admin/plugin-install.php:106 +#: wp-admin/export.php:58 wp-admin/custom-header.php:130 +msgid "Support" +msgstr "Support" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:737 +#: wp-admin/includes/plugin-install.php:672 +msgctxt "Active plugin installations" +msgid "Less Than 10" +msgstr "Färre än 10" + +#. translators: %s: number of ratings +#: wp-admin/includes/theme.php:729 wp-admin/theme-install.php:341 +msgid "(%s ratings)" +msgstr "(%s betyg)" + +#: wp-admin/edit-tags.php:486 wp-admin/edit-tag-form.php:183 +msgid "Assign a parent term to create a hierarchy. The term Jazz, for example, would be the parent of Bebop and Big Band." +msgstr "Ange en överordnad term för att skapa en hierarki. Till exempel skulle termen Jazz kunna vara överordnad till Bebop och Storband." + +#: wp-admin/includes/class-wp-debug-data.php:101 +msgctxt "comment status" +msgid "Open" +msgstr "Öppet" + +#: wp-admin/includes/class-plugin-installer-skin.php:62 +msgid "Activate Plugin & Return to Press This" +msgstr "Aktivera tillägg och återgå till Blogga detta" + +#: wp-admin/includes/class-plugin-upgrader.php:71 +msgid "Plugin installation failed." +msgstr "Installationen av tillägget misslyckades." + +#: wp-admin/includes/class-theme-upgrader.php:69 +msgid "Theme installation failed." +msgstr "Installationen av temat misslyckades." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:741 +msgid "%s Active Installations" +msgstr "%s Aktiva installationer" + +#: wp-admin/options-reading.php:93 +msgid "Homepage: %s" +msgstr "Startsida: %s" + +#. translators: %s: package URL +#: wp-admin/includes/class-plugin-upgrader.php:50 +#: wp-admin/includes/class-theme-upgrader.php:49 +#: wp-admin/includes/class-core-upgrader.php:33 +msgid "Downloading update from %s…" +msgstr "Laddar ner uppdatering från %s…" + +#. translators: %s: package URL +#: wp-admin/includes/class-plugin-upgrader.php:67 +#: wp-admin/includes/class-theme-upgrader.php:65 +msgid "Downloading installation package from %s…" +msgstr "Laddar ner installationspaket från %s…" + +#: wp-admin/options-writing.php:210 wp-admin/options-writing.php:224 +msgid "https://codex.wordpress.org/Update_Services" +msgstr "https://codex.wordpress.org/Update_Services" + +#. translators: 1: Codex URL, 2: Reading Settings URL +#: wp-admin/options-writing.php:223 +msgid "WordPress is not notifying any Update Services because of your site’s visibility settings." +msgstr "På grund av synlighetsinställningarna för din webbplats skickar WordPress inte notifieringar till några uppdateringstjänster." + +#: wp-admin/credits.php:146 +msgid "Noteworthy Contributors" +msgstr "Betydande bidragsgivare" + +#: wp-admin/includes/class-wp-debug-data.php:218 +msgid "These settings alter where and how parts of WordPress are loaded." +msgstr "Dessa inställningar förändrar var och hur vissa delar av WordPress läses in." + +#. translators: %s: default category +#: wp-admin/edit-tags.php:588 +msgid "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 default category %s. The default category cannot be deleted." +msgstr "När du tar bort en kategori kommer inte inläggen som hör till den att tas bort. Istället kommer inlägg som endast var kopplade till den raderade kategorin att kopplas till standardkategorin %s. Det går inte att ta bort standardkategorin." + +#: wp-admin/includes/theme.php:907 +msgid "One or more themes failed to load properly." +msgstr "Ett eller flera teman lyckas inte laddas på rätt sätt." + +#: wp-admin/includes/theme.php:908 +msgid "You can find more details and make changes on the Themes screen." +msgstr "Du hittar mer information och kan göra ändringar på sidan med listan över teman." + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:673 +msgctxt "plugin" +msgid "Resume %s" +msgstr "Återstarta %s" + +#. translators: %s: plugin name +#: wp-admin/includes/class-wp-plugins-list-table.php:673 +#: wp-admin/themes.php:414 +msgid "Resume" +msgstr "Återstarta" + +#. translators: %s: WordPress version +#: wp-admin/includes/update.php:267 wp-admin/install.php:239 +#: wp-admin/update-core.php:75 wp-admin/upgrade.php:84 wp-admin/about.php:67 +#: wp-admin/about.php:92 wp-admin/about.php:117 wp-admin/about.php:142 +msgid "https://wordpress.org/support/wordpress-version/version-%s/" +msgstr "https://wordpress.org/support/wordpress-version/version-%s/" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:533 +#: wp-admin/includes/plugin-install.php:824 +msgctxt "plugin" +msgid "Cannot Install" +msgstr "Går inte att installera" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:645 +msgid "This plugin doesn’t work with your versions of WordPress and PHP." +msgstr "Detta tillägg fungerar inte med din WordPress-version och din PHP-version." + +#. translators: 1: "Update WordPress" screen URL, 2: "Update PHP" page URL +#: wp-admin/includes/class-wp-plugin-install-list-table.php:649 +msgid "Please update WordPress, and then learn more about updating PHP." +msgstr "Uppdatera WordPress och därefter läs mer om hur du uppdaterar PHP." + +#. translators: %s: "Update WordPress" screen URL +#: wp-admin/includes/class-wp-plugin-install-list-table.php:657 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:673 +msgid "Please update WordPress." +msgstr "Vi ber dig uppdatera WordPress." + +#. translators: %s: "Update PHP" page URL +#. translators: %s: Update PHP page URL +#: wp-admin/includes/class-wp-plugin-install-list-table.php:663 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:682 +#: wp-admin/includes/update-core.php:952 wp-admin/install.php:244 +#: wp-admin/update-core.php:80 wp-admin/update-core.php:313 +#: wp-admin/upgrade.php:89 +msgid "Learn more about updating PHP." +msgstr "Läs mer om hur du uppdaterar PHP." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:669 +msgid "This plugin doesn’t work with your version of WordPress." +msgstr "Detta tillägg fungerar inte med din WordPress-version." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:678 +msgid "This plugin doesn’t work with your version of PHP." +msgstr "Detta tillägg fungerar inte med din PHP-version." + +#: wp-admin/includes/class-wp-debug-data.php:75 +msgid "Home URL" +msgstr "Startsidans URL" + +#: wp-admin/includes/class-wp-debug-data.php:80 +msgid "Site URL" +msgstr "Webbplatsens URL" + +#: wp-admin/includes/class-wp-debug-data.php:85 +msgid "Permalink structure" +msgstr "Permalänks-struktur" + +#: wp-admin/includes/class-wp-debug-data.php:86 +msgid "No permalink structure set" +msgstr "Ingen permalänkstruktur är inställd" + +#: wp-admin/includes/class-wp-debug-data.php:90 +msgid "Is this site using HTTPS?" +msgstr "Använder denna webbplats HTTPS?" + +#: wp-admin/includes/class-wp-debug-data.php:95 +msgid "Can anyone register on this site?" +msgstr "Kan vem som helst registrera sig på denna webbplats?" + +#: wp-admin/includes/class-wp-debug-data.php:100 +msgid "Default comment status" +msgstr "Standardinställning för kommentarer" + +#: wp-admin/includes/class-wp-debug-data.php:105 +msgid "Is this a multisite?" +msgstr "Är detta en nätverksinstallation (multisite)?" + +#: wp-admin/includes/class-wp-debug-data.php:114 +msgid "Directories and Sizes" +msgstr "Filkataloger och deras storlekar" + +#: wp-admin/includes/class-wp-debug-data.php:120 +msgid "Drop-ins" +msgstr "Drop-in" + +#: wp-admin/includes/class-wp-debug-data.php:122 +msgid "Drop-ins are single files that replace or enhance WordPress features in ways that are not possible for traditional plugins." +msgstr "Insticksprogram är enstaka filer som ersätter eller förbättrar WordPress-funktioner på sätt som inte är möjligta för vanliga tillägg." + +#: wp-admin/includes/class-wp-debug-data.php:127 +msgid "Active Theme" +msgstr "Aktivt tema" + +#: wp-admin/includes/class-wp-debug-data.php:132 +msgid "Other Themes" +msgstr "Andra teman" + +#: wp-admin/includes/class-wp-debug-data.php:138 +msgid "Must Use Plugins" +msgstr "Permanentaktiverade tillägg (must use)" + +#: wp-admin/includes/class-wp-debug-data.php:144 +msgid "Active Plugins" +msgstr "Aktiva tillägg" + +#: wp-admin/includes/class-wp-debug-data.php:150 +msgid "Inactive Plugins" +msgstr "Inaktiva tillägg" + +#: wp-admin/includes/class-wp-debug-data.php:156 +msgid "Media Handling" +msgstr "Hantering av media" + +#: wp-admin/includes/class-wp-debug-data.php:161 +msgid "Server" +msgstr "Server" + +#: wp-admin/includes/class-wp-debug-data.php:162 +msgid "The options shown below relate to your server setup. If changes are required, you may need your web host’s assistance." +msgstr "Alternativen som visas nedan avser din serverkonfiguration.Om något behöver ändras kan du behöva hjälp från ditt webbhotell." + +#: wp-admin/includes/class-wp-debug-data.php:167 +msgid "Database" +msgstr "Databas" + +#: wp-admin/includes/class-wp-debug-data.php:217 +msgid "WordPress Constants" +msgstr "WordPress-konstanter" + +#: wp-admin/includes/class-wp-debug-data.php:185 +#: wp-admin/includes/class-wp-debug-data.php:194 +#: wp-admin/includes/class-wp-debug-data.php:203 +#: wp-admin/includes/class-wp-debug-data.php:212 +#: wp-admin/includes/class-wp-debug-data.php:227 +#: wp-admin/includes/class-wp-debug-data.php:232 +#: wp-admin/includes/class-wp-debug-data.php:890 +msgid "Undefined" +msgstr "Odefinierat" + +#: wp-admin/includes/class-wp-debug-data.php:1180 +msgid "The size cannot be calculated. The directory is not accessible. Usually caused by invalid permissions." +msgstr "Det går inte att beräkna storleken. Katalogen går inte att nå. Detta beror vanligtvis på felaktiga åtkomsträttigheter." + +#: wp-admin/includes/class-wp-debug-data.php:1231 +msgid "Total size is not available. Some errors were encountered when determining the size of your installation." +msgstr "Totalstorleken är inte tillgänglig. Några fel inträffade när storleken av din installation skulle kontrolleras." + +#: wp-admin/includes/class-wp-debug-data.php:302 +msgid "Filesystem Permissions" +msgstr "Rättigheter i filsystemet" + +#: wp-admin/includes/class-wp-debug-data.php:303 +msgid "Shows whether WordPress is able to write to the directories it needs access to." +msgstr "Visar om WordPress kan skriva till de kataloger där skrivåtkomst behövs." + +#: wp-admin/includes/class-wp-debug-data.php:306 +msgid "The main WordPress directory" +msgstr "Den huvudsakliga WordPress katalogen" + +#: wp-admin/includes/class-wp-debug-data.php:307 +#: wp-admin/includes/class-wp-debug-data.php:312 +#: wp-admin/includes/class-wp-debug-data.php:317 +#: wp-admin/includes/class-wp-debug-data.php:322 +#: wp-admin/includes/class-wp-debug-data.php:327 +#: wp-admin/includes/class-wp-debug-data.php:971 +msgid "Writable" +msgstr "Skrivbar" + +#: wp-admin/includes/class-wp-debug-data.php:307 +#: wp-admin/includes/class-wp-debug-data.php:312 +#: wp-admin/includes/class-wp-debug-data.php:317 +#: wp-admin/includes/class-wp-debug-data.php:322 +#: wp-admin/includes/class-wp-debug-data.php:327 +#: wp-admin/includes/class-wp-debug-data.php:971 +msgid "Not writable" +msgstr "Ej skrivbar" + +#: wp-admin/includes/class-wp-debug-data.php:311 +msgid "The wp-content directory" +msgstr "Katalogen wp-content" + +#: wp-admin/includes/class-wp-debug-data.php:316 +msgid "The uploads directory" +msgstr "Katalogen uploads" + +#: wp-admin/includes/class-wp-debug-data.php:321 +msgid "The plugins directory" +msgstr "Katalogen plugins" + +#: wp-admin/includes/class-wp-debug-data.php:326 +msgid "The themes directory" +msgstr "Katalogen themes" + +#: wp-admin/includes/class-wp-debug-data.php:350 +#: wp-admin/includes/class-wp-debug-data.php:367 +msgid "User count" +msgstr "Antal användare" + +#: wp-admin/includes/class-wp-debug-data.php:355 +msgid "Site count" +msgstr "Antal webbplatser" + +#: wp-admin/includes/class-wp-debug-data.php:360 +msgid "Network count" +msgstr "Antal nätverk" + +#: wp-admin/includes/class-wp-debug-data.php:377 +#: wp-admin/includes/class-wp-debug-data.php:383 +#: wp-admin/includes/class-wp-site-health.php:1791 +msgid "Communication with WordPress.org" +msgstr "Kommunikation med WordPress.org" + +#: wp-admin/includes/class-wp-debug-data.php:378 +msgid "WordPress.org is reachable" +msgstr "WordPress.org är nåbar" + +#. translators: 1: The IP address WordPress.org resolves to. 2: The error +#. returned by the lookup. +#: wp-admin/includes/class-wp-debug-data.php:386 +msgid "Unable to reach WordPress.org at %1$s: %2$s" +msgstr "Det går inte att nå WordPress.org på %1$s: %2$s" + +#: wp-admin/includes/class-wp-debug-data.php:409 +msgid "Uploads directory location" +msgstr "Plat för filkatalog för uppladdningar" + +#: wp-admin/includes/class-wp-debug-data.php:413 +msgid "Uploads directory size" +msgstr "Storlek på filkatalog för uppladdningar" + +#: wp-admin/includes/class-wp-debug-data.php:903 +msgid "Theme directory location" +msgstr "Plats för temats filkatalog" + +#: wp-admin/includes/class-wp-debug-data.php:422 +msgid "Themes directory size" +msgstr "Storlek på filkatalogen för teman" + +#: wp-admin/includes/class-wp-debug-data.php:427 +msgid "Plugins directory location" +msgstr "Plats för tilläggens filkatalog" + +#: wp-admin/includes/class-wp-debug-data.php:431 +msgid "Plugins directory size" +msgstr "Storlek på tilläggens filkatalog" + +#: wp-admin/includes/class-wp-debug-data.php:400 +msgid "WordPress directory location" +msgstr "Plats för WordPress filkatalog" + +#: wp-admin/includes/class-wp-debug-data.php:404 +msgid "WordPress directory size" +msgstr "Storlek på WordPress filkatalog" + +#: wp-admin/includes/class-wp-debug-data.php:436 +msgid "Database size" +msgstr "Databasstorlek" + +#: wp-admin/includes/class-wp-debug-data.php:441 +msgid "Total installation size" +msgstr "Total installationsstorlek" + +#: wp-admin/includes/class-wp-debug-data.php:467 +msgid "Active editor" +msgstr "Aktiv redigerare" + +#: wp-admin/includes/class-wp-debug-data.php:455 +#: wp-admin/includes/class-wp-debug-data.php:477 +#: wp-admin/includes/class-wp-debug-data.php:1215 +msgid "Not available" +msgstr "Inte tillgänglig" + +#: wp-admin/includes/class-wp-debug-data.php:481 +msgid "ImageMagick version number" +msgstr "Versionsnummer för ImageMagick" + +#: wp-admin/includes/class-wp-debug-data.php:486 +msgid "ImageMagick version string" +msgstr "Versionssträng för ImageMagick" + +#: wp-admin/includes/class-wp-debug-data.php:511 +msgid "Imagick Resource Limits" +msgstr "Resursbegränsningar för Imagick" + +#: wp-admin/includes/class-wp-debug-data.php:525 +msgid "GD version" +msgstr "GD-version" + +#: wp-admin/includes/class-wp-debug-data.php:541 +msgid "Unable to determine if Ghostscript is installed" +msgstr "Det gick inte att avgöra om Ghostscript är installerat" + +#: wp-admin/includes/class-wp-debug-data.php:546 +msgid "Ghostscript version" +msgstr "Ghostscript-version" + +#: wp-admin/includes/class-wp-debug-data.php:584 +msgid "Server architecture" +msgstr "Server-arkitektur" + +#: wp-admin/includes/class-wp-debug-data.php:585 +msgid "Unable to determine server architecture" +msgstr "Det går inte att avgöra serverarkitekturen" + +#: wp-admin/includes/class-wp-debug-data.php:589 +msgid "Web server" +msgstr "Webbserver" + +#: wp-admin/includes/class-wp-debug-data.php:590 +msgid "Unable to determine what web server software is used" +msgstr "Det går inte att avgöra vilken programvara webbservern använder" + +#: wp-admin/includes/class-wp-debug-data.php:594 +msgid "PHP version" +msgstr "PHP-version" + +#: wp-admin/includes/class-wp-debug-data.php:573 +msgid "Unable to determine PHP version" +msgstr "Det går inte att avgöra PHP-versionen" + +#: wp-admin/includes/class-wp-debug-data.php:566 +msgid "(Supports 64bit values)" +msgstr "(Stöder 64-bitsvärden)" + +#: wp-admin/includes/class-wp-debug-data.php:566 +msgid "(Does not support 64bit values)" +msgstr "(Stöder inte 64-bitarsvärden)" + +#: wp-admin/includes/class-wp-debug-data.php:599 +msgid "PHP SAPI" +msgstr "PHP SAPI" + +#: wp-admin/includes/class-wp-debug-data.php:600 +msgid "Unable to determine PHP SAPI" +msgstr "Det går inte att avgöra PHP SAPI" + +#: wp-admin/includes/class-wp-debug-data.php:607 +msgid "Server settings" +msgstr "Serverinställningar" + +#: wp-admin/includes/class-wp-debug-data.php:608 +msgid "Unable to determine some settings, as the ini_get() function has been disabled." +msgstr "Vissa inställningar gick inte att undersöka eftersom funktionen ini_get() är inaktiverad." + +#: wp-admin/includes/class-wp-debug-data.php:613 +msgid "PHP max input variables" +msgstr "Maxvärden för PHP inmatning" + +#: wp-admin/includes/class-wp-debug-data.php:617 +msgid "PHP time limit" +msgstr "PHP-tidsgräns" + +#: wp-admin/includes/class-wp-debug-data.php:621 +msgid "PHP memory limit" +msgstr "PHP-minnesgräns" + +#: wp-admin/includes/class-wp-debug-data.php:625 +msgid "Max input time" +msgstr "Maximal inmatningstid" + +#: wp-admin/includes/class-wp-debug-data.php:629 +msgid "Upload max filesize" +msgstr "Max filstorlek för filuppladdning" + +#: wp-admin/includes/class-wp-debug-data.php:633 +msgid "PHP post max size" +msgstr "Största storlek för PHP post" + +#: wp-admin/includes/class-wp-debug-data.php:642 +#: wp-admin/includes/class-wp-debug-data.php:647 +msgid "cURL version" +msgstr "cURL-version" + +#: wp-admin/includes/class-wp-debug-data.php:657 +msgid "Is SUHOSIN installed?" +msgstr "Är SUHOSIN installerat?" + +#: wp-admin/includes/class-wp-debug-data.php:666 +msgid "Is the Imagick library available?" +msgstr "Är biblioteket Imagick tillgängligt?" + +#: wp-admin/includes/class-wp-debug-data.php:681 +msgid ".htaccess rules" +msgstr ".htaccess-regler" + +#: wp-admin/includes/class-wp-debug-data.php:682 +msgid "Custom rules have been added to your .htaccess file." +msgstr "Det har lagts till specialregler i din .htaccess-fil." + +#: wp-admin/includes/class-wp-debug-data.php:682 +msgid "Your .htaccess file contains only core WordPress features." +msgstr "Din .htaccess-fil innehåller endast WordPress egna grundläggande funktioner." + +#: wp-admin/includes/class-wp-debug-data.php:728 +msgid "Extension" +msgstr "Tillägg" + +#: wp-admin/includes/class-wp-debug-data.php:733 +msgid "Server version" +msgstr "Serverversion" + +#: wp-admin/includes/class-wp-debug-data.php:743 +msgid "Database user" +msgstr "Databasanvändare" + +#: wp-admin/includes/class-wp-debug-data.php:761 +msgid "Database prefix" +msgstr "Databas-prefix" + +#: wp-admin/includes/class-wp-debug-data.php:773 +#: wp-admin/includes/class-wp-debug-data.php:811 +#: wp-admin/includes/class-wp-debug-data.php:924 +msgid "No version or author information is available." +msgstr "Ingen information om författaren är tillgänglig." + +#. translators: 1: Plugin version number. 2: Plugin author name. +#. translators: 1: Theme version number. 2: Theme author name. +#: wp-admin/includes/class-wp-debug-data.php:778 +#: wp-admin/includes/class-wp-debug-data.php:816 +#: wp-admin/includes/class-wp-debug-data.php:929 +msgid "Version %1$s by %2$s" +msgstr "Version %1$s av %2$s" + +#. translators: %s: Latest WordPress version number. +#. translators: %s: Latest plugin version number. +#. translators: %s: Latest theme version number. +#: wp-admin/includes/class-wp-debug-data.php:49 +#: wp-admin/includes/class-wp-debug-data.php:834 +#: wp-admin/includes/class-wp-debug-data.php:866 +#: wp-admin/includes/class-wp-debug-data.php:947 +msgid "(Latest version: %s)" +msgstr "(Senaste version: %s)" + +#: wp-admin/includes/class-wp-debug-data.php:889 +msgid "Author website" +msgstr "Författarens webbplats" + +#: wp-admin/includes/class-wp-debug-data.php:894 +msgid "Parent theme" +msgstr "Överordnat tema" + +#: wp-admin/includes/class-wp-debug-data.php:899 +msgid "Theme features" +msgstr "Temafunktioner" + +#: wp-admin/includes/class-wp-debug-data.php:970 +msgid "The must use plugins directory" +msgstr "Katalogen för obligatoriska tillägg" + +#. translators: %s: Name of the constant used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:73 +msgid "The %s constant is defined and enabled." +msgstr "Konstanten %s är definierad och aktiv." + +#. translators: %s: Name of the filter used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:130 +msgid "A plugin has prevented updates by disabling %s." +msgstr "Ett tillägg har förhindrat uppdateringar genom att inaktivera %s." + +#. translators: %s: Name of the filter used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:150 +msgid "The %s filter is enabled." +msgstr "Filtret %s är aktiverat." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:173 +msgid "A previous automatic background update ended with a critical failure, so updates are now disabled." +msgstr "En tidigare automatisk bakgrundsuppdatering ledde till ett kritiskt fel. Därför är uppdateringarna nu inaktiverade." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:174 +#: wp-admin/includes/class-wp-site-health-auto-updates.php:189 +msgid "You would have received an email because of this." +msgstr "Du bör ha fått ett e-postmeddelande om detta." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:175 +msgid "When you've been able to update using the \"Update Now\" button on Dashboard > Updates, we'll clear this error for future update attempts." +msgstr "När du har lyckats uppdatera den med hjälp av knappen ”Uppdatera nu” under Panel > Uppdateringar kommer vi att återställa detta fel för att sedan åter försöka uppdatera automatiskt." + +#. translators: %s: Code of error shown. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:178 +#: wp-admin/includes/class-wp-site-health-auto-updates.php:195 +msgid "The error code was %s." +msgstr "Felkoden var %s." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:187 +msgid "A previous automatic background update could not occur." +msgstr "En tidigare automatisk bakgrundsuppdatering kunde inte genomföras." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:192 +msgid "We'll try again with the next release." +msgstr "Vi kommer att försöka igen med nästa utgåva." + +#. translators: 1: Folder name. 2: Version control directory. 3: Filter name. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:246 +msgid "The folder %1$s was detected as being under version control (%2$s), but the %3$s filter is allowing updates." +msgstr "Katalogen %1$s verkar kontrolleras av versionshantering (%2$s), men filtret %3$s möjliggör uppdateringar." + +#. translators: 1: Folder name. 2: Version control directory. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:259 +msgid "The folder %1$s was detected as being under version control (%2$s)." +msgstr "Katalogen %1$s verkar kontrolleras av versionshantering (%2$s)." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:268 +msgid "No version control systems were detected." +msgstr "Inget system för versionshantering har upptäckts." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:285 +msgid "Your installation of WordPress prompts for FTP credentials to perform updates." +msgstr "Din WordPress-installation ber om inloggningsuppgifter för FTP för att genomföra uppdateringar." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:286 +msgid "(Your site is performing updates over FTP due to file ownership. Talk to your hosting company.)" +msgstr "(Din webbplats genomför uppdateringar via FTP på grund av filernas ägare. Hör med ditt webbhotell.)" + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:295 +msgid "Your installation of WordPress doesn't require FTP credentials to perform updates." +msgstr "För din WordPress-installation krävs inga inloggningsuppgifter för FPT för att genomföra uppdateringar." + +#. translators: %s: WordPress version +#: wp-admin/includes/class-wp-site-health-auto-updates.php:342 +msgid "Couldn't retrieve a list of the checksums for WordPress %s." +msgstr "Det gick inte att hämta någon lista med checksummor för WordPress %s." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:345 +msgid "This could mean that connections are failing to WordPress.org." +msgstr "Detta kan vara ett tecken på att anrop till WordPress.org misslyckas." + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:371 +msgid "Some files are not writable by WordPress:" +msgstr "Vissa filer är inte skrivbara för WordPress:" + +#: wp-admin/includes/class-wp-site-health-auto-updates.php:376 +msgid "All of your WordPress files are writable." +msgstr "Alla dina WordPress-filer är skrivbara." + +#. translators: %s: Name of the constant used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:400 +msgid "WordPress development updates are blocked by the %s constant." +msgstr "Uppdateringar till utvecklingsversioner av WordPress blockeras av konstanten %s." + +#. translators: %s: Name of the filter used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:411 +msgid "WordPress development updates are blocked by the %s filter." +msgstr "Uppdateringar till utvecklingsversioner av WordPress blockeras av filtret %s." + +#. translators: %s: Name of the constant used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:431 +msgid "WordPress security and maintenance releases are blocked by %s." +msgstr "Säkerhets- och underhållsuppdateringar av WordPress blockeras av %s." + +#. translators: %s: Name of the filter used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:442 +msgid "WordPress security and maintenance releases are blocked by the %s filter." +msgstr "Säkerhets- och underhållsuppdateringar av WordPress blockeras av filtret %s." + +#: wp-admin/credits.php:45 wp-admin/includes/ms.php:1141 +#: wp-admin/nav-menus.php:632 wp-admin/site-health-info.php:48 +#: wp-admin/freedoms.php:59 wp-admin/about.php:44 wp-admin/site-health.php:53 +msgid "Secondary menu" +msgstr "Sekundärmeny" + +#: wp-admin/includes/class-wp-debug-data.php:1187 +msgid "The directory size calculation has timed out. Usually caused by a very large number of sub-directories and files." +msgstr "Beräkningen av katalogens filstorlek har tagit för lång tid. Vanligaste orsaken är ett mycket stort antal underkataloger och filer." + +#: wp-admin/includes/theme.php:910 +msgid "Go to the Themes screen" +msgstr "Gå till temalistan" + +#: wp-admin/includes/class-wp-plugins-list-table.php:879 +msgid "This plugin failed to load properly and is paused during recovery mode." +msgstr "Detta tillägg gick inte att ladda på rätt sätt. I räddningsläge är det pausat." + +#: wp-admin/includes/update.php:458 +msgid "There is a new version of %1$s available, but it doesn’t work with your version of PHP. View version %4$s details or learn more about updating PHP." +msgstr "En ny version av %1$s är tillgänglig, men den fungerar inte med din PHP-version. Se information om version %4$s eller läs mer om hur du uppdaterar PHP." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:555 +#: wp-admin/includes/plugin-install.php:836 +msgctxt "plugin" +msgid "Cannot Update" +msgstr "Kan inte uppdatera" + +#. translators: %s: Name of the filter used. +#: wp-admin/includes/class-wp-site-health-auto-updates.php:117 +msgid "Could not confirm that the %s filter is available." +msgstr "Det gick inte att bekräfta om filtret %s är tillgängligt." + +#: wp-admin/includes/class-wp-debug-data.php:71 +msgid "User Language" +msgstr "Användarspråk" + +#: wp-admin/includes/class-wp-debug-data.php:101 +msgctxt "comment status" +msgid "Closed" +msgstr "Stängt" + +#: wp-admin/includes/class-wp-debug-data.php:418 +msgid "Themes directory location" +msgstr "Plats för filkatalogen för teman" + +#. translators: %s: The current WordPress version number +#: wp-admin/credits.php:32 wp-admin/freedoms.php:46 wp-admin/about.php:31 +msgid "Congratulations on updating to WordPress %s! This update makes it easier than ever to fix your site if something goes wrong." +msgstr "Grattis att du har uppdaterat till WordPress %s! Denna uppdatering gör det enklare än någonsin tidigare att laga din webbplats om något skulle gå fel." + +#. translators: %s: Recovery Mode exit link +#: wp-admin/includes/update.php:854 +msgid "You are in recovery mode. This means there may be an error with a theme or plugin. To exit recovery mode, log out or use the Exit button. Exit Recovery Mode" +msgstr "Du befinner dig i räddningsläge. Det innebär att det eventuellt finns ett allvarligt fel i något tema eller något tillägg. Du avslutar räddningsläget genom att logga ut eller klicka på knappen ”avsluta”. Avsluta räddningsläget" \ No newline at end of file diff --git a/wp-content/languages/continents-cities-sv_SE.mo b/wp-content/languages/continents-cities-sv_SE.mo new file mode 100644 index 000000000..34693031a Binary files /dev/null and b/wp-content/languages/continents-cities-sv_SE.mo differ diff --git a/wp-content/languages/continents-cities-sv_SE.po b/wp-content/languages/continents-cities-sv_SE.po new file mode 100644 index 000000000..8527e3c6a --- /dev/null +++ b/wp-content/languages/continents-cities-sv_SE.po @@ -0,0 +1,2117 @@ +# Translation of WordPress - 5.2.x - Continents & Cities in Swedish +# This file is distributed under the same license as the WordPress - 5.2.x - Continents & Cities package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-07-18 16:14:26+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: sv_SE\n" +"Project-Id-Version: WordPress - 5.2.x - Continents & Cities\n" + +#: wp-admin/includes/continents-cities.php:369 +msgid "Stanley" +msgstr "Stanley" + +#: wp-admin/includes/continents-cities.php:371 +msgid "Australia" +msgstr "Australien" + +#: wp-admin/includes/continents-cities.php:372 +msgid "ACT" +msgstr "ACT" + +#: wp-admin/includes/continents-cities.php:373 +msgid "Adelaide" +msgstr "Adelaide" + +#: wp-admin/includes/continents-cities.php:374 +msgid "Brisbane" +msgstr "Brisbane" + +#: wp-admin/includes/continents-cities.php:375 +msgid "Broken Hill" +msgstr "Broken Hill" + +#: wp-admin/includes/continents-cities.php:376 +msgid "Canberra" +msgstr "Canberra" + +#: wp-admin/includes/continents-cities.php:377 +msgid "Currie" +msgstr "Currie" + +#: wp-admin/includes/continents-cities.php:378 +msgid "Darwin" +msgstr "Darwin" + +#: wp-admin/includes/continents-cities.php:379 +msgid "Eucla" +msgstr "Eucla" + +#: wp-admin/includes/continents-cities.php:380 +msgid "Hobart" +msgstr "Hobart" + +#: wp-admin/includes/continents-cities.php:381 +msgid "LHI" +msgstr "Lord Howeön" + +#: wp-admin/includes/continents-cities.php:382 +msgid "Lindeman" +msgstr "Lindeman" + +#: wp-admin/includes/continents-cities.php:383 +msgid "Lord Howe" +msgstr "Lord Howe" + +#: wp-admin/includes/continents-cities.php:384 +msgid "Melbourne" +msgstr "Melbourne" + +#: wp-admin/includes/continents-cities.php:386 +msgid "North" +msgstr "North" + +#: wp-admin/includes/continents-cities.php:385 +msgid "NSW" +msgstr "New South Wales" + +#: wp-admin/includes/continents-cities.php:387 +msgid "Perth" +msgstr "Perth" + +#: wp-admin/includes/continents-cities.php:388 +msgid "Queensland" +msgstr "Queensland" + +#: wp-admin/includes/continents-cities.php:389 +msgid "South" +msgstr "South" + +#: wp-admin/includes/continents-cities.php:390 +msgid "Sydney" +msgstr "Sydney" + +#: wp-admin/includes/continents-cities.php:391 +msgid "Tasmania" +msgstr "Tasmanien" + +#: wp-admin/includes/continents-cities.php:392 +msgid "Victoria" +msgstr "Victoria" + +#: wp-admin/includes/continents-cities.php:393 +msgid "West" +msgstr "West" + +#: wp-admin/includes/continents-cities.php:394 +msgid "Yancowinna" +msgstr "Yancowinna" + +#: wp-admin/includes/continents-cities.php:396 +msgid "Etc" +msgstr "ETC" + +#: wp-admin/includes/continents-cities.php:397 +msgid "GMT" +msgstr "GMT" + +#: wp-admin/includes/continents-cities.php:398 +msgid "GMT+0" +msgstr "GMT+0" + +#: wp-admin/includes/continents-cities.php:399 +msgid "GMT+1" +msgstr "GMT+1" + +#: wp-admin/includes/continents-cities.php:400 +msgid "GMT+10" +msgstr "GMT+10" + +#: wp-admin/includes/continents-cities.php:401 +msgid "GMT+11" +msgstr "GMT+11" + +#: wp-admin/includes/continents-cities.php:402 +msgid "GMT+12" +msgstr "GMT+12" + +#: wp-admin/includes/continents-cities.php:403 +msgid "GMT+2" +msgstr "GMT+2" + +#: wp-admin/includes/continents-cities.php:404 +msgid "GMT+3" +msgstr "GMT+3" + +#: wp-admin/includes/continents-cities.php:405 +msgid "GMT+4" +msgstr "GMT+4" + +#: wp-admin/includes/continents-cities.php:406 +msgid "GMT+5" +msgstr "GMT+5" + +#: wp-admin/includes/continents-cities.php:407 +msgid "GMT+6" +msgstr "GMT+6" + +#: wp-admin/includes/continents-cities.php:408 +msgid "GMT+7" +msgstr "GMT+7" + +#: wp-admin/includes/continents-cities.php:409 +msgid "GMT+8" +msgstr "GMT+8" + +#: wp-admin/includes/continents-cities.php:410 +msgid "GMT+9" +msgstr "GMT+9" + +#: wp-admin/includes/continents-cities.php:411 +msgid "GMT-0" +msgstr "GMT-0" + +#: wp-admin/includes/continents-cities.php:412 +msgid "GMT-1" +msgstr "GMT-1" + +#: wp-admin/includes/continents-cities.php:413 +msgid "GMT-10" +msgstr "GMT-10" + +#: wp-admin/includes/continents-cities.php:414 +msgid "GMT-11" +msgstr "GMT-11" + +#: wp-admin/includes/continents-cities.php:415 +msgid "GMT-12" +msgstr "GMT-12" + +#: wp-admin/includes/continents-cities.php:416 +msgid "GMT-13" +msgstr "GMT-13" + +#: wp-admin/includes/continents-cities.php:417 +msgid "GMT-14" +msgstr "GMT-14" + +#: wp-admin/includes/continents-cities.php:418 +msgid "GMT-2" +msgstr "GMT-2" + +#: wp-admin/includes/continents-cities.php:419 +msgid "GMT-3" +msgstr "GMT-3" + +#: wp-admin/includes/continents-cities.php:420 +msgid "GMT-4" +msgstr "GMT-4" + +#: wp-admin/includes/continents-cities.php:421 +msgid "GMT-5" +msgstr "GMT-5" + +#: wp-admin/includes/continents-cities.php:422 +msgid "GMT-6" +msgstr "GMT-6" + +#: wp-admin/includes/continents-cities.php:423 +msgid "GMT-7" +msgstr "GMT-7" + +#: wp-admin/includes/continents-cities.php:424 +msgid "GMT-8" +msgstr "GMT-8" + +#: wp-admin/includes/continents-cities.php:425 +msgid "GMT-9" +msgstr "GMT-9" + +#: wp-admin/includes/continents-cities.php:426 +msgid "GMT0" +msgstr "GMT0" + +#: wp-admin/includes/continents-cities.php:427 +msgid "Greenwich" +msgstr "Greenwich" + +#: wp-admin/includes/continents-cities.php:428 +msgid "UCT" +msgstr "UCT" + +#: wp-admin/includes/continents-cities.php:430 +msgid "Universal" +msgstr "Universal" + +#: wp-admin/includes/continents-cities.php:429 +msgid "UTC" +msgstr "UTC" + +#: wp-admin/includes/continents-cities.php:431 +msgid "Zulu" +msgstr "Zulu" + +#: wp-admin/includes/continents-cities.php:433 +msgid "Europe" +msgstr "Europa" + +#: wp-admin/includes/continents-cities.php:434 +msgid "Amsterdam" +msgstr "Amsterdam" + +#: wp-admin/includes/continents-cities.php:435 +msgid "Andorra" +msgstr "Andorra" + +#: wp-admin/includes/continents-cities.php:437 +msgid "Athens" +msgstr "Aten" + +#: wp-admin/includes/continents-cities.php:438 +msgid "Belfast" +msgstr "Belfast" + +#: wp-admin/includes/continents-cities.php:439 +msgid "Belgrade" +msgstr "Belgrad" + +#: wp-admin/includes/continents-cities.php:440 +msgid "Berlin" +msgstr "Berlin" + +#: wp-admin/includes/continents-cities.php:441 +msgid "Bratislava" +msgstr "Bratislava" + +#: wp-admin/includes/continents-cities.php:442 +msgid "Brussels" +msgstr "Bryssel" + +#: wp-admin/includes/continents-cities.php:443 +msgid "Bucharest" +msgstr "Bukarest" + +#: wp-admin/includes/continents-cities.php:444 +msgid "Budapest" +msgstr "Budapest" + +#: wp-admin/includes/continents-cities.php:446 +msgid "Chisinau" +msgstr "Chişinău" + +#: wp-admin/includes/continents-cities.php:447 +msgid "Copenhagen" +msgstr "Köpenhamn" + +#: wp-admin/includes/continents-cities.php:448 +msgid "Dublin" +msgstr "Dublin" + +#: wp-admin/includes/continents-cities.php:449 +msgid "Gibraltar" +msgstr "Gibraltar" + +#: wp-admin/includes/continents-cities.php:450 +msgid "Guernsey" +msgstr "Guernsey" + +#: wp-admin/includes/continents-cities.php:451 +msgid "Helsinki" +msgstr "Helsingfors" + +#: wp-admin/includes/continents-cities.php:452 +msgid "Isle of Man" +msgstr "Isle of Man" + +#: wp-admin/includes/continents-cities.php:454 +msgid "Jersey" +msgstr "Jersey" + +#: wp-admin/includes/continents-cities.php:455 +msgid "Kaliningrad" +msgstr "Kaliningrad" + +#: wp-admin/includes/continents-cities.php:456 +msgid "Kiev" +msgstr "Kiev" + +#: wp-admin/includes/continents-cities.php:458 +msgid "Lisbon" +msgstr "Lissabon" + +#: wp-admin/includes/continents-cities.php:459 +msgid "Ljubljana" +msgstr "Ljubljana" + +#: wp-admin/includes/continents-cities.php:460 +msgid "London" +msgstr "London" + +#: wp-admin/includes/continents-cities.php:461 +msgid "Luxembourg" +msgstr "Luxemburg" + +#: wp-admin/includes/continents-cities.php:462 +msgid "Madrid" +msgstr "Madrid" + +#: wp-admin/includes/continents-cities.php:463 +msgid "Malta" +msgstr "Malta" + +#: wp-admin/includes/continents-cities.php:464 +msgid "Mariehamn" +msgstr "Mariehamn" + +#: wp-admin/includes/continents-cities.php:465 +msgid "Minsk" +msgstr "Minsk" + +#: wp-admin/includes/continents-cities.php:466 +msgid "Monaco" +msgstr "Monaco" + +#: wp-admin/includes/continents-cities.php:467 +msgid "Moscow" +msgstr "Moskva" + +#: wp-admin/includes/continents-cities.php:469 +msgid "Oslo" +msgstr "Oslo" + +#: wp-admin/includes/continents-cities.php:470 +msgid "Paris" +msgstr "Paris" + +#: wp-admin/includes/continents-cities.php:471 +msgid "Podgorica" +msgstr "Podgorica" + +#: wp-admin/includes/continents-cities.php:472 +msgid "Prague" +msgstr "Prag" + +#: wp-admin/includes/continents-cities.php:473 +msgid "Riga" +msgstr "Riga" + +#: wp-admin/includes/continents-cities.php:474 +msgid "Rome" +msgstr "Rom" + +#: wp-admin/includes/continents-cities.php:475 +msgid "Samara" +msgstr "Samara" + +#: wp-admin/includes/continents-cities.php:476 +msgid "San Marino" +msgstr "San Marino" + +#: wp-admin/includes/continents-cities.php:477 +msgid "Sarajevo" +msgstr "Sarajevo" + +#: wp-admin/includes/continents-cities.php:479 +msgid "Simferopol" +msgstr "Simferopol" + +#: wp-admin/includes/continents-cities.php:480 +msgid "Skopje" +msgstr "Skopje" + +#: wp-admin/includes/continents-cities.php:481 +msgid "Sofia" +msgstr "Sofia" + +#: wp-admin/includes/continents-cities.php:482 +msgid "Stockholm" +msgstr "Stockholm" + +#: wp-admin/includes/continents-cities.php:483 +msgid "Tallinn" +msgstr "Tallinn" + +#: wp-admin/includes/continents-cities.php:484 +msgid "Tirane" +msgstr "Tirana" + +#: wp-admin/includes/continents-cities.php:485 +msgid "Tiraspol" +msgstr "Tiraspol" + +#: wp-admin/includes/continents-cities.php:487 +msgid "Uzhgorod" +msgstr "Uzjhorod" + +#: wp-admin/includes/continents-cities.php:488 +msgid "Vaduz" +msgstr "Vaduz" + +#: wp-admin/includes/continents-cities.php:489 +msgid "Vatican" +msgstr "Vatikanstaten" + +#: wp-admin/includes/continents-cities.php:490 +msgid "Vienna" +msgstr "Wien" + +#: wp-admin/includes/continents-cities.php:491 +msgid "Vilnius" +msgstr "Vilnius" + +#: wp-admin/includes/continents-cities.php:492 +msgid "Volgograd" +msgstr "Volgograd" + +#: wp-admin/includes/continents-cities.php:493 +msgid "Warsaw" +msgstr "Warszawa" + +#: wp-admin/includes/continents-cities.php:494 +msgid "Zagreb" +msgstr "Zagreb" + +#: wp-admin/includes/continents-cities.php:495 +msgid "Zaporozhye" +msgstr "Zaporizjzja" + +#: wp-admin/includes/continents-cities.php:496 +msgid "Zurich" +msgstr "Zürich" + +#: wp-admin/includes/continents-cities.php:498 +msgid "Indian" +msgstr "Indiska oceanen" + +#: wp-admin/includes/continents-cities.php:499 +msgid "Antananarivo" +msgstr "Antananarivo" + +#: wp-admin/includes/continents-cities.php:500 +msgid "Chagos" +msgstr "Chagosöarna" + +#: wp-admin/includes/continents-cities.php:501 +msgid "Christmas" +msgstr "Kiritimati" + +#: wp-admin/includes/continents-cities.php:502 +msgid "Cocos" +msgstr "Kokosöarna" + +#: wp-admin/includes/continents-cities.php:503 +msgid "Comoro" +msgstr "Komorerna" + +#: wp-admin/includes/continents-cities.php:504 +msgid "Kerguelen" +msgstr "Kerguelen" + +#: wp-admin/includes/continents-cities.php:505 +msgid "Mahe" +msgstr "Mahé" + +#: wp-admin/includes/continents-cities.php:506 +msgid "Maldives" +msgstr "Maldiverna" + +#: wp-admin/includes/continents-cities.php:507 +msgid "Mauritius" +msgstr "Mauritius" + +#: wp-admin/includes/continents-cities.php:508 +msgid "Mayotte" +msgstr "Mayotte" + +#: wp-admin/includes/continents-cities.php:509 +msgid "Reunion" +msgstr "Réunion" + +#: wp-admin/includes/continents-cities.php:511 +msgid "Pacific" +msgstr "Stilla havet" + +#: wp-admin/includes/continents-cities.php:512 +msgid "Apia" +msgstr "Apia" + +#: wp-admin/includes/continents-cities.php:513 +msgid "Auckland" +msgstr "Auckland" + +#: wp-admin/includes/continents-cities.php:515 +msgid "Chatham" +msgstr "Chatham" + +#: wp-admin/includes/continents-cities.php:517 +msgid "Easter" +msgstr "Påsköarna" + +#: wp-admin/includes/continents-cities.php:518 +msgid "Efate" +msgstr "Efate" + +#: wp-admin/includes/continents-cities.php:519 +msgid "Enderbury" +msgstr "Enderburyatollen" + +#: wp-admin/includes/continents-cities.php:520 +msgid "Fakaofo" +msgstr "Fakaofo" + +#: wp-admin/includes/continents-cities.php:521 +msgid "Fiji" +msgstr "Fiji" + +#: wp-admin/includes/continents-cities.php:522 +msgid "Funafuti" +msgstr "Funafuti" + +#: wp-admin/includes/continents-cities.php:523 +msgid "Galapagos" +msgstr "Galapagosöarna" + +#: wp-admin/includes/continents-cities.php:524 +msgid "Gambier" +msgstr "Gambieröarna" + +#: wp-admin/includes/continents-cities.php:525 +msgid "Guadalcanal" +msgstr "Guadalcanal" + +#: wp-admin/includes/continents-cities.php:526 +msgid "Guam" +msgstr "Guam" + +#: wp-admin/includes/continents-cities.php:527 +msgid "Honolulu" +msgstr "Honolulu" + +#: wp-admin/includes/continents-cities.php:528 +msgid "Johnston" +msgstr "Johnston" + +#: wp-admin/includes/continents-cities.php:529 +msgid "Kiritimati" +msgstr "Kiritimati" + +#: wp-admin/includes/continents-cities.php:530 +msgid "Kosrae" +msgstr "Kosraeöarna" + +#: wp-admin/includes/continents-cities.php:531 +msgid "Kwajalein" +msgstr "Kwajalein" + +#: wp-admin/includes/continents-cities.php:532 +msgid "Majuro" +msgstr "Majuro" + +#: wp-admin/includes/continents-cities.php:533 +msgid "Marquesas" +msgstr "Marquesasöarna" + +#: wp-admin/includes/continents-cities.php:534 +msgid "Midway" +msgstr "Midwayöarna" + +#: wp-admin/includes/continents-cities.php:535 +msgid "Nauru" +msgstr "Nauru" + +#: wp-admin/includes/continents-cities.php:536 +msgid "Niue" +msgstr "Niue" + +#: wp-admin/includes/continents-cities.php:537 +msgid "Norfolk" +msgstr "Norfolk" + +#: wp-admin/includes/continents-cities.php:538 +msgid "Noumea" +msgstr "Nouméa" + +#: wp-admin/includes/continents-cities.php:539 +msgid "Pago Pago" +msgstr "Pago Pago" + +#: wp-admin/includes/continents-cities.php:540 +msgid "Palau" +msgstr "Palau" + +#: wp-admin/includes/continents-cities.php:541 +msgid "Pitcairn" +msgstr "Pitcairnöarna" + +#: wp-admin/includes/continents-cities.php:543 +msgid "Ponape" +msgstr "Pohnpei" + +#: wp-admin/includes/continents-cities.php:544 +msgid "Port Moresby" +msgstr "Port Moresby" + +#: wp-admin/includes/continents-cities.php:545 +msgid "Rarotonga" +msgstr "Rarotonga" + +#: wp-admin/includes/continents-cities.php:546 +msgid "Saipan" +msgstr "Saipan" + +#: wp-admin/includes/continents-cities.php:547 +msgid "Samoa" +msgstr "Samoa" + +#: wp-admin/includes/continents-cities.php:548 +msgid "Tahiti" +msgstr "Tahiti" + +#: wp-admin/includes/continents-cities.php:549 +msgid "Tarawa" +msgstr "Tarawa" + +#: wp-admin/includes/continents-cities.php:550 +msgid "Tongatapu" +msgstr "Tongatapu" + +#: wp-admin/includes/continents-cities.php:551 +msgid "Truk" +msgstr "Truk" + +#: wp-admin/includes/continents-cities.php:552 +msgid "Wake" +msgstr "Wakeöarna" + +#: wp-admin/includes/continents-cities.php:553 +msgid "Wallis" +msgstr "Wallisön" + +#: wp-admin/includes/continents-cities.php:554 +msgid "Yap" +msgstr "Yapöarna" + +#: wp-admin/includes/continents-cities.php:436 +msgid "Astrakhan" +msgstr "Astrachan" + +#: wp-admin/includes/continents-cities.php:445 +msgid "Busingen" +msgstr "Busingen" + +#: wp-admin/includes/continents-cities.php:457 +msgid "Kirov" +msgstr "Kirov" + +#: wp-admin/includes/continents-cities.php:486 +msgid "Ulyanovsk" +msgstr "Ulyanovsk" + +#: wp-admin/includes/continents-cities.php:514 +msgid "Bougainville" +msgstr "Bougainville" + +#: wp-admin/includes/continents-cities.php:516 +msgid "Chuuk" +msgstr "Chuuk" + +#: wp-admin/includes/continents-cities.php:542 +msgid "Pohnpei" +msgstr "Pohnpei" + +#: wp-admin/includes/continents-cities.php:478 +msgid "Saratov" +msgstr "Saratov" + +#: wp-admin/includes/continents-cities.php:12 +msgid "Africa" +msgstr "Afrika" + +#: wp-admin/includes/continents-cities.php:13 +msgid "Abidjan" +msgstr "Abidjan" + +#: wp-admin/includes/continents-cities.php:14 +msgid "Accra" +msgstr "Accra" + +#: wp-admin/includes/continents-cities.php:15 +msgid "Addis Ababa" +msgstr "Addis Ababa" + +#: wp-admin/includes/continents-cities.php:16 +msgid "Algiers" +msgstr "Alger" + +#: wp-admin/includes/continents-cities.php:17 +msgid "Asmara" +msgstr "Asmara" + +#: wp-admin/includes/continents-cities.php:18 +msgid "Asmera" +msgstr "Asmera" + +#: wp-admin/includes/continents-cities.php:19 +msgid "Bamako" +msgstr "Bamako" + +#: wp-admin/includes/continents-cities.php:20 +msgid "Bangui" +msgstr "Bangui" + +#: wp-admin/includes/continents-cities.php:21 +msgid "Banjul" +msgstr "Banjul" + +#: wp-admin/includes/continents-cities.php:22 +msgid "Bissau" +msgstr "Bissau" + +#: wp-admin/includes/continents-cities.php:23 +msgid "Blantyre" +msgstr "Blantyre" + +#: wp-admin/includes/continents-cities.php:24 +msgid "Brazzaville" +msgstr "Brazzaville" + +#: wp-admin/includes/continents-cities.php:25 +msgid "Bujumbura" +msgstr "Bujumbura" + +#: wp-admin/includes/continents-cities.php:26 +msgid "Cairo" +msgstr "Kairo" + +#: wp-admin/includes/continents-cities.php:27 +msgid "Casablanca" +msgstr "Casablanca" + +#: wp-admin/includes/continents-cities.php:28 +msgid "Ceuta" +msgstr "Ceuta" + +#: wp-admin/includes/continents-cities.php:29 +msgid "Conakry" +msgstr "Konakry" + +#: wp-admin/includes/continents-cities.php:30 +msgid "Dakar" +msgstr "Dakar" + +#: wp-admin/includes/continents-cities.php:31 +msgid "Dar es Salaam" +msgstr "Dar es-Salaam" + +#: wp-admin/includes/continents-cities.php:32 +msgid "Djibouti" +msgstr "Djibouti" + +#: wp-admin/includes/continents-cities.php:33 +msgid "Douala" +msgstr "Douala" + +#: wp-admin/includes/continents-cities.php:34 +msgid "El Aaiun" +msgstr "Al-Ayun" + +#: wp-admin/includes/continents-cities.php:35 +msgid "Freetown" +msgstr "Freetown" + +#: wp-admin/includes/continents-cities.php:36 +msgid "Gaborone" +msgstr "Gaborone" + +#: wp-admin/includes/continents-cities.php:37 +msgid "Harare" +msgstr "Harare" + +#: wp-admin/includes/continents-cities.php:38 +msgid "Johannesburg" +msgstr "Johannesburg" + +#: wp-admin/includes/continents-cities.php:40 +msgid "Kampala" +msgstr "Kampala" + +#: wp-admin/includes/continents-cities.php:41 +msgid "Khartoum" +msgstr "Khartoum" + +#: wp-admin/includes/continents-cities.php:42 +msgid "Kigali" +msgstr "Kigali" + +#: wp-admin/includes/continents-cities.php:43 +msgid "Kinshasa" +msgstr "Kinshasa" + +#: wp-admin/includes/continents-cities.php:44 +msgid "Lagos" +msgstr "Lagos" + +#: wp-admin/includes/continents-cities.php:45 +msgid "Libreville" +msgstr "Libreville" + +#: wp-admin/includes/continents-cities.php:46 +msgid "Lome" +msgstr "Lomé" + +#: wp-admin/includes/continents-cities.php:47 +msgid "Luanda" +msgstr "Luanda" + +#: wp-admin/includes/continents-cities.php:48 +msgid "Lubumbashi" +msgstr "Lubumbashi" + +#: wp-admin/includes/continents-cities.php:49 +msgid "Lusaka" +msgstr "Lusaka" + +#: wp-admin/includes/continents-cities.php:50 +msgid "Malabo" +msgstr "Malabo" + +#: wp-admin/includes/continents-cities.php:51 +msgid "Maputo" +msgstr "Maputo" + +#: wp-admin/includes/continents-cities.php:52 +msgid "Maseru" +msgstr "Maseru" + +#: wp-admin/includes/continents-cities.php:53 +msgid "Mbabane" +msgstr "Mbabane" + +#: wp-admin/includes/continents-cities.php:54 +msgid "Mogadishu" +msgstr "Mogadishu" + +#: wp-admin/includes/continents-cities.php:55 +msgid "Monrovia" +msgstr "Monrovia" + +#: wp-admin/includes/continents-cities.php:56 +msgid "Nairobi" +msgstr "Nairobi" + +#: wp-admin/includes/continents-cities.php:57 +msgid "Ndjamena" +msgstr "N'Djamena" + +#: wp-admin/includes/continents-cities.php:58 +msgid "Niamey" +msgstr "Niamey" + +#: wp-admin/includes/continents-cities.php:59 +msgid "Nouakchott" +msgstr "Nouakchott" + +#: wp-admin/includes/continents-cities.php:60 +msgid "Ouagadougou" +msgstr "Ouagadougou" + +#: wp-admin/includes/continents-cities.php:61 +msgid "Porto-Novo" +msgstr "Porto-Novo" + +#: wp-admin/includes/continents-cities.php:62 +msgid "Sao Tome" +msgstr "São Tomé" + +#: wp-admin/includes/continents-cities.php:63 +msgid "Timbuktu" +msgstr "Timbuktu" + +#: wp-admin/includes/continents-cities.php:64 +msgid "Tripoli" +msgstr "Tripoli" + +#: wp-admin/includes/continents-cities.php:65 +msgid "Tunis" +msgstr "Tunis" + +#: wp-admin/includes/continents-cities.php:66 +msgid "Windhoek" +msgstr "Windhoek" + +#: wp-admin/includes/continents-cities.php:68 +msgid "America" +msgstr "Amerika" + +#: wp-admin/includes/continents-cities.php:69 +msgid "Adak" +msgstr "Adak" + +#: wp-admin/includes/continents-cities.php:70 +msgid "Anchorage" +msgstr "Anchorage" + +#: wp-admin/includes/continents-cities.php:71 +msgid "Anguilla" +msgstr "Anguilla" + +#: wp-admin/includes/continents-cities.php:72 +msgid "Antigua" +msgstr "Antigua" + +#: wp-admin/includes/continents-cities.php:73 +msgid "Araguaina" +msgstr "Araguaína" + +#: wp-admin/includes/continents-cities.php:74 +msgid "Argentina" +msgstr "Argentina" + +#: wp-admin/includes/continents-cities.php:75 +#: wp-admin/includes/continents-cities.php:101 +msgid "Buenos Aires" +msgstr "Buenos Aires" + +#: wp-admin/includes/continents-cities.php:76 +#: wp-admin/includes/continents-cities.php:106 +msgid "Catamarca" +msgstr "Cajamarca" + +#: wp-admin/includes/continents-cities.php:77 +msgid "ComodRivadavia" +msgstr "Comodoro Rivadavia" + +#: wp-admin/includes/continents-cities.php:78 +#: wp-admin/includes/continents-cities.php:112 +msgid "Cordoba" +msgstr "Córdoba" + +#: wp-admin/includes/continents-cities.php:79 +#: wp-admin/includes/continents-cities.php:155 +msgid "Jujuy" +msgstr "Jujuy" + +#: wp-admin/includes/continents-cities.php:80 +msgid "La Rioja" +msgstr "La Rioja" + +#: wp-admin/includes/continents-cities.php:81 +#: wp-admin/includes/continents-cities.php:174 +msgid "Mendoza" +msgstr "Mendoza" + +#: wp-admin/includes/continents-cities.php:82 +msgid "Rio Gallegos" +msgstr "Río Gallegos" + +#: wp-admin/includes/continents-cities.php:84 +msgid "San Juan" +msgstr "San Juan" + +#: wp-admin/includes/continents-cities.php:85 +msgid "San Luis" +msgstr "San Luis" + +#: wp-admin/includes/continents-cities.php:86 +msgid "Tucuman" +msgstr "Tucumán" + +#: wp-admin/includes/continents-cities.php:87 +msgid "Ushuaia" +msgstr "Ushuaia" + +#: wp-admin/includes/continents-cities.php:88 +msgid "Aruba" +msgstr "Aruba" + +#: wp-admin/includes/continents-cities.php:89 +msgid "Asuncion" +msgstr "Asunción" + +#: wp-admin/includes/continents-cities.php:90 +msgid "Atikokan" +msgstr "Atikokan" + +#: wp-admin/includes/continents-cities.php:91 +msgid "Atka" +msgstr "Atka" + +#: wp-admin/includes/continents-cities.php:92 +msgid "Bahia" +msgstr "Bahia" + +#: wp-admin/includes/continents-cities.php:94 +msgid "Barbados" +msgstr "Barbados" + +#: wp-admin/includes/continents-cities.php:95 +msgid "Belem" +msgstr "Belém" + +#: wp-admin/includes/continents-cities.php:96 +msgid "Belize" +msgstr "Belize" + +#: wp-admin/includes/continents-cities.php:97 +msgid "Blanc-Sablon" +msgstr "Blanc-Sablon" + +#: wp-admin/includes/continents-cities.php:98 +msgid "Boa Vista" +msgstr "Boa Vista" + +#: wp-admin/includes/continents-cities.php:99 +msgid "Bogota" +msgstr "Bogotá" + +#: wp-admin/includes/continents-cities.php:100 +msgid "Boise" +msgstr "Boise" + +#: wp-admin/includes/continents-cities.php:102 +msgid "Cambridge Bay" +msgstr "Cambridge Bay" + +#: wp-admin/includes/continents-cities.php:103 +msgid "Campo Grande" +msgstr "Campo Grande" + +#: wp-admin/includes/continents-cities.php:104 +msgid "Cancun" +msgstr "Cancún" + +#: wp-admin/includes/continents-cities.php:105 +msgid "Caracas" +msgstr "Caracas" + +#: wp-admin/includes/continents-cities.php:107 +msgid "Cayenne" +msgstr "Cayenne" + +#: wp-admin/includes/continents-cities.php:108 +msgid "Cayman" +msgstr "Cayman" + +#: wp-admin/includes/continents-cities.php:109 +msgid "Chicago" +msgstr "Chicago" + +#: wp-admin/includes/continents-cities.php:110 +msgid "Chihuahua" +msgstr "Chihuahua" + +#: wp-admin/includes/continents-cities.php:111 +msgid "Coral Harbour" +msgstr "Coral Harbour" + +#: wp-admin/includes/continents-cities.php:113 +msgid "Costa Rica" +msgstr "Costa Rica" + +#: wp-admin/includes/continents-cities.php:115 +msgid "Cuiaba" +msgstr "Cuiabá" + +#: wp-admin/includes/continents-cities.php:116 +msgid "Curacao" +msgstr "Curaçao" + +#: wp-admin/includes/continents-cities.php:117 +msgid "Danmarkshavn" +msgstr "Danmarkshavn" + +#: wp-admin/includes/continents-cities.php:118 +msgid "Dawson" +msgstr "Dawson" + +#: wp-admin/includes/continents-cities.php:119 +msgid "Dawson Creek" +msgstr "Dawson Creek" + +#: wp-admin/includes/continents-cities.php:120 +msgid "Denver" +msgstr "Denver" + +#: wp-admin/includes/continents-cities.php:121 +msgid "Detroit" +msgstr "Detroit" + +#: wp-admin/includes/continents-cities.php:122 +msgid "Dominica" +msgstr "Dominica" + +#: wp-admin/includes/continents-cities.php:123 +msgid "Edmonton" +msgstr "Edmonton" + +#: wp-admin/includes/continents-cities.php:124 +msgid "Eirunepe" +msgstr "Eirunepe" + +#: wp-admin/includes/continents-cities.php:125 +msgid "El Salvador" +msgstr "El Salvador" + +#: wp-admin/includes/continents-cities.php:126 +msgid "Ensenada" +msgstr "Ensenada" + +#: wp-admin/includes/continents-cities.php:128 +msgid "Fort Wayne" +msgstr "Fort Wayne" + +#: wp-admin/includes/continents-cities.php:129 +msgid "Fortaleza" +msgstr "Fortaleza" + +#: wp-admin/includes/continents-cities.php:130 +msgid "Glace Bay" +msgstr "Glace Bay" + +#: wp-admin/includes/continents-cities.php:131 +msgid "Godthab" +msgstr "Nuuk" + +#: wp-admin/includes/continents-cities.php:132 +msgid "Goose Bay" +msgstr "Goose Bay" + +#: wp-admin/includes/continents-cities.php:133 +msgid "Grand Turk" +msgstr "Grand Turk" + +#: wp-admin/includes/continents-cities.php:134 +msgid "Grenada" +msgstr "Grenada" + +#: wp-admin/includes/continents-cities.php:135 +msgid "Guadeloupe" +msgstr "Guadeloupe" + +#: wp-admin/includes/continents-cities.php:136 +msgid "Guatemala" +msgstr "Guatemala" + +#: wp-admin/includes/continents-cities.php:137 +msgid "Guayaquil" +msgstr "Guayaquil" + +#: wp-admin/includes/continents-cities.php:138 +msgid "Guyana" +msgstr "Guyana" + +#: wp-admin/includes/continents-cities.php:139 +msgid "Halifax" +msgstr "Halifax" + +#: wp-admin/includes/continents-cities.php:140 +msgid "Havana" +msgstr "Havanna" + +#: wp-admin/includes/continents-cities.php:141 +msgid "Hermosillo" +msgstr "Hermosillo" + +#: wp-admin/includes/continents-cities.php:142 +msgid "Indiana" +msgstr "Indiana" + +#: wp-admin/includes/continents-cities.php:143 +#: wp-admin/includes/continents-cities.php:151 +msgid "Indianapolis" +msgstr "Indianapolis" + +#: wp-admin/includes/continents-cities.php:144 +msgid "Knox" +msgstr "Knox" + +#: wp-admin/includes/continents-cities.php:145 +msgid "Marengo" +msgstr "Marengo" + +#: wp-admin/includes/continents-cities.php:146 +msgid "Petersburg" +msgstr "Petersburg" + +#: wp-admin/includes/continents-cities.php:147 +msgid "Tell City" +msgstr "Tell City" + +#: wp-admin/includes/continents-cities.php:148 +msgid "Vevay" +msgstr "Vevay" + +#: wp-admin/includes/continents-cities.php:149 +msgid "Vincennes" +msgstr "Vincennes" + +#: wp-admin/includes/continents-cities.php:150 +msgid "Winamac" +msgstr "Winamac" + +#: wp-admin/includes/continents-cities.php:152 +msgid "Inuvik" +msgstr "Inuvik" + +#: wp-admin/includes/continents-cities.php:153 +msgid "Iqaluit" +msgstr "Iqaluit" + +#: wp-admin/includes/continents-cities.php:154 +msgid "Jamaica" +msgstr "Jamaica" + +#: wp-admin/includes/continents-cities.php:156 +msgid "Juneau" +msgstr "Juneau" + +#: wp-admin/includes/continents-cities.php:157 +msgid "Kentucky" +msgstr "Kentucky" + +#: wp-admin/includes/continents-cities.php:158 +#: wp-admin/includes/continents-cities.php:165 +msgid "Louisville" +msgstr "Louisville" + +#: wp-admin/includes/continents-cities.php:159 +msgid "Monticello" +msgstr "Monticello" + +#: wp-admin/includes/continents-cities.php:160 +msgid "Knox IN" +msgstr "Knox" + +#: wp-admin/includes/continents-cities.php:162 +msgid "La Paz" +msgstr "La Paz" + +#: wp-admin/includes/continents-cities.php:163 +msgid "Lima" +msgstr "Lima" + +#: wp-admin/includes/continents-cities.php:164 +msgid "Los Angeles" +msgstr "Los Angeles" + +#: wp-admin/includes/continents-cities.php:167 +msgid "Maceio" +msgstr "Maceió" + +#: wp-admin/includes/continents-cities.php:168 +msgid "Managua" +msgstr "Managua" + +#: wp-admin/includes/continents-cities.php:169 +msgid "Manaus" +msgstr "Manaus" + +#: wp-admin/includes/continents-cities.php:170 +msgid "Marigot" +msgstr "Marigot" + +#: wp-admin/includes/continents-cities.php:171 +msgid "Martinique" +msgstr "Martinique" + +#: wp-admin/includes/continents-cities.php:173 +msgid "Mazatlan" +msgstr "Mazatlán" + +#: wp-admin/includes/continents-cities.php:175 +msgid "Menominee" +msgstr "Menominee" + +#: wp-admin/includes/continents-cities.php:176 +msgid "Merida" +msgstr "Mérida" + +#: wp-admin/includes/continents-cities.php:178 +msgid "Mexico City" +msgstr "Mexico City" + +#: wp-admin/includes/continents-cities.php:179 +msgid "Miquelon" +msgstr "Miquelon" + +#: wp-admin/includes/continents-cities.php:180 +msgid "Moncton" +msgstr "Moncton" + +#: wp-admin/includes/continents-cities.php:181 +msgid "Monterrey" +msgstr "Monterrey" + +#: wp-admin/includes/continents-cities.php:182 +msgid "Montevideo" +msgstr "Montevideo" + +#: wp-admin/includes/continents-cities.php:183 +msgid "Montreal" +msgstr "Montreal" + +#: wp-admin/includes/continents-cities.php:184 +msgid "Montserrat" +msgstr "Montserrat" + +#: wp-admin/includes/continents-cities.php:185 +msgid "Nassau" +msgstr "Nassau" + +#: wp-admin/includes/continents-cities.php:186 +msgid "New York" +msgstr "New York" + +#: wp-admin/includes/continents-cities.php:187 +msgid "Nipigon" +msgstr "Nipigon" + +#: wp-admin/includes/continents-cities.php:188 +msgid "Nome" +msgstr "Nome" + +#: wp-admin/includes/continents-cities.php:189 +msgid "Noronha" +msgstr "Noronha" + +#: wp-admin/includes/continents-cities.php:190 +msgid "North Dakota" +msgstr "North Dakota" + +#: wp-admin/includes/continents-cities.php:192 +msgid "Center" +msgstr "Center" + +#: wp-admin/includes/continents-cities.php:193 +msgid "New Salem" +msgstr "New Salem" + +#: wp-admin/includes/continents-cities.php:195 +msgid "Panama" +msgstr "Panama" + +#: wp-admin/includes/continents-cities.php:196 +msgid "Pangnirtung" +msgstr "Pangnirtung" + +#: wp-admin/includes/continents-cities.php:197 +msgid "Paramaribo" +msgstr "Paramaribo" + +#: wp-admin/includes/continents-cities.php:198 +msgid "Phoenix" +msgstr "Phoenix" + +#: wp-admin/includes/continents-cities.php:200 +msgid "Port-au-Prince" +msgstr "Port-au-Prince" + +#: wp-admin/includes/continents-cities.php:199 +msgid "Port of Spain" +msgstr "Port of Spain" + +#: wp-admin/includes/continents-cities.php:201 +msgid "Porto Acre" +msgstr "Porto Acre" + +#: wp-admin/includes/continents-cities.php:202 +msgid "Porto Velho" +msgstr "Porto Velho" + +#: wp-admin/includes/continents-cities.php:203 +msgid "Puerto Rico" +msgstr "Puerto Rico" + +#: wp-admin/includes/continents-cities.php:205 +msgid "Rainy River" +msgstr "Rainy River" + +#: wp-admin/includes/continents-cities.php:206 +msgid "Rankin Inlet" +msgstr "Rankin Inlet" + +#: wp-admin/includes/continents-cities.php:207 +msgid "Recife" +msgstr "Recife" + +#: wp-admin/includes/continents-cities.php:208 +msgid "Regina" +msgstr "Regina" + +#: wp-admin/includes/continents-cities.php:209 +msgid "Resolute" +msgstr "Resolute" + +#: wp-admin/includes/continents-cities.php:210 +msgid "Rio Branco" +msgstr "Rio Branco" + +#: wp-admin/includes/continents-cities.php:211 +msgid "Rosario" +msgstr "Rosario" + +#: wp-admin/includes/continents-cities.php:214 +msgid "Santiago" +msgstr "Santiago" + +#: wp-admin/includes/continents-cities.php:215 +msgid "Santo Domingo" +msgstr "Santo Domingo" + +#: wp-admin/includes/continents-cities.php:216 +msgid "Sao Paulo" +msgstr "São Paulo" + +#: wp-admin/includes/continents-cities.php:217 +msgid "Scoresbysund" +msgstr "Ittoqqortoormiit" + +#: wp-admin/includes/continents-cities.php:218 +msgid "Shiprock" +msgstr "Shiprock" + +#: wp-admin/includes/continents-cities.php:220 +msgid "St Barthelemy" +msgstr "Saint-Barthélemy" + +#: wp-admin/includes/continents-cities.php:221 +msgid "St Johns" +msgstr "Saint Johns" + +#: wp-admin/includes/continents-cities.php:222 +msgid "St Kitts" +msgstr "Saint Kitts" + +#: wp-admin/includes/continents-cities.php:223 +msgid "St Lucia" +msgstr "Saint Lucia" + +#: wp-admin/includes/continents-cities.php:224 +msgid "St Thomas" +msgstr "Saint Thomas" + +#: wp-admin/includes/continents-cities.php:225 +msgid "St Vincent" +msgstr "Saint Vincent" + +#: wp-admin/includes/continents-cities.php:226 +msgid "Swift Current" +msgstr "Swift Current" + +#: wp-admin/includes/continents-cities.php:227 +msgid "Tegucigalpa" +msgstr "Tegucigalpa" + +#: wp-admin/includes/continents-cities.php:228 +msgid "Thule" +msgstr "Qaanaaq" + +#: wp-admin/includes/continents-cities.php:229 +msgid "Thunder Bay" +msgstr "Thunder Bay" + +#: wp-admin/includes/continents-cities.php:230 +msgid "Tijuana" +msgstr "Tijuana" + +#: wp-admin/includes/continents-cities.php:231 +msgid "Toronto" +msgstr "Toronto" + +#: wp-admin/includes/continents-cities.php:232 +msgid "Tortola" +msgstr "Tortola" + +#: wp-admin/includes/continents-cities.php:233 +msgid "Vancouver" +msgstr "Vancouver" + +#: wp-admin/includes/continents-cities.php:234 +msgid "Virgin" +msgstr "Virgin" + +#: wp-admin/includes/continents-cities.php:235 +msgid "Whitehorse" +msgstr "Whitehorse" + +#: wp-admin/includes/continents-cities.php:236 +msgid "Winnipeg" +msgstr "Winnipeg" + +#: wp-admin/includes/continents-cities.php:237 +msgid "Yakutat" +msgstr "Yakutat" + +#: wp-admin/includes/continents-cities.php:238 +msgid "Yellowknife" +msgstr "Yellowknife" + +#: wp-admin/includes/continents-cities.php:240 +msgid "Antarctica" +msgstr "Antarktis" + +#: wp-admin/includes/continents-cities.php:241 +msgid "Casey" +msgstr "Casey" + +#: wp-admin/includes/continents-cities.php:242 +msgid "Davis" +msgstr "Davis" + +#: wp-admin/includes/continents-cities.php:243 +msgid "DumontDUrville" +msgstr "Dumont d'Urville" + +#: wp-admin/includes/continents-cities.php:245 +msgid "Mawson" +msgstr "Mawson" + +#: wp-admin/includes/continents-cities.php:246 +msgid "McMurdo" +msgstr "McMurdo" + +#: wp-admin/includes/continents-cities.php:247 +msgid "Palmer" +msgstr "Palmer" + +#: wp-admin/includes/continents-cities.php:248 +msgid "Rothera" +msgstr "Rothera" + +#: wp-admin/includes/continents-cities.php:249 +msgid "South Pole" +msgstr "Sydpolen" + +#: wp-admin/includes/continents-cities.php:250 +msgid "Syowa" +msgstr "Syowa" + +#: wp-admin/includes/continents-cities.php:252 +msgid "Vostok" +msgstr "Vostok" + +#: wp-admin/includes/continents-cities.php:254 +msgid "Arctic" +msgstr "Arktis" + +#: wp-admin/includes/continents-cities.php:255 +msgid "Longyearbyen" +msgstr "Longyearbyen" + +#: wp-admin/includes/continents-cities.php:257 +msgid "Asia" +msgstr "Asien" + +#: wp-admin/includes/continents-cities.php:258 +msgid "Aden" +msgstr "Aden" + +#: wp-admin/includes/continents-cities.php:259 +msgid "Almaty" +msgstr "Almaty" + +#: wp-admin/includes/continents-cities.php:260 +msgid "Amman" +msgstr "Amman" + +#: wp-admin/includes/continents-cities.php:261 +msgid "Anadyr" +msgstr "Anadyr" + +#: wp-admin/includes/continents-cities.php:262 +msgid "Aqtau" +msgstr "Aqtau" + +#: wp-admin/includes/continents-cities.php:263 +msgid "Aqtobe" +msgstr "Aqtöbe" + +#: wp-admin/includes/continents-cities.php:264 +msgid "Ashgabat" +msgstr "Asjchabad" + +#: wp-admin/includes/continents-cities.php:265 +msgid "Ashkhabad" +msgstr "Asjchabad" + +#: wp-admin/includes/continents-cities.php:267 +msgid "Baghdad" +msgstr "Bagdad" + +#: wp-admin/includes/continents-cities.php:268 +msgid "Bahrain" +msgstr "Bahrain" + +#: wp-admin/includes/continents-cities.php:269 +msgid "Baku" +msgstr "Baku" + +#: wp-admin/includes/continents-cities.php:270 +msgid "Bangkok" +msgstr "Bangkok" + +#: wp-admin/includes/continents-cities.php:272 +msgid "Beirut" +msgstr "Beirut" + +#: wp-admin/includes/continents-cities.php:273 +msgid "Bishkek" +msgstr "Bisjkek" + +#: wp-admin/includes/continents-cities.php:274 +msgid "Brunei" +msgstr "Brunei" + +#: wp-admin/includes/continents-cities.php:275 +msgid "Calcutta" +msgstr "Calcutta" + +#: wp-admin/includes/continents-cities.php:277 +msgid "Choibalsan" +msgstr "Tjojbalsan" + +#: wp-admin/includes/continents-cities.php:278 +msgid "Chongqing" +msgstr "Chongqing" + +#: wp-admin/includes/continents-cities.php:279 +msgid "Chungking" +msgstr "Chungking" + +#: wp-admin/includes/continents-cities.php:280 +msgid "Colombo" +msgstr "Colombo" + +#: wp-admin/includes/continents-cities.php:281 +msgid "Dacca" +msgstr "Dhaka" + +#: wp-admin/includes/continents-cities.php:282 +msgid "Damascus" +msgstr "Damaskus" + +#: wp-admin/includes/continents-cities.php:283 +msgid "Dhaka" +msgstr "Dhaka" + +#: wp-admin/includes/continents-cities.php:284 +msgid "Dili" +msgstr "Dili" + +#: wp-admin/includes/continents-cities.php:285 +msgid "Dubai" +msgstr "Dubai" + +#: wp-admin/includes/continents-cities.php:286 +msgid "Dushanbe" +msgstr "Dusjanbe" + +#: wp-admin/includes/continents-cities.php:288 +msgid "Gaza" +msgstr "Gaza" + +#: wp-admin/includes/continents-cities.php:289 +msgid "Harbin" +msgstr "Harbin" + +#: wp-admin/includes/continents-cities.php:291 +msgid "Ho Chi Minh" +msgstr "Ho Chi Minh" + +#: wp-admin/includes/continents-cities.php:292 +msgid "Hong Kong" +msgstr "Hong Kong" + +#: wp-admin/includes/continents-cities.php:293 +msgid "Hovd" +msgstr "Chovd" + +#: wp-admin/includes/continents-cities.php:294 +msgid "Irkutsk" +msgstr "Irkutsk" + +#: wp-admin/includes/continents-cities.php:295 +#: wp-admin/includes/continents-cities.php:453 +msgid "Istanbul" +msgstr "Istanbul" + +#: wp-admin/includes/continents-cities.php:296 +msgid "Jakarta" +msgstr "Jakarta" + +#: wp-admin/includes/continents-cities.php:297 +msgid "Jayapura" +msgstr "Jayapura" + +#: wp-admin/includes/continents-cities.php:298 +msgid "Jerusalem" +msgstr "Jerusalem" + +#: wp-admin/includes/continents-cities.php:299 +msgid "Kabul" +msgstr "Kabul" + +#: wp-admin/includes/continents-cities.php:300 +msgid "Kamchatka" +msgstr "Kamtjatka" + +#: wp-admin/includes/continents-cities.php:301 +msgid "Karachi" +msgstr "Karachi" + +#: wp-admin/includes/continents-cities.php:302 +msgid "Kashgar" +msgstr "Kashgar" + +#: wp-admin/includes/continents-cities.php:304 +msgid "Katmandu" +msgstr "Katmandu" + +#: wp-admin/includes/continents-cities.php:306 +msgid "Kolkata" +msgstr "Calcutta" + +#: wp-admin/includes/continents-cities.php:307 +msgid "Krasnoyarsk" +msgstr "Krasnojarsk" + +#: wp-admin/includes/continents-cities.php:308 +msgid "Kuala Lumpur" +msgstr "Kuala Lumpur" + +#: wp-admin/includes/continents-cities.php:309 +msgid "Kuching" +msgstr "Kuching" + +#: wp-admin/includes/continents-cities.php:310 +msgid "Kuwait" +msgstr "Kuwait" + +#: wp-admin/includes/continents-cities.php:311 +msgid "Macao" +msgstr "Macao" + +#: wp-admin/includes/continents-cities.php:312 +msgid "Macau" +msgstr "Macau" + +#: wp-admin/includes/continents-cities.php:313 +msgid "Magadan" +msgstr "Magadan" + +#: wp-admin/includes/continents-cities.php:314 +msgid "Makassar" +msgstr "Makassar" + +#: wp-admin/includes/continents-cities.php:315 +msgid "Manila" +msgstr "Manila" + +#: wp-admin/includes/continents-cities.php:316 +msgid "Muscat" +msgstr "Muscat" + +#: wp-admin/includes/continents-cities.php:317 +#: wp-admin/includes/continents-cities.php:468 +msgid "Nicosia" +msgstr "Nicosia" + +#: wp-admin/includes/continents-cities.php:319 +msgid "Novosibirsk" +msgstr "Novosibirsk" + +#: wp-admin/includes/continents-cities.php:320 +msgid "Omsk" +msgstr "Omsk" + +#: wp-admin/includes/continents-cities.php:321 +msgid "Oral" +msgstr "Oral" + +#: wp-admin/includes/continents-cities.php:322 +msgid "Phnom Penh" +msgstr "Phnom Penh" + +#: wp-admin/includes/continents-cities.php:323 +msgid "Pontianak" +msgstr "Pontianak" + +#: wp-admin/includes/continents-cities.php:324 +msgid "Pyongyang" +msgstr "Pyongyang" + +#: wp-admin/includes/continents-cities.php:325 +msgid "Qatar" +msgstr "Qatar" + +#: wp-admin/includes/continents-cities.php:326 +msgid "Qyzylorda" +msgstr "Qyzylorda" + +#: wp-admin/includes/continents-cities.php:327 +msgid "Rangoon" +msgstr "Rangoon" + +#: wp-admin/includes/continents-cities.php:328 +msgid "Riyadh" +msgstr "Riyadh" + +#: wp-admin/includes/continents-cities.php:329 +msgid "Saigon" +msgstr "Ho Chi Minh" + +#: wp-admin/includes/continents-cities.php:330 +msgid "Sakhalin" +msgstr "Sachalin" + +#: wp-admin/includes/continents-cities.php:331 +msgid "Samarkand" +msgstr "Samarkand" + +#: wp-admin/includes/continents-cities.php:332 +msgid "Seoul" +msgstr "Seoul" + +#: wp-admin/includes/continents-cities.php:333 +msgid "Shanghai" +msgstr "Shanghai" + +#: wp-admin/includes/continents-cities.php:334 +msgid "Singapore" +msgstr "Singapore" + +#: wp-admin/includes/continents-cities.php:336 +msgid "Taipei" +msgstr "Taipei" + +#: wp-admin/includes/continents-cities.php:337 +msgid "Tashkent" +msgstr "Tasjkent" + +#: wp-admin/includes/continents-cities.php:338 +msgid "Tbilisi" +msgstr "Tbilisi" + +#: wp-admin/includes/continents-cities.php:339 +msgid "Tehran" +msgstr "Teheran" + +#: wp-admin/includes/continents-cities.php:340 +msgid "Tel Aviv" +msgstr "Tel Aviv" + +#: wp-admin/includes/continents-cities.php:341 +msgid "Thimbu" +msgstr "Thimphu" + +#: wp-admin/includes/continents-cities.php:342 +msgid "Thimphu" +msgstr "Thimphu" + +#: wp-admin/includes/continents-cities.php:343 +msgid "Tokyo" +msgstr "Tokyo" + +#: wp-admin/includes/continents-cities.php:345 +msgid "Ujung Pandang" +msgstr "Makassar" + +#: wp-admin/includes/continents-cities.php:346 +msgid "Ulaanbaatar" +msgstr "Ulaanbaatar" + +#: wp-admin/includes/continents-cities.php:347 +msgid "Ulan Bator" +msgstr "Ulaanbaatar" + +#: wp-admin/includes/continents-cities.php:348 +msgid "Urumqi" +msgstr "Ürümqi" + +#: wp-admin/includes/continents-cities.php:350 +msgid "Vientiane" +msgstr "Vientiane" + +#: wp-admin/includes/continents-cities.php:351 +msgid "Vladivostok" +msgstr "Vladivostok" + +#: wp-admin/includes/continents-cities.php:352 +msgid "Yakutsk" +msgstr "Jakutsk" + +#: wp-admin/includes/continents-cities.php:354 +msgid "Yekaterinburg" +msgstr "Jekaterinburg" + +#: wp-admin/includes/continents-cities.php:355 +msgid "Yerevan" +msgstr "Jerevan" + +#: wp-admin/includes/continents-cities.php:357 +msgid "Atlantic" +msgstr "Atlanten" + +#: wp-admin/includes/continents-cities.php:358 +msgid "Azores" +msgstr "Azorerna" + +#: wp-admin/includes/continents-cities.php:359 +msgid "Bermuda" +msgstr "Bermuda" + +#: wp-admin/includes/continents-cities.php:360 +msgid "Canary" +msgstr "Canary" + +#: wp-admin/includes/continents-cities.php:361 +msgid "Cape Verde" +msgstr "Kap Verde" + +#: wp-admin/includes/continents-cities.php:362 +msgid "Faeroe" +msgstr "Färöarna" + +#: wp-admin/includes/continents-cities.php:363 +msgid "Faroe" +msgstr "Färöarna" + +#: wp-admin/includes/continents-cities.php:364 +msgid "Jan Mayen" +msgstr "Jan Mayen" + +#: wp-admin/includes/continents-cities.php:365 +msgid "Madeira" +msgstr "Madeira" + +#: wp-admin/includes/continents-cities.php:366 +msgid "Reykjavik" +msgstr "Reykjavik" + +#: wp-admin/includes/continents-cities.php:367 +msgid "South Georgia" +msgstr "Sydgeorgien" + +#: wp-admin/includes/continents-cities.php:368 +msgid "St Helena" +msgstr "Sankta Helena" + +#: wp-admin/includes/continents-cities.php:93 +msgid "Bahia Banderas" +msgstr "Bahia Banderas" + +#: wp-admin/includes/continents-cities.php:127 +msgid "Fort Nelson" +msgstr "Fort Nelson" + +#: wp-admin/includes/continents-cities.php:114 +msgid "Creston" +msgstr "Creston" + +#: wp-admin/includes/continents-cities.php:161 +msgid "Kralendijk" +msgstr "Kralendijk" + +#: wp-admin/includes/continents-cities.php:166 +msgid "Lower Princes" +msgstr "Lower Princes" + +#: wp-admin/includes/continents-cities.php:172 +msgid "Matamoros" +msgstr "Matamoros" + +#: wp-admin/includes/continents-cities.php:177 +msgid "Metlakatla" +msgstr "Metlakatla" + +#: wp-admin/includes/continents-cities.php:191 +msgid "Beulah" +msgstr "Beulah" + +#: wp-admin/includes/continents-cities.php:194 +msgid "Ojinaga" +msgstr "Ojinaga" + +#: wp-admin/includes/continents-cities.php:212 +msgid "Santa Isabel" +msgstr "Santa Isabel" + +#: wp-admin/includes/continents-cities.php:213 +msgid "Santarem" +msgstr "Santarém" + +#: wp-admin/includes/continents-cities.php:219 +msgid "Sitka" +msgstr "Sitka" + +#: wp-admin/includes/continents-cities.php:244 +msgid "Macquarie" +msgstr "Macquarie" + +#: wp-admin/includes/continents-cities.php:251 +msgid "Troll" +msgstr "Troll" + +#: wp-admin/includes/continents-cities.php:271 +msgid "Barnaul" +msgstr "Barnaul" + +#: wp-admin/includes/continents-cities.php:276 +msgid "Chita" +msgstr "Chita" + +#: wp-admin/includes/continents-cities.php:290 +msgid "Hebron" +msgstr "Hebron" + +#: wp-admin/includes/continents-cities.php:303 +msgid "Kathmandu" +msgstr "Katmandu" + +#: wp-admin/includes/continents-cities.php:305 +msgid "Khandyga" +msgstr "Khandyga" + +#: wp-admin/includes/continents-cities.php:318 +msgid "Novokuznetsk" +msgstr "Novokuznetsk" + +#: wp-admin/includes/continents-cities.php:335 +msgid "Srednekolymsk" +msgstr "Srednekolymsk" + +#: wp-admin/includes/continents-cities.php:344 +msgid "Tomsk" +msgstr "Tomsk" + +#: wp-admin/includes/continents-cities.php:349 +msgid "Ust-Nera" +msgstr "Ust-Nera" + +#: wp-admin/includes/continents-cities.php:39 +msgid "Juba" +msgstr "Juba" + +#: wp-admin/includes/continents-cities.php:83 +msgid "Salta" +msgstr "Salta" + +#: wp-admin/includes/continents-cities.php:204 +msgid "Punta Arenas" +msgstr "Punta Arenas" + +#: wp-admin/includes/continents-cities.php:266 +msgid "Atyrau" +msgstr "Atyrau" + +#: wp-admin/includes/continents-cities.php:287 +msgid "Famagusta" +msgstr "Famagusta" + +#: wp-admin/includes/continents-cities.php:353 +msgid "Yangon" +msgstr "Yangon" \ No newline at end of file diff --git a/wp-content/languages/plugins/akismet-sv_SE.mo b/wp-content/languages/plugins/akismet-sv_SE.mo new file mode 100644 index 000000000..da1a2efe9 Binary files /dev/null and b/wp-content/languages/plugins/akismet-sv_SE.mo differ diff --git a/wp-content/languages/plugins/akismet-sv_SE.po b/wp-content/languages/plugins/akismet-sv_SE.po new file mode 100644 index 000000000..2d76bef87 --- /dev/null +++ b/wp-content/languages/plugins/akismet-sv_SE.po @@ -0,0 +1,900 @@ +# Translation of Plugins - Akismet Anti-Spam - Stable (latest release) in Swedish +# This file is distributed under the same license as the Plugins - Akismet Anti-Spam - Stable (latest release) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-11-23 13:10:36+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: sv_SE\n" +"Project-Id-Version: Plugins - Akismet Anti-Spam - Stable (latest release)\n" + +#: class.akismet-cli.php:165 +msgid "Stats response could not be decoded." +msgstr "Statistikens svar kunde inte avkodas." + +#: class.akismet-cli.php:159 +msgid "Currently unable to fetch stats. Please try again." +msgstr "För närvarande kan statistik inte hämtas. Försök igen." + +#: class.akismet-cli.php:134 +msgid "API key must be set to fetch stats." +msgstr "API-nyckeln måste vara inställd för att hämta statistik." + +#: views/notice.php:138 +msgid "To help your site with transparency under privacy laws like the GDPR, Akismet can display a notice to your users under your comment forms. This feature is disabled by default, however, you can turn it on below." +msgstr "För att hjälpa din webbplats med öppenhet enligt integritetslagar som GDPR kan Akismet visa ett meddelande till dina användare under dina kommentarformulär. Denna funktion är som standard inaktiverad, men du kan aktivera den nedan." + +#: views/config.php:162 +msgid "To help your site with transparency under privacy laws like the GDPR, Akismet can display a notice to your users under your comment forms. This feature is disabled by default, however, you can turn it on above." +msgstr "För att hjälpa din webbplats med öppenhet enligt integritetslagar som GDPR kan Akismet visa ett meddelande till dina användare under dina kommentarformulär. Denna funktion är som standard inaktiverad, men du kan aktivera den ovan." + +#: views/notice.php:139 +msgid " Please enable or disable this feature. More information." +msgstr " Vänligen aktivera eller inaktivera denna funktion. Mer information." + +#: views/notice.php:137 +msgid "Akismet & Privacy." +msgstr "Akismet och integritet." + +#: views/config.php:160 +msgid "Do not display privacy notice." +msgstr "Visa inte integritetsmeddelandet." + +#: views/config.php:159 +msgid "Display a privacy notice under your comment forms." +msgstr "Visa ett integritetsmeddelande under dina kommentarsformulär." + +#: views/config.php:158 +msgid "Akismet privacy notice" +msgstr "Akismet integritetsmeddelande" + +#: views/config.php:155 +msgid "Privacy" +msgstr "Integritet" + +#: class.akismet.php:1418 +msgid "This site uses Akismet to reduce spam. Learn how your comment data is processed." +msgstr "Denna webbplats använder Akismet för att minska skräppost. Lär dig hur din kommentardata bearbetas." + +#: class.akismet-admin.php:89 +msgid "We collect information about visitors who comment on Sites that use our Akismet anti-spam service. The information we collect depends on how the User sets up Akismet for the Site, but typically includes the commenter's IP address, user agent, referrer, and Site URL (along with other information directly provided by the commenter such as their name, username, email address, and the comment itself)." +msgstr "Vi samlar information om besökare som kommenterar på webbplatser som använder vår Akismet anti-skräppost-tjänst. Informationen vi samlar in beror på hur användaren konfigurerar Akismet för webbplatsen, men brukar innehålla kommentatorns IP-adress, användaragent, hänvisare och webbplats-URL (tillsammans med annan information som tillhandahålls direkt av kommentatorn såsom dess namn, användarnamn, e-postadress och själva kommentaren)." + +#: class.akismet.php:231 +msgid "Comment discarded." +msgstr "Kommentaren har kastats." + +#: class.akismet-rest-api.php:174 +msgid "This site's API key is hardcoded and cannot be deleted." +msgstr "Den här webbplatsens API-nyckel är hårdkodad och kan inte tas bort." + +#: class.akismet-rest-api.php:158 +msgid "The value provided is not a valid and registered API key." +msgstr "Det angivna värdet är inte en giltig och registrerad API-nyckel" + +#: class.akismet-rest-api.php:152 +msgid "This site's API key is hardcoded and cannot be changed via the API." +msgstr "Den här webbplatsens API-nyckel är hårdkodad och kan inte ändras via API:et." + +#: class.akismet-rest-api.php:71 class.akismet-rest-api.php:80 +msgid "The time period for which to retrieve stats. Options: 60-days, 6-months, all" +msgstr "Tidsperioden för att hämta statistik. Alternativ: 60 dagar, 6 månader, allt" + +#: class.akismet-rest-api.php:56 +msgid "If true, show the number of approved comments beside each comment author in the comments list page." +msgstr "Om sant, visa antalet godkända kommentarer bredvid varje kommentarförfattare på kommentarlistningssidan." + +#: class.akismet-rest-api.php:51 +msgid "If true, Akismet will automatically discard the worst spam automatically rather than putting it in the spam folder." +msgstr "Om sant kommer Akismet ta bort den värsta skräpposten automatiskt istället för att lägga den i skräppostmappen." + +#: class.akismet-rest-api.php:27 class.akismet-rest-api.php:101 +#: class.akismet-rest-api.php:114 class.akismet-rest-api.php:127 +msgid "A 12-character Akismet API key. Available at akismet.com/get/" +msgstr "En Akismet API-nyckel på 12 tecken. Finns på akismet.com/get/" + +#: class.akismet-admin.php:398 +msgid "(%1$s%)" +msgstr "(%1$s%)" + +#: views/notice.php:49 +msgid "Your site can’t connect to the Akismet servers." +msgstr "Din webbplats får inte kontakt med Akismets servrar." + +#: views/start.php:97 +msgid "An Akismet API key has been defined in the %s file for this site." +msgstr "En API-nyckel för Akismet har angetts i filen %s för denna webbplats." + +#: views/start.php:96 +msgid "Manual Configuration" +msgstr "Manuell konfigurering" + +#: class.akismet-admin.php:232 +msgid "On this page, you are able to update your Akismet settings and view spam stats." +msgstr "På denna sida kan du uppdatera dina inställningar för Akismet och se spam-statistik." + +#. Description of the plugin +msgid "Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key." +msgstr "Akismet används av miljoner personer och är kanske världens bästa sätt att skydda din blogg från skräppost. Det skyddar din webbplats t.o.m. medan du sover. För att komma igång behöver du aktivera tillägget Akismet och sedan gå till inställningssidan för Akismet och konfigurera din API-nyckel." + +#. Plugin Name of the plugin +#: class.akismet-admin.php:114 class.akismet-admin.php:117 +msgid "Akismet Anti-Spam" +msgstr "Akismet Anti-Spam" + +#: views/stats.php:4 +msgid "Akismet Settings" +msgstr "Akismet-inställningar" + +#: views/start.php:90 +msgid "Connect with API key" +msgstr "Anslut med hjälp av API-nyckel" + +#: views/start.php:84 +msgid "(What is an API key?)" +msgstr "(Vad är en API-nyckel?)" + +#: views/start.php:83 +msgid "Or enter an API key" +msgstr "Eller skriv in en API-nyckel" + +#: views/start.php:67 +msgid "Or sign up with a different email address" +msgstr "Eller registrera dig med en annan e-postadress" + +#: views/start.php:31 views/start.php:63 +msgid "You are connected as %s." +msgstr "Du är ansluten som %s." + +#: views/start.php:28 views/start.php:60 +msgid "Connect with Jetpack" +msgstr "Anslut med hjälp av Jetpack" + +#: views/start.php:22 views/start.php:55 +msgid "Use your Jetpack connection to activate Akismet." +msgstr "Använd din Jetpack-anslutning för att aktivera Akismet." + +#: views/start.php:21 views/start.php:35 views/start.php:54 +msgid "Connect via Jetpack" +msgstr "Anslut via Jetpack" + +#: views/start.php:14 +msgid "Select one of the options below to get started." +msgstr "Kom igång genom att välja något av alternativen nedan." + +#: views/start.php:13 +msgid "Eliminate spam from your site" +msgstr "Eliminera skräppost på din webbplats" + +#: views/notice.php:101 +msgid "Would you like to check pending comments?" +msgstr "Vill du kolla väntande kommentarer?" + +#: views/notice.php:99 +msgid "Akismet is now protecting your site from spam. Happy blogging!" +msgstr "Nu skyddar Akismet din webbplats från skräppost. Lycka till med bloggandet!" + +#: views/notice.php:8 +msgid "Set up your Akismet account" +msgstr "Konfigurera ditt Akismet-konto" + +#: views/config.php:26 +msgid "Detailed Stats" +msgstr "Detaljerad statistik" + +#: views/config.php:22 +msgid "Statistics" +msgstr "Statistik" + +#: class.akismet-admin.php:1170 +msgid "Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. It keeps your site protected even while you sleep. To get started, just go to your Akismet Settings page to set up your API key." +msgstr "Akismet, som används av miljoner personer, är kanske världens bästa sätt att skydda din blogg från skräppost. Det skyddar din webbplats t.o.m. medan du sover. För att komma igång behöver du bara gå till din inställningssida för Akismet för att konfigurera din API-nyckel." + +#: class.akismet-admin.php:1167 +msgid "Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. Your site is fully configured and being protected, even while you sleep." +msgstr "Akismet, som används av miljoner personer, är kanske världens bästa sätt att skydda din blogg från skräppost. Din webbplats är färdigkonfigurerad och skyddar din webbplats t.o.m. medan du sover. " + +#: class.akismet-admin.php:1058 +msgid "%s comment was caught as spam." +msgid_plural "%s comments were caught as spam." +msgstr[0] "%s kommentar bedömdes som skräppost." +msgstr[1] "%s kommentarer bedömdes som skräppost." + +#: class.akismet-admin.php:1055 +msgid "No comments were caught as spam." +msgstr "Inga kommentarer bedömdes som skräppost." + +#: class.akismet-admin.php:1051 +msgid "Akismet checked %s comment." +msgid_plural "Akismet checked %s comments." +msgstr[0] "Akismet har kontrollerat %s kommentar." +msgstr[1] "Akismet har kontrollerat %s kommentarer." + +#: class.akismet-admin.php:1048 +msgid "There were no comments to check. Akismet will only check comments in the Pending queue." +msgstr "Det fanns inga kommentarer att granska. Akismet kontrollerar bara kommentarer i kön med väntande kommentarer." + +#: class.akismet-admin.php:397 +msgid "Checking for Spam" +msgstr "Söker efter skräppost" + +#: class.akismet.php:512 +msgid "Comment not found." +msgstr "Kommentaren kunde inte hittas." + +#: class.akismet-cli.php:88 +msgid "%d comment could not be checked." +msgid_plural "%d comments could not be checked." +msgstr[0] "%d kommentar kunde inte kontrolleras." +msgstr[1] "%d kommentarer kunde inte kontrolleras." + +#: class.akismet-cli.php:85 +msgid "%d comment moved to Spam." +msgid_plural "%d comments moved to Spam." +msgstr[0] "%d kommentar markerades som skräppost." +msgstr[1] "%d kommentarer markerades som skräppost." + +#: class.akismet-cli.php:84 +msgid "Processed %d comment." +msgid_plural "Processed %d comments." +msgstr[0] "Bearbetade %d kommentar." +msgstr[1] "Bearbetade %d kommentarer." + +#: class.akismet-cli.php:46 +msgid "Comment #%d could not be checked." +msgstr "Kommentar #%d kunde inte kontrolleras." + +#: class.akismet-cli.php:43 +msgid "Failed to connect to Akismet." +msgstr "Kunde inte ansluta till Akismet." + +#: class.akismet-cli.php:39 +msgid "Comment #%d is not spam." +msgstr "Kommentar #%d är inte skräppost." + +#: class.akismet-cli.php:36 +msgid "Comment #%d is spam." +msgstr "Kommentar #%d är skräppost." + +#: views/config.php:49 +msgid "%s false positive" +msgid_plural "%s false positives" +msgstr[0] "%s falsk-positiv" +msgstr[1] "%s falsk-positiva" + +#: views/config.php:47 +msgid "%s missed spam" +msgid_plural "%s missed spam" +msgstr[0] "%s missad skräppost" +msgstr[1] "%s missade skräpposter" + +#: views/start.php:79 +msgid "Log in or sign up now." +msgstr "Logga in eller registrera dig nu." + +#: views/start.php:84 +msgid "Already have your key? Enter it here." +msgstr "Har du redan en nyckel? Ange den här." + +#: views/start.php:69 +msgid "Sign up with a different email address" +msgstr "Registrera dig med en annan e-postadress" + +#: views/start.php:71 +msgid "Choose this option to use Akismet independently of your Jetpack connection." +msgstr "Använd det här alternativet för att använda Akismet separat från din Jetpack-anslutning." + +#: views/notice.php:79 +msgid "You don’t have an Akismet plan." +msgstr "Du har ingen prenumeration för Akismet." + +#: views/notice.php:64 +msgid "Your Akismet subscription is suspended." +msgstr "Din prenumeration för Akismet är avstängd." + +#: views/notice.php:59 +msgid "Your Akismet plan has been cancelled." +msgstr "Din Akismet-prenumeration har blivit avbruten." + +#: views/notice.php:55 +msgid "We cannot process your payment. Please update your payment details." +msgstr "Vi kan inte bearbeta din betalning. Vänligen uppdatera dina betaluppgifter." + +#: views/notice.php:54 +msgid "Please update your payment information." +msgstr "Vänligen uppdatera din betalinformation." + +#: views/notice.php:11 +msgid "Almost done - configure Akismet and say goodbye to spam" +msgstr "Nästan klart – konfigurera Akismet och vinka adjö till skräppost" + +#: class.akismet-admin.php:979 +msgid "Akismet has saved you %d minute!" +msgid_plural "Akismet has saved you %d minutes!" +msgstr[0] "Akismet har sparat dig %d minut!" +msgstr[1] "Akismet har sparat dig %d minuter!" + +#: class.akismet-admin.php:977 +msgid "Akismet has saved you %d hour!" +msgid_plural "Akismet has saved you %d hours!" +msgstr[0] "Akismet har sparat dig %d timme!" +msgstr[1] "Akismet har sparat dig %d timmar!" + +#: class.akismet-admin.php:975 +msgid "Akismet has saved you %s day!" +msgid_plural "Akismet has saved you %s days!" +msgstr[0] "Akismet har sparat dig %s dag!" +msgstr[1] "Akismet har sparat dig %s dagar!" + +#: class.akismet-admin.php:180 class.akismet-admin.php:218 +#: class.akismet-admin.php:231 +msgid "Akismet filters out spam, so you can focus on more important things." +msgstr "Akismet filtrerar bort skräppost så att du kan fokusera på viktigare saker." + +#: views/notice.php:129 +msgid "To continue your service, upgrade to an Enterprise subscription, which covers an unlimited number of sites." +msgstr "För att fortsätta din tjänst, uppgradera till en Enterprise-prenumeration, vilken tillåter användning på obegränsat antal webbplatser" + +#: views/notice.php:122 +msgid "Your Pro subscription allows the use of Akismet on only one site. Please purchase additional Pro subscriptions or upgrade to an Enterprise subscription that allows the use of Akismet on unlimited sites." +msgstr "Din Pro-prenumeration tillåter endast användning av Akismet på en webbplats. Vänligen köp fler Pro-prenumerationer eller uppgradera till en Enterprise-prenumeration som tillåter användning av Akismet på obegränsat antal webbplatser." + +#: views/notice.php:115 +msgid "The connection to akismet.com could not be established. Please refer to our guide about firewalls and check your server configuration." +msgstr "Anslutningen till aksimet.com misslyckades. Se vår guide om brandväggar och kontrollera din serverkonfiguration." + +#: views/notice.php:114 +msgid "The API key you entered could not be verified." +msgstr "Nyckeln du angav kunde inte verifieras." + +#: views/notice.php:110 +msgid "Your API key is no longer valid. Please enter a new key or contact support@akismet.com." +msgstr "Din API-nyckel är inte längre giltig. Vänligen ange en ny nyckel eller kontakta support@akismet.com" + +#: views/notice.php:83 views/notice.php:124 views/notice.php:131 +msgid "Please contact our support team with any questions." +msgstr "Vänligen kontakta vårt supportteam om du har några frågor." + +#: views/notice.php:81 +msgid "In 2012, Akismet began using subscription plans for all accounts (even free ones). A plan has not been assigned to your account, and we’d appreciate it if you’d sign into your account and choose one." +msgstr "Sedan 2012 har Akismet använt prenumerationer för alla konton (även gratisvarianten). Det verkar inte som någon prenumeration har associerats med ditt konto och vi uppskattar om du loggar in på ditt konto och väljer typ av prenumeration." + +#: views/config.php:95 +msgid "All systems functional." +msgstr "Alla system funktionella." + +#: views/config.php:95 +msgid "Enabled." +msgstr "Aktiverat." + +#: views/config.php:92 +msgid "Akismet encountered a problem with a previous SSL request and disabled it temporarily. It will begin using SSL for requests again shortly." +msgstr "Akismet stötte på ett problem med tidigare SSL-förfrågan och inaktiverade stödet tillfälligt. SSL-förfrågningar kommer att upptas inom kort igen." + +#: views/config.php:92 +msgid "Temporarily disabled." +msgstr "Tillfälligt inaktiverat." + +#: views/config.php:86 +msgid "Your Web server cannot make SSL requests; contact your Web host and ask them to add support for SSL requests." +msgstr "Din webbserver kan inte skapa SSL-förfrågningar: kontakta ditt webbhotell och be dom lägga till stöd för SSL-förfrågningar." + +#: views/config.php:86 +msgid "Disabled." +msgstr "Inaktiverat." + +#: views/config.php:79 +msgid "SSL Status" +msgstr "SSL-status" + +#: class.akismet-admin.php:608 +msgid "This comment was reported as not spam." +msgstr "Denna kommentar rapporterades som 'inte skräppost'." + +#: class.akismet-admin.php:600 +msgid "This comment was reported as spam." +msgstr "Denna kommentar rapporterades som skräppost." + +#: class.akismet-admin.php:149 +msgid "(undo)" +msgstr "(ångra)" + +#: class.akismet-admin.php:148 +msgid "URL removed" +msgstr "URL borttagen" + +#: class.akismet-admin.php:147 +msgid "Removing..." +msgstr "Tar bort..." + +#: class.akismet-admin.php:88 class.akismet-admin.php:1189 +msgid "Akismet" +msgstr "Akismet" + +#: views/config.php:60 class.akismet-admin.php:107 class.akismet-admin.php:239 +#: class.akismet-admin.php:658 +msgid "Settings" +msgstr "Inställningar" + +#: class.akismet-admin.php:150 +msgid "Re-adding..." +msgstr "Återställer..." + +#: class.akismet-admin.php:177 class.akismet-admin.php:215 +#: class.akismet-admin.php:228 +msgid "Overview" +msgstr "Översikt" + +#: class.akismet-admin.php:179 class.akismet-admin.php:190 +#: class.akismet-admin.php:201 +msgid "Akismet Setup" +msgstr "Konfiguration för Akismet" + +#: class.akismet-admin.php:181 +msgid "On this page, you are able to set up the Akismet plugin." +msgstr "På den här sidan har du möjlighet att konfigurera tillägget Akismet." + +#: class.akismet-admin.php:188 +msgid "New to Akismet" +msgstr "Ny på Akismet" + +#: class.akismet-admin.php:191 +msgid "You need to enter an API key to activate the Akismet service on your site." +msgstr "Du måste ange en API-nyckel för att aktivera tjänsten från Akismet på din webbplats." + +#: class.akismet-admin.php:199 +msgid "Enter an API Key" +msgstr "Ange en API-nyckel" + +#: class.akismet-admin.php:192 +msgid "Sign up for an account on %s to get an API Key." +msgstr "Registrera ett konto på %s för att få en API-nyckel." + +#: class.akismet-admin.php:202 +msgid "If you already have an API key" +msgstr "Om du redan har en API-nyckel" + +#: class.akismet-admin.php:204 +msgid "Copy and paste the API key into the text field." +msgstr "Kopiera och klistra in API-nyckeln i textfältet." + +#: class.akismet-admin.php:205 +msgid "Click the Use this Key button." +msgstr "Klicka på knappen Använd denna nyckel." + +#: class.akismet-admin.php:217 +msgid "Akismet Stats" +msgstr "Akismet statistik" + +#: class.akismet-admin.php:219 +msgid "On this page, you are able to view stats on spam filtered on your site." +msgstr "På den här sidan har du möjlighet att se statistik för skräppost som har filtrerats på din webbplats." + +#: class.akismet-admin.php:230 class.akismet-admin.php:241 +#: class.akismet-admin.php:254 +msgid "Akismet Configuration" +msgstr "Konfigurera Akismet" + +#: views/config.php:70 class.akismet-admin.php:242 +msgid "API Key" +msgstr "API-nyckel" + +#: class.akismet-admin.php:242 +msgid "Enter/remove an API key." +msgstr "Ange/ta bort en API-nyckel." + +#: views/config.php:105 class.akismet-admin.php:243 +msgid "Comments" +msgstr "Kommentarer" + +#: class.akismet-admin.php:243 +msgid "Show the number of approved comments beside each comment author in the comments list page." +msgstr "Visa antalet godkända kommentarer bredvid varje kommentarsförfattare på kommentarslistningssidan." + +#: class.akismet-admin.php:244 +msgid "Choose to either discard the worst spam automatically or to always put all spam in spam folder." +msgstr "Välj att antingen ignorera den värsta skräpposten automatiskt eller att alltid placera all skräppost i skräppostmappen." + +#: views/config.php:128 class.akismet-admin.php:244 +msgid "Strictness" +msgstr "Strikthet" + +#: views/config.php:188 class.akismet-admin.php:252 +msgid "Account" +msgstr "Konto" + +#: views/config.php:196 class.akismet-admin.php:255 +msgid "Subscription Type" +msgstr "Prenumerationstyp" + +#: class.akismet-admin.php:256 +msgid "The subscription status - active, cancelled or suspended" +msgstr "Prenumerationsstatus - aktiv, avslutad eller suspenderad" + +#: views/config.php:203 class.akismet-admin.php:256 +msgid "Status" +msgstr "Status" + +#: class.akismet-admin.php:255 +msgid "The Akismet subscription plan" +msgstr "Akismets prenumerationsplan" + +#: class.akismet-admin.php:266 +msgid "Akismet FAQ" +msgstr "Vanliga frågor för Akismet" + +#: class.akismet-admin.php:265 +msgid "For more information:" +msgstr "För mer information:" + +#: class.akismet-admin.php:267 +msgid "Akismet Support" +msgstr "Support för Akismet" + +#: class.akismet-admin.php:273 +msgid "Cheatin’ uh?" +msgstr "Fuskar du va?" + +#: class.akismet-admin.php:343 +msgctxt "comments" +msgid "Spam" +msgstr "Skräppost" + +#: class.akismet-admin.php:345 +msgid "Akismet has protected your site from %3$s spam comment." +msgid_plural "Akismet has protected your site from %3$s spam comments." +msgstr[0] "Akismet har skyddat din webbplats från %3$s skräpkommentar." +msgstr[1] "Akismet har skyddat din webbplats från %3$s skräpkommentarer." + +#: class.akismet-admin.php:355 +msgid "Akismet has protected your site from %2$s spam comment already. " +msgid_plural "Akismet has protected your site from %2$s spam comments already. " +msgstr[0] "Akismet har redan skyddat din webbplats från %2$s skräpkommentar. " +msgstr[1] "Akismet har redan skyddat din webbplats från %2$s skräpkommentarer. " + +#: class.akismet-admin.php:361 +msgid "Akismet blocks spam from getting to your blog. " +msgstr "Akismet motverkar skräpposter på din blogg." + +#: class.akismet-admin.php:367 +msgid "There’s %1$s comment in your spam queue right now." +msgid_plural "There are %1$s comments in your spam queue right now." +msgstr[0] "Det finns %1$s kommentar markerad som skräp just nu." +msgstr[1] "Det finns %1$s kommentarer markerade som skräp just nu." + +#: class.akismet-admin.php:373 +msgid "There’s nothing in your spam queue at the moment." +msgstr "Det finns inga poster markerade som skräppost för tillfället." + +#: class.akismet-admin.php:587 +msgid "Akismet re-checked and cleared this comment." +msgstr "Akismet kontrollerade denna kommentar igen och godkände den." + +#: class.akismet-admin.php:581 +msgid "Akismet re-checked and caught this comment as spam." +msgstr "Akismet kontrollerade denna kommentar igen och markerade den som skräppost." + +#: class.akismet-admin.php:402 +msgid "Check for Spam" +msgstr "Kolla efter skräppost" + +#: class.akismet-admin.php:624 +msgid "Akismet was unable to recheck this comment (response: %s)." +msgstr "Akismet kunde inte kontrollera denna kommentar igen (svar: %s)." + +#: class.akismet-admin.php:509 +msgid "Flagged as spam by Akismet" +msgstr "Flaggat som skräppost av Akismet" + +#: class.akismet-admin.php:505 +msgid "Awaiting spam check" +msgstr "Inväntar skräppostkontroll" + +#: class.akismet-admin.php:515 +msgid "Flagged as spam by %s" +msgstr "Flaggat som skräppost av %s" + +#: class.akismet-admin.php:511 +msgid "Cleared by Akismet" +msgstr "Godkänd av Akismet" + +#: class.akismet-admin.php:517 +msgid "Un-spammed by %s" +msgstr "Avmarkerat som skräppost av %s" + +#: class.akismet-admin.php:552 +msgid "%s approved" +msgid_plural "%s approved" +msgstr[0] "%s godkänd" +msgstr[1] "%s godkända" + +#: class.akismet-admin.php:529 +msgid "History" +msgstr "Historik" + +#: class.akismet-admin.php:529 class.akismet-admin.php:537 +msgid "View comment history" +msgstr "Visa kommentarshistorik" + +#: class.akismet-admin.php:865 +msgid "Please check your Akismet configuration and contact your web host if problems persist." +msgstr "Vänligen kontrollera din konfiguration av Akismet och kontakta ditt webbhotell om problemen består." + +#: class.akismet-admin.php:646 +msgid "%s ago" +msgstr "%s sedan" + +#: class.akismet-admin.php:972 +msgid "Cleaning up spam takes time." +msgstr "Att rensa upp skräppost tar tid." + +#: class.akismet-widget.php:12 +msgid "Akismet Widget" +msgstr "Akismet widget" + +#: class.akismet-widget.php:13 +msgid "Display the number of spam comments Akismet has caught" +msgstr "Visa antalet skräpkommentarer som Akismet har fångat" + +#: class.akismet-widget.php:74 +msgid "Title:" +msgstr "Titel:" + +#: class.akismet-widget.php:69 class.akismet-widget.php:90 +msgid "Spam Blocked" +msgstr "Skräpposter blockerade" + +#: class.akismet-widget.php:102 +msgid "%1$s spam blocked by Akismet" +msgid_plural "%1$s spam blocked by Akismet" +msgstr[0] "%1$s skräppost blockerad av Akismet" +msgstr[1] "%1$s skräpposter blockerade av Akismet" + +#: class.akismet-admin.php:584 +msgid "Akismet caught this comment as spam." +msgstr "Akismet markerade denna kommentar som skräppost." + +#: class.akismet-admin.php:632 +msgid "Comment status was changed to %s" +msgstr "Kommentarsstatus ändrades till %s" + +#: class.akismet-admin.php:590 +msgid "Akismet cleared this comment." +msgstr "Akismet godkände denna kommentar." + +#: class.akismet-admin.php:593 +msgid "Comment was caught by wp_blacklist_check." +msgstr "Kommentaren fångades av wp_blacklist_check." + +#: class.akismet-admin.php:619 +msgid "Akismet was unable to check this comment (response: %s) but will automatically retry later." +msgstr "Akismet kunde inte kontrollera denna kommentar (svar: %s) men kommer automatiskt att försök igen senare." + +#: class.akismet-admin.php:638 +msgid "%1$s changed the comment status to %2$s." +msgstr "%1$s ändrade status för kommentaren till %2$s." + +#: class.akismet-admin.php:597 +msgid "%s reported this comment as spam." +msgstr "%s rapporterade denna kommentar som skräppost." + +#: class.akismet-admin.php:605 +msgid "%s reported this comment as not spam." +msgstr "%s rapporterade denna kommentar som 'inte skräppost'." + +#: class.akismet-admin.php:612 +msgid "Akismet caught this comment as spam during an automatic retry." +msgstr "Akismet fångade den här kommentaren som skräpport under en automatisk körning." + +#: class.akismet-admin.php:615 +msgid "Akismet cleared this comment during an automatic retry." +msgstr "Akismet godkände den här kommentaren under en automatisk skanning." + +#: class.akismet.php:1277 +msgid "Please upgrade WordPress to a current version, or downgrade to version 2.4 of the Akismet plugin." +msgstr "Vänligen uppdatera WordPress till aktuell version eller använd version 2.4 av tillägget Akismet." + +#: class.akismet.php:1277 +msgid "Akismet %s requires WordPress %s or higher." +msgstr "Akismet %s kräver WordPress %s eller senare." + +#: views/config.php:37 views/config.php:42 +msgid "Spam blocked" +msgid_plural "Spam blocked" +msgstr[0] "Skräppost blockerad" +msgstr[1] "" + +#: views/config.php:35 +msgid "Past six months" +msgstr "Senaste sex månaderna" + +#: views/config.php:40 +msgid "All time" +msgstr "Sedan starten" + +#: views/config.php:45 +msgid "Accuracy" +msgstr "Precision" + +#: views/config.php:109 +msgid "Show approved comments" +msgstr "Visa godkända kommentarer" + +#: views/config.php:122 +msgid "Show the number of approved comments beside each comment author" +msgstr "Visa antalet godkända kommentarer bredvid varje kommentarsförfattare" + +#: views/config.php:131 +msgid "Akismet anti-spam strictness" +msgstr "Akismet strikthet för antispam-åtgärder" + +#: views/config.php:132 +msgid "Silently discard the worst and most pervasive spam so I never see it." +msgstr "Förkasta tyst den mest genomgripande skräpposten så att jag slipper se den." + +#: views/config.php:133 +msgid "Always put spam in the Spam folder for review." +msgstr "Placera alltid skräppost i skräppostmappen för granskning." + +#: views/config.php:141 +msgid "Spam in the spam folder older than 1 day is deleted automatically." +msgid_plural "Spam in the spam folder older than %2$d days is deleted automatically." +msgstr[0] "Skräppost i skräppostmappen äldre än 1 dag raderas automatiskt." +msgstr[1] "Skräppost i skräppostmappen äldre än %2$d dagar raderas automatiskt." + +#: views/config.php:135 +msgid "Note:" +msgstr "Notering:" + +#: views/config.php:208 +msgid "Cancelled" +msgstr "Avslutad" + +#: views/config.php:176 +msgid "Save Changes" +msgstr "Spara ändringar" + +#: views/config.php:170 +msgid "Disconnect this account" +msgstr "Koppla från detta konto" + +#: views/config.php:210 +msgid "Suspended" +msgstr "Suspenderad" + +#: views/config.php:214 +msgid "No Subscription Found" +msgstr "Inga prenumerationer funna" + +#: views/config.php:212 +msgid "Missing" +msgstr "Saknas" + +#: views/config.php:222 +msgid "Next Billing Date" +msgstr "Nästa faktureringsdatum" + +#: views/config.php:216 +msgid "Active" +msgstr "Aktiv" + +#: views/config.php:233 +msgid "Upgrade" +msgstr "Uppgradera" + +#: views/config.php:233 +msgid "Change" +msgstr "Ändra" + +#: views/notice.php:17 +msgid "Akismet has detected a problem." +msgstr "Akismet har upptäckt ett problem." + +#: views/notice.php:18 +msgid "Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation and will automatically be rechecked later." +msgstr "Vissa kommentarer har inte kontrollerats av Akismet än. Dom har tillfälligt placerats i moderationskön och kommer automatiskt att kontrolleras senare." + +#: views/notice.php:25 +msgid "Akismet Error Code: %s" +msgstr "Akismet felkod: %s" + +#. translators: the placeholder is a clickable URL that leads to more +#. information regarding an error code. +#: views/notice.php:30 +msgid "For more information: %s" +msgstr "För mer information: %s" + +#: views/notice.php:45 +msgid "Your web host or server administrator has disabled PHP’s gethostbynamel function. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet’s system requirements." +msgstr "Ditt webbhotell eller serveradministratör har inaktiverat PHPs funktion gethostbynamel. Akismet kommer inte att fungera korrekt tills att detta är åtgärdat. Vänligen kontakta ditt webbhotell eller brandväggsadministratör och vidarebefordra följande information om Akismets systemkrav." + +#: views/notice.php:44 +msgid "Network functions are disabled." +msgstr "Nätverksfunktioner inaktiverade." + +#: views/notice.php:50 +msgid "Your firewall may be blocking Akismet from connecting to its API. Please contact your host and refer to our guide about firewalls." +msgstr "Din brandvägg kanske blockerar Akismet från att kontakta sitt API. Vänligen kontakta ditt webbhotell/serverleverantör och referera till vår guide om brandväggar." + +#: views/notice.php:60 +msgid "Please visit your Akismet account page to reactivate your subscription." +msgstr "Vänligen besök Akismets kontosida för att återaktivera din prenumeration." + +#: views/notice.php:65 views/notice.php:75 +msgid "Please contact Akismet support for assistance." +msgstr "Vänligen kontakta Akismets support för assistans." + +#: views/notice.php:70 +msgid "You can help us fight spam and upgrade your account by contributing a token amount." +msgstr "Du kan hjälpa oss bekämpa skräppost genom att uppgradera ditt konto och bidra med en symbolisk summa." + +#: views/notice.php:74 +msgid "There is a problem with your API key." +msgstr "Det är problem med din API-nyckel." + +#: views/notice.php:106 +msgid "The key you entered is invalid. Please double-check it." +msgstr "Din nyckel verkar inte vara korrekt. Kontrollera den igen." + +#: views/notice.php:120 +msgid "You’re using your Akismet key on more sites than your Pro subscription allows." +msgstr "Du använder din Akismet-nyckel på fler webbplatser än din Pro-prenumeration tillåter." + +#: views/notice.php:127 +msgid "You’re using Akismet on far too many sites for your Pro subscription." +msgstr "Du använder Akismet på allt för många webbplatser för din Pro-prenumeration." + +#: views/start.php:47 +msgid "Connected via Jetpack" +msgstr "Ansluten via Jetpack" + +#: views/start.php:41 +msgid "Reactivate Akismet" +msgstr "Återaktivera Akismet" + +#: views/start.php:43 +msgid "Your subscription for %s is cancelled." +msgstr "Din prenumeration för %s är avslutad." + +#: views/start.php:48 +msgid "Your subscription for %s is suspended." +msgstr "Din prenumeration för %s är suspenderad" + +#: views/start.php:49 +msgid "No worries! Get in touch and we’ll sort this out." +msgstr "Oroa dig inte! Kontakta oss så hjälper vi dig att ordna detta." + +#: views/start.php:50 +msgid "Contact Akismet support" +msgstr "Kontakta Akismets support" + +#: views/start.php:75 +msgid "Activate Akismet" +msgstr "Aktivera Akismet" + +#: views/start.php:77 +msgid "Get your API key" +msgstr "Få din API-nyckel" + +#. Plugin URI of the plugin +msgid "https://akismet.com/" +msgstr "https://akismet.com/" + +#. Author URI of the plugin +msgid "https://automattic.com/wordpress-plugins/" +msgstr "https://automattic.com/wordpress-plugins/" + +#. Author of the plugin +msgid "Automattic" +msgstr "Automattic" + +#: class.akismet-admin.php:146 +msgid "Remove this URL" +msgstr "Ta bort denna URL" + +#: class.akismet-admin.php:84 +msgid "Comment History" +msgstr "Kommentarshistorik" diff --git a/wp-content/languages/plugins/hello-dolly-sv_SE.mo b/wp-content/languages/plugins/hello-dolly-sv_SE.mo new file mode 100644 index 000000000..26e7a7d22 Binary files /dev/null and b/wp-content/languages/plugins/hello-dolly-sv_SE.mo differ diff --git a/wp-content/languages/plugins/hello-dolly-sv_SE.po b/wp-content/languages/plugins/hello-dolly-sv_SE.po new file mode 100644 index 000000000..72eded608 --- /dev/null +++ b/wp-content/languages/plugins/hello-dolly-sv_SE.po @@ -0,0 +1,32 @@ +# Translation of Plugins - Hello Dolly - Stable (latest release) in Swedish +# This file is distributed under the same license as the Plugins - Hello Dolly - Stable (latest release) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2017-09-26 11:34:27+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: sv_SE\n" +"Project-Id-Version: Plugins - Hello Dolly - Stable (latest release)\n" + +#. Author URI of the plugin/theme +msgid "http://ma.tt/" +msgstr "http://ma.tt/" + +#. Author of the plugin/theme +msgid "Matt Mullenweg" +msgstr "Matt Mullenweg" + +#. Description of the plugin/theme +msgid "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from Hello, Dolly in the upper right of your admin screen on every page." +msgstr "Det här är inte bara ett tillägg. Det symboliserar hoppet och entusiasmen hos en hel generation, sammanfattat i två ord, som gjordes odödliga genom Luois Armstrongs sång: Hello, Dolly. När tillägget är aktiverat visas en slumpmässig textrad ur Hello, Dolly i övre högra hörnet på varje sida i administrationsdelen." + +#. Plugin URI of the plugin/theme +msgid "https://wordpress.org/plugins/hello-dolly/" +msgstr "https://wordpress.org/plugins/hello-dolly/" + +#. Plugin Name of the plugin/theme +msgid "Hello Dolly" +msgstr "Hello Dolly" \ No newline at end of file diff --git a/wp-content/languages/sv_SE-0ce75ad2f775d1cac9696967d484808c.json b/wp-content/languages/sv_SE-0ce75ad2f775d1cac9696967d484808c.json new file mode 100644 index 000000000..4c62bcac6 --- /dev/null +++ b/wp-content/languages/sv_SE-0ce75ad2f775d1cac9696967d484808c.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Disable tips":["Inaktivera tips"],"Got it":["Jag f\u00f6rst\u00e5r"],"See next tip":["Se n\u00e4sta tips"],"Editor tips":["Redigeringstips"]}},"comment":{"reference":"wp-includes\/js\/dist\/nux.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-1a0cd6a7128913b15c1a10dd68951869.json b/wp-content/languages/sv_SE-1a0cd6a7128913b15c1a10dd68951869.json new file mode 100644 index 000000000..c6447ee85 --- /dev/null +++ b/wp-content/languages/sv_SE-1a0cd6a7128913b15c1a10dd68951869.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Reusable Blocks":["\u00c5teranv\u00e4ndbara block"],"Embeds":["Inb\u00e4ddningar"],"Layout Elements":["Layoutelement"],"Formatting":["Formatering"],"Common Blocks":["Vanliga block"],"Widgets":["Widgetar"]}},"comment":{"reference":"wp-includes\/js\/dist\/blocks.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-1bba9045bb07c89671c88a3f328548e8.json b/wp-content/languages/sv_SE-1bba9045bb07c89671c88a3f328548e8.json new file mode 100644 index 000000000..c26a42aeb --- /dev/null +++ b/wp-content/languages/sv_SE-1bba9045bb07c89671c88a3f328548e8.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"An unknown error occurred.":["Ett ok\u00e4nt fel uppstod."],"The response is not a valid JSON response.":["Svaret \u00e4r inget giltigt JSON-svar."]}},"comment":{"reference":"wp-includes\/js\/dist\/api-fetch.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-28b3c3d595952907e08d98287077426c.json b/wp-content/languages/sv_SE-28b3c3d595952907e08d98287077426c.json new file mode 100644 index 000000000..8dffe93a8 --- /dev/null +++ b/wp-content/languages/sv_SE-28b3c3d595952907e08d98287077426c.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Reusable block imported successfully!":["\u00c5teranv\u00e4ndbart block importerat utan problem."],"Import from JSON":["Importera fr\u00e5n JSON"],"button label\u0004Import":["Importera"],"File":["Fil"],"Unknown error":["Ok\u00e4nt fel"],"Invalid Reusable Block JSON file":["Ogiltig JSON-fil f\u00f6r \u00e5teranv\u00e4ndbart block"],"Invalid JSON file":["Ogiltig JSON-fil"]}},"comment":{"reference":"wp-includes\/js\/dist\/list-reusable-blocks.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-2c5d274ea625dd91556554ad82901529.json b/wp-content/languages/sv_SE-2c5d274ea625dd91556554ad82901529.json new file mode 100644 index 000000000..883adc7a3 --- /dev/null +++ b/wp-content/languages/sv_SE-2c5d274ea625dd91556554ad82901529.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Annotation":["Beskrivning"]}},"comment":{"reference":"wp-includes\/js\/dist\/annotations.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-4a38fe1c0c45989e44682ba6109d9f46.json b/wp-content/languages/sv_SE-4a38fe1c0c45989e44682ba6109d9f46.json new file mode 100644 index 000000000..181fc41a8 --- /dev/null +++ b/wp-content/languages/sv_SE-4a38fe1c0c45989e44682ba6109d9f46.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-19 13:41:32+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Please wait...":["V\u00e4nta ..."],"All site health tests have finished running.":["Alla h\u00e4lsokontroller f\u00f6r webbplatsen \u00e4r klara."],"All site health tests have finished running. Your site scored %s, and the results are now available on the page.":["Alla h\u00e4lsokontroller f\u00f6r webbplatsen \u00e4r klara. Po\u00e4ngen f\u00f6r din webbplats \u00e4r %s och resultaten \u00e4r nu tillg\u00e4ngliga p\u00e5 sidan."],"Site information has been added to your clipboard.":["Information om webbplatsen har kopierats till ditt urklipp."],"%s Recommended improvement":["%s rekommenderad f\u00f6rb\u00e4ttring","%s rekommenderade f\u00f6rb\u00e4ttringar"],"%s Item with no issues detected":["%s objekt utan detekterade problem","%s objekt utan detekterade problem"],"%s Critical issue":["%s allvarligt problem","%s allvarliga problem"]}},"comment":{"reference":"wp-admin\/js\/site-health.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-68f2cec7514bf8563c723a4d675fcfe6.json b/wp-content/languages/sv_SE-68f2cec7514bf8563c723a4d675fcfe6.json new file mode 100644 index 000000000..85feb7f5d --- /dev/null +++ b/wp-content/languages/sv_SE-68f2cec7514bf8563c723a4d675fcfe6.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Unlink":["Ta bort l\u00e4nkning"],"Link removed.":["L\u00e4nk borttagen."],"Link edited.":["L\u00e4nk redigerad."],"%s (opens in a new tab)":["%s (\u00f6ppnas i en ny flik)"],"Inline Image":["Bild inlagd i texten"],"media":["media"],"photo":["foto"],"Open in New Tab":["\u00d6ppna i ny flik"],"Warning: the link has been inserted but may have errors. Please test it.":["Varning: l\u00e4nken har lagts till men kan inneh\u00e5lla fel. V\u00e4nligen testa den."],"Edit":["Redigera"],"Link":["L\u00e4nk"],"Strikethrough":["Genomstruken"],"Underline":["Understreck"],"Apply":["Verkst\u00e4ll"],"Width":["Bredd"],"Link inserted.":["L\u00e4nk infogad."],"Image":["Bild"],"Code":["Kod"],"Italic":["Kursiv"],"Bold":["Fet"]}},"comment":{"reference":"wp-includes\/js\/dist\/format-library.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-7f13c36c641b114bf18cd0bcc9ecc7e0.json b/wp-content/languages/sv_SE-7f13c36c641b114bf18cd0bcc9ecc7e0.json new file mode 100644 index 000000000..dd4031a42 --- /dev/null +++ b/wp-content/languages/sv_SE-7f13c36c641b114bf18cd0bcc9ecc7e0.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Error loading block: %s":["Ett fel intr\u00e4ffade vid laddning av block: %s"],"Number of items":["Antal objekt"],"All":["Alla"],"Category":["Kategori"],"Z \u2192 A":["Z \t A"],"A \u2192 Z":["A \t Z"],"Oldest to Newest":["\u00c4ldsta till nyaste"],"Newest to Oldest":["Nyaste till \u00e4ldsta"],"Order by":["Sortera efter"],"Dismiss this notice":["Avf\u00e4rda denna notis"],"Remove item":["Ta bort objektet"],"Item removed.":["Objekt borttaget."],"Item added.":["Objekt tillagt."],"Separate with commas":["Separera med kommatecken"],"Add item":["L\u00e4gg till objekt"],"%1$s (%2$s of %3$s)":["%1$s (%2$s av %3$s)"],"Custom font size":["Anpassa typsnittstorlek"],"Font size: %s":["Typsnittsstorlek: %s"],"Font Size":["Textstorlek"],"font size name\u0004Custom":["Anpassat"],"font size name\u0004Normal":["Normal"],"Reset":["\u00c5terst\u00e4ll"],"Vertical Pos.":["Vertikal pos."],"Horizontal Pos.":["Horisontell pos."],"Calendar Help":["Kalenderhj\u00e4lp"],"Go to the first (home) or last (end) day of a week.":["G\u00e5 till veckans f\u00f6rsta (Home) eller sista (End) dag."],"Home\/End":["Home\/End"],"Home and End":["Home och End"],"Move backward (PgUp) or forward (PgDn) by one month.":["G\u00e5 bak\u00e5t (PgUp) eller fram\u00e5t (PgDn) en m\u00e5nad."],"PgUp\/PgDn":["PgUp\/PgDn"],"Page Up and Page Down":["Page Up och Page Down"],"Move backward (up) or forward (down) by one week.":["G\u00e5 bak\u00e5t (upp) eller fram\u00e5t (ned) en vecka."],"Up and Down Arrows":["Upp\u00e5t- och ned\u00e5tpil"],"Move backward (left) or forward (right) by one day.":["G\u00e5 bak\u00e5t (v\u00e4nster) eller fram\u00e5t (h\u00f6ger) en dag."],"Left and Right Arrows":["V\u00e4nsterpil och h\u00f6gerpil"],"Select the date in focus.":["V\u00e4lj det datum som befinner sig i fokus."],"keyboard button\u0004Enter":["Enter"],"Navigating with a keyboard":["Navigera med ett tangentbord"],"Click the desired day to select it.":["Klicka p\u00e5 \u00f6nskad dag f\u00f6r att v\u00e4lja den."],"Click the right or left arrows to select other months in the past or the future.":["Klicka p\u00e5 h\u00f6ger- eller v\u00e4nsterpilarna f\u00f6r att v\u00e4lja en annan m\u00e5nad i f\u00f6rfluten tid eller i framtiden."],"Click to Select":["Klicka f\u00f6r att v\u00e4lja"],"Minutes":["Minuter"],"Hours":["\u00d6ppettider"],"Custom Color":["Anpassad f\u00e4rg"],"Color: %s":["F\u00e4rg: %s"],"Color code: %s":["F\u00e4rgkod: %s"],"Custom color picker":["Anpassad f\u00e4rgv\u00e4ljare"],"Use your arrow keys to change the base color. Move up to lighten the color, down to darken, left to decrease saturation, and right to increase saturation.":["Anv\u00e4nd piltangenterna f\u00f6r att \u00e4ndra grundf\u00e4rg. Flytta upp\u00e5t f\u00f6r ljusare f\u00e4rg, ned\u00e5t f\u00f6r m\u00f6rkare, \u00e5t v\u00e4nster f\u00f6r \u00f6kad m\u00e4ttnadsgrad och \u00e5t h\u00f6ger f\u00f6r att minska m\u00e4ttnaden."],"Choose a shade":["V\u00e4lj skugga"],"Change color format":["\u00c4ndra f\u00e4rgformat"],"Color value in HSL":["F\u00e4rgv\u00e4rde i HSL"],"Color value in RGB":["F\u00e4rgv\u00e4rde i RGB"],"Color value in hexadecimal":["F\u00e4rgv\u00e4rde i hexadecimal"],"Hex color mode active":["Hexadecimalt f\u00e4rgl\u00e4get (RGB) \u00e4r aktivt"],"Hue\/saturation\/lightness mode active":["Arbetsl\u00e4get kul\u00f6r\/m\u00e4ttnadsgrad\/ljushet \u00e4r aktivt (hue\/saturation\/lightness)"],"RGB mode active":["RGB-l\u00e4ge aktiv"],"Move the arrow left or right to change hue.":["Flytta pilen \u00e5t v\u00e4nster eller h\u00f6ger f\u00f6r att \u00e4ndra nyans."],"Hue value in degrees, from 0 to 359.":["Nyansv\u00e4rde i grader, fr\u00e5n 0 till 359."],"Alpha value, from 0 (transparent) to 1 (fully opaque).":["Alfa-v\u00e4rde, fr\u00e5n 0 (transparent) till 1 (helt ogenomskinligt)."],"No results.":["Inga resultat."],"%d result found, use up and down arrow keys to navigate.":["%d resultat hittades, anv\u00e4nd upp och nedpilarna f\u00f6r att navigera.","%d resultat hittades, anv\u00e4nd upp och nedpilarna f\u00f6r att navigera."],"Close dialog":["St\u00e4ng dialogruta"],"Time":["Tid"],"Day":["Dag"],"Month":["M\u00e5nad"],"Date":["Datum"],"PM":["e m"],"AM":["f m"],"December":["december"],"November":["november"],"October":["oktober"],"September":["september"],"August":["augusti"],"July":["juli"],"June":["juni"],"May":["maj"],"April":["april"],"March":["mars"],"February":["februari"],"January":["januari"],"Year":["\u00c5r"],"Custom Size":["Anpassad storlek"],"Drop files to upload":["Sl\u00e4pp filer f\u00f6r att ladda upp"],"(opens in a new tab)":["(\u00f6ppnas i en ny flik)"],"Clear":["Rensa"],"Close":["St\u00e4ng"],"No results found.":["Inga resultat hittades."]}},"comment":{"reference":"wp-includes\/js\/dist\/components.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-803bf1ce2131e13efc590c1bc47851fc.json b/wp-content/languages/sv_SE-803bf1ce2131e13efc590c1bc47851fc.json new file mode 100644 index 000000000..7ea883c71 --- /dev/null +++ b/wp-content/languages/sv_SE-803bf1ce2131e13efc590c1bc47851fc.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Additional CSS Class":["Ytterligare CSS-klass"],"Anchors lets you link directly to a section on a page.":["Ankare l\u00e5ter dig l\u00e4nka direkt till en sektion p\u00e5 en sida."],"HTML Anchor":["HTML-ankare"],"Transform To:":["Omvandla till:"],"Block Styles":["Blockstilar"],"Change type of %d block":["\u00c4ndra typ hos %d block","\u00c4ndra typ hos %d block"],"Change block type or style":["\u00c4ndra blocktyp eller blockstil"],"Block icon":["Blockikon"],"Remove Block":["Ta bort block"],"Insert After":["Infoga efter"],"Insert Before":["Infoga f\u00f6re"],"Duplicate":["Duplicera"],"Hide options":["D\u00f6lj alternativ"],"Remove from Reusable Blocks":["Ta bort fr\u00e5n \u00e5teranv\u00e4ndbara block"],"Convert to Regular Block":["Konvertera till vanlig block"],"Add to Reusable Blocks":["L\u00e4gg till i \u00e5teranv\u00e4ndbara block"],"Edit visually":["Redigera visuellt"],"Edit as HTML":["Redigera som HTML"],"Styles":["Stilar"],"No block selected.":["Inga block valda."],"%d word":["%d ord","%d ord"],"%d block":["%d block","%d block"],"block style\u0004Default":["Standard"],"Skip to the selected block":["Hoppa \u00f6ver till det valda blocket"],"Submit":["Skicka"],"Insert Link":["Infoga l\u00e4nk"],"Edit Link":["Redigera l\u00e4nken"],"Upload":["Ladda upp"],"Given your current role, you can only link a video, you cannot upload.":["Din nuvarande roll ger dig endast beh\u00f6righet att l\u00e4nka till en video. Du kan inte ladda upp filer."],"Given your current role, you can only link an image, you cannot upload.":["Din nuvarande roll ger dig endast beh\u00f6righet att l\u00e4nka till en bild. Du kan inte ladda upp filer."],"Given your current role, you can only link an audio, you cannot upload.":["Din nuvarande roll ger dig endast beh\u00f6righet att l\u00e4nka till en ljudfil. Du kan inte ladda upp filer."],"Given your current role, you can only link a media file, you cannot upload.":["Din nuvarande roll ger dig endast beh\u00f6righet att l\u00e4nka till en mediafil. Du kan inte ladda upp filer."],"Drag a video, upload a new one or select a file from your library.":["Dra in en video, ladda upp en ny eller v\u00e4lj en fil fr\u00e5n ditt mediabibliotek."],"Drag an image, upload a new one or select a file from your library.":["Dra in en bild, ladda upp en ny eller v\u00e4lj en fil fr\u00e5n ditt mediabibliotek."],"Drag an audio, upload a new one or select a file from your library.":["Dra in en ljudfil, ladda upp en ny eller v\u00e4lj en fil fr\u00e5n ditt mediabibliotek."],"Drag a media file, upload a new one or select a file from your library.":["Dra in en mediafil, ladda upp en ny eller v\u00e4lj en fil fr\u00e5n ditt mediabibliotek."],"To edit this block, you need permission to upload media.":["F\u00f6r att redigera detta block beh\u00f6ver du beh\u00f6righet att ladda upp media."],"Paste or type URL":["Klistra in eller skriv URL"],"Link Settings":["L\u00e4nkinst\u00e4llningar"],"keyboard key\u0004Space":["Mellanslag"],"Indent list item":["S\u00e4nk listobjektet en niv\u00e5"],"keyboard key\u0004Backspace":["Backsteg"],"Outdent list item":["Lyft listobjektet en niv\u00e5"],"Convert to ordered list":["Konvertera till numrerad lista"],"Convert to unordered list":["Konvertera till punktlista"],"More Rich Text Controls":["Fler reglage f\u00f6r formaterat inneh\u00e5ll"],"(%s: %s)":["(%s: %s)"],"(current %s: %s)":["(nuvarande %s: %s)"],"Start writing or type \/ to choose a block":["B\u00f6rja skriva eller tryck p\u00e5 \u201d\/\u201d f\u00f6r att v\u00e4lja ett block"],"Block: %s":["Block: %s"],"Add %s":["L\u00e4gg till %s"],"Add block":["L\u00e4gg till block"],"Manage All Reusable Blocks":["Hantera alla \u00e5teranv\u00e4ndbara block"],"Reusable":["\u00c5teranv\u00e4ndbar"],"blocks\u0004Most Used":["Mest anv\u00e4nda"],"Available block types":["Tillg\u00e4ngliga blocktyper"],"Search for a block":["S\u00f6k efter ett block"],"Block tools":["Blockverktyg"],"This block has encountered an error and cannot be previewed.":["Detta block har st\u00f6tt p\u00e5 ett fel och kan inte f\u00f6rhandsgranskas."],"This block contains unexpected or invalid content.":["Detta block inneh\u00e5ller ov\u00e4ntat eller ogiltigt inneh\u00e5ll"],"imperative verb\u0004Resolve":["L\u00f6s upp"],"Convert to Blocks":["Konvertera till block"],"Resolve Block":["L\u00f6s upp blocket"],"Attempt Block Recovery":["F\u00f6rs\u00f6kt att \u00e5terskapa block"],"Convert to Classic Block":["Konvertera till Klassiskt block"],"After Conversion":["Efter konvertering"],"Convert to HTML":["Konvertera till HTML"],"Current":["Nuvarande"],"More options":["Fler alternativ"],"Move %1$d block from position %2$d down by one place":["Flytta %1$d block fr\u00e5n position %2$d en plats ned\u00e5t","Flytta %1$d block fr\u00e5n position %2$d en plats ned\u00e5t"],"Move %1$d block from position %2$d up by one place":["Flytta %1$d block fr\u00e5n position %2$d en plats upp\u00e5t","Flytta %1$d block fr\u00e5n position %2$d en plats upp\u00e5t"],"Blocks cannot be moved down as they are already at the bottom":["Block kan inte flyttas ner eftersom de redan \u00e4r l\u00e4ngst ner"],"Blocks cannot be moved up as they are already at the top":["Block kan inte flyttas upp eftersom de redan \u00e4r h\u00f6gst upp"],"Block %s is at the beginning of the content and can\u2019t be moved up":["Block %s \u00e4r i b\u00f6rjan av inneh\u00e5llet och kan inte flyttas upp"],"Move %1$s block from position %2$d up to position %3$d":["Flytta blocket %1$s fr\u00e5n position %2$d upp till position %3$d"],"Block %s is at the end of the content and can\u2019t be moved down":["Block %s \u00e4r i slutet av inneh\u00e5llet och kan inte flyttas ner"],"Move %1$s block from position %2$d down to position %3$d":["Flytta blocket %1$s fr\u00e5n position %2$d ned till position %3$d"],"Block %s is the only block, and cannot be moved":["Block %s \u00e4r det enda blocket och kan inte flyttas"],"This color combination may be hard for people to read. Try using a brighter background color and\/or a darker text color.":["Denna f\u00e4rgkombination kan vara sv\u00e5r f\u00f6r m\u00e4nniskor att l\u00e4sa. F\u00f6rs\u00f6k anv\u00e4nda en ljusare bakgrundsf\u00e4rg och\/eller en m\u00f6rkare textf\u00e4rg."],"This color combination may be hard for people to read. Try using a darker background color and\/or a brighter text color.":["Denna f\u00e4rgkombination kan vara sv\u00e5r f\u00f6r m\u00e4nniskor att l\u00e4sa. F\u00f6rs\u00f6k anv\u00e4nda en m\u00f6rkare bakgrundsf\u00e4rg och\/eller en ljusare textf\u00e4rg."],"Block Navigation":["Navigering mellan block"],"(selected block)":["(valt block)"],"Change Alignment":["\u00c4ndra justering"],"Full width":["Full bredd"],"Wide width":["Bred bredd"],"Change Text Alignment":["\u00c4ndra textens justering"],"Align text right":["H\u00f6gerst\u00e4lld text"],"Align text center":["Centrerad text"],"Align text left":["V\u00e4nsterst\u00e4lld text"],"%s block selected.":["%s block \u00e4r markerat.","%s block \u00e4r markerade."],"font size name\u0004Huge":["Enorm"],"font size name\u0004Large":["Stor"],"font size name\u0004Medium":["Medium"],"font size name\u0004Small":["Liten"],"Very dark gray":["Mycket m\u00f6rkgr\u00e5"],"Cyan bluish gray":["Cyan bl\u00e5gr\u00e5"],"Very light gray":["Mycket ljusgr\u00e5"],"Vivid cyan blue":["Intensivt cyanbl\u00e5"],"Pale cyan blue":["Blek cyanbl\u00e5"],"Vivid green cyan":["Intensivt cyangr\u00f6nt"],"Light green cyan":["Ljusgr\u00f6n cyan"],"Luminous vivid amber":["Lysande intensivt gult"],"Luminous vivid orange":["Lysande intensivt orange"],"Vivid red":["Intensivt r\u00f6d"],"Pale pink":["Blek rosa"],"%d result found.":["%d resultat hittades.","%d resultat hittades."],"font size name\u0004Normal":["Normal"],"No results.":["Inga resultat."],"%d result found, use up and down arrow keys to navigate.":["%d resultat hittades, anv\u00e4nd upp och nedpilarna f\u00f6r att navigera.","%d resultat hittades, anv\u00e4nd upp och nedpilarna f\u00f6r att navigera."],"Paste URL or type to search":["Klistra in URL eller skriv f\u00f6r att s\u00f6ka"],"Advanced":["Avancerat"],"Align left":["V\u00e4nsterst\u00e4ll"],"Align right":["H\u00f6gerst\u00e4ll"],"Align center":["Centrera"],"Media":["Media"],"Insert from URL":["Infoga fr\u00e5n URL"],"Media Library":["Mediabibliotek"],"Apply":["Verkst\u00e4ll"],"Move up":["Flytta upp"],"Move down":["Flytta ner"],"No blocks found.":["Inga block hittades."],"Preview":["F\u00f6rhandsgranska"],"Full Size":["Full storlek"],"Large":["Stor"],"Medium":["Medium"],"Thumbnail":["Miniatyr"],"Video":["Video"],"Audio":["Ljud"],"URL":["URL"],"Link selected.":["L\u00e4nk vald."],"(no title)":["(utan rubrik)"],"Close":["St\u00e4ng"],"Image":["Bild"]}},"comment":{"reference":"wp-includes\/js\/dist\/block-editor.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-8860e58c20c6a2ab5876a0f07be43bd9.json b/wp-content/languages/sv_SE-8860e58c20c6a2ab5876a0f07be43bd9.json new file mode 100644 index 000000000..a2330fc55 --- /dev/null +++ b/wp-content/languages/sv_SE-8860e58c20c6a2ab5876a0f07be43bd9.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Pin to toolbar":["F\u00e4st i verktygsf\u00e4ltet"],"Unpin from toolbar":["Lossa fr\u00e5n verktygsf\u00e4ltet"],"Close plugin":["St\u00e4ng till\u00e4gget"],"Editor plugins":["Till\u00e4ggsredigerare"],"Open publish panel":["\u00d6ppna publiceringspanel"],"Editor content":["Inneh\u00e5llsredigerare"],"Editor publish":["Redigerarens publicera-omr\u00e5de"],"Editor settings":["Inst\u00e4llningar f\u00f6r redigeraren"],"Read about permalinks":["L\u00e4s om permal\u00e4nkar"],"The last part of the URL. ":["Den sista delen av URL:en."],"URL Slug":["URL-slug"],"Status & Visibility":["Status och synlighet"],"Click to change":["Klicka f\u00f6r att \u00e4ndra"],"Visibility":["Synlighet"],"Close settings":["St\u00e4ng inst\u00e4llningar"],"Block (selected)":["Block (valt)"],"Document":["Dokument"],"Document (selected)":["Dokument (valt)"],"Block":["Block","%d block"],"Advanced Panels":["Avancerade paneler"],"Discussion":["Diskussion"],"Permalink":["Permal\u00e4nk"],"Document Panels":["Dokumentpaneler"],"Enable Tips":["Aktivera tips"],"Enable Pre-publish Checks":["Aktivera kontroller f\u00f6re publicering"],"Custom Fields":["Anpassade f\u00e4lt"],"Display the selected text in a monospaced font.":["Visa den markerade texten i ett typsnitt med fast teckenbredd."],"Add a strikethrough to the selected text.":["L\u00e4gg till \u00f6verstrykning f\u00f6r den markerade texten."],"Remove a link.":["Ta bort en l\u00e4nk."],"Convert the selected text into a link.":["Konvertera den valda texten till en l\u00e4nk."],"Underline the selected text.":["G\u00f6r understrykning av den markerade texten."],"Make the selected text italic.":["\u00c4ndra den markerade texten till kursiv."],"Make the selected text bold.":["\u00c4ndra den markerade texten till fetstil."],"Text formatting":["Textformatering"],"Forward-slash":["Snedstreck"],"Change the block type after adding a new paragraph.":["\u00c4ndra blocktypen n\u00e4r ett nytt stycke lagts till."],"Insert a new block after the selected block(s).":["Infoga ett nytt block efter markerat\/markerade block."],"Insert a new block before the selected block(s).":["Skjut in ett nytt block f\u00f6re det markerade bloket (blocken)."],"Remove the selected block(s).":["Ta bort det markerade blocket (blocken)."],"Duplicate the selected block(s).":["Duplicera markerat\/markerade block."],"Block shortcuts":["Kortkoder f\u00f6r block"],"Escape":["Esc"],"Clear selection.":["Ta bort markeringen."],"Select all text when typing. Press again to select all blocks.":["V\u00e4lj all text vid inmatning. Tryck en g\u00e5ng till f\u00f6r att v\u00e4lja alla block."],"Selection shortcuts":["Genv\u00e4gar f\u00f6r markering"],"Switch between Visual Editor and Code Editor.":["V\u00e4xla mellan visuell redigerare och kodredigerare."],"Navigate to the nearest toolbar.":["Navigera till n\u00e4rmaste verktygsf\u00e4lt."],"Navigate to the previous part of the editor (alternative).":["G\u00e5 till f\u00f6reg\u00e5ende del av redigeraren (alternativ)."],"Navigate to the next part of the editor (alternative).":["Navigera till n\u00e4sta del av redigeraren (alternativ)."],"Navigate to the previous part of the editor.":["G\u00e5 till f\u00f6reg\u00e5ende del av redigeraren."],"Navigate to the next part of the editor.":["Navigera till n\u00e4sta del av redigeraren."],"Open the block navigation menu.":["\u00d6ppna blocknavigationsmenyn."],"Show or hide the settings sidebar.":["Visa eller d\u00f6lj sidopanelen f\u00f6r inst\u00e4llningar."],"Redo your last undo.":["G\u00f6r om den senast \u00e5ngrade \u00e5tg\u00e4rden."],"Undo your last changes.":["\u00c5ngra dina senaste \u00e4ndringar."],"Save your changes.":["Spara dina \u00e4ndringar."],"Display this help.":["Visa denna hj\u00e4lp."],"Global shortcuts":["Globala genv\u00e4gar"],"Show Block Settings":["Visa blockinst\u00e4llningar"],"Hide Block Settings":["D\u00f6lj blockinst\u00e4llningar"],"Additional settings are now available in the Editor block settings sidebar":["Ytterligare inst\u00e4llningar finns nu tillg\u00e4ngliga i Redigerarens sidopanelen med blockinst\u00e4llningar"],"Block settings closed":["Blockets inst\u00e4llningar \u00e4r st\u00e4ngda"],"Exit Code Editor":["Avsluta kodredigerare"],"Editing Code":["Att redigera kod"],"You\u2019ll find more settings for your page and blocks in the sidebar. Click the cog icon to toggle the sidebar open and closed.":["Du hittar fler inst\u00e4llningar f\u00f6r din sida och dina block i sidopanelen. Klicka p\u00e5 ikonen med kugghjulet f\u00f6r att \u00f6ppna och st\u00e4nga sidopanelen."],"Editor top bar":["Redigerarens toppband"],"Welcome to the wonderful world of blocks! Click the \u201c+\u201d (\u201cAdd block\u201d) button to add a new block. There are blocks available for all kinds of content: you can insert text, headings, images, lists, and lots more!":["V\u00e4lkommen till den underbara v\u00e4rlden av block! Klicka p\u00e5 knappen \u201d+\u201d (\u201dL\u00e4gg till block\u201d) f\u00f6r att l\u00e4gga till ett nytt block. Det finns block tillg\u00e4ngliga f\u00f6r alla typer av inneh\u00e5ll: du kan infoga text, rubriker, bilder, listor och mycket mer!"],"Document tools":["Dokumentverktyg"],"Document and block tools":["Dokument och blockverktyg"],"Hide more tools & options":["D\u00f6lj mer verktyg och alternativ"],"Show more tools & options":["Visa mer verktyg och alternativ"],"Fullscreen mode deactivated":["Helsk\u00e4rmsl\u00e4get har avslutats"],"Fullscreen mode activated":["Helsk\u00e4rmsl\u00e4ge har aktiverats"],"Work without distraction":["Arbeta utan att distraheras"],"Fullscreen Mode":["Helsk\u00e4rmsl\u00e4ge"],"Spotlight mode deactivated":["Str\u00e5lkastarl\u00e4ge inaktiverat"],"Spotlight mode activated":["Str\u00e5lkastarl\u00e4ge aktiverat"],"Focus on one block at a time":["Fokusera p\u00e5 ett block i taget"],"Spotlight Mode":["Spotlight-l\u00e4ge"],"Top toolbar deactivated":["Verktygsf\u00e4ltet i toppen har inaktiverats"],"Top toolbar activated":["Verktygsf\u00e4ltet i toppen har aktiverats"],"Access all block and document tools in a single place":["F\u00e5 \u00e5tkomst till alla block- och dokumentverktyg p\u00e5 en enda plats"],"Top Toolbar":["Verktygsf\u00e4lt i toppen"],"noun\u0004View":["Visa"],"Feature activated":["Funktionen har aktiverats"],"Feature deactivated":["Funktionen har inaktiverats"],"Options":["Alternativ"],"Editor":["Redigerare"],"Code Editor":["Kodredigerare"],"Visual Editor":["Visuell redigerare"],"Code editor selected":["Kodredigerare vald"],"Visual editor selected":["Visuell redigerare vald"],"Tools":["Verktyg"],"Block Manager":["Blockhanterare"],"Copy All Content":["Kopiera allt inneh\u00e5ll"],"This block can only be used once.":["Detta block kan bara anv\u00e4ndas en g\u00e5ng."],"Transform into:":["Omvandla till:"],"Find original":["Hitta original"],"Select or Upload Media":["V\u00e4lj eller ladda upp media"],"Manage All Reusable Blocks":["Hantera alla \u00e5teranv\u00e4ndbara block"],"Available block types":["Tillg\u00e4ngliga blocktyper"],"Search for a block":["S\u00f6k efter ett block"],"Copied!":["kopierad!"],"Featured Image":["Utvald bild"],"Keyboard Shortcuts":["Tangentbordsgenv\u00e4gar"],"General":["Allm\u00e4nt"],"Excerpt":["Utdrag"],"Select":["V\u00e4lj"],"Page Attributes":["Sidoattribut"],"No blocks found.":["Inga block hittades."],"Preview":["F\u00f6rhandsgranska"],"Remove":["Ta bort"],"Back":["Tillbaka"],"Publish":["Publicera"],"(no title)":["(utan rubrik)"],"Close":["St\u00e4ng"],"Settings":["Inst\u00e4llningar"],"Plugins":["Till\u00e4gg"]}},"comment":{"reference":"wp-includes\/js\/dist\/edit-post.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-a25d1cc7bf7ca0b4e114f6bea64943f4.json b/wp-content/languages/sv_SE-a25d1cc7bf7ca0b4e114f6bea64943f4.json new file mode 100644 index 000000000..556e50617 --- /dev/null +++ b/wp-content/languages/sv_SE-a25d1cc7bf7ca0b4e114f6bea64943f4.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Backtick":["Backtick (`)"],"Period":["Period"],"Comma":["Komma"]}},"comment":{"reference":"wp-includes\/js\/dist\/keycodes.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-bf0f094965d3d4a95b47babcb35fc136.json b/wp-content/languages/sv_SE-bf0f094965d3d4a95b47babcb35fc136.json new file mode 100644 index 000000000..eaf10e22a --- /dev/null +++ b/wp-content/languages/sv_SE-bf0f094965d3d4a95b47babcb35fc136.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"View the autosave":["Visa autosparad version"],"There is an autosave of this post that is more recent than the version below.":["Det finns en autosparad version av detta inl\u00e4gg som \u00e4r nyare \u00e4n nedanst\u00e5ende version."],"Error while uploading file %s to the media library.":["Ett fel intr\u00e4ffade n\u00e4r filen %s laddades upp till mediabiblioteket."],"This file is empty.":["Filen \u00e4r tom."],"This file exceeds the maximum upload size for this site.":["Filen \u00f6verskrider den maximala storleken f\u00f6r filuppladdningar p\u00e5 denna webbplats."],"Sorry, this file type is not supported here.":["Denna filtyp st\u00f6ds inte h\u00e4r."],"You have unsaved changes. If you proceed, they will be lost.":["Du har osparade \u00e4ndringar. Om du forts\u00e4tter kommer de att g\u00e5 f\u00f6rlorade."],"Content structure":["Inneh\u00e5llsstruktur"],"Document Outline":["Dokument\u00f6versikt"],"Blocks":["Block"],"Paragraphs":["Stycken"],"Headings":["Rubriker"],"Words":["Ord"],"Document Statistics":["Dokumentstatistik"],"Move to trash":["Flytta till papperskorg"],"Add title":["L\u00e4gg till rubrik"],"Change Permalinks":["\u00c4ndra permal\u00e4nkar"],"Permalink:":["Permal\u00e4nk:"],"Copy the permalink":["Kopiera permal\u00e4nken"],"Permalink copied":["Permal\u00e4nken kopierad"],"Edit post permalink":["Redigera inl\u00e4ggets permal\u00e4nk"],"Start writing with text or HTML":["B\u00f6rja skriva in text eller HTML"],"Type text or HTML":["Skriv in text eller HTML"],"Terms":["Termer"],"Search Terms":["S\u00f6ktermer"],"Parent Term":["\u00d6verordnad term"],"Add new term":["L\u00e4gg till ny term"],"Add new category":["L\u00e4gg till ny kategori"],"%d result found.":["%d resultat hittades.","%d resultat hittades."],"Stick to the top of the blog":["F\u00e4st l\u00e4ngst upp i bloggen"],"Saving":["Sparar"],"Autosaving":["Autosparar"],"Switch to Draft":["Byt till utkast"],"Are you sure you want to unschedule this post?":["\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort schemal\u00e4ggningen av detta inl\u00e4gg?"],"Are you sure you want to unpublish this post?":["\u00c4r du s\u00e4ker p\u00e5 att du vill avpublicera detta inl\u00e4gg?"],"Always show pre-publish checks.":["Visa alltid kontroller innan publicering sker."],"Close panel":["St\u00e4ng panel"],"Scheduled":["Schemalagd"],"Copied!":["kopierad!"],"%s address":["Adress f\u00f6r %s"],"What\u2019s next?":["Vad kommer h\u00e4rn\u00e4st?"],"is now live.":["\u00e4r nu live."],"is now scheduled. It will go live on":["\u00e4r tidsinst\u00e4llt och publiceras"],"Publish:":["Publicera:"],"Visibility:":["Synlighet:"],"Double-check your settings before publishing.":["Dubbelkontrollera dina inst\u00e4llningar innan du publicerar."],"Are you ready to publish?":["\u00c4r du redo att publicera?"],"Your work will be published at the specified date and time.":["Ditt arbete kommer att publiceras p\u00e5 angivet datum och tid."],"Are you ready to schedule?":["\u00c4r du redo att schemal\u00e4gga?"],"When you\u2019re ready, submit your work for review, and an Editor will be able to approve it for you.":["N\u00e4r du \u00e4r klar, skicka in ditt arbete f\u00f6r granskning, och en redakt\u00f6r kommer att kunna godk\u00e4nna det \u00e5t dig."],"Are you ready to submit for review?":["\u00c4r du redo att skicka in en recension?"],"Apply the \"%1$s\" format.":["Till\u00e4mpa formatet \u201d%1$s\u201d."],"Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.":["Ditt tema anv\u00e4nder inl\u00e4ggsformat f\u00f6r att markera olika typer av inneh\u00e5ll, t.ex. bilder eller video. Anv\u00e4nd ett inl\u00e4ggsformat f\u00f6r att visa detta speciella utseende."],"Use a post format":["Anv\u00e4nd ett inl\u00e4ggsformat"],"Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post.":["Etiketter hj\u00e4lper anv\u00e4ndare och s\u00f6kmotorer att navigera runt p\u00e5 webbplatsen och hitta inneh\u00e5llet. L\u00e4gg till n\u00e5gra nyckelord som beskriver inl\u00e4gget."],"Add tags":["L\u00e4gg till etiketter"],"term\u0004Remove %s":["Ta bort %s"],"term\u0004%s removed":["%s togs bort"],"term\u0004%s added":["%s har lagts till"],"Term":["Term"],"Tag":["Etikett"],"Add New Term":["L\u00e4gg till ny term"],"Immediately":["Genast"],"Use a secure password":["Anv\u00e4nd ett s\u00e4kert l\u00f6senord"],"Create password":["Skapa l\u00f6senord"],"Post Visibility":["Inl\u00e4ggets synlighet"],"Would you like to privately publish this post now?":["Vill du publicera detta inl\u00e4gg privat nu?"],"Protected with a password you choose. Only those with the password can view this post.":["Skyddad med ett l\u00f6senord du v\u00e4ljer. Endast de som har l\u00f6senordet kan se det h\u00e4r inl\u00e4gget."],"Only visible to site admins and editors.":["Endast synlig f\u00f6r webbplatsadministrat\u00f6rer och redigerare."],"Visible to everyone.":["Synlig f\u00f6r alla."],"Finished writing? That\u2019s great, let\u2019s get this published right now. Just click \u201cPublish\u201d and you\u2019re good to go.":["Skrivit klart? Det \u00e4r bra, l\u00e5t oss nu genast f\u00e5 det publicerat. Klicka bara p\u00e5 \u201dPublicera\u201d och allt \u00e4r klart."],"Publish\u2026":["Publicera..."],"Schedule\u2026":["Schemal\u00e4gg..."],"Schedule":["Tidsinst\u00e4ll"],"Submit for Review":["Skicka in f\u00f6r recension"],"Scheduling\u2026":["Schemal\u00e4gger..."],"Updating\u2026":["Uppdaterar\u2026"],"Publishing\u2026":["Publicerar\u2026"],"Allow Pingbacks & Trackbacks":["Till\u00e5t pingbacks och trackbacks"],"Take Over":["Ta \u00f6ver"],"Another user is currently working on this post, which means you cannot make changes, unless you take over.":["En annan anv\u00e4ndare arbetar f\u00f6r n\u00e4rvarande med detta inl\u00e4gg, vilket inneb\u00e4r att du inte kan g\u00f6ra \u00e4ndringar, s\u00e5vida du inte tar \u00f6ver."],"%s is currently working on this post, which means you cannot make changes, unless you take over.":["%s arbetar f\u00f6r n\u00e4rvarande med detta inl\u00e4gg, vilket inneb\u00e4r att du inte kan g\u00f6ra \u00e4ndringar, s\u00e5vida du inte tar \u00f6ver."],"Another user now has editing control of this post. Don\u2019t worry, your changes up to this moment have been saved.":["En annan anv\u00e4ndare har nu redigeringskontroll \u00f6ver detta inl\u00e4gg. Oroa dig inte, dina \u00e4ndringar fram tills nu \u00e4r sparade."],"%s now has editing control of this post. Don\u2019t worry, your changes up to this moment have been saved.":["%s har nu redigeringskontroll \u00f6ver detta inl\u00e4gg. Oroa dig inte, dina \u00e4ndringar fram tills nu \u00e4r sparade."],"Avatar":["Profilbild"],"This post is already being edited.":["Detta inl\u00e4gg redigeras redan."],"Someone else has taken over this post.":["N\u00e5gon annan har tagit \u00f6ver detta inl\u00e4gg."],"Exit the Editor":["Avsluta redigeraren"],"Click \u201cPreview\u201d to load a preview of this page, so you can make sure you\u2019re happy with your blocks.":["Klicka p\u00e5 \u201dF\u00f6rhandsgranska\u201d f\u00f6r att ladda en f\u00f6rhandsvisning av denna sida, s\u00e5 att du kan vara s\u00e4ker p\u00e5 att du \u00e4r n\u00f6jd med dina block."],"imperative verb\u0004Preview":["F\u00f6rhandsgranska"],"Generating preview\u2026":["Genererar f\u00f6rhandsgranskning\u2026"],"%d Revision":["%d version","%d versioner"],"Suggestion:":["F\u00f6rslag:"],"Post Format":["Inl\u00e4ggsformat"],"Chat":["Chatt"],"Status":["Status"],"Standard":["Standard"],"Quote":["Citat"],"Aside":["Notis"],"Replace image":["Ers\u00e4tt bild"],"Edit or update the image":["Redigera eller uppdatera bilden"],"To edit the featured image, you need permission to upload media.":["F\u00f6r att redigera den utvalda bilden beh\u00f6ver du beh\u00f6righet att ladda upp mediafiler."],"Set featured image":["Ange utvald bild"],"Featured Image":["Utvald bild"],"Learn more about manual excerpts":["L\u00e4r dig mer om manuella utdrag"],"https:\/\/codex.wordpress.org\/Excerpt":["https:\/\/codex.wordpress.org\/Excerpt"],"Write an excerpt (optional)":["Skriv ett utdrag (valfritt)"],"Allow Comments":["Till\u00e5t kommentarer"],"Template:":["Mall:"],"no parent":["ingen \u00f6verordnad"],"no title":["ingen rubrik"],"Order":["Ordning"],"The editor has encountered an unexpected error.":["Redigeraren har st\u00f6tt p\u00e5 ett ov\u00e4ntat fel."],"Copy Error":["Kopieringsfel"],"Copy Post Text":["Kopiera inl\u00e4ggstext"],"Attempt Recovery":["F\u00f6rs\u00f6k \u00e5terst\u00e4llning"],"Reset the template":["\u00c5terst\u00e4ll mallen"],"Keep it as is":["Beh\u00e5ll det som det \u00e4r"],"The content of your post doesn\u2019t match the template assigned to your post type.":["Inneh\u00e5llet i ditt inl\u00e4gg matchar inte mallen som tilldelats till din inl\u00e4ggstyp."],"Resetting the template may result in loss of content, do you want to continue?":["\u00c5terst\u00e4llning av mallen kan det leda till f\u00f6rlust av inneh\u00e5ll, vill du forts\u00e4tta?"],"(Multiple H1 headings are not recommended)":["(Flera H1-rubriker rekommenderas inte)"],"(Your theme may already use a H1 for the post title)":["(Ditt tema kan redan anv\u00e4nda en H1 f\u00f6r inl\u00e4ggsrubriken)"],"(Incorrect heading level)":["(Felaktig rubrikniv\u00e5)"],"(Empty heading)":["(Tom rubrik)"],"Untitled Reusable Block":["Block utan rubrik som kan \u00e5teranv\u00e4ndas"],"Block deleted.":["Block borttaget."],"Block created.":["Block skapad."],"Trashing failed":["Borttagning misslyckades"],"Updating failed":["Uppdatering misslyckades"],"Scheduling failed":["Schemal\u00e4ggning misslyckades"],"Publishing failed":["Publicering misslyckades"],"Category":["Kategori"],"Edit":["Redigera"],"Link":["L\u00e4nk"],"Author":["F\u00f6rfattare"],"Redo":["G\u00f6r om"],"Undo":["\u00c5ngra"],"Add New Tag":["L\u00e4gg till en ny etikett"],"Parent Category":["\u00d6verordnad kategori"],"Remove image":["Ta bort bild"],"Pending Review":["V\u00e4ntar p\u00e5 granskning"],"Block updated.":["Block uppdaterad."],"Copy Link":["Kopiera l\u00e4nk"],"Title":["Rubrik"],"(opens in a new tab)":["(\u00f6ppnas i en ny flik)"],"Video":["Video"],"Audio":["Ljud"],"Gallery":["Galleri"],"Word count type. Do not translate!\u0004words":["words"],"Save":["Spara"],"Password Protected":["L\u00f6senordsskyddat"],"Public":["Offentlig"],"Private":["Privat"],"Save as Pending":["Spara som v\u00e4ntande"],"Saved":["Sparat"],"Save Draft":["Spara utkast"],"Published":["Publicerat"],"Publish":["Publicera"],"(no title)":["(utan rubrik)"],"Update":["Uppdatera"],"Sorry, this file type is not permitted for security reasons.":["Denna filtyp \u00e4r inte till\u00e5ten av s\u00e4kerhetssk\u00e4l."],"Image":["Bild"]}},"comment":{"reference":"wp-includes\/js\/dist\/editor.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE-f8f49d9fc4a9cf7d78ec99285417bd9c.json b/wp-content/languages/sv_SE-f8f49d9fc4a9cf7d78ec99285417bd9c.json new file mode 100644 index 000000000..fc98c9c46 --- /dev/null +++ b/wp-content/languages/sv_SE-f8f49d9fc4a9cf7d78ec99285417bd9c.json @@ -0,0 +1 @@ +{"translation-revision-date":"2019-10-03 09:55:04+0000","generator":"GlotPress\/2.4.0-alpha","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Taxonomy":["Taxonomi"],"Tag Cloud Settings":["Inst\u00e4llningar f\u00f6r etikettmoln"],"- Select -":["- V\u00e4lj -"],"feed":["webbfl\u00f6de"],"atom":["atom"],"Display entries from any RSS or Atom feed.":["Visa inl\u00e4gg fr\u00e5n valfritt RSS- eller Atom-webbfl\u00f6de."],"Max number of words in excerpt":["Maximalt antal ord i utdrag"],"Display excerpt":["Visa utdrag"],"Display date":["Visa datum"],"Display author":["Visa f\u00f6rfattare"],"RSS Settings":["RSS-inst\u00e4llningar"],"Edit RSS URL":["\u00c4ndra RSS-URL"],"Use URL":["Anv\u00e4nd URL"],"Enter URL here\u2026":["Ange URL h\u00e4r..."],"find":["hitta"],"Help visitors find your content.":["Hj\u00e4lp bes\u00f6karna att hitta ditt inneh\u00e5ll"],"Add button text\u2026":["L\u00e4gg till knapptext..."],"Button text":["Knapptext"],"Optional placeholder\u2026":["Platsmark\u00f6r (valfritt)..."],"Optional placeholder text":["Text f\u00f6r platsmark\u00f6r (valfritt)"],"Add label\u2026":["L\u00e4gg till etikett..."],"Label text":["Text p\u00e5 etiketten"],"Solid Color":["Solid f\u00e4rg"],"Give special visual emphasis to a quote from your text.":["Ge s\u00e4rskild visuell betoning p\u00e5 ett citat fr\u00e5n din text."],"Pullquote":["Markerat citat"],"Main Color":["Huvudf\u00e4rg"],"pagination":["sidindelning"],"next page":["n\u00e4sta sida"],"Separate your content into a multi-page experience.":["Dela upp ditt inneh\u00e5ll till en upplevelse som str\u00e4cker sig \u00f6ver flera sidor."],"Page Break":["Sidbrytning"],"Content before this block will be shown in the excerpt on your archives page.":["Inneh\u00e5ll f\u00f6re detta block kommer att visas i utdraget p\u00e5 dina arkivsidor."],"block name\u0004More":["Mer"],"Hide the excerpt on the full content page":["D\u00f6lj utdraget p\u00e5 sidan med hela inneh\u00e5llet"],"The excerpt is visible.":["Udraget \u00e4r synligt."],"The excerpt is hidden.":["Utdraget \u00e4r dolt."],"Read more":["L\u00e4s mer"],"Display a list of all categories.":["Visa en lista p\u00e5 alla kategorier."],"Show Hierarchy":["Visa hierarki"],"Categories Settings":["Kategoriinst\u00e4llningar"],"archive":["arkiv"],"posts":["inl\u00e4gg"],"A calendar of your site\u2019s posts.":["En kalender med inl\u00e4ggen p\u00e5 din webbplats."],"recent posts":["senaste inl\u00e4gget"],"Display a list of your most recent posts.":["Visa en lista \u00f6ver dina senaste inl\u00e4gg."],"Latest Posts":["Senaste inl\u00e4ggen"],"Display post date":["Visa inl\u00e4ggsdatum"],"Latest Posts Settings":["Inst\u00e4llningar f\u00f6r senaste inl\u00e4gg"],"recent comments":["senaste kommentarerna"],"Display a list of your most recent comments.":["Visa en lista med de senaste kommentarerna."],"Latest Comments":["Senaste kommentarerna"],"Number of Comments":["Antal kommentarer"],"Display Excerpt":["Visa utdrag"],"Display Date":["Visa datum"],"Display Avatar":["Visa profilbild"],"Latest Comments Settings":["Inst\u00e4llningar f\u00f6r senaste kommentarerna"],"block style\u0004Squared":["Kvadratisk"],"Outline":["Markera ytterkanter"],"link":["l\u00e4nk"],"Prompt visitors to take action with a button-style link.":["Uppmana bes\u00f6karna att g\u00f6ra n\u00e5got med hj\u00e4lp av en l\u00e4nk i knappformat."],"Button":["Knapp"],"Display a monthly archive of your posts.":["Visa ett m\u00e5nadsarkiv p\u00e5 dina inl\u00e4gg."],"Show Post Counts":["Visa antal inl\u00e4gg"],"Display as Dropdown":["Visa som rullgardinsmeny"],"Archives Settings":["Arkivinst\u00e4llningar"],"embed":["b\u00e4dda in"],"Add custom HTML code and preview it as you edit.":["L\u00e4gg till anpassad HTML-kod och f\u00f6rhandsgranska det n\u00e4r du redigerar."],"HTML":["HTML"],"Write HTML\u2026":["Skriv HTML\u2026"],"Display code snippets that respect your spacing and tabs.":["Visa programkodsutdrag som respekterar dina mellanslag och tabbtecken."],"Write code\u2026":["Skriv kod\u2026"],"Stripes":["R\u00e4nder"],"Insert a table \u2014 perfect for sharing charts and data.":["L\u00e4gg en tabell \u2013 utm\u00e4rkt f\u00f6r att publicera tabeller och data."],"Table":["Tabell"],"Fixed width table cells":["Tabellceller med fast bredd"],"Table Settings":["Tabellinst\u00e4llningar"],"Edit table":["Redigera tabell"],"Create":["Skapa"],"Row Count":["Radantal"],"Column Count":["Kolumnantal"],"Delete Column":["Ta bort kolumn"],"Add Column After":["L\u00e4gg till kolumn efter"],"Add Column Before":["L\u00e4gg till kolumn f\u00f6re"],"Delete Row":["Ta bort rad"],"Add Row After":["L\u00e4gg till rad efter"],"Add Row Before":["L\u00e4gg till rad f\u00f6re"],"movie":["film"],"Embed a video from your media library or upload a new one.":["B\u00e4dda in ett videoklipp fr\u00e5n ditt mediabibliotek eller ladda upp ett nytt."],"Remove Poster Image":["Ta bort posterbild"],"Playback Controls":["Uppspelningsreglage"],"Muted":["Tystad"],"Video Settings":["Videoinst\u00e4llningar"],"Edit video":["Redigera video"],"Add an image or video with a text overlay \u2014 great for headers.":["L\u00e4gg till en bild eller videoklipp med ett text\u00f6verl\u00e4gg \u2013 bra f\u00f6r rubriker."],"Drag an image or a video, upload a new one or select a file from your library.":["Dra en bild eller ett videoklipp, ladda upp en ny eller v\u00e4lj en fil fr\u00e5n ditt bibliotek."],"Cover":["Omslag"],"Background Opacity":["Bakgrundens opacitet"],"Overlay Color":["\u00d6verl\u00e4ggsf\u00e4rg"],"Overlay":["\u00d6verl\u00e4gg"],"Focal Point Picker":["V\u00e4ljare av br\u00e4nnpunkt"],"Fixed Background":["Fixerad bakgrund"],"Cover Settings":["Omslagsinst\u00e4llningar"],"Write title\u2026":["Skriv rubrik\u2026"],"Embed a simple audio player.":["B\u00e4dda in en enkel ljudspelare."],"Auto":["Auto"],"Audio Settings":["Ljudinst\u00e4llningar"],"Edit audio":["Redigera ljud"],"subtitle":["underrubrik"],"title":["rubrik"],"Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.":["Introducera nya sektioner och organisera inneh\u00e5ll f\u00f6r att hj\u00e4lpa bes\u00f6kare (och s\u00f6kmotorer) att f\u00f6rst\u00e5 strukturen p\u00e5 ditt inneh\u00e5ll."],"Heading":["Rubrik"],"Write heading\u2026":["Skriv rubrik\u2026"],"Text Alignment":["Textjustering"],"Level":["Niv\u00e5"],"Heading Settings":["Rubrikinst\u00e4llningar"],"Heading %d":["Rubrikniv\u00e5 %d"],"photos":["foton"],"images":["bilder"],"Display multiple images in a rich gallery.":["Visa flera bilder i ett full\u00f6digt galleri."],"Upload an image":["Ladda upp en bild"],"image %1$d of %2$d in gallery":["bild %1$d av %2$d in galleriet"],"Crop Images":["Besk\u00e4r bilder"],"Drag images, upload new ones or select files from your library.":["Dra bilder, ladda upp nya eller v\u00e4lj filer fr\u00e5n ditt bibliotek."],"Edit gallery":["Redigera galleriet"],"Thumbnails are not cropped.":["Miniatyrerna \u00e4r inte beskurna."],"Thumbnails are cropped to align.":["Miniatyrbilder kantklipps s\u00e5 att de passar in."],"Remove Image":["Ta bort bild"],"Create content, and save it for you and other contributors to reuse across your site. Update the block, and the changes apply everywhere it\u2019s used.":["Skapa inneh\u00e5ll och spara det s\u00e5 att du och andra upphovsm\u00e4n kan \u00e5teranv\u00e4nda det \u00f6verallt p\u00e5 er webbplats. Om blocket uppdateras kommer \u00e4ndringarna att sl\u00e5 igenom \u00f6verallt d\u00e4r blocket anv\u00e4nds."],"Reusable Block":["\u00c5teranv\u00e4ndbart block"],"Block has been deleted or is unavailable.":["Block har tagits bort eller \u00e4r inte tillg\u00e4ngligt."],"Reusable Block: %s":["\u00c5teranv\u00e4ndbart block: %s"],"Name:":["Namn:"],"button label\u0004Download":["Ladda ner"],"pdf":["pdf"],"document":["dokument"],"Add a link to a downloadable file.":["L\u00e4gg till en l\u00e4nk till en nedladdningsbar fil."],"Copy URL":["Kopiera URL"],"Add text\u2026":["L\u00e4gg till text\u2026"],"Write file name\u2026":["Skriv filnamn\u2026"],"Edit file":["Redigera fil"],"Drag a file, upload a new one or select a file from your library.":["Dra en fil, ladda upp en ny eller v\u00e4lj en fil fr\u00e5n ditt bibliotek."],"Show Download Button":["Visa nedladdningsknapp"],"Download Button Settings":["Inst\u00e4llningar f\u00f6r nedladdningsknapp"],"Text Link Settings":["Inst\u00e4llningar f\u00f6r l\u00e4nktext"],"Display a legacy widget.":["Visar en widget av tidigare typ."],"Legacy Widget (Experimental)":["\u00c4ldre widget (experimentell)"],"Change widget":["\u00c4ndra widget"],"Legacy Widget":["\u00c4ldre widget"],"Select a legacy widget to display:":["V\u00e4lj en widget av \u00e4ldre typ du vill visa:"],"There are no widgets available.":["Inga widgetar tillg\u00e4ngliga."],"You don't have permissions to use widgets on this site.":["Du har inte beh\u00f6righet att anv\u00e4nda widgetar p\u00e5 denna webbplats."],"Not a valid widget.":["Ogiltig widget."],"photo":["foto"],"Insert an image to make a visual statement.":["L\u00e4gg in en bild f\u00f6r att ber\u00e4tta visuellt."],"This image has an empty alt attribute":["Denna bild har ett alt-attribut som \u00e4r tomt."],"This image has an empty alt attribute; its file name is %s":["Denna bild har ett alt-attribut som \u00e4r tomt. Dess filnamn \u00e4r %s"],"Open in New Tab":["\u00d6ppna i ny flik"],"Link URL":["L\u00e4nk-URL"],"Image Dimensions":["Bildstorlek"],"Image Settings":["Bildinst\u00e4llningar"],"Edit image":["Redigera bild"],"Set media and words side-by-side for a richer layout.":["Placera media och ord vid sidan av varandra f\u00f6r rikare layout."],"Media & Text":["Media och text"],"Alternative text describes your image to people who can\u2019t see it. Add a short description with its key details.":["Den alternativa texten beskriver din bild f\u00f6r dem som inte kan se den. L\u00e4gg till en kort beskrivning av dess viktigaste detaljer."],"Alt Text (Alternative Text)":["Alt-text (alternativ text)"],"Stack on mobile":["Stapla p\u00e5 mobil"],"Media & Text Settings":["Media och textinst\u00e4llningar"],"Show media on right":["Visa media till h\u00f6ger"],"Show media on left":["Visa media till v\u00e4nster"],"content placeholder\u0004Content\u2026":["Inneh\u00e5ll..."],"Media area":["Mediaomr\u00e5de"],"Edit media":["Redigera media"],"Write\u2026":["Skriv\u2026"],"poetry":["poesi"],"Insert poetry. Use special spacing formats. Or quote song lyrics.":["L\u00e4gg in poesi. Anv\u00e4nd specialformat f\u00f6r radavst\u00e5nd. Eller citera n\u00e5gra rader ur en s\u00e5ngtext."],"Verse":["Vers"],"New Column":["Ny kolumn"],"This block is deprecated. Please use the Columns block instead.":["Detta block \u00e4r taget ur bruk. Anv\u00e4nd blocket \u201dKolumner\u201d i st\u00e4llet."],"Text Columns (deprecated)":["Textkolumner (taget ur bruk)"],"Template block used as a container.":["Mallblock som anv\u00e4nds som container."],"Reusable Template":["\u00c5teranv\u00e4ndbar mall"],"Write subheading\u2026":["Skriv underrubrik ..."],"This block is deprecated. Please use the Paragraph block instead.":["Detta block \u00e4r taget ur bruk. Anv\u00e4nd blocket \u201dStycke\u201d i st\u00e4llet."],"Subheading (deprecated)":["Underrubrik (taget ur bruk)"],"Height in pixels":["H\u00f6jd i pixlar"],"Spacer Settings":["Inst\u00e4llningar f\u00f6r distanselement"],"Add white space between blocks and customize its height.":["L\u00e4gg in ett tomt utrymme mellan block och anpassa dess h\u00f6jd."],"Spacer":["Distanselement"],"Write shortcode here\u2026":["Skriv kortkod h\u00e4r\u2026"],"Insert additional custom elements with a WordPress shortcode.":["L\u00e4gg in andra anpassade element med hj\u00e4lp av en WordPress-kortkod."],"Shortcode":["Kortkod"],"Dots":["Punkter"],"Wide Line":["Bred linje"],"divider":["avdelare"],"horizontal-line":["horisontell-linje"],"Create a break between ideas or sections with a horizontal separator.":["Skapa en avgr\u00e4nsning mellan olika id\u00e9er eller sektioner med hj\u00e4lp av en horisontell avgr\u00e4nsare."],"Separator":["Avgr\u00e4nsare"],"Write preformatted text\u2026":["Skriv f\u00f6rformaterad text\u2026"],"Add text that respects your spacing and tabs, and also allows styling.":["L\u00e4gg in text som respekterar dina mellanrum och tabbtecken, och samtidigt kan formateras."],"Preformatted":["F\u00f6rformaterad"],"Write list\u2026":["Skriv lista\u2026"],"numbered list":["numrerad lista"],"ordered list":["numrerad lista"],"bullet list":["punktlista"],"Create a bulleted or numbered list.":["Skapa en punktlista eller en numrerad lista."],"List":["Lista"],"A single column within a columns block.":["En enstaka kolumn inom ett block med kolumner."],"Column":["Kolumn"],"Add a block that displays content in multiple columns, then add whatever content blocks you\u2019d like.":["L\u00e4gg till ett block som visar inneh\u00e5ll i flera kolumner d\u00e4r du sedan l\u00e4gger till de inneh\u00e5llsblock du beh\u00f6ver."],"Write citation\u2026":["Skriv citat..."],"Write quote\u2026":["Skriv in citat..."],"block style\u0004Large":["Stor"],"blockquote":["blockcitat"],"Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" \u2014 Julio Cort\u00e1zar":["Framh\u00e4v ett citat visuellt. \u201dN\u00e4r vi citerar andra, citerar vi oss sj\u00e4lva.\u201d \u2014 Julio Cort\u00e1zar"],"Use the classic WordPress editor.":["Anv\u00e4nd den klassiska WordPress-redigeraren."],"block title\u0004Classic":["Klassisk"],"Classic":["Klassisk"],"Insert Media":["Infoga media"],"button to expand options\u0004More":["Mer"],"text":["text"],"Start with the building block of all narrative.":["Starta med grunden f\u00f6r varje ber\u00e4ttelse."],"Empty block; start writing or type forward slash to choose a block":["Tomt block. B\u00f6rja skriva eller tryck p\u00e5 snedstreck f\u00f6r att v\u00e4lja ett block"],"Paragraph block":["Textstyckesblock"],"Text Color":["Textf\u00e4rg"],"Color Settings":["F\u00e4rginst\u00e4llningar"],"Drop Cap":["Anfang"],"Text Settings":["Textinst\u00e4llningar"],"Toggle to show a large initial letter.":["Sl\u00e5 p\u00e5\/av visning av anfang (f\u00f6rstorad f\u00f6rsta bokstav)."],"Showing large initial letter.":["Visar anfang (f\u00f6rstorad f\u00f6rsta bokstav)."],"Your site doesn\u2019t include support for this block.":["Din webbplats inkluderar inte st\u00f6d f\u00f6r detta block."],"Unrecognized Block":["Ok\u00e4nd blocktyp"],"Your site doesn\u2019t include support for the \"%s\" block. You can leave this block intact or remove it entirely.":["Din webbplats inkluderar inte st\u00f6d f\u00f6r block \u201d%s\u201d. Du kan l\u00e4mna detta block intakt eller ta bort det helt."],"Keep as HTML":["Beh\u00e5ll som HTML"],"Your site doesn\u2019t include support for the \"%s\" block. You can leave this block intact, convert its content to a Custom HTML block, or remove it entirely.":["Din webbplats inkluderar inte st\u00f6d f\u00f6r blocket \u201d%s\u201d. Du kan l\u00e4mna detta block som det \u00e4r, konvertera inneh\u00e5llet till ett block med anpassad HTML eller ta bort det helt."],"Embed videos, images, tweets, audio, and other content from external sources.":["B\u00e4dda in videoklipp, bilder, tweets, ljud och annat inneh\u00e5ll fr\u00e5n externa k\u00e4llor."],"block title\u0004Embed":["B\u00e4dda in"],"Add a block that displays content pulled from other sites, like Twitter, Instagram or YouTube.":["L\u00e4gg till ett block med inneh\u00e5ll som h\u00e4mtas fr\u00e5n andra webbplatser, s\u00e5som Twitter, Instagram eller YouTube."],"%s URL":["%s URL"],"This embed may not preserve its aspect ratio when the browser is resized.":["Denna inb\u00e4ddning kanske inte beh\u00e5ller sitt bildf\u00f6rh\u00e5llande om storleken p\u00e5 webbl\u00e4sarens f\u00f6nster \u00e4ndras."],"This embed will preserve its aspect ratio when the browser is resized.":["Denna inb\u00e4ddning beh\u00e5ller sitt bildf\u00f6rh\u00e5llande n\u00e4r storleken p\u00e5 webbl\u00e4sarens f\u00f6nster \u00e4ndras."],"Write caption\u2026":["Skriv bildtext\u2026"],"Embedded content from %s can't be previewed in the editor.":["Det g\u00e5r inte att f\u00f6rhandsvisa inb\u00e4ddat inneh\u00e5ll fr\u00e5n %s i redigeraren."],"Embedded content from %s":["Inb\u00e4ddat inneh\u00e5ll fr\u00e5n %s"],"button label\u0004Convert to link":["Konvertera till l\u00e4nk"],"button label\u0004Try again":["F\u00f6rs\u00f6k igen"],"Sorry, this content could not be embedded.":["Detta inneh\u00e5ll gick inte att b\u00e4dda in."],"button label\u0004Embed":["B\u00e4dda in"],"Enter URL to embed here\u2026":["Ange URL att b\u00e4dda in h\u00e4r\u2026"],"Embedding\u2026":["B\u00e4ddar in\u2026"],"Resize for smaller devices":["\u00c4ndra storlek f\u00f6r mindre enheter"],"Media Settings":["Inst\u00e4llningar f\u00f6r media"],"Edit URL":["\u00c4ndra URL"],"Embed Amazon Kindle content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Amazon Kindle."],"ebook":["e-bok"],"Embed a WordPress.tv video.":["B\u00e4dda in en video fr\u00e5n WordPress.tv."],"Embed a VideoPress video.":["B\u00e4dda in en video fr\u00e5n VideoPress."],"Embed a Tumblr post.":["B\u00e4dda in ett inl\u00e4gg fr\u00e5n Tumblr."],"Embed a TED video.":["B\u00e4dda in en video fr\u00e5n TED."],"Embed Speaker Deck content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Speaker Deck."],"Embed SmugMug content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n SmugMug."],"Embed Slideshare content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Slideshare."],"Embed Scribd content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Scribd."],"Embed Screencast content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Screencast."],"Embed ReverbNation content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n ReverbNation."],"Embed a Reddit thread.":["B\u00e4dda in en tr\u00e5d fr\u00e5n Reddit."],"Embed Polldaddy content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Polldaddy."],"Embed Mixcloud content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Mixcloud."],"Embed Meetup.com content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Meetup.com."],"Embed Kickstarter content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Kickstarter."],"Embed Issuu content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Issuu."],"Embed Imgur content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Imgur."],"Embed Hulu content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Hulu."],"Embed a Dailymotion video.":["B\u00e4dda in en video fr\u00e5n Dailymotion."],"Embed Crowdsignal (formerly Polldaddy) content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Crowdsignal (f.d. Polldaddy)"],"Embed CollegeHumor content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n CollegeHumor."],"Embed Cloudup content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Cloudup."],"Embed an Animoto video.":["B\u00e4dda in en video fr\u00e5n Animoto."],"Embed a Vimeo video.":["B\u00e4dda in en video fr\u00e5n Vimeo."],"Embed Flickr content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Flickr."],"Embed Spotify content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n Spotify."],"Embed SoundCloud content.":["B\u00e4dda in inneh\u00e5ll fr\u00e5n SoundCloud."],"audio":["ljud"],"Embed a WordPress post.":["B\u00e4dda in ett inl\u00e4gg fr\u00e5n WordPress."],"blog":["blogg"],"post":["inl\u00e4gg"],"Embed an Instagram post.":["B\u00e4dda in ett inl\u00e4gg fr\u00e5n Instagram."],"image":["bild"],"Embed a Facebook post.":["B\u00e4dda in ett inl\u00e4gg fr\u00e5n Facebook."],"Embed a YouTube video.":["B\u00e4dda in en video fr\u00e5n YouTube."],"video":["video"],"music":["musik"],"Embed a tweet.":["B\u00e4dda in en status fr\u00e5n Twitter."],"File":["Fil"],"block style\u0004Default":["Standard"],"Link Settings":["L\u00e4nkinst\u00e4llningar"],"Start writing or type \/ to choose a block":["B\u00f6rja skriva eller tryck p\u00e5 \u201d\/\u201d f\u00f6r att v\u00e4lja ett block"],"Copied!":["kopierad!"],"Quote":["Citat"],"Replace image":["Ers\u00e4tt bild"],"Number of items":["Antal objekt"],"Reset":["\u00c5terst\u00e4ll"],"Edit":["Redigera"],"Page break":["Sidbrytning"],"editor button\u0004Left to right":["V\u00e4nster till h\u00f6ger"],"Paragraph":["Stycke"],"Image Size":["Bildstorlek"],"Background Color":["F\u00e4rg f\u00f6r bakgrund"],"Select Poster Image":["V\u00e4lj f\u00f6rhandsvisningsbild"],"Apply":["Verkst\u00e4ll"],"No posts found.":["Hittade inga inl\u00e4gg."],"Preview":["F\u00f6rhandsgranska"],"Poster Image":["F\u00f6rhandsvisningsbild"],"Autoplay":["Spela upp automatiskt"],"Metadata":["Metadata"],"Columns":["Kolumner"],"Gallery Settings":["Inst\u00e4llningar f\u00f6r galleri"],"Custom URL":["Anpassad URL"],"Attachment Page":["Sida f\u00f6r bilaga"],"Media File":["Mediafil"],"Grid View":["Rutn\u00e4tsvy"],"List View":["Listvy"],"Custom HTML":["Anpassad HTML"],"Video":["Video"],"Calendar":["Kalender"],"Loop":["Loop"],"Preload":["F\u00f6rhandsladda"],"Audio":["Ljud"],"Gallery":["Galleri"],"RSS":["RSS"],"Link Rel":["L\u00e4nk-rel"],"Link CSS Class":["CSS-klass f\u00f6r l\u00e4nk"],"URL":["URL"],"Link To":["L\u00e4nk till"],"Height":["H\u00f6jd"],"Width":["Bredd"],"Tag Cloud":["Etikettmoln"],"A cloud of your most used tags.":["Ett moln med dina mest anv\u00e4nda etiketter."],"Archives":["Arkiv"],"Show post counts":["Visa inl\u00e4ggsr\u00e4knare"],"Categories":["Kategorier"],"Default":["Standard"],"Save":["Spara"],"(Untitled)":["(Utan titel)"],"None":["Inget"],"Image":["Bild"],"Code":["Kod"],"Search":["S\u00f6k"]}},"comment":{"reference":"wp-includes\/js\/dist\/block-library.js"}} \ No newline at end of file diff --git a/wp-content/languages/sv_SE.mo b/wp-content/languages/sv_SE.mo new file mode 100644 index 000000000..e387ac3ed Binary files /dev/null and b/wp-content/languages/sv_SE.mo differ diff --git a/wp-content/languages/sv_SE.po b/wp-content/languages/sv_SE.po new file mode 100644 index 000000000..f9ec13336 --- /dev/null +++ b/wp-content/languages/sv_SE.po @@ -0,0 +1,16500 @@ +# Translation of WordPress - 5.2.x in Swedish +# This file is distributed under the same license as the WordPress - 5.2.x package. +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-03 09:55:04+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: sv_SE\n" +"Project-Id-Version: WordPress - 5.2.x\n" + +#: wp-includes/js/dist/nux.js:889 +msgid "Disable tips" +msgstr "Inaktivera tips" + +#: wp-includes/js/dist/nux.js:886 +msgid "Got it" +msgstr "Jag förstår" + +#: wp-includes/js/dist/nux.js:886 +msgid "See next tip" +msgstr "Se nästa tips" + +#: wp-includes/js/dist/nux.js:881 +msgid "Editor tips" +msgstr "Redigeringstips" + +#: wp-includes/js/dist/annotations.js:1032 +msgid "Annotation" +msgstr "Beskrivning" + +#: wp-includes/js/dist/keycodes.js:452 +msgid "Backtick" +msgstr "Backtick (`)" + +#: wp-includes/js/dist/keycodes.js:452 +msgid "Period" +msgstr "Period" + +#: wp-includes/js/dist/keycodes.js:452 +msgid "Comma" +msgstr "Komma" + +#: wp-includes/js/dist/api-fetch.js:695 +msgid "An unknown error occurred." +msgstr "Ett okänt fel uppstod." + +#: wp-includes/js/dist/api-fetch.js:683 +msgid "The response is not a valid JSON response." +msgstr "Svaret är inget giltigt JSON-svar." + +#: wp-includes/js/dist/format-library.js:1389 +msgid "Unlink" +msgstr "Ta bort länkning" + +#: wp-includes/js/dist/format-library.js:1360 +msgid "Link removed." +msgstr "Länk borttagen." + +#: wp-includes/js/dist/format-library.js:1168 +msgid "Link edited." +msgstr "Länk redigerad." + +#. translators: accessibility label for external links, where the argument is +#. the link text +#: wp-includes/js/dist/format-library.js:904 +msgid "%s (opens in a new tab)" +msgstr "%s (öppnas i en ny flik)" + +#: wp-includes/js/dist/format-library.js:652 +msgid "Inline Image" +msgstr "Bild inlagd i texten" + +#: wp-includes/js/dist/format-library.js:571 +msgid "media" +msgstr "media" + +#: wp-includes/js/dist/block-library.js:20038 +msgid "Taxonomy" +msgstr "Taxonomi" + +#: wp-includes/js/dist/block-library.js:20036 +msgid "Tag Cloud Settings" +msgstr "Inställningar för etikettmoln" + +#: wp-includes/js/dist/block-library.js:19998 +msgid "- Select -" +msgstr "- Välj -" + +#: wp-includes/js/dist/block-library.js:19893 +msgid "feed" +msgstr "webbflöde" + +#: wp-includes/js/dist/block-library.js:19893 +msgid "atom" +msgstr "atom" + +#: wp-includes/js/dist/block-library.js:19890 +msgid "Display entries from any RSS or Atom feed." +msgstr "Visa inlägg från valfritt RSS- eller Atom-webbflöde." + +#: wp-includes/js/dist/block-library.js:19842 +msgid "Max number of words in excerpt" +msgstr "Maximalt antal ord i utdrag" + +#: wp-includes/js/dist/block-library.js:19838 +msgid "Display excerpt" +msgstr "Visa utdrag" + +#: wp-includes/js/dist/block-library.js:19834 +msgid "Display date" +msgstr "Visa datum" + +#: wp-includes/js/dist/block-library.js:19830 +msgid "Display author" +msgstr "Visa författare" + +#: wp-includes/js/dist/block-library.js:19817 +msgid "RSS Settings" +msgstr "RSS-inställningar" + +#: wp-includes/js/dist/block-library.js:19789 +msgid "Edit RSS URL" +msgstr "Ändra RSS-URL" + +#: wp-includes/js/dist/block-library.js:19784 +msgid "Use URL" +msgstr "Använd URL" + +#: wp-includes/js/dist/block-library.js:19773 +msgid "Enter URL here…" +msgstr "Ange URL här..." + +#: wp-includes/js/dist/block-library.js:19640 +msgid "find" +msgstr "hitta" + +#: wp-includes/js/dist/block-library.js:19637 +msgid "Help visitors find your content." +msgstr "Hjälp besökarna att hitta ditt innehåll" + +#: wp-includes/js/dist/block-library.js:19610 +msgid "Add button text…" +msgstr "Lägg till knapptext..." + +#: wp-includes/js/dist/block-library.js:19609 +msgid "Button text" +msgstr "Knapptext" + +#: wp-includes/js/dist/block-library.js:19599 +msgid "Optional placeholder…" +msgstr "Platsmarkör (valfritt)..." + +#: wp-includes/js/dist/block-library.js:19595 +msgid "Optional placeholder text" +msgstr "Text för platsmarkör (valfritt)" + +#: wp-includes/js/dist/block-library.js:19584 +msgid "Add label…" +msgstr "Lägg till etikett..." + +#: wp-includes/js/dist/block-library.js:19583 +msgid "Label text" +msgstr "Text på etiketten" + +#: wp-includes/js/dist/block-library.js:19444 +msgid "Solid Color" +msgstr "Solid färg" + +#: wp-includes/js/dist/block-library.js:19422 +msgid "Give special visual emphasis to a quote from your text." +msgstr "Ge särskild visuell betoning på ett citat från din text." + +#: wp-includes/js/dist/block-library.js:19421 +msgid "Pullquote" +msgstr "Markerat citat" + +#: wp-includes/js/dist/block-library.js:19345 +msgid "Main Color" +msgstr "Huvudfärg" + +#: wp-includes/js/dist/block-library.js:19136 +msgid "pagination" +msgstr "sidindelning" + +#: wp-includes/js/dist/block-library.js:19136 +msgid "next page" +msgstr "nästa sida" + +#: wp-includes/js/dist/block-library.js:19128 +msgid "Separate your content into a multi-page experience." +msgstr "Dela upp ditt innehåll till en upplevelse som sträcker sig över flera sidor." + +#: wp-includes/js/dist/block-library.js:19127 +msgid "Page Break" +msgstr "Sidbrytning" + +#: wp-includes/js/dist/block-library.js:19008 +msgid "Content before this block will be shown in the excerpt on your archives page." +msgstr "Innehåll före detta block kommer att visas i utdraget på dina arkivsidor." + +#: wp-includes/js/dist/block-library.js:19007 +msgctxt "block name" +msgid "More" +msgstr "Mer" + +#: wp-includes/js/dist/block-library.js:18962 +msgid "Hide the excerpt on the full content page" +msgstr "Dölj utdraget på sidan med hela innehållet" + +#: wp-includes/js/dist/block-library.js:18942 +msgid "The excerpt is visible." +msgstr "Udraget är synligt." + +#: wp-includes/js/dist/block-library.js:18942 +msgid "The excerpt is hidden." +msgstr "Utdraget är dolt." + +#: wp-includes/js/dist/block-library.js:18912 +msgid "Read more" +msgstr "Läs mer" + +#: wp-includes/js/dist/block-library.js:18792 +msgid "Display a list of all categories." +msgstr "Visa en lista på alla kategorier." + +#: wp-includes/js/dist/block-library.js:18732 +msgid "Show Hierarchy" +msgstr "Visa hierarki" + +#: wp-includes/js/dist/block-library.js:18726 +msgid "Categories Settings" +msgstr "Kategoriinställningar" + +#: wp-includes/js/dist/block-library.js:18479 +msgid "archive" +msgstr "arkiv" + +#: wp-includes/js/dist/block-library.js:18479 +msgid "posts" +msgstr "inlägg" + +#: wp-includes/js/dist/block-library.js:18476 +msgid "A calendar of your site’s posts." +msgstr "En kalender med inläggen på din webbplats." + +#: wp-includes/js/dist/block-library.js:18306 +msgid "recent posts" +msgstr "senaste inlägget" + +#: wp-includes/js/dist/block-library.js:18265 +msgid "Display a list of your most recent posts." +msgstr "Visa en lista över dina senaste inlägg." + +#: wp-includes/js/dist/block-library.js:18163 +#: wp-includes/js/dist/block-library.js:18264 +msgid "Latest Posts" +msgstr "Senaste inläggen" + +#: wp-includes/js/dist/block-library.js:18143 +msgid "Display post date" +msgstr "Visa inläggsdatum" + +#: wp-includes/js/dist/block-library.js:18114 +msgid "Latest Posts Settings" +msgstr "Inställningar för senaste inlägg" + +#: wp-includes/js/dist/block-library.js:17931 +msgid "recent comments" +msgstr "senaste kommentarerna" + +#: wp-includes/js/dist/block-library.js:17920 +msgid "Display a list of your most recent comments." +msgstr "Visa en lista med de senaste kommentarerna." + +#: wp-includes/js/dist/block-library.js:17919 +msgid "Latest Comments" +msgstr "Senaste kommentarerna" + +#: wp-includes/js/dist/block-library.js:17884 +msgid "Number of Comments" +msgstr "Antal kommentarer" + +#: wp-includes/js/dist/block-library.js:17880 +msgid "Display Excerpt" +msgstr "Visa utdrag" + +#: wp-includes/js/dist/block-library.js:17876 +msgid "Display Date" +msgstr "Visa datum" + +#: wp-includes/js/dist/block-library.js:17872 +msgid "Display Avatar" +msgstr "Visa profilbild" + +#: wp-includes/js/dist/block-library.js:17870 +msgid "Latest Comments Settings" +msgstr "Inställningar för senaste kommentarerna" + +#: wp-includes/js/dist/block-library.js:17635 +msgctxt "block style" +msgid "Squared" +msgstr "Kvadratisk" + +#: wp-includes/js/dist/block-library.js:17632 +msgid "Outline" +msgstr "Markera ytterkanter" + +#: wp-includes/js/dist/block-library.js:17620 +msgid "link" +msgstr "länk" + +#: wp-includes/js/dist/block-library.js:17609 +msgid "Prompt visitors to take action with a button-style link." +msgstr "Uppmana besökarna att göra något med hjälp av en länk i knappformat." + +#: wp-includes/js/dist/block-library.js:17608 +msgid "Button" +msgstr "Knapp" + +#: wp-includes/js/dist/block-library.js:17308 +msgid "Display a monthly archive of your posts." +msgstr "Visa ett månadsarkiv på dina inlägg." + +#: wp-includes/js/dist/block-library.js:17269 +#: wp-includes/js/dist/block-library.js:18736 +msgid "Show Post Counts" +msgstr "Visa antal inlägg" + +#: wp-includes/js/dist/block-library.js:17261 +#: wp-includes/js/dist/block-library.js:18728 +msgid "Display as Dropdown" +msgstr "Visa som rullgardinsmeny" + +#: wp-includes/js/dist/block-library.js:17259 +msgid "Archives Settings" +msgstr "Arkivinställningar" + +#: wp-includes/js/dist/block-library.js:17178 +msgid "embed" +msgstr "bädda in" + +#: wp-includes/js/dist/block-library.js:17170 +msgid "Add custom HTML code and preview it as you edit." +msgstr "Lägg till anpassad HTML-kod och förhandsgranska det när du redigerar." + +#: wp-includes/js/dist/block-library.js:17132 +msgid "HTML" +msgstr "HTML" + +#: wp-includes/js/dist/block-library.js:17131 +msgid "Write HTML…" +msgstr "Skriv HTML…" + +#: wp-includes/js/dist/block-library.js:16933 +msgid "Display code snippets that respect your spacing and tabs." +msgstr "Visa programkodsutdrag som respekterar dina mellanslag och tabbtecken." + +#: wp-includes/js/dist/block-library.js:16909 +msgid "Write code…" +msgstr "Skriv kod…" + +#: wp-includes/js/dist/block-library.js:16789 +msgid "Stripes" +msgstr "Ränder" + +#: wp-includes/js/dist/block-library.js:16760 +msgid "Insert a table — perfect for sharing charts and data." +msgstr "Lägg en tabell – utmärkt för att publicera tabeller och data." + +#: wp-includes/js/dist/block-library.js:16759 +msgid "Table" +msgstr "Tabell" + +#: wp-includes/js/dist/block-library.js:16641 +msgid "Fixed width table cells" +msgstr "Tabellceller med fast bredd" + +#: wp-includes/js/dist/block-library.js:16638 +msgid "Table Settings" +msgstr "Tabellinställningar" + +#: wp-includes/js/dist/block-library.js:16635 +msgid "Edit table" +msgstr "Redigera tabell" + +#: wp-includes/js/dist/block-library.js:16626 +msgid "Create" +msgstr "Skapa" + +#: wp-includes/js/dist/block-library.js:16619 +msgid "Row Count" +msgstr "Radantal" + +#: wp-includes/js/dist/block-library.js:16613 +msgid "Column Count" +msgstr "Kolumnantal" + +#: wp-includes/js/dist/block-library.js:16522 +msgid "Delete Column" +msgstr "Ta bort kolumn" + +#: wp-includes/js/dist/block-library.js:16517 +msgid "Add Column After" +msgstr "Lägg till kolumn efter" + +#: wp-includes/js/dist/block-library.js:16512 +msgid "Add Column Before" +msgstr "Lägg till kolumn före" + +#: wp-includes/js/dist/block-library.js:16507 +msgid "Delete Row" +msgstr "Ta bort rad" + +#: wp-includes/js/dist/block-library.js:16502 +msgid "Add Row After" +msgstr "Lägg till rad efter" + +#: wp-includes/js/dist/block-library.js:16497 +msgid "Add Row Before" +msgstr "Lägg till rad före" + +#: wp-includes/js/dist/block-library.js:15797 +msgid "movie" +msgstr "film" + +#: wp-includes/js/dist/block-library.js:15795 +msgid "Embed a video from your media library or upload a new one." +msgstr "Bädda in ett videoklipp från ditt mediabibliotek eller ladda upp ett nytt." + +#: wp-includes/js/dist/block-library.js:15747 +msgid "Remove Poster Image" +msgstr "Ta bort posterbild" + +#: wp-includes/js/dist/block-library.js:15707 +msgid "Playback Controls" +msgstr "Uppspelningsreglage" + +#: wp-includes/js/dist/block-library.js:15703 +msgid "Muted" +msgstr "Tystad" + +#: wp-includes/js/dist/block-library.js:15693 +msgid "Video Settings" +msgstr "Videoinställningar" + +#: wp-includes/js/dist/block-library.js:15689 +msgid "Edit video" +msgstr "Redigera video" + +#: wp-includes/js/dist/block-library.js:15114 +msgid "Add an image or video with a text overlay — great for headers." +msgstr "Lägg till en bild eller videoklipp med ett textöverlägg – bra för rubriker." + +#: wp-includes/js/dist/block-library.js:14941 +msgid "Drag an image or a video, upload a new one or select a file from your library." +msgstr "Dra en bild eller ett videoklipp, ladda upp en ny eller välj en fil från ditt bibliotek." + +#: wp-includes/js/dist/block-library.js:14934 +#: wp-includes/js/dist/block-library.js:15113 +msgid "Cover" +msgstr "Omslag" + +#: wp-includes/js/dist/block-library.js:14920 +msgid "Background Opacity" +msgstr "Bakgrundens opacitet" + +#: wp-includes/js/dist/block-library.js:14917 +msgid "Overlay Color" +msgstr "Överläggsfärg" + +#: wp-includes/js/dist/block-library.js:14912 +msgid "Overlay" +msgstr "Överlägg" + +#: wp-includes/js/dist/block-library.js:14903 +msgid "Focal Point Picker" +msgstr "Väljare av brännpunkt" + +#: wp-includes/js/dist/block-library.js:14899 +msgid "Fixed Background" +msgstr "Fixerad bakgrund" + +#: wp-includes/js/dist/block-library.js:14897 +msgid "Cover Settings" +msgstr "Omslagsinställningar" + +#: wp-includes/js/dist/block-library.js:14759 +#: wp-includes/js/dist/block-library.js:15295 +msgid "Write title…" +msgstr "Skriv rubrik…" + +#: wp-includes/js/dist/block-library.js:14522 +msgid "Embed a simple audio player." +msgstr "Bädda in en enkel ljudspelare." + +#: wp-includes/js/dist/block-library.js:14468 +#: wp-includes/js/dist/block-library.js:15720 +msgid "Auto" +msgstr "Auto" + +#: wp-includes/js/dist/block-library.js:14448 +msgid "Audio Settings" +msgstr "Ljudinställningar" + +#: wp-includes/js/dist/block-library.js:14444 +msgid "Edit audio" +msgstr "Redigera ljud" + +#: wp-includes/js/dist/block-library.js:14041 +msgid "subtitle" +msgstr "underrubrik" + +#: wp-includes/js/dist/block-library.js:14041 +msgid "title" +msgstr "rubrik" + +#: wp-includes/js/dist/block-library.js:14030 +msgid "Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content." +msgstr "Introducera nya sektioner och organisera innehåll för att hjälpa besökare (och sökmotorer) att förstå strukturen på ditt innehåll." + +#: wp-includes/js/dist/block-library.js:14029 +msgid "Heading" +msgstr "Rubrik" + +#: wp-includes/js/dist/block-library.js:13964 +msgid "Write heading…" +msgstr "Skriv rubrik…" + +#: wp-includes/js/dist/block-library.js:13926 +msgid "Text Alignment" +msgstr "Textjustering" + +#: wp-includes/js/dist/block-library.js:13917 +msgid "Level" +msgstr "Nivå" + +#: wp-includes/js/dist/block-library.js:13916 +msgid "Heading Settings" +msgstr "Rubrikinställningar" + +#. translators: %s: heading level e.g: "1", "2", "3" +#: wp-includes/js/dist/block-library.js:13847 +msgid "Heading %d" +msgstr "Rubriknivå %d" + +#: wp-includes/js/dist/block-library.js:13425 +msgid "photos" +msgstr "foton" + +#: wp-includes/js/dist/block-library.js:13425 +msgid "images" +msgstr "bilder" + +#: wp-includes/js/dist/block-library.js:13422 +msgid "Display multiple images in a rich gallery." +msgstr "Visa flera bilder i ett fullödigt galleri." + +#: wp-includes/js/dist/block-library.js:13323 +msgid "Upload an image" +msgstr "Ladda upp en bild" + +#. translators: %1$d is the order number of the image, %2$d is the total number +#. of images. +#: wp-includes/js/dist/block-library.js:13297 +msgid "image %1$d of %2$d in gallery" +msgstr "bild %1$d av %2$d in galleriet" + +#: wp-includes/js/dist/block-library.js:13284 +msgid "Crop Images" +msgstr "Beskär bilder" + +#: wp-includes/js/dist/block-library.js:13263 +msgid "Drag images, upload new ones or select files from your library." +msgstr "Dra bilder, ladda upp nya eller välj filer från ditt bibliotek." + +#: wp-includes/js/dist/block-library.js:13248 +msgid "Edit gallery" +msgstr "Redigera galleriet" + +#: wp-includes/js/dist/block-library.js:13163 +msgid "Thumbnails are not cropped." +msgstr "Miniatyrerna är inte beskurna." + +#: wp-includes/js/dist/block-library.js:13163 +msgid "Thumbnails are cropped to align." +msgstr "Miniatyrbilder kantklipps så att de passar in." + +#: wp-includes/js/dist/block-library.js:12950 +msgid "Remove Image" +msgstr "Ta bort bild" + +#: wp-includes/js/dist/block-library.js:12700 +msgid "Create content, and save it for you and other contributors to reuse across your site. Update the block, and the changes apply everywhere it’s used." +msgstr "Skapa innehåll och spara det så att du och andra upphovsmän kan återanvända det överallt på er webbplats. Om blocket uppdateras kommer ändringarna att slå igenom överallt där blocket används." + +#: wp-includes/js/dist/block-library.js:12698 +msgid "Reusable Block" +msgstr "Återanvändbart block" + +#: wp-includes/js/dist/block-library.js:12612 +msgid "Block has been deleted or is unavailable." +msgstr "Block har tagits bort eller är inte tillgängligt." + +#. translators: %s: title/name of the reusable block +#: wp-includes/js/dist/block-library.js:12445 +msgid "Reusable Block: %s" +msgstr "Återanvändbart block: %s" + +#: wp-includes/js/dist/block-library.js:12409 +msgid "Name:" +msgstr "Namn:" + +#: wp-includes/js/dist/block-library.js:12092 +msgctxt "button label" +msgid "Download" +msgstr "Ladda ner" + +#: wp-includes/js/dist/block-library.js:12057 +msgid "pdf" +msgstr "pdf" + +#: wp-includes/js/dist/block-library.js:12057 +msgid "document" +msgstr "dokument" + +#: wp-includes/js/dist/block-library.js:12054 +msgid "Add a link to a downloadable file." +msgstr "Lägg till en länk till en nedladdningsbar fil." + +#: wp-includes/js/dist/block-library.js:12010 +msgid "Copy URL" +msgstr "Kopiera URL" + +#: wp-includes/js/dist/block-library.js:11996 +#: wp-includes/js/dist/block-library.js:17479 +msgid "Add text…" +msgstr "Lägg till text…" + +#: wp-includes/js/dist/block-library.js:11978 +msgid "Write file name…" +msgstr "Skriv filnamn…" + +#: wp-includes/js/dist/block-library.js:11964 +msgid "Edit file" +msgstr "Redigera fil" + +#: wp-includes/js/dist/block-library.js:11933 +msgid "Drag a file, upload a new one or select a file from your library." +msgstr "Dra en fil, ladda upp en ny eller välj en fil från ditt bibliotek." + +#: wp-includes/js/dist/block-library.js:11747 +msgid "Show Download Button" +msgstr "Visa nedladdningsknapp" + +#: wp-includes/js/dist/block-library.js:11745 +msgid "Download Button Settings" +msgstr "Inställningar för nedladdningsknapp" + +#: wp-includes/js/dist/block-library.js:11734 +msgid "Text Link Settings" +msgstr "Inställningar för länktext" + +#: wp-includes/js/dist/block-library.js:11594 +msgid "Display a legacy widget." +msgstr "Visar en widget av tidigare typ." + +#: wp-includes/js/dist/block-library.js:11593 +msgid "Legacy Widget (Experimental)" +msgstr "Äldre widget (experimentell)" + +#: wp-includes/js/dist/block-library.js:11509 +msgid "Change widget" +msgstr "Ändra widget" + +#: wp-includes/js/dist/block-library.js:11495 +msgid "Legacy Widget" +msgstr "Äldre widget" + +#: wp-includes/js/dist/block-library.js:11470 +msgid "Select a legacy widget to display:" +msgstr "Välj en widget av äldre typ du vill visa:" + +#: wp-includes/js/dist/block-library.js:11467 +msgid "There are no widgets available." +msgstr "Inga widgetar tillgängliga." + +#: wp-includes/js/dist/block-library.js:11465 +msgid "You don't have permissions to use widgets on this site." +msgstr "Du har inte behörighet att använda widgetar på denna webbplats." + +#: wp-includes/js/dist/block-library.js:11315 +msgid "Not a valid widget." +msgstr "Ogiltig widget." + +#: wp-includes/js/dist/block-library.js:10707 +#: wp-includes/js/dist/format-library.js:571 +msgid "photo" +msgstr "foto" + +#: wp-includes/js/dist/block-library.js:10703 +msgid "Insert an image to make a visual statement." +msgstr "Lägg in en bild för att berätta visuellt." + +#: wp-includes/js/dist/block-library.js:10421 +msgid "This image has an empty alt attribute" +msgstr "Denna bild har ett alt-attribut som är tomt." + +#: wp-includes/js/dist/block-library.js:10419 +msgid "This image has an empty alt attribute; its file name is %s" +msgstr "Denna bild har ett alt-attribut som är tomt. Dess filnamn är %s" + +#: wp-includes/js/dist/block-library.js:10384 +#: wp-includes/js/dist/block-library.js:11741 +#: wp-includes/js/dist/format-library.js:1224 +msgid "Open in New Tab" +msgstr "Öppna i ny flik" + +#: wp-includes/js/dist/block-library.js:10378 +msgid "Link URL" +msgstr "Länk-URL" + +#: wp-includes/js/dist/block-library.js:10336 +msgid "Image Dimensions" +msgstr "Bildstorlek" + +#: wp-includes/js/dist/block-library.js:10321 +msgid "Image Settings" +msgstr "Bildinställningar" + +#: wp-includes/js/dist/block-library.js:10263 +#: wp-includes/js/dist/block-library.js:10276 +msgid "Edit image" +msgstr "Redigera bild" + +#: wp-includes/js/dist/block-library.js:9391 +msgid "Set media and words side-by-side for a richer layout." +msgstr "Placera media och ord vid sidan av varandra för rikare layout." + +#: wp-includes/js/dist/block-library.js:9390 +msgid "Media & Text" +msgstr "Media och text" + +#: wp-includes/js/dist/block-library.js:9282 +#: wp-includes/js/dist/block-library.js:10326 +msgid "Alternative text describes your image to people who can’t see it. Add a short description with its key details." +msgstr "Den alternativa texten beskriver din bild för dem som inte kan se den. Lägg till en kort beskrivning av dess viktigaste detaljer." + +#: wp-includes/js/dist/block-library.js:9279 +#: wp-includes/js/dist/block-library.js:10323 +msgid "Alt Text (Alternative Text)" +msgstr "Alt-text (alternativ text)" + +#: wp-includes/js/dist/block-library.js:9271 +msgid "Stack on mobile" +msgstr "Stapla på mobil" + +#: wp-includes/js/dist/block-library.js:9269 +msgid "Media & Text Settings" +msgstr "Media och textinställningar" + +#: wp-includes/js/dist/block-library.js:9253 +msgid "Show media on right" +msgstr "Visa media till höger" + +#: wp-includes/js/dist/block-library.js:9244 +msgid "Show media on left" +msgstr "Visa media till vänster" + +#: wp-includes/js/dist/block-library.js:9113 +msgctxt "content placeholder" +msgid "Content…" +msgstr "Innehåll..." + +#: wp-includes/js/dist/block-library.js:9010 +msgid "Media area" +msgstr "Mediaområde" + +#: wp-includes/js/dist/block-library.js:8965 +#: wp-includes/js/dist/block-library.js:14891 +msgid "Edit media" +msgstr "Redigera media" + +#: wp-includes/js/dist/block-library.js:8810 +msgid "Write…" +msgstr "Skriv…" + +#: wp-includes/js/dist/block-library.js:8757 +msgid "poetry" +msgstr "poesi" + +#: wp-includes/js/dist/block-library.js:8746 +msgid "Insert poetry. Use special spacing formats. Or quote song lyrics." +msgstr "Lägg in poesi. Använd specialformat för radavstånd. Eller citera några rader ur en sångtext." + +#: wp-includes/js/dist/block-library.js:8745 +msgid "Verse" +msgstr "Vers" + +#: wp-includes/js/dist/block-library.js:8691 +msgid "New Column" +msgstr "Ny kolumn" + +#: wp-includes/js/dist/block-library.js:8590 +msgid "This block is deprecated. Please use the Columns block instead." +msgstr "Detta block är taget ur bruk. Använd blocket ”Kolumner” i stället." + +#: wp-includes/js/dist/block-library.js:8589 +msgid "Text Columns (deprecated)" +msgstr "Textkolumner (taget ur bruk)" + +#: wp-includes/js/dist/block-library.js:8517 +msgid "Template block used as a container." +msgstr "Mallblock som används som container." + +#: wp-includes/js/dist/block-library.js:8515 +msgid "Reusable Template" +msgstr "Återanvändbar mall" + +#: wp-includes/js/dist/block-library.js:8471 +msgid "Write subheading…" +msgstr "Skriv underrubrik ..." + +#: wp-includes/js/dist/block-library.js:8409 +msgid "This block is deprecated. Please use the Paragraph block instead." +msgstr "Detta block är taget ur bruk. Använd blocket ”Stycke” i stället." + +#: wp-includes/js/dist/block-library.js:8408 +msgid "Subheading (deprecated)" +msgstr "Underrubrik (taget ur bruk)" + +#: wp-includes/js/dist/block-library.js:8336 +msgid "Height in pixels" +msgstr "Höjd i pixlar" + +#: wp-includes/js/dist/block-library.js:8334 +msgid "Spacer Settings" +msgstr "Inställningar för distanselement" + +#: wp-includes/js/dist/block-library.js:8276 +msgid "Add white space between blocks and customize its height." +msgstr "Lägg in ett tomt utrymme mellan block och anpassa dess höjd." + +#: wp-includes/js/dist/block-library.js:8275 +msgid "Spacer" +msgstr "Distanselement" + +#: wp-includes/js/dist/block-library.js:8221 +msgid "Write shortcode here…" +msgstr "Skriv kortkod här…" + +#: wp-includes/js/dist/block-library.js:8164 +msgid "Insert additional custom elements with a WordPress shortcode." +msgstr "Lägg in andra anpassade element med hjälp av en WordPress-kortkod." + +#: wp-includes/js/dist/block-library.js:8163 +#: wp-includes/js/dist/block-library.js:8217 +msgid "Shortcode" +msgstr "Kortkod" + +#: wp-includes/js/dist/block-library.js:8101 +msgid "Dots" +msgstr "Punkter" + +#: wp-includes/js/dist/block-library.js:8098 +msgid "Wide Line" +msgstr "Bred linje" + +#: wp-includes/js/dist/block-library.js:8091 +msgid "divider" +msgstr "avdelare" + +#: wp-includes/js/dist/block-library.js:8091 +msgid "horizontal-line" +msgstr "horisontell-linje" + +#: wp-includes/js/dist/block-library.js:8080 +msgid "Create a break between ideas or sections with a horizontal separator." +msgstr "Skapa en avgränsning mellan olika idéer eller sektioner med hjälp av en horisontell avgränsare." + +#: wp-includes/js/dist/block-library.js:8079 +msgid "Separator" +msgstr "Avgränsare" + +#: wp-includes/js/dist/block-library.js:8032 +msgid "Write preformatted text…" +msgstr "Skriv förformaterad text…" + +#: wp-includes/js/dist/block-library.js:7946 +msgid "Add text that respects your spacing and tabs, and also allows styling." +msgstr "Lägg in text som respekterar dina mellanrum och tabbtecken, och samtidigt kan formateras." + +#: wp-includes/js/dist/block-library.js:7945 +msgid "Preformatted" +msgstr "Förformaterad" + +#: wp-includes/js/dist/block-library.js:7869 +msgid "Write list…" +msgstr "Skriv lista…" + +#: wp-includes/js/dist/block-library.js:7695 +msgid "numbered list" +msgstr "numrerad lista" + +#: wp-includes/js/dist/block-library.js:7695 +msgid "ordered list" +msgstr "numrerad lista" + +#: wp-includes/js/dist/block-library.js:7695 +msgid "bullet list" +msgstr "punktlista" + +#: wp-includes/js/dist/block-library.js:7687 +msgid "Create a bulleted or numbered list." +msgstr "Skapa en punktlista eller en numrerad lista." + +#: wp-includes/js/dist/block-library.js:7686 +msgid "List" +msgstr "Lista" + +#: wp-includes/js/dist/block-library.js:7135 +msgid "A single column within a columns block." +msgstr "En enstaka kolumn inom ett block med kolumner." + +#: wp-includes/js/dist/block-library.js:7124 +msgid "Column" +msgstr "Kolumn" + +#: wp-includes/js/dist/block-library.js:7003 +msgid "Add a block that displays content in multiple columns, then add whatever content blocks you’d like." +msgstr "Lägg till ett block som visar innehåll i flera kolumner där du sedan lägger till de innehållsblock du behöver." + +#. translators: placeholder text used for the citation +#: wp-includes/js/dist/block-library.js:6764 +#: wp-includes/js/dist/block-library.js:19333 +msgid "Write citation…" +msgstr "Skriv citat..." + +#. translators: placeholder text used for the quote +#: wp-includes/js/dist/block-library.js:6754 +#: wp-includes/js/dist/block-library.js:19328 +msgid "Write quote…" +msgstr "Skriv in citat..." + +#: wp-includes/js/dist/block-library.js:6541 +msgctxt "block style" +msgid "Large" +msgstr "Stor" + +#: wp-includes/js/dist/block-library.js:6533 +msgid "blockquote" +msgstr "blockcitat" + +#: wp-includes/js/dist/block-library.js:6522 +msgid "Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" — Julio Cortázar" +msgstr "Framhäv ett citat visuellt. ”När vi citerar andra, citerar vi oss själva.” — Julio Cortázar" + +#: wp-includes/js/dist/block-library.js:6298 +msgid "Use the classic WordPress editor." +msgstr "Använd den klassiska WordPress-redigeraren." + +#: wp-includes/js/dist/block-library.js:6297 +msgctxt "block title" +msgid "Classic" +msgstr "Klassisk" + +#: wp-includes/js/dist/block-library.js:6263 +msgid "Classic" +msgstr "Klassisk" + +#: wp-includes/js/dist/block-library.js:6210 +msgid "Insert Media" +msgstr "Infoga media" + +#: wp-includes/js/dist/block-library.js:6194 +msgctxt "button to expand options" +msgid "More" +msgstr "Mer" + +#: wp-includes/js/dist/block-library.js:5834 +msgid "text" +msgstr "text" + +#: wp-includes/js/dist/block-library.js:5826 +msgid "Start with the building block of all narrative." +msgstr "Starta med grunden för varje berättelse." + +#: wp-includes/js/dist/block-library.js:5733 +msgid "Empty block; start writing or type forward slash to choose a block" +msgstr "Tomt block. Börja skriva eller tryck på snedstreck för att välja ett block" + +#: wp-includes/js/dist/block-library.js:5733 +msgid "Paragraph block" +msgstr "Textstyckesblock" + +#: wp-includes/js/dist/block-library.js:5697 +#: wp-includes/js/dist/block-library.js:17504 +#: wp-includes/js/dist/block-library.js:19349 +msgid "Text Color" +msgstr "Textfärg" + +#: wp-includes/js/dist/block-library.js:5688 +#: wp-includes/js/dist/block-library.js:9285 +#: wp-includes/js/dist/block-library.js:16645 +#: wp-includes/js/dist/block-library.js:17496 +#: wp-includes/js/dist/block-library.js:19341 +msgid "Color Settings" +msgstr "Färginställningar" + +#: wp-includes/js/dist/block-library.js:5683 +msgid "Drop Cap" +msgstr "Anfang" + +#: wp-includes/js/dist/block-library.js:5676 +msgid "Text Settings" +msgstr "Textinställningar" + +#: wp-includes/js/dist/block-library.js:5575 +msgid "Toggle to show a large initial letter." +msgstr "Slå på/av visning av anfang (förstorad första bokstav)." + +#: wp-includes/js/dist/block-library.js:5575 +msgid "Showing large initial letter." +msgstr "Visar anfang (förstorad första bokstav)." + +#: wp-includes/js/dist/block-library.js:5395 +msgid "Your site doesn’t include support for this block." +msgstr "Din webbplats inkluderar inte stöd för detta block." + +#: wp-includes/js/dist/block-library.js:5394 +msgid "Unrecognized Block" +msgstr "Okänd blocktyp" + +#: wp-includes/js/dist/block-library.js:5367 +msgid "Your site doesn’t include support for the \"%s\" block. You can leave this block intact or remove it entirely." +msgstr "Din webbplats inkluderar inte stöd för block ”%s”. Du kan lämna detta block intakt eller ta bort det helt." + +#: wp-includes/js/dist/block-library.js:5365 +msgid "Keep as HTML" +msgstr "Behåll som HTML" + +#: wp-includes/js/dist/block-library.js:5359 +msgid "Your site doesn’t include support for the \"%s\" block. You can leave this block intact, convert its content to a Custom HTML block, or remove it entirely." +msgstr "Din webbplats inkluderar inte stöd för blocket ”%s”. Du kan lämna detta block som det är, konvertera innehållet till ett block med anpassad HTML eller ta bort det helt." + +#: wp-includes/js/dist/block-library.js:4496 +msgid "Embed videos, images, tweets, audio, and other content from external sources." +msgstr "Bädda in videoklipp, bilder, tweets, ljud och annat innehåll från externa källor." + +#: wp-includes/js/dist/block-library.js:4495 +msgctxt "block title" +msgid "Embed" +msgstr "Bädda in" + +#: wp-includes/js/dist/block-library.js:4366 +msgid "Add a block that displays content pulled from other sites, like Twitter, Instagram or YouTube." +msgstr "Lägg till ett block med innehåll som hämtas från andra webbplatser, såsom Twitter, Instagram eller YouTube." + +#: wp-includes/js/dist/block-library.js:4255 +msgid "%s URL" +msgstr "%s URL" + +#: wp-includes/js/dist/block-library.js:4213 +msgid "This embed may not preserve its aspect ratio when the browser is resized." +msgstr "Denna inbäddning kanske inte behåller sitt bildförhållande om storleken på webbläsarens fönster ändras." + +#: wp-includes/js/dist/block-library.js:4213 +msgid "This embed will preserve its aspect ratio when the browser is resized." +msgstr "Denna inbäddning behåller sitt bildförhållande när storleken på webbläsarens fönster ändras." + +#: wp-includes/js/dist/block-library.js:4009 +#: wp-includes/js/dist/block-library.js:10518 +#: wp-includes/js/dist/block-library.js:12955 +#: wp-includes/js/dist/block-library.js:14483 +#: wp-includes/js/dist/block-library.js:15756 +msgid "Write caption…" +msgstr "Skriv bildtext…" + +#. translators: %s: host providing embed content e.g: www.youtube.com +#: wp-includes/js/dist/block-library.js:4007 +msgid "Embedded content from %s can't be previewed in the editor." +msgstr "Det går inte att förhandsvisa inbäddat innehåll från %s i redigeraren." + +#: wp-includes/js/dist/block-library.js:3962 +msgid "Embedded content from %s" +msgstr "Inbäddat innehåll från %s" + +#: wp-includes/js/dist/block-library.js:3778 +msgctxt "button label" +msgid "Convert to link" +msgstr "Konvertera till länk" + +#: wp-includes/js/dist/block-library.js:3775 +msgctxt "button label" +msgid "Try again" +msgstr "Försök igen" + +#: wp-includes/js/dist/block-library.js:3772 +msgid "Sorry, this content could not be embedded." +msgstr "Detta innehåll gick inte att bädda in." + +#: wp-includes/js/dist/block-library.js:3770 +msgctxt "button label" +msgid "Embed" +msgstr "Bädda in" + +#: wp-includes/js/dist/block-library.js:3765 +msgid "Enter URL to embed here…" +msgstr "Ange URL att bädda in här…" + +#: wp-includes/js/dist/block-library.js:3727 +msgid "Embedding…" +msgstr "Bäddar in…" + +#: wp-includes/js/dist/block-library.js:3706 +msgid "Resize for smaller devices" +msgstr "Ändra storlek för mindre enheter" + +#: wp-includes/js/dist/block-library.js:3703 +msgid "Media Settings" +msgstr "Inställningar för media" + +#: wp-includes/js/dist/block-library.js:3699 +msgid "Edit URL" +msgstr "Ändra URL" + +#: wp-includes/js/dist/block-library.js:3596 +msgid "Embed Amazon Kindle content." +msgstr "Bädda in innehåll från Amazon Kindle." + +#: wp-includes/js/dist/block-library.js:3594 +msgid "ebook" +msgstr "e-bok" + +#: wp-includes/js/dist/block-library.js:3586 +msgid "Embed a WordPress.tv video." +msgstr "Bädda in en video från WordPress.tv." + +#: wp-includes/js/dist/block-library.js:3578 +msgid "Embed a VideoPress video." +msgstr "Bädda in en video från VideoPress." + +#: wp-includes/js/dist/block-library.js:3569 +msgid "Embed a Tumblr post." +msgstr "Bädda in ett inlägg från Tumblr." + +#: wp-includes/js/dist/block-library.js:3561 +msgid "Embed a TED video." +msgstr "Bädda in en video från TED." + +#: wp-includes/js/dist/block-library.js:3553 +msgid "Embed Speaker Deck content." +msgstr "Bädda in innehåll från Speaker Deck." + +#: wp-includes/js/dist/block-library.js:3525 +msgid "Embed SmugMug content." +msgstr "Bädda in innehåll från SmugMug." + +#: wp-includes/js/dist/block-library.js:3517 +msgid "Embed Slideshare content." +msgstr "Bädda in innehåll från Slideshare." + +#: wp-includes/js/dist/block-library.js:3509 +msgid "Embed Scribd content." +msgstr "Bädda in innehåll från Scribd." + +#: wp-includes/js/dist/block-library.js:3501 +msgid "Embed Screencast content." +msgstr "Bädda in innehåll från Screencast." + +#: wp-includes/js/dist/block-library.js:3493 +msgid "Embed ReverbNation content." +msgstr "Bädda in innehåll från ReverbNation." + +#: wp-includes/js/dist/block-library.js:3485 +msgid "Embed a Reddit thread." +msgstr "Bädda in en tråd från Reddit." + +#: wp-includes/js/dist/block-library.js:3474 +msgid "Embed Polldaddy content." +msgstr "Bädda in innehåll från Polldaddy." + +#: wp-includes/js/dist/block-library.js:3465 +msgid "Embed Mixcloud content." +msgstr "Bädda in innehåll från Mixcloud." + +#: wp-includes/js/dist/block-library.js:3456 +msgid "Embed Meetup.com content." +msgstr "Bädda in innehåll från Meetup.com." + +#: wp-includes/js/dist/block-library.js:3448 +msgid "Embed Kickstarter content." +msgstr "Bädda in innehåll från Kickstarter." + +#: wp-includes/js/dist/block-library.js:3440 +msgid "Embed Issuu content." +msgstr "Bädda in innehåll från Issuu." + +#: wp-includes/js/dist/block-library.js:3432 +msgid "Embed Imgur content." +msgstr "Bädda in innehåll från Imgur." + +#: wp-includes/js/dist/block-library.js:3424 +msgid "Embed Hulu content." +msgstr "Bädda in innehåll från Hulu." + +#: wp-includes/js/dist/block-library.js:3416 +msgid "Embed a Dailymotion video." +msgstr "Bädda in en video från Dailymotion." + +#: wp-includes/js/dist/block-library.js:3408 +msgid "Embed Crowdsignal (formerly Polldaddy) content." +msgstr "Bädda in innehåll från Crowdsignal (f.d. Polldaddy)" + +#: wp-includes/js/dist/block-library.js:3390 +msgid "Embed CollegeHumor content." +msgstr "Bädda in innehåll från CollegeHumor." + +#: wp-includes/js/dist/block-library.js:3382 +msgid "Embed Cloudup content." +msgstr "Bädda in innehåll från Cloudup." + +#: wp-includes/js/dist/block-library.js:3374 +msgid "Embed an Animoto video." +msgstr "Bädda in en video från Animoto." + +#: wp-includes/js/dist/block-library.js:3365 +msgid "Embed a Vimeo video." +msgstr "Bädda in en video från Vimeo." + +#: wp-includes/js/dist/block-library.js:3356 +msgid "Embed Flickr content." +msgstr "Bädda in innehåll från Flickr." + +#: wp-includes/js/dist/block-library.js:3347 +msgid "Embed Spotify content." +msgstr "Bädda in innehåll från Spotify." + +#: wp-includes/js/dist/block-library.js:3338 +msgid "Embed SoundCloud content." +msgstr "Bädda in innehåll från SoundCloud." + +#: wp-includes/js/dist/block-library.js:3337 +#: wp-includes/js/dist/block-library.js:3346 +#: wp-includes/js/dist/block-library.js:3464 +msgid "audio" +msgstr "ljud" + +#: wp-includes/js/dist/block-library.js:3330 +msgid "Embed a WordPress post." +msgstr "Bädda in ett inlägg från WordPress." + +#: wp-includes/js/dist/block-library.js:3328 +msgid "blog" +msgstr "blogg" + +#: wp-includes/js/dist/block-library.js:3328 +msgid "post" +msgstr "inlägg" + +#: wp-includes/js/dist/block-library.js:3320 +msgid "Embed an Instagram post." +msgstr "Bädda in ett inlägg från Instagram." + +#: wp-includes/js/dist/block-library.js:3319 +#: wp-includes/js/dist/block-library.js:3355 +#: wp-includes/js/dist/block-library.js:9394 +msgid "image" +msgstr "bild" + +#: wp-includes/js/dist/block-library.js:3311 +msgid "Embed a Facebook post." +msgstr "Bädda in ett inlägg från Facebook." + +#: wp-includes/js/dist/block-library.js:3303 +msgid "Embed a YouTube video." +msgstr "Bädda in en video från YouTube." + +#: wp-includes/js/dist/block-library.js:3302 +#: wp-includes/js/dist/block-library.js:3364 +#: wp-includes/js/dist/block-library.js:3577 +#: wp-includes/js/dist/block-library.js:9394 +msgid "video" +msgstr "video" + +#: wp-includes/js/dist/block-library.js:3302 +#: wp-includes/js/dist/block-library.js:3337 +#: wp-includes/js/dist/block-library.js:3346 +#: wp-includes/js/dist/block-library.js:3464 +msgid "music" +msgstr "musik" + +#: wp-includes/js/dist/block-library.js:3294 +msgid "Embed a tweet." +msgstr "Bädda in en status från Twitter." + +#: wp-includes/js/dist/blocks.js:5810 +msgid "Reusable Blocks" +msgstr "Återanvändbara block" + +#: wp-includes/js/dist/blocks.js:5807 +msgid "Embeds" +msgstr "Inbäddningar" + +#: wp-includes/js/dist/blocks.js:5801 +msgid "Layout Elements" +msgstr "Layoutelement" + +#: wp-includes/js/dist/blocks.js:5798 +msgid "Formatting" +msgstr "Formatering" + +#: wp-includes/js/dist/blocks.js:5795 +msgid "Common Blocks" +msgstr "Vanliga block" + +#: wp-includes/js/dist/list-reusable-blocks.js:730 +msgid "Reusable block imported successfully!" +msgstr "Återanvändbart block importerat utan problem." + +#: wp-includes/js/dist/list-reusable-blocks.js:683 +msgid "Import from JSON" +msgstr "Importera från JSON" + +#: wp-includes/js/dist/list-reusable-blocks.js:642 +msgctxt "button label" +msgid "Import" +msgstr "Importera" + +#: wp-includes/js/dist/list-reusable-blocks.js:632 +#: wp-includes/js/dist/block-library.js:11932 +#: wp-includes/js/dist/block-library.js:12053 +msgid "File" +msgstr "Fil" + +#: wp-includes/js/dist/list-reusable-blocks.js:606 +msgid "Unknown error" +msgstr "Okänt fel" + +#: wp-includes/js/dist/list-reusable-blocks.js:602 +msgid "Invalid Reusable Block JSON file" +msgstr "Ogiltig JSON-fil för återanvändbart block" + +#: wp-includes/js/dist/list-reusable-blocks.js:598 +msgid "Invalid JSON file" +msgstr "Ogiltig JSON-fil" + +#: wp-includes/js/dist/edit-post.js:6649 +msgid "Pin to toolbar" +msgstr "Fäst i verktygsfältet" + +#: wp-includes/js/dist/edit-post.js:6649 +msgid "Unpin from toolbar" +msgstr "Lossa från verktygsfältet" + +#: wp-includes/js/dist/edit-post.js:6646 +msgid "Close plugin" +msgstr "Stäng tillägget" + +#: wp-includes/js/dist/edit-post.js:6644 +msgid "Editor plugins" +msgstr "Tilläggsredigerare" + +#: wp-includes/js/dist/edit-post.js:6238 +msgid "Open publish panel" +msgstr "Öppna publiceringspanel" + +#: wp-includes/js/dist/edit-post.js:6209 +msgid "Editor content" +msgstr "Innehållsredigerare" + +#. translators: accessibility text for the publish landmark region. +#: wp-includes/js/dist/edit-post.js:6199 +msgid "Editor publish" +msgstr "Redigerarens publicera-område" + +#: wp-includes/js/dist/edit-post.js:5885 +msgid "Editor settings" +msgstr "Inställningar för redigeraren" + +#: wp-includes/js/dist/edit-post.js:5665 +msgid "Read about permalinks" +msgstr "Läs om permalänkar" + +#: wp-includes/js/dist/edit-post.js:5663 +msgid "The last part of the URL. " +msgstr "Den sista delen av URL:en." + +#: wp-includes/js/dist/edit-post.js:5630 +msgid "URL Slug" +msgstr "URL-slug" + +#: wp-includes/js/dist/edit-post.js:5341 +msgid "Status & Visibility" +msgstr "Status och synlighet" + +#: wp-includes/js/dist/edit-post.js:5166 +msgid "Click to change" +msgstr "Klicka för att ändra" + +#: wp-includes/js/dist/edit-post.js:5104 +msgid "Visibility" +msgstr "Synlighet" + +#: wp-includes/js/dist/edit-post.js:5057 +msgid "Close settings" +msgstr "Stäng inställningar" + +#. translators: ARIA label for the Block sidebar tab, selected. +#: wp-includes/js/dist/edit-post.js:5049 +msgid "Block (selected)" +msgstr "Block (valt)" + +#. translators: ARIA label for the Document sidebar tab, not selected. +#: wp-includes/js/dist/edit-post.js:5043 wp-includes/js/dist/edit-post.js:5062 +#: wp-includes/js/dist/edit-post.js:5063 +msgid "Document" +msgstr "Dokument" + +#. translators: ARIA label for the Document sidebar tab, selected. +#: wp-includes/js/dist/edit-post.js:5042 +msgid "Document (selected)" +msgstr "Dokument (valt)" + +#. translators: ARIA label for the Block sidebar tab, not selected. +#: wp-includes/js/dist/edit-post.js:5039 wp-includes/js/dist/edit-post.js:5050 +msgid "Block" +msgstr "Block" + +#: wp-includes/js/dist/edit-post.js:4643 +msgid "Advanced Panels" +msgstr "Avancerade paneler" + +#: wp-includes/js/dist/edit-post.js:4637 wp-includes/js/dist/edit-post.js:5766 +msgid "Discussion" +msgstr "Diskussion" + +#: wp-includes/js/dist/edit-post.js:4619 wp-includes/js/dist/edit-post.js:5624 +msgid "Permalink" +msgstr "Permalänk" + +#: wp-includes/js/dist/edit-post.js:4617 +msgid "Document Panels" +msgstr "Dokumentpaneler" + +#: wp-includes/js/dist/edit-post.js:4615 +msgid "Enable Tips" +msgstr "Aktivera tips" + +#: wp-includes/js/dist/edit-post.js:4613 +msgid "Enable Pre-publish Checks" +msgstr "Aktivera kontroller före publicering" + +#: wp-includes/js/dist/edit-post.js:4547 +msgid "Custom Fields" +msgstr "Anpassade fält" + +#: wp-includes/js/dist/edit-post.js:3853 +msgid "Display the selected text in a monospaced font." +msgstr "Visa den markerade texten i ett typsnitt med fast teckenbredd." + +#: wp-includes/js/dist/edit-post.js:3850 +msgid "Add a strikethrough to the selected text." +msgstr "Lägg till överstrykning för den markerade texten." + +#: wp-includes/js/dist/edit-post.js:3847 +msgid "Remove a link." +msgstr "Ta bort en länk." + +#: wp-includes/js/dist/edit-post.js:3844 +msgid "Convert the selected text into a link." +msgstr "Konvertera den valda texten till en länk." + +#: wp-includes/js/dist/edit-post.js:3841 +msgid "Underline the selected text." +msgstr "Gör understrykning av den markerade texten." + +#: wp-includes/js/dist/edit-post.js:3838 +msgid "Make the selected text italic." +msgstr "Ändra den markerade texten till kursiv." + +#: wp-includes/js/dist/edit-post.js:3835 +msgid "Make the selected text bold." +msgstr "Ändra den markerade texten till fetstil." + +#: wp-includes/js/dist/edit-post.js:3832 +msgid "Text formatting" +msgstr "Textformatering" + +#. translators: The forward-slash character. e.g. '/'. +#: wp-includes/js/dist/edit-post.js:3828 +msgid "Forward-slash" +msgstr "Snedstreck" + +#: wp-includes/js/dist/edit-post.js:3825 +msgid "Change the block type after adding a new paragraph." +msgstr "Ändra blocktypen när ett nytt stycke lagts till." + +#: wp-includes/js/dist/edit-post.js:3822 +msgid "Insert a new block after the selected block(s)." +msgstr "Infoga ett nytt block efter markerat/markerade block." + +#: wp-includes/js/dist/edit-post.js:3819 +msgid "Insert a new block before the selected block(s)." +msgstr "Skjut in ett nytt block före det markerade bloket (blocken)." + +#: wp-includes/js/dist/edit-post.js:3816 +msgid "Remove the selected block(s)." +msgstr "Ta bort det markerade blocket (blocken)." + +#: wp-includes/js/dist/edit-post.js:3813 +msgid "Duplicate the selected block(s)." +msgstr "Duplicera markerat/markerade block." + +#: wp-includes/js/dist/edit-post.js:3810 +msgid "Block shortcuts" +msgstr "Kortkoder för block" + +#. translators: The 'escape' key on a keyboard. +#: wp-includes/js/dist/edit-post.js:3806 +msgid "Escape" +msgstr "Esc" + +#: wp-includes/js/dist/edit-post.js:3803 +msgid "Clear selection." +msgstr "Ta bort markeringen." + +#: wp-includes/js/dist/edit-post.js:3800 +msgid "Select all text when typing. Press again to select all blocks." +msgstr "Välj all text vid inmatning. Tryck en gång till för att välja alla block." + +#: wp-includes/js/dist/edit-post.js:3797 +msgid "Selection shortcuts" +msgstr "Genvägar för markering" + +#: wp-includes/js/dist/edit-post.js:3793 +msgid "Switch between Visual Editor and Code Editor." +msgstr "Växla mellan visuell redigerare och kodredigerare." + +#: wp-includes/js/dist/edit-post.js:3790 +msgid "Navigate to the nearest toolbar." +msgstr "Navigera till närmaste verktygsfält." + +#: wp-includes/js/dist/edit-post.js:3787 +msgid "Navigate to the previous part of the editor (alternative)." +msgstr "Gå till föregående del av redigeraren (alternativ)." + +#: wp-includes/js/dist/edit-post.js:3784 +msgid "Navigate to the next part of the editor (alternative)." +msgstr "Navigera till nästa del av redigeraren (alternativ)." + +#: wp-includes/js/dist/edit-post.js:3780 +msgid "Navigate to the previous part of the editor." +msgstr "Gå till föregående del av redigeraren." + +#: wp-includes/js/dist/edit-post.js:3776 +msgid "Navigate to the next part of the editor." +msgstr "Navigera till nästa del av redigeraren." + +#: wp-includes/js/dist/edit-post.js:3773 +msgid "Open the block navigation menu." +msgstr "Öppna blocknavigationsmenyn." + +#: wp-includes/js/dist/edit-post.js:3769 +msgid "Show or hide the settings sidebar." +msgstr "Visa eller dölj sidopanelen för inställningar." + +#: wp-includes/js/dist/edit-post.js:3766 +msgid "Redo your last undo." +msgstr "Gör om den senast ångrade åtgärden." + +#: wp-includes/js/dist/edit-post.js:3763 +msgid "Undo your last changes." +msgstr "Ångra dina senaste ändringar." + +#: wp-includes/js/dist/edit-post.js:3760 +msgid "Save your changes." +msgstr "Spara dina ändringar." + +#: wp-includes/js/dist/edit-post.js:3757 +msgid "Display this help." +msgstr "Visa denna hjälp." + +#: wp-includes/js/dist/edit-post.js:3754 +msgid "Global shortcuts" +msgstr "Globala genvägar" + +#: wp-includes/js/dist/edit-post.js:3528 +msgid "Show Block Settings" +msgstr "Visa blockinställningar" + +#: wp-includes/js/dist/edit-post.js:3528 +msgid "Hide Block Settings" +msgstr "Dölj blockinställningar" + +#: wp-includes/js/dist/edit-post.js:3524 +msgid "Additional settings are now available in the Editor block settings sidebar" +msgstr "Ytterligare inställningar finns nu tillgängliga i Redigerarens sidopanelen med blockinställningar" + +#: wp-includes/js/dist/edit-post.js:3522 +msgid "Block settings closed" +msgstr "Blockets inställningar är stängda" + +#: wp-includes/js/dist/edit-post.js:3473 +msgid "Exit Code Editor" +msgstr "Avsluta kodredigerare" + +#: wp-includes/js/dist/edit-post.js:3469 +msgid "Editing Code" +msgstr "Att redigera kod" + +#: wp-includes/js/dist/edit-post.js:3421 +msgid "You’ll find more settings for your page and blocks in the sidebar. Click the cog icon to toggle the sidebar open and closed." +msgstr "Du hittar fler inställningar för din sida och dina block i sidopanelen. Klicka på ikonen med kugghjulet för att öppna och stänga sidopanelen." + +#: wp-includes/js/dist/edit-post.js:3393 +msgid "Editor top bar" +msgstr "Redigerarens toppband" + +#: wp-includes/js/dist/edit-post.js:3220 +msgid "Welcome to the wonderful world of blocks! Click the “+” (“Add block”) button to add a new block. There are blocks available for all kinds of content: you can insert text, headings, images, lists, and lots more!" +msgstr "Välkommen till den underbara världen av block! Klicka på knappen ”+” (”Lägg till block”) för att lägga till ett nytt block. Det finns block tillgängliga för alla typer av innehåll: du kan infoga text, rubriker, bilder, listor och mycket mer!" + +#. translators: accessibility text for the editor toolbar when Top Toolbar is +#. off +#: wp-includes/js/dist/edit-post.js:3211 +msgid "Document tools" +msgstr "Dokumentverktyg" + +#. translators: accessibility text for the editor toolbar when Top Toolbar is +#. on +#: wp-includes/js/dist/edit-post.js:3209 +msgid "Document and block tools" +msgstr "Dokument och blockverktyg" + +#: wp-includes/js/dist/edit-post.js:3091 +msgid "Hide more tools & options" +msgstr "Dölj mer verktyg och alternativ" + +#: wp-includes/js/dist/edit-post.js:3089 +msgid "Show more tools & options" +msgstr "Visa mer verktyg och alternativ" + +#: wp-includes/js/dist/edit-post.js:3064 +msgid "Fullscreen mode deactivated" +msgstr "Helskärmsläget har avslutats" + +#: wp-includes/js/dist/edit-post.js:3063 +msgid "Fullscreen mode activated" +msgstr "Helskärmsläge har aktiverats" + +#: wp-includes/js/dist/edit-post.js:3061 +msgid "Work without distraction" +msgstr "Arbeta utan att distraheras" + +#: wp-includes/js/dist/edit-post.js:3060 +msgid "Fullscreen Mode" +msgstr "Helskärmsläge" + +#: wp-includes/js/dist/edit-post.js:3057 +msgid "Spotlight mode deactivated" +msgstr "Strålkastarläge inaktiverat" + +#: wp-includes/js/dist/edit-post.js:3056 +msgid "Spotlight mode activated" +msgstr "Strålkastarläge aktiverat" + +#: wp-includes/js/dist/edit-post.js:3054 +msgid "Focus on one block at a time" +msgstr "Fokusera på ett block i taget" + +#: wp-includes/js/dist/edit-post.js:3053 +msgid "Spotlight Mode" +msgstr "Spotlight-läge" + +#: wp-includes/js/dist/edit-post.js:3050 +msgid "Top toolbar deactivated" +msgstr "Verktygsfältet i toppen har inaktiverats" + +#: wp-includes/js/dist/edit-post.js:3049 +msgid "Top toolbar activated" +msgstr "Verktygsfältet i toppen har aktiverats" + +#: wp-includes/js/dist/edit-post.js:3047 +msgid "Access all block and document tools in a single place" +msgstr "Få åtkomst till alla block- och dokumentverktyg på en enda plats" + +#: wp-includes/js/dist/edit-post.js:3046 +msgid "Top Toolbar" +msgstr "Verktygsfält i toppen" + +#: wp-includes/js/dist/edit-post.js:3043 +msgctxt "noun" +msgid "View" +msgstr "Visa" + +#: wp-includes/js/dist/edit-post.js:2998 +msgid "Feature activated" +msgstr "Funktionen har aktiverats" + +#: wp-includes/js/dist/edit-post.js:2996 +msgid "Feature deactivated" +msgstr "Funktionen har inaktiverats" + +#: wp-includes/js/dist/edit-post.js:2958 wp-includes/js/dist/edit-post.js:4607 +msgid "Options" +msgstr "Alternativ" + +#: wp-includes/js/dist/edit-post.js:2885 +msgid "Editor" +msgstr "Redigerare" + +#: wp-includes/js/dist/edit-post.js:2869 +msgid "Code Editor" +msgstr "Kodredigerare" + +#: wp-includes/js/dist/edit-post.js:2866 +msgid "Visual Editor" +msgstr "Visuell redigerare" + +#: wp-includes/js/dist/edit-post.js:2530 +msgid "Code editor selected" +msgstr "Kodredigerare vald" + +#: wp-includes/js/dist/edit-post.js:2530 +msgid "Visual editor selected" +msgstr "Visuell redigerare vald" + +#: wp-includes/js/dist/edit-post.js:1498 +msgid "Tools" +msgstr "Verktyg" + +#: wp-includes/js/dist/edit-post.js:1430 wp-includes/js/dist/edit-post.js:4215 +msgid "Block Manager" +msgstr "Blockhanterare" + +#: wp-includes/js/dist/edit-post.js:1398 +msgid "Copy All Content" +msgstr "Kopiera allt innehåll" + +#: wp-includes/js/dist/edit-post.js:1327 +msgid "This block can only be used once." +msgstr "Detta block kan bara användas en gång." + +#: wp-includes/js/dist/edit-post.js:1326 +msgid "Transform into:" +msgstr "Omvandla till:" + +#: wp-includes/js/dist/edit-post.js:1314 +msgid "Find original" +msgstr "Hitta original" + +#: wp-includes/js/dist/edit-post.js:1000 +msgid "Select or Upload Media" +msgstr "Välj eller ladda upp media" + +#: wp-includes/js/dist/block-editor.js:19696 +msgid "Additional CSS Class" +msgstr "Ytterligare CSS-klass" + +#: wp-includes/js/dist/block-editor.js:19600 +msgid "Anchors lets you link directly to a section on a page." +msgstr "Ankare låter dig länka direkt till en sektion på en sida." + +#: wp-includes/js/dist/block-editor.js:19599 +msgid "HTML Anchor" +msgstr "HTML-ankare" + +#: wp-includes/js/dist/block-editor.js:18044 +msgid "Transform To:" +msgstr "Omvandla till:" + +#: wp-includes/js/dist/block-editor.js:18037 +msgid "Block Styles" +msgstr "Blockstilar" + +#: wp-includes/js/dist/block-editor.js:18013 +msgid "Change type of %d block" +msgid_plural "Change type of %d blocks" +msgstr[0] "Ändra typ hos %d block" +msgstr[1] "Ändra typ hos %d block" + +#: wp-includes/js/dist/block-editor.js:18013 +msgid "Change block type or style" +msgstr "Ändra blocktyp eller blockstil" + +#: wp-includes/js/dist/block-editor.js:17990 +msgid "Block icon" +msgstr "Blockikon" + +#: wp-includes/js/dist/block-editor.js:17874 +msgid "Remove Block" +msgstr "Ta bort block" + +#: wp-includes/js/dist/block-editor.js:17853 +msgid "Insert After" +msgstr "Infoga efter" + +#: wp-includes/js/dist/block-editor.js:17848 +msgid "Insert Before" +msgstr "Infoga före" + +#: wp-includes/js/dist/block-editor.js:17843 +msgid "Duplicate" +msgstr "Duplicera" + +#: wp-includes/js/dist/block-editor.js:17807 +msgid "Hide options" +msgstr "Dölj alternativ" + +#: wp-includes/js/dist/block-editor.js:17595 +msgid "Remove from Reusable Blocks" +msgstr "Ta bort från återanvändbara block" + +#: wp-includes/js/dist/block-editor.js:17507 +msgid "Convert to Regular Block" +msgstr "Konvertera till vanlig block" + +#: wp-includes/js/dist/block-editor.js:17503 +msgid "Add to Reusable Blocks" +msgstr "Lägg till i återanvändbara block" + +#: wp-includes/js/dist/block-editor.js:17441 +msgid "Edit visually" +msgstr "Redigera visuellt" + +#: wp-includes/js/dist/block-editor.js:17441 +msgid "Edit as HTML" +msgstr "Redigera som HTML" + +#: wp-includes/js/dist/block-editor.js:17281 +msgid "Styles" +msgstr "Stilar" + +#: wp-includes/js/dist/block-editor.js:17266 +msgid "No block selected." +msgstr "Inga block valda." + +#. translators: %d: number of words +#: wp-includes/js/dist/block-editor.js:17207 +msgid "%d word" +msgid_plural "%d words" +msgstr[0] "%d ord" +msgstr[1] "%d ord" + +#. translators: %d: number of blocks +#: wp-includes/js/dist/block-editor.js:17203 +msgid "%d block" +msgid_plural "%d blocks" +msgstr[0] "%d block" +msgstr[1] "%d block" + +#: wp-includes/js/dist/block-editor.js:17081 +#: wp-includes/js/dist/block-library.js:6537 +#: wp-includes/js/dist/block-library.js:16785 +#: wp-includes/js/dist/block-library.js:17628 +#: wp-includes/js/dist/block-library.js:19440 +msgctxt "block style" +msgid "Default" +msgstr "Standard" + +#: wp-includes/js/dist/block-editor.js:16955 +msgid "Skip to the selected block" +msgstr "Hoppa över till det valda blocket" + +#: wp-includes/js/dist/block-editor.js:16636 +msgid "Submit" +msgstr "Skicka" + +#: wp-includes/js/dist/block-editor.js:16611 +msgid "Insert Link" +msgstr "Infoga länk" + +#: wp-includes/js/dist/block-editor.js:16611 +msgid "Edit Link" +msgstr "Redigera länken" + +#: wp-includes/js/dist/block-editor.js:16156 +msgid "Upload" +msgstr "Ladda upp" + +#: wp-includes/js/dist/block-editor.js:16123 +msgid "Given your current role, you can only link a video, you cannot upload." +msgstr "Din nuvarande roll ger dig endast behörighet att länka till en video. Du kan inte ladda upp filer." + +#: wp-includes/js/dist/block-editor.js:16121 +msgid "Given your current role, you can only link an image, you cannot upload." +msgstr "Din nuvarande roll ger dig endast behörighet att länka till en bild. Du kan inte ladda upp filer." + +#: wp-includes/js/dist/block-editor.js:16119 +msgid "Given your current role, you can only link an audio, you cannot upload." +msgstr "Din nuvarande roll ger dig endast behörighet att länka till en ljudfil. Du kan inte ladda upp filer." + +#: wp-includes/js/dist/block-editor.js:16116 +msgid "Given your current role, you can only link a media file, you cannot upload." +msgstr "Din nuvarande roll ger dig endast behörighet att länka till en mediafil. Du kan inte ladda upp filer." + +#: wp-includes/js/dist/block-editor.js:16113 +msgid "Drag a video, upload a new one or select a file from your library." +msgstr "Dra in en video, ladda upp en ny eller välj en fil från ditt mediabibliotek." + +#: wp-includes/js/dist/block-editor.js:16111 +msgid "Drag an image, upload a new one or select a file from your library." +msgstr "Dra in en bild, ladda upp en ny eller välj en fil från ditt mediabibliotek." + +#: wp-includes/js/dist/block-editor.js:16109 +msgid "Drag an audio, upload a new one or select a file from your library." +msgstr "Dra in en ljudfil, ladda upp en ny eller välj en fil från ditt mediabibliotek." + +#: wp-includes/js/dist/block-editor.js:16106 +msgid "Drag a media file, upload a new one or select a file from your library." +msgstr "Dra in en mediafil, ladda upp en ny eller välj en fil från ditt mediabibliotek." + +#: wp-includes/js/dist/block-editor.js:16095 +msgid "To edit this block, you need permission to upload media." +msgstr "För att redigera detta block behöver du behörighet att ladda upp media." + +#: wp-includes/js/dist/block-editor.js:15944 +msgid "Paste or type URL" +msgstr "Klistra in eller skriv URL" + +#: wp-includes/js/dist/block-editor.js:15884 +#: wp-includes/js/dist/block-library.js:10371 +msgid "Link Settings" +msgstr "Länkinställningar" + +#: wp-includes/js/dist/block-editor.js:14343 +msgctxt "keyboard key" +msgid "Space" +msgstr "Mellanslag" + +#: wp-includes/js/dist/block-editor.js:14342 +msgid "Indent list item" +msgstr "Sänk listobjektet en nivå" + +#: wp-includes/js/dist/block-editor.js:14336 +msgctxt "keyboard key" +msgid "Backspace" +msgstr "Backsteg" + +#: wp-includes/js/dist/block-editor.js:14335 +msgid "Outdent list item" +msgstr "Lyft listobjektet en nivå" + +#: wp-includes/js/dist/block-editor.js:14322 +msgid "Convert to ordered list" +msgstr "Konvertera till numrerad lista" + +#: wp-includes/js/dist/block-editor.js:14309 +msgid "Convert to unordered list" +msgstr "Konvertera till punktlista" + +#: wp-includes/js/dist/block-editor.js:13804 +msgid "More Rich Text Controls" +msgstr "Fler reglage för formaterat innehåll" + +#: wp-includes/js/dist/block-editor.js:13639 +msgid "(%s: %s)" +msgstr "(%s: %s)" + +#: wp-includes/js/dist/block-editor.js:13552 +msgid "(current %s: %s)" +msgstr "(nuvarande %s: %s)" + +#: wp-includes/js/dist/block-editor.js:12852 +#: wp-includes/js/dist/block-library.js:5734 +msgid "Start writing or type / to choose a block" +msgstr "Börja skriva eller tryck på ”/” för att välja ett block" + +#: wp-includes/js/dist/block-editor.js:12480 +msgid "Block: %s" +msgstr "Block: %s" + +#: wp-includes/js/dist/block-editor.js:11795 +msgid "Add %s" +msgstr "Lägg till %s" + +#: wp-includes/js/dist/block-editor.js:11346 +#: wp-includes/js/dist/block-editor.js:12884 +#: wp-includes/js/dist/block-editor.js:12985 +msgid "Add block" +msgstr "Lägg till block" + +#: wp-includes/js/dist/block-editor.js:11201 +#: wp-includes/js/dist/edit-post.js:1535 +msgid "Manage All Reusable Blocks" +msgstr "Hantera alla återanvändbara block" + +#: wp-includes/js/dist/block-editor.js:11187 +msgid "Reusable" +msgstr "Återanvändbar" + +#: wp-includes/js/dist/block-editor.js:11158 +msgctxt "blocks" +msgid "Most Used" +msgstr "Mest använda" + +#: wp-includes/js/dist/block-editor.js:11151 +#: wp-includes/js/dist/edit-post.js:4151 +msgid "Available block types" +msgstr "Tillgängliga blocktyper" + +#: wp-includes/js/dist/block-editor.js:11139 +#: wp-includes/js/dist/block-editor.js:11142 +#: wp-includes/js/dist/edit-post.js:4140 +msgid "Search for a block" +msgstr "Sök efter ett block" + +#: wp-includes/js/dist/block-editor.js:10530 +msgid "Block tools" +msgstr "Blockverktyg" + +#: wp-includes/js/dist/block-editor.js:10077 +msgid "This block has encountered an error and cannot be previewed." +msgstr "Detta block har stött på ett fel och kan inte förhandsgranskas." + +#: wp-includes/js/dist/block-editor.js:10006 +msgid "This block contains unexpected or invalid content." +msgstr "Detta block innehåller oväntat eller ogiltigt innehåll" + +#. translators: Button to fix block content +#: wp-includes/js/dist/block-editor.js:9999 +msgctxt "imperative verb" +msgid "Resolve" +msgstr "Lös upp" + +#: wp-includes/js/dist/block-editor.js:9988 +#: wp-includes/js/dist/block-editor.js:17659 +msgid "Convert to Blocks" +msgstr "Konvertera till block" + +#. translators: Dialog title to fix block content +#: wp-includes/js/dist/block-editor.js:9980 +msgid "Resolve Block" +msgstr "Lös upp blocket" + +#: wp-includes/js/dist/block-editor.js:9973 +msgid "Attempt Block Recovery" +msgstr "Försökt att återskapa block" + +#: wp-includes/js/dist/block-editor.js:9970 +msgid "Convert to Classic Block" +msgstr "Konvertera till Klassiskt block" + +#: wp-includes/js/dist/block-editor.js:9886 +msgid "After Conversion" +msgstr "Efter konvertering" + +#: wp-includes/js/dist/block-editor.js:9882 +#: wp-includes/js/dist/block-editor.js:10004 +msgid "Convert to HTML" +msgstr "Konvertera till HTML" + +#: wp-includes/js/dist/block-editor.js:9879 +msgid "Current" +msgstr "Nuvarande" + +#: wp-includes/js/dist/block-editor.js:9729 +#: wp-includes/js/dist/block-editor.js:17807 +msgid "More options" +msgstr "Fler alternativ" + +#. translators: 1: Number of selected blocks, 2: Position of selected blocks +#: wp-includes/js/dist/block-editor.js:9151 +msgid "Move %1$d block from position %2$d down by one place" +msgid_plural "Move %1$d blocks from position %2$d down by one place" +msgstr[0] "Flytta %1$d block från position %2$d en plats nedåt" +msgstr[1] "Flytta %1$d block från position %2$d en plats nedåt" + +#. translators: 1: Number of selected blocks, 2: Position of selected blocks +#: wp-includes/js/dist/block-editor.js:9146 +msgid "Move %1$d block from position %2$d up by one place" +msgid_plural "Move %1$d blocks from position %2$d up by one place" +msgstr[0] "Flytta %1$d block från position %2$d en plats uppåt" +msgstr[1] "Flytta %1$d block från position %2$d en plats uppåt" + +#: wp-includes/js/dist/block-editor.js:9141 +msgid "Blocks cannot be moved down as they are already at the bottom" +msgstr "Block kan inte flyttas ner eftersom de redan är längst ner" + +#: wp-includes/js/dist/block-editor.js:9137 +msgid "Blocks cannot be moved up as they are already at the top" +msgstr "Block kan inte flyttas upp eftersom de redan är högst upp" + +#. translators: %s: Type of block (i.e. Text, Image etc) +#: wp-includes/js/dist/block-editor.js:9117 +msgid "Block %s is at the beginning of the content and can’t be moved up" +msgstr "Block %s är i början av innehållet och kan inte flyttas upp" + +#. translators: 1: Type of block (i.e. Text, Image etc), 2: Position of +#. selected block, 3: New position +#: wp-includes/js/dist/block-editor.js:9111 +msgid "Move %1$s block from position %2$d up to position %3$d" +msgstr "Flytta blocket %1$s från position %2$d upp till position %3$d" + +#. translators: %s: Type of block (i.e. Text, Image etc) +#: wp-includes/js/dist/block-editor.js:9105 +msgid "Block %s is at the end of the content and can’t be moved down" +msgstr "Block %s är i slutet av innehållet och kan inte flyttas ner" + +#. translators: 1: Type of block (i.e. Text, Image etc), 2: Position of +#. selected block, 3: New position +#: wp-includes/js/dist/block-editor.js:9099 +msgid "Move %1$s block from position %2$d down to position %3$d" +msgstr "Flytta blocket %1$s från position %2$d ned till position %3$d" + +#. translators: %s: Type of block (i.e. Text, Image etc) +#: wp-includes/js/dist/block-editor.js:9093 +msgid "Block %s is the only block, and cannot be moved" +msgstr "Block %s är det enda blocket och kan inte flyttas" + +#: wp-includes/js/dist/block-editor.js:8825 +msgid "This color combination may be hard for people to read. Try using a brighter background color and/or a darker text color." +msgstr "Denna färgkombination kan vara svår för människor att läsa. Försök använda en ljusare bakgrundsfärg och/eller en mörkare textfärg." + +#: wp-includes/js/dist/block-editor.js:8825 +msgid "This color combination may be hard for people to read. Try using a darker background color and/or a brighter text color." +msgstr "Denna färgkombination kan vara svår för människor att läsa. Försök använda en mörkare bakgrundsfärg och/eller en ljusare textfärg." + +#: wp-includes/js/dist/block-editor.js:8329 +#: wp-includes/js/dist/block-editor.js:8406 +msgid "Block Navigation" +msgstr "Navigering mellan block" + +#: wp-includes/js/dist/block-editor.js:8301 +msgid "(selected block)" +msgstr "(valt block)" + +#: wp-includes/js/dist/block-editor.js:8001 +msgid "Change Alignment" +msgstr "Ändra justering" + +#: wp-includes/js/dist/block-editor.js:7974 +msgid "Full width" +msgstr "Full bredd" + +#: wp-includes/js/dist/block-editor.js:7970 +msgid "Wide width" +msgstr "Bred bredd" + +#: wp-includes/js/dist/block-editor.js:7906 +msgid "Change Text Alignment" +msgstr "Ändra textens justering" + +#: wp-includes/js/dist/block-editor.js:7884 +msgid "Align text right" +msgstr "Högerställd text" + +#: wp-includes/js/dist/block-editor.js:7880 +msgid "Align text center" +msgstr "Centrerad text" + +#: wp-includes/js/dist/block-editor.js:7876 +msgid "Align text left" +msgstr "Vänsterställd text" + +#: wp-includes/js/dist/block-editor.js:7515 +msgid "%s block selected." +msgid_plural "%s blocks selected." +msgstr[0] "%s block är markerat." +msgstr[1] "%s block är markerade." + +#: wp-includes/js/dist/block-editor.js:4063 +msgctxt "font size name" +msgid "Huge" +msgstr "Enorm" + +#: wp-includes/js/dist/block-editor.js:4059 +msgctxt "font size name" +msgid "Large" +msgstr "Stor" + +#: wp-includes/js/dist/block-editor.js:4055 +msgctxt "font size name" +msgid "Medium" +msgstr "Medium" + +#: wp-includes/js/dist/block-editor.js:4047 +msgctxt "font size name" +msgid "Small" +msgstr "Liten" + +#: wp-includes/js/dist/block-editor.js:4042 +msgid "Very dark gray" +msgstr "Mycket mörkgrå" + +#: wp-includes/js/dist/block-editor.js:4038 +msgid "Cyan bluish gray" +msgstr "Cyan blågrå" + +#: wp-includes/js/dist/block-editor.js:4034 +msgid "Very light gray" +msgstr "Mycket ljusgrå" + +#: wp-includes/js/dist/block-editor.js:4030 +msgid "Vivid cyan blue" +msgstr "Intensivt cyanblå" + +#: wp-includes/js/dist/block-editor.js:4026 +msgid "Pale cyan blue" +msgstr "Blek cyanblå" + +#: wp-includes/js/dist/block-editor.js:4022 +msgid "Vivid green cyan" +msgstr "Intensivt cyangrönt" + +#: wp-includes/js/dist/block-editor.js:4018 +msgid "Light green cyan" +msgstr "Ljusgrön cyan" + +#: wp-includes/js/dist/block-editor.js:4014 +msgid "Luminous vivid amber" +msgstr "Lysande intensivt gult" + +#: wp-includes/js/dist/block-editor.js:4010 +msgid "Luminous vivid orange" +msgstr "Lysande intensivt orange" + +#: wp-includes/js/dist/block-editor.js:4006 +msgid "Vivid red" +msgstr "Intensivt röd" + +#: wp-includes/js/dist/block-editor.js:4002 +msgid "Pale pink" +msgstr "Blek rosa" + +#: wp-includes/js/dist/editor.js:14936 +msgid "View the autosave" +msgstr "Visa autosparad version" + +#: wp-includes/js/dist/editor.js:14933 +msgid "There is an autosave of this post that is more recent than the version below." +msgstr "Det finns en autosparad version av detta inlägg som är nyare än nedanstående version." + +#. translators: %s: file name +#: wp-includes/js/dist/editor.js:14772 +msgid "Error while uploading file %s to the media library." +msgstr "Ett fel inträffade när filen %s laddades upp till mediabiblioteket." + +#: wp-includes/js/dist/editor.js:14682 +msgid "This file is empty." +msgstr "Filen är tom." + +#: wp-includes/js/dist/editor.js:14669 +msgid "This file exceeds the maximum upload size for this site." +msgstr "Filen överskrider den maximala storleken för filuppladdningar på denna webbplats." + +#: wp-includes/js/dist/editor.js:14656 +msgid "Sorry, this file type is not supported here." +msgstr "Denna filtyp stöds inte här." + +#: wp-includes/js/dist/editor.js:13027 +msgid "You have unsaved changes. If you proceed, they will be lost." +msgstr "Du har osparade ändringar. Om du fortsätter kommer de att gå förlorade." + +#: wp-includes/js/dist/editor.js:12952 +msgid "Content structure" +msgstr "Innehållsstruktur" + +#: wp-includes/js/dist/editor.js:12906 +msgid "Document Outline" +msgstr "Dokumentöversikt" + +#: wp-includes/js/dist/editor.js:12902 +msgid "Blocks" +msgstr "Block" + +#: wp-includes/js/dist/editor.js:12898 +msgid "Paragraphs" +msgstr "Stycken" + +#: wp-includes/js/dist/editor.js:12894 +msgid "Headings" +msgstr "Rubriker" + +#: wp-includes/js/dist/editor.js:12892 +msgid "Words" +msgstr "Ord" + +#: wp-includes/js/dist/editor.js:12888 +msgid "Document Statistics" +msgstr "Dokumentstatistik" + +#: wp-includes/js/dist/editor.js:12750 +msgid "Move to trash" +msgstr "Flytta till papperskorg" + +#: wp-includes/js/dist/editor.js:12638 wp-includes/js/dist/editor.js:12643 +msgid "Add title" +msgstr "Lägg till rubrik" + +#: wp-includes/js/dist/editor.js:12444 +msgid "Change Permalinks" +msgstr "Ändra permalänkar" + +#: wp-includes/js/dist/editor.js:12416 +msgid "Permalink:" +msgstr "Permalänk:" + +#: wp-includes/js/dist/editor.js:12394 +msgid "Copy the permalink" +msgstr "Kopiera permalänken" + +#: wp-includes/js/dist/editor.js:12394 +msgid "Permalink copied" +msgstr "Permalänken kopierad" + +#: wp-includes/js/dist/editor.js:12251 +msgid "Edit post permalink" +msgstr "Redigera inläggets permalänk" + +#: wp-includes/js/dist/editor.js:12121 +msgid "Start writing with text or HTML" +msgstr "Börja skriva in text eller HTML" + +#: wp-includes/js/dist/editor.js:12113 +msgid "Type text or HTML" +msgstr "Skriv in text eller HTML" + +#: wp-includes/js/dist/editor.js:11862 +msgid "Terms" +msgstr "Termer" + +#: wp-includes/js/dist/editor.js:11861 +msgid "Search Terms" +msgstr "Söktermer" + +#: wp-includes/js/dist/editor.js:11856 +msgid "Parent Term" +msgstr "Överordnad term" + +#: wp-includes/js/dist/editor.js:11854 wp-includes/js/dist/editor.js:11855 +msgid "Add new term" +msgstr "Lägg till ny term" + +#: wp-includes/js/dist/editor.js:11854 wp-includes/js/dist/editor.js:11855 +msgid "Add new category" +msgstr "Lägg till ny kategori" + +#: wp-includes/js/dist/editor.js:11764 +#: wp-includes/js/dist/block-editor.js:11093 +msgid "%d result found." +msgid_plural "%d results found." +msgstr[0] "%d resultat hittades." +msgstr[1] "%d resultat hittades." + +#: wp-includes/js/dist/editor.js:11390 +msgid "Stick to the top of the blog" +msgstr "Fäst längst upp i bloggen" + +#: wp-includes/js/dist/editor.js:11224 +msgid "Saving" +msgstr "Sparar" + +#: wp-includes/js/dist/editor.js:11224 +msgid "Autosaving" +msgstr "Autosparar" + +#: wp-includes/js/dist/editor.js:11099 +msgid "Switch to Draft" +msgstr "Byt till utkast" + +#: wp-includes/js/dist/editor.js:11085 +msgid "Are you sure you want to unschedule this post?" +msgstr "Är du säker på att du vill ta bort schemaläggningen av detta inlägg?" + +#: wp-includes/js/dist/editor.js:11083 +msgid "Are you sure you want to unpublish this post?" +msgstr "Är du säker på att du vill avpublicera detta inlägg?" + +#: wp-includes/js/dist/editor.js:11004 +msgid "Always show pre-publish checks." +msgstr "Visa alltid kontroller innan publicering sker." + +#: wp-includes/js/dist/editor.js:10996 +msgid "Close panel" +msgstr "Stäng panel" + +#: wp-includes/js/dist/editor.js:10983 +msgid "Scheduled" +msgstr "Schemalagd" + +#: wp-includes/js/dist/editor.js:10866 wp-includes/js/dist/edit-post.js:1398 +#: wp-includes/js/dist/block-library.js:12010 +msgid "Copied!" +msgstr "kopierad!" + +#. translators: %s: post type singular name +#: wp-includes/js/dist/editor.js:10854 +msgid "%s address" +msgstr "Adress för %s" + +#: wp-includes/js/dist/editor.js:10849 +msgid "What’s next?" +msgstr "Vad kommer härnäst?" + +#: wp-includes/js/dist/editor.js:10839 +msgid "is now live." +msgstr "är nu live." + +#: wp-includes/js/dist/editor.js:10839 +msgid "is now scheduled. It will go live on" +msgstr "är tidsinställt och publiceras" + +#: wp-includes/js/dist/editor.js:10731 +msgid "Publish:" +msgstr "Publicera:" + +#: wp-includes/js/dist/editor.js:10725 +msgid "Visibility:" +msgstr "Synlighet:" + +#: wp-includes/js/dist/editor.js:10718 +msgid "Double-check your settings before publishing." +msgstr "Dubbelkontrollera dina inställningar innan du publicerar." + +#: wp-includes/js/dist/editor.js:10717 +msgid "Are you ready to publish?" +msgstr "Är du redo att publicera?" + +#: wp-includes/js/dist/editor.js:10715 +msgid "Your work will be published at the specified date and time." +msgstr "Ditt arbete kommer att publiceras på angivet datum och tid." + +#: wp-includes/js/dist/editor.js:10714 +msgid "Are you ready to schedule?" +msgstr "Är du redo att schemalägga?" + +#: wp-includes/js/dist/editor.js:10712 +msgid "When you’re ready, submit your work for review, and an Editor will be able to approve it for you." +msgstr "När du är klar, skicka in ditt arbete för granskning, och en redaktör kommer att kunna godkänna det åt dig." + +#: wp-includes/js/dist/editor.js:10711 +msgid "Are you ready to submit for review?" +msgstr "Är du redo att skicka in en recension?" + +#: wp-includes/js/dist/editor.js:10641 +msgid "Apply the \"%1$s\" format." +msgstr "Tillämpa formatet ”%1$s”." + +#: wp-includes/js/dist/editor.js:10638 +msgid "Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling." +msgstr "Ditt tema använder inläggsformat för att markera olika typer av innehåll, t.ex. bilder eller video. Använd ett inläggsformat för att visa detta speciella utseende." + +#: wp-includes/js/dist/editor.js:10634 +msgid "Use a post format" +msgstr "Använd ett inläggsformat" + +#: wp-includes/js/dist/editor.js:10531 +msgid "Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post." +msgstr "Etiketter hjälper användare och sökmotorer att navigera runt på webbplatsen och hitta innehållet. Lägg till några nyckelord som beskriver inlägget." + +#: wp-includes/js/dist/editor.js:10527 +msgid "Add tags" +msgstr "Lägg till etiketter" + +#: wp-includes/js/dist/editor.js:10451 +msgctxt "term" +msgid "Remove %s" +msgstr "Ta bort %s" + +#: wp-includes/js/dist/editor.js:10450 +msgctxt "term" +msgid "%s removed" +msgstr "%s togs bort" + +#: wp-includes/js/dist/editor.js:10449 wp-includes/js/dist/editor.js:11606 +msgctxt "term" +msgid "%s added" +msgstr "%s har lagts till" + +#: wp-includes/js/dist/editor.js:10448 wp-includes/js/dist/editor.js:11606 +msgid "Term" +msgstr "Term" + +#: wp-includes/js/dist/editor.js:10448 +msgid "Tag" +msgstr "Etikett" + +#: wp-includes/js/dist/editor.js:10447 +msgid "Add New Term" +msgstr "Lägg till ny term" + +#: wp-includes/js/dist/editor.js:10158 +msgid "Immediately" +msgstr "Genast" + +#: wp-includes/js/dist/editor.js:10034 +msgid "Use a secure password" +msgstr "Använd ett säkert lösenord" + +#: wp-includes/js/dist/editor.js:10028 +msgid "Create password" +msgstr "Skapa lösenord" + +#: wp-includes/js/dist/editor.js:9999 +msgid "Post Visibility" +msgstr "Inläggets synlighet" + +#: wp-includes/js/dist/editor.js:9938 +msgid "Would you like to privately publish this post now?" +msgstr "Vill du publicera detta inlägg privat nu?" + +#: wp-includes/js/dist/editor.js:9878 +msgid "Protected with a password you choose. Only those with the password can view this post." +msgstr "Skyddad med ett lösenord du väljer. Endast de som har lösenordet kan se det här inlägget." + +#: wp-includes/js/dist/editor.js:9874 +msgid "Only visible to site admins and editors." +msgstr "Endast synlig för webbplatsadministratörer och redigerare." + +#: wp-includes/js/dist/editor.js:9870 +msgid "Visible to everyone." +msgstr "Synlig för alla." + +#: wp-includes/js/dist/editor.js:9818 +msgid "Finished writing? That’s great, let’s get this published right now. Just click “Publish” and you’re good to go." +msgstr "Skrivit klart? Det är bra, låt oss nu genast få det publicerat. Klicka bara på ”Publicera” och allt är klart." + +#: wp-includes/js/dist/editor.js:9808 +msgid "Publish…" +msgstr "Publicera..." + +#: wp-includes/js/dist/editor.js:9808 +msgid "Schedule…" +msgstr "Schemalägg..." + +#: wp-includes/js/dist/editor.js:9661 +msgid "Schedule" +msgstr "Tidsinställ" + +#: wp-includes/js/dist/editor.js:9657 +msgid "Submit for Review" +msgstr "Skicka in för recension" + +#: wp-includes/js/dist/editor.js:9653 +msgid "Scheduling…" +msgstr "Schemalägger..." + +#: wp-includes/js/dist/editor.js:9651 +msgid "Updating…" +msgstr "Uppdaterar…" + +#: wp-includes/js/dist/editor.js:9649 +msgid "Publishing…" +msgstr "Publicerar…" + +#: wp-includes/js/dist/editor.js:9612 +msgid "Allow Pingbacks & Trackbacks" +msgstr "Tillåt pingbacks och trackbacks" + +#: wp-includes/js/dist/editor.js:9467 +msgid "Take Over" +msgstr "Ta över" + +#. translators: %s: user's display name +#: wp-includes/js/dist/editor.js:9457 +msgid "Another user is currently working on this post, which means you cannot make changes, unless you take over." +msgstr "En annan användare arbetar för närvarande med detta inlägg, vilket innebär att du inte kan göra ändringar, såvida du inte tar över." + +#. translators: %s: user's display name +#: wp-includes/js/dist/editor.js:9457 +msgid "%s is currently working on this post, which means you cannot make changes, unless you take over." +msgstr "%s arbetar för närvarande med detta inlägg, vilket innebär att du inte kan göra ändringar, såvida du inte tar över." + +#. translators: %s: user's display name +#: wp-includes/js/dist/editor.js:9449 +msgid "Another user now has editing control of this post. Don’t worry, your changes up to this moment have been saved." +msgstr "En annan användare har nu redigeringskontroll över detta inlägg. Oroa dig inte, dina ändringar fram tills nu är sparade." + +#. translators: %s: user's display name +#: wp-includes/js/dist/editor.js:9449 +msgid "%s now has editing control of this post. Don’t worry, your changes up to this moment have been saved." +msgstr "%s har nu redigeringskontroll över detta inlägg. Oroa dig inte, dina ändringar fram tills nu är sparade." + +#: wp-includes/js/dist/editor.js:9445 +msgid "Avatar" +msgstr "Profilbild" + +#: wp-includes/js/dist/editor.js:9437 +msgid "This post is already being edited." +msgstr "Detta inlägg redigeras redan." + +#: wp-includes/js/dist/editor.js:9437 +msgid "Someone else has taken over this post." +msgstr "Någon annan har tagit över detta inlägg." + +#: wp-includes/js/dist/editor.js:9434 +msgid "Exit the Editor" +msgstr "Avsluta redigeraren" + +#: wp-includes/js/dist/editor.js:9200 +msgid "Click “Preview” to load a preview of this page, so you can make sure you’re happy with your blocks." +msgstr "Klicka på ”Förhandsgranska” för att ladda en förhandsvisning av denna sida, så att du kan vara säker på att du är nöjd med dina block." + +#: wp-includes/js/dist/editor.js:9194 +msgctxt "imperative verb" +msgid "Preview" +msgstr "Förhandsgranska" + +#: wp-includes/js/dist/editor.js:9073 wp-includes/js/dist/editor.js:9083 +msgid "Generating preview…" +msgstr "Genererar förhandsgranskning…" + +#: wp-includes/js/dist/editor.js:9020 +msgid "%d Revision" +msgid_plural "%d Revisions" +msgstr[0] "%d version" +msgstr[1] "%d versioner" + +#: wp-includes/js/dist/editor.js:8879 wp-includes/js/dist/editor.js:10524 +#: wp-includes/js/dist/editor.js:10631 +msgid "Suggestion:" +msgstr "Förslag:" + +#: wp-includes/js/dist/editor.js:8865 +msgid "Post Format" +msgstr "Inläggsformat" + +#: wp-includes/js/dist/editor.js:8839 +msgid "Chat" +msgstr "Chatt" + +#: wp-includes/js/dist/editor.js:8830 +msgid "Status" +msgstr "Status" + +#: wp-includes/js/dist/editor.js:8827 +msgid "Standard" +msgstr "Standard" + +#: wp-includes/js/dist/editor.js:8824 wp-includes/js/dist/block-library.js:6521 +msgid "Quote" +msgstr "Citat" + +#: wp-includes/js/dist/editor.js:8812 +msgid "Aside" +msgstr "Notis" + +#: wp-includes/js/dist/editor.js:8714 +#: wp-includes/js/dist/block-library.js:15741 +msgid "Replace image" +msgstr "Ersätt bild" + +#: wp-includes/js/dist/editor.js:8693 +msgid "Edit or update the image" +msgstr "Redigera eller uppdatera bilden" + +#: wp-includes/js/dist/editor.js:8662 +msgid "To edit the featured image, you need permission to upload media." +msgstr "För att redigera den utvalda bilden behöver du behörighet att ladda upp mediafiler." + +#: wp-includes/js/dist/editor.js:8650 +msgid "Set featured image" +msgstr "Ange utvald bild" + +#: wp-includes/js/dist/editor.js:8648 wp-includes/js/dist/edit-post.js:4629 +#: wp-includes/js/dist/edit-post.js:5491 +msgid "Featured Image" +msgstr "Utvald bild" + +#: wp-includes/js/dist/editor.js:8523 +msgid "Learn more about manual excerpts" +msgstr "Lär dig mer om manuella utdrag" + +#: wp-includes/js/dist/editor.js:8522 +msgid "https://codex.wordpress.org/Excerpt" +msgstr "https://codex.wordpress.org/Excerpt" + +#: wp-includes/js/dist/editor.js:8515 +msgid "Write an excerpt (optional)" +msgstr "Skriv ett utdrag (valfritt)" + +#: wp-includes/js/dist/editor.js:8482 +msgid "Allow Comments" +msgstr "Tillåt kommentarer" + +#: wp-includes/js/dist/editor.js:8296 +msgid "Template:" +msgstr "Mall:" + +#: wp-includes/js/dist/editor.js:8225 +msgid "no parent" +msgstr "ingen överordnad" + +#: wp-includes/js/dist/editor.js:8219 +msgid "no title" +msgstr "ingen rubrik" + +#: wp-includes/js/dist/editor.js:8110 +msgid "Order" +msgstr "Ordning" + +#: wp-includes/js/dist/editor.js:7965 +msgid "The editor has encountered an unexpected error." +msgstr "Redigeraren har stött på ett oväntat fel." + +#: wp-includes/js/dist/editor.js:7964 +msgid "Copy Error" +msgstr "Kopieringsfel" + +#: wp-includes/js/dist/editor.js:7960 +msgid "Copy Post Text" +msgstr "Kopiera inläggstext" + +#: wp-includes/js/dist/editor.js:7956 +msgid "Attempt Recovery" +msgstr "Försök återställning" + +#: wp-includes/js/dist/editor.js:7813 +msgid "Reset the template" +msgstr "Återställ mallen" + +#: wp-includes/js/dist/editor.js:7810 +msgid "Keep it as is" +msgstr "Behåll det som det är" + +#: wp-includes/js/dist/editor.js:7807 +msgid "The content of your post doesn’t match the template assigned to your post type." +msgstr "Innehållet i ditt inlägg matchar inte mallen som tilldelats till din inläggstyp." + +#: wp-includes/js/dist/editor.js:7798 +msgid "Resetting the template may result in loss of content, do you want to continue?" +msgstr "Återställning av mallen kan det leda till förlust av innehåll, vill du fortsätta?" + +#: wp-includes/js/dist/editor.js:7407 +msgid "(Multiple H1 headings are not recommended)" +msgstr "(Flera H1-rubriker rekommenderas inte)" + +#: wp-includes/js/dist/editor.js:7402 +msgid "(Your theme may already use a H1 for the post title)" +msgstr "(Ditt tema kan redan använda en H1 för inläggsrubriken)" + +#: wp-includes/js/dist/editor.js:7397 +msgid "(Incorrect heading level)" +msgstr "(Felaktig rubriknivå)" + +#: wp-includes/js/dist/editor.js:7392 +msgid "(Empty heading)" +msgstr "(Tom rubrik)" + +#: wp-includes/js/dist/editor.js:6836 +msgid "Untitled Reusable Block" +msgstr "Block utan rubrik som kan återanvändas" + +#: wp-includes/js/dist/editor.js:6746 +msgid "Block deleted." +msgstr "Block borttaget." + +#: wp-includes/js/dist/editor.js:6631 +msgid "Block created." +msgstr "Block skapad." + +#: wp-includes/js/dist/editor.js:4397 +msgid "Trashing failed" +msgstr "Borttagning misslyckades" + +#: wp-includes/js/dist/editor.js:4383 +msgid "Updating failed" +msgstr "Uppdatering misslyckades" + +#: wp-includes/js/dist/editor.js:4381 +msgid "Scheduling failed" +msgstr "Schemaläggning misslyckades" + +#: wp-includes/js/dist/editor.js:4379 wp-includes/js/dist/editor.js:4380 +msgid "Publishing failed" +msgstr "Publicering misslyckades" + +#. translators: %s: error message describing the problem +#: wp-includes/js/dist/components.js:36430 +msgid "Error loading block: %s" +msgstr "Ett fel inträffade vid laddning av block: %s" + +#: wp-includes/js/dist/components.js:35124 +#: wp-includes/js/dist/block-library.js:19819 +msgid "Number of items" +msgstr "Antal objekt" + +#: wp-includes/js/dist/components.js:35119 +msgid "All" +msgstr "Alla" + +#: wp-includes/js/dist/components.js:35118 wp-includes/js/dist/editor.js:11606 +msgid "Category" +msgstr "Kategori" + +#. translators: label for ordering posts by title in descending order +#: wp-includes/js/dist/components.js:35098 +msgid "Z → A" +msgstr "Z \t A" + +#. translators: label for ordering posts by title in ascending order +#: wp-includes/js/dist/components.js:35094 +msgid "A → Z" +msgstr "A \t Z" + +#: wp-includes/js/dist/components.js:35090 +msgid "Oldest to Newest" +msgstr "Äldsta till nyaste" + +#: wp-includes/js/dist/components.js:35087 +msgid "Newest to Oldest" +msgstr "Nyaste till äldsta" + +#: wp-includes/js/dist/components.js:35084 +msgid "Order by" +msgstr "Sortera efter" + +#: wp-includes/js/dist/components.js:34555 +msgid "Dismiss this notice" +msgstr "Avfärda denna notis" + +#: wp-includes/js/dist/components.js:33791 +msgid "Remove item" +msgstr "Ta bort objektet" + +#: wp-includes/js/dist/components.js:33790 +msgid "Item removed." +msgstr "Objekt borttaget." + +#: wp-includes/js/dist/components.js:33789 +msgid "Item added." +msgstr "Objekt tillagt." + +#: wp-includes/js/dist/components.js:33755 +msgid "Separate with commas" +msgstr "Separera med kommatecken" + +#: wp-includes/js/dist/components.js:33707 +msgid "Add item" +msgstr "Lägg till objekt" + +#. translators: 1: term name, 2: term position in a set of terms, 3: total term +#. set count. +#: wp-includes/js/dist/components.js:32848 +msgid "%1$s (%2$s of %3$s)" +msgstr "%1$s (%2$s av %3$s)" + +#: wp-includes/js/dist/components.js:32619 +msgid "Custom font size" +msgstr "Anpassa typsnittstorlek" + +#. translators: %s: font size name +#: wp-includes/js/dist/components.js:32588 +msgid "Font size: %s" +msgstr "Typsnittsstorlek: %s" + +#: wp-includes/js/dist/components.js:32571 +msgid "Font Size" +msgstr "Textstorlek" + +#: wp-includes/js/dist/components.js:32568 +msgctxt "font size name" +msgid "Custom" +msgstr "Anpassat" + +#: wp-includes/js/dist/components.js:32568 +#: wp-includes/js/dist/block-editor.js:4051 +msgctxt "font size name" +msgid "Normal" +msgstr "Normal" + +#: wp-includes/js/dist/components.js:32508 +#: wp-includes/js/dist/components.js:32630 +#: wp-includes/js/dist/block-library.js:10370 +msgid "Reset" +msgstr "Återställ" + +#: wp-includes/js/dist/components.js:32290 +msgid "Vertical Pos." +msgstr "Vertikal pos." + +#: wp-includes/js/dist/components.js:32279 +msgid "Horizontal Pos." +msgstr "Horisontell pos." + +#: wp-includes/js/dist/components.js:30794 +msgid "Calendar Help" +msgstr "Kalenderhjälp" + +#: wp-includes/js/dist/components.js:30787 +msgid "Go to the first (home) or last (end) day of a week." +msgstr "Gå till veckans första (Home) eller sista (End) dag." + +#: wp-includes/js/dist/components.js:30785 +msgid "Home/End" +msgstr "Home/End" + +#: wp-includes/js/dist/components.js:30784 +msgid "Home and End" +msgstr "Home och End" + +#: wp-includes/js/dist/components.js:30783 +msgid "Move backward (PgUp) or forward (PgDn) by one month." +msgstr "Gå bakåt (PgUp) eller framåt (PgDn) en månad." + +#: wp-includes/js/dist/components.js:30781 +msgid "PgUp/PgDn" +msgstr "PgUp/PgDn" + +#: wp-includes/js/dist/components.js:30780 +msgid "Page Up and Page Down" +msgstr "Page Up och Page Down" + +#: wp-includes/js/dist/components.js:30779 +msgid "Move backward (up) or forward (down) by one week." +msgstr "Gå bakåt (upp) eller framåt (ned) en vecka." + +#: wp-includes/js/dist/components.js:30776 +msgid "Up and Down Arrows" +msgstr "Uppåt- och nedåtpil" + +#: wp-includes/js/dist/components.js:30775 +msgid "Move backward (left) or forward (right) by one day." +msgstr "Gå bakåt (vänster) eller framåt (höger) en dag." + +#: wp-includes/js/dist/components.js:30772 +msgid "Left and Right Arrows" +msgstr "Vänsterpil och högerpil" + +#: wp-includes/js/dist/components.js:30771 +msgid "Select the date in focus." +msgstr "Välj det datum som befinner sig i fokus." + +#: wp-includes/js/dist/components.js:30768 +msgctxt "keyboard button" +msgid "Enter" +msgstr "Enter" + +#: wp-includes/js/dist/components.js:30767 +msgid "Navigating with a keyboard" +msgstr "Navigera med ett tangentbord" + +#: wp-includes/js/dist/components.js:30767 +msgid "Click the desired day to select it." +msgstr "Klicka på önskad dag för att välja den." + +#: wp-includes/js/dist/components.js:30767 +msgid "Click the right or left arrows to select other months in the past or the future." +msgstr "Klicka på höger- eller vänsterpilarna för att välja en annan månad i förfluten tid eller i framtiden." + +#: wp-includes/js/dist/components.js:30767 +msgid "Click to Select" +msgstr "Klicka för att välja" + +#: wp-includes/js/dist/components.js:30664 +msgid "Minutes" +msgstr "Minuter" + +#: wp-includes/js/dist/components.js:30651 +msgid "Hours" +msgstr "Öppettider" + +#: wp-includes/js/dist/components.js:30126 +msgid "Custom Color" +msgstr "Anpassad färg" + +#. translators: %s: The name of the color e.g: "vivid red". +#: wp-includes/js/dist/components.js:30107 +msgid "Color: %s" +msgstr "Färg: %s" + +#. translators: %s: color hex code e.g: "#f00". +#: wp-includes/js/dist/components.js:30100 +#: wp-includes/js/dist/components.js:30108 +msgid "Color code: %s" +msgstr "Färgkod: %s" + +#: wp-includes/js/dist/components.js:30081 +msgid "Custom color picker" +msgstr "Anpassad färgväljare" + +#: wp-includes/js/dist/components.js:29887 +msgid "Use your arrow keys to change the base color. Move up to lighten the color, down to darken, left to decrease saturation, and right to increase saturation." +msgstr "Använd piltangenterna för att ändra grundfärg. Flytta uppåt för ljusare färg, nedåt för mörkare, åt vänster för ökad mättnadsgrad och åt höger för att minska mättnaden." + +#: wp-includes/js/dist/components.js:29879 +msgid "Choose a shade" +msgstr "Välj skugga" + +#: wp-includes/js/dist/components.js:29634 +msgid "Change color format" +msgstr "Ändra färgformat" + +#: wp-includes/js/dist/components.js:29587 +msgid "Color value in HSL" +msgstr "Färgvärde i HSL" + +#: wp-includes/js/dist/components.js:29548 +msgid "Color value in RGB" +msgstr "Färgvärde i RGB" + +#: wp-includes/js/dist/components.js:29540 +msgid "Color value in hexadecimal" +msgstr "Färgvärde i hexadecimal" + +#: wp-includes/js/dist/components.js:29481 +msgid "Hex color mode active" +msgstr "Hexadecimalt färgläget (RGB) är aktivt" + +#: wp-includes/js/dist/components.js:29475 +msgid "Hue/saturation/lightness mode active" +msgstr "Arbetsläget kulör/mättnadsgrad/ljushet är aktivt (hue/saturation/lightness)" + +#: wp-includes/js/dist/components.js:29470 +#: wp-includes/js/dist/components.js:29486 +msgid "RGB mode active" +msgstr "RGB-läge aktiv" + +#: wp-includes/js/dist/components.js:29255 +msgid "Move the arrow left or right to change hue." +msgstr "Flytta pilen åt vänster eller höger för att ändra nyans." + +#: wp-includes/js/dist/components.js:29247 +msgid "Hue value in degrees, from 0 to 359." +msgstr "Nyansvärde i grader, från 0 till 359." + +#: wp-includes/js/dist/components.js:29015 +msgid "Alpha value, from 0 (transparent) to 1 (fully opaque)." +msgstr "Alfa-värde, från 0 (transparent) till 1 (helt ogenomskinligt)." + +#: wp-includes/js/dist/components.js:27728 +#: wp-includes/js/dist/components.js:33378 +#: wp-includes/js/dist/block-editor.js:16345 +msgid "No results." +msgstr "Inga resultat." + +#: wp-includes/js/dist/components.js:27726 +#: wp-includes/js/dist/components.js:33376 +#: wp-includes/js/dist/block-editor.js:16343 +msgid "%d result found, use up and down arrow keys to navigate." +msgid_plural "%d results found, use up and down arrow keys to navigate." +msgstr[0] "%d resultat hittades, använd upp och nedpilarna för att navigera." +msgstr[1] "%d resultat hittades, använd upp och nedpilarna för att navigera." + +#. translators: %s: site name +#: wp-links-opml.php:33 +msgid "Links for %s" +msgstr "Länkar för %s" + +#. translators: %s: site address +#: wp-signup.php:989 +msgid "The site you were looking for, %s, does not exist." +msgstr "Webbplatsen du söker, %s, existerar inte." + +#. translators: %s: site address +#: wp-signup.php:983 +msgid "The site you were looking for, %s, does not exist, but you can create it now!" +msgstr "Webbplatsen du letar efter, %s, existerar inte, men du kan skapa den nu!" + +#: wp-signup.php:974 +msgid "You are logged in already. No need to register again!" +msgstr "Du är redan inloggad. Du behöver inte registrera dig igen!" + +#: wp-signup.php:972 +msgid "Sorry, new registrations are not allowed at this time." +msgstr "Beklagar, nya registreringar tillåts inte just nu." + +#: wp-signup.php:952 +msgid "Site registration has been disabled." +msgstr "Registrering av nya webbplatser ha inaktiverats." + +#: wp-signup.php:945 +msgid "User registration has been disabled." +msgstr "Registrering av nya användare ha inaktiverats." + +#. translators: %s: login URL +#: wp-signup.php:934 +msgid "You must first log in, and then you can create a new site." +msgstr "Du måste först logga in, sen kan du skapa en ny webbplats." + +#: wp-signup.php:930 +msgid "Registration has been disabled." +msgstr "Nya registreringar har inaktiverats." + +#. translators: %s: network settings URL +#: wp-signup.php:922 +msgid "To change or disable registration go to your Options page." +msgstr "Gå till dina inställningssida för att ändra eller inaktivera registreringar." + +#: wp-signup.php:915 +msgid "The network currently allows both site and user registrations." +msgstr "För närvarande tillåter nätverket registrering av både webbplatser och användare." + +#: wp-signup.php:912 +msgid "The network currently allows user registrations." +msgstr "För närvarande tillåter nätverket registrering av användare." + +#: wp-signup.php:909 +msgid "The network currently allows site registrations." +msgstr "För närvarande tillåter nätverket registrering av webbplatser." + +#: wp-signup.php:906 +msgid "The network currently disallows registrations." +msgstr "För närvarande tillåter inte nätverket registreringar." + +#: wp-signup.php:901 +msgid "Greetings Network Administrator!" +msgstr "Hej, nätverksadministratör!" + +#. translators: %s: email address +#: wp-signup.php:843 +msgid "Have you entered your email correctly? You have entered %s, if it’s incorrect, you will not receive your email." +msgstr "Har du angett din e-postadress korrekt? Du har angett %s, om denna adress är felaktig så kommer du inte att få något mail." + +#: wp-signup.php:839 +msgid "Check the junk or spam folder of your email client. Sometime emails wind up there by mistake." +msgstr "Kontrollera skräp- eller skräppostmappen i din e-postklient. Ibland slinker e-post in där av misstag." + +#: wp-signup.php:838 +msgid "Wait a little longer. Sometimes delivery of email can be delayed by processes outside of our control." +msgstr "Vänta lite längre. Ibland kan leverans av e-post försenas av yttre processer som vi inte kan kontrollera." + +#: wp-signup.php:836 +msgid "If you haven’t received your email yet, there are a number of things you can do:" +msgstr "Om du inte fått din e-post ännu, finns det ett antal saker du kan göra:" + +#: wp-signup.php:834 +msgid "Still waiting for your email?" +msgstr "Väntar du fortfarande på din e-post?" + +#: wp-signup.php:833 +msgid "If you do not activate your site within two days, you will have to sign up again." +msgstr "Om du inte aktiverar ditt användarnamn inom 2 dagar så måste du registrera dig igen." + +#: wp-signup.php:826 +msgid "But, before you can start using your site, you must activate it." +msgstr "Men, innan du kan börja använda din webbplats så måste du aktivera den." + +#. translators: %s: site address +#: wp-signup.php:822 +msgid "Congratulations! Your new site, %s, is almost ready." +msgstr "Grattis! Din nya webbplats, %s, är nästan redo att använda." + +#: wp-signup.php:741 +msgid "Signup" +msgstr "Registrera dig" + +#: wp-signup.php:675 +msgid "If you do not activate your username within two days, you will have to sign up again." +msgstr "Om du inte aktiverar ditt användarnamn inom 2 dagar så måste du registrera dig igen." + +#. translators: %s: email address +#: wp-signup.php:672 wp-signup.php:830 +msgid "Check your inbox at %s and click the link given." +msgstr "Kolla din inkorg för %s och klicka på angiven länk." + +#: wp-signup.php:668 +msgid "But, before you can start using your new username, you must activate it." +msgstr "Men, innan du kan börja använda ditt nya användarnamn så måste du aktivera det." + +#. translators: %s: username +#: wp-signup.php:665 +msgid "%s is your new username" +msgstr "%s är ditt nya användarnamn" + +#: wp-signup.php:613 +msgid "Just a username, please." +msgstr "Ange bara användarnamnet." + +#: wp-signup.php:610 +msgid "Gimme a site!" +msgstr "Ge mig en webbplats!" + +#. translators: %s: name of the network +#: wp-signup.php:592 +msgid "Get your own %s account in seconds" +msgstr "Skapa ett eget %s konto på bara några sekunder" + +#. translators: 1: link to new site, 2: login URL, 3: username +#: wp-signup.php:525 +msgid "%1$s is your new site. Log in as “%3$s” using your existing password." +msgstr "%1$s är din nya webbplats. Logga in som ”%3$s” med ditt nuvarande lösenord." + +#. translators: %s: site name +#: wp-signup.php:518 +msgid "The site %s is yours." +msgstr "Webbplatsen %s är din." + +#: wp-signup.php:385 +msgid "Create Site" +msgstr "Skapa webbplats" + +#: wp-signup.php:370 +msgid "If you’re not going to use a great site domain, leave it for a new user. Now have at it!" +msgstr "Om du inte ska använda den här webbplatsdomänen, låt någon annan få möjligheten att använda den." + +#: wp-signup.php:359 +msgid "Sites you are already a member of:" +msgstr "Webbplatser som du redan är medlem på:" + +#. translators: %s: Current user's display name. +#: wp-signup.php:348 +msgid "Welcome back, %s. By filling out the form below, you can add another site to your account. There is no limit to the number of sites you can have, so create to your heart’s content, but write responsibly!" +msgstr "Välkommen tillbaka, %s. Genom att fylla i formuläret nedan så kan du skapa flera webbplatser för ditt konto. Det finns ingen gräns för hur många webbplatser du kan skapa. Publicera material ansvarsfullt." + +#: wp-signup.php:341 +msgid "There was a problem, please correct the form below and try again." +msgstr "Ett fel har uppstått. Vänligen kontrollera formuläret nedan och försök igen." + +#. translators: %s: Network's site name. +#: wp-signup.php:338 +msgid "Get another %s site in seconds" +msgstr "Skapa en till %s webbplats på bara några sekunder" + +#: wp-signup.php:269 +msgid "We send your registration email to this address. (Double-check your email address before continuing.)" +msgstr "Vi skickar din e-postregistrering till denna adress. (Dubbelkontrollera din e-postadress innan du fortsätter.)" + +#: wp-signup.php:262 +msgid "Email Address:" +msgstr "E-postadress:" + +#: wp-signup.php:259 +msgid "(Must be at least 4 characters, letters and numbers only.)" +msgstr "(Måste bestå av minst 4 tecken, endast bokstäver och siffror.)" + +#: wp-signup.php:206 +msgid "No" +msgstr "Nej" + +#: wp-signup.php:202 +msgid "Yes" +msgstr "Ja" + +#: wp-signup.php:198 +msgid "Allow search engines to index this site." +msgstr "Tillåt sökmotorer att indexera denna webbplats." + +#: wp-signup.php:197 +msgid "Privacy:" +msgstr "Integritet:" + +#: wp-signup.php:158 +msgid "Site Language:" +msgstr "Webbplatsspråk:" + +#: wp-signup.php:140 +msgid "Site Title:" +msgstr "Webbplatsrubrik:" + +#. translators: %s: site address +#: wp-signup.php:135 +msgid "Must be at least 4 characters, letters and numbers only. It cannot be changed, so choose carefully!" +msgstr "Måste bestå av minst 4 tecken, endast bokstäver och siffror. Detta kan inte ändras, så välj varsamt!" + +#. translators: %s: site address +#: wp-signup.php:135 +msgid "Your address will be %s." +msgstr "Din adress kommer att bli %s." + +#: wp-signup.php:131 +msgid "domain" +msgstr "domän" + +#: wp-signup.php:129 +msgid "sitename" +msgstr "webbplatsnamn" + +#: wp-signup.php:110 +msgid "Site Domain:" +msgstr "Webbplatsdomän:" + +#: wp-signup.php:108 +msgid "Site Name:" +msgstr "Webbplatsnamn:" + +#: wp-includes/nav-menu.php:423 +msgid "Invalid menu ID." +msgstr "Ogiltigt meny-ID." + +#: wp-includes/nav-menu.php:417 +msgid "The given object ID is not that of a menu item." +msgstr "Objekt ID angivet är inte det för ett menyval." + +#: wp-includes/nav-menu.php:332 wp-includes/nav-menu.php:347 +msgid "The menu name %s conflicts with another menu name. Please try another." +msgstr "Menynamnet %s står i konflikt med ett annat menynamn. Försök med ett annat namn." + +#: wp-includes/class-walker-comment.php:304 +msgid "(Edit)" +msgstr "(Redigera)" + +#. translators: 1: comment date, 2: comment time +#: wp-includes/class-walker-comment.php:300 +#: wp-includes/class-walker-comment.php:387 +msgid "%1$s at %2$s" +msgstr "%1$s kl. %2$s" + +#: wp-includes/class-walker-comment.php:287 +#: wp-includes/class-walker-comment.php:376 +msgid "%s says:" +msgstr "%s skriver:" + +#: wp-includes/class-walker-comment.php:271 +#: wp-includes/class-walker-comment.php:361 +msgid "Your comment is awaiting moderation. This is a preview, your comment will be visible after it has been approved." +msgstr "Din kommentar inväntar granskning. Detta är en förhandsvisning. Din kommentar blir synlig när den har godkänts." + +#: wp-includes/class-walker-comment.php:269 +#: wp-includes/class-walker-comment.php:359 +msgid "Your comment is awaiting moderation." +msgstr "Din kommentar inväntar granskning." + +#: wp-includes/class-walker-comment.php:242 +msgid "Pingback:" +msgstr "Pingback:" + +#: wp-includes/class-wp-recovery-mode.php:246 +msgid "Failed to exit recovery mode. Please try again later." +msgstr "Det gick inte att avsluta räddningsläge. Försök igen senare." + +#: wp-includes/class-wp-recovery-mode.php:242 +msgid "Exit recovery mode link expired." +msgstr "Länken för att avsluta räddningsläge har löpt ut." + +#: wp-includes/class-wp-recovery-mode.php:188 +msgid "Failed to store the error." +msgstr "Lyckades inte spara felet." + +#: wp-includes/class-wp-recovery-mode.php:177 +msgid "Error occurred on a non-protected endpoint." +msgstr "Ett fel har inträffat på en ej skyddad ändpunkt." + +#: wp-includes/class-wp-recovery-mode.php:172 +msgid "Error not caused by a plugin or theme." +msgstr "Felet orsakades inte av något tillägg eller tema." + +#: wp-includes/class-wp-oembed-controller.php:146 +msgid "Sorry, you are not allowed to make proxied oEmbed requests." +msgstr "Du saknar behörighet att utföra oEmbed-begäran via proxy." + +#: wp-includes/class-wp-oembed-controller.php:95 +msgid "Whether to perform an oEmbed discovery request for non-whitelisted providers." +msgstr "Huruvida en begäran för efterfrågan om oEmbed ska utföras för tjänster som inte är vitlistade." + +#: wp-includes/class-wp-oembed-controller.php:90 +msgid "The maximum height of the embed frame in pixels." +msgstr "Maximal höjd hos embed-ramen i pixlar." + +#: wp-includes/class-wp-oembed-controller.php:84 +msgid "The maximum width of the embed frame in pixels." +msgstr "Maximal bredd hos embed-ramen i pixlar." + +#: wp-includes/class-wp-oembed-controller.php:75 +msgid "The oEmbed format to use." +msgstr "Format som används för oEmbed." + +#: wp-includes/class-wp-oembed-controller.php:69 +msgid "The URL of the resource for which to fetch oEmbed data." +msgstr "Resursens URL för hämtning av oEmbed-uppgifter." + +#. translators: %s: theme name +#: wp-includes/class-wp-recovery-mode-email-service.php:263 +msgid "In this case, WordPress caught an error with your theme, %s." +msgstr "I detta fall har WordPress upptäckt ett fel med ditt tema, %s." + +#. translators: %s: plugin name +#: wp-includes/class-wp-recovery-mode-email-service.php:257 +msgid "In this case, WordPress caught an error with one of your plugins, %s." +msgstr "I detta fall har WordPress upptäckt ett fel med ett av dina tillägg, %s." + +#. translators: %s: site name +#: wp-includes/class-wp-recovery-mode-email-service.php:177 +msgid "[%s] Your Site is Experiencing a Technical Issue" +msgstr "[%s] Din webbplats har råkat ut för ett tekniskt problem" + +#. translators: Do not translate LINK, EXPIRES, CAUSE, DETAILS, SITEURL, +#. PAGEURL, SUPPORT: those are placeholders. +#: wp-includes/class-wp-recovery-mode-email-service.php:135 +msgid "" +"Howdy!\n" +"\n" +"Since WordPress 5.2 there is a built-in feature that detects when a plugin or theme causes a fatal error on your site, and notifies you with this automated email.\n" +"###CAUSE###\n" +"First, visit your website (###SITEURL###) and check for any visible issues. Next, visit the page where the error was caught (###PAGEURL###) and check for any visible issues.\n" +"\n" +"###SUPPORT###\n" +"\n" +"If your site appears broken and you can't access your dashboard normally, WordPress now has a special \"recovery mode\". This lets you safely login to your dashboard and investigate further.\n" +"\n" +"###LINK###\n" +"\n" +"To keep your site safe, this link will expire in ###EXPIRES###. Don't worry about that, though: a new link will be emailed to you if the error occurs again after it expires.\n" +"\n" +"###DETAILS###" +msgstr "" +"Hej!\n" +"\n" +"Från och med WordPress 5.2 finns det en inbyggd funktion som kan upptäcka när något tillägg eller tema orsakar ett allvarligt fel på din webbplats och informerar dig via detta e-postmeddelande som skickas automatiskt.\n" +"###CAUSE###\n" +"Börja med att besöka din webbplats (###SITEURL###) och kontrollera om du märker några synliga problem. Därefter går du till sidan där problemet inträffade (###PAGEURL###) för att kontrollera om du ser något där.\n" +"\n" +"###SUPPORT###\n" +"\n" +"Om det skulle se ut som om webbplatsen inte fungerar och du inte kommer åt adminpanelen som du borde, har WordPress nu ett speciellt ”räddningsläge”. Det låter dig på ett säkert sätt logga in i adminpanelen för att undersöka problemet vidare.\n" +"\n" +"###LINK###\n" +"\n" +"För att inte äventyra säkerheten på din webbplats kommer denna länk att gälla endast ###EXPIRES###. Oroa dig inte över detta. Om felet skulle inträffa igen efter det kommer du att få ett nytt e-postmeddelande med en ny länk.\n" +"\n" +"###DETAILS###" + +#: wp-includes/class-wp-recovery-mode-email-service.php:132 +msgid "Please contact your host for assistance with investigating this issue further." +msgstr "Kontakta ditt webbhotell för att be om mer hjälp med detta problem." + +#: wp-includes/class-wp-recovery-mode-email-service.php:117 +msgid "Error Details" +msgstr "Uppgifter om felet" + +#. translators: 1. Last sent as a human time diff 2. Wait time as a human time +#. diff. +#: wp-includes/class-wp-recovery-mode-email-service.php:70 +msgid "A recovery link was already sent %1$s ago. Please wait another %2$s before requesting a new email." +msgstr "En räddningslänk skickades för %1$s sedan. Vänta i %2$s innan du begär ett nytt meddelande." + +#: wp-includes/class-wp-recovery-mode-email-service.php:56 +msgid "Could not update the email last sent time." +msgstr "Det gick inte att uppdatera tidpunkten för senast skickade e-postmeddelande." + +#. translators: %s: block name +#: wp-includes/class-wp-block-type-registry.php:107 +msgid "Block type \"%s\" is not registered." +msgstr "Blocktypen ”%s” är inte registrerad." + +#. translators: %s: block name +#: wp-includes/class-wp-block-type-registry.php:77 +msgid "Block type \"%s\" is already registered." +msgstr "Blocktypen ”%s” är redan registrerad." + +#: wp-includes/class-wp-block-type-registry.php:70 +msgid "Block type names must contain a namespace prefix. Example: my-plugin/my-custom-block-type" +msgstr "Namn på blocktyper måste innehålla namnrymdsprefix. Till exempel: my-plugin/my-custom-block-type" + +#: wp-includes/class-wp-block-type-registry.php:63 +msgid "Block type names must not contain uppercase characters." +msgstr "Namn på blocktyper får inte innehålla versaler." + +#: wp-includes/class-wp-block-type-registry.php:57 +msgid "Block type names must be strings." +msgstr "Namn på blocktyper måste bestå av strängar." + +#: wp-includes/class-wp-query.php:1450 +msgctxt "Comma-separated list of search stopwords in your language" +msgid "about,an,are,as,at,be,by,com,for,from,how,in,is,it,of,on,or,that,the,this,to,was,what,when,where,who,will,with,www" +msgstr "en,ett,av,i,att,och,eller,var,är,det,den,vad,med,de,dom,www,vara,som,om,till,på" + +#. translators: %s: database table name +#: wp-includes/ms-site.php:1323 +msgid "The %s table is not installed. Please run the network database upgrade." +msgstr "Tabellen %s är inte installerad. Kör uppgraderingen av nätverksdatabasen" + +#: wp-includes/ms-site.php:810 +msgid "The site appears to be already uninitialized." +msgstr "Denna webbplats verkar redan ha avinitialiserats." + +#. translators: %d: site ID +#: wp-includes/ms-site.php:692 +msgid "Site %d" +msgstr "Webbplats %d" + +#: wp-includes/ms-site.php:679 +msgid "The site appears to be already initialized." +msgstr "Denna webbplats verkar redan ha initialiserats." + +#: wp-includes/ms-site.php:675 wp-includes/ms-site.php:806 +msgid "Site with the ID does not exist." +msgstr "Det finns ingen webbplats med detta ID." + +#: wp-includes/ms-site.php:619 +msgid "Both registration and last updated dates must be valid dates." +msgstr "Både datum för senast uppdaterad och registreringsdatum måste vara giltiga datum." + +#: wp-includes/ms-site.php:608 +msgid "Both registration and last updated dates must be provided." +msgstr "Både datum för senast uppdatering och registreringsdatum måste anges." + +#: wp-includes/ms-site.php:601 +msgid "Site network ID must be provided." +msgstr "Webbplatsens nätverks-ID måste anges." + +#: wp-includes/ms-site.php:596 +msgid "Site path must not be empty." +msgstr "Webbplatsens sökväg får inte vara tom." + +#: wp-includes/ms-site.php:591 +msgid "Site domain must not be empty." +msgstr "Webbplatsens domän får inte vara tom." + +#: wp-includes/ms-site.php:262 +msgid "Could not delete site from the database." +msgstr "Det gick inte att ta bort webbplatsen ur databasen." + +#: wp-includes/ms-site.php:173 +msgid "Could not update site in the database." +msgstr "Det gick inte att uppdatera webbplatsen i databasen." + +#: wp-includes/ms-site.php:159 wp-includes/ms-site.php:212 +msgid "Site does not exist." +msgstr "Webbplatsen finns inte." + +#: wp-includes/ms-site.php:154 wp-includes/ms-site.php:207 +#: wp-includes/ms-site.php:670 wp-includes/ms-site.php:801 +msgid "Site ID must not be empty." +msgstr "Webbplats-ID får inte vara tomt." + +#: wp-includes/ms-site.php:75 +msgid "Could not retrieve site data." +msgstr "Lyckades inte hämta data för webbplatsen." + +#: wp-includes/ms-site.php:69 +msgid "Could not insert site into the database." +msgstr "Det gick inte att lägga till webbplatsen i databasen." + +#: wp-includes/class-wp-customize-nav-menus.php:1198 +msgid "Add to Menu" +msgstr "Lägg till i meny" + +#: wp-includes/class-wp-customize-nav-menus.php:1182 +msgid "Toggle section: Custom Links" +msgstr "Visa/dölj sektion: Anpassade länkar" + +#: wp-includes/class-wp-customize-nav-menus.php:1180 +msgid "Custom Links" +msgstr "Anpassade länkar" + +#. translators: %s: Title of a section with menu items +#: wp-includes/class-wp-customize-nav-menus.php:1146 +msgid "Toggle section: %s" +msgstr "Visa/dölj sektion: %s" + +#: wp-includes/class-wp-customize-nav-menus.php:1141 +msgid "No items" +msgstr "Inga val" + +#: wp-includes/class-wp-customize-nav-menus.php:1091 +msgid "Search menu items…" +msgstr "Sök menyval…" + +#: wp-includes/class-wp-customize-nav-menus.php:1090 +msgid "Search Menu Items" +msgstr "Sök menyval" + +#: wp-includes/class-wp-customize-nav-menus.php:1085 +msgid "Add Menu Items" +msgstr "Lägg till menyval" + +#: wp-includes/class-wp-customize-nav-menus.php:1059 +msgid "Create New Menu" +msgstr "Skapa ny meny" + +#: wp-includes/class-wp-customize-nav-menus.php:1055 +msgid "You’ll create a menu, assign it a location, and add menu items like links to pages and categories. If your theme has multiple menu areas, you might need to create more than one." +msgstr "Du skapar en meny, kopplar den till en menyposition och lägger sedan till menyval, t.ex. länkar till olika sidor och kategorier. Om ditt tema har flera menypositioner kan du behöva skapa fler än en meny." + +#: wp-includes/class-wp-customize-nav-menus.php:1052 +msgid "It doesn’t look like your site has any menus yet. Want to build one? Click the button to start." +msgstr "Det verkar inte som om din webbplats har någon meny ännu. Vill du skapa en? Klicka på knappen för att komma igång." + +#: wp-includes/class-wp-customize-nav-menus.php:1041 +msgid "Click “Next” to start adding links to your new menu." +msgstr "Klicka på ”Nästa” för att börja lägga till länkar i din nya meny." + +#: wp-includes/class-wp-customize-nav-menus.php:1035 +msgid "Delete Menu" +msgstr "Radera meny" + +#: wp-includes/class-wp-customize-nav-menus.php:1026 +msgid "Move one level down" +msgstr "Flytta ner en nivå" + +#: wp-includes/class-wp-customize-nav-menus.php:1025 +msgid "Move one level up" +msgstr "Flytta upp en nivå" + +#. translators: 1: title of a menu item, 2: type of a menu item +#: wp-includes/class-wp-customize-nav-menus.php:1009 +msgid "Add to menu: %1$s (%2$s)" +msgstr "Lägg till i meny: %1$s (%2$s)" + +#. translators: 1: post type name, 2: error message +#: wp-includes/class-wp-customize-nav-menus.php:975 +msgid "%1$s could not be created: %2$s" +msgstr "%1$s gick inte att skapa: %2$s" + +#: wp-includes/class-wp-customize-nav-menus.php:970 +msgid "Post" +msgstr "Inlägg" + +#: wp-includes/class-wp-customize-nav-menus.php:884 +msgid "Status is forbidden" +msgstr "Förbjuden status" + +#: wp-includes/class-wp-customize-nav-menus.php:881 +msgid "Empty title" +msgstr "Ingen rubrik" + +#: wp-includes/class-wp-customize-nav-menus.php:775 +msgid "New Menu" +msgstr "Ny meny" + +#: wp-includes/class-wp-customize-nav-menus.php:634 +msgctxt "menu locations" +msgid "View All Locations" +msgstr "Se alla platser" + +#: wp-includes/class-wp-customize-nav-menus.php:634 +msgctxt "menu locations" +msgid "View Location" +msgstr "Se platsen" + +#. translators: URL to the widgets panel of the customizer +#: wp-includes/class-wp-customize-nav-menus.php:628 +msgid "If your theme has widget areas, you can also add menus there. Visit the Widgets panel and add a “Navigation Menu widget” to display a menu in a sidebar or footer." +msgstr "Om ditt tema har widgetområden kan du även lägga till menyer där. Gå till widgetpanelen och lägga till en widget ”Navigationsmenywidget” för att visa en meny i en sidopanel eller i sidfoten." + +#. translators: %s: number of menu locations +#: wp-includes/class-wp-customize-nav-menus.php:623 +msgid "Your theme can display menus in %s location. Select which menu you would like to use." +msgid_plural "Your theme can display menus in %s locations. Select which menu appears in each location." +msgstr[0] "Ditt tema innehåller %s plats för menyer. Välj vilken meny du vill använda." +msgstr[1] "Ditt tema innehåller %s platser för menyer. Välj vilken meny du vill använda på respektive plats." + +#: wp-includes/class-wp-customize-nav-menus.php:620 +msgid "Your theme can display menus in one location. Select which menu you would like to use." +msgstr "Ditt tema kan visa menyer på en plats. Välj vilken meny du vill använda." + +#: wp-includes/class-wp-customize-nav-menus.php:596 +msgid "Menus can be displayed in locations defined by your theme." +msgstr "Menyer kan visas på platser som definierats av ditt tema." + +#. translators: URL to the widgets panel of the customizer +#: wp-includes/class-wp-customize-nav-menus.php:594 +msgid "Menus can be displayed in locations defined by your theme or in widget areas by adding a “Navigation Menu” widget." +msgstr "Menyer kan visas på platser som ditt tema definierat eller i widgetfält med hjälp av ”widgeten Navigationsmeny”." + +#: wp-includes/class-wp-customize-nav-menus.php:591 +msgid "This panel is used for managing navigation menus for content you have already published on your site. You can create menus and add items for existing content such as pages, posts, categories, tags, formats, or custom links." +msgstr "Denna panel används för att hantera menyer för innehåll som redan är publicerat på din webbplats. Du kan skapa menyer och lägga till val för befintligt innehåll, såsom sidor, inlägg, kategorier, etiketter, format eller anpassade länkar." + +#. translators: 1: item name, 2: item position, 3: parent item name +#: wp-includes/class-wp-customize-nav-menus.php:506 +msgid "%1$s. Sub item number %2$d under %3$s." +msgstr "%1$s. Undervalsnummer %2$d under %3$s." + +#. translators: 1: item name, 2: item position, 3: total number of items +#: wp-includes/class-wp-customize-nav-menus.php:504 +msgid "%1$s. Menu item %2$d of %3$d." +msgstr "%1$s. Menyval %2$d av %3$d." + +#. translators: %s: previous item name +#: wp-includes/class-wp-customize-nav-menus.php:502 +msgid "Out from under %s" +msgstr "Ut från under %s" + +#. translators: %s: previous item name +#: wp-includes/class-wp-customize-nav-menus.php:500 +msgid "Under %s" +msgstr "Under %s" + +#. translators: %s: previous item name +#: wp-includes/class-wp-customize-nav-menus.php:498 +msgid "Move out from under %s" +msgstr "Flytta ut från under %s" + +#. translators: %s: previous item name +#: wp-includes/class-wp-customize-nav-menus.php:496 +msgid "Move under %s" +msgstr "Flytta under %s" + +#: wp-includes/class-wp-customize-nav-menus.php:494 +msgid "Move to the top" +msgstr "Flytta till toppen" + +#: wp-includes/class-wp-customize-nav-menus.php:493 +msgid "Move down one" +msgstr "Flytta ner ett steg" + +#: wp-includes/class-wp-customize-nav-menus.php:492 +msgid "Move up one" +msgstr "Flytta upp ett steg" + +#: wp-includes/class-wp-customize-nav-menus.php:475 +msgid "Close reorder mode" +msgstr "Avsluta ordningsläge" + +#: wp-includes/class-wp-customize-nav-menus.php:471 +msgid "Loading more results... please wait." +msgstr "Laddar in fler resultat... var vänlig vänta." + +#: wp-includes/class-wp-customize-nav-menus.php:470 +msgid "Additional items found: %d" +msgstr "Extra val funna: %d" + +#: wp-includes/class-wp-customize-nav-menus.php:469 +msgid "Number of items found: %d" +msgstr "Antal objekt hittade: %d" + +#. translators: %s: title of menu item in draft status +#: wp-includes/class-wp-customize-nav-menus.php:468 +msgid "%s (Pending)" +msgstr "%s (Väntande)" + +#. translators: %s: title of menu item which is invalid +#: wp-includes/class-wp-customize-nav-menus.php:466 +msgid "%s (Invalid)" +msgstr "%s (ogiltig)" + +#: wp-includes/class-wp-customize-nav-menus.php:462 +msgid "Menu item is now a sub-item" +msgstr "Menyvalet är nu ett underval" + +#: wp-includes/class-wp-customize-nav-menus.php:461 +msgid "Menu item moved out of submenu" +msgstr "Menyval utflyttat från undermeny" + +#: wp-includes/class-wp-customize-nav-menus.php:460 +msgid "Menu item moved down" +msgstr "Menyval nedflyttat" + +#: wp-includes/class-wp-customize-nav-menus.php:459 +msgid "Menu item moved up" +msgstr "Menyval uppflyttat" + +#: wp-includes/class-wp-customize-nav-menus.php:458 +msgid "Menu deleted" +msgstr "Menyn har raderats" + +#: wp-includes/class-wp-customize-nav-menus.php:457 +msgid "Menu created" +msgstr "Meny skapad" + +#: wp-includes/class-wp-customize-nav-menus.php:456 +msgid "Menu item deleted" +msgstr "Menyval raderat" + +#: wp-includes/class-wp-customize-nav-menus.php:455 +msgid "Menu item added" +msgstr "Menyval tillagt" + +#: wp-includes/class-wp-customize-nav-menus.php:454 +msgid "If your theme has multiple menus, giving them clear names will help you manage them." +msgstr "Om ditt tema har flera menyer kan det bli enklare att hantera dem om du namnger dem." + +#: wp-includes/class-wp-customize-nav-menus.php:453 +msgid "Menu Name" +msgstr "Namn för meny" + +#: wp-includes/class-wp-customize-nav-menus.php:451 +msgid "Menu Locations" +msgstr "Menypositioner " + +#: wp-includes/class-wp-customize-nav-menus.php:451 +msgid "Menu Location" +msgstr "Menyposition" + +#. translators: %s: menu location +#: wp-includes/class-wp-customize-nav-menus.php:450 +msgctxt "menu" +msgid "(Currently set to: %s)" +msgstr "(Just nu satt till: %s)" + +#. translators: %s: number of menu locations +#: wp-includes/class-wp-customize-nav-menus.php:437 +msgid "Your theme can display menus in %s location." +msgid_plural "Your theme can display menus in %s locations." +msgstr[0] "Ditt tema kan visa menyer på %s plats." +msgstr[1] "Ditt tema kan visa menyer på %s platser." + +#: wp-includes/class-wp-customize-nav-menus.php:434 +msgid "Your theme can display menus in one location." +msgstr "Ditt tema kan visa menyer på en plats." + +#: wp-includes/class-wp-customize-nav-menus.php:153 +#: wp-includes/class-wp-customize-nav-menus.php:393 +msgctxt "nav menu home label" +msgid "Home" +msgstr "Hem" + +#: wp-includes/class-wp-recovery-mode-key-service.php:113 +msgid "Recovery key expired." +msgstr "Räddningsnyckeln gäller inte längre." + +#: wp-includes/class-wp-recovery-mode-key-service.php:109 +msgid "Invalid recovery key." +msgstr "Ogiltig räddningsnyckel." + +#: wp-includes/class-wp-recovery-mode-key-service.php:105 +msgid "Invalid recovery key format." +msgstr "Ogiltigt format för räddningsnyckel." + +#: wp-includes/class-wp-recovery-mode-key-service.php:97 +msgid "Recovery Mode not initialized." +msgstr "Räddningsläge har inte initierats." + +#: wp-includes/plugin.php:826 +msgid "Only a static class method or function can be used in an uninstall hook." +msgstr "Endast en statisk klassmetod eller funktion kan användas för avinstallations-hook." + +#: wp-includes/post-formats.php:106 +msgctxt "Post format" +msgid "Audio" +msgstr "Ljud" + +#: wp-includes/post-formats.php:105 +msgctxt "Post format" +msgid "Video" +msgstr "Video" + +#: wp-includes/post-formats.php:104 +msgctxt "Post format" +msgid "Status" +msgstr "Status" + +#: wp-includes/post-formats.php:103 +msgctxt "Post format" +msgid "Quote" +msgstr "Citat" + +#: wp-includes/post-formats.php:102 +msgctxt "Post format" +msgid "Image" +msgstr "Bild" + +#: wp-includes/post-formats.php:101 +msgctxt "Post format" +msgid "Link" +msgstr "Länk" + +#: wp-includes/post-formats.php:100 +msgctxt "Post format" +msgid "Gallery" +msgstr "Galleri " + +#: wp-includes/post-formats.php:99 +msgctxt "Post format" +msgid "Chat" +msgstr "Chatt" + +#: wp-includes/post-formats.php:98 +msgctxt "Post format" +msgid "Aside" +msgstr "Notis" + +#: wp-includes/post-formats.php:97 +msgctxt "Post format" +msgid "Standard" +msgstr "Standard" + +#: wp-includes/post-formats.php:73 +msgid "Invalid post." +msgstr "Ogiltigt inlägg." + +#. translators: %s: category name +#: wp-includes/class-walker-category.php:169 +msgid "Feed for all posts filed under %s" +msgstr "Flöde för alla inlägg i kategorin %s" + +#. translators: user role for subscriber +#: wp-includes/capabilities.php:1019 +msgctxt "User role" +msgid "Subscriber" +msgstr "Prenumerant" + +#. translators: user role for contributors +#: wp-includes/capabilities.php:1017 +msgctxt "User role" +msgid "Contributor" +msgstr "Bidragsgivare" + +#. translators: user role for authors +#: wp-includes/capabilities.php:1015 +msgctxt "User role" +msgid "Author" +msgstr "Författare" + +#. translators: user role for editors +#: wp-includes/capabilities.php:1013 +msgctxt "User role" +msgid "Editor" +msgstr "Redaktör" + +#. translators: user role for administrators +#: wp-includes/capabilities.php:1011 +msgctxt "User role" +msgid "Administrator" +msgstr "Administratör" + +#. translators: 1: post type, 2: capability name +#: wp-includes/capabilities.php:84 wp-includes/capabilities.php:155 +#: wp-includes/capabilities.php:224 wp-includes/capabilities.php:262 +msgid "The post type %1$s is not registered, so it may not be reliable to check the capability \"%2$s\" against a post of that type." +msgstr "Posttypen %1$s är inte registrerad, det är kanske inte tillförlitligt att kontrollera behörigheten \"%2$s\" mot ett inlägg av denna typ." + +#. translators: Network admin email change notification email subject. %s: +#. Network title +#: wp-includes/ms-functions.php:2708 +msgid "[%s] Network Admin Email Changed" +msgstr "[%s] Ändrad e-postadress för nätverksadministratör" + +#. translators: Do not translate OLD_EMAIL, NEW_EMAIL, SITENAME, SITEURL: those +#. are placeholders. +#: wp-includes/ms-functions.php:2691 +msgid "" +"Hi,\n" +"\n" +"This notice confirms that the network admin email address was changed on ###SITENAME###.\n" +"\n" +"The new network admin email address is ###NEW_EMAIL###.\n" +"\n" +"This email has been sent to ###OLD_EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"Detta meddelande bekräftar att nätverksadministratörens e-postadress har ändrats på ###SITENAME###.\n" +"\n" +"Den nya e-postadressen för nätverksadministratören är ###NEW_EMAIL###.\n" +"\n" +"Detta meddelande har skickats till ###OLD_EMAIL###\n" +"\n" +"Vänliga hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#. translators: Email change notification email subject. %s: Network title +#: wp-includes/ms-functions.php:2649 +msgid "[%s] Network Admin Email Change Request" +msgstr "[%s] Begäran om ändring av e-postadress för nätverksadministratör" + +#. translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: +#. those are placeholders. +#: wp-includes/ms-functions.php:2600 +msgid "" +"Howdy ###USERNAME###,\n" +"\n" +"You recently requested to have the network admin email address on\n" +"your network changed.\n" +"\n" +"If this is correct, please click on the following link to change it:\n" +"###ADMIN_URL###\n" +"\n" +"You can safely ignore and delete this email if you do not want to\n" +"take this action.\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hallå ###USERNAME###,\n" +"\n" +"Du bad nyligen om att ändra e-postadressen för nätverksadministratören på ditt nätverk.\n" +"\n" +"Om det stämmer ber vi dig klicka på nedanstående länk för att ändra den:\n" +"###ADMIN_URL###\n" +"\n" +"Du kan tryggt ignorera och kasta detta meddelande om du inte vill ändra något.\n" +"\n" +"Detta meddelande har skickats till ###EMAIL###\n" +"\n" +"Vänliga hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#. translators: Do not translate USERNAME, PASSWORD, LOGINLINK, SITE_NAME: +#. those are placeholders. +#: wp-includes/ms-functions.php:2204 +msgid "" +"Howdy USERNAME,\n" +"\n" +"Your new account is set up.\n" +"\n" +"You can log in with the following information:\n" +"Username: USERNAME\n" +"Password: PASSWORD\n" +"LOGINLINK\n" +"\n" +"Thanks!\n" +"\n" +"--The Team @ SITE_NAME" +msgstr "" +"Hej USERNAME,\n" +"\n" +"Ditt nya konto är skapat.\n" +"\n" +"Du kan logga in med följande information:\n" +"Användarnamn: USERNAME\n" +"Lösenord: PASSWORD\n" +"LOGINLINK\n" +"\n" +"Tack!\n" +"\n" +"--Teamet @ SITE_NAME" + +#: wp-includes/ms-functions.php:2075 +msgid "WordPress › Success" +msgstr "WordPress › Klart" + +#: wp-includes/ms-functions.php:2075 +msgid "You have been added to this site. Please visit the homepage or log in using your username and password." +msgstr "Du har lagts till på denna webbplats. Besök startsidan eller logga in med ditt användarnamn och lösenord." + +#: wp-includes/ms-functions.php:2072 +msgid "An error occurred adding you to this site. Back to the homepage." +msgstr "Ett fel uppstod när du skulle läggas till på denna webbplats. Tillbaka till startsidan." + +#: wp-includes/ms-functions.php:2015 +msgid "Unable to submit this form, please try again." +msgstr "Det gick inte att skicka formuläret. Försök igen." + +#. translators: New user notification email subject. 1: Network name, 2: New +#. user login +#: wp-includes/ms-functions.php:1694 +msgid "New %1$s User: %2$s" +msgstr "Ny %1$s användare: %2$s" + +#. translators: New site notification email subject. 1: Network name, 2: New +#. site name +#: wp-includes/ms-functions.php:1603 +msgid "New %1$s Site: %2$s" +msgstr "Ny %1$s webbplats: %2$s" + +#. translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those +#. are placeholders. +#: wp-includes/ms-functions.php:1547 +msgid "" +"Howdy USERNAME,\n" +"\n" +"Your new SITE_NAME site has been successfully set up at:\n" +"BLOG_URL\n" +"\n" +"You can log in to the administrator account with the following information:\n" +"\n" +"Username: USERNAME\n" +"Password: PASSWORD\n" +"Log in here: BLOG_URLwp-login.php\n" +"\n" +"We hope you enjoy your new site. Thanks!\n" +"\n" +"--The Team @ SITE_NAME" +msgstr "" +"Hej USERNAME,\n" +"\n" +"Din nya webbplats, SITE_NAME, har skapats på:\n" +"BLOG_URL\n" +"\n" +"Du kan logga in som administratör med följande uppgifter:\n" +"\n" +"Användarnamn: USERNAME\n" +"Lösenord: PASSWORD\n" +"Logga in här: BLOG_URLwp-login.php\n" +"\n" +"Vi hoppas du ska trivas med din nya webbplats. Tack!\n" +"\n" +"--Teamet @ SITE_NAME" + +#: wp-includes/ms-functions.php:1454 +msgid "New User Registration: %s" +msgstr "Ny användarregistrering: %s" + +#: wp-includes/ms-functions.php:1433 +msgid "" +"New User: %1$s\n" +"Remote IP address: %2$s\n" +"\n" +"Disable these notifications: %3$s" +msgstr "" +"Ny användare: %1$s\n" +"Från IP-adress: %2$s\n" +"\n" +"Inaktivera dessa notifikationer: %3$s" + +#: wp-includes/ms-functions.php:1402 +msgid "New Site Registration: %s" +msgstr "Ny webbplatsregistrering: %s" + +#: wp-includes/ms-functions.php:1380 +msgid "" +"New Site: %1$s\n" +"URL: %2$s\n" +"Remote IP address: %3$s\n" +"\n" +"Disable these notifications: %4$s" +msgstr "" +"Ny webbplats: %1$s\n" +"URL: %2$s\n" +"Från IP-adress: %3$s\n" +"\n" +"Inaktivera dessa notifikationer: %4$s" + +#: wp-includes/ms-functions.php:1162 +msgid "That username is already activated." +msgstr "Det användarnamnet är redan aktiverat." + +#: wp-includes/ms-functions.php:1146 +msgid "Could not create user" +msgstr "Kunde inte skapa användare" + +#: wp-includes/ms-functions.php:1130 +msgid "The site is already active." +msgstr "Webbplatsen är redan aktiverad." + +#: wp-includes/ms-functions.php:1128 +msgid "The user is already active." +msgstr "Användaren är redan aktiv." + +#: wp-includes/ms-functions.php:1123 +msgid "Invalid activation key." +msgstr "Ogiltig aktiveringsnyckel." + +#. translators: New user notification email subject. 1: Network name, 2: New +#. user login +#: wp-includes/ms-functions.php:1084 +msgctxt "New user notification email subject" +msgid "[%1$s] Activate %2$s" +msgstr "[%1$s] Aktivera %2$s" + +#: wp-includes/ms-functions.php:1060 +msgid "" +"To activate your user, please click the following link:\n" +"\n" +"%s\n" +"\n" +"After you activate, you will receive *another email* with your login." +msgstr "" +"För att aktivera din användare, klicka på följande länk:\n" +"\n" +"%s\n" +"\n" +"När du aktiverat din användare så kommer du att få *ytterligare ett mail* med dina inloggningsuppgifter." + +#. translators: New site notification email subject. 1: Network name, 2: New +#. site URL +#: wp-includes/ms-functions.php:976 +msgctxt "New site notification email subject" +msgid "[%1$s] Activate %2$s" +msgstr "[%1$s] Aktivera %2$s" + +#: wp-includes/ms-functions.php:944 +msgid "" +"To activate your blog, please click the following link:\n" +"\n" +"%1$s\n" +"\n" +"After you activate, you will receive *another email* with your login.\n" +"\n" +"After you activate, you can visit your site here:\n" +"\n" +"%2$s" +msgstr "" +"För att aktivera din blogg, vänligen besök följande länk:\n" +"\n" +"%1$s\n" +"\n" +"Efter aktiveringen kommer du att få *ytterligare ett e-postmeddelande* med dina inloggningsuppgifter.\n" +"\n" +"Efter aktiveringen kan du besöka din webbplats här:\n" +"\n" +"%2$s" + +#: wp-includes/ms-functions.php:703 +msgid "That site is currently reserved but may be available in a couple days." +msgstr "Den webbplatsen är för närvarande reserverad, men kan bli tillgänglig igen om några dagar." + +#: wp-includes/ms-functions.php:685 +msgid "Sorry, that site is reserved!" +msgstr "Tyvärr, den webbplatsen är reserverad!" + +#: wp-includes/ms-functions.php:680 wp-includes/ms-functions.php:1308 +#: wp-includes/ms-site.php:636 +msgid "Sorry, that site already exists!" +msgstr "Den webbplatsen finns redan registrerat!" + +#: wp-includes/ms-functions.php:668 +msgid "Please enter a site title." +msgstr "Ange en webbplatsrubrik." + +#: wp-includes/ms-functions.php:650 +msgid "Sorry, site names must have letters too!" +msgstr "Webbplatsnamn måste innehålla bokstäver också!" + +#: wp-includes/ms-functions.php:645 +msgid "Sorry, you may not use that site name." +msgstr "Du får inte använda det webbplatsnamnet." + +#. translators: %s: minimum site name length +#: wp-includes/ms-functions.php:640 +msgid "Site name must be at least %s character." +msgid_plural "Site name must be at least %s characters." +msgstr[0] "Webbplatsnamn måste bestå av minst %s tecken." +msgstr[1] "Webbplatsnamn måste bestå av minst %s tecken." + +#: wp-includes/ms-functions.php:626 +msgid "That name is not allowed." +msgstr "Det namnet är inte tillåtet." + +#: wp-includes/ms-functions.php:622 +msgid "Site names can only contain lowercase letters (a-z) and numbers." +msgstr "Webbplatsnamn kan endast bestå av små bokstäver (a-z) och siffror." + +#: wp-includes/ms-functions.php:618 +msgid "Please enter a site name." +msgstr "Ange ett webbplatsnamn." + +#: wp-includes/ms-functions.php:539 +msgid "That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing." +msgstr "E-postadressen används redan. Kolla din inkorg för aktiveringsmail. Du kan registrera dig med e-postadressen igen inom några dagar om ingen aktivering sker." + +#: wp-includes/ms-functions.php:528 +msgid "That username is currently reserved but may be available in a couple of days." +msgstr "De valda användarnamnet är för närvarande reserverat, men kan bli ledigt igen inom några dagar." + +#: wp-includes/ms-functions.php:504 +msgid "Sorry, that email address is not allowed!" +msgstr "Den e-postadressen är inte tillåten!" + +#: wp-includes/ms-functions.php:496 +msgid "Sorry, usernames must have letters too!" +msgstr "Användarnamn måste ha bokstäver också!" + +#: wp-includes/ms-functions.php:487 +msgid "Username must be at least 4 characters." +msgstr "Användarnamn måste bestå av minst 4 tecken." + +#: wp-includes/ms-functions.php:483 +msgid "You cannot use that email address to signup. We are having problems with them blocking some of our email. Please use another email provider." +msgstr "Du kan tyvärr inte använda angiven e-postadress för registrering. Vi har problem med att de blockerar vissa av våra mail. Var vänlig använd en annan e-postleverantör." + +#: wp-includes/ms-functions.php:481 +msgid "Please enter a valid email address." +msgstr "Vänligen ange en giltig e-postadress." + +#: wp-includes/ms-functions.php:461 +msgid "Please enter a username." +msgstr "Ange ett användarnamn." + +#: wp-includes/ms-functions.php:454 +msgid "Usernames can only contain lowercase letters (a-z) and numbers." +msgstr "Användarnamn kan endast bestå av små bokstäver (a-z) och siffror." + +#: wp-includes/ms-functions.php:271 +msgid "That user does not exist." +msgstr "Den användaren finns inte." + +#: wp-includes/ms-functions.php:188 +msgid "User cannot be added to this site." +msgstr "Användaren kan inte läggas till på denna webbplats." + +#: wp-includes/ms-functions.php:165 +msgid "The requested user does not exist." +msgstr "Den efterfrågade användaren finns inte." + +#: wp-includes/theme-compat/comments.php:69 +msgid "Comments are closed." +msgstr "Kommentarer inaktiverade." + +#: wp-includes/theme-compat/comments.php:41 +msgid "%1$s response to %2$s" +msgid_plural "%1$s responses to %2$s" +msgstr[0] "%1$s svar till %2$s" +msgstr[1] "%1$s svar till %2$s" + +#. translators: %s: post title +#: wp-includes/theme-compat/comments.php:37 +msgid "One response to %s" +msgstr "Ett svar till %s" + +#: wp-includes/theme-compat/comments.php:24 +msgid "This post is password protected. Enter the password to view comments." +msgstr "Det här inlägget är lösenordsskyddat. Ange lösenordet för att se eventuella kommentarer." + +#. translators: 1: blog name, 2: WordPress +#: wp-includes/theme-compat/footer.php:26 +msgid "%1$s is proudly powered by %2$s" +msgstr "%1$s drivs med %2$s" + +#. translators: %s: a link to the embedded site +#: wp-includes/theme-compat/embed-404.php:21 +msgid "It looks like nothing was found at this location. Maybe try visiting %s directly?" +msgstr "Det verkar inte som något kunde hittas på denna plats. Försök med att besöka %s direkt." + +#: wp-includes/theme-compat/embed-404.php:14 +msgid "Oops! That embed can’t be found." +msgstr "Hoppsan! Den inbäddningen kan inte hittas." + +#: wp-includes/theme-compat/sidebar.php:105 +msgid "You are currently browsing the %s blog archives." +msgstr "Du bläddrar i bloggarkivet på %s." + +#: wp-includes/theme-compat/sidebar.php:93 +msgid "You have searched the %1$s blog archives for ‘%2$s’. If you are unable to find anything in these search results, you can try one of these links." +msgstr "Du har sökt i arkivet på %1$s efter ”%2$s”. Om du inte hittar det du söker i resultaten så kan du försöka med någon av dessa länkar." + +#: wp-includes/theme-compat/sidebar.php:81 +msgid "You are currently browsing the %1$s blog archives for the year %2$s." +msgstr "Du bläddrar i bloggarkivet på %1$s för året %2$s." + +#: wp-includes/theme-compat/sidebar.php:71 +msgid "F, Y" +msgstr "F, Y" + +#: wp-includes/theme-compat/sidebar.php:69 +msgid "You are currently browsing the %1$s blog archives for %2$s." +msgstr "Du bläddrar i bloggarkivet på %1$s för %2$s." + +#: wp-includes/theme-compat/sidebar.php:59 +msgid "l, F jS, Y" +msgstr "l, j F, Y" + +#: wp-includes/theme-compat/sidebar.php:57 +msgid "You are currently browsing the %1$s blog archives for the day %2$s." +msgstr "Du bläddrar i bloggarkivet på %1$s för dagen %2$s." + +#: wp-includes/theme-compat/sidebar.php:46 +msgid "You are currently browsing the archives for the %s category." +msgstr "Du bläddrar just nu i arkivet för kategorin %s." + +#. translators: %s: template name +#: wp-includes/theme-compat/sidebar.php:15 +#: wp-includes/theme-compat/header.php:15 +#: wp-includes/theme-compat/footer.php:15 +#: wp-includes/theme-compat/comments.php:15 +msgid "Please include a %s template in your theme." +msgstr "Var vänlig inkludera en %s-mall i ditt tema." + +#. translators: %s: template name +#: wp-includes/theme-compat/sidebar.php:11 +#: wp-includes/theme-compat/header.php:11 +#: wp-includes/theme-compat/footer.php:11 +#: wp-includes/theme-compat/comments.php:11 +msgid "Theme without %s" +msgstr "Tema utan %s" + +#: wp-includes/class-wp-editor.php:1762 +msgid "Search or use up and down arrow keys to select an item." +msgstr "Sök eller använd piltangenterna (upp och ner) för att välja en post." + +#: wp-includes/class-wp-editor.php:1761 +msgid "No search term specified. Showing recent items." +msgstr "Inga sökord angivna. Visar senaste objekten." + +#: wp-includes/class-wp-editor.php:1744 +msgid "Or link to existing content" +msgstr "Eller länka till befintligt innehåll" + +#: wp-includes/class-wp-editor.php:1730 +msgid "Enter the destination URL" +msgstr "Ange destinationsadress" + +#: wp-includes/class-wp-editor.php:1667 +msgid "Y/m/d" +msgstr "Y-m-d" + +#: wp-includes/class-wp-editor.php:1314 +msgid "The next group of formatting shortcuts are applied as you type or when you insert them around plain text in the same paragraph. Press Escape or the Undo button to undo." +msgstr "Nästa grupp av formateringsgenvägar appliceras när du skriver eller när du infogar dem runt oformaterad text i samma stycke. Tryck Esc eller knappen Ångra för att ångra." + +#: wp-includes/class-wp-editor.php:1312 +msgid "The following formatting shortcuts are replaced when pressing Enter. Press Escape or the Undo button to undo." +msgstr "Följande snabbkoder för formatering ersätts vid enter-tryck. Tryck ESC eller knappen ångra för att ångra." + +#: wp-includes/class-wp-editor.php:1310 +msgid "When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo." +msgstr "Om du inleder ett nytt stycke med något av följande snabbkoder för formatering, följt av mellanslag, så kommer formateringen att appliceras automatiskt. Tryck på baksteg (Backspace) eller Esc för att ångra." + +#: wp-includes/class-wp-editor.php:1308 +msgid "To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons." +msgstr "För att flytta fokus till andra knappar, använd Tab- eller piltangenterna. För att flytta tillbaka fokus till redigeraren, använda ESC-tangenten eller någon av knapparna." + +#: wp-includes/class-wp-editor.php:1306 +#: wp-includes/js/dist/format-library.js:1166 +msgid "Warning: the link has been inserted but may have errors. Please test it." +msgstr "Varning: länken har lagts till men kan innehålla fel. Vänligen testa den." + +#: wp-includes/class-wp-editor.php:1304 +msgid "Letter" +msgstr "Tangent" + +#: wp-includes/class-wp-editor.php:1303 +msgid "Ctrl + letter:" +msgstr "Ctrl + bokstav:" + +#: wp-includes/class-wp-editor.php:1302 +msgid "Cmd + letter:" +msgstr "Cmd + bokstav:" + +#: wp-includes/class-wp-editor.php:1301 +msgid "Shift + Alt + letter:" +msgstr "Shift + Alt + bokstav:" + +#: wp-includes/class-wp-editor.php:1300 +msgid "Ctrl + Alt + letter:" +msgstr "Ctrl + Alt + bokstav:" + +#: wp-includes/class-wp-editor.php:1299 +msgid "Elements path" +msgstr "Elementsökväg" + +#: wp-includes/class-wp-editor.php:1298 +msgid "Editor toolbar" +msgstr "Verktygsfält för redigerare" + +#: wp-includes/class-wp-editor.php:1297 +msgid "Editor menu (when enabled)" +msgstr "Meny för redigerare (när aktiverad)" + +#: wp-includes/class-wp-editor.php:1296 +msgid "Inline toolbar (when an image, link or preview is selected)" +msgstr "Inbäddad verktygsrad (när en bild, länk eller förhandsvisning är markerad)" + +#: wp-includes/class-wp-editor.php:1295 +msgid "Focus shortcuts:" +msgstr "Fokusgenvägar:" + +#: wp-includes/class-wp-editor.php:1294 +msgid "Additional shortcuts," +msgstr "Ytterligare genvägar," + +#: wp-includes/class-wp-editor.php:1293 +msgid "Default shortcuts," +msgstr "Standardgenvägar," + +#: wp-includes/class-wp-editor.php:1292 +msgid "Classic Block Keyboard Shortcuts" +msgstr "Snabbtangenter i klassiskt block" + +#: wp-includes/class-wp-editor.php:1291 wp-includes/js/dist/edit-post.js:1463 +#: wp-includes/js/dist/edit-post.js:3941 +msgid "Keyboard Shortcuts" +msgstr "Tangentbordsgenvägar" + +#: wp-includes/class-wp-editor.php:1285 +msgid "Link options" +msgstr "Länkalternativ" + +#: wp-includes/class-wp-editor.php:1283 +#: wp-includes/js/dist/block-editor.js:16504 +msgid "Paste URL or type to search" +msgstr "Klistra in URL eller skriv för att söka" + +#: wp-includes/class-wp-editor.php:1282 +#: wp-includes/class-walker-comment.php:242 +#: wp-includes/class-walker-comment.php:391 wp-includes/js/dist/editor.js:12438 +#: wp-includes/js/dist/block-library.js:11514 +#: wp-includes/js/dist/block-library.js:12403 +#: wp-includes/js/dist/format-library.js:1056 +msgid "Edit" +msgstr "Redigera" + +#: wp-includes/class-wp-editor.php:1280 +msgid "No alignment" +msgstr "Ingen justering" + +#: wp-includes/class-wp-editor.php:1278 +msgid "Read more..." +msgstr "Läs mer..." + +#: wp-includes/class-wp-editor.php:1277 +msgid "Insert Page Break tag" +msgstr "Infoga tagg för sidbrytning" + +#: wp-includes/class-wp-editor.php:1275 +msgid "Toolbar Toggle" +msgstr "Verktygsrad på/av" + +#: wp-includes/class-wp-editor.php:1272 +msgctxt "TinyMCE menu" +msgid "Format" +msgstr "Format" + +#: wp-includes/class-wp-editor.php:1271 +msgctxt "TinyMCE menu" +msgid "Table" +msgstr "Tabell" + +#: wp-includes/class-wp-editor.php:1270 +msgctxt "TinyMCE menu" +msgid "View" +msgstr "Vy" + +#: wp-includes/class-wp-editor.php:1269 +msgctxt "TinyMCE menu" +msgid "Tools" +msgstr "Verktyg" + +#: wp-includes/class-wp-editor.php:1268 +msgctxt "TinyMCE menu" +msgid "Edit" +msgstr "Redigera" + +#: wp-includes/class-wp-editor.php:1267 +msgctxt "TinyMCE menu" +msgid "File" +msgstr "Fil" + +#: wp-includes/class-wp-editor.php:1266 +msgctxt "TinyMCE menu" +msgid "Insert" +msgstr "Infoga" + +#: wp-includes/class-wp-editor.php:1263 +msgid "Your browser does not support direct access to the clipboard. Please use keyboard shortcuts or your browser’s edit menu instead." +msgstr "Din webbläsare har inte stöd för direktåtkomst till urklipp. Vänligen använd tangentbordsgenvägar eller din webbläsares redigeringsmeny istället." + +#: wp-includes/class-wp-editor.php:1259 +msgid "Rich Text Area. Press Control-Option-H for help." +msgstr "Visuellt textfält. Tryck Ctrl+Option+H för hjälp." + +#: wp-includes/class-wp-editor.php:1258 +msgid "Rich Text Area. Press Alt-Shift-H for help." +msgstr "Visuellt textfält. Tryck Alt+Shift+H för hjälp" + +#: wp-includes/class-wp-editor.php:1256 +msgid "If you’re looking to paste rich content from Microsoft Word, try turning this option off. The editor will clean up text pasted from Word automatically." +msgstr "Om du planerar att kopiera in formaterad text från Microsoft Word, försök med att stänga av detta val. Redigeraren kommer att rensa text som kopieras in från Word automatiskt." + +#: wp-includes/class-wp-editor.php:1255 +msgid "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off." +msgstr "Inklistring är nu satt till läget för ren text. Innehåll kommer nu att klistras in som ren text till att du stänger av detta alternativ." + +#. translators: word count +#: wp-includes/class-wp-editor.php:1253 +msgid "Words: %s" +msgstr "Ord: %s" + +#: wp-includes/class-wp-editor.php:1250 +msgid "Show invisible characters" +msgstr "Visa osynliga tecken" + +#: wp-includes/class-wp-editor.php:1249 +msgctxt "editor button" +msgid "Show blocks" +msgstr "Visa block" + +#: wp-includes/class-wp-editor.php:1248 +msgid "Text color" +msgstr "Textfärg" + +#: wp-includes/class-wp-editor.php:1247 +msgid "Background color" +msgstr "Bakgrundsfärg" + +#: wp-includes/class-wp-editor.php:1245 +msgctxt "TinyMCE" +msgid "Templates" +msgstr "Mallar" + +#: wp-includes/class-wp-editor.php:1244 +msgctxt "TinyMCE" +msgid "Insert template" +msgstr "Infoga mall" + +#: wp-includes/class-wp-editor.php:1242 +msgctxt "table cell scope attribute" +msgid "Scope" +msgstr "Tabellomfång" + +#: wp-includes/class-wp-editor.php:1241 +msgid "Cell spacing" +msgstr "Cellmarginal" + +#: wp-includes/class-wp-editor.php:1240 +msgid "Cell padding" +msgstr "Cellfyllnad" + +#: wp-includes/class-wp-editor.php:1239 +msgid "Cell type" +msgstr "Celltyp" + +#: wp-includes/class-wp-editor.php:1238 +msgid "Row type" +msgstr "Radtyp" + +#: wp-includes/class-wp-editor.php:1237 +msgid "Column group" +msgstr "Kolumngrupp" + +#: wp-includes/class-wp-editor.php:1236 +msgid "Row group" +msgstr "Radgrupp" + +#: wp-includes/class-wp-editor.php:1233 +msgid "Middle" +msgstr "Mitten" + +#: wp-includes/class-wp-editor.php:1231 +msgctxt "vertical table cell alignment" +msgid "V Align" +msgstr "V-justering" + +#: wp-includes/class-wp-editor.php:1230 +msgctxt "table cell alignment attribute" +msgid "None" +msgstr "Ingen" + +#: wp-includes/class-wp-editor.php:1226 +msgctxt "horizontal table cell alignment" +msgid "H Align" +msgstr "H-justering" + +#: wp-includes/class-wp-editor.php:1220 +msgid "Split table cell" +msgstr "Dela tabellcell" + +#: wp-includes/class-wp-editor.php:1219 +msgid "Merge table cells" +msgstr "Sammanfoga tabellceller" + +#: wp-includes/class-wp-editor.php:1218 +msgid "Copy table row" +msgstr "Kopiera tabellrad" + +#: wp-includes/class-wp-editor.php:1217 +msgid "Cut table row" +msgstr "Klipp ut tabellrad" + +#: wp-includes/class-wp-editor.php:1216 +msgid "Delete column" +msgstr "Radera kolumn" + +#: wp-includes/class-wp-editor.php:1215 +msgid "Delete row" +msgstr "Radera rad" + +#: wp-includes/class-wp-editor.php:1214 +msgid "Paste table row after" +msgstr "Klistra in tabellrad efter" + +#: wp-includes/class-wp-editor.php:1213 +msgid "Paste table row before" +msgstr "Klistra in tabellrad innan" + +#: wp-includes/class-wp-editor.php:1212 +msgid "Insert column after" +msgstr "Infoga kolumn efter" + +#: wp-includes/class-wp-editor.php:1211 +msgid "Insert column before" +msgstr "Infoga en kolumn innan" + +#: wp-includes/class-wp-editor.php:1210 +msgid "Insert row after" +msgstr "Infoga rad efter" + +#: wp-includes/class-wp-editor.php:1209 +msgid "Insert row before" +msgstr "Infoga en rad innan" + +#: wp-includes/class-wp-editor.php:1207 +msgctxt "table footer" +msgid "Footer" +msgstr "Tabellfot" + +#: wp-includes/class-wp-editor.php:1206 +msgctxt "table body" +msgid "Body" +msgstr "Innehåll" + +#: wp-includes/class-wp-editor.php:1205 +msgctxt "table header" +msgid "Header" +msgstr "Tabellhuvud" + +#: wp-includes/class-wp-editor.php:1204 +msgid "Header cell" +msgstr "Cellhuvud" + +#: wp-includes/class-wp-editor.php:1203 +msgctxt "table cell" +msgid "Cell" +msgstr "Cell" + +#: wp-includes/class-wp-editor.php:1202 +msgctxt "table columns" +msgid "Cols" +msgstr "Kolumner" + +#: wp-includes/class-wp-editor.php:1201 +msgctxt "table column" +msgid "Column" +msgstr "Kolumn" + +#: wp-includes/class-wp-editor.php:1200 +msgid "Rows" +msgstr "Rader" + +#: wp-includes/class-wp-editor.php:1199 +msgid "Row" +msgstr "Rad" + +#: wp-includes/class-wp-editor.php:1197 +msgid "Border color" +msgstr "Ramfärg" + +#: wp-includes/class-wp-editor.php:1196 +msgid "Table cell properties" +msgstr "Tabellcellsegenskaper" + +#: wp-includes/class-wp-editor.php:1195 +msgid "Table row properties" +msgstr "Tabellradsegenskaper" + +#: wp-includes/class-wp-editor.php:1194 +msgid "Table properties" +msgstr "Tabellegenskaper" + +#: wp-includes/class-wp-editor.php:1193 +msgid "Delete table" +msgstr "Radera tabell" + +#: wp-includes/class-wp-editor.php:1192 +msgid "Insert table" +msgstr "Infoga tabell" + +#: wp-includes/class-wp-editor.php:1189 +msgid "Add to Dictionary" +msgstr "Lägg till i ordbok" + +#: wp-includes/class-wp-editor.php:1188 +msgctxt "spellcheck" +msgid "Ignore" +msgstr "Ignorera" + +#: wp-includes/class-wp-editor.php:1187 +msgctxt "spellcheck" +msgid "Ignore all" +msgstr "Ignorera alla" + +#: wp-includes/class-wp-editor.php:1186 +msgctxt "spellcheck" +msgid "Finish" +msgstr "Slutför" + +#: wp-includes/class-wp-editor.php:1185 +msgid "Check Spelling" +msgstr "Stavningskontroll" + +#: wp-includes/class-wp-editor.php:1184 +msgid "Match case" +msgstr "Matcha skiftläge" + +#: wp-includes/class-wp-editor.php:1183 +msgctxt "find/replace" +msgid "Replace all" +msgstr "Ersätt alla" + +#: wp-includes/class-wp-editor.php:1182 +msgctxt "find/replace" +msgid "Find" +msgstr "Hitta" + +#: wp-includes/class-wp-editor.php:1181 +msgctxt "find/replace" +msgid "Replace with" +msgstr "Ersätt med" + +#: wp-includes/class-wp-editor.php:1180 +msgid "Find and replace" +msgstr "Sök och ersätt" + +#: wp-includes/class-wp-editor.php:1179 +msgctxt "find/replace" +msgid "Whole words" +msgstr "Hela ord" + +#. translators: previous +#: wp-includes/class-wp-editor.php:1178 +msgctxt "find/replace" +msgid "Prev" +msgstr "Föreg." + +#: wp-includes/class-wp-editor.php:1176 +msgctxt "find/replace" +msgid "Next" +msgstr "Nästa" + +#: wp-includes/class-wp-editor.php:1175 +msgctxt "find/replace" +msgid "Replace" +msgstr "Ersätt" + +#: wp-includes/class-wp-editor.php:1174 +msgid "Could not find the specified string." +msgstr "Kunde inte hitta den specificerade strängen." + +#: wp-includes/class-wp-editor.php:1171 +msgctxt "Short for blue in RGB" +msgid "B" +msgstr "B" + +#: wp-includes/class-wp-editor.php:1170 +msgctxt "Short for green in RGB" +msgid "G" +msgstr "G" + +#: wp-includes/class-wp-editor.php:1169 +msgctxt "Short for red in RGB" +msgid "R" +msgstr "R" + +#: wp-includes/class-wp-editor.php:1168 +msgid "No color" +msgstr "Ingen färg" + +#: wp-includes/class-wp-editor.php:1167 +msgctxt "label for custom color" +msgid "Custom..." +msgstr "Anpassad..." + +#: wp-includes/class-wp-editor.php:1166 +msgid "Custom color" +msgstr "Anpassad färg" + +#: wp-includes/class-wp-editor.php:1165 +msgid "Color" +msgstr "Färg" + +#: wp-includes/class-wp-editor.php:1163 +msgid "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?" +msgstr "URLen du angav verkar vara en extern länk. Vill du lägga till det nödvändiga prefixet http:// före adressen?" + +#: wp-includes/class-wp-editor.php:1161 +msgid "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?" +msgstr "URL:en du angav verkar vara en e-postadress. Vill du lägga till det nödvändiga prefixet mailto: före adressen?" + +#: wp-includes/class-wp-editor.php:1158 +msgid "Text to display" +msgstr "Text att visa" + +#: wp-includes/class-wp-editor.php:1157 +msgid "New window" +msgstr "Nytt fönster" + +#: wp-includes/class-wp-editor.php:1156 +msgid "Target" +msgstr "Mål" + +#: wp-includes/class-wp-editor.php:1154 wp-includes/js/dist/editor.js:8818 +#: wp-includes/js/dist/format-library.js:1297 +#: wp-includes/js/dist/format-library.js:1397 +msgid "Link" +msgstr "Länk" + +#: wp-includes/class-wp-editor.php:1151 +msgid "Remove link" +msgstr "Ta bort länk" + +#: wp-includes/class-wp-editor.php:1149 +msgid "Restore last draft" +msgstr "Återställ senaste utkast" + +#: wp-includes/class-wp-editor.php:1148 +msgid "Horizontal space" +msgstr "Horizontalt mellanrum" + +#: wp-includes/class-wp-editor.php:1147 +msgid "Horizontal line" +msgstr "Horisontal linje" + +#: wp-includes/class-wp-editor.php:1144 +msgid "Print" +msgstr "Skriv ut" + +#: wp-includes/class-wp-editor.php:1142 +msgid "Paste as text" +msgstr "Klistra in som text" + +#: wp-includes/class-wp-editor.php:1141 +#: wp-includes/js/dist/block-library.js:19105 +msgid "Page break" +msgstr "Sidbrytning" + +#: wp-includes/class-wp-editor.php:1140 +msgid "Nonbreaking space" +msgstr "Hårt mellanslag" + +#: wp-includes/class-wp-editor.php:1139 +msgid "Emoticons" +msgstr "Uttryckssymboler" + +#: wp-includes/class-wp-editor.php:1138 +#: wp-includes/js/dist/block-library.js:5666 +msgctxt "editor button" +msgid "Left to right" +msgstr "Vänster till höger" + +#: wp-includes/class-wp-editor.php:1137 +msgctxt "editor button" +msgid "Right to left" +msgstr "Höger till vänster" + +#: wp-includes/class-wp-editor.php:1136 +msgid "Special character" +msgstr "Specialtecken" + +#: wp-includes/class-wp-editor.php:1133 +msgid "Embed" +msgstr "Bädda in" + +#: wp-includes/class-wp-editor.php:1132 +msgid "Insert video" +msgstr "Infoga video" + +#: wp-includes/class-wp-editor.php:1131 +msgid "Paste your embed code below:" +msgstr "Klistra in din inbäddningskod nedan:" + +#: wp-includes/class-wp-editor.php:1130 +msgid "Alternative source" +msgstr "Alternativ källa" + +#: wp-includes/class-wp-editor.php:1129 +msgid "Poster" +msgstr "Avsändare" + +#: wp-includes/class-wp-editor.php:1128 +msgid "Insert/edit media" +msgstr "Infoga/redigera media" + +#: wp-includes/class-wp-editor.php:1126 +msgid "Language" +msgstr "Språk" + +#: wp-includes/class-wp-editor.php:1125 +msgid "Insert/edit code sample" +msgstr "Infoga/redigera kodprov" + +#: wp-includes/class-wp-editor.php:1124 +msgid "Table of Contents" +msgstr "Innehållsförteckning" + +#: wp-includes/class-wp-editor.php:1123 +msgid "Insert date/time" +msgstr "Infoga datum/tid" + +#: wp-includes/class-wp-editor.php:1122 +msgid "Date/time" +msgstr "Datum/tid" + +#: wp-includes/class-wp-editor.php:1120 +msgid "Dimensions" +msgstr "Dimensioner" + +#: wp-includes/class-wp-editor.php:1119 +msgid "Style" +msgstr "Stil" + +#: wp-includes/class-wp-editor.php:1118 +msgid "Image description" +msgstr "Bildbeskrivning" + +#: wp-includes/class-wp-editor.php:1117 +msgid "Vertical space" +msgstr "Vertikalt mellanrum" + +#: wp-includes/class-wp-editor.php:1116 +msgid "Constrain proportions" +msgstr "Behåll proportioner" + +#: wp-includes/class-wp-editor.php:1115 +msgid "Border" +msgstr "Ram" + +#: wp-includes/class-wp-editor.php:1114 +msgid "Source" +msgstr "Källa" + +#: wp-includes/class-wp-editor.php:1113 +#: wp-includes/js/dist/block-editor.js:17288 +msgid "Advanced" +msgstr "Avancerat" + +#: wp-includes/class-wp-editor.php:1112 wp-includes/js/dist/edit-post.js:4611 +msgid "General" +msgstr "Allmänt" + +#: wp-includes/class-wp-editor.php:1111 +msgid "Insert/edit image" +msgstr "Infoga/redigera bild" + +#: wp-includes/class-wp-editor.php:1107 wp-includes/theme-compat/sidebar.php:29 +#: wp-includes/js/dist/editor.js:8426 +msgid "Author" +msgstr "Författare" + +#: wp-includes/class-wp-editor.php:1105 +msgid "Encoding" +msgstr "Teckenkodning" + +#: wp-includes/class-wp-editor.php:1104 +msgid "Keywords" +msgstr "Nyckelord" + +#: wp-includes/class-wp-editor.php:1102 +msgid "Robots" +msgstr "Robotar" + +#: wp-includes/class-wp-editor.php:1101 +msgid "Document properties" +msgstr "Dokumentegenskaper" + +#: wp-includes/class-wp-editor.php:1098 +msgctxt "Id for link anchor (TinyMCE)" +msgid "Id" +msgstr "Id" + +#: wp-includes/class-wp-editor.php:1097 +msgid "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores." +msgstr "Id ska inledas med en bokstav och får därefter endast innehålla bokstäver, siffror, bindestreck, punkter, kolon och understreck." + +#: wp-includes/class-wp-editor.php:1095 +msgctxt "Link anchors (TinyMCE)" +msgid "Anchors" +msgstr "Ankare" + +#: wp-includes/class-wp-editor.php:1094 +msgctxt "Link anchor (TinyMCE)" +msgid "Anchor" +msgstr "Ankare" + +#: wp-includes/class-wp-editor.php:1093 +msgctxt "Name of link anchor (TinyMCE)" +msgid "Name" +msgstr "Namn" + +#: wp-includes/class-wp-editor.php:1090 +msgctxt "list style" +msgid "Lower Roman" +msgstr "Romersk, gemener" + +#: wp-includes/class-wp-editor.php:1089 +msgctxt "list style" +msgid "Upper Roman" +msgstr "Romersk, versaler" + +#: wp-includes/class-wp-editor.php:1088 +msgctxt "list style" +msgid "Upper Alpha" +msgstr "Alfa, versaler" + +#: wp-includes/class-wp-editor.php:1087 +msgctxt "list style" +msgid "Lower Alpha" +msgstr "Alfa, gemener" + +#: wp-includes/class-wp-editor.php:1086 +msgctxt "list style" +msgid "Lower Greek" +msgstr "Grekisk, gemener" + +#: wp-includes/class-wp-editor.php:1085 +msgctxt "list style" +msgid "Disc" +msgstr "Disk" + +#: wp-includes/class-wp-editor.php:1084 +msgctxt "list style" +msgid "Circle" +msgstr "Cirkel" + +#: wp-includes/class-wp-editor.php:1083 +msgctxt "list style" +msgid "Default" +msgstr "Standard" + +#: wp-includes/class-wp-editor.php:1082 +msgctxt "list style" +msgid "Square" +msgstr "Fyrkant" + +#: wp-includes/class-wp-editor.php:1078 +msgid "Visual aids" +msgstr "Visuella hjälpmedel" + +#: wp-includes/class-wp-editor.php:1073 wp-includes/js/dist/editor.js:7717 +msgid "Redo" +msgstr "Gör om" + +#: wp-includes/class-wp-editor.php:1072 wp-includes/js/dist/editor.js:7755 +msgid "Undo" +msgstr "Ångra" + +#: wp-includes/class-wp-editor.php:1071 +msgid "Select all" +msgstr "Välj alla" + +#: wp-includes/class-wp-editor.php:1070 +msgid "Paste" +msgstr "Klistra in" + +#: wp-includes/class-wp-editor.php:1068 +msgid "Cut" +msgstr "Klipp ut" + +#: wp-includes/class-wp-editor.php:1066 +msgid "Decrease indent" +msgstr "Minska indrag" + +#: wp-includes/class-wp-editor.php:1065 +msgid "Increase indent" +msgstr "Öka indrag" + +#: wp-includes/class-wp-editor.php:1064 +msgid "Justify" +msgstr "Marginaljustera" + +#: wp-includes/class-wp-editor.php:1063 +#: wp-includes/js/dist/block-editor.js:7958 +msgid "Align left" +msgstr "Vänsterställ" + +#: wp-includes/class-wp-editor.php:1062 +#: wp-includes/js/dist/block-editor.js:7966 +msgid "Align right" +msgstr "Högerställ" + +#: wp-includes/class-wp-editor.php:1061 +#: wp-includes/js/dist/block-editor.js:7962 +msgid "Align center" +msgstr "Centrera" + +#: wp-includes/class-wp-editor.php:1059 +msgid "Font Sizes" +msgstr "Typsnittsstorlekar" + +#: wp-includes/class-wp-editor.php:1058 +msgid "Font Family" +msgstr "Typsnittsfamilj" + +#: wp-includes/class-wp-editor.php:1057 +msgid "Source code" +msgstr "Källkod" + +#: wp-includes/class-wp-editor.php:1053 +msgid "Clear formatting" +msgstr "Rensa formatering" + +#: wp-includes/class-wp-editor.php:1052 +msgid "Superscript" +msgstr "Upphöjd text" + +#: wp-includes/class-wp-editor.php:1051 +msgid "Subscript" +msgstr "Nedsänkt text" + +#: wp-includes/class-wp-editor.php:1050 +#: wp-includes/js/dist/format-library.js:1430 +#: wp-includes/js/dist/format-library.js:1450 +msgid "Strikethrough" +msgstr "Genomstruken" + +#: wp-includes/class-wp-editor.php:1049 +#: wp-includes/js/dist/format-library.js:1472 +msgid "Underline" +msgstr "Understreck" + +#: wp-includes/class-wp-editor.php:1048 +msgctxt "HTML elements" +msgid "Inline" +msgstr "Inline" + +#: wp-includes/class-wp-editor.php:1046 +msgctxt "HTML tag" +msgid "Address" +msgstr "Adress" + +#: wp-includes/class-wp-editor.php:1045 +msgctxt "HTML tag" +msgid "Preformatted" +msgstr "Förformaterad" + +#: wp-includes/class-wp-editor.php:1044 +msgctxt "HTML tag" +msgid "Pre" +msgstr "Förformaterad" + +#: wp-includes/class-wp-editor.php:1043 +msgctxt "HTML tag" +msgid "Div" +msgstr "Div" + +#: wp-includes/class-wp-editor.php:1041 +#: wp-includes/js/dist/block-library.js:5825 +msgid "Paragraph" +msgstr "Stycke" + +#. translators: block tags +#: wp-includes/class-wp-editor.php:1040 +msgctxt "TinyMCE" +msgid "Blocks" +msgstr "Block" + +#: wp-includes/class-wp-editor.php:1037 +msgid "Heading 6" +msgstr "Rubrik 6" + +#: wp-includes/class-wp-editor.php:1036 +msgid "Heading 5" +msgstr "Rubrik 5" + +#: wp-includes/class-wp-editor.php:1035 +msgid "Heading 4" +msgstr "Rubrik 4" + +#: wp-includes/class-wp-editor.php:1034 +msgid "Heading 3" +msgstr "Rubrik 3" + +#: wp-includes/class-wp-editor.php:1033 +msgid "Heading 2" +msgstr "Rubrik 2" + +#: wp-includes/class-wp-editor.php:1032 +msgid "Heading 1" +msgstr "Rubrik 1" + +#: wp-includes/class-wp-editor.php:1031 +msgctxt "TinyMCE" +msgid "Headings" +msgstr "Rubriker" + +#: wp-includes/class-wp-editor.php:1029 +msgctxt "TinyMCE" +msgid "Formats" +msgstr "Format" + +#: wp-includes/class-wp-editor.php:1028 +msgid "New document" +msgstr "Nytt dokument" + +#: wp-includes/class-wp-editor.php:191 wp-includes/class-wp-editor.php:1287 +msgctxt "Name for the Text editor tab (formerly HTML)" +msgid "Text" +msgstr "Text" + +#: wp-includes/class-wp-editor.php:189 wp-includes/class-wp-editor.php:1286 +msgctxt "Name for the Visual editor tab" +msgid "Visual" +msgstr "Visuellt" + +#: wp-includes/ms-load.php:495 +msgid "If you’re still stuck with this message, then check that your database contains the following tables:" +msgstr "Om du fortfarande får upp det här meddelandet, kontrollera så att databasen innehåller följande tabeller:" + +#: wp-includes/ms-load.php:493 +msgid "https://codex.wordpress.org/Debugging_a_WordPress_Network" +msgstr "https://codex.wordpress.org/Debugging_a_WordPress_Network" + +#: wp-includes/ms-load.php:492 +msgid "Read the bug report page. Some of the guidelines there may help you figure out what went wrong." +msgstr "Se dokumentationen för buggrapportering. Vissa riktlinjer där kanske kan hjälpa dig att lista ut vad som gick fel." + +#: wp-includes/ms-load.php:489 +msgid "What do I do now?" +msgstr "Vad gör jag nu?" + +#. translators: 1: site url, 2: table name, 3: database name +#: wp-includes/ms-load.php:483 +msgid "Could not find site %1$s. Searched for table %2$s in database %3$s. Is that right?" +msgstr "Kunde inte hitta webbplatsen %1$s. Sökte efter tabellen %2$s i databasen %3$s. Är det korrekt?" + +#. translators: %s: table name +#: wp-includes/ms-load.php:477 +msgid "Database tables are missing. This means that MySQL is not running, WordPress was not installed properly, or someone deleted %s. You really should look at your database now." +msgstr "Databastabeller saknas. Det betyder att MySQL inte är igång, WordPress är inte korrekt installerat eller så har någon raderat %s. Du bör kontrollera din databas omgående." + +#: wp-includes/ms-load.php:472 +msgid "If you are the owner of this network please check that MySQL is running properly and all tables are error free." +msgstr "Om du är ägaren av det här nätverket, vänligen kontrollera att MySQL är igång och fungerar som det ska och att inga tabeller innehåller fel." + +#: wp-includes/ms-load.php:471 +msgid "If your site does not display, please contact the owner of this network." +msgstr "Om din webbplats inte visas, var vänlig kontakta ägaren av det här nätverket." + +#: wp-includes/ms-load.php:122 +msgid "This site has been archived or suspended." +msgstr "Denna webbplats har arkiverats eller stängts av." + +#: wp-includes/ms-load.php:111 +msgid "This site has not been activated yet. If you are having problems activating your site, please contact %s." +msgstr "Den här webbplatsen har inte aktiverats än. Om du har problem med att aktivera din webbplats, vänligen kontakta %s." + +#: wp-includes/ms-load.php:99 +msgid "This site is no longer available." +msgstr "Denna webbplats är inte längre tillgänglig." + +#: wp-includes/query.php:871 +msgid "https://codex.wordpress.org/Function_Reference/is_main_query" +msgstr "https://codex.wordpress.org/Function_Reference/is_main_query" + +#. translators: 1: pre_get_posts 2: WP_Query->is_main_query() 3: +#. is_main_query() 4: link to codex is_main_query() page. +#: wp-includes/query.php:867 +msgid "In %1$s, use the %2$s method, not the %3$s function. See %4$s." +msgstr "I %1$s, använd metoden %2$s, inte funktionen %3$s. Se %4$s." + +#: wp-includes/query.php:157 wp-includes/query.php:182 +#: wp-includes/query.php:207 wp-includes/query.php:235 +#: wp-includes/query.php:263 wp-includes/query.php:291 +#: wp-includes/query.php:324 wp-includes/query.php:348 +#: wp-includes/query.php:374 wp-includes/query.php:399 +#: wp-includes/query.php:419 wp-includes/query.php:452 +#: wp-includes/query.php:485 wp-includes/query.php:515 +#: wp-includes/query.php:539 wp-includes/query.php:570 +#: wp-includes/query.php:594 wp-includes/query.php:618 +#: wp-includes/query.php:638 wp-includes/query.php:662 +#: wp-includes/query.php:695 wp-includes/query.php:727 +#: wp-includes/query.php:751 wp-includes/query.php:775 +#: wp-includes/query.php:799 wp-includes/query.php:823 +#: wp-includes/query.php:843 +msgid "Conditional query tags do not work before the query is run. Before then, they always return false." +msgstr "Villkorstyrda query-taggar fungerar inte innan en query har körts. Innan dess är deras värde alltid ”false”." + +#: wp-includes/taxonomy.php:4385 +msgid "Invalid object ID." +msgstr "Ogiltigt objekt-ID." + +#. translators: %s: taxonomy label, %l: list of terms formatted as per +#. $term_template +#: wp-includes/taxonomy.php:4313 +msgid "%s: %l." +msgstr "%s: %l." + +#: wp-includes/taxonomy.php:3800 +msgid "Could not split shared term." +msgstr "Kunde inte dela på delad term." + +#. translators: %s: taxonomy term slug +#: wp-includes/taxonomy.php:2904 +msgid "The slug “%s” is already in use by another term." +msgstr "Permalänken ”%s” används redan för en annan term." + +#: wp-includes/taxonomy.php:2536 +msgid "Could not insert term relationship into the database." +msgstr "Kunde inte infoga termrelation i databasen" + +#: wp-includes/taxonomy.php:2254 +msgid "Could not insert term into the database." +msgstr "Kunde inte infoga term i databasen." + +#: wp-includes/taxonomy.php:2233 +msgid "A term with the name provided already exists in this taxonomy." +msgstr "En term med angivet namn och permalänk finns redan under denna taxanomi." + +#: wp-includes/taxonomy.php:2230 +msgid "A term with the name provided already exists with this parent." +msgstr "En term med det angivna namnet finns redan med denna överordnad." + +#: wp-includes/taxonomy.php:2124 wp-includes/taxonomy.php:2838 +msgid "A name is required for this term." +msgstr "Ett namn krävs för den här termen." + +#: wp-includes/taxonomy.php:1218 wp-includes/taxonomy.php:1271 +msgid "Term meta cannot be added to terms that are shared between taxonomies." +msgstr "Term-meta kan inte läggas till termer som är delade mellan taxonomier." + +#: wp-includes/taxonomy.php:817 wp-includes/taxonomy.php:2809 +#: wp-includes/taxonomy.php:4167 +msgid "Empty Term." +msgstr "Tom term." + +#: wp-includes/taxonomy.php:568 +msgid "← Back to Categories" +msgstr "← Åter till kategorierna" + +#: wp-includes/taxonomy.php:568 +msgid "← Back to Tags" +msgstr "← Tillbaka till etiketter" + +#. translators: Tab heading when selecting from the most used terms +#: wp-includes/taxonomy.php:567 +msgctxt "categories" +msgid "Most Used" +msgstr "Mest använda" + +#. translators: Tab heading when selecting from the most used terms +#: wp-includes/taxonomy.php:567 +msgctxt "tags" +msgid "Most Used" +msgstr "Mest använda" + +#: wp-includes/taxonomy.php:565 +msgid "Categories list" +msgstr "Kategorilista" + +#: wp-includes/taxonomy.php:565 +msgid "Tags list" +msgstr "Ettikettlista" + +#: wp-includes/taxonomy.php:564 +msgid "Categories list navigation" +msgstr "Navigation för kategorilista" + +#: wp-includes/taxonomy.php:564 +msgid "Tags list navigation" +msgstr "Navigation för etikettlista" + +#: wp-includes/taxonomy.php:563 +msgid "No tags" +msgstr "Inga etiketter" + +#: wp-includes/taxonomy.php:562 +msgid "No categories found." +msgstr "Inga kategorier hittades." + +#: wp-includes/taxonomy.php:562 +msgid "No tags found." +msgstr "Inga etiketter hittades." + +#: wp-includes/taxonomy.php:561 +msgid "Choose from the most used tags" +msgstr "Välj från de mest använda etiketterna" + +#: wp-includes/taxonomy.php:560 +msgid "Add or remove tags" +msgstr "Lägg till eller ta bort etiketter" + +#: wp-includes/taxonomy.php:559 +msgid "Separate tags with commas" +msgstr "Separera etiketter med kommatecken" + +#: wp-includes/taxonomy.php:558 +msgid "New Category Name" +msgstr "Namn för ny kategori" + +#: wp-includes/taxonomy.php:558 +msgid "New Tag Name" +msgstr "Namn för ny etikett" + +#: wp-includes/taxonomy.php:557 +msgid "Add New Category" +msgstr "Lägg till ny kategori" + +#: wp-includes/taxonomy.php:557 wp-includes/js/dist/editor.js:10447 +msgid "Add New Tag" +msgstr "Lägg till en ny etikett" + +#: wp-includes/taxonomy.php:556 +msgid "Update Category" +msgstr "Uppdatera kategori" + +#: wp-includes/taxonomy.php:556 +msgid "Update Tag" +msgstr "Uppdatera etikett" + +#: wp-includes/taxonomy.php:555 +msgid "View Category" +msgstr "Visa kategori" + +#: wp-includes/taxonomy.php:555 +msgid "View Tag" +msgstr "Visa etikett" + +#: wp-includes/taxonomy.php:554 +msgid "Edit Category" +msgstr "Redigera kategori" + +#: wp-includes/taxonomy.php:554 +msgid "Edit Tag" +msgstr "Redigera etikett" + +#: wp-includes/taxonomy.php:553 +msgid "Parent Category:" +msgstr "Överordnad kategori:" + +#: wp-includes/taxonomy.php:552 wp-includes/js/dist/editor.js:11856 +msgid "Parent Category" +msgstr "Överordnad kategori" + +#: wp-includes/taxonomy.php:551 +msgid "All Categories" +msgstr "Alla kategorier" + +#: wp-includes/taxonomy.php:551 +msgid "All Tags" +msgstr "Alla etiketter" + +#: wp-includes/taxonomy.php:550 +msgid "Popular Tags" +msgstr "Populära etiketter" + +#: wp-includes/taxonomy.php:549 +msgid "Search Categories" +msgstr "Sök kategorier" + +#: wp-includes/taxonomy.php:549 +msgid "Search Tags" +msgstr "Sök etiketter" + +#: wp-includes/taxonomy.php:548 +msgctxt "taxonomy singular name" +msgid "Category" +msgstr "Kategori" + +#: wp-includes/taxonomy.php:548 +msgctxt "taxonomy singular name" +msgid "Tag" +msgstr "Etikett" + +#: wp-includes/taxonomy.php:547 +msgctxt "taxonomy general name" +msgid "Categories" +msgstr "Kategorier" + +#: wp-includes/taxonomy.php:547 +msgctxt "taxonomy general name" +msgid "Tags" +msgstr "Etiketter" + +#: wp-includes/taxonomy.php:467 +msgid "Unregistering a built-in taxonomy is not allowed." +msgstr "Det är inte tillåtet att avregistrera en inbyggd taxonomi." + +#: wp-includes/taxonomy.php:422 wp-includes/taxonomy.php:423 +msgid "Taxonomy names must be between 1 and 32 characters in length." +msgstr "Namn på taxanomier måste vara mellan 1 och 32 tecken." + +#: wp-includes/taxonomy.php:166 +msgctxt "post format" +msgid "Format" +msgstr "Format" + +#: wp-includes/taxonomy.php:165 +msgctxt "post format" +msgid "Formats" +msgstr "Format" + +#: wp-includes/taxonomy.php:142 +msgid "← Back to Link Categories" +msgstr "← Gå tillbaka till kategorierna" + +#: wp-includes/taxonomy.php:138 +msgid "New Link Category Name" +msgstr "Namn för ny länkkategori" + +#: wp-includes/taxonomy.php:137 +msgid "Add New Link Category" +msgstr "Lägg till ny länkkategori" + +#: wp-includes/taxonomy.php:136 +msgid "Update Link Category" +msgstr "Uppdatera länkkategori" + +#: wp-includes/taxonomy.php:135 +msgid "Edit Link Category" +msgstr "Redigera länkkategori" + +#: wp-includes/taxonomy.php:134 +msgid "All Link Categories" +msgstr "Alla länkkategorier" + +#: wp-includes/taxonomy.php:132 +msgid "Search Link Categories" +msgstr "Sök länkkategorier" + +#: wp-includes/taxonomy.php:131 +msgid "Link Category" +msgstr "Länkkategori" + +#: wp-includes/taxonomy.php:130 +msgid "Link Categories" +msgstr "Länkkategorier" + +#: wp-includes/taxonomy.php:113 +msgid "Navigation Menus" +msgstr "Navigeringsmenyer" + +#. translators: used to join items in a list with only 2 items +#: wp-includes/formatting.php:4926 +msgid "%1$s and %2$s" +msgstr "%1$s och %2$s" + +#. translators: used to join last two items in a list with more than 2 times +#: wp-includes/formatting.php:4924 +msgid "%1$s, and %2$s" +msgstr "%1$s och %2$s" + +#. translators: used to join items in a list with more than 2 items +#: wp-includes/formatting.php:4922 +msgid "%1$s, %2$s" +msgstr "%1$s, %2$s" + +#: wp-includes/formatting.php:4682 +msgid "https://codex.wordpress.org/Using_Permalinks#Choosing_your_permalink_structure" +msgstr "https://codex.wordpress.org/Using_Permalinks#Choosing_your_permalink_structure" + +#. translators: %s: Codex URL +#: wp-includes/formatting.php:4681 +msgid "A structure tag is required when using custom permalinks. Learn more" +msgstr "En strukturtagg krävs när anpassade permalänkar används. Läs mer" + +#: wp-includes/formatting.php:4663 +msgid "The timezone you have entered is not valid. Please select a valid timezone." +msgstr "Tidszonen du har angett är inte giltigt. Välj en giltig tidszon." + +#: wp-includes/formatting.php:4604 +msgid "The Site address you entered did not appear to be a valid URL. Please enter a valid URL." +msgstr "Webbplatsadressen angiven verkar inte vara en giltig URL. Var vänlig ange en giltig URL." + +#: wp-includes/formatting.php:4591 +msgid "The WordPress address you entered did not appear to be a valid URL. Please enter a valid URL." +msgstr "WordPress-adressen du angav verkade inte vara en giltig URL. Ange en giltig URL." + +#: wp-includes/formatting.php:4481 +msgid "The email address entered did not appear to be a valid email address. Please enter a valid email address." +msgstr "Den angivna e-postadressen verkar inte vara en giltig e-postadress. Ange en giltig e-postadress." + +#. translators: Time difference between two dates, in years. %s: Number of +#. years +#: wp-includes/formatting.php:3666 +msgid "%s year" +msgid_plural "%s years" +msgstr[0] "%s år" +msgstr[1] "%s år" + +#. translators: Time difference between two dates, in months. %s: Number of +#. months +#: wp-includes/formatting.php:3659 +msgid "%s month" +msgid_plural "%s months" +msgstr[0] "%s månad" +msgstr[1] "%s månader" + +#. translators: Time difference between two dates, in weeks. %s: Number of +#. weeks +#: wp-includes/formatting.php:3652 +msgid "%s week" +msgid_plural "%s weeks" +msgstr[0] "%s vecka" +msgstr[1] "%s veckor" + +#. translators: Time difference between two dates, in days. %s: Number of days +#: wp-includes/formatting.php:3645 +msgid "%s day" +msgid_plural "%s days" +msgstr[0] "%s dag" +msgstr[1] "%s dagar" + +#. translators: Time difference between two dates, in minutes (min=minute). %s: +#. Number of minutes +#: wp-includes/formatting.php:3631 +msgid "%s min" +msgid_plural "%s mins" +msgstr[0] "%s minut" +msgstr[1] "%s minuter" + +#: wp-includes/formatting.php:142 +msgctxt "Comma-separated list of replacement words in your language" +msgid "’tain’t,’twere,’twas,’tis,’twill,’til,’bout,’nuff,’round,’cause,’em" +msgstr " " + +#: wp-includes/formatting.php:134 +msgctxt "Comma-separated list of words to texturize in your language" +msgid "'tain't,'twere,'twas,'tis,'twill,'til,'bout,'nuff,'round,'cause,'em" +msgstr " " + +#. translators: em dash +#: wp-includes/formatting.php:118 +msgctxt "em dash" +msgid "—" +msgstr "—" + +#. translators: en dash +#: wp-includes/formatting.php:116 +msgctxt "en dash" +msgid "–" +msgstr "–" + +#. translators: closing curly single quote +#: wp-includes/formatting.php:113 +msgctxt "closing curly single quote" +msgid "’" +msgstr "’" + +#. translators: opening curly single quote +#: wp-includes/formatting.php:111 +msgctxt "opening curly single quote" +msgid "‘" +msgstr "’" + +#. translators: double prime, for example in 9" (nine inches) +#: wp-includes/formatting.php:108 +msgctxt "double prime" +msgid "″" +msgstr "″" + +#. translators: prime, for example in 9' (nine feet) +#: wp-includes/formatting.php:106 +msgctxt "prime" +msgid "′" +msgstr "′" + +#. translators: apostrophe, for example in 'cause or can't +#: wp-includes/formatting.php:103 +msgctxt "apostrophe" +msgid "’" +msgstr "’" + +#. translators: closing curly double quote +#: wp-includes/formatting.php:100 +msgctxt "closing curly double quote" +msgid "”" +msgstr "”" + +#. translators: opening curly double quote +#: wp-includes/formatting.php:98 wp-includes/formatting.php:5245 +msgctxt "opening curly double quote" +msgid "“" +msgstr "”" + +#: wp-includes/deprecated.php:3935 wp-includes/deprecated.php:3952 +msgid "The Press This plugin is required." +msgstr "Tillägget Blogga detta krävs." + +#. translators: %s: file name +#: wp-includes/deprecated.php:3199 +msgid "File “%s” is not an image." +msgstr "Filen ”%s” är inte en bild." + +#: wp-includes/deprecated.php:3190 +msgid "The GD image library is not installed." +msgstr "GD-grafikbiblioteket är inte installerat." + +#. translators: %s: file name +#: wp-includes/deprecated.php:3186 +msgid "File “%s” doesn’t exist?" +msgstr "Saknas filen ”%s”?" + +#: wp-includes/deprecated.php:3134 +msgid "Are you sure you want to do this?" +msgstr "Är du säker på att du vill göra det här?" + +#: wp-includes/deprecated.php:2683 +msgid "Last Post" +msgstr "Sista inlägget" + +#: wp-includes/deprecated.php:2683 +msgid "First Post" +msgstr "Första inlägget" + +#: wp-includes/deprecated.php:963 +msgid "Last updated" +msgstr "Senast uppdaterat" + +#: wp-includes/deprecated.php:64 +msgid "new WordPress Loop" +msgstr "Ny WordPress-loop" + +#: wp-includes/bookmark-template.php:218 +msgid "Bookmarks" +msgstr "Bokmärken" + +#: wp-includes/bookmark-template.php:89 +msgid "Last updated: %s" +msgstr "Senast uppdaterat: %s" + +#: wp-includes/class-wp-customize-manager.php:5975 +msgid "Please enter a valid YouTube URL." +msgstr "Ange en giltig YouTube-URL." + +#. translators: 1: .mp4, 2: .mov +#: wp-includes/class-wp-customize-manager.php:5950 +msgid "Only %1$s or %2$s files may be used for header video. Please convert your video file and try again, or, upload your video to YouTube and link it with the option below." +msgstr "Endast filer av typerna %1$s och %2$s kan användas för video i sidhuvudet. Konvertera videofilen och försök igen. Det går också att ladda upp videon till YouTube och ange länken med alternativet nedan." + +#: wp-includes/class-wp-customize-manager.php:5942 +msgid "This video file is too large to use as a header video. Try a shorter video or optimize the compression settings and re-upload a file that is less than 8MB. Or, upload your video to YouTube and link it with the option below." +msgstr "Denna videofil är för stor för att användas i sidhuvudet. Försök med en kortare video eller optimera inställningarna för kompression och ladda upp en fil som är mindre än 8 MB. Det går även att ladda upp videon till YouTube och ange dess adress i alternativet nedan." + +#: wp-includes/class-wp-customize-manager.php:5901 +msgid "Unrecognized background setting." +msgstr "Ogiltig inställning för bakgrund." + +#: wp-includes/class-wp-customize-manager.php:5892 +#: wp-includes/class-wp-customize-manager.php:5896 +msgid "Invalid value for background size." +msgstr "Ogiltigt värde för bakgrundsstorlek." + +#: wp-includes/class-wp-customize-manager.php:5888 +msgid "Invalid value for background position Y." +msgstr "Ogiltigt värde för bakgrundens position i y-led." + +#: wp-includes/class-wp-customize-manager.php:5884 +msgid "Invalid value for background position X." +msgstr "Ogiltigt värde för bakgrundens position i x-led." + +#: wp-includes/class-wp-customize-manager.php:5880 +msgid "Invalid value for background attachment." +msgstr "Ogiltigt värde för bakgrundsinställning." + +#: wp-includes/class-wp-customize-manager.php:5876 +msgid "Invalid value for background repeat." +msgstr "Ogiltigt värde för repetition av bakgrund." + +#: wp-includes/class-wp-customize-manager.php:5628 +msgid "CSS code" +msgstr "CSS-kod" + +#: wp-includes/class-wp-customize-manager.php:5606 +msgid "Additional CSS" +msgstr "Extra CSS" + +#: wp-includes/class-wp-customize-manager.php:5580 +msgid "Screen reader users: when in forms mode, you may need to press the escape key twice." +msgstr "Den som använder skärmläsare kan i formulärläge behöva trycka på escape-tangenten två gånger." + +#: wp-includes/class-wp-customize-manager.php:5570 +msgid "Learn more about CSS" +msgstr "Lär dig mer om CSS" + +#: wp-includes/class-wp-customize-manager.php:5569 +msgid "https://codex.wordpress.org/CSS" +msgstr "https://codex.wordpress.org/CSS" + +#: wp-includes/class-wp-customize-manager.php:5566 +msgid "Add your own CSS code here to customize the appearance and layout of your site." +msgstr "Du kan lägg till din egen CSS-kod här för att anpassa utseende och layout för din webbplats. " + +#: wp-includes/class-wp-customize-manager.php:5557 +msgid "Posts page" +msgstr "Inläggssida" + +#: wp-includes/class-wp-customize-manager.php:5539 +msgid "Homepage" +msgstr "Startsida" + +#: wp-includes/class-wp-customize-manager.php:5523 +msgid "A static page" +msgstr "En statisk sida" + +#: wp-includes/class-wp-customize-manager.php:5522 +msgid "Your latest posts" +msgstr "Dina senaste inlägg" + +#: wp-includes/class-wp-customize-manager.php:5518 +msgid "Your homepage displays" +msgstr "Din startsida visar" + +#: wp-includes/class-wp-customize-manager.php:5501 +msgid "You can choose what’s displayed on the homepage of your site. It can be posts in reverse chronological order (classic blog), or a fixed/static page. To set a static homepage, you first need to create two Pages. One will become the homepage, and the other will be where your posts are displayed." +msgstr "Du kan välja vad som visas på startsidan för din webbplats. Det kan vara blogginlägg i omvänd kronologisk ordning (klassisk blogg) eller en statisk sida. För att ange en statisk sida behöver du först skapa två sidor. Den ena kommer att användas som startsida och på den andra sidan kommer dina blogginlägg att visas." + +#: wp-includes/class-wp-customize-manager.php:5499 +msgid "Homepage Settings" +msgstr "Inställningar för startsida" + +#: wp-includes/class-wp-customize-manager.php:5476 +msgid "Scroll with Page" +msgstr "Rulla med sidan" + +#: wp-includes/class-wp-customize-manager.php:5458 +msgid "Repeat Background Image" +msgstr "Repetera bakgrundsbild" + +#: wp-includes/class-wp-customize-manager.php:5439 +msgid "Original" +msgstr "Original" + +#: wp-includes/class-wp-customize-manager.php:5435 +#: wp-includes/js/dist/block-library.js:10328 +#: wp-includes/js/dist/block-library.js:10355 +msgid "Image Size" +msgstr "Bildstorlek" + +#: wp-includes/class-wp-customize-manager.php:5385 +msgctxt "Custom Preset" +msgid "Custom" +msgstr "Anpassad" + +#: wp-includes/class-wp-customize-manager.php:5384 +msgctxt "Repeat Image" +msgid "Repeat" +msgstr "Repetera" + +#: wp-includes/class-wp-customize-manager.php:5383 +#: wp-includes/class-wp-customize-manager.php:5440 +msgid "Fit to Screen" +msgstr "Anpassa till skärmen" + +#: wp-includes/class-wp-customize-manager.php:5382 +#: wp-includes/class-wp-customize-manager.php:5441 +msgid "Fill Screen" +msgstr "Täck skärmen" + +#: wp-includes/class-wp-customize-manager.php:5381 +msgctxt "Default Preset" +msgid "Default" +msgstr "Standard" + +#: wp-includes/class-wp-customize-manager.php:5377 +msgctxt "Background Preset" +msgid "Preset" +msgstr "Förinställd" + +#: wp-includes/class-wp-customize-manager.php:5314 +msgid "Or, enter a YouTube URL:" +msgstr "Eller ange en YouTube-URL:" + +#: wp-includes/class-wp-customize-manager.php:5300 +msgid "Header Video" +msgstr "Sidhuvudets videoklipp." + +#. translators: 1: .mp4, 2: header height in pixels +#: wp-includes/class-wp-customize-manager.php:5222 +msgid "Upload your video in %1$s format and minimize its file size for best results. Your theme recommends a height of %2$s pixels." +msgstr "För bästa resultat bör du ladda upp videon i formatet %1$s och optimera dess filstorlek. Ditt tema rekommenderar en höjd på %2$s pixlar." + +#. translators: 1: .mp4, 2: header width in pixels +#: wp-includes/class-wp-customize-manager.php:5215 +msgid "Upload your video in %1$s format and minimize its file size for best results. Your theme recommends a width of %2$s pixels." +msgstr "För bästa resultat bör du ladda upp videon i formatet %1$s och optimera dess filstorlek. Ditt tema rekommenderar en bredd på %2$s pixlar." + +#. translators: 1: .mp4, 2: header size in pixels +#: wp-includes/class-wp-customize-manager.php:5208 +msgid "Upload your video in %1$s format and minimize its file size for best results. Your theme recommends dimensions of %2$s pixels." +msgstr "För bästa resultat bör du ladda upp videon i formatet %1$s och optimera dess filstorlek. Ditt tema rekommenderar bildstorleken %2$s pixlar." + +#: wp-includes/class-wp-customize-manager.php:5201 +msgid "If you add a video, the image will be used as a fallback while the video loads." +msgstr "Om du lägger till ett videoklipp kommer bilden visas medan videoklippet hämtas." + +#: wp-includes/class-wp-customize-manager.php:5200 +msgid "Header Media" +msgstr "Media i sidhuvud" + +#: wp-includes/class-wp-customize-manager.php:5191 +#: wp-includes/js/dist/block-library.js:5693 +#: wp-includes/js/dist/block-library.js:9240 +#: wp-includes/js/dist/block-library.js:16650 +#: wp-includes/js/dist/block-library.js:17500 +msgid "Background Color" +msgstr "Färg för bakgrund" + +#: wp-includes/class-wp-customize-manager.php:5167 +msgid "Header Text Color" +msgstr "Textfärg för sidhuvud" + +#: wp-includes/class-wp-customize-manager.php:5133 +msgid "Colors" +msgstr "Färger" + +#: wp-includes/class-wp-customize-manager.php:5112 +msgid "Choose logo" +msgstr "Välj logga" + +#: wp-includes/class-wp-customize-manager.php:5110 +msgid "No logo selected" +msgstr "Ingen logga vald" + +#: wp-includes/class-wp-customize-manager.php:5107 +msgid "Change logo" +msgstr "Ändra logga" + +#: wp-includes/class-wp-customize-manager.php:5106 +#: wp-includes/class-wp-customize-manager.php:5111 +msgid "Select logo" +msgstr "Välj logga" + +#: wp-includes/class-wp-customize-manager.php:5098 +msgid "Logo" +msgstr "Logga" + +#. translators: %s: site icon size in pixels +#: wp-includes/class-wp-customize-manager.php:5073 +msgid "Site Icons should be square and at least %s pixels." +msgstr "Webbplats-ikoner bör vara kvadratiska och åtminstone %s pixlar stora." + +#: wp-includes/class-wp-customize-manager.php:5071 +msgid "Site Icons are what you see in browser tabs, bookmark bars, and within the WordPress mobile apps. Upload one here!" +msgstr "Webbplats-ikoner syns i webbläsares flikar, bokmärkesfält och inom WordPress mobila appar. Ladda upp en egen här!" + +#: wp-includes/class-wp-customize-manager.php:5069 +msgid "Site Icon" +msgstr "Ikon för webbplats" + +#: wp-includes/class-wp-customize-manager.php:5047 +#: wp-includes/class-wp-customize-manager.php:5155 +msgid "Display Site Title and Tagline" +msgstr "Visa webbplatsrubrik och slogan" + +#: wp-includes/class-wp-customize-manager.php:5028 +msgid "Tagline" +msgstr "Slogan" + +#: wp-includes/class-wp-customize-manager.php:4994 +msgid "Site Identity" +msgstr "Webbplatsens identitet" + +#: wp-includes/class-wp-customize-manager.php:4967 +msgid "WordPress.org themes" +msgstr "Teman på WordPress.org" + +#: wp-includes/class-wp-customize-manager.php:4952 +msgid "Installed themes" +msgstr "Installerade teman" + +#: wp-includes/class-wp-customize-manager.php:4939 +msgid "While previewing a new theme, you can continue to tailor things like widgets and menus, and explore theme-specific options." +msgstr "Medan du förhandsvisar ett nytt tema kan du även anpassa olika saker, t.ex. widgetar och menyer, och utforska temats egna alternativ." + +#: wp-includes/class-wp-customize-manager.php:4938 +msgid "Looking for a theme? You can search or browse the WordPress.org theme directory, install and preview themes, then activate them right here." +msgstr "Letar du efter ett tema? Härifrån kan du söka och bläddra i temakatalogen på WordPress.org för att installera, förhandsvisa och aktivera dem." + +#: wp-includes/class-wp-customize-manager.php:4904 +msgid "Enter mobile preview mode" +msgstr "Gå till förhandsgranskningsläge för mobil" + +#: wp-includes/class-wp-customize-manager.php:4901 +msgid "Enter tablet preview mode" +msgstr "Gå till förhandsgranskningsläge för surfplatta" + +#: wp-includes/class-wp-customize-manager.php:4897 +msgid "Enter desktop preview mode" +msgstr "Gå till förhandsgranskningsläge för desktop" + +#. translators: %s: theme name +#: wp-includes/class-wp-customize-manager.php:4817 +msgid "Showing details for theme: %s" +msgstr "Visar detaljer för temat %s" + +#. translators: %d: number of themes being displayed, which cannot currently +#. consider singular vs. plural forms +#: wp-includes/class-wp-customize-manager.php:4815 +msgid "Displaying %d themes" +msgstr "Visar %d teman" + +#. translators: %d: number of theme search results, which cannot currently +#. consider singular vs. plural forms +#: wp-includes/class-wp-customize-manager.php:4813 +msgid "%d themes found" +msgstr "%d teman hittade" + +#: wp-includes/class-wp-customize-manager.php:4811 +msgid "Are you sure you want to delete this theme?" +msgstr "Är du helt säker på att du vill radera detta tema?" + +#. translators: %s: document title from the preview +#: wp-includes/class-wp-customize-manager.php:4474 +msgid "Live Preview: %s" +msgstr "Förhandsgranskning live: %s" + +#. translators: %s: document title from the preview +#: wp-includes/class-wp-customize-manager.php:4471 +msgid "Customize: %s" +msgstr "Anpassa: %s" + +#: wp-includes/class-wp-customize-manager.php:4273 +msgid "Copied" +msgstr "Kopierad" + +#: wp-includes/class-wp-customize-manager.php:4273 +#: wp-includes/class-wp-editor.php:1069 +msgid "Copy" +msgstr "Kopiera" + +#: wp-includes/class-wp-customize-manager.php:4267 +msgid "Preview Link" +msgstr "Länk för förhandsvisning" + +#: wp-includes/class-wp-customize-manager.php:4264 +msgid "See how changes would look live on your website, and share the preview with people who can't access the Customizer." +msgstr "Se live hur ändringarna skulle se ut på din webbplats och dela förhandsvisningen med personer som inte kommer åt anpassaren." + +#: wp-includes/class-wp-customize-manager.php:4262 +msgid "Share Preview Link" +msgstr "Dela länk för förhandsvisning" + +#: wp-includes/class-wp-customize-manager.php:4243 +msgid "Update anyway, even though it might break your site?" +msgstr "Uppdatera ändå, trots att din webbplats kanske slutar fungera?" + +#: wp-includes/class-wp-customize-manager.php:4229 +msgid "Take over" +msgstr "Ta över" + +#: wp-includes/class-wp-customize-manager.php:4225 +msgid "Go back" +msgstr "Återgå" + +#. translators: %s: User who is customizing the changeset in customizer. +#: wp-includes/class-wp-customize-manager.php:4044 +msgid "%s is already customizing this site. Do you want to take over?" +msgstr "%s håller redan på att anpassa denna webbplats. Vill du ta över?" + +#. translators: %s: User who is customizing the changeset in customizer. +#: wp-includes/class-wp-customize-manager.php:4042 +msgid "%s is already customizing this site. Please wait until they are done to try customizing. Your latest changes have been autosaved." +msgstr "%s håller redan på att anpassa denna webbplats. Vänta tills denna person är klar innan du försöker använda anpassaren. Dina senaste ändringar har sparats automatiskt." + +#. translators: %s: User who is customizing the changeset in customizer. +#: wp-includes/class-wp-customize-manager.php:4037 +msgid "%s is already customizing this changeset. Do you want to take over?" +msgstr "%s anpassar redan detta anpassningspaket. Vill du ta över?" + +#. translators: %s: User who is customizing the changeset in customizer. +#: wp-includes/class-wp-customize-manager.php:4035 +msgid "%s is already customizing this changeset. Please wait until they are done to try customizing. Your latest changes have been autosaved." +msgstr "%s anpassar redan detta anpassningspaket. Vänta med att försöka göra anpassningar tills det är ledigt. Dina senaste ändringar har sparats automatiskt." + +#: wp-includes/class-wp-customize-manager.php:3825 +msgid "Removing %1$s manually will cause PHP warnings. Use the %2$s filter instead." +msgstr "Att ta bort %1$s manuellt kommer att ge varningar i PHP. Använd filtret %2$s istället." + +#: wp-includes/class-wp-customize-manager.php:3290 +msgid "Sorry, you are not allowed to take over." +msgstr "Du saknar behörighet att ta över." + +#: wp-includes/class-wp-customize-manager.php:3281 +msgid "No changeset found to take over" +msgstr "Inget anpassningspaket hittades att överta" + +#: wp-includes/class-wp-customize-manager.php:3270 +msgid "Security check failed." +msgstr "Säkerhetsgranskningen misslyckades." + +#: wp-includes/class-wp-customize-manager.php:3098 +msgid "Changes trashed successfully." +msgstr "Ändringarna har kastats." + +#: wp-includes/class-wp-customize-manager.php:3079 +msgid "Changes have already been trashed." +msgstr "Ändringarna har redan lagts i papperskorgen." + +#: wp-includes/class-wp-customize-manager.php:3071 +#: wp-includes/class-wp-customize-manager.php:3091 +msgid "Unable to trash changes." +msgstr "Det går inte att slänga ändringarna." + +#: wp-includes/class-wp-customize-manager.php:3060 +msgid "No changes saved yet, so there is nothing to trash." +msgstr "Inga ändringar har sparats ännu, så det finns ingenting att slänga." + +#: wp-includes/class-wp-customize-manager.php:3050 +msgid "There was an authentication problem. Please reload and try again." +msgstr "Ett autentiseringsfel inträffade. Ladda om sidan och försök igen." + +#: wp-includes/class-wp-customize-manager.php:2591 +msgid "The previous set of changes has already been published. Please try saving your current set of changes again." +msgstr "Den tidigare uppsättningen av ändringar har redan publicerats. Försök att spara dina nuvarande ändringar igen." + +#: wp-includes/class-wp-customize-manager.php:2477 +msgid "Changeset is being edited by other user." +msgstr "Anpassningspaketet redigeras just nu av en annan användare." + +#: wp-includes/class-wp-customize-manager.php:2296 +msgid "Unauthorized to modify setting due to capability." +msgstr "Behörighet saknas för att ändra inställningar." + +#: wp-includes/class-wp-customize-manager.php:2291 +msgid "Setting does not exist or is unrecognized." +msgstr "Inställningen finns inte eller är okänd." + +#: wp-includes/class-wp-customize-manager.php:2081 +msgid "This form is not live-previewable." +msgstr "Detta formulär går inte att förhandsgranska live." + +#: wp-includes/class-wp-customize-manager.php:2080 +msgid "This link is not live-previewable." +msgstr "Länken kan inte förhandsgranskas live." + +#: wp-includes/class-wp-customize-manager.php:1864 +msgid "Unauthorized. You may remove the customize_messenger_channel param to preview as frontend." +msgstr "Behörighet saknas. Om du tar bort parametern customize_messenger_channel kan du förhandsgranska som extern besökare." + +#: wp-includes/class-wp-customize-manager.php:581 +msgid "The requested theme does not exist." +msgstr "Det efterfrågade temat finns inte." + +#: wp-includes/class-wp-customize-manager.php:571 +msgid "Sorry, you are not allowed to edit theme options on this site." +msgstr "Du saknar behörighet att redigera temainställningar för den här webbplatsen." + +#: wp-includes/class-wp-customize-manager.php:552 +msgid "Non-existent changeset UUID." +msgstr "Det finns inget anpassningspaket med detta UUID." + +#: wp-includes/class-wp-customize-manager.php:525 +msgid "Invalid changeset UUID" +msgstr "Ogiltigt UUID för anpassningspaket" + +#: wp-includes/functions.php:7033 +msgid "Update PHP" +msgstr "Uppdatera PHP" + +#. translators: %s: default Update PHP page URL +#: wp-includes/functions.php:6976 +msgid "This resource is provided by your web host, and is specific to your site. For more information, see the official WordPress documentation." +msgstr "Den här resursen tillhandahålls av ditt webbhotell och är specifik för din webbplats. Se den officiella WordPress-dokumentationen för mer information." + +#: wp-includes/functions.php:6933 +msgctxt "localized PHP upgrade information page" +msgid "https://wordpress.org/support/update-php/" +msgstr "https://sv.wordpress.org/support/update-php/" + +#. translators: deleted long text +#: wp-includes/functions.php:6761 +msgid "This content was deleted by the author." +msgstr "Detta innehåll har raderats av dess författare." + +#. translators: deleted text +#: wp-includes/functions.php:6757 +msgid "[deleted]" +msgstr "[raderat]" + +#. translators: Site admin email change notification email subject. %s: Site +#. title +#: wp-includes/functions.php:6615 +msgid "[%s] Admin Email Changed" +msgstr "[%s] Administratörs e-postadress har ändrats" + +#. translators: Do not translate OLD_EMAIL, NEW_EMAIL, SITENAME, SITEURL: those +#. are placeholders. +#: wp-includes/functions.php:6598 +msgid "" +"Hi,\n" +"\n" +"This notice confirms that the admin email address was changed on ###SITENAME###.\n" +"\n" +"The new admin email address is ###NEW_EMAIL###.\n" +"\n" +"This email has been sent to ###OLD_EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"Detta meddelande bekräftar att administratörens e-postadress har ändrats på ###SITENAME###.\n" +"\n" +"Den nya e-postadressen för administratören är ###NEW_EMAIL###.\n" +"\n" +"Detta meddelande skickades till ###OLD_EMAIL###\n" +"\n" +"Vänliga hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#: wp-includes/functions.php:6514 +msgid "Only UUID V4 is supported at this time." +msgstr "För närvarande stöds endast UUID V4." + +#: wp-includes/functions.php:6101 +msgid "The login page will open in a new tab. After logging in you can close it and return to this page." +msgstr "Inloggningssidan kommer öppna i en ny flik. Efter inloggning kan du stänga den och återvända till denna sida." + +#: wp-includes/media-template.php:199 wp-includes/media-template.php:324 +#: wp-includes/functions.php:6081 wp-includes/js/dist/components.js:34198 +msgid "Close dialog" +msgstr "Stäng dialogruta" + +#: wp-includes/functions.php:5403 +msgid "Manual Offsets" +msgstr "Manuella förskjutningar" + +#: wp-includes/functions.php:5394 wp-includes/functions.php:5399 +msgid "UTC" +msgstr "UTC" + +#: wp-includes/functions.php:5349 +msgid "Select a city" +msgstr "Välj en ort" + +#. translators: Developer debugging message. 1: PHP function name, 2: +#. Explanatory message, 3: Version information message +#: wp-includes/functions.php:4778 +msgid "%1$s was called incorrectly. %2$s %3$s" +msgstr "%1$s kallades felaktigt. %2$s %3$s" + +#: wp-includes/functions.php:4775 +msgid "https://codex.wordpress.org/Debugging_in_WordPress" +msgstr "https://codex.wordpress.org/Debugging_in_WordPress" + +#: wp-includes/functions.php:4774 +msgid "Please see Debugging in WordPress for more information." +msgstr "Vänligen se Felsökning i WordPress för mer information." + +#. translators: %s: version number +#: wp-includes/functions.php:4770 +msgid "(This message was added in version %s.)" +msgstr "(Detta meddelande lades till i version %s.)" + +#. translators: 1: PHP function name, 2: version number +#: wp-includes/functions.php:4660 +msgid "%1$s was called with an argument that is deprecated since version %2$s with no alternative available." +msgstr "%1$s kallades med ett argument som har upphört sedan version %2$s utan alternativ tillgängliga." + +#. translators: 1: PHP function name, 2: version number, 3: optional message +#. regarding the change +#: wp-includes/functions.php:4657 +msgid "%1$s was called with an argument that is deprecated since version %2$s! %3$s" +msgstr "%1$s kallades med ett argument som har upphört sedan version %2$s! %3$s" + +#: wp-includes/functions.php:4515 +msgid "The called constructor method for %1$s is deprecated since version %2$s! Use %3$s instead." +msgstr "Den anropade konstruktormetoden för %1$s har fasats ut sedan version %2$s! Använd istället %3$s." + +#: wp-includes/functions.php:4504 +msgid "The called constructor method for %1$s in %2$s is deprecated since version %3$s! Use %4$s instead." +msgstr "Konstruktörsmetoden för %1$s i %2$s har fasats ut sedan version %3$s! Använd %4$s istället." + +#. translators: 1: PHP function name, 2: version number +#. translators: 1: PHP file name, 2: version number +#. translators: 1: WordPress hook name, 2: version number +#: wp-includes/functions.php:4443 wp-includes/functions.php:4597 +#: wp-includes/functions.php:4719 +msgid "%1$s is deprecated since version %2$s with no alternative available." +msgstr "%1$s har upphört sedan version %2$s utan alternativ tillgängliga." + +#. translators: 1: PHP function name, 2: version number, 3: alternative +#. function name +#. translators: 1: PHP file name, 2: version number, 3: alternative file name +#. translators: 1: WordPress hook name, 2: version number, 3: alternative hook +#. name +#: wp-includes/functions.php:4440 wp-includes/functions.php:4594 +#: wp-includes/functions.php:4716 +msgid "%1$s is deprecated since version %2$s! Use %3$s instead." +msgstr "%1$s har upphört sedan version %2$s! Använd %3$s istället." + +#: wp-includes/functions.php:4383 +msgid "Database Error" +msgstr "Databasfel" + +#: wp-includes/functions.php:3093 +msgid "« Back" +msgstr "« Tillbaka" + +#: wp-includes/functions.php:2928 +msgid "Please try again." +msgstr "Var vänlig försök igen." + +#: wp-includes/functions.php:2922 +msgid "The link you followed has expired." +msgstr "Länken du just använde gäller inte längre." + +#. translators: %s: logout URL +#: wp-includes/functions.php:2918 +msgid "Do you really want to log out?" +msgstr "Vill du verkligen logga ut?" + +#. translators: %s: site name +#: wp-includes/functions.php:2911 +msgid "You are attempting to log out of %s" +msgstr "Du försöker att logga ut ifrån %s" + +#: wp-includes/functions.php:2410 +msgid "Could not write file %s" +msgstr "Kunde inte skriva till fil %s" + +#: wp-includes/functions.php:2353 +msgid "Empty filename" +msgstr "Saknar filnamn" + +#. translators: %s: directory path +#: wp-includes/functions.php:2117 wp-includes/functions.php:2402 +msgid "Unable to create directory %s. Is its parent directory writable by the server?" +msgstr "Kan inte skapa katalog %s. Är den överordnade katalogen skrivbar av servern?" + +#. translators: %s: database repair URL +#: wp-includes/functions.php:1580 +msgid "One or more database tables are unavailable. The database may need to be repaired." +msgstr "En eller flera databastabeller är otillgängliga. Databasen kan behöva repareras." + +#: wp-includes/functions.php:1384 +msgid "ERROR: This is not a valid feed template." +msgstr "FEL: Detta är inte en giltig flödesmall." + +#. translators: Time duration in second or seconds. +#: wp-includes/functions.php:389 +msgid "%s second" +msgid_plural "%s seconds" +msgstr[0] "%s sekund" +msgstr[1] "%s sekunder" + +#. translators: Time duration in minute or minutes. +#: wp-includes/functions.php:383 +msgid "%s minute" +msgid_plural "%s minutes" +msgstr[0] "%s minut" +msgstr[1] "%s minuter" + +#. translators: Time duration in hour or hours. +#. translators: Time difference between two dates, in hours. %s: Number of +#. hours +#: wp-includes/functions.php:377 wp-includes/formatting.php:3638 +msgid "%s hour" +msgid_plural "%s hours" +msgstr[0] "%s timme" +msgstr[1] "%s timmar" + +#. translators: If months in your language require a genitive case, * translate +#. this to 'on'. Do not translate into your own language. +#: wp-includes/functions.php:221 +msgctxt "decline months names: on or off" +msgid "off" +msgstr "off" + +#. translators: %s: author's display name +#: wp-includes/author-template.php:303 wp-includes/author-template.php:477 +msgid "Posts by %s" +msgstr "Inlägg av %s" + +#. translators: %s: author's display name +#: wp-includes/author-template.php:235 +msgid "Visit %s’s website" +msgstr "Besök %s’s webbplats" + +#: wp-includes/comment-template.php:2342 +msgid "Post Comment" +msgstr "Publicera kommentar" + +#: wp-includes/comment-template.php:2341 +msgid "Cancel reply" +msgstr "Avbryt svar" + +#: wp-includes/comment-template.php:2327 +msgid "Your email address will not be published." +msgstr "E-postadressen publiceras inte." + +#. translators: %s: user name +#: wp-includes/comment-template.php:2323 +msgid "Logged in as %s. Edit your profile." +msgstr "Inloggad som %s. Redigera din profil." + +#. translators: 1: edit user link, 2: accessibility text, 3: user name, 4: +#. logout URL +#: wp-includes/comment-template.php:2320 +msgid "Logged in as %3$s. Log out?" +msgstr "Inloggad som %3$s. Logga ut?" + +#. translators: %s: login URL +#: wp-includes/comment-template.php:2314 +msgid "You must be logged in to post a comment." +msgstr "Du måste vara inloggad för att skriva en kommentar." + +#: wp-includes/comment-template.php:2298 +msgid "Required fields are marked %s" +msgstr "Obligatoriska fält är märkta %s" + +#: wp-includes/comment-template.php:2290 +msgid "Save my name, email, and website in this browser for the next time I comment." +msgstr "Spara mitt namn, min e-postadress och webbplats i denna webbläsare till nästa gång jag skriver en kommentar." + +#: wp-includes/comment-template.php:2283 +msgid "Website" +msgstr "Webbplats" + +#: wp-includes/comment-template.php:2279 +msgid "Name" +msgstr "Namn" + +#: wp-includes/comment-template.php:1941 wp-includes/comment-template.php:2336 +msgid "Leave a Reply to %s" +msgstr "Lämna ett svar till %s" + +#: wp-includes/comment-template.php:1938 wp-includes/comment-template.php:2335 +msgid "Leave a Reply" +msgstr "Lämna ett svar" + +#: wp-includes/comment-template.php:1843 +msgid "Click here to cancel reply." +msgstr "Klicka här för att avbryta svar." + +#: wp-includes/comment-template.php:1770 +msgid "Log in to leave a Comment" +msgstr "Logga in för att lämna en kommentar" + +#: wp-includes/comment-template.php:1769 +msgid "Leave a Comment" +msgstr "Lämna en kommentar" + +#: wp-includes/comment-template.php:1636 +msgid "Log in to Reply" +msgstr "Logga in för att svara" + +#. translators: Comment reply button text. %s: Comment author name +#: wp-includes/comment-template.php:1635 +msgid "Reply to %s" +msgstr "Svar till %s" + +#: wp-includes/comment-template.php:1561 +msgid "Enter your password to view comments." +msgstr "Ange ditt lösenord för att visa kommentarerna." + +#. translators: %s: post title +#: wp-includes/comment-template.php:1552 +msgid "Comments Off on %s" +msgstr "Kommentarer inaktiverade för %s" + +#. translators: 1: number of comments, 2: post title +#: wp-includes/comment-template.php:1546 +msgid "%1$s Comment on %2$s" +msgid_plural "%1$s Comments on %2$s" +msgstr[0] "%1$s kommentar till %2$s" +msgstr[1] "%1$s kommentarer till %2$s" + +#. translators: %s: post title +#: wp-includes/comment-template.php:1541 +msgid "1 Comment on %s" +msgstr "1 kommentar till %s" + +#. translators: %s: post title +#: wp-includes/comment-template.php:1536 +msgid "No Comments on %s" +msgstr "Inga kommentarer till %s" + +#: wp-includes/comment-template.php:1159 wp-includes/author-template.php:70 +msgid "Use %s instead if you do not want the value echoed." +msgstr "Om du inte vill eka ut värdet, använd istället %s." + +#: wp-includes/comment-template.php:1100 +msgid "Pingback" +msgstr "Pingback" + +#: wp-includes/comment-template.php:1097 +msgid "Trackback" +msgstr "Trackback" + +#: wp-includes/comment-template.php:1094 wp-includes/comment-template.php:2310 +msgctxt "noun" +msgid "Comment" +msgstr "Kommentar" + +#: wp-includes/comment-template.php:932 +msgid "1 Comment" +msgstr "1 kommentar" + +#: wp-includes/comment-template.php:930 +msgid "No Comments" +msgstr "Inga kommentarer" + +#. translators: If comment number in your language requires declension, * +#. translate this to 'on'. Do not translate into your own language. +#: wp-includes/comment-template.php:909 +msgctxt "Comment number declension: on or off" +msgid "off" +msgstr "off" + +#. translators: %s: number of comments +#: wp-includes/comment-template.php:903 wp-includes/comment-template.php:917 +msgid "%s Comment" +msgid_plural "%s Comments" +msgstr[0] "%s kommentar" +msgstr[1] "%s kommentarer" + +#: wp-includes/general-template.php:4225 +msgctxt "admin color scheme" +msgid "Coffee" +msgstr "Kaffe" + +#: wp-includes/general-template.php:4213 +msgctxt "admin color scheme" +msgid "Ocean" +msgstr "Hav" + +#: wp-includes/general-template.php:4201 +msgctxt "admin color scheme" +msgid "Ectoplasm" +msgstr "Ektoplasma" + +#: wp-includes/general-template.php:4189 +msgctxt "admin color scheme" +msgid "Sunrise" +msgstr "Soluppgång" + +#: wp-includes/general-template.php:4177 +msgctxt "admin color scheme" +msgid "Midnight" +msgstr "Midnatt" + +#: wp-includes/general-template.php:4165 +msgctxt "admin color scheme" +msgid "Blue" +msgstr "Blått" + +#: wp-includes/general-template.php:4153 +msgctxt "admin color scheme" +msgid "Light" +msgstr "Ljust" + +#: wp-includes/general-template.php:4136 +msgctxt "admin color scheme" +msgid "Default" +msgstr "Standard" + +#: wp-includes/general-template.php:4046 wp-includes/formatting.php:3757 +msgid "…" +msgstr "…" + +#: wp-includes/general-template.php:3959 +msgid "Next »" +msgstr "Nästa »" + +#: wp-includes/general-template.php:3958 +msgid "« Previous" +msgstr "« Föregående" + +#. translators: 1: blog name, 2: separator(raquo), 3: post type name +#: wp-includes/general-template.php:2850 +msgid "%1$s %2$s %3$s Feed" +msgstr "Flöde för %1$s %2$s %3$s" + +#. translators: 1: blog name, 2: separator(raquo), 3: search phrase +#: wp-includes/general-template.php:2848 +msgid "%1$s %2$s Search Results for “%3$s” Feed" +msgstr "%1$s %2$s Sökresultat för ”%3$s” -flöde" + +#. translators: 1: blog name, 2: separator(raquo), 3: author name +#: wp-includes/general-template.php:2846 +msgid "%1$s %2$s Posts by %3$s Feed" +msgstr "%1$s %2$s Inlägg av %3$s -flöde" + +#. translators: 1: blog name, 2: separator(raquo), 3: term name, 4: taxonomy +#. singular name +#: wp-includes/general-template.php:2844 +msgid "%1$s %2$s %3$s %4$s Feed" +msgstr "Flöde för %1$s %2$s %3$s %4$s" + +#. translators: 1: blog name, 2: separator(raquo), 3: tag name +#: wp-includes/general-template.php:2842 +msgid "%1$s %2$s %3$s Tag Feed" +msgstr "%1$s %2$s etikettflöde för %3$s" + +#. translators: 1: blog name, 2: separator(raquo), 3: category name +#: wp-includes/general-template.php:2840 +msgid "%1$s %2$s %3$s Category Feed" +msgstr "%1$s %2$s %3$s kategoriflöde" + +#. translators: 1: blog name, 2: separator(raquo), 3: post title +#: wp-includes/general-template.php:2838 +msgid "%1$s %2$s %3$s Comments Feed" +msgstr "%1$s %2$s %3$s kommentarsflöde" + +#. translators: 1: blog title, 2: separator (raquo) +#: wp-includes/general-template.php:2798 +msgid "%1$s %2$s Comments Feed" +msgstr "%1$s %2$s kommentarsflöde" + +#. translators: 1: blog title, 2: separator (raquo) +#: wp-includes/general-template.php:2796 +msgid "%1$s %2$s Feed" +msgstr "%1$s %2$s flöde" + +#. translators: Separator between blog name and feed type in feed links +#: wp-includes/general-template.php:2794 wp-includes/general-template.php:2836 +msgctxt "feed link" +msgid "»" +msgstr "»" + +#. translators: Post calendar label. %s: Date +#: wp-includes/general-template.php:2228 +msgid "Posts published on %s" +msgstr "Inlägg publicerat %s" + +#. translators: Calendar caption: 1: month name, 2: 4-digit year +#: wp-includes/general-template.php:2131 +msgctxt "calendar caption" +msgid "%1$s %2$s" +msgstr "%1$s %2$s" + +#. translators: Taxonomy term archive title. 1: Taxonomy singular name, 2: +#. Current taxonomy term +#: wp-includes/general-template.php:1600 +msgid "%1$s: %2$s" +msgstr "%1$s: %2$s" + +#. translators: Post type archive title. %s: Post type name +#: wp-includes/general-template.php:1596 +msgid "Archives: %s" +msgstr "Arkiv: %s" + +#: wp-includes/general-template.php:1592 +msgctxt "post format archive title" +msgid "Chats" +msgstr "Chattar" + +#: wp-includes/general-template.php:1590 +msgctxt "post format archive title" +msgid "Audio" +msgstr "Ljud" + +#: wp-includes/general-template.php:1588 +msgctxt "post format archive title" +msgid "Statuses" +msgstr "Statusar" + +#: wp-includes/general-template.php:1586 +msgctxt "post format archive title" +msgid "Links" +msgstr "Länkar" + +#: wp-includes/general-template.php:1584 +msgctxt "post format archive title" +msgid "Quotes" +msgstr "Citat" + +#: wp-includes/general-template.php:1582 +msgctxt "post format archive title" +msgid "Videos" +msgstr "Videoklipp" + +#: wp-includes/general-template.php:1580 +msgctxt "post format archive title" +msgid "Images" +msgstr "Bilder" + +#: wp-includes/general-template.php:1578 +msgctxt "post format archive title" +msgid "Galleries" +msgstr "Gallerier " + +#: wp-includes/general-template.php:1576 +msgctxt "post format archive title" +msgid "Asides" +msgstr "Notiser" + +#. translators: Daily archive title. %s: Date +#: wp-includes/general-template.php:1573 wp-includes/general-template.php:2226 +msgctxt "daily archives date format" +msgid "F j, Y" +msgstr "j F, Y" + +#. translators: Daily archive title. %s: Date +#: wp-includes/general-template.php:1573 +msgid "Day: %s" +msgstr "Dag: %s" + +#. translators: Monthly archive title. %s: Month name and year +#: wp-includes/general-template.php:1570 +msgid "Month: %s" +msgstr "Månad: %s" + +#. translators: Yearly archive title. %s: Year +#: wp-includes/general-template.php:1567 +msgid "Year: %s" +msgstr "År: %s" + +#. translators: Author archive title. %s: Author name +#: wp-includes/general-template.php:1564 +msgid "Author: %s" +msgstr "Författare: %s" + +#. translators: Tag archive title. %s: Tag name +#: wp-includes/general-template.php:1561 +msgid "Tag: %s" +msgstr "Etikett: %s" + +#. translators: Category archive title. %s: Category name +#: wp-includes/general-template.php:1558 +msgid "Category: %s" +msgstr "Kategori: %s" + +#. translators: 1: separator, 2: search phrase +#: wp-includes/general-template.php:1262 +msgid "Search Results %1$s %2$s" +msgstr "Sökresultat %1$s %2$s" + +#: wp-includes/general-template.php:1099 +msgid "Page %s" +msgstr "Sida %s" + +#. translators: Monthly archive title. %s: Month name and year +#: wp-includes/general-template.php:1091 wp-includes/general-template.php:1570 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "F Y" + +#. translators: Yearly archive title. %s: Year +#: wp-includes/general-template.php:1088 wp-includes/general-template.php:1567 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "Y" + +#. translators: %s: search phrase +#: wp-includes/general-template.php:1057 +msgid "Search Results for “%s”" +msgstr "Sökresultat för ”%s”" + +#: wp-includes/general-template.php:1052 wp-includes/general-template.php:1267 +msgid "Page not found" +msgstr "Sidan kunde inte hittas" + +#. translators: 1: 'text_direction' argument, 2: bloginfo() function name, 3: +#. is_rtl() function name +#: wp-includes/general-template.php:792 +msgid "The %1$s option is deprecated for the family of %2$s functions. Use the %3$s function instead." +msgstr "Valet %1$s är föråldrat för funktionsfamiljen %2$s. Använd funktionen %3$s istället." + +#. translators: Translate this to the correct language tag for your locale, * +#. see https://www.w3.org/International/articles/language-tags/ for reference. +#. * Do not translate into your own language. +#: wp-includes/general-template.php:780 +msgid "html_lang_attribute" +msgstr "sv-SE" + +#. translators: 1: 'siteurl'/'home' argument, 2: bloginfo() function name, 3: +#. 'url' argument +#: wp-includes/general-template.php:712 +msgid "The %1$s option is deprecated for the family of %2$s functions. Use the %3$s option instead." +msgstr "Valet %1$s är föråldrat för funktionsfamiljen %2$s. Använd valet %3$s istället." + +#: wp-includes/general-template.php:600 +msgid "Site Admin" +msgstr "Webbplatsadministratör" + +#: wp-includes/general-template.php:326 +msgid "Log out" +msgstr "Logga ut" + +#: wp-includes/general-template.php:277 wp-includes/general-template.php:284 +msgctxt "submit button" +msgid "Search" +msgstr "Sök" + +#: wp-includes/general-template.php:275 +msgctxt "placeholder" +msgid "Search …" +msgstr "Sök …" + +#: wp-includes/general-template.php:274 wp-includes/general-template.php:282 +msgctxt "label" +msgid "Search for:" +msgstr "Sök efter:" + +#: wp-includes/link-template.php:3882 +msgid "This is the short link." +msgstr "Detta är den korta länken." + +#: wp-includes/link-template.php:2972 wp-includes/link-template.php:3023 +msgid "Comments navigation" +msgstr "Kommentarsnavigering" + +#: wp-includes/link-template.php:2971 +msgid "Newer comments" +msgstr "Nyare kommentarer" + +#: wp-includes/link-template.php:2970 +msgid "Older comments" +msgstr "Äldre kommentarer" + +#: wp-includes/link-template.php:2876 +msgid "« Older Comments" +msgstr "« Äldre kommentarer" + +#: wp-includes/link-template.php:2829 +msgid "Newer Comments »" +msgstr "Nyare kommentarer »" + +#: wp-includes/link-template.php:2666 +msgctxt "next set of posts" +msgid "Next" +msgstr "Nästa" + +#: wp-includes/link-template.php:2665 +msgctxt "previous set of posts" +msgid "Previous" +msgstr "Föregående" + +#: wp-includes/link-template.php:2610 wp-includes/link-template.php:2667 +#: wp-includes/link-template.php:2712 +msgid "Posts navigation" +msgstr "Inläggsnavigering" + +#: wp-includes/link-template.php:2609 +msgid "Newer posts" +msgstr "Nyare inlägg" + +#: wp-includes/link-template.php:2608 +msgid "Older posts" +msgstr "Äldre inlägg" + +#: wp-includes/link-template.php:2539 +msgid "Post navigation" +msgstr "Inläggsnavigering" + +#: wp-includes/link-template.php:2422 wp-includes/link-template.php:2475 +msgid "« Previous Page" +msgstr "« Föregående sida" + +#: wp-includes/link-template.php:2336 wp-includes/link-template.php:2476 +msgid "Next Page »" +msgstr "Nästa sida »" + +#: wp-includes/link-template.php:1880 wp-includes/link-template.php:2130 +msgid "Next Post" +msgstr "Nästa inlägg" + +#: wp-includes/link-template.php:1880 wp-includes/link-template.php:2130 +msgid "Previous Post" +msgstr "Föregående inlägg" + +#: wp-includes/link-template.php:1693 +msgid "Use commas instead of %s to separate excluded terms." +msgstr "Använd kommatecken istället för %s för att separera exkluderade termer." + +#: wp-includes/link-template.php:1052 wp-includes/link-template.php:1403 +#: wp-includes/link-template.php:1510 wp-includes/link-template.php:1573 +msgid "Edit This" +msgstr "Redigera det här" + +#: wp-includes/link-template.php:751 +msgid "Comments Feed" +msgstr "Flöde för kommentarer" + +#: wp-includes/class-wp-image-editor-gd.php:396 +#: wp-includes/class-wp-image-editor-gd.php:405 +#: wp-includes/class-wp-image-editor-gd.php:409 +#: wp-includes/class-wp-image-editor-gd.php:412 +msgid "Image Editor Save Failed" +msgstr "Sparande i bildredigeraren misslyckades." + +#: wp-includes/class-wp-image-editor-gd.php:358 +msgid "Image flip failed." +msgstr "Vändning av bilden misslyckades." + +#: wp-includes/class-wp-image-editor-gd.php:329 +msgid "Image rotate failed." +msgstr "Rotering av bilden misslyckades." + +#: wp-includes/class-wp-image-editor-gd.php:303 +msgid "Image crop failed." +msgstr "Omskalning av bilden misslyckades." + +#: wp-includes/class-wp-image-editor-gd.php:170 +#: wp-includes/class-wp-image-editor-gd.php:194 +msgid "Image resize failed." +msgstr "Storleksändring av bilden misslyckades." + +#: wp-includes/ms-deprecated.php:617 +msgid "You appear to have already installed WordPress. To reinstall please clear your old database tables first." +msgstr "Du verkar redan ha installerat WordPress. För att installera om, rensa tabellerna i din databas först." + +#: wp-includes/ms-deprecated.php:617 +msgid "Already Installed" +msgstr "Redan installerat" + +#: wp-includes/ms-deprecated.php:411 +msgid "ERROR: problem creating site entry." +msgstr "FEL: Problem med att skapa webbplatspost." + +#: wp-includes/ms-deprecated.php:404 +msgid "ERROR: Site URL already taken." +msgstr "FEL: Webbplats-URL redan tagen." + +#: wp-includes/category-template.php:1172 +msgid "Tags: " +msgstr "Etiketter:" + +#: wp-includes/category-template.php:839 wp-includes/category-template.php:849 +msgid "%s item" +msgid_plural "%s items" +msgstr[0] "%s objekt" +msgstr[1] "%s objekt" + +#: wp-includes/category-template.php:533 wp-includes/taxonomy.php:563 +msgid "No categories" +msgstr "Inga kategorier" + +#: wp-includes/category-template.php:152 +msgid "Uncategorized" +msgstr "Okategoriserade" + +#. translators: Comments feed title. %s: Post title +#: wp-includes/feed-atom-comments.php:34 +msgid "Comments on %s" +msgstr "Kommentarer till %s" + +#: wp-includes/customize/class-wp-customize-background-image-control.php:33 +#: wp-includes/class-wp-customize-manager.php:5337 +msgid "Background Image" +msgstr "Bild för bakgrund" + +#: wp-includes/customize/class-wp-customize-custom-css-setting.php:161 +msgid "Markup is not allowed in CSS." +msgstr "HTML-kod är inte tillåten i CSS." + +#: wp-includes/customize/class-wp-customize-media-control.php:256 +msgid "Choose file" +msgstr "Välj fil" + +#: wp-includes/customize/class-wp-customize-media-control.php:254 +msgid "No file selected" +msgstr "Ingen fil vald" + +#: wp-includes/customize/class-wp-customize-media-control.php:251 +msgid "Change file" +msgstr "Ändra fil" + +#: wp-includes/customize/class-wp-customize-media-control.php:250 +#: wp-includes/customize/class-wp-customize-media-control.php:255 +msgid "Select file" +msgstr "Välj fil" + +#: wp-includes/customize/class-wp-customize-media-control.php:246 +msgid "Choose image" +msgstr "Välj bild" + +#: wp-includes/customize/class-wp-customize-media-control.php:241 +msgid "Change image" +msgstr "Ändra bild" + +#: wp-includes/customize/class-wp-customize-media-control.php:240 +msgid "Select site icon" +msgstr "Välj ikon för webbplatsen" + +#: wp-includes/customize/class-wp-customize-media-control.php:239 +#: wp-includes/customize/class-wp-customize-media-control.php:245 +msgid "Select image" +msgstr "Välj bild" + +#: wp-includes/customize/class-wp-customize-media-control.php:235 +msgid "Choose audio" +msgstr "Välj ljud" + +#: wp-includes/customize/class-wp-customize-media-control.php:230 +msgid "Change audio" +msgstr "Byt ut ljud" + +#: wp-includes/customize/class-wp-customize-media-control.php:229 +#: wp-includes/customize/class-wp-customize-media-control.php:234 +msgid "Select audio" +msgstr "Välj ljud" + +#: wp-includes/customize/class-wp-customize-media-control.php:225 +msgid "Choose video" +msgstr "Välj video" + +#: wp-includes/customize/class-wp-customize-media-control.php:220 +msgid "Change video" +msgstr "Byt video" + +#: wp-includes/customize/class-wp-customize-media-control.php:219 +#: wp-includes/customize/class-wp-customize-media-control.php:224 +msgid "Select video" +msgstr "Välj video" + +#: wp-includes/customize/class-wp-widget-area-customize-control.php:63 +msgid "When in reorder mode, additional controls to reorder widgets will be available in the widgets list above." +msgstr "När omordningsläget är aktivt kommer extra kontroller för att ändra ordningen bli synliga i listan med widgetar ovan." + +#: wp-includes/customize/class-wp-customize-background-position-control.php:93 +#: wp-includes/class-wp-customize-manager.php:5413 +msgid "Image Position" +msgstr "Bildposition" + +#: wp-includes/customize/class-wp-customize-background-position-control.php:79 +msgid "Bottom Right" +msgstr "Nere till höger" + +#: wp-includes/customize/class-wp-customize-background-position-control.php:75 +#: wp-includes/class-wp-editor.php:1234 +msgid "Bottom" +msgstr "Botten" + +#: wp-includes/customize/class-wp-customize-background-position-control.php:71 +msgid "Bottom Left" +msgstr "Nere till vänster" + +#: wp-includes/customize/class-wp-customize-background-position-control.php:51 +msgid "Top Right" +msgstr "Uppe till höger" + +#: wp-includes/customize/class-wp-customize-background-position-control.php:47 +#: wp-includes/class-wp-editor.php:1232 +msgid "Top" +msgstr "Toppen" + +#: wp-includes/customize/class-wp-customize-background-position-control.php:43 +msgid "Top Left" +msgstr "Uppe till vänster" + +#: wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:719 +msgid "Invalid URL." +msgstr "Ogiltig URL." + +#: wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:322 +#: wp-includes/class-wp-customize-nav-menus.php:155 +#: wp-includes/class-wp-customize-nav-menus.php:400 +#: wp-includes/class-wp-customize-nav-menus.php:447 +#: wp-includes/nav-menu.php:867 +msgid "Custom Link" +msgstr "Anpassad länk" + +#: wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:320 +#: wp-includes/class-wp-customize-nav-menus.php:165 +#: wp-includes/nav-menu.php:844 +msgid "Post Type Archive" +msgstr "Arkiv för posttyp" + +#. translators: 1: original menu name, 2: duplicate count +#: wp-includes/customize/class-wp-customize-nav-menu-setting.php:521 +msgid "%1$s (%2$d)" +msgstr "%1$s (%2$d)" + +#: wp-includes/customize/class-wp-customize-nav-menu-setting.php:439 +#: wp-includes/class-wp-customize-nav-menus.php:446 +msgctxt "Missing menu name." +msgid "(unnamed)" +msgstr "(ej namngiven)" + +#: wp-includes/customize/class-wp-customize-new-menu-control.php:50 +msgid "Create Menu" +msgstr "Skapa meny" + +#. translators: %s: menu name +#: wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:81 +msgctxt "menu location" +msgid "(Current: %s)" +msgstr "(Nuvarande: %s)" + +#: wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:66 +msgctxt "menu locations" +msgid "Here’s where this menu appears. If you’d like to change that, pick another location." +msgstr "Här visas denna meny. Om du vill ändra kan du välja en annan plats." + +#: wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:54 +msgid "https://codex.wordpress.org/WordPress_Widgets" +msgstr "https://codex.wordpress.org/WordPress_Widgets" + +#. translators: 1: Codex URL, 2: additional link attributes, 3: accessibility +#. text +#: wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:53 +msgctxt "menu locations" +msgid "(If you plan to use a menu widget%3$s, skip this step.)" +msgstr "(Hoppa över detta steg om du tänker använda en menywidget%3$s.)" + +#: wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:48 +msgctxt "menu locations" +msgid "Where do you want this menu to appear?" +msgstr "Var vill du att denna meny ska visas?" + +#: wp-includes/customize/class-wp-customize-partial.php:207 +msgid "Partial render must echo the content or return the content string (or array), but not both." +msgstr "Partiell rendering måste eka innehållet eller returnera innehållssträngen (eller array), men inte båda." + +#. translators: %s: number of themes displayed. +#: wp-includes/customize/class-wp-customize-themes-section.php:142 +msgid "%s themes" +msgstr "%s teman" + +#. translators: %s: number of filters selected. +#: wp-includes/customize/class-wp-customize-themes-section.php:126 +msgid "Filter themes (%s)" +msgstr "Filtrera teman (%s)" + +#: wp-includes/customize/class-wp-customize-themes-section.php:123 +msgid "Filter themes" +msgstr "Filtrera teman" + +#: wp-includes/customize/class-wp-customize-themes-section.php:117 +#: wp-includes/customize/class-wp-customize-themes-section.php:118 +#: wp-includes/customize/class-wp-customize-themes-section.php:132 +#: wp-includes/customize/class-wp-customize-themes-section.php:133 +msgid "Search themes…" +msgstr "Sök teman…" + +#: wp-includes/customize/class-wp-customize-themes-section.php:114 +msgid "Back to theme sources" +msgstr "Återgå till tema-källor" + +#: wp-includes/customize/class-wp-customize-themes-section.php:93 +msgid "Search WordPress.org themes" +msgstr "Sök teman på WordPress.org" + +#. translators: %s: "Search WordPress.org themes" button text +#: wp-includes/customize/class-wp-customize-themes-section.php:92 +msgid "No themes found. Try a different search, or %s." +msgstr "Inga teman hittades. Testa en ny sökning eller %s." + +#: wp-includes/customize/class-wp-customize-themes-section.php:87 +msgid "No themes found. Try a different search." +msgstr "Inga teman hittades. Försök att söka på något annat." + +#: wp-includes/customize/class-wp-customize-themes-section.php:84 +msgid "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." +msgstr "Ett oväntat fel inträffade. Något kan vara fel med WordPress.org eller denna serverkonfiguration. Om du fortsätter ha problem, besök supportforumet." + +#: wp-includes/customize/class-wp-customize-theme-control.php:135 +msgid "Install & Preview" +msgstr "Installera och förhandsgranska" + +#: wp-includes/customize/class-wp-customize-theme-control.php:122 +#: wp-includes/customize/class-wp-customize-theme-control.php:130 +msgctxt "theme" +msgid "Installed" +msgstr "Installerat" + +#. translators: %s: theme name +#: wp-includes/customize/class-wp-customize-theme-control.php:115 +msgid "Previewing: %s" +msgstr "Förhandsgranskar: %s" + +#: wp-includes/customize/class-wp-customize-theme-control.php:102 +msgid "Update now" +msgstr "Uppdatera nu" + +#. translators: %s: "Update now" button +#: wp-includes/customize/class-wp-customize-theme-control.php:101 +msgid "New version available. %s" +msgstr "Ny version finns tillgänglig. %s" + +#: wp-includes/customize/class-wp-customize-theme-control.php:97 +msgid "New version available." +msgstr "Ny version är tillgänglig." + +#. translators: Theme author name +#: wp-includes/customize/class-wp-customize-theme-control.php:88 +msgctxt "theme author" +msgid "By %s" +msgstr "Av %s" + +#: wp-includes/customize/class-wp-customize-theme-control.php:83 +#: wp-includes/customize/class-wp-customize-themes-section.php:78 +msgid "Theme Details" +msgstr "Detaljer för tema" + +#. translators: %s: theme name +#: wp-includes/customize/class-wp-customize-theme-control.php:67 +msgid "Install and preview theme: %s" +msgstr "Installera och förhandsgranska tema: %s" + +#. translators: %s: theme name +#: wp-includes/customize/class-wp-customize-theme-control.php:65 +msgid "Live preview theme: %s" +msgstr "Live förhandsvisning av tema: %s" + +#. translators: %s: theme name +#: wp-includes/customize/class-wp-customize-theme-control.php:63 +msgid "Customize theme: %s" +msgstr "Anpassa tema: %s" + +#. translators: %s: theme name +#: wp-includes/customize/class-wp-customize-theme-control.php:61 +msgid "Details for theme: %s" +msgstr "Detaljer för tema: %s" + +#. translators: Nav menu item original title. %s: Original title +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:140 +msgid "Original: %s" +msgstr "Original: %s" + +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:131 +msgid "The description will be displayed in the menu if the current theme supports it." +msgstr "Beskrivningen kommer att visas i menyn om använt tema har stöd för det." + +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:123 +msgid "Link Relationship (XFN)" +msgstr "Relationslänk (XFN)" + +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:117 +msgid "CSS Classes" +msgstr "CSS-klasser" + +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:111 +msgid "Title Attribute" +msgstr "Titelattribut" + +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:99 +msgid "Navigation Label" +msgstr "Navigeringsetikett" + +#. translators: 1: Title of a menu item, 2: Type of a menu item +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:81 +msgid "Remove Menu Item: %1$s (%2$s)" +msgstr "Ta bort menyval: %1$s (%2$s)" + +#. translators: 1: Title of a menu item, 2: Type of a menu item +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:75 +msgid "Edit menu item: %1$s (%2$s)" +msgstr "Redigera menyval: %1$s (%2$s)" + +#. translators: %s: themes panel title in the Customizer +#: wp-includes/customize/class-wp-customize-themes-panel.php:75 +msgid "You are browsing %s" +msgstr "Du tittar på %s" + +#: wp-includes/customize/class-wp-customize-themes-panel.php:49 +msgctxt "theme" +msgid "Change" +msgstr "Byt" + +#: wp-includes/customize/class-wp-customize-themes-panel.php:49 +msgid "Change theme" +msgstr "Byt tema" + +#: wp-includes/customize/class-wp-customize-themes-panel.php:44 +msgid "Previewing theme" +msgstr "Förhandsvisning av tema" + +#: wp-includes/customize/class-wp-customize-themes-panel.php:42 +msgid "Active theme" +msgstr "Aktivt tema " + +#: wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:46 +msgid "Automatically add new top-level pages to this menu" +msgstr "Lägg automatiskt till sidor i toppnivå i denna meny." + +#: wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:42 +#: wp-includes/customize/class-wp-customize-nav-menus-panel.php:85 +msgid "Menu Options" +msgstr "Menyalternativ" + +#: wp-includes/customize/class-wp-customize-nav-menu-control.php:60 +msgid "When in reorder mode, additional controls to reorder menu items will be available in the items list above." +msgstr "När du aktiverar läget för att ändra ordningen på menyval kommer extra verktyg att visas i listan ovan." + +#: wp-includes/customize/class-wp-customize-nav-menu-control.php:56 +#: wp-includes/customize/class-wp-widget-area-customize-control.php:60 +msgid "Reorder" +msgstr "Ändra ordning" + +#: wp-includes/customize/class-wp-customize-nav-menu-control.php:55 +#: wp-includes/class-wp-customize-nav-menus.php:474 +msgid "Reorder menu items" +msgstr "Ändra ordning på menyval" + +#: wp-includes/customize/class-wp-customize-nav-menu-control.php:52 +msgid "Add or remove menu items" +msgstr "Lägg till eller ta bort menyval" + +#. translators: %s: "Add Items" button text +#: wp-includes/customize/class-wp-customize-nav-menu-control.php:46 +msgid "Time to add some links! Click “%s” to start putting pages, categories, and custom links in your menu. Add as many things as you’d like." +msgstr "Nu är det dags att lägga in några länkar! Klicka på ”%s” för att lägga till sidor, kategorier och anpassade länkar i din meny. Lägg till så många du känner för." + +#: wp-includes/customize/class-wp-customize-nav-menu-control.php:40 +msgid "Add Items" +msgstr "Lägg till val" + +#: wp-includes/customize/class-wp-customize-nav-menu-location-control.php:85 +msgid "Edit selected menu" +msgstr "Redigera vald meny" + +#: wp-includes/customize/class-wp-customize-nav-menu-location-control.php:84 +msgid "+ Create New Menu" +msgstr "+ Skapa ny meny" + +#: wp-includes/customize/class-wp-customize-nav-menu-location-control.php:84 +msgid "Create a menu for this location" +msgstr "Skapa en meny för denna plats" + +#. translators: %s: UTC offset +#: wp-includes/customize/class-wp-customize-date-time-control.php:245 +msgid "Timezone is %s." +msgstr "Tidszonen är %s." + +#. translators: 1: timezone name, 2: timezone abbreviation, 3: gmt offset +#: wp-includes/customize/class-wp-customize-date-time-control.php:236 +msgid "Timezone is %1$s (%2$s), currently %3$s." +msgstr "Tidszonen är %1$s (%2$s), för närvarande %3$s." + +#. translators: 1: month number (01, 02, etc.), 2: month abbreviation +#: wp-includes/customize/class-wp-customize-date-time-control.php:203 +msgid "%1$s-%2$s" +msgstr "%1$s-%2$s" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:176 +msgid "Timezone" +msgstr "Tidszon" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:170 +msgid "Meridian" +msgstr "Meridian" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:167 +msgid "Minute" +msgstr "Minut" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:162 +msgid "Hour" +msgstr "Timme" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:160 +#: wp-includes/js/dist/components.js:30646 +msgid "Time" +msgstr "Tid" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:146 +#: wp-includes/js/dist/components.js:30600 +msgid "Day" +msgstr "Dag" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:130 +#: wp-includes/js/dist/components.js:30562 +msgid "Month" +msgstr "Månad" + +#: wp-includes/customize/class-wp-customize-date-time-control.php:127 +#: wp-includes/js/dist/components.js:30632 +msgid "Date" +msgstr "Datum" + +#. translators: %s: document.write() +#: wp-includes/customize/class-wp-customize-selective-refresh.php:198 +msgid "%s is forbidden" +msgstr "%s är förbjudet" + +#: wp-includes/customize/class-wp-customize-selective-refresh.php:196 +msgid "Click to edit this element." +msgstr "Tryck för att redigera detta element." + +#: wp-includes/customize/class-wp-customize-selective-refresh.php:195 +msgid "Click to edit the site title." +msgstr "Klicka för att ändra webbplatsrubriken." + +#: wp-includes/customize/class-wp-customize-selective-refresh.php:194 +msgid "Click to edit this widget." +msgstr "Klicka för att ändra denna widget." + +#: wp-includes/customize/class-wp-customize-selective-refresh.php:193 +msgid "Click to edit this menu." +msgstr "Klicka för att ändra denna meny. " + +#: wp-includes/customize/class-wp-customize-selective-refresh.php:192 +#: wp-includes/class-wp-customize-manager.php:2079 +msgid "Shift-click to edit this element." +msgstr "Klicka med shift nedtryckt för att redigera detta element." + +#: wp-includes/customize/class-wp-customize-header-image-control.php:249 +msgctxt "custom headers" +msgid "Suggested" +msgstr "Föreslaget" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:242 +msgctxt "custom headers" +msgid "Previously uploaded" +msgstr "Tidigare uppladdat" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:237 +msgid "Add new image" +msgstr "Lägg till ny bild" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:237 +msgid "Add new header image" +msgstr "Lägg till ny bild för sidhuvud" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:236 +msgid "Hide image" +msgstr "Dölj bild" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:236 +msgid "Hide header image" +msgstr "Dölj bild för sidhuvud" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:228 +msgid "Current header" +msgstr "Nuvarande sidhuvud" + +#. translators: %s: header height in pixels +#: wp-includes/customize/class-wp-customize-header-image-control.php:219 +msgid "Click “Add new image” to upload an image file from your computer. Your theme works best with an image with a header height of %s pixels — you’ll be able to crop your image once you upload it for a perfect fit." +msgstr "Klicka på ”Lägg till ny bild” för att ladda upp en bildfil från din dator. Ditt tema fungerar bäst med en sidhuvudsbild som är %s pixlar hög — När du har laddat upp bilden kommer du att kunna beskära den så att den passar perfekt." + +#. translators: %s: header width in pixels +#: wp-includes/customize/class-wp-customize-header-image-control.php:213 +msgid "Click “Add new image” to upload an image file from your computer. Your theme works best with an image with a header width of %s pixels — you’ll be able to crop your image once you upload it for a perfect fit." +msgstr "Klicka på ”Lägg till ny bild” för att ladda upp en bildfil från din dator. Ditt tema fungerar bäst med en sidhuvudsbild som är %s pixlar bred — När du har laddat upp bilden kommer du att kunna beskära den så att den passar perfekt." + +#. translators: %s: header size in pixels +#: wp-includes/customize/class-wp-customize-header-image-control.php:207 +msgid "Click “Add new image” to upload an image file from your computer. Your theme works best with an image with a header size of %s pixels — you’ll be able to crop your image once you upload it for a perfect fit." +msgstr "Klicka på ”Lägg till ny bild” för att ladda upp en bildfil från din dator. Ditt tema fungerar bäst med en sidhuvudsbild med storleken %s pixlar — När du har laddat upp bilden kommer du att kunna beskära den så att den passar perfekt." + +#: wp-includes/customize/class-wp-customize-header-image-control.php:203 +msgid "Click “Add new image” to upload an image file from your computer. Your theme works best with an image that matches the size of your video — you’ll be able to crop your image once you upload it for a perfect fit." +msgstr "Klicka på ”Lägg till ny bild” för att ladda upp en bildfil från din dator. Ditt tema fungerar bäst med en bild, vars storlek stämmer mot din video — När du har laddat upp bilden kommer du att kunna beskära den så att den passar perfekt." + +#: wp-includes/customize/class-wp-customize-header-image-control.php:167 +msgid "No image set" +msgstr "Ingen bild angiven" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:155 +msgid "Randomizing suggested headers" +msgstr "Slumpar föreslagna sidhuvuden" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:153 +msgid "Randomizing uploaded headers" +msgstr "Slumpar uppladdade sidhuvuden" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:140 +#: wp-includes/js/dist/editor.js:8652 +msgid "Remove image" +msgstr "Ta bort bild" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:135 +msgid "Set image" +msgstr "Ange bild" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:126 +msgid "Randomize suggested headers" +msgstr "Slumpa föreslagna sidhuvuden" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:124 +msgid "Randomize uploaded headers" +msgstr "Slumpa uppladdade sidhuvuden" + +#: wp-includes/customize/class-wp-customize-header-image-control.php:54 +#: wp-includes/class-wp-customize-manager.php:5228 +msgid "Header Image" +msgstr "Bild för sidhuvud" + +#: wp-includes/category.php:49 wp-includes/category-template.php:360 +#: wp-includes/class-wp-query.php:1790 +msgid "%1$s is deprecated. Use %2$s instead." +msgstr "%1$s har fasats ut. Använd istället %2$s." + +#. translators: %s: the site/panel title in the Customizer +#: wp-includes/class-wp-customize-panel.php:362 +#: wp-includes/customize/class-wp-customize-nav-menus-panel.php:78 +msgid "You are customizing %s" +msgstr "Du anpassar just nu %s" + +#: wp-includes/class-wp-customize-panel.php:337 +msgid "Press return or enter to open this panel" +msgstr "Tryck retur eller enter för att öppna denna panel" + +#. translators: %s: shortcode tag +#: wp-includes/shortcodes.php:300 +msgid "Attempting to parse a shortcode without a valid callback: %s" +msgstr "Försöker tolka en kortkod utan giltig återgivningsfunktion: %s" + +#. translators: 1: shortcode name, 2: space separated list of reserved +#. characters +#: wp-includes/shortcodes.php:74 +msgid "Invalid shortcode name: %1$s. Do not use spaces or reserved characters: %2$s" +msgstr "Ogiltigt namn för kortkod: %1$s. Använd inte mellanslag eller reserverade tecken: %2$s" + +#: wp-includes/shortcodes.php:67 +msgid "Invalid shortcode name: Empty name given." +msgstr "Ogiltigt namn för kortkod: Inget namn angivet." + +#: wp-includes/class-wp-customize-control.php:632 +#: wp-includes/class-wp-customize-nav-menus.php:1159 +msgid "Add" +msgstr "Lägg till" + +#: wp-includes/class-wp-customize-control.php:631 +msgid "New page title…" +msgstr "Ny sidrubrik…" + +#: wp-includes/class-wp-customize-control.php:630 +msgid "New page title" +msgstr "Ny rubrik för sida" + +#. translators: %s: add new page label +#: wp-includes/class-wp-customize-control.php:626 +msgid "+ %s" +msgstr "+ %s" + +#: wp-includes/widgets.php:1600 +msgid "Display item date?" +msgstr "Visa postens datum?" + +#: wp-includes/widgets.php:1597 +msgid "Display item author if available?" +msgstr "Visa författare om tillgängligt?" + +#: wp-includes/widgets.php:1594 +msgid "Display item content?" +msgstr "Visa postens innehåll?" + +#: wp-includes/widgets.php:1584 +msgid "How many items would you like to display?" +msgstr "Hur många inslag vill du visa?" + +#: wp-includes/widgets.php:1581 +msgid "Give the feed a title (optional):" +msgstr "Ge flödet en rubrik (valfritt):" + +#: wp-includes/widgets.php:1578 +msgid "Enter the RSS feed URL here:" +msgstr "Ange RSS-flödets URL här:" + +#: wp-includes/widgets.php:1487 +msgid "Untitled" +msgstr "Utan rubrik" + +#. translators: %s: register_widget() +#: wp-includes/widgets.php:1104 +msgid "Widgets need to be registered using %s, before they can be displayed." +msgstr "Innan widgetar kan visas måste de först registreras med %s." + +#. translators: 1: the id argument, 2: sidebar name, 3: recommended id value +#: wp-includes/widgets.php:264 +msgid "No %1$s was set in the arguments array for the \"%2$s\" sidebar. Defaulting to \"%3$s\". Manually set the %1$s to \"%3$s\" to silence this notice and keep existing sidebar content." +msgstr "Inget %1$s var satt i argumentmatrisen för sidopanelen \"%2$s\". Därför används i stället standardargumentet \"%3$s\". Ange manuellt %1$s till \"%3$s\" för att tysta detta meddelande och behålla existerande innehåll i sidopanelen." + +#: wp-includes/widgets.php:180 +msgid "Sidebar" +msgstr "Sidopanel" + +#: wp-includes/widgets.php:178 wp-includes/widgets.php:250 +msgid "Sidebar %d" +msgstr "Sidopanel %d" + +#: wp-includes/class-wp-image-editor.php:272 +msgid "Attempted to set image quality outside of the range [1,100]." +msgstr "Försök att ställa in bildkvaliteten utanför intervallet [1,100]." + +#: wp-includes/option.php:2219 +msgid "%1$s is deprecated. The callback from %2$s is used instead." +msgstr "%1$s har upphört att användas. I stället används återanropet från %2$s." + +#: wp-includes/option.php:2136 wp-includes/option.php:2149 +#: wp-includes/option.php:2189 wp-includes/option.php:2202 +msgid "The \"%s\" options group has been removed. Use another settings group." +msgstr "Inställningsgruppen \"%s\" har tagits bort. Använd en annan inställningsgrupp." + +#: wp-includes/option.php:2067 +msgid "Allow people to post comments on new articles." +msgstr "Låt besökare skriva kommentarer på nya artiklar." + +#: wp-includes/option.php:2053 +msgid "Allow link notifications from other blogs (pingbacks and trackbacks) on new articles." +msgstr "Tillåt notiser om nya länkar från andra bloggar (pingback och trackback) för nya artiklar." + +#: wp-includes/option.php:2038 +msgid "Blog pages show at most." +msgstr "Bloggsidor visar högst." + +#: wp-includes/option.php:2028 +msgid "Default post format." +msgstr "Standardformat för inlägg." + +#: wp-includes/option.php:2018 +msgid "Default post category." +msgstr "Standardkategori för inlägg." + +#: wp-includes/option.php:2007 +msgid "Convert emoticons like :-) and :-P to graphics on display." +msgstr "Översätt emotikon-symboler som :-) och :-P till riktig emoji när texten visas." + +#: wp-includes/option.php:1996 +msgid "WordPress locale code." +msgstr "Språkkod (locale) för WordPress." + +#: wp-includes/option.php:1984 +msgid "A day number of the week that the week should start on." +msgstr "Numret på dagen i veckan som veckan ska börja på." + +#: wp-includes/option.php:1974 +msgid "A time format for all time strings." +msgstr "Ett tidsformat för alla strängar med klockslag." + +#: wp-includes/option.php:1964 +msgid "A date format for all date strings." +msgstr "Ett datumformat för alla strängar med datum." + +#: wp-includes/option.php:1954 +msgid "A city in the same timezone as you." +msgstr "En ort i samma tidszon som du." + +#: wp-includes/option.php:1941 +msgid "This address is used for admin purposes, like new user notification." +msgstr "Denna adress används för administrativa ändamål, såsom notifikation om ny användare." + +#: wp-includes/option.php:1924 +msgid "Site URL." +msgstr "Webbplats-URL." + +#: wp-includes/option.php:1908 +msgid "Site tagline." +msgstr "Webbplatsslogan." + +#: wp-includes/option.php:1896 +msgid "Site title." +msgstr "Webbplatsrubrik." + +#: wp-includes/option.php:167 +msgid "%s is a protected WP option and may not be modified" +msgstr "%s är en skyddad WP-inställning och kan inte ändras" + +#. translators: %s: 'document_title_separator' filter name +#: wp-includes/feed.php:103 wp-includes/feed.php:129 +msgid "Use the %s filter instead." +msgstr "Använd filtret %s istället." + +#. translators: %s: Name of the directory (build) +#: wp-includes/class-wp-locale.php:239 +msgid "The %s directory of the develop repository must be used for RTL." +msgstr "Katalogen %s från utvecklingsförrådet måste användas för RTL." + +#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress. +#: wp-includes/class-wp-locale.php:222 +msgctxt "text direction" +msgid "ltr" +msgstr "ltr" + +#. translators: $dec_point argument for https://secure.php.net/number_format, +#. default is . +#: wp-includes/class-wp-locale.php:213 +msgid "number_format_decimal_point" +msgstr "," + +#. translators: $thousands_sep argument for +#. https://secure.php.net/number_format, default is , +#: wp-includes/class-wp-locale.php:200 +msgid "number_format_thousands_sep" +msgstr " " + +#: wp-includes/class-wp-locale.php:194 +#: wp-includes/customize/class-wp-customize-date-time-control.php:173 +#: wp-includes/js/dist/components.js:30686 +msgid "PM" +msgstr "e m" + +#: wp-includes/class-wp-locale.php:193 +#: wp-includes/customize/class-wp-customize-date-time-control.php:172 +#: wp-includes/js/dist/components.js:30680 +msgid "AM" +msgstr "f m" + +#: wp-includes/class-wp-locale.php:192 +msgid "pm" +msgstr "e m" + +#: wp-includes/class-wp-locale.php:191 +msgid "am" +msgstr "f m" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:188 +msgctxt "December abbreviation" +msgid "Dec" +msgstr "dec" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:187 +msgctxt "November abbreviation" +msgid "Nov" +msgstr "nov" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:186 +msgctxt "October abbreviation" +msgid "Oct" +msgstr "okt" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:185 +msgctxt "September abbreviation" +msgid "Sep" +msgstr "sep" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:184 +msgctxt "August abbreviation" +msgid "Aug" +msgstr "aug" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:183 +msgctxt "July abbreviation" +msgid "Jul" +msgstr "jul" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:182 +msgctxt "June abbreviation" +msgid "Jun" +msgstr "jun" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:181 +msgctxt "May abbreviation" +msgid "May" +msgstr "maj" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:180 +msgctxt "April abbreviation" +msgid "Apr" +msgstr "apr" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:179 +msgctxt "March abbreviation" +msgid "Mar" +msgstr "mar" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:178 +msgctxt "February abbreviation" +msgid "Feb" +msgstr "feb" + +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:177 +msgctxt "January abbreviation" +msgid "Jan" +msgstr "jan" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:174 +msgctxt "genitive" +msgid "December" +msgstr "december" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:173 +msgctxt "genitive" +msgid "November" +msgstr "november" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:172 +msgctxt "genitive" +msgid "October" +msgstr "oktober" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:171 +msgctxt "genitive" +msgid "September" +msgstr "september" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:170 +msgctxt "genitive" +msgid "August" +msgstr "augusti" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:169 +msgctxt "genitive" +msgid "July" +msgstr "juli" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:168 +msgctxt "genitive" +msgid "June" +msgstr "juni" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:167 +msgctxt "genitive" +msgid "May" +msgstr "maj" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:166 +msgctxt "genitive" +msgid "April" +msgstr "april" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:165 +msgctxt "genitive" +msgid "March" +msgstr "mars" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:164 +msgctxt "genitive" +msgid "February" +msgstr "februari" + +#. translators: month name, genitive +#: wp-includes/class-wp-locale.php:163 +msgctxt "genitive" +msgid "January" +msgstr "januari" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:160 wp-includes/class-wp-locale.php:188 +#: wp-includes/js/dist/components.js:30591 +msgid "December" +msgstr "december" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:159 wp-includes/class-wp-locale.php:187 +#: wp-includes/js/dist/components.js:30589 +msgid "November" +msgstr "november" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:158 wp-includes/class-wp-locale.php:186 +#: wp-includes/js/dist/components.js:30587 +msgid "October" +msgstr "oktober" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:157 wp-includes/class-wp-locale.php:185 +#: wp-includes/js/dist/components.js:30585 +msgid "September" +msgstr "september" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:156 wp-includes/class-wp-locale.php:184 +#: wp-includes/js/dist/components.js:30583 +msgid "August" +msgstr "augusti" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:155 wp-includes/class-wp-locale.php:183 +#: wp-includes/js/dist/components.js:30581 +msgid "July" +msgstr "juli" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:154 wp-includes/class-wp-locale.php:182 +#: wp-includes/js/dist/components.js:30579 +msgid "June" +msgstr "juni" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:153 wp-includes/class-wp-locale.php:181 +#: wp-includes/js/dist/components.js:30577 +msgid "May" +msgstr "maj" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:152 wp-includes/class-wp-locale.php:180 +#: wp-includes/js/dist/components.js:30575 +msgid "April" +msgstr "april" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:151 wp-includes/class-wp-locale.php:179 +#: wp-includes/js/dist/components.js:30573 +msgid "March" +msgstr "mars" + +#. translators: month name +#. translators: three-letter abbreviation of the month +#: wp-includes/class-wp-locale.php:150 wp-includes/class-wp-locale.php:178 +#: wp-includes/js/dist/components.js:30571 +msgid "February" +msgstr "februari" + +#. translators: month name +#: wp-includes/class-wp-locale.php:149 wp-includes/class-wp-locale.php:177 +#: wp-includes/js/dist/components.js:30569 +msgid "January" +msgstr "januari" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:146 +msgid "Sat" +msgstr "lör" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:145 +msgid "Fri" +msgstr "fre" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:144 +msgid "Thu" +msgstr "tor" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:143 +msgid "Wed" +msgstr "ons" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:142 +msgid "Tue" +msgstr "tis" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:141 +msgid "Mon" +msgstr "mån" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:140 +msgid "Sun" +msgstr "sön" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:137 +msgctxt "Saturday initial" +msgid "S" +msgstr "L" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:136 +msgctxt "Friday initial" +msgid "F" +msgstr "F" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:135 +msgctxt "Thursday initial" +msgid "T" +msgstr "T" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:134 +msgctxt "Wednesday initial" +msgid "W" +msgstr "O" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:133 +msgctxt "Tuesday initial" +msgid "T" +msgstr "T" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:132 +msgctxt "Monday initial" +msgid "M" +msgstr "M" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:131 +msgctxt "Sunday initial" +msgid "S" +msgstr "S" + +#. translators: weekday +#. translators: one-letter abbreviation of the weekday +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:128 wp-includes/class-wp-locale.php:137 +#: wp-includes/class-wp-locale.php:146 +msgid "Saturday" +msgstr "lördag" + +#. translators: weekday +#. translators: one-letter abbreviation of the weekday +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:127 wp-includes/class-wp-locale.php:136 +#: wp-includes/class-wp-locale.php:145 +msgid "Friday" +msgstr "fredag" + +#. translators: weekday +#. translators: one-letter abbreviation of the weekday +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:126 wp-includes/class-wp-locale.php:135 +#: wp-includes/class-wp-locale.php:144 +msgid "Thursday" +msgstr "torsdag" + +#. translators: weekday +#. translators: one-letter abbreviation of the weekday +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:125 wp-includes/class-wp-locale.php:134 +#: wp-includes/class-wp-locale.php:143 +msgid "Wednesday" +msgstr "onsdag" + +#. translators: weekday +#. translators: one-letter abbreviation of the weekday +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:124 wp-includes/class-wp-locale.php:133 +#: wp-includes/class-wp-locale.php:142 +msgid "Tuesday" +msgstr "tisdag" + +#. translators: weekday +#. translators: one-letter abbreviation of the weekday +#. translators: three-letter abbreviation of the weekday +#: wp-includes/class-wp-locale.php:123 wp-includes/class-wp-locale.php:132 +#: wp-includes/class-wp-locale.php:141 +msgid "Monday" +msgstr "måndag" + +#. translators: weekday +#: wp-includes/class-wp-locale.php:122 wp-includes/class-wp-locale.php:131 +#: wp-includes/class-wp-locale.php:140 +msgid "Sunday" +msgstr "söndag" + +#: wp-includes/class-wp-fatal-error-handler.php:175 +msgid "The site is experiencing technical difficulties." +msgstr "Webbplatsen har tekniska problem." + +#: wp-includes/class-wp-fatal-error-handler.php:173 +msgid "The site is experiencing technical difficulties. Please check your site admin email inbox for instructions." +msgstr "Webbplatsen har just nu ett tekniskt problem. Vidare instruktioner har skickats via e-post till webbplatsens administratör." + +#: wp-includes/revision.php:585 +msgid "Sorry, you are not allowed to preview drafts." +msgstr "Du saknar behörighet för att förhandsgranska utkast." + +#: wp-includes/revision.php:306 +msgid "Cannot create a revision of a revision" +msgstr "Kan inte skapa en version av en revision" + +#: wp-includes/revision.php:36 wp-includes/js/dist/edit-post.js:4632 +#: wp-includes/js/dist/edit-post.js:5551 +msgid "Excerpt" +msgstr "Utdrag" + +#: wp-includes/revision.php:35 +msgid "Content" +msgstr "Innehåll" + +#. translators: %s: ImageMagick method name +#: wp-includes/class-wp-image-editor-imagick.php:692 +#: wp-includes/class-wp-image-editor-imagick.php:697 +msgid "%s is required to strip image meta." +msgstr "%s är obligatoriskt för att ta bort bildmetadata." + +#: wp-includes/class-wp-image-editor-imagick.php:261 +#: wp-includes/class-wp-image-editor-gd.php:182 +msgid "Could not calculate resized image dimensions" +msgstr "Kunde inte beräkna storleken för den omskalade bilden" + +#: wp-includes/class-wp-image-editor-imagick.php:225 +#: wp-includes/class-wp-image-editor-gd.php:104 +msgid "Could not read image size." +msgstr "Kunde inte läsa bildstorlek." + +#: wp-includes/class-wp-image-editor-imagick.php:158 +#: wp-includes/class-wp-image-editor-gd.php:99 +msgid "File is not an image." +msgstr "Filen är inte en bild." + +#: wp-includes/class-wp-image-editor-imagick.php:135 +#: wp-includes/class-wp-image-editor-gd.php:90 +msgid "File doesn’t exist?" +msgstr "Filen finns inte?" + +#: wp-includes/user.php:3625 +msgid "The confirmation email has expired." +msgstr "Bekräftelsemeddelandet är utgånget." + +#: wp-includes/user.php:3607 +msgid "Invalid action." +msgstr "Ogiltig åtgärd." + +#: wp-includes/user.php:3587 +msgid "This link has expired." +msgstr "Länken gäller inte längre." + +#: wp-includes/user.php:3583 +msgid "Invalid request." +msgstr "Ogiltig begäran." + +#: wp-includes/user.php:3530 +msgid "Unable to send personal data export confirmation email." +msgstr "Det går inte att sända bekräftelsemeddelandet för export av persondata." + +#. translators: Confirm privacy data request notification email subject. 1: +#. Site title, 2: Name of the action +#: wp-includes/user.php:3501 +msgid "[%1$s] Confirm Action: %2$s" +msgstr "[%1$s] Bekräfta åtgärd: %2$s" + +#. translators: Do not translate DESCRIPTION, CONFIRM_URL, SITENAME, SITEURL: +#. those are placeholders. +#: wp-includes/user.php:3450 +msgid "" +"Howdy,\n" +"\n" +"A request has been made to perform the following action on your account:\n" +"\n" +" ###DESCRIPTION###\n" +"\n" +"To confirm this, please click on the following link:\n" +"###CONFIRM_URL###\n" +"\n" +"You can safely ignore and delete this email if you do not want to\n" +"take this action.\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"En begäran har inkommit om att utföra följande åtgärd för din räkning:\n" +"\n" +" ###DESCRIPTION###\n" +"\n" +"För att utföra detta ber vi dig klicka på följande länk:\n" +"###CONFIRM_URL###\n" +"\n" +"Du kan lugnt strunta i detta och kasta detta meddelande om du inte vill utföra denna åtgärd.\n" +"\n" +"Vänliga hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#: wp-includes/user.php:3421 +msgid "Invalid user request." +msgstr "Ogiltig begäran från användare." + +#. translators: %s: action name +#: wp-includes/user.php:3391 +msgid "Confirm the \"%s\" action" +msgstr "Bekräfta åtgärden ”%s”" + +#: wp-includes/user.php:3387 +msgid "Erase Personal Data" +msgstr "Ta bort personuppgifter" + +#: wp-includes/user.php:3384 +msgid "Export Personal Data" +msgstr "Exportera personuppgifter" + +#: wp-includes/user.php:3353 +msgid "An incomplete request for this email address already exists." +msgstr "Det finns redan en oavslutad begäran för denna e-postadress." + +#: wp-includes/user.php:3332 +msgid "Invalid action name." +msgstr "Ogiltigt åtgärdsnamn." + +#: wp-includes/user.php:3293 +msgid "The site administrator has been notified. You will receive an email confirmation when they erase your data." +msgstr "Webbplatsens administratör har informerats. Du kommer via e-post att få en notifiering när dina uppgifter har raderats." + +#: wp-includes/user.php:3292 +msgid "Thanks for confirming your erasure request." +msgstr "Tack för att du bekräftar din begäran om att ta bort data." + +#: wp-includes/user.php:3290 +msgid "The site administrator has been notified. You will receive a link to download your export via email when they fulfill your request." +msgstr "Webbplatsens administratör har informerats. Du kommer via e-post att få en länk för nedladdning av din dataexport när begäran har behandlats." + +#: wp-includes/user.php:3289 +msgid "Thanks for confirming your export request." +msgstr "Tack för att du bekräftar din begäran om dataexport." + +#: wp-includes/user.php:3285 +msgid "The site administrator has been notified and will fulfill your request as soon as possible." +msgstr "Webbplatsens administratör har informerats och kommer att hantera din begäran så snart som möjligt." + +#: wp-includes/user.php:3284 +msgid "Action has been confirmed." +msgstr "Åtgärden har bekräftats." + +#. translators: Do not translate SITENAME, SITEURL, PRIVACY_POLICY_URL; those +#. are placeholders. +#: wp-includes/user.php:3213 +msgid "" +"Howdy,\n" +"\n" +"Your request to erase your personal data on ###SITENAME### has been completed.\n" +"\n" +"If you have any follow-up questions or concerns, please contact the site administrator.\n" +"\n" +"For more information, you can also read our privacy policy: ###PRIVACY_POLICY_URL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"Din begäran att ta bort dina personuppgifter på ###SITENAME### har genomförts.\n" +"\n" +"Om du fortfarande undrar över något är du välkommen att kontakta webbplatsens administratör.\n" +"\n" +"Det finns också mer information i vår integritetspolicy: ###PRIVACY_POLICY_URL###\n" +"\n" +"Hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#. translators: Do not translate SITENAME, SITEURL; those are placeholders. +#: wp-includes/user.php:3200 +msgid "" +"Howdy,\n" +"\n" +"Your request to erase your personal data on ###SITENAME### has been completed.\n" +"\n" +"If you have any follow-up questions or concerns, please contact the site administrator.\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"Din begäran att radera dina personuppgifter på ###SITENAME### har genomförts.\n" +"\n" +"Om du fortfarande undrar över något är du välkommen att kontakta webbplatsens administratör.\n" +"\n" +"Hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#. translators: Erasure request fulfilled notification email subject. %s: Site +#. name. +#: wp-includes/user.php:3173 +msgid "[%s] Erasure Request Fulfilled" +msgstr "[%s] Begäran om databorttagning har genomförts" + +#. translators: Privacy data request confirmed notification email subject. 1: +#. Site title, 2: Name of the confirmed action. +#: wp-includes/user.php:3089 +msgid "[%1$s] Action Confirmed: %2$s" +msgstr "[%1$s] Åtgärd bekräftad: %2$s" + +#. translators: Do not translate SITENAME, USER_EMAIL, DESCRIPTION, MANAGE_URL, +#. SITEURL; those are placeholders. +#: wp-includes/user.php:3035 +msgid "" +"Howdy,\n" +"\n" +"A user data privacy request has been confirmed on ###SITENAME###:\n" +"\n" +"User: ###USER_EMAIL###\n" +"Request: ###DESCRIPTION###\n" +"\n" +"You can view and manage these data privacy requests here:\n" +"\n" +"###MANAGE_URL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej,\n" +"\n" +"En integritetsbegäran från en användare har bekräftats på ###SITENAME###:\n" +"\n" +"Användare: ###USER_EMAIL###\n" +"Begäran: ###DESCRIPTION###\n" +"\n" +"Du kan se och hantera dessa integritetsförfrågningar här:\n" +"\n" +"###MANAGE_URL###\n" +"\n" +"Hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#: wp-includes/user.php:2943 +msgid "User" +msgstr "Användare" + +#: wp-includes/user.php:2907 +msgid "User Description" +msgstr "Användarens beskrivning" + +#: wp-includes/user.php:2906 +msgid "User Last Name" +msgstr "Användarens efternamn" + +#: wp-includes/user.php:2905 +msgid "User First Name" +msgstr "Användarens förnamn" + +#: wp-includes/user.php:2904 +msgid "User Nickname" +msgstr "Användarens smeknamn" + +#: wp-includes/user.php:2903 +msgid "User Display Name" +msgstr "Användarens visningsnamn" + +#: wp-includes/user.php:2902 +msgid "User Registration Date" +msgstr "Användarens registreringsdatum" + +#: wp-includes/user.php:2901 +msgid "User URL" +msgstr "Användarens URL" + +#: wp-includes/user.php:2900 +msgid "User Email" +msgstr "Användarens e-post" + +#: wp-includes/user.php:2899 +msgid "User Nice Name" +msgstr "Användarens smeknamn" + +#: wp-includes/user.php:2898 +msgid "User Login Name" +msgstr "Användarens inloggningsnamn" + +#: wp-includes/user.php:2897 +msgid "User ID" +msgstr "Användar-ID" + +#: wp-includes/user.php:2865 +msgid "WordPress User" +msgstr "WordPress-användare" + +#. translators: %s: New email address +#: wp-includes/user.php:2835 +msgid "Your email address has not been updated yet. Please check your inbox at %s for a confirmation email." +msgstr "Din e-postadress har ännu inte uppdaterats. Kontrollera inkorgen för %s för att se om du har fått en e-postbekräftelse." + +#. translators: New email address notification email subject. %s: Site name +#: wp-includes/user.php:2813 +msgid "[%s] Email Change Request" +msgstr "[%s] Begäran om ändring av e-postadress" + +#. translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: +#. those are placeholders. +#: wp-includes/user.php:2765 +msgid "" +"Howdy ###USERNAME###,\n" +"\n" +"You recently requested to have the email address on your account changed.\n" +"\n" +"If this is correct, please click on the following link to change it:\n" +"###ADMIN_URL###\n" +"\n" +"You can safely ignore and delete this email if you do not want to\n" +"take this action.\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej ###USERNAME###,\n" +"\n" +"Du har nyligen begärt en ändring av e-postadressen för ditt konto.\n" +"\n" +"Om det stämmer, klicka på denna länk för att utföra ändringen:\n" +"###ADMIN_URL###\n" +"\n" +"Om du inte vill ändra adressen kan du lugnt ignorera detta meddelande.\n" +"\n" +"Detta meddelande skickades till ###EMAIL###\n" +"\n" +"Vänliga hälsningar,\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#: wp-includes/user.php:2745 +msgid "ERROR: The email address is already used." +msgstr "FEL: E-postadressen används redan." + +#: wp-includes/user.php:2501 +msgid "ERROR: Couldn’t register you… please contact the webmaster !" +msgstr "FEL: Kunde inte registrera dig… vänligen kontakta webmastern !" + +#: wp-includes/user.php:2460 +msgid "ERROR: This email is already registered, please choose another one." +msgstr "FEL: Den här e-postadressen är redan registrerad. Välj en annan adress." + +#: wp-includes/user.php:2457 wp-includes/user.php:2733 +msgid "ERROR: The email address isn’t correct." +msgstr "FEL: E-postadressen är inte korrekt." + +#: wp-includes/user.php:2455 +msgid "ERROR: Please type your email address." +msgstr "FEL: Var vänlig ange din e-postadress." + +#: wp-includes/user.php:2449 +msgid "ERROR: Sorry, that username is not allowed." +msgstr "FEL: Ledsen, det användarnamnet är inte tillåtet." + +#: wp-includes/user.php:2443 +msgid "ERROR: This username is already registered. Please choose another one." +msgstr "FEL: Det här användarnamnet finns redan registrerat. Vänligen välj ett annat." + +#: wp-includes/user.php:2440 +msgid "ERROR: This username is invalid because it uses illegal characters. Please enter a valid username." +msgstr "FEL: Användarnamnet är ogiltigt eftersom det innehåller icke tillåtna tecken. Var vänlig och ange ett riktigt användarnamn." + +#: wp-includes/user.php:2438 +msgid "ERROR: Please enter a username." +msgstr "FEL: Var vänlig och ange ett användarnamn." + +#: wp-includes/user.php:2313 wp-includes/user.php:2317 +#: wp-includes/user.php:2322 wp-includes/user.php:2348 +#: wp-includes/user.php:2357 wp-includes/user.php:2361 +#: wp-includes/user.php:2378 wp-includes/user.php:3603 +#: wp-includes/user.php:3621 +msgid "Invalid key." +msgstr "Ogiltig nyckel." + +#: wp-includes/user.php:2284 +msgid "Could not save password reset key to database." +msgstr "Kunde inte spara lösenordets återställningsnyckel i databasen." + +#: wp-includes/user.php:2258 +msgid "Password reset is not allowed for this user" +msgstr "Återställning av lösenordet ej tillåtet för denna användaren" + +#: wp-includes/user.php:2190 +msgid "Hint: The password should be at least twelve characters long. To make it stronger, use upper and lower case letters, numbers, and symbols like ! \" ? $ % ^ & )." +msgstr "Tips: Lösenordet bör vara minst tolv tecken långt. För att göra det starkare, använd små och stora bokstäver, siffror och symboler som ! \" ? $ % ^ & )." + +#: wp-includes/user.php:2152 +msgid "Jabber / Google Talk" +msgstr "Jabber / Google Talk" + +#: wp-includes/user.php:2151 +msgid "Yahoo IM" +msgstr "Yahoo IM" + +#: wp-includes/user.php:2150 +msgid "AIM" +msgstr "AIM" + +#. translators: Email change notification email subject. %s: Site name +#: wp-includes/user.php:2031 +msgid "[%s] Email Changed" +msgstr "[%s] Ändrad e-postadress" + +#. translators: Do not translate USERNAME, ADMIN_EMAIL, NEW_EMAIL, EMAIL, +#. SITENAME, SITEURL: those are placeholders. +#: wp-includes/user.php:2013 +msgid "" +"Hi ###USERNAME###,\n" +"\n" +"This notice confirms that your email address on ###SITENAME### was changed to ###NEW_EMAIL###.\n" +"\n" +"If you did not change your email, please contact the Site Administrator at\n" +"###ADMIN_EMAIL###\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej ###USERNAME###!\n" +"\n" +"Detta meddelande bekräftar att din e-postadress på webbplatsen ###SITENAME### ändrats till ###NEW_EMAIL###.\n" +"\n" +"Om du inte ändrat din e-postadress, vänligen kontakta webbplatsens administratör via\n" +"###ADMIN_EMAIL###\n" +"\n" +"Detta meddelande har skickats till ###EMAIL###\n" +"\n" +"Vänliga hälsningar!\n" +"Vi på ###SITENAME###\n" +"###SITEURL###" + +#. translators: Do not translate USERNAME, ADMIN_EMAIL, EMAIL, SITENAME, +#. SITEURL: those are placeholders. +#: wp-includes/user.php:1956 +msgid "" +"Hi ###USERNAME###,\n" +"\n" +"This notice confirms that your password was changed on ###SITENAME###.\n" +"\n" +"If you did not change your password, please contact the Site Administrator at\n" +"###ADMIN_EMAIL###\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Hej ###USERNAME###,\n" +"\n" +"Detta meddelande bekräftar att ditt lösenord ändrades på ###SITENAME###.\n" +"\n" +"Om du inte har ändrat ditt lösenord, kontakta administratören på\n" +"###ADMIN_EMAIL###\n" +"\n" +"Detta meddelande har skickats till ###EMAIL###\n" +"\n" +"Mvh,\n" +"Alla på ###SITENAME###\n" +"###SITEURL###" + +#. translators: 1: first name, 2: last name +#: wp-includes/user.php:1681 +msgctxt "Display name based on first name and last name" +msgid "%1$s %2$s" +msgstr "%1$s %2$s" + +#: wp-includes/user.php:1641 wp-includes/ms-functions.php:515 +msgid "Sorry, that email address is already used!" +msgstr "Den e-postadressen används redan!" + +#: wp-includes/user.php:1590 +msgid "Nicename may not be longer than 50 characters." +msgstr "Smeknamn kan inte vara längre än 50 tecken." + +#: wp-includes/user.php:1567 wp-includes/ms-functions.php:510 +msgid "Sorry, that username already exists!" +msgstr "Det användarnamnet finns redan registrerat!" + +#: wp-includes/user.php:1563 wp-includes/ms-functions.php:491 +msgid "Username may not be longer than 60 characters." +msgstr "Användarnamnet får inte vara längre än 60 tecken." + +#: wp-includes/user.php:1561 +msgid "Cannot create a user with an empty login name." +msgstr "Kan inte skapa en användare med ett tomt inloggningsnamn." + +#. translators: 1: display name, 2: user_login +#: wp-includes/user.php:1190 +msgctxt "user dropdown" +msgid "%1$s (%2$s)" +msgstr "%1$s (%2$s)" + +#: wp-includes/user.php:327 +msgid "ERROR: Your account has been marked as a spammer." +msgstr "FEL: Ditt konto har fått anmärkning för skräppostning." + +#: wp-includes/user.php:296 wp-includes/functions.php:6100 +msgid "Please log in again." +msgstr "Var vänlig logga in igen." + +#. translators: %s: email address +#: wp-includes/user.php:252 +msgid "ERROR: The password you entered for the email address %s is incorrect." +msgstr "FEL: Lösenordet du angav för e-postadressen %s är felaktigt." + +#: wp-includes/user.php:233 +msgid "ERROR: Invalid email address." +msgstr "FEL: Ogiltig e-postadress." + +#: wp-includes/user.php:214 +msgid "ERROR: The email field is empty." +msgstr "FEL: Fältet för e-post är tomt." + +#. translators: %s: user name +#: wp-includes/user.php:178 +msgid "ERROR: The password you entered for the username %s is incorrect." +msgstr "FEL: Lösenordet du angav för användarnamnet %s är felaktigt." + +#: wp-includes/user.php:152 +msgid "ERROR: Invalid username." +msgstr "FEL: Ogiltigt användarnamn." + +#: wp-includes/user.php:141 wp-includes/user.php:218 +msgid "ERROR: The password field is empty." +msgstr "FEL: Lösenordsfältet är tomt." + +#: wp-includes/user.php:137 +msgid "ERROR: The username field is empty." +msgstr "FEL: Användarnamnsfältet är tomt." + +#: wp-includes/media.php:4171 wp-includes/class-wp-editor.php:1127 +#: wp-includes/js/dist/block-editor.js:16129 +msgid "Media" +msgstr "Media" + +#: wp-includes/media.php:4115 +msgid "WordPress Media" +msgstr "WordPress-media" + +#: wp-includes/media.php:3757 +msgid "Attachments list" +msgstr "Lista med bilagor" + +#: wp-includes/media.php:3754 +msgid "Add to Video Playlist" +msgstr "Lägg till i videospellista" + +#: wp-includes/media.php:3753 +msgid "Add to video playlist" +msgstr "Lägg till i videospellista" + +#: wp-includes/media.php:3752 +msgid "Update video playlist" +msgstr "Uppdatera videospellista" + +#: wp-includes/media.php:3751 +msgid "Insert video playlist" +msgstr "Infoga videospellista" + +#: wp-includes/media.php:3750 +msgid "← Cancel Video Playlist" +msgstr "← Avsluta videospellista" + +#: wp-includes/media.php:3749 +msgid "Edit Video Playlist" +msgstr "Redigera videospellista" + +#: wp-includes/media.php:3748 +msgid "Create Video Playlist" +msgstr "Skapa videospellista" + +#: wp-includes/media.php:3747 +msgid "Drag and drop to reorder videos." +msgstr "Dra och släpp för att ändra ordning på videoklipp." + +#: wp-includes/media.php:3744 +msgid "Add to Audio Playlist" +msgstr "Lägg till i ljudspellista" + +#: wp-includes/media.php:3743 +msgid "Add to audio playlist" +msgstr "Lägg till i ljudspellista" + +#: wp-includes/media.php:3742 +msgid "Update audio playlist" +msgstr "Uppdatera ljudspellista" + +#: wp-includes/media.php:3741 +msgid "Insert audio playlist" +msgstr "Infoga ljudspellista" + +#: wp-includes/media.php:3740 +msgid "← Cancel Audio Playlist" +msgstr "← Avsluta ljudspellista" + +#: wp-includes/media.php:3739 +msgid "Edit Audio Playlist" +msgstr "Redigera ljudspellista" + +#: wp-includes/media.php:3738 +msgid "Create Audio Playlist" +msgstr "Skapa ljudspellista" + +#: wp-includes/media.php:3737 +msgid "Drag and drop to reorder tracks." +msgstr "Dra och släpp för att ordna spår." + +#: wp-includes/media.php:3734 +msgid "Add Subtitles" +msgstr "Lägg till undertexter" + +#: wp-includes/media.php:3733 wp-includes/js/dist/block-library.js:15732 +#: wp-includes/js/dist/block-library.js:15741 +msgid "Select Poster Image" +msgstr "Välj förhandsvisningsbild" + +#: wp-includes/media.php:3731 +msgid "Add Video Source" +msgstr "Lägg till videokälla" + +#: wp-includes/media.php:3730 +msgid "Replace Video" +msgstr "Byt ut video" + +#: wp-includes/media.php:3729 +msgid "Video Details" +msgstr "Detaljer för video" + +#: wp-includes/media.php:3725 +msgid "Add Audio Source" +msgstr "Lägg till ljudkälla" + +#: wp-includes/media.php:3724 +msgid "Replace Audio" +msgstr "Byt ut ljud" + +#: wp-includes/media.php:3723 +msgid "Audio Details" +msgstr "Detaljer för ljud" + +#: wp-includes/media.php:3720 +msgid "There has been an error cropping your image." +msgstr "Ett fel uppstod när bilden skulle beskäras." + +#: wp-includes/media.php:3717 +msgid "Cropping…" +msgstr "Beskär…" + +#: wp-includes/media.php:3716 +msgid "Crop your image" +msgstr "Beskär din bild" + +#: wp-includes/media.php:3715 +msgid "Crop Image" +msgstr "Beskär bild" + +#: wp-includes/media.php:3714 +msgid "Skip Cropping" +msgstr "Hoppa över beskärning" + +#: wp-includes/media.php:3713 +msgid "Select and Crop" +msgstr "Välj och beskär" + +#: wp-includes/media.php:3712 +msgid "Choose Image" +msgstr "Välj bild" + +#: wp-includes/media.php:3708 wp-includes/media.php:3726 +#: wp-includes/media.php:3732 +msgid "Cancel Edit" +msgstr "Avbryt redigering" + +#: wp-includes/media.php:3707 +msgid "Replace Image" +msgstr "Byt ut bild" + +#: wp-includes/media.php:3706 +msgid "Image Details" +msgstr "Detaljer för bild" + +#: wp-includes/media.php:3703 +msgid "Reverse order" +msgstr "Omvänd ordning" + +#: wp-includes/media.php:3702 +msgid "Add to Gallery" +msgstr "Lägg till i galleri" + +#: wp-includes/media.php:3701 +msgid "Add to gallery" +msgstr "Lägg till i galleri" + +#: wp-includes/media.php:3700 +msgid "Update gallery" +msgstr "Uppdatera galleri" + +#: wp-includes/media.php:3699 +msgid "Insert gallery" +msgstr "Infoga galleri" + +#: wp-includes/media.php:3698 +msgid "← Cancel Gallery" +msgstr "← Avsluta galleri" + +#: wp-includes/media.php:3697 +msgid "Edit Gallery" +msgstr "Redigera galleri" + +#: wp-includes/media.php:3696 +msgid "Create Gallery" +msgstr "Skapa galleri" + +#: wp-includes/media.php:3689 wp-includes/js/dist/block-editor.js:16177 +msgid "Insert from URL" +msgstr "Infoga från URL" + +#: wp-includes/media.php:3683 +msgid "No media files found." +msgstr "Inga mediafiler hittade." + +#: wp-includes/media.php:3682 +msgid "Search media items..." +msgstr "Sök medieobjekt..." + +#: wp-includes/media.php:3681 +msgid "Search Media" +msgstr "Sök efter media" + +#: wp-includes/media.php:3680 +msgid "Filter by type" +msgstr "Filtrera efter typ" + +#: wp-includes/media.php:3679 +msgid "Filter by date" +msgstr "Filtrera efter datum" + +#: wp-includes/media.php:3674 +msgid "Bulk Select" +msgstr "Välj flera" + +#: wp-includes/media.php:3673 +msgid "" +"You are about to trash these items.\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Du är på väg att kasta dessa filer i papperskorgen.\n" +" 'Avbryt' för att avbryta, 'OK' för att radera." + +#: wp-includes/media.php:3671 +msgid "" +"You are about to permanently delete this item from your site.\n" +"This action cannot be undone.\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Du är på väg att permanent radera detta objekt från din webbplats.\n" +"Denna åtgärd går inte att ångra.\n" +"”Avbryt” för att gå tillbaka. ”OK” för att radera." + +#: wp-includes/media.php:3669 +msgctxt "noun" +msgid "Trash" +msgstr "Papperskorg" + +#: wp-includes/media.php:3668 +msgctxt "media items" +msgid "Mine" +msgstr "Mina" + +#: wp-includes/media.php:3667 +msgid "Unattached" +msgstr "Ej bifogat" + +#: wp-includes/media.php:3664 +msgid "All dates" +msgstr "Alla datum" + +#: wp-includes/media.php:3663 +msgid "All media items" +msgstr "Alla mediaobjekt" + +#: wp-includes/media.php:3662 +msgid "← Return to library" +msgstr "← Tillbaka till bibliotek" + +#: wp-includes/media.php:3661 +msgid "Create a new video playlist" +msgstr "Skapa en ny videospellista" + +#: wp-includes/media.php:3660 +msgid "Create a new playlist" +msgstr "Skapa en ny spellista" + +#: wp-includes/media.php:3659 +msgid "Create a new gallery" +msgstr "Skapa ett nytt galleri" + +#: wp-includes/media.php:3657 wp-includes/js/dist/block-editor.js:16168 +msgid "Media Library" +msgstr "Mediabibliotek" + +#: wp-includes/media.php:3654 +msgid "Upload Images" +msgstr "Ladda upp bilder" + +#: wp-includes/media.php:3653 +msgid "Upload Files" +msgstr "Ladda upp filer" + +#: wp-includes/media.php:3650 +msgid "Drag and drop to reorder media files." +msgstr "Använd drag och släpp för att ändra ordning på mediafiler." + +#: wp-includes/media.php:3649 +msgid "%d selected" +msgstr "%d valda" + +#: wp-includes/media.php:3638 wp-includes/js/dist/edit-post.js:1018 +msgid "Select" +msgstr "Välj" + +#: wp-includes/media.php:3636 wp-includes/media.php:3658 +#: wp-includes/class-wp-editor.php:1288 +msgid "Add Media" +msgstr "Lägg till media" + +#. translators: 1: month name, 2: 4-digit year +#: wp-includes/media.php:3576 wp-includes/general-template.php:1892 +msgid "%1$s %2$d" +msgstr "%1$s %2$d" + +#: wp-includes/media.php:3248 +msgid "(no author)" +msgstr "(ingen författare)" + +#: wp-includes/media.php:3038 +msgid "No editor could be selected." +msgstr "Ingen redigerare kunde väljas." + +#: wp-includes/media.php:2282 +msgid "Bitrate Mode" +msgstr "Bithastighetsläge" + +#: wp-includes/media.php:2281 +msgid "Bitrate" +msgstr "Bithastighet" + +#: wp-includes/media.php:2279 +msgctxt "video or audio" +msgid "Length" +msgstr "Längd" + +#: wp-includes/media.php:2278 +#: wp-includes/customize/class-wp-customize-date-time-control.php:151 +#: wp-includes/js/dist/components.js:30637 +msgid "Year" +msgstr "År" + +#: wp-includes/media.php:2277 +msgid "Genre" +msgstr "Genre" + +#. translators: playlist item title +#: wp-includes/media.php:1912 wp-includes/media.php:1929 +msgctxt "playlist item title" +msgid "“%s”" +msgstr "”%s”" + +#: wp-includes/class-wp-customize-widgets.php:1177 +msgid "Shift-click to edit this widget." +msgstr "Använd shift+klick för att redigera denna widget." + +#: wp-includes/class-wp-customize-widgets.php:840 +#: wp-includes/customize/class-wp-customize-themes-section.php:120 +#: wp-includes/customize/class-wp-customize-themes-section.php:135 +#: wp-includes/class-wp-customize-nav-menus.php:1092 +msgid "The search results will be updated as you type." +msgstr "Sökresultaten uppdateras vartefter du skriver." + +#: wp-includes/class-wp-customize-widgets.php:839 +#: wp-includes/class-wp-customize-nav-menus.php:1096 +msgid "Clear Results" +msgstr "Rensa resultat" + +#: wp-includes/class-wp-customize-widgets.php:837 +msgid "Search widgets…" +msgstr "Sök widgetar…" + +#: wp-includes/class-wp-customize-widgets.php:836 +msgid "Search Widgets" +msgstr "Sök bland widgetar" + +#: wp-includes/class-wp-customize-widgets.php:832 +#: wp-includes/customize/class-wp-widget-area-customize-control.php:57 +msgid "Add a Widget" +msgstr "Lägg till en widget" + +#: wp-includes/class-wp-customize-widgets.php:792 +#: wp-includes/class-wp-customize-widgets.php:848 +msgid "No widgets found." +msgstr "Inga widgetar hittades." + +#. translators: %d: the number of widgets found +#: wp-includes/class-wp-customize-widgets.php:791 +msgid "Number of widgets found: %d" +msgstr "Antal widgetar hittade: %d" + +#: wp-includes/class-wp-customize-widgets.php:789 +#: wp-includes/customize/class-wp-widget-area-customize-control.php:59 +msgid "Reorder widgets" +msgstr "Ändra ordning" + +#: wp-includes/class-wp-customize-widgets.php:788 +#: wp-includes/class-wp-customize-nav-menus.php:473 +msgid "Reorder mode closed" +msgstr "Ordningsläge avslutat" + +#: wp-includes/class-wp-customize-widgets.php:787 +#: wp-includes/class-wp-customize-nav-menus.php:472 +msgid "Reorder mode enabled" +msgstr "Ordningsläge aktiverat" + +#: wp-includes/class-wp-customize-widgets.php:784 +msgid "You can navigate to other pages on your site while using the Customizer to view and edit the widgets displayed on those pages." +msgstr "Du kan besöka andra sidor på din webbplats medan du använder Anpassaren för att se och ändra de widgetar som visas på dessa sidor." + +#: wp-includes/class-wp-customize-widgets.php:783 +msgid "Widget moved down" +msgstr "Widget nedflyttad" + +#: wp-includes/class-wp-customize-widgets.php:782 +msgid "Widget moved up" +msgstr "Widget uppflyttad" + +#: wp-includes/class-wp-customize-widgets.php:780 +msgid "Keep widget settings and move it to the inactive widgets" +msgstr "Behåll widget-inställningarna och flytta till inaktiva widgetar" + +#: wp-includes/class-wp-customize-widgets.php:778 +msgid "Save and preview changes before publishing them." +msgstr "Spara och förhandsgranska ändringar innan publicering." + +#: wp-includes/class-wp-customize-widgets.php:777 wp-includes/media.php:3678 +#: wp-includes/class-wp-editor.php:1284 +#: wp-includes/js/dist/block-editor.js:15950 +#: wp-includes/js/dist/block-library.js:17530 +#: wp-includes/js/dist/format-library.js:712 +#: wp-includes/js/dist/format-library.js:974 +msgid "Apply" +msgstr "Verkställ" + +#. translators: %s: the total number of widget areas registered +#: wp-includes/class-wp-customize-widgets.php:760 +msgid "Your theme has %s widget area, but this particular page doesn’t display it." +msgid_plural "Your theme has %s widget areas, but this particular page doesn’t display them." +msgstr[0] "Ditt tema har %s widgetområde, men just denna sida visar det inte." +msgstr[1] "Ditt tema har %s widgetområden, men just denna sida visar dem inte." + +#: wp-includes/class-wp-customize-widgets.php:751 +msgid "Your theme has 1 widget area, but this particular page doesn’t display it." +msgstr "Ditt tema har 1 widgetområde, men just denna sida visar det inte." + +#. translators: %s: the number of other widget areas registered but not +#. rendered +#: wp-includes/class-wp-customize-widgets.php:736 +msgid "Your theme has %s other widget area, but this particular page doesn’t display it." +msgid_plural "Your theme has %s other widget areas, but this particular page doesn’t display them." +msgstr[0] "Ditt tema har %s ytterligare widgetområde, men just denna sida visar det inte." +msgstr[1] "Ditt tema har %s ytterligare widgetområden, men just denna sida visar dem inte." + +#: wp-includes/class-wp-customize-widgets.php:727 +msgid "Your theme has 1 other widget area, but this particular page doesn’t display it." +msgstr "Ditt tema har 1 ytterligare widgetområde, men just denna sida visar det inte." + +#: wp-includes/class-wp-customize-widgets.php:706 +msgctxt "Move widget" +msgid "Move" +msgstr "Flytta" + +#: wp-includes/class-wp-customize-widgets.php:705 +msgid "Select an area to move this widget into:" +msgstr "Välj ett fält att flytta denna widget till:" + +#: wp-includes/class-wp-customize-widgets.php:699 +#: wp-includes/class-wp-customize-nav-menus.php:1023 +#: wp-includes/js/dist/block-editor.js:9384 +msgid "Move up" +msgstr "Flytta upp" + +#: wp-includes/class-wp-customize-widgets.php:698 +#: wp-includes/class-wp-customize-nav-menus.php:1024 +#: wp-includes/js/dist/block-editor.js:9401 +msgid "Move down" +msgstr "Flytta ner" + +#: wp-includes/class-wp-customize-widgets.php:697 +msgid "Move to another area…" +msgstr "Flytta till ett annat fält…" + +#: wp-includes/class-wp-customize-widgets.php:418 +msgid "Widgets are independent sections of content that can be placed into widgetized areas provided by your theme (commonly called sidebars)." +msgstr "Widgetar är oberoende delar av innehåll som kan placeras i widgetfält som tillhandahålls av ditt tema (allmänt kallade sidopaneler)." + +#: wp-includes/post-template.php:1924 +msgid "JavaScript must be enabled to use this feature." +msgstr "JavaScript måste vara aktiverat för att använda denna funktion." + +#. translators: post revision title: 1: author avatar, 2: author name, 3: time +#. ago, 4: date +#: wp-includes/post-template.php:1853 +msgid "%1$s %2$s, %3$s ago (%4$s)" +msgstr "%1$s %2$s, för %3$s sedan (%4$s)" + +#. translators: %s: revision date +#. translators: %s: revision date with author avatar +#: wp-includes/post-template.php:1806 wp-includes/post-template.php:1863 +msgid "%s [Current Revision]" +msgstr "%s [Nuvarande version]" + +#. translators: %s: revision date +#. translators: %s: revision date with author avatar +#: wp-includes/post-template.php:1804 wp-includes/post-template.php:1861 +msgid "%s [Autosave]" +msgstr "%s [Autosparat]" + +#. translators: revision date format, see https://secure.php.net/date +#: wp-includes/post-template.php:1802 wp-includes/post-template.php:1842 +msgctxt "revision date format" +msgid "F j, Y @ H:i:s" +msgstr "j F Y \\k\\l. H:i:s" + +#: wp-includes/post-template.php:1696 +msgctxt "post password form" +msgid "Enter" +msgstr "Ange" + +#: wp-includes/post-template.php:1695 +msgid "This content is password protected. To view it please enter your password below:" +msgstr "Det här innehållet är lösenordsskyddat. Vänligen ange ditt lösenord nedan för att visa innehåll:" + +#: wp-includes/post-template.php:1590 wp-includes/deprecated.php:1848 +msgid "Missing Attachment" +msgstr "Bilaga saknas" + +#: wp-includes/post-template.php:1417 +msgid "Home" +msgstr "Hem" + +#. translators: %s: Post custom field name +#: wp-includes/post-template.php:1095 +msgctxt "Post custom field name" +msgid "%s:" +msgstr "%s:" + +#: wp-includes/post-template.php:927 +msgid "Previous page" +msgstr "Föregående sida" + +#: wp-includes/post-template.php:926 +msgid "Next page" +msgstr "Nästa sida" + +#: wp-includes/post-template.php:919 +msgid "Pages:" +msgstr "Sidor:" + +#: wp-includes/post-template.php:407 +msgid "There is no excerpt because this is a protected post." +msgstr "Det finns inget utdrag eftersom det här är ett skyddat inlägg." + +#: wp-includes/post-template.php:298 +msgid "(more…)" +msgstr "(mer…)" + +#: wp-includes/post-template.php:152 +msgid "Private: %s" +msgstr "Privat: %s" + +#: wp-includes/post-template.php:137 +msgid "Protected: %s" +msgstr "Lösenordsskyddad: %s" + +#: wp-includes/post.php:3843 +msgid "Invalid page template." +msgstr "Ogiltig sidmall." + +#. translators: %s: taxonomy name +#: wp-includes/post.php:3776 +msgid "Invalid taxonomy: %s." +msgstr "Ogiltig taxonomi: %s." + +#: wp-includes/post.php:3745 +msgid "Could not insert post into the database" +msgstr "Kunde inte infoga inlägget i databasen" + +#: wp-includes/post.php:3730 +msgid "Could not update post in the database" +msgstr "Kunde inte uppdatera inlägget i databasen" + +#: wp-includes/post.php:3476 +msgid "Content, title, and excerpt are empty." +msgstr "Innehåll, rubrik och utdrag är tomma." + +#: wp-includes/post.php:3289 +msgid "Passing an integer number of posts is deprecated. Pass an array of arguments instead." +msgstr "Det är föråldrat att skicka ett heltal med antalet poster. Skicka en argument-array istället." + +#: wp-includes/post.php:2630 +msgid "Video (%s)" +msgid_plural "Video (%s)" +msgstr[0] "Videoklipp: (%s)" +msgstr[1] "Videoklipp: (%s)" + +#: wp-includes/post.php:2630 +msgid "Manage Video" +msgstr "Hantera videoklipp" + +#: wp-includes/post.php:2629 +msgid "Audio (%s)" +msgid_plural "Audio (%s)" +msgstr[0] "Ljud (%s)" +msgstr[1] "Ljud (%s)" + +#: wp-includes/post.php:2629 +msgid "Manage Audio" +msgstr "Hantera ljud" + +#: wp-includes/post.php:2628 +msgid "Image (%s)" +msgid_plural "Images (%s)" +msgstr[0] "Bild (%s)" +msgstr[1] "Bilder (%s)" + +#: wp-includes/post.php:2628 +msgid "Manage Images" +msgstr "Hantera bilder" + +#: wp-includes/post.php:2628 +msgid "Images" +msgstr "Bilder" + +#: wp-includes/post.php:1649 +msgid "Page updated." +msgstr "Sidan har uppdaterats." + +#: wp-includes/post.php:1649 +msgid "Post updated." +msgstr "Inlägget har uppdaterats." + +#: wp-includes/post.php:1648 +msgid "Page scheduled." +msgstr "Sidan har schemalagts." + +#: wp-includes/post.php:1648 +msgid "Post scheduled." +msgstr "Inlägget har schemalagts." + +#: wp-includes/post.php:1647 +msgid "Page reverted to draft." +msgstr "Sidan har återställts till utkastet." + +#: wp-includes/post.php:1647 +msgid "Post reverted to draft." +msgstr "Inlägget har återställts till utkastet." + +#: wp-includes/post.php:1646 +msgid "Page published privately." +msgstr "Sidan har publicerats privat." + +#: wp-includes/post.php:1646 +msgid "Post published privately." +msgstr "Inlägget har publicerats privat." + +#: wp-includes/post.php:1645 +msgid "Page published." +msgstr "Sidan har publicerats." + +#: wp-includes/post.php:1645 +msgid "Post published." +msgstr "Inlägget har publicerats." + +#: wp-includes/post.php:1644 +msgid "Pages list" +msgstr "Sidlista" + +#: wp-includes/post.php:1644 +msgid "Posts list" +msgstr "Inläggslista" + +#: wp-includes/post.php:1643 +msgid "Pages list navigation" +msgstr "Navigation för sidlista" + +#: wp-includes/post.php:1643 +msgid "Posts list navigation" +msgstr "Navigation för inläggslista" + +#: wp-includes/post.php:1642 +msgid "Filter pages list" +msgstr "Filtrera sidlista" + +#: wp-includes/post.php:1642 +msgid "Filter posts list" +msgstr "Filtrera inläggslista" + +#: wp-includes/post.php:1641 +msgctxt "page" +msgid "Use as featured image" +msgstr "Använd som utvald bild" + +#: wp-includes/post.php:1641 +msgctxt "post" +msgid "Use as featured image" +msgstr "Använd som utvald bild" + +#: wp-includes/post.php:1640 +msgctxt "page" +msgid "Remove featured image" +msgstr "Ta bort utvald bild" + +#: wp-includes/post.php:1640 +msgctxt "post" +msgid "Remove featured image" +msgstr "Ta bort utvald bild" + +#: wp-includes/post.php:1639 +msgctxt "page" +msgid "Set featured image" +msgstr "Ange utvald bild" + +#: wp-includes/post.php:1639 +msgctxt "post" +msgid "Set featured image" +msgstr "Ange utvald bild" + +#: wp-includes/post.php:1638 +msgctxt "page" +msgid "Featured Image" +msgstr "Utvald bild" + +#: wp-includes/post.php:1638 +msgctxt "post" +msgid "Featured Image" +msgstr "Utvald bild" + +#: wp-includes/post.php:1637 +msgid "Uploaded to this page" +msgstr "Uppladdat till denna sida" + +#: wp-includes/post.php:1637 +msgid "Uploaded to this post" +msgstr "Uppladdat till detta inlägg" + +#: wp-includes/post.php:1636 +msgid "Insert into page" +msgstr "Infoga på sida" + +#: wp-includes/post.php:1636 +msgid "Insert into post" +msgstr "Infoga i innehåll" + +#: wp-includes/post.php:1635 wp-includes/js/dist/edit-post.js:4640 +#: wp-includes/js/dist/edit-post.js:5821 +msgid "Page Attributes" +msgstr "Sidoattribut" + +#: wp-includes/post.php:1635 +msgid "Post Attributes" +msgstr "Inläggsattribut" + +#: wp-includes/post.php:1634 +msgid "Page Archives" +msgstr "Sidarkiv" + +#: wp-includes/post.php:1634 +msgid "Post Archives" +msgstr "Inläggsarkiv" + +#: wp-includes/post.php:1633 +msgid "All Pages" +msgstr "Alla sidor" + +#: wp-includes/post.php:1633 +msgid "All Posts" +msgstr "Alla inlägg" + +#: wp-includes/post.php:1632 +msgid "Parent Page:" +msgstr "Överordnad sida:" + +#: wp-includes/post.php:1631 +msgid "No pages found in Trash." +msgstr "Hittade inga sidor i papperskorgen." + +#: wp-includes/post.php:1631 +msgid "No posts found in Trash." +msgstr "Inga inlägg hittades i papperskorgen." + +#: wp-includes/post.php:1630 +msgid "No pages found." +msgstr "Hittade inga sidor." + +#: wp-includes/post.php:1630 wp-includes/js/dist/block-library.js:18164 +msgid "No posts found." +msgstr "Hittade inga inlägg." + +#: wp-includes/post.php:1629 +msgid "Search Pages" +msgstr "Sök sidor" + +#: wp-includes/post.php:1629 +msgid "Search Posts" +msgstr "Sök inlägg" + +#: wp-includes/post.php:1628 +msgid "View Pages" +msgstr "Visa sidor" + +#: wp-includes/post.php:1628 +msgid "View Posts" +msgstr "Visa inlägg" + +#: wp-includes/post.php:1627 +msgid "View Page" +msgstr "Visa sida" + +#: wp-includes/post.php:1627 +msgid "View Post" +msgstr "Visa inlägg" + +#: wp-includes/post.php:1626 +msgid "New Page" +msgstr "Ny sida" + +#: wp-includes/post.php:1626 +msgid "New Post" +msgstr "Nytt inlägg" + +#: wp-includes/post.php:1625 +msgid "Edit Page" +msgstr "Redigera sida" + +#: wp-includes/post.php:1625 +msgid "Edit Post" +msgstr "Redigera inlägg" + +#: wp-includes/post.php:1624 +msgid "Add New Page" +msgstr "Skapa ny sida" + +#: wp-includes/post.php:1624 +msgid "Add New Post" +msgstr "Skapa nytt inlägg" + +#: wp-includes/post.php:1623 +msgctxt "page" +msgid "Add New" +msgstr "Skapa ny" + +#: wp-includes/post.php:1623 +msgctxt "post" +msgid "Add New" +msgstr "Skapa nytt" + +#: wp-includes/post.php:1622 +msgctxt "post type singular name" +msgid "Page" +msgstr "Sida" + +#: wp-includes/post.php:1622 +msgctxt "post type singular name" +msgid "Post" +msgstr "Inlägg" + +#: wp-includes/post.php:1621 +msgctxt "post type general name" +msgid "Pages" +msgstr "Sidor" + +#: wp-includes/post.php:1621 +msgctxt "post type general name" +msgid "Posts" +msgstr "Inlägg" + +#: wp-includes/post.php:1405 +msgid "Unregistering a built-in post type is not allowed" +msgstr "Att avregistrera en inbyggd posttyp är inte tillåtet" + +#: wp-includes/post.php:1354 wp-includes/post.php:1355 +msgid "Post type names must be between 1 and 20 characters in length." +msgstr "Namn på posttyper måste vara mellan 1 och 20 tecken." + +#: wp-includes/post.php:931 +msgid "Completed" +msgstr "Utfört" + +#: wp-includes/post.php:930 +msgid "Failed" +msgstr "Misslyckades" + +#: wp-includes/post.php:929 +msgid "Confirmed" +msgstr "Bekräftat" + +#: wp-includes/post.php:928 +msgid "Pending" +msgstr "Väntar" + +#: wp-includes/post.php:890 wp-includes/js/dist/editor.js:9569 +msgid "Pending Review" +msgstr "Väntar på granskning" + +#: wp-includes/post.php:889 wp-includes/post.php:910 +msgid "Draft" +msgstr "Utkast" + +#: wp-includes/post.php:428 +msgid "Completed (%s)" +msgid_plural "Completed (%s)" +msgstr[0] "Färdig (%s)" +msgstr[1] "Färdiga (%s)" + +#: wp-includes/post.php:425 +msgctxt "request status" +msgid "Completed" +msgstr "Utfört" + +#: wp-includes/post.php:417 +msgid "Failed (%s)" +msgid_plural "Failed (%s)" +msgstr[0] "Misslyckad (%s)" +msgstr[1] "Misslyckade (%s)" + +#: wp-includes/post.php:414 +msgctxt "request status" +msgid "Failed" +msgstr "Misslyckat" + +#: wp-includes/post.php:406 +msgid "Confirmed (%s)" +msgid_plural "Confirmed (%s)" +msgstr[0] "Bekräftad (%s)" +msgstr[1] "Bekräftade (%s)" + +#: wp-includes/post.php:403 +msgctxt "request status" +msgid "Confirmed" +msgstr "Bekräftat" + +#: wp-includes/post.php:392 +msgctxt "request status" +msgid "Pending" +msgstr "Väntande" + +#: wp-includes/post.php:365 +msgid "Trash (%s)" +msgid_plural "Trash (%s)" +msgstr[0] "Papperskorg (%s)" +msgstr[1] "Papperskorg (%s)" + +#: wp-includes/post.php:362 +msgctxt "post status" +msgid "Trash" +msgstr "Papperskorg" + +#: wp-includes/post.php:355 +msgid "Private (%s)" +msgid_plural "Private (%s)" +msgstr[0] "Privat (%s)" +msgstr[1] "Privat (%s)" + +#: wp-includes/post.php:352 +msgctxt "post status" +msgid "Private" +msgstr "Privat" + +#: wp-includes/post.php:345 wp-includes/post.php:395 +msgid "Pending (%s)" +msgid_plural "Pending (%s)" +msgstr[0] "Inväntar granskning (%s)" +msgstr[1] "Inväntar granskning (%s)" + +#: wp-includes/post.php:342 +msgctxt "post status" +msgid "Pending" +msgstr "Väntande" + +#: wp-includes/post.php:335 +msgid "Draft (%s)" +msgid_plural "Drafts (%s)" +msgstr[0] "Utkast (%s)" +msgstr[1] "Utkast (%s)" + +#: wp-includes/post.php:332 +msgctxt "post status" +msgid "Draft" +msgstr "Utkast" + +#: wp-includes/post.php:325 +msgid "Scheduled (%s)" +msgid_plural "Scheduled (%s)" +msgstr[0] "Tidsinställt (%s)" +msgstr[1] "Tidsinställda (%s)" + +#: wp-includes/post.php:322 +msgctxt "post status" +msgid "Scheduled" +msgstr "Tidsinställt" + +#: wp-includes/post.php:315 +msgid "Published (%s)" +msgid_plural "Published (%s)" +msgstr[0] "Publicerad (%s)" +msgstr[1] "Publicerade (%s)" + +#: wp-includes/post.php:312 +msgctxt "post status" +msgid "Published" +msgstr "Publicerat" + +#: wp-includes/post.php:279 wp-includes/js/dist/editor.js:6631 +msgid "Block updated." +msgstr "Block uppdaterad." + +#: wp-includes/post.php:278 +msgid "Block scheduled." +msgstr "Blocket har schemalagts." + +#: wp-includes/post.php:277 +msgid "Block reverted to draft." +msgstr "Blocket har återställts till utkast." + +#: wp-includes/post.php:276 +msgid "Block published privately." +msgstr "Blocket har publicerats privat." + +#: wp-includes/post.php:275 +msgid "Block published." +msgstr "Blocket har publicerats." + +#: wp-includes/post.php:274 +msgid "Blocks list" +msgstr "Lista över block" + +#: wp-includes/post.php:273 +msgid "Blocks list navigation" +msgstr "Navigering i blocklistan" + +#: wp-includes/post.php:272 +msgid "Filter blocks list" +msgstr "Filtrera blocklistan" + +#: wp-includes/post.php:271 +msgid "No blocks found in Trash." +msgstr "Inga block hittades i papperskorgen." + +#: wp-includes/post.php:270 wp-includes/js/dist/block-editor.js:11203 +#: wp-includes/js/dist/edit-post.js:4155 +msgid "No blocks found." +msgstr "Inga block hittades." + +#: wp-includes/post.php:269 +msgid "Search Blocks" +msgstr "Sök block" + +#: wp-includes/post.php:268 +msgid "All Blocks" +msgstr "Alla block" + +#: wp-includes/post.php:267 +msgid "View Block" +msgstr "Visa block" + +#: wp-includes/post.php:266 +msgid "Edit Block" +msgstr "Redigera block" + +#: wp-includes/post.php:265 +msgid "New Block" +msgstr "Nytt block" + +#: wp-includes/post.php:264 +msgid "Add New Block" +msgstr "Lägg till nytt block" + +#: wp-includes/post.php:263 +msgctxt "Block" +msgid "Add New" +msgstr "Lägg till nytt" + +#: wp-includes/post.php:262 +msgctxt "add new on admin bar" +msgid "Block" +msgstr "Block" + +#: wp-includes/post.php:261 +msgctxt "admin menu" +msgid "Blocks" +msgstr "Block" + +#: wp-includes/post.php:260 +msgctxt "post type singular name" +msgid "Block" +msgstr "Block" + +#: wp-includes/post.php:259 +msgctxt "post type general name" +msgid "Blocks" +msgstr "Block" + +#: wp-includes/post.php:242 +msgid "User Request" +msgstr "Begäran från användare" + +#: wp-includes/post.php:241 +msgid "User Requests" +msgstr "Begäran från användare" + +#: wp-includes/post.php:224 +msgid "oEmbed Response" +msgstr "oEmbed-svar" + +#: wp-includes/post.php:223 +msgid "oEmbed Responses" +msgstr "oEmbed-svar" + +#: wp-includes/post.php:187 +msgid "No changesets found in Trash." +msgstr "Det finns inga anpassningspaket i papperskorgen." + +#: wp-includes/post.php:186 +msgid "No changesets found." +msgstr "Inga anpassningspaket hittades." + +#: wp-includes/post.php:185 +msgid "Search Changesets" +msgstr "Sök anpassningspaket" + +#: wp-includes/post.php:184 +msgid "All Changesets" +msgstr "Alla anpassningspaket" + +#: wp-includes/post.php:183 +msgid "View Changeset" +msgstr "Visa anpassningspaket" + +#: wp-includes/post.php:182 +msgid "Edit Changeset" +msgstr "Redigera anpassningspaket" + +#: wp-includes/post.php:181 +msgid "New Changeset" +msgstr "Nytt anpassningspaket" + +#: wp-includes/post.php:180 +msgid "Add New Changeset" +msgstr "Lägg till ny version" + +#: wp-includes/post.php:179 +msgctxt "Customize Changeset" +msgid "Add New" +msgstr "Lägg till nytt" + +#: wp-includes/post.php:178 +msgctxt "add new on admin bar" +msgid "Changeset" +msgstr "Anpassningspaket" + +#: wp-includes/post.php:177 +msgctxt "admin menu" +msgid "Changesets" +msgstr "Versioner" + +#: wp-includes/post.php:176 +msgctxt "post type singular name" +msgid "Changeset" +msgstr "Anpassningspaket" + +#: wp-includes/post.php:175 +msgctxt "post type general name" +msgid "Changesets" +msgstr "Anpassningspaket" + +#: wp-includes/post.php:143 wp-includes/post.php:144 +msgid "Custom CSS" +msgstr "Anpassad CSS" + +#: wp-includes/post.php:128 +msgid "Navigation Menu Item" +msgstr "Menyval navigation" + +#: wp-includes/post.php:127 +msgid "Navigation Menu Items" +msgstr "Menyval navigation" + +#: wp-includes/post.php:107 +msgid "Revision" +msgstr "Version" + +#: wp-includes/post.php:106 +msgid "Revisions" +msgstr "Versioner" + +#: wp-includes/post.php:77 +msgid "Attachment Attributes" +msgstr "Bilagsattribut" + +#: wp-includes/post.php:76 +msgid "View Attachment Page" +msgstr "Visa sidan för bilaga" + +#: wp-includes/post.php:75 +msgid "Edit Media" +msgstr "Redigera media" + +#: wp-includes/post.php:74 +msgctxt "add new media" +msgid "Add New" +msgstr "Lägg till ny" + +#: wp-includes/post.php:73 +msgctxt "add new from admin bar" +msgid "Media" +msgstr "Media" + +#: wp-includes/post.php:72 +msgctxt "post type general name" +msgid "Media" +msgstr "Media" + +#: wp-includes/post.php:48 +msgctxt "add new from admin bar" +msgid "Page" +msgstr "Sida" + +#: wp-includes/post.php:25 +msgctxt "add new from admin bar" +msgid "Post" +msgstr "Inlägg" + +#: wp-includes/registration.php:7 wp-includes/registration-functions.php:7 +msgid "This file no longer needs to be included." +msgstr "Den här filen behöver inte längre inkluderas." + +#: wp-includes/class-wp-http-streams.php:288 +#: wp-includes/class-wp-http-curl.php:277 +msgid "Failed to write request to temporary file." +msgstr "Misslyckades att skriva förfrågning till temporär fil." + +#. translators: 1: fopen(), 2: file name +#: wp-includes/class-wp-http-streams.php:255 +#: wp-includes/class-wp-http-curl.php:195 +msgid "Could not open handle for %1$s to %2$s." +msgstr "Lyckades inte öppna något ”handle” för %1$s till %2$s." + +#: wp-includes/class-wp-http-streams.php:162 +#: wp-includes/class-wp-http-streams.php:171 +msgid "The SSL certificate for the host could not be verified." +msgstr "SSL-certifikatet för denna värd kunde inte verifieras." + +#: wp-includes/class-wp-metadata-lazyloader.php:77 +#: wp-includes/class-wp-metadata-lazyloader.php:117 +msgid "Invalid object type" +msgstr "Ogiltig objekttyp" + +#: wp-includes/ms-default-constants.php:149 +msgid "Conflicting values for the constants VHOST and SUBDOMAIN_INSTALL. The value of SUBDOMAIN_INSTALL will be assumed to be your subdomain configuration setting." +msgstr "En konflikt mellan värdena för konstanterna VHOST och SUBDOMAIN_INSTALL har påträffats. Värdet för SUBDOMAIN_INSTALL kommer att antas vara din konfigurationsinställning för subdomän." + +#. translators: 1: VHOST, 2: SUBDOMAIN_INSTALL, 3: wp-config.php, 4: +#. is_subdomain_install() +#: wp-includes/ms-default-constants.php:142 +msgid "The constant %1$s is deprecated. Use the boolean constant %2$s in %3$s to enable a subdomain configuration. Use %4$s to check whether a subdomain configuration is enabled." +msgstr "Konstanten %1$s har fasats ut. Använd boolean-konstanten %2$s i %3$s för att aktivera en subdomänkonfiguration. Använd %4$s för att kontrollera om en subdomänkonfiguration är aktiv." + +#: wp-includes/class-wp-user.php:734 +msgid "Usage of user levels is deprecated. Use capabilities instead." +msgstr "Stödet för användarnivåer har upphört. Använd behörigheter istället." + +#. translators: %s: WP_User->ID +#: wp-includes/class-wp-user.php:270 wp-includes/class-wp-user.php:303 +#: wp-includes/class-wp-user.php:344 wp-includes/class-wp-user.php:369 +msgid "Use %s instead." +msgstr "Använd %s istället." + +#: wp-includes/load.php:1448 +msgid "Scrape nonce check failed. Please try again." +msgstr "Kontroll av engångskod för genomsökning misslyckades. Försök igen." + +#: wp-includes/load.php:605 +msgid "The site you have requested is not installed properly. Please contact the system administrator." +msgstr "webbplatsen du har efterfrågat är inte installerad korrekt. Var vänlig kontakta systemadministratören." + +#: wp-includes/load.php:493 +msgid "ERROR: %1$s in %2$s can only contain numbers, letters, and underscores." +msgstr "FEL: %1$s i %2$s kan endast bestå av siffror, bokstäver, and understreck." + +#: wp-includes/load.php:231 +msgid "Maintenance" +msgstr "Underhåll" + +#: wp-includes/load.php:230 +msgid "Briefly unavailable for scheduled maintenance. Check back in a minute." +msgstr "Webbplatsen är tillfälligt otillgänglig på grund av ett planerat underhållsarbete. Välkommen tillbaka om någon minut." + +#: wp-includes/load.php:152 +msgid "Insufficient Requirements" +msgstr "Minimumkraven uppfylls inte" + +#: wp-includes/load.php:151 +msgid "Your PHP installation appears to be missing the MySQL extension which is required by WordPress." +msgstr "Din PHP installation verkar sakna MySQL tillägget som WordPress kräver." + +#. translators: 1: Current PHP version number, 2: WordPress version number, 3: +#. Minimum required PHP version number +#: wp-includes/load.php:139 +msgid "Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s." +msgstr "Din server kör PHP version %1$s men WordPress %2$s kräver minst %3$s." + +#: wp-includes/media-template.php:1339 +#: wp-includes/customize/class-wp-customize-site-icon-control.php:69 +msgid "Preview as an app icon" +msgstr "Förhandsgranska som en app-ikon" + +#: wp-includes/media-template.php:1337 +msgid "As an app icon" +msgstr "Som en app-ikon" + +#: wp-includes/media-template.php:1332 +#: wp-includes/customize/class-wp-customize-site-icon-control.php:65 +msgid "Preview as a browser icon" +msgstr "Förhandsgranska som en webbläsarikon" + +#: wp-includes/media-template.php:1327 +msgid "As a browser icon" +msgstr "Som en webbläsarikon" + +#: wp-includes/media-template.php:1326 +#: wp-includes/class-wp-customize-manager.php:4227 +#: wp-includes/class-wp-editor.php:1143 +#: wp-includes/js/dist/block-editor.js:10633 +#: wp-includes/js/dist/edit-post.js:5667 +#: wp-includes/js/dist/block-library.js:11517 +#: wp-includes/js/dist/block-library.js:17120 +msgid "Preview" +msgstr "Förhandsgranska" + +#: wp-includes/media-template.php:1321 +msgid "Image crop area preview. Requires mouse interaction." +msgstr "Förhandsgranskningsområde för bildbeskärning. Kräver användning av pekdon." + +#: wp-includes/media-template.php:1315 wp-includes/media.php:3665 +msgid "No items found." +msgstr "Inga objekt hittades." + +#: wp-includes/media-template.php:1282 +msgid "There are no associated subtitles." +msgstr "Det finns inga associerade undertexter." + +#: wp-includes/media-template.php:1278 +msgctxt "media" +msgid "Remove video track" +msgstr "Ta bort videospår" + +#: wp-includes/media-template.php:1247 +msgid "Remove poster image" +msgstr "Ta bort posterbild" + +#: wp-includes/media-template.php:1245 +#: wp-includes/js/dist/block-library.js:15730 +msgid "Poster Image" +msgstr "Förhandsvisningsbild" + +#: wp-includes/media-template.php:1212 wp-includes/media-template.php:1226 +msgid "Remove video source" +msgstr "Ta bort videokälla" + +#: wp-includes/media-template.php:1170 wp-includes/media-template.php:1261 +#: wp-includes/js/dist/block-library.js:14450 +#: wp-includes/js/dist/block-library.js:15695 +msgid "Autoplay" +msgstr "Spela upp automatiskt" + +#: wp-includes/media-template.php:1163 wp-includes/media-template.php:1254 +#: wp-includes/js/dist/block-library.js:14471 +#: wp-includes/js/dist/block-library.js:15723 +msgid "Metadata" +msgstr "Metadata" + +#: wp-includes/media-template.php:1162 wp-includes/media-template.php:1253 +msgctxt "auto preload" +msgid "Auto" +msgstr "Auto" + +#: wp-includes/media-template.php:1150 wp-includes/media-template.php:1234 +msgid "Add alternate sources for maximum HTML5 playback:" +msgstr "Lägg till alternativ källa för maximal HTML5-uppspelning:" + +#: wp-includes/media-template.php:1128 wp-includes/media-template.php:1143 +msgid "Remove audio source" +msgstr "Ta bort ljudkälla" + +#: wp-includes/media-template.php:1071 +msgid "Advanced Options" +msgstr "Avancerade alternativ" + +#: wp-includes/media-template.php:1036 wp-includes/js/dist/components.js:32632 +msgid "Custom Size" +msgstr "Anpassad storlek" + +#: wp-includes/media-template.php:985 +msgid "Display Settings" +msgstr "Visningsinställningar" + +#: wp-includes/media-template.php:963 wp-includes/media.php:3641 +msgid "Replace" +msgstr "Ersätt" + +#: wp-includes/media-template.php:962 +msgid "Edit Original" +msgstr "Redigera original" + +#: wp-includes/media-template.php:940 wp-includes/media-template.php:1058 +msgid "Image URL" +msgstr "Bild-URL" + +#: wp-includes/media-template.php:919 wp-includes/media-template.php:987 +msgid "Align" +msgstr "Justera" + +#: wp-includes/media-template.php:889 wp-includes/class-wp-editor.php:1736 +#: wp-includes/class-wp-customize-nav-menus.php:1193 +msgid "Link Text" +msgstr "Länktext" + +#: wp-includes/media-template.php:883 +msgid "Show Images" +msgstr "Visa bilder" + +#: wp-includes/media-template.php:875 +msgid "Show Artist Name in Tracklist" +msgstr "Visa artistnamn i spellistan" + +#: wp-includes/media-template.php:866 +msgid "Show Tracklist" +msgstr "Visa spår" + +#: wp-includes/media-template.php:864 +msgid "Show Video List" +msgstr "Visa videolista" + +#: wp-includes/media-template.php:854 +msgid "Playlist Settings" +msgstr "Inställningar för spellista" + +#: wp-includes/media-template.php:819 +msgid "Random Order" +msgstr "Slumpvis ordning" + +#: wp-includes/media-template.php:805 wp-includes/js/dist/block-library.js:6986 +#: wp-includes/js/dist/block-library.js:7070 +#: wp-includes/js/dist/block-library.js:8665 +#: wp-includes/js/dist/block-library.js:13277 +#: wp-includes/js/dist/block-library.js:18147 +#: wp-includes/js/dist/block-library.js:19853 +msgid "Columns" +msgstr "Kolumner" + +#: wp-includes/media-template.php:780 +#: wp-includes/js/dist/block-library.js:13275 +msgid "Gallery Settings" +msgstr "Inställningar för galleri" + +#: wp-includes/media-template.php:760 wp-includes/media-template.php:839 +#: wp-includes/media-template.php:1021 wp-includes/media.php:3307 +#: wp-includes/js/dist/block-editor.js:4078 +msgid "Full Size" +msgstr "Full storlek" + +#: wp-includes/media-template.php:759 wp-includes/media-template.php:838 +#: wp-includes/media-template.php:1020 wp-includes/media.php:3306 +#: wp-includes/js/dist/block-editor.js:4075 +msgid "Large" +msgstr "Stor" + +#: wp-includes/media-template.php:758 wp-includes/media-template.php:837 +#: wp-includes/media-template.php:1019 wp-includes/media.php:3305 +#: wp-includes/js/dist/block-editor.js:4072 +msgid "Medium" +msgstr "Medium" + +#: wp-includes/media-template.php:757 wp-includes/media-template.php:836 +#: wp-includes/media-template.php:1018 wp-includes/media.php:3304 +#: wp-includes/js/dist/block-editor.js:4069 +msgid "Thumbnail" +msgstr "Miniatyr" + +#: wp-includes/media-template.php:736 wp-includes/media-template.php:943 +#: wp-includes/media-template.php:1062 +#: wp-includes/js/dist/block-library.js:10197 +msgid "Custom URL" +msgstr "Anpassad URL" + +#: wp-includes/media-template.php:731 wp-includes/media-template.php:793 +#: wp-includes/media-template.php:1054 +#: wp-includes/js/dist/block-library.js:10194 +#: wp-includes/js/dist/block-library.js:11729 +#: wp-includes/js/dist/block-library.js:13034 +msgid "Attachment Page" +msgstr "Sida för bilaga" + +#: wp-includes/media-template.php:729 +msgid "Link to Attachment Page" +msgstr "Länka till bilagssida" + +#: wp-includes/media-template.php:724 wp-includes/media-template.php:796 +#: wp-includes/media-template.php:1051 +#: wp-includes/js/dist/block-library.js:10191 +#: wp-includes/js/dist/block-library.js:11726 +#: wp-includes/js/dist/block-library.js:13037 +msgid "Media File" +msgstr "Mediafil" + +#: wp-includes/media-template.php:722 +msgid "Link to Media File" +msgstr "Länka till mediafil" + +#: wp-includes/media-template.php:712 +msgid "Embed Media Player" +msgstr "Bädda in mediaspelare" + +#: wp-includes/media-template.php:699 +msgid "Embed or Link" +msgstr "Bädda in eller länka" + +#: wp-includes/media-template.php:687 wp-includes/media-template.php:928 +#: wp-includes/media-template.php:996 +#: wp-includes/customize/class-wp-customize-background-position-control.php:65 +#: wp-includes/class-wp-editor.php:1229 +msgid "Right" +msgstr "Höger" + +#: wp-includes/media-template.php:684 wp-includes/media-template.php:925 +#: wp-includes/media-template.php:993 +#: wp-includes/customize/class-wp-customize-background-position-control.php:61 +#: wp-includes/class-wp-editor.php:1228 +msgid "Center" +msgstr "Centrerat" + +#: wp-includes/media-template.php:681 wp-includes/media-template.php:922 +#: wp-includes/media-template.php:990 +#: wp-includes/customize/class-wp-customize-background-position-control.php:57 +#: wp-includes/class-wp-editor.php:1227 +msgid "Left" +msgstr "Vänster" + +#: wp-includes/media-template.php:673 wp-includes/class-wp-editor.php:1225 +msgid "Alignment" +msgstr "Justering" + +#: wp-includes/media-template.php:669 +msgid "Attachment Display Settings" +msgstr "Inställningar för bilagsvisning" + +#: wp-includes/media-template.php:659 +msgid "Edit Selection" +msgstr "Redigera val" + +#: wp-includes/media-template.php:617 +msgid "Alt Text" +msgstr "Alt text" + +#: wp-includes/media-template.php:551 wp-includes/media.php:3686 +msgid "Attachment Details" +msgstr "Detaljer för bilaga" + +#: wp-includes/media-template.php:543 +msgid "Describe this media file…" +msgstr "Beskriv denna mediafil …" + +#: wp-includes/media-template.php:541 +msgid "Describe this audio file…" +msgstr "Beskriv denna ljudfil…" + +#: wp-includes/media-template.php:539 +msgid "Describe this video…" +msgstr "Beskriv denna video…" + +#: wp-includes/media-template.php:535 +msgid "Caption this image…" +msgstr "Ge bilden en bildtext…" + +#: wp-includes/media-template.php:528 +msgid "Deselect" +msgstr "Avmarkera" + +#: wp-includes/media-template.php:524 +#: wp-includes/class-wp-customize-widgets.php:779 wp-includes/media.php:3642 +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:145 +#: wp-includes/customize/class-wp-customize-media-control.php:222 +#: wp-includes/customize/class-wp-customize-media-control.php:232 +#: wp-includes/customize/class-wp-customize-media-control.php:243 +#: wp-includes/customize/class-wp-customize-media-control.php:253 +#: wp-includes/class-wp-customize-manager.php:5108 +#: wp-includes/class-wp-editor.php:1281 wp-includes/js/dist/edit-post.js:1320 +msgid "Remove" +msgstr "Ta bort" + +#: wp-includes/media-template.php:491 wp-includes/media-template.php:602 +#: wp-includes/media.php:3677 +msgid "Delete Permanently" +msgstr "Radera permanent" + +#: wp-includes/media-template.php:488 wp-includes/media-template.php:599 +#: wp-includes/media.php:3675 +msgid "Move to Trash" +msgstr "Lägg i papperskorgen" + +#: wp-includes/media-template.php:486 wp-includes/media-template.php:597 +#: wp-includes/media.php:3676 +msgid "Restore from Trash" +msgstr "Återställ från papperskorgen" + +#: wp-includes/media-template.php:481 +msgid "Edit more details" +msgstr "Redigera fler detaljer" + +#: wp-includes/media-template.php:479 +msgid "View attachment page" +msgstr "Visa bilagssida" + +#: wp-includes/media-template.php:472 wp-includes/media-template.php:650 +#: wp-includes/js/dist/editor.js:10866 +msgid "Copy Link" +msgstr "Kopiera länk" + +#: wp-includes/media-template.php:463 +msgid "Uploaded To" +msgstr "Uppladdad till" + +#: wp-includes/media-template.php:458 +msgid "Uploaded By" +msgstr "Uppladdat av" + +#: wp-includes/media-template.php:454 wp-includes/media-template.php:646 +#: wp-includes/customize/class-wp-customize-nav-menu-item-control.php:129 +#: wp-includes/class-wp-editor.php:1106 +msgid "Description" +msgstr "Beskrivning" + +#: wp-includes/media-template.php:440 wp-includes/media-template.php:632 +#: wp-includes/media.php:2273 +msgid "Album" +msgstr "Album" + +#: wp-includes/media-template.php:439 wp-includes/media-template.php:631 +#: wp-includes/media.php:2272 +msgid "Artist" +msgstr "Artist" + +#: wp-includes/media-template.php:432 wp-includes/media-template.php:624 +#: wp-includes/revision.php:34 wp-includes/class-wp-editor.php:1103 +#: wp-includes/js/dist/editor.js:7465 +msgid "Title" +msgstr "Rubrik" + +#: wp-includes/media-template.php:407 +msgid "Bitrate:" +msgstr "Bithastighet:" + +#: wp-includes/media-template.php:399 wp-includes/media-template.php:588 +msgid "Length:" +msgstr "Längd" + +#. translators: 1: a number of pixels wide, 2: a number of pixels tall. +#: wp-includes/media-template.php:392 wp-includes/media-template.php:577 +msgid "%1$s by %2$s pixels" +msgstr "%1$s gånger %2$s pixlar" + +#: wp-includes/media-template.php:389 +msgid "Dimensions:" +msgstr "Dimensioner:" + +#: wp-includes/media-template.php:386 +msgid "File size:" +msgstr "Filstorlek:" + +#: wp-includes/media-template.php:384 +msgid "Uploaded on:" +msgstr "Uppladdat:" + +#: wp-includes/media-template.php:383 +msgid "File type:" +msgstr "Filtyp:" + +#: wp-includes/media-template.php:382 +msgid "File name:" +msgstr "Filnamn:" + +#: wp-includes/media-template.php:379 wp-includes/media-template.php:554 +msgid "Saved." +msgstr "Sparat." + +#: wp-includes/media-template.php:371 +msgid "Document Preview" +msgstr "Förhandsvisning av dokument" + +#: wp-includes/media-template.php:369 wp-includes/media-template.php:583 +#: wp-includes/media.php:3709 +msgid "Edit Image" +msgstr "Redigera bild" + +#: wp-includes/media-template.php:323 +msgid "Edit next media item" +msgstr "Redigera nästa mediafil" + +#: wp-includes/media-template.php:322 +msgid "Edit previous media item" +msgstr "Redigera föregående mediafil" + +#: wp-includes/media-template.php:302 +msgid "Dismiss Errors" +msgstr "Ignorera fel" + +#: wp-includes/media-template.php:301 +msgid "Uploading" +msgstr "Laddar upp" + +#: wp-includes/media-template.php:296 +#: wp-includes/js/dist/block-library.js:18180 +#: wp-includes/js/dist/block-library.js:19806 +msgid "Grid View" +msgstr "Rutnätsvy" + +#: wp-includes/media-template.php:293 +#: wp-includes/js/dist/block-library.js:18171 +#: wp-includes/js/dist/block-library.js:19797 +msgid "List View" +msgstr "Listvy" + +#. translators: 1: suggested width number, 2: suggested height number. +#: wp-includes/media-template.php:277 wp-includes/media.php:3719 +msgid "Suggested image dimensions: %1$s by %2$s pixels." +msgstr "Föreslagen bildstorlek: %1$s gånger %2$s pixlar." + +#: wp-includes/media-template.php:269 +msgid "Maximum upload file size: %s." +msgstr "Maximal filstorlek för uppladdning: %s." + +#: wp-includes/media-template.php:240 +msgid "Select Files" +msgstr "Välj filer" + +#: wp-includes/media-template.php:239 +msgctxt "Uploader: Drop files here - or - Select Files" +msgid "or" +msgstr "eller" + +#: wp-includes/media-template.php:238 +msgid "Drop files anywhere to upload" +msgstr "Släpp filer varsomhelst för att ladda upp" + +#: wp-includes/media-template.php:230 +msgid "Upload Limit Exceeded" +msgstr "Uppladdningsgräns överskriden" + +#: wp-includes/media-template.php:228 +msgid "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." +msgstr "Webbläsaren på din enhet kan inte användas för att ladda upp filer. Du kanske kan använda avsedd app för din enhet istället." + +#: wp-includes/media-template.php:221 +msgid "Close uploader" +msgstr "Stäng uppladdaren" + +#: wp-includes/media-template.php:208 wp-includes/media-template.php:214 +#: wp-includes/js/dist/components.js:31536 +msgid "Drop files to upload" +msgstr "Släpp filer för att ladda upp" + +#. translators: 1: link to tutorial, 2: additional link attributes, 3: +#. accessibility text +#: wp-includes/media-template.php:167 +msgid "Describe the purpose of the image%3$s. Leave empty if the image is purely decorative." +msgstr "Beskriv bildens syfte%3$s. Lämna tomt om bilden enbart har dekorativ funktion." + +#: wp-includes/embed.php:1156 +msgid "Close sharing dialog" +msgstr "Stäng delningsdialog" + +#: wp-includes/embed.php:1151 +msgid "Copy and paste this code into your site to embed" +msgstr "Kopiera och klistra in denna kod på din webbplats för att bädda in" + +#: wp-includes/embed.php:1144 +msgid "Copy and paste this URL into your WordPress site to embed" +msgstr "Kopiera och klistra in denna adress på din WordPress-webbplats för att bädda in" + +#: wp-includes/embed.php:1137 +msgid "HTML Embed" +msgstr "HTML-inbäddning" + +#: wp-includes/embed.php:1134 +msgid "WordPress Embed" +msgstr "WordPress-inbäddning" + +#: wp-includes/embed.php:1129 +msgid "Sharing options" +msgstr "Delningsalternativ" + +#: wp-includes/embed.php:1112 +msgid "Open sharing dialog" +msgstr "Öppna delningsdialog" + +#: wp-includes/embed.php:1088 +msgid "%s Comment" +msgid_plural "%s Comments" +msgstr[0] "%s kommentar" +msgstr[1] "%s kommentarer" + +#. translators: %s: Name of current post +#: wp-includes/embed.php:933 wp-includes/post-template.php:290 +msgid "Continue reading %s" +msgstr "Fortsätt läsa %s" + +#. translators: 1: post title, 2: site name +#: wp-includes/embed.php:472 +msgid "“%1$s” — %2$s" +msgstr "”%1$s” — %2$s" + +#: wp-includes/class-wp-widget.php:143 +msgid "There are no options for this widget." +msgstr "Det finns inga inställningar för denna widget." + +#: wp-includes/class-wp-recovery-mode-cookie-service.php:103 +msgid "Invalid cookie." +msgstr "Ogiltig cookie." + +#: wp-includes/class-wp-recovery-mode-cookie-service.php:96 +msgid "Cookie expired." +msgstr "Cookien gäller inte längre." + +#: wp-includes/class-wp-recovery-mode-cookie-service.php:83 +#: wp-includes/class-wp-recovery-mode-cookie-service.php:152 +msgid "Invalid cookie format." +msgstr "Ogiltigt cookie-format." + +#: wp-includes/class-wp-recovery-mode-cookie-service.php:68 +#: wp-includes/class-wp-recovery-mode-cookie-service.php:123 +msgid "No cookie present." +msgstr "Det finns ingen cookie." + +#: wp-includes/class-wp-customize-section.php:357 +#: wp-includes/class-wp-customize-panel.php:366 +#: wp-includes/customize/class-wp-customize-themes-panel.php:80 +#: wp-includes/customize/class-wp-customize-nav-menus-panel.php:82 +msgid "Help" +msgstr "Hjälp" + +#: wp-includes/class-wp-customize-section.php:348 +#: wp-includes/class-wp-customize-widgets.php:823 wp-includes/media.php:3643 +#: wp-includes/class-wp-customize-panel.php:357 +#: wp-includes/customize/class-wp-customize-themes-panel.php:70 +#: wp-includes/customize/class-wp-customize-nav-menus-panel.php:72 +#: wp-includes/class-wp-customize-nav-menus.php:1076 +#: wp-includes/js/dist/edit-post.js:3163 +msgid "Back" +msgstr "Tillbaka" + +#: wp-includes/class-wp-customize-section.php:342 +msgid "Press return or enter to open this section" +msgstr "Tryck enter för att öppna denna sektion" + +#: wp-includes/class-wp-customize-section.php:230 +msgid "Customizing" +msgstr "Anpassar" + +#. translators: ▸ is the unicode right-pointing triangle, and %s is the +#. section title in the Customizer +#: wp-includes/class-wp-customize-section.php:228 +#: wp-includes/class-wp-customize-widgets.php:829 +#: wp-includes/class-wp-customize-nav-menus.php:464 +#: wp-includes/class-wp-customize-nav-menus.php:1082 +msgid "Customizing ▸ %s" +msgstr "Anpassar ▸ %s" + +#. translators: 1: parameter, 2: minimum number, 3: maximum number +#: wp-includes/rest-api.php:1265 +msgid "%1$s must be between %2$d (inclusive) and %3$d (inclusive)" +msgstr "%1$s måste vara från %2$d t.o.m. %3$d" + +#. translators: 1: parameter, 2: minimum number, 3: maximum number +#: wp-includes/rest-api.php:1260 +msgid "%1$s must be between %2$d (exclusive) and %3$d (inclusive)" +msgstr "%1$s måste vara från %2$d t.o.m. %3$d" + +#. translators: 1: parameter, 2: minimum number, 3: maximum number +#: wp-includes/rest-api.php:1255 +msgid "%1$s must be between %2$d (inclusive) and %3$d (exclusive)" +msgstr "%1$s måste vara från %2$d t.o.m. %3$d" + +#. translators: 1: parameter, 2: minimum number, 3: maximum number +#: wp-includes/rest-api.php:1250 +msgid "%1$s must be between %2$d (exclusive) and %3$d (exclusive)" +msgstr "%1$s måste vara från %2$d t.o.m. %3$d" + +#. translators: 1: parameter, 2: maximum number +#: wp-includes/rest-api.php:1244 +msgid "%1$s must be less than or equal to %2$d" +msgstr "%1$s måste vara mindre än eller lika med %2$d" + +#. translators: 1: parameter, 2: maximum number +#: wp-includes/rest-api.php:1241 +msgid "%1$s must be less than %2$d" +msgstr "%1$s måste vara mindre än %2$d" + +#. translators: 1: parameter, 2: minimum number +#: wp-includes/rest-api.php:1236 +msgid "%1$s must be greater than or equal to %2$d" +msgstr "%1$s måste vara större än eller lika med %2$d" + +#. translators: 1: parameter, 2: minimum number +#: wp-includes/rest-api.php:1233 +msgid "%1$s must be greater than %2$d" +msgstr "%1$s måste vara större än %2$d" + +#. translators: %s: IP address +#: wp-includes/rest-api.php:1223 +msgid "%s is not a valid IP address." +msgstr "%s är inte en giltig IP-adress. " + +#: wp-includes/rest-api.php:1175 +msgid "%1$s is not a valid property of Object." +msgstr "%1$s är inte någon giltig egenskap för objektet." + +#. translators: 1: parameter, 2: type name +#: wp-includes/rest-api.php:1149 wp-includes/rest-api.php:1165 +#: wp-includes/rest-api.php:1189 wp-includes/rest-api.php:1194 +#: wp-includes/rest-api.php:1199 wp-includes/rest-api.php:1204 +msgid "%1$s is not of type %2$s." +msgstr "%1$s är inte av typen %2$s." + +#: wp-includes/rest-api.php:844 +msgid "Cookie nonce is invalid" +msgstr "Nonce för cookien är ogiltig" + +#. translators: 1: function name, 2: WordPress version number, 3: error message +#: wp-includes/rest-api.php:562 +msgid "%1$s (since %2$s; %3$s)" +msgstr "%1$s (sedan %2$s; %3$s)" + +#. translators: 1: function name, 2: WordPress version number +#: wp-includes/rest-api.php:541 wp-includes/rest-api.php:565 +msgid "%1$s (since %2$s; no alternative available)" +msgstr "%1$s (sedan %2$s; inga alternativ tillgängliga)" + +#. translators: 1: function name, 2: WordPress version number, 3: new function +#. name +#: wp-includes/rest-api.php:538 +msgid "%1$s (since %2$s; use %3$s instead)" +msgstr "%1$s (sedan %2$s; använd %3$s istället)" + +#. translators: %s: rest_api_init +#: wp-includes/rest-api.php:52 +msgid "REST API routes must be registered on the %s action." +msgstr "REST-API-adresser måste vara registrerade via åtgärden %s." + +#: wp-includes/rest-api.php:43 +msgid "Route must be specified." +msgstr "Rutt måste specificeras." + +#: wp-includes/rest-api.php:40 +msgid "Routes must be namespaced with plugin or theme name and version." +msgstr "Rutter måste innehålla namnrymd med hjälp av tilläggets eller temats namn samt version." + +#: wp-includes/cron.php:825 +msgid "Once Daily" +msgstr "Dagligen" + +#: wp-includes/cron.php:821 +msgid "Twice Daily" +msgstr "Två gånger dagligen" + +#: wp-includes/cron.php:817 +msgid "Once Hourly" +msgstr "En gång i timmen" + +#: wp-includes/cron.php:404 +msgid "This argument has changed to an array to match the behavior of the other cron functions." +msgstr "Det här argumentet har ändrats till en array för att matcha beteendet hos övriga cron-funktioner." + +#: wp-includes/class-wp-tax-query.php:644 +msgid "Inexistent terms." +msgstr "Obefintliga termer." + +#. translators: 1: script name, 2: wp_enqueue_scripts +#: wp-includes/functions.wp-scripts.php:283 +msgid "Do not deregister the %1$s script in the administration area. To target the front-end theme, use the %2$s hook." +msgstr "Avregistrera inte skriptet %1$s i adminpanelen. För att rikta sig mot temat på sidan, använd hooken %2$s." + +#. translators: 1: \n"; +} +add_action( 'wp_head', 'twentyfifteen_javascript_detection', 0 ); + +/** + * Enqueue scripts and styles. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_scripts() { + // Add custom fonts, used in the main stylesheet. + wp_enqueue_style( 'twentyfifteen-fonts', twentyfifteen_fonts_url(), array(), null ); + + // Add Genericons, used in the main stylesheet. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.2' ); + + // Load our main stylesheet. + wp_enqueue_style( 'twentyfifteen-style', get_stylesheet_uri() ); + + // Theme block stylesheet. + wp_enqueue_style( 'twentyfifteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentyfifteen-style' ), '20181230' ); + + // Load the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentyfifteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfifteen-style' ), '20141010' ); + wp_style_add_data( 'twentyfifteen-ie', 'conditional', 'lt IE 9' ); + + // Load the Internet Explorer 7 specific stylesheet. + wp_enqueue_style( 'twentyfifteen-ie7', get_template_directory_uri() . '/css/ie7.css', array( 'twentyfifteen-style' ), '20141010' ); + wp_style_add_data( 'twentyfifteen-ie7', 'conditional', 'lt IE 8' ); + + wp_enqueue_script( 'twentyfifteen-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20141010', true ); + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + if ( is_singular() && wp_attachment_is_image() ) { + wp_enqueue_script( 'twentyfifteen-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20141010' ); + } + + wp_enqueue_script( 'twentyfifteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20150330', true ); + wp_localize_script( + 'twentyfifteen-script', + 'screenReaderText', + array( + 'expand' => '' . __( 'expand child menu', 'twentyfifteen' ) . '', + 'collapse' => '' . __( 'collapse child menu', 'twentyfifteen' ) . '', + ) + ); +} +add_action( 'wp_enqueue_scripts', 'twentyfifteen_scripts' ); + +/** + * Enqueue styles for the block-based editor. + * + * @since Twenty Fifteen 2.1 + */ +function twentyfifteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyfifteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css', array(), '20181230' ); + // Add custom fonts. + wp_enqueue_style( 'twentyfifteen-fonts', twentyfifteen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentyfifteen_block_editor_styles' ); + + +/** + * Add preconnect for Google Fonts. + * + * @since Twenty Fifteen 1.7 + * + * @param array $urls URLs to print for resource hints. + * @param string $relation_type The relation type the URLs are printed. + * @return array URLs to print for resource hints. + */ +function twentyfifteen_resource_hints( $urls, $relation_type ) { + if ( wp_style_is( 'twentyfifteen-fonts', 'queue' ) && 'preconnect' === $relation_type ) { + if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '>=' ) ) { + $urls[] = array( + 'href' => 'https://fonts.gstatic.com', + 'crossorigin', + ); + } else { + $urls[] = 'https://fonts.gstatic.com'; + } + } + + return $urls; +} +add_filter( 'wp_resource_hints', 'twentyfifteen_resource_hints', 10, 2 ); + +/** + * Add featured image as background image to post navigation elements. + * + * @since Twenty Fifteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentyfifteen_post_nav_background() { + if ( ! is_single() ) { + return; + } + + $previous = ( is_attachment() ) ? get_post( get_post()->post_parent ) : get_adjacent_post( false, '', true ); + $next = get_adjacent_post( false, '', false ); + $css = ''; + + if ( is_attachment() && 'attachment' == $previous->post_type ) { + return; + } + + if ( $previous && has_post_thumbnail( $previous->ID ) ) { + $prevthumb = wp_get_attachment_image_src( get_post_thumbnail_id( $previous->ID ), 'post-thumbnail' ); + $css .= ' + .post-navigation .nav-previous { background-image: url(' . esc_url( $prevthumb[0] ) . '); } + .post-navigation .nav-previous .post-title, .post-navigation .nav-previous a:hover .post-title, .post-navigation .nav-previous .meta-nav { color: #fff; } + .post-navigation .nav-previous a:before { background-color: rgba(0, 0, 0, 0.4); } + '; + } + + if ( $next && has_post_thumbnail( $next->ID ) ) { + $nextthumb = wp_get_attachment_image_src( get_post_thumbnail_id( $next->ID ), 'post-thumbnail' ); + $css .= ' + .post-navigation .nav-next { background-image: url(' . esc_url( $nextthumb[0] ) . '); border-top: 0; } + .post-navigation .nav-next .post-title, .post-navigation .nav-next a:hover .post-title, .post-navigation .nav-next .meta-nav { color: #fff; } + .post-navigation .nav-next a:before { background-color: rgba(0, 0, 0, 0.4); } + '; + } + + wp_add_inline_style( 'twentyfifteen-style', $css ); +} +add_action( 'wp_enqueue_scripts', 'twentyfifteen_post_nav_background' ); + +/** + * Display descriptions in main navigation. + * + * @since Twenty Fifteen 1.0 + * + * @param string $item_output The menu item output. + * @param WP_Post $item Menu item object. + * @param int $depth Depth of the menu. + * @param array $args wp_nav_menu() arguments. + * @return string Menu item with possible description. + */ +function twentyfifteen_nav_description( $item_output, $item, $depth, $args ) { + if ( 'primary' == $args->theme_location && $item->description ) { + $item_output = str_replace( $args->link_after . '', '' . $args->link_after . '', $item_output ); + } + + return $item_output; +} +add_filter( 'walker_nav_menu_start_el', 'twentyfifteen_nav_description', 10, 4 ); + +/** + * Add a `screen-reader-text` class to the search form's submit button. + * + * @since Twenty Fifteen 1.0 + * + * @param string $html Search form HTML. + * @return string Modified search form HTML. + */ +function twentyfifteen_search_form_modify( $html ) { + return str_replace( 'class="search-submit"', 'class="search-submit screen-reader-text"', $html ); +} +add_filter( 'get_search_form', 'twentyfifteen_search_form_modify' ); + +/** + * Modifies tag cloud widget arguments to display all tags in the same font size + * and use list format for better accessibility. + * + * @since Twenty Fifteen 1.9 + * + * @param array $args Arguments for tag cloud widget. + * @return array The filtered arguments for tag cloud widget. + */ +function twentyfifteen_widget_tag_cloud_args( $args ) { + $args['largest'] = 22; + $args['smallest'] = 8; + $args['unit'] = 'pt'; + $args['format'] = 'list'; + + return $args; +} +add_filter( 'widget_tag_cloud_args', 'twentyfifteen_widget_tag_cloud_args' ); + + +/** + * Implement the Custom Header feature. + * + * @since Twenty Fifteen 1.0 + */ +require get_template_directory() . '/inc/custom-header.php'; + +/** + * Custom template tags for this theme. + * + * @since Twenty Fifteen 1.0 + */ +require get_template_directory() . '/inc/template-tags.php'; + +/** + * Customizer additions. + * + * @since Twenty Fifteen 1.0 + */ +require get_template_directory() . '/inc/customizer.php'; diff --git a/wp-content/themes/twentyfifteen/genericons/COPYING.txt b/wp-content/themes/twentyfifteen/genericons/COPYING.txt new file mode 100644 index 000000000..aece214b7 --- /dev/null +++ b/wp-content/themes/twentyfifteen/genericons/COPYING.txt @@ -0,0 +1,9 @@ +Genericons is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +The fonts are distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + +This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file diff --git a/wp-content/themes/twentyfifteen/genericons/Genericons.eot b/wp-content/themes/twentyfifteen/genericons/Genericons.eot new file mode 100644 index 000000000..b5f8647f7 Binary files /dev/null and b/wp-content/themes/twentyfifteen/genericons/Genericons.eot differ diff --git a/wp-content/themes/twentyfifteen/genericons/Genericons.svg b/wp-content/themes/twentyfifteen/genericons/Genericons.svg new file mode 100644 index 000000000..f81311075 --- /dev/null +++ b/wp-content/themes/twentyfifteen/genericons/Genericons.svg @@ -0,0 +1,543 @@ + + + + + +Created by FontForge 20120731 at Fri Oct 3 09:39:07 2014 + By Joen +Created by Joen with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/twentyfifteen/genericons/Genericons.ttf b/wp-content/themes/twentyfifteen/genericons/Genericons.ttf new file mode 100644 index 000000000..1f160ddbc Binary files /dev/null and b/wp-content/themes/twentyfifteen/genericons/Genericons.ttf differ diff --git a/wp-content/themes/twentyfifteen/genericons/Genericons.woff b/wp-content/themes/twentyfifteen/genericons/Genericons.woff new file mode 100644 index 000000000..973e03393 Binary files /dev/null and b/wp-content/themes/twentyfifteen/genericons/Genericons.woff differ diff --git a/wp-content/themes/twentyfifteen/genericons/LICENSE.txt b/wp-content/themes/twentyfifteen/genericons/LICENSE.txt new file mode 100644 index 000000000..d159169d1 --- /dev/null +++ b/wp-content/themes/twentyfifteen/genericons/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/wp-content/themes/twentyfifteen/genericons/README.md b/wp-content/themes/twentyfifteen/genericons/README.md new file mode 100644 index 000000000..faf8f6093 --- /dev/null +++ b/wp-content/themes/twentyfifteen/genericons/README.md @@ -0,0 +1,152 @@ +## Genericons + +Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. + +Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients! + + +### Usage + +To use it, place the `font` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this: + +``` +.my-icon:before { + content: '\f101'; + font: normal 16px/1 'Genericons'; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +``` + +This will output a comment icon before every element with the class "my-icon". The `content: '\f101';` part of this CSS is easily copied from the helper tool at http://genericons.com/, or `example.html` in the `font` directory. + +You can also use the bundled example.css if you'd rather insert the icons using HTML tags. + + +### Notes + +**Photoshop mockups** + +The `Genericons.ttf` file found in the `font` directory can be placed in your system fonts folder and used Photoshop or other graphics apps if you like. + +If you're using Genericons in your Photoshop mockups, please remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system. + +**Pixel grid** + +Genericons has been designed for a 16x16px grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible blurry. + +**Antialiasing** + +If you keep intact the `-webkit-font-smoothing: antialiased;` and `-moz-osx-font-smoothing: grayscale;` CSS properties. That'll make the icons look their best possible, in Firefox and WebKit based browsers. + +**optimizeLegibility** + +Note: On Android browsers with version 4.2, 4.3, and probably later, Genericons will simply not show up if you're using the CSS property "text-rendering" set to "optimizeLegibility. + +**Updates** + +We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended. + + +### Changelog + +**3.2** + +A number of new icons and a couple of quick updates. + +* New: Activity +* New: HTML anchor +* New: Bug +* New: Download +* New: Handset +* New: Microphone +* New: Minus +* New: Plus +* New: Move +* New: Rating stars, empty, half, full +* New: Shuffle +* New: video camera +* New: Spotify +* New: Twitch +* Update: Fixed geometry in Edit icon +* Update: Updated Foursquare icon + +Twitch and Spotify mark the last social icons that will be added to Genericons. +Future social icons will have to happen in a separate font. + +**3.1** + +Genericons is now generated using a commandline tool called FontCustom. This makes it far easier to add new icons to the font, but the switch means the download zip now has a different layout, fonts have different filenames, there's now no .otf font included (but the .ttf should suffice), and the font now has slightly different metrics. I've taken great care to ensure this new version should work as a drop-in replacement, but please be mindful and test carefully if you choose to upgrade. + +* Per feedback, the baked-in 16px width and height has been removed from the helper CSS. It wasn't really necessary (the glyph itself has these dimensions naturally), and it caused some headaches. +* Base64 encoding is now included by default in the helper CSS. This makes it drop-in easy to get Genericons working in Firefox even when using a CDN. +* Title attribute on website tool. +* New: Website. +* New: Ellipsis. +* New: Foursquare. +* New: X-post. +* New: Sitemap. +* New: Hierarchy. +* New: Paintbrush. +* Updated: Show and Hide icons were updated for clarity. + +**3.0.3** + +Bunch of updates mostly. + +* Two new icons, Dropbox and Fullscreen. +* Updates to all icons containing an exclamation mark. +* Updates to Image and Quote. +* Nicer "Share" icon. +* Bigger default Linkedin icon. + +**3.0.2** + +A slew of new stuff and updates. + +* Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket. +* New generic icons: heart, lock and print. +* New editing icons: code, bold, italic, image +* New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag. +* The hyperlink icon has been updated to be clearer, chunkier. +* The "home" icon has been updated for style, size and clarity. +* The email icon has been updated for style and clarity, and to fit with the new subscribe icons. +* The document icon has been updated for style. +* The "pin" icon has been updated for style and clarity. +* The Twitter icon has been scaled down to fit with the other social icons. + +**3.0.1** + +Mostly maintenance. + +* Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon. +* Added inverse Google+ and Path. +* Replaced tabs with spaces in the helper CSS. +* Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway. + +**3.0** + +Mainly maintenance and a few new icons. + +* Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio +* Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big. +* So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu. +* Genericons.com now has a mini release blog. +* The CSS has prettier formatting, props Konstantin Obenland. + +**2.09** + +Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet. + +**2.06** + +Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox. + +**2.05** + +Added a bunch of new icons, including upload to cloud, download to cloud, many more. + +**2.0** + +Initial public release diff --git a/wp-content/themes/twentyfifteen/genericons/genericons.css b/wp-content/themes/twentyfifteen/genericons/genericons.css new file mode 100644 index 000000000..36f02a345 --- /dev/null +++ b/wp-content/themes/twentyfifteen/genericons/genericons.css @@ -0,0 +1,209 @@ +/** + + Genericons + +*/ + + +/* IE8 and below use EOT and allow cross-site embedding. + IE9 uses WOFF which is base64 encoded to allow cross-site embedding. + So unfortunately, IE9 will throw a console error, but it'll still work. + When the font is base64 encoded, cross-site embedding works in Firefox */ + +@font-face { + font-family: 'Genericons'; + src: url('Genericons.eot'); +} + +@font-face { + font-family: 'Genericons'; + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAADgYAA0AAAAAWDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAA3/AAAABoAAAAcbOWpBk9TLzIAAAGUAAAARQAAAGBVb3cYY21hcAAAAngAAACUAAABqq7WqvhjdnQgAAADDAAAAAQAAAAEAEQFEWdhc3AAADf0AAAACAAAAAj//wADZ2x5ZgAABEAAADAqAABJ0A3bTddoZWFkAAABMAAAACkAAAA2B8ZTM2hoZWEAAAFcAAAAGAAAACQQuQgFaG10eAAAAdwAAACZAAABNGKqU2Vsb2NhAAADEAAAAS4AAAEuB9f1Nm1heHAAAAF0AAAAIAAAACAA6AEZbmFtZQAANGwAAAFRAAAChXCWuFJwb3N0AAA1wAAAAjEAAAXmlxz2knjaY2BkYGAA4rplZ/Tj+W2+MnBzMIDAhRBmaWSag4EDQjGBKADj7gZyAAAAeNpjYGRg4GAAgh1gEsRmZEAFLAAWNADXAAEAAACWAOgAEAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNg4WBg/MLAysDAasw6k4GBUQ5CM19nSGMSYmBgYmDjZIADAQSTISDNNYXhwEeGr+IcIO4ODogwI5ISBQZGAOtvCU0AAAB42kVPuxXCQAyTL+GRmmVoKdgA6FNRMoObdAyRnj3o6NkGLOl4+N75I381AUeUTPoNASSyoWVUBMYUYkmt/KOQVdG79IceFtwj8QpN4JxI+vL4LrYUTlL294GNerLNcGfiRMu6gfhOGMbSzTOz30lv9SbvMoe+TRfHFld08b4wQ/Mhk6ocD8rtKzrHrV/49A34cy/9BURAKJ4AAAB42t2NPw8BQRTEZ+/E2Xi7NlHIJsI1hGgodVqdVqfVqZRqH8QXvL25eq0/USh8AL/kzWReJhkAOV43hMKDW0rqmVu4Jh/BpY+tdNDBh2ndoabnnGtuueeR52YQI1AhILhQ1iDoWHLJDXc88NQgxl5ujS2sMjNZyUImMhYvfTFSdC/v3R+oNj4llSXJvgv4e+6zoCcQAEQFEQAAACwALAAsAFoAhADMAPIBAAEcAUYBlAHOAggCsgNMA6QD4AQSBMIFXAWoBgQGdgcIByoHageOB8gIJgkeCn4LOgvIDH4Myg2YDeoOLA5oDtIO9A8QDy4PeA+aD+AQNhCgEN4RFBFSEZwR9hJgEoISpBLuEwwTKBNEE3ITihPOFAYUWBSYFMgU3BT4FT4VTBViFaAVzhY6FmYWlhaoFsIW2hbuFwQXEhcgFzYXlBfEGAIYNhh4GLIY2hj8GSoZhBnAGfAaBhoUGioaQBpOGn4awBr4GyobgBuWG6wb3hwCHCwccByqHOgdFh02HWodmh3MHgQeHh5GHowfpB/OH9wf6B/2IAQgWCCOIOYhdiGuIfAiciKOIrQi6CL2IyojRCN2I5QjviQIJJAkxCToAAB42oV8CWBU1dX/PW+dyT57Mkkms2RmAkkmyazZCEPYE3ZCWALKJkhYI7IorT4XFERwQdEiAtaK1l0roMUln3WtSktBPltrP7CLyx9b21o/hczlf+59MyGA+jF579333n3vbuf+zu+cex5EICMIERbK04hIVBJ6BkhN87OqRL4IP6PIf2x+VhQwSZ4R2WWZXX5WVaCv+Vlg1yMmj8nvMXlGCG5aDvfSy+Vppx8bIb1HCFEEIhCFyBp/bzbJJxbiIAQ8No9s88TkmMcGuPkxbcKjQCTSRwQtpYkESErDFDmLj8pa+t9Zwg8UNyIA5lHxh++1YFluyVwgSO5yocBMwvFowKtYxRr4Kcw7fJjuoZfQPYcPw1vHduw4tkMl567MYzn6Du9gNwgWr4GmaoqGr3WQYjIY6yqz5lk8JNwiREOCN0+wukC0yTESdoHNmif4vCGIxmVNIN9iY/FAHzqwb/3o0ev36YezZ4nw8ye3d0amrRs2fXtnJzamTxM1DcgZrT8TO4jfzk3upb2d26cPWzct0rn9ye2sPgIxDOw/7DuTB7BKbGM/Cd/Vp/UREXsFMAWajHuBAJ5Tvmcb9g+wawprm0CIUcC+1s7gWQp/eI8/h32ZixmtimqSTSGIReNuu6zd1nOW9Nx2ElpOytqG1ytSn2rCvRWvb9hz8iQfA3xKYWPAxhXrY80Dnykcj8G5pAdwTDef2tK9Q8gkKNaajfOWU5uB7OgekCQCqyevSxGJsnG120xYo1g8ZmKDiicOG9bNFHVg/+MddwDTLZCwsVv2MMsWFA9B1qHuzmTP7p5kZ3dvZ/ch+vWhus4GfkElhzZSbd7uwD2NHaBN7OmZSLWOxnsCu+eBtvEEHqi28dChjaAl10wvwjyU5wHMw3qO9KqsbgXEh+0N87pVggk8CQ9rtH7BhyPk87J6xSOK1r1jR7dGk3S/Blv2nKT8HE+TPKFgk9klmoRe7eQeQTt3uqMbMEVEyIybjKW6mASw8sDFxikYj0WDmCzAZIsQiwaCLDcfe03Kjzc1xWe1t0PBjAULZnTVtPonjpbx9hnchIL4rbtujc1q7+7G+zM/p32fz+yq6blx1OWHRmMR2M6oASWPrOMzyyWYbVZBkVQlgELBimlRsOAWIRAMQZ6gBoKKGhLzIQ9wcjgUm9UlOxQ1TwhBMCQFB+N1u8MlOVxKwmq32qxKMFAewNqaWwRxDdgh68RLN7YteYHSe30+CLpiMxeMH1tbskQxGvMtUl64eUHiqptvvioxf2goK6sg32CUlpTUjpkwf2YsmmsPjR46yikYS73xUimnyGhyisZSpzcXFIc7MWp+M/h899DUC0vabnzphIGwPf16y8P0rTOvhFV3ofSrKcPnOhVLeXjC/E1T916RXzHm0joQZXOd3wvg9deZFEGomNSQKMlevWfK5vkTwn6zEurKypMLYtVSrq+4UFCznWZQCl31Hil3kGtwXpapfGJdVqFbibx8Bhoe3sIbh53IgIoQ3qcGYiKliC1hkiSTCPGHE4KoENXuj5sT5bILzIgrZkecJALBHGDd6xIccckhAMtUnhAsXsVnt7RIiUAVuCWCsEcQ9wgDPonsP+R56k90U/cH4phd7xbSU/RYXmPX6fuvXPZjePyTgiT9G+2Rl4w+8L/N9tKg8iiMu9p5pvFV+s+aV+GrW7Y+4dbci36t7B2/Zcmga+hBehXsgg1g+dnP6Bd0I12I2xc/+xlYtElQBTe20SNv9u5dBh29oVDxvfTXwubkw/Q369+D+PharTMMHzRc2u0qjXTkeJRiKIV/T6OHjtvHhMAJ8YJ9dJ/Q6G5pLb/mTu2Cl2OBvFDWXYB4XIV4/BFpwBNFtSPgSpLP7bdHwjjlUbwwgYchKF8MrxJ2yYES2iJEwnZHPJEHalzV2pcL1bO0p39L6TZ6mJ6tqpr24B1D173k87vraq99ZMKM9hnhW+CWj7MaF2xqn7Al8uNl1o6GFUrtqgnFtiXH3jt0/+phD8mBUXXitpVqbtE7N8qVYvinlyzofPSd7EGVbZsWNA5JFCWTS7y5en0J6g9VI8F+dPAhSls8Q1BHRByJgA8VSCnCIirN8wCC/g3ycujfKlv3yeOXXHLnjCpKU1XshoqIcIYgdL4JUm9OcwL+lRW/dM2IU7Qv1bCjW8Y7HNuxXPkTLNfN8EFkioGVEW2RsCfKQPTyckVpN4zNp2/Q3j/9yVE95pJr2hLdTqc6Z2FF1GmUvqFH+g6KY6EGhOjc6WPipYoo0r+Z/NVeUTASRJ9M2yyIzB6ykKzg2GA3s0HxeXFGF5jjgJILCoRRdrPBbgFLPNEixqIMCAwIHZGwI1Du80qKGo6E40MhbldURQWLiDgSd9jPXfPjUKti3ByLim2wDMZ9uW3Y6n2vfXr1Afrcl9u2fUn/ePo9eu0oMXDL9ZLwzb9W/Rl8kwSpIM+iOgqt4JDNcp6kChMawbiCfnbfLfTs4THFRf5lPq/NkmetqgX/09d0WPOt1o0TA0t9PrxoqxR88pCvD/5B1fDtzx24+tPX9q0etu1LGMdLT+WdohsWSqX399WEZEV4ODXMI+3t2w05Sk5d3ahIYWhmzCv4De7skvxCW3ZDJyxc1fXgClkQocwrykLfPYIJZqiC1w1ZmYtqReXNO1MN3bD6w8NM1lHXk2t5/+YjykfIUhxJnOhe1cRknGEqWLAbAy3gcIkOuwKsh1CIgngB0VUBNuRIrJhocbFDnA4JQW9IxX5PcNCOJDxehZ1GPCibQrN5rOXgPde86/S4nWWeH79ty6u/enJzz/Qh2TYNclRIPTftpqLGD7Qp4yyjfPFSj1XsRQJ2ls9KprZk2RLtaoNgTqDAnW821LT/YubUvTenHrj2r5N0yRQaYSr89VqxpcHTXA5TpN/uXvLUPFFIdt8+aW9vKubxCPZFk6ZdLkBhbm1hRWkwKBcASRfRh8+X2Mcuumx2fWlWaUGJtdBmjI5uuvX5Vc/Xbps/dRibG1w3IrAqLyE/MpM6nR0FmeplooaqCCkIXoqyaQcqEgSPOeixtSh4T7AJc+gBaHtImHzZ4qmJjiqo6pQL6MHJnZWjB+dm04OSBGOzbW5PTaS1fMrmxQ1AxP+5ef7YtnnV4+tqx4fO7BTMS9b5I+7ieOq/xevnbDWV+IqLLdmJpU+s5GOppcfSgnOyeQAapKc940oWpAwh8CGpsdrxAq+moMY89gKbirVOcByzmXSEYCCAlMBBv71hxGSY1Dp8yuRhUtPDm8KT670F9BsAMBiyvA3ekcMykKEPwmkiFvV9Im6c2Ng8fkJT48S+DfDmUweKKoOFqzx09f4DcKjS5hxUemkHnYGd+RgqqsmooyaxGrskfWoHggLO0mAgYQkJvGcZDmN/svlqZlKG9casSMjUPPYXZNlaZKlu7e+f3DY3Wj31qh0HFi54yju2wDvnbrX0p1KefeuiqTMCzXmOqxeueWH+yBve+vGcx25eMTY41ayqolVQffZpaxPl45bd84s/G0hi/qa9++ds+PiVXcub5yTpR/UbtscfuVp42uhZEr310NIpke3/1bDg9ueh7sDlz1zXFpq86qZ7J9093+YszJmYVWgy+u56cdX43fdtXT89rOuUjB5ekOE2BUKegM0MxhMWFzDNwhol6o2yO+wIYZCIB4JpzYKiw5gt0v4Ep1xMtjBfGWAnOQLkQl6T5hx3bWsvGVOydfJVv7l9ctMVu95bvfbI7msmDupebC6RBZMgy3kjRmu9PZc92F0/acclsQ5/Tnada/Tw+KxYgcHYY3HI++mpXQNZDP2cfs3eP3j9AnDG2pceAvHurifuWplMXPKj2+9uu+XoYEOexZDMstpME6+a9+zNk5uX3DZt+zd3x7piNbvWDW6dPuLq9srJFgv1T52/eSI4YO3hfrIikL3CXHWuvBcnVz7n4AXIswvK00fZCjO++oo+8lXqynRC3sv2X6XP8KjrbsK5shdPJBFtBR9qkiAKC9LWBP4sZocZoQ1TeMmsbABrQQ4aZnem7l+2wjt5tvWqjo3XPT3zSF3U2jy2vmeVoWBTcuSNKjHQh2iKDqGDoAxuuwbKOpZdufpeg5X+lj4/kf7z6adn31sKT7A2ZGy5fMSGi+afUVAImjB7+vgeuNWpIAOn/FzAfR9n0gTgA6IpFTiXvbqFg+iKgMtA2YSKCsWGkeCYyRfjjUpIw+HndLqpoLp53KabV8+Zs2zDpZcMb42+0d3eHqo2qRptop/Q6K6qKmf5DPq3uN1eVtbQeN0GYU3Kl0zOmrklowsy+OEg1WTIxfUnbqXA7o4XYI34bHRz/oN1syO4x00ol5WoPkrBam+CcHwghIhl9NWTzJxDM+Hv5s2n6OenNpvp39tjMom1t8e09O58FKHkpP5U30mRjGpEYw3tuKaRKfaItD/zTDufWmcBVFDOkm3kTrKD/ITcTx4gD5FHmGWJTbDVKuzPqtSh/aLUKaqV7RQbAxTsTiUfQPEGobYGAsHaQCygd28gGA3yGRiI4cUodkGsNh6L10VZn8fCCX7Uf0OhNgHxsANq7XW19ojd0f+zsa2W/Vkd1jo7mOSEERx+2ZYAk1/1J4KqEYKyP6aqOOr8n4B/QnqPh1SrqcKUagURUJxFdlWA8/4J0J8Z1bzwMmYXXgYB+t+RfhHgq8D1SWpd6swn4Eq98RDcTT/+RBj92WefQaUgf0I/Fhofkv4lS7RaUAWQ2DOsUIEVmX4Dvh9odXYOHGWvT9dU5PfxAPgQPijBUUkWQAYBT9nGHuMvYPuj2dm0Ot1CUX8jK4NlwydgIn3vlZ0wgz6y85W9f1yRehmir9w3YdeuXZiasfOVB/644nxZtaCee5l8wmQVWWEB2otubua1IClH01FA/eCwSwmcMlw/IKYisA4FhqmYA21CC2eDCiP1iKy10TrGd8rZJf5onIFwCBT9gnAOmJHmBLji4dmYWYBvYzfZOVNKIhquQY7XyJ3wlD2RPhUgXJ7QqRJ7JWK4hGUGA+ZEHK8nFElBuDfbJYkcYCyUkUN6FyOhnI8e3U2PL1++0Gra96P14N4wtn3lu3dNL0+GsEeNIgz72WuLHwTXPLf/cvrh7eLgwZ1brlzbMWvuU9e0Z3d3LKJfLb9ySEuWYefyFf/T1OJoD23cFOu02CIFVbHSqlmBQNRgMBcVVIaLndFqc7FDVirLKmpCY3LRJjTa7CMDgVFWm2w2Fnsr7JVdHq9fFDo3tkam1eTYzJMWra0vHxYxFRvNjg2PdEy/fRrdcAo2LWqavuPt1eNvmOeMj1m9ih58+GH62ei23OkzoPpZk/k++tnba6/7EEI6B9abyShwmg3fY1izcin9/d13nR07Jq/BNmP7u6tGbVoTxrZmCdC+rOnWDZHqa+5OZQ2/qX71YF+Jt/2ap+YKS19pGW9talmy9Efrf+XyTJnT9XF7pNoaHDJ33rTiyjI1O8/hGD1ocIfH4bEIQo7TXNzm97eYkN7WVwpQNrbU5RGg0ufrCFo9TotkLCpzz6wdtjRkyhl5ycpYtKPaYM+rGVKe2NA88apYfs7yB/tu/ubdm25cc+S+pVb38q2T76FPrt+wqtT5P3t2wfKf3Pc7lyTk3PIB/dPuffR3H17fL78G1FQkm3SRK8mtun+SkekYkmlQfZwGodgwz18ZuGR2hjIsMslG6ybBU0osLdcopR6IhlCKOOnkHAJ5khhPcwrGQ60utMviiDIZtqtR+z13FroSbmehu7nK77AUOiyWaZ7yeKk7N7z4jnfWLHx47ZSgoaA0mPBGNtzaNsSSV5yFU1xQwNBomnXP3Nj4sfeDAew5ZeXDWiIWn2XY2urC8mGV3j8f+tmBl5oc4REL6l0tcUu0oCw8tLO2aoakZZi8QKZZSpJDLomEZ7a0Bkrt9praSkt+a4k7UT1kZHD4dT2dYf/QznkxeygSCddY3ZV2VSqyhKqcan52npovIXlJLrlhVMfDyetOz3NFwoMToXJRNucb8wfXTq65du9WcVFTT/TK1bMbLD5HcsWgWZdOG1Hhx7I3Im7E1evIIuxxF07qPDmExqcpz4AzmadcQjyB6tYlYj/HQ4ov6A3kYTZwiWWghiSc/C0i2kLybrVo7MgZI5qceWWVy1auW3X59KTZjGrEYLK6/dHS6IqOkWaLZ8Tw+gKoV6zJoTPGTxlalyWUt0zpmj11mMUiFUSi7aOmjh5TUlwkmpxFRuNJ1dE4qDR7zPCRjzz89E/v3TDbqQ4ScwaHp825YdvB+TM3T01Y5NxcVaH/T1DtDrfL5yrNNgtFrpxcKPRW5pVXi8+m/ibI2ZJsqR6+dOS467vaqrz5BoRYJb+wItJeXT138rjGqpzst43uJSseeuCN2ROuaHILeSVFWYTzr1uxb65EmRxErsPesavc0RxkIiahmmdMVERbmhk5KI7AvICBgT/Mw2xte5qo9N9HosV0rXWATrSmOUz/fVuG3sTVYREYf8P+hVctnzjuig+fR/ptGl7Xtf7uSVvXtY2a//JD21dPraKLmry+IU0dU5Z0utzlbktBNNE1v3Kwp8RRVBP1eYuc9fVTp63atmRZfUMi1jVj4+yWeq+npfXyCdWhQqfDVlJWFff64tHp6w78ZMUqsXXxFQv33zC+MW/Isl0v/GF1x7QrNk66e31XXXtO1dTV2x96ef4c+uuOy2cMaa4IFjsdFqPRnI/vCHnL3e6WkM1eXl4dCtcitXIGB41tm7toRGswUGI1mzyu8NDBVXabxxOrLSxCm659/LiaoaEQtweQ5RGF8dQoYyg4P3XrBvdKJbIuzrlCQiWYuFbiHc88/0hU0IpWNHuwyM629liSsSCaHHbl6FmDtd66FfOSoCKieWaOKjAYYG+sXSLFdeUGT1DfY+7u9oraCkG75IFvNsumak9Jx84p0/b6A+26ifIebFUj6mruLQySWjKUjEG7bDPWMo7V0octikQHxwqwlmmr117OzDOFnfnj3DxR7ajjWJJ7Xqx2CayOOHNFKcSrMJd51GLVfWuAGpvzyIydh/ksCGgOuQXtItYVaPUE/aLdwc5dIL2VP9iV3/nCoc581+D8+tvuoP9oDYWGDQuFWmHE7NbW2a2Cp7JhUHXZ1NSWx8D36KP0o8cepx89+ij4Uh9X1EwrrRrUKFfjQAyt3lcfyrvydfolPU6/fH1NQWll0dqpdVNLDv51tmw226ChcEpd25IlbTUT60R6evyfniqZFo7PjouGfFdlfmdnfqUrvx6UUCsW39qq70OhIWW1gxqCQ1KLu/cvXXagu/vA8QPdwn01JeOGlDcIHaGWUHUy9XSiqzhcd9kLGydO3Pj8ZWjPRob5pq6tDswzwtv27Bx5zKC6JXctqR4faqbX5MytCMVns/nJUFNFqSE+ksDxYA4uZsaLfDlIGIIKRF+K4N3msKmyJ2MzBmOOhH5Tmmz32701ALPvnzNSmx0HtWZEjfzmli1vSfcjLVJn754zZ/dsWHI/XpaOzLb7bSEvLZv1k5mxrh+POHLYU1PjgU82vfTKpqXV1x7p2jVr5s6u39WGjrHrRK8jW5tBuc4n5Rn7gS+Q6f4HtkSGfJetkzkg4UIjIeFQkOln1sbQUPhDoL3bT/9A/+Dvbg/AEtnUMKLBJKt8yeKIvnx2hK1RpPaxDPRD8PMHdkilPl+pRHSf4cvIDVv7168chBhFkzEnYTNCzCHcBj2pL+h2WC5YKKYFCyxP/VPIp9tTX0APvR2u2J36MvXlbrWVvksPQnnqBfDR5+m7EIUx9CP6sLiX/hHGQvTMt/S9xavpq9CyejFvu0DIWWUktt1FRvK2q6KAqpiZRCrkgW6xMWue8Uec32ztKGFGxsiMJZ1VMkuLe2094RaQ35jRaI3OlGXFWlTjOm2QVboub7A721qWX9ZcIZz0yk5LaoWtVP6301pa9pG1WBRcouSy0H8W+3zFMDTbXqCS+fMppS1Wq63CZhYMtKEgV5TVygrZ5qiqKqErf2Evc5v7DIqMclKY58wz7Mq1+rzFwWJPjoXjFFt7YmttA63ZAQtN5HsXltIrSRzrBJRavl7H1pHQmHUg1xEjQi/z7TGLF7OnNE2T0BxGZoQcISNLWLLC2FIO97IZIbPIKuFUSBFKxHe6GaApmEwRtobXzs5JZv2Ky2EZ8ad9xhnrgLmM9ZVVxCY8kywmNB5NYh24QH5x1aoX6Rn6MT3z0sqVL8Fda96/r6vrvvfX7KJf79wJWX+EwV30GZWsfEnPxLKj3YIPvnRmZdfO458f39m1k35N38LsEqGz6H93wST4gy4fWCfC13lNeO5lOGq3iqxXPawzpW6+UqwxL8DJPZLG14fp5yf3MM605yTrk3PtyibFpEr3PSJnjNhwszBnni5W3B5PjxcbKh8rLCKj0jmNmyZgZ7fH+rgFLeI+1etE5h9I4t6paGfYFNK0M5iNZUixvbA/4KSE3YdezHl+XVxkMGnEutSi5a+KjEclLHqJniaoDUfQICqBuh+qqoRlKaFIibrsSV4GYdahw81drd9ZY+lXIBhUrFFxTqgInsEqCW4H2qeHvqvyhOT013VgTEAxykYlaUIdN5zhacQmprdM2pNOR3Az/VBPZ549FyrAasyP39MASvQ87B7faPqY2Qvku5oCMT0ggc+PaTBNvVq9GtvjRoQDB6DB0CJAAtSAN5+vf6qQsIeHIuzCn4SyWamT5U2NQW+OtV745jmhbL+/O7C/0GwufC51Yn8A036hnufy15TmGUORKdKL+1MnnvP79xe1thbuF8owecDf3T83Oc4XkBLsOxVQS7MoiHK3ZEZ2R9BqQQRDDYXYh4aG6d4X0vMH6iFr58q+lesPf3V4PdsBNvgfKzN3cOrseuFeeCd9c/16kvG3p8viLb2gOJIuKg+sdkvMY5NN8I+LykyN6n+nQdDEldR0Ubn023O1MvA+FgfEe5SQCu6L6zfTfrAeotZvZwn/R3UUcm6FI/V/1IvrNwKVBqK8T3KxTqWIbtUstoJBW9AIcayKaATe8UZgnuU4mhpx7kQVOO9C/JThDJUX0q+Q93x1GVXg9GWQA4Mhxw9r6Nbxr3/w2jh6K1wx/vVly16fmCLMbXeSvjqPY6uMT1J50erVi+E0nF68enVfJVwJqydMnTKB3kq34hFe3aM/cFKIcXQ+r84sxsXHZx0Bb5CtJyms7kgrE8xiTUDQ4oBggjUEbYkM3vs5c8QGJXS+KZEiDzynnBQA5vKW3P3zXdsv6Vj2ejus+X3oujPkOo028mbd/b9vp7bwasB73bc9sow3raVn6Mk9yxBy4DlP0Z6Twgm6l7Vp4nbvlAlw5QfwMX8DvMEauDf1Lm/4191LeBNf7Zm7nIMxCAy09DgU7H/mxsP6GQGVUS8kNdpLezVI8h0k5QvONZYnvXbL1wXOf4eB9PWKSa2vt69XE5N8JybVC841lofJqJbWKxbEsxiLHrJVGmJ+fcVNZT3IsAqRSo70O3Mj534y0QFH07GnPQYINEwhOM+mAV/TwUfPofDMCEX7EXTxrzfFTRABj5mN8wYoRd6wgxjZfLXgH8jFoBJafpD6qf8gLRfGPfecdC09kPoMxtHnBAe0geBIfcawRecLGnZtFp/tCLxB5gRHra9pfUQTccIoDDApc7ineqGXJs/xY8YXjNyfYgT8M3kYi0jhT8TfaUzz8KRetmNVJRLvv16lF58zkDzGdIwCm90OHIoaQfWjPGIf9fZpNClqqSfmClNTe7W5ybkajMf0XAVL79OgF1vO7vXN5fdy2a00f8K3syE2ZkKoVOQ5jPYgDCVT/ElWFegdiDc5OLc5g+ZxMJ6oUO4zhVGNOQFPsiBQBT4zM45QzQLR11DazpLDdPdvj8A2mAwlb6w4S2Y/9AX9hO5/ctXeVfgnZ0JRfgvzD4tkxRv0L/QpesWRJ6Edir54aHafxvNx3U5krMdZ9RXsDSeP/3GhPuE2KU7RFmQW/VOzGDwW9d3KvOiVU7891bq42eHwCd9UrrpiVSX9Xz7vfh+lf4sIs0ZpcxK+5LTueun9UWPHjjp9hM8qiLE1ECwvs25iQ2yI6LyGoQLaLglub3IkQ1BD9PUwaLA7WOODakgQOI1SvCwajv66nf7q1ekPbW0EtAoCsS3jWfATbmi+tsOQV6//dCa7Dr6pC77ijZVQlB4/FupoArQm/PEhJ4UytjDz+LGFM9kFKA+X0lree3osG48Rq8xEiOWBl3F6nFZ2Nw8V83n7A8L4XOM0mQeGcQTXWKpn4qRVOG80dmRhYSntaobtVzNsYDFggjaxZ9WkNNl6jTazM4FsZPMC7lCYbOSRQj32EMFTZVgfi5rRhChgxRfYxXKuOWZOokvokkkzd8K+G1988UZ8s0qYNllzFG/APZOOrtkFWSnni2B4kQWqMTyby/BMPsGmEJIJHyQcMucl9IR2Qj4xN0Vgr9aLY4UyaiD9XIoU4WCx8WJHA/mG6BtwRyPTbSmuCgdwBgsZhO8I4qzOY35uhwkHkTWBeUAcHlMZChiP3jCh6MOf/yxon9aM8P/+4ZtPPTZ/vbyp/rJRf05plvfHTFr45Ap2TSnF809DqzaOfIb+o4qetm9+A8Rbd4GdTrj8jUdG4/OW90f98vI1h7eVgoI3aYrZJCK2VdJ4a9i01FhMY7qeDH9YJ7D2cUn0p3OcQfOkD5/rIzyQkCHNVCFpYH2mcjuzjM1yzg/SB3BI6fVLc3q+CPX0P7BdoxZYIz2UTqzqG46CwYbhn7t7enb3yA/QMsq8pHtSJ/Vjyzx2F8WHHuphWc7jJirnswxfeJjewJkp87g8NJXwCO3n5iMicfqqyIPzBk5Gwl7FdUr63RmmnNCZMknjjvmCoz8dWaszZV39yFzxeLgSQrMRybPPxPII+7jyGPgH6cBRFqOaUUM0qZsDfJ/EyrH7OAj8CdAfpPphn06MJU6bmUbS33qGW5QswJcROkbEicps0RJuz+rqMBpvgrQfi/uYuH9ywOKlqh7a2Lq2KvTiFXtOFkqE22U7yjwbD0WqL9twck9LK5+bmgqqnI41tlsZ/w6yiREMRIeylUERablyoL39s7Yj7bSBnoA3oa3ts/ZjbTP2niV75V3tR/EWjKEN4Ga3juFZW2rHXiAMkIHpLpnRKPVc/4t6RWS9Qtyn+Dv57/KTXNcIWHjMAxKBL6hlOkxn4b/05/IT1EItnTBdg+ncD4kT7HeKpj+Dcx7JLZJaiUynP2cRvjB9OrXIT3TSn+OznfAFt+WTCqsHY3RMQQJCRKo3haymV2a6WEBqk+T5GJYkWT6sixGzcS+BkMSfxhQ2JlO9/bERIlaPRbqiBIs8VLmPyyHgDMWq6fdQttkkzdxL8wRZ4+HexCiyymuMlDEJOEMEPaib8/gCdiJrysX2n48EUbJrUOckuCVIMvYe2xIRm2/geWSAPfh950I/mUplUn3ahYn+4PJMdPn3pHjXCNwPwn0ZrM4XrcpnkIXhmKw7ZPhe940wRwnznvXxaxILztHSs13EW2kc4e9n+BW44P0RpnBtvtiAcsQYM4ThXFEae5GWKZCzMuYFzJSJFh4zjM8VvJ+ZuGd1H0LGD85wpljHYqbP5fQRPFZBYQQwBIKIz/AG8UMfDvJNn91xltzx2U0KBw7uCdePqXfupf/5RSn9N+SW/gKyGU0k+rxX0lYcw+c0ADC0GggCLuhHAQmrx8KaAeWGtxYbpwdTK8qhjVUdo0t1UBCwajp2AXPbMD2CB7d74yFHpSuNEeewp7wfe/R6fF/p6ShNkqmDPqznl8zhSIfO7yhT4N9CMF5l5B48E1va8qhcXyMQI0bgpGWR+8z+ZO6I1B9mCQE6S2AjRHHecY8cKvB9/MZ5Pqx8piZKeXAK7nwx/l0AMKjFPGcZy2bDcpWaYrORvZvF1+nzNj3mJj7iTEM0IatNSzOrWyCa4BaLwk2LZEZ0+4gYDof7DjN/FBMlTZfnM1ha4s4EszQFRMs96lx1LqniKyuqX1EtapARxaAlEJSDzH5MBBNyPCEmHIjKCYdod/gdqh3Hmgu3PazObaS/qWm2b3l7qLPl7S22plr6m8ZPDYZPG6Gutsm25e1h1mFv32pvqoU6dplu4vArnLrV3lxzLqf+gtzsJL6huUbP+qn+4lvfwheXcewmF/gYrGjPn/dVCXAnvwpxv5Ux4AQoF35fIoU3n9qyaYNwaEwf4anUyDEXfWySOrzl1OYxqZEbNrGjcGjDRfyh+JxeKc/YFQiobPaz6S7r3CGlHxgLQhgmTGgklB79qj6532E6mM3uc7Ki8yiTzhLZ1Yyql4kO1Yxb93MunpN9laN/mdP/vUcG5/VwKBFvnmbFkwzeD1h/yORFMmRh4ql/Y6OXmOIKov/bFDLg2xQsLf1tigg8eN7wvZhLBmCu7gRPY10adLFzDAiAp/UZi/tvMqDLqypyPGLvV9C6YpjLMdV4XjGe9G9AcUIaXIX+IoFXG6d+pmj+lQ/2v6hliseHsN2s9f3VuFDuLBfKnZRZpIux+N4IMrcL5U5YrKP9Xtqr7b1I4MK8mL52Bi00rcfOK8/x3V9PMc560RdUqYG89YKCzhw+z448r4zId5ehr1zjrHLw5WoGtOxXCpEYj+j6nvLhFX9Hx13P/Wz2TQsripyFRdERxc53TeaRU76vTkJD4+RVyWGXPDe6oKDEV1LsHVxdNazBW2q1VUfT3xnoNq8u1eynotwwRwXH3BPUjcPmhhMX5GUZjSxvCkdeIsxhz/Iy5kPdzJ+R8YMwpmMmdnwigoZBxIJb0Oe3oGUXKWZJhVGNFHt5J3TQ/3e8Ukt93sl9kVrnUDyTeV24H5NnTKf5mo6Kc+db5Sq2ksEs0BbBXgaJFnChtsbKrx/bFLzxhZfHPvDA2Jef31jRPBZF9rKRv3rzvpbBI++9d+TglvveenUk9zMsghPqTsWNM1j/0oz5v0RQLaKDObSDwtLj9AjUHD8iHTl+5MhxqDnT/Q2Qb+SGbcihG7ZBA7y5jb5J39wGb9KyFom0MJuM26dpP1ARW/0xCjFUtGjFXRQQHTsXwK47iRREFZGHgqvnvO4xpt91F63MYYR583CHVPZcDu7T73f6XlyP0h+uh+2Hy0/9XyVr5DvKLPuBMi2o/oPqD5XaB6/Nojv2d/1QySg+r3WxTAxF0zIqox7Dck1GgQUtmIKowpg/zSRwrycDYJGgHtrR9uLCsxyP5STzjtJeLsLsYz16bEfbOKrp5+l4CR3X83iM+MC3yhe8i3zH8+d8DyLrk4wu8vLgKNFnCvMAC44eEhfyUSvb21eOGr2sJdLg8zVEWpaN5leA95SMM49ZpGwT+1MDMI7zo2zmpYE0iPMSWby2J8iX6oF7RhhwSxqbWA31q1JklT9SxMy8FFePUvqThPatiZ6e8lmXhrWB3In7Gi4cUhbg6MbOkT0x/tmiwg3hPr7ffArspzazVVLkHdJ5Y6jpkbWapn/fwHSxPB3bUECcPP7Yw1FSUW08BMXnYa44BqGVUKQnfaiTFn+1cuW8Scvn/eVXdDKQ6xfOrKu7fM32y+a+q2ijRv5k8Y15atFNK+9/Rnh+yOjW0lLaQo+Nn3QbSfvRiZxZH/aJEdWTiFh8CY88Q/tSq6DJCnZA85IbVFxzpn3eGucW2QyDWD9nAkvAFGSBpZxdwP60PkbB7T3LsVLS6UrfO0KyNzUX3ExAjP1x44w3GEkOj9+24Qii7reYPBb24QSTtkEAumdY9RsBTXpNN25A+5aPme5uAd3FrH2rcSKM53KaGFMsPeN4YSMMGmdRGjczmLNNO19Pmsl/na/DHEFFHcrDR4OJGiEfaoShqmMolEGgBvKl4FBwJIJDhUBQdeBfvsgy4SnqugTCM8+YyBfK8BomyiAfEmoZqIl8Q7ASTxwJfKHkUGtkhYWfOmrkoQIS56ECPi2pmFXENzryUeouVJF5opglm1wCeQ2SbUq+r6iwPloRBJBlR64l1x8oHu4szHXIeaUOZ6RQzK0xFNoq8setlqweyWZoHt+sFOSE7O6RrqXz338qUOv21biUkuza9vJEbrDYa/F4jKXZ1vb4YDkvO1TgLMvzObPcTkNhKFinlDbmDwpWocFoAIOcJYPT9aMPNklZ2cPdWWqewZBvzW0OCvmWEXVeo8FjqKktExwl4Ypyk+CRBl+kuP8jKRZk2H0Tfv90VqTIYLGJpXF3QjX78qxOH2Sp/qzmuKwKdl+2scIp2p1Ge/b6dsEkZwnGLF9ps8dmNRlM4L8ZcgwGRTWLDrnINjjfXOINOEzmrITVYs8xFagWi5xvslgLnc3O2opKt6vSaTRPrC1oNWWZchzloQVT76Bnny3PuWVoa31JQaxFzjaquebiItXutch1xoJsydI4bERZl+wwORWuQ/eKbnWulPFBXsTj+/m875c33PDLG0Rx4EE6cQM/DvhLf1PI/C69DNVR5g3kG03sFfv9NXhiYHOFxEwg9iLq9yXZM1KSr2XhdeQa/KqB9CW5HyeZXucSOH9hl/V3DvQBVJBaUq9/C65HLiEn8+jfhKe//jEhY4sPgfSl8vSEl9LEDpGmkX/pfZY0jmK2cGPg6pu6d/B0n74WKbSnA0ZGrfE+yPRGtyb5vGtHMuQLdbY6qH30ju4HvWtG4QU7z7s/Q5iVftvi/P9XIK1LMos7mW/kgejapI8wA15EBU75FZGBBLOccKMkkwLOw/Q0x7cExwCN5OrrIUYRbWIItkh8xdTnDUIsGFDyQWGxXA7d3VgG51w0BD7DAv/t94MfeJSf+Os4tiNODySdXf5x/m5/vqDl+zGV70xqT8cCgZhf1agDaWeuvzsA5aJsGz1l42kaG9feHYc2LenMx8z6U92Y6nImU//Bh/wxQgZ+pzmCjCMdZDZZyNeM0jGBLZBgQYEeU/8VFmPLhnfABf6J4LnRZl4fPGZAvT/y54Kj2j/U7bH0sI9qPIsaL51kqznpJAuiSeli0Jc2084/zNHHnQvCg0iqPkqfj1zrBV977MG0nODpg3tOQkZsUJLoRyf3pNXK6fYBxnB7RnYE7JOTalLp5etpRF+XjxgFEdmugy2PZuas/Kivp1XMFuiqszqTpMf+OppHBuBPX4iSV8dahL4TApceNAenr97GXGLsXPhpegVPgBU4p+7EOeXhay0OHh2QcIHD5ItFYgM62Rax+UwtkOlmmd61mD5IF9IHF9816vXVmpbuO01b/Tr9sd5Nh2c+9ut3Hp3ZtsgC/9EePNcLD2o023KZmEo3WkjLBCETUB50j1cl+57aXAqsrUMgGmRLfOVBpf+COREI+nRvWDQRMPFa4k2X4G4RWFwcOytQ7TY//wSVO8vyBJUvEryX6501PxANXD+Lfr3zJ/Q/M2/AkwUzPXnvsbu9pffj6WWPfwHSF49fhsldJSltZ2rIrH9t6nrijqaKLb/kiwrD2hbTs1v5+5LHH1t3y+Z1jx/Tz7YCLB7bilkmzT0Mgn7tenwVvvJ6/YyePdzVqf1887zlka7krFsmZHxd2oC1bMGTRgtZ0116bN4zniJxxsDGkDIEgH4OwLiNPWLyVgHJQivB6lDtxCG/df99R+gV9Cn6lzdWCKT7pUUQPiRGIpSseANKYDJsO/LF8Zeeof+YwuvwBspCI/9/Nkp53BnnipxEWxMRRWDu1YAQjLjAHZcm7enpmRidGXmh1/rVM2fJM19Zex3vQ/ExUeuZKJCJPZGZUUomFRykXw6iX0LBICg4uPngwXRMs4gtHbimJpP0mtq5b9QdGQ8Od3yaBqbVdJ8M2HMCldkz6vRd1yH9XMZO4P2dnfluTv+xcAGGt8yXzoi1nmL9zb/ZI7xuRraKBqJHFv345xFRifHIBY9E1tKtULUW7ejoOqiiW9ceFZ5Ivf9+6njq+Pup94Un5E/oT35H93z4Icz7nYhmCP1R6ka4ha4VfgQ3Zv5PgUwZmXgITzGgCT/gJUePork/4MH0YtzA+uUPfFrklbzwHUczVbz4ZbSC1Q8Wp2P3uK1mR4ZfyfxPRpQutprNcdrDo82Z3KmBIMIyuwvhhN3BfNYKH9Oz3OzqZoPBE7PGDJp+wx591beP6GeUcWMOZFwtA0n/hyxN18zv0q9TnoYLvz8MoCE/47uiNvkn5QEP/2KAfy4QcTvsCd0cKfcNuByWHHZLmC0k6zf457L9dzLf9w/85EhcYfeYzB/T3//0ydqyImHwjo1gfNN2RemgQRvp/qeferZ+UKnRt/Wen0Kgp0RzBApr7qRXH/77oeLyunJDYM+bv4S564ou/IiJl3JmsbuwsCj75gpj1OExlK3L+2JQaa1j0rS6/CbXoGz/+OEFaBkGChPO6Z0JQ6W3PJxVOXFM3oD+EHnEaBGTaB//Txb4grvoy7ANWwIldJdQsqvvUmUIraYPfP4XSpSFp8/ApZ/B4/LjtBqOsg2OnXmJDmckQ3orNVyceWbH0aMca9L+ovQa8kCLkqlg3ag5L/qSmzNs9vErfP//ATHKtuMAAHjajZA9TgMxEIWfyY9EhBBFDuAKhSKON0m10EUKUgRt+vx4ky3wRruOktByFlpKuAT0nICOO/DWsUBICFhrPd+8Gc+MDeAYDxDYfxe4DSzQwEvgA9TxFriCU3EeuIqG2Aau4UTcB65Tf2amqB7S2/pTJQs08RT4AEd4DVzBFd4DV9EU08A1SHEXuE79EQPkMJjAcZ9DYood9xEy+pa0QcrYkjSkZsmlzbFgXKILBU3bYobjWiFGhysJuclnrkJBT1E11M+AQW4mzszldCdHmbFyk7qlHGbWDbN8YWRXadlaOreKO52EalKqqkiUNY6nL/14hsVTzHyzgqKxJk9nmSVf+/ukWOOGjpmna9rfrhDz/6nqPtJDGxHz2szXpD6LfZs1ll/d6fTakW53ddT/x6hjHywYzvyTa99BeVtOhrHJizSzUutIaa3l3zU/ABw5cLgAAAB42l3SZ5MVVRSF4fuOBEmCiZyDiInb5+zTPYOkgWEIEpUgQUkShpyVoCA5Jy3/LlBz3/ED/WVVdVU/1XvVanW1Bp83rdbRd0Hr/ee/wbdddPEBwxjOCEbyIaMYzRjGMo6PGM8EPuYTPuUzPmcik5jMFKYyjenMYCazmM0c5jKP+SzgCxbyJYv4iq/5hm/5jsW0qUhkgkJNQzc9LOF7lrKM5axgJb2sYjV9rKGftaxjPRv4gY1sYjNb2Mo2fuQntrODneziZ3azh73s4xd+ZT8HOMghDvMbRzjKMY4zwAlOcorTnOEs5zjPBS5yictc4Xf+4CrXuM4N/uQvbnKLv7nNHe5yj/s84CGPeMwTnvKM57zgJa94zT/8O/LymYH+qt02KzOZ2QyzmLXZmN1mz2AmvaSX9JJe0kt6SS/pJb005FV6lV6lV+lVepVepVfpVXqVXtJLekkv6SW9pJc6Xvau7F3Zu7J3Ze/K3pXbQ981Zuc/Qid0Qid0Qid0Qid04n+nc0/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hPJL2kl/SyXtbLelkv62W9rJf1sl7WC73QC73QC73QC73QC73QK3pFr+gVvaJX9Ipe0St6Ra/Wq/VqvVqv1qv1ar1ar9ar9Rq9Rq/Ra/QavUav6XjFnRV3VtxZcWfFnRV3VtpD3zVmt9lj9pqrzNVmn7nG7O+kuyzusrjL4i6LuyzusrjLUjVvAQpVcTgAAAAAAAAB//8AAnjaY2BgYGQAgjO2i86D6AshzNIwGgBAmQUAAAA=) format('woff'), + url('Genericons.ttf') format('truetype'), + url('Genericons.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Genericons"; + src: url("./Genericons.svg#Genericons") format("svg"); + } +} + + +/** + * All Genericons + */ + +.genericon { + font-size: 16px; + vertical-align: top; + text-align: center; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + display: inline-block; + font-family: "Genericons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + speak: none; +} + + +/** + * Individual icons + */ + +.genericon-404:before { content: "\f423"; } +.genericon-activity:before { content: "\f508"; } +.genericon-anchor:before { content: "\f509"; } +.genericon-aside:before { content: "\f101"; } +.genericon-attachment:before { content: "\f416"; } +.genericon-audio:before { content: "\f109"; } +.genericon-bold:before { content: "\f471"; } +.genericon-book:before { content: "\f444"; } +.genericon-bug:before { content: "\f50a"; } +.genericon-cart:before { content: "\f447"; } +.genericon-category:before { content: "\f301"; } +.genericon-chat:before { content: "\f108"; } +.genericon-checkmark:before { content: "\f418"; } +.genericon-close:before { content: "\f405"; } +.genericon-close-alt:before { content: "\f406"; } +.genericon-cloud:before { content: "\f426"; } +.genericon-cloud-download:before { content: "\f440"; } +.genericon-cloud-upload:before { content: "\f441"; } +.genericon-code:before { content: "\f462"; } +.genericon-codepen:before { content: "\f216"; } +.genericon-cog:before { content: "\f445"; } +.genericon-collapse:before { content: "\f432"; } +.genericon-comment:before { content: "\f300"; } +.genericon-day:before { content: "\f305"; } +.genericon-digg:before { content: "\f221"; } +.genericon-document:before { content: "\f443"; } +.genericon-dot:before { content: "\f428"; } +.genericon-downarrow:before { content: "\f502"; } +.genericon-download:before { content: "\f50b"; } +.genericon-draggable:before { content: "\f436"; } +.genericon-dribbble:before { content: "\f201"; } +.genericon-dropbox:before { content: "\f225"; } +.genericon-dropdown:before { content: "\f433"; } +.genericon-dropdown-left:before { content: "\f434"; } +.genericon-edit:before { content: "\f411"; } +.genericon-ellipsis:before { content: "\f476"; } +.genericon-expand:before { content: "\f431"; } +.genericon-external:before { content: "\f442"; } +.genericon-facebook:before { content: "\f203"; } +.genericon-facebook-alt:before { content: "\f204"; } +.genericon-fastforward:before { content: "\f458"; } +.genericon-feed:before { content: "\f413"; } +.genericon-flag:before { content: "\f468"; } +.genericon-flickr:before { content: "\f211"; } +.genericon-foursquare:before { content: "\f226"; } +.genericon-fullscreen:before { content: "\f474"; } +.genericon-gallery:before { content: "\f103"; } +.genericon-github:before { content: "\f200"; } +.genericon-googleplus:before { content: "\f206"; } +.genericon-googleplus-alt:before { content: "\f218"; } +.genericon-handset:before { content: "\f50c"; } +.genericon-heart:before { content: "\f461"; } +.genericon-help:before { content: "\f457"; } +.genericon-hide:before { content: "\f404"; } +.genericon-hierarchy:before { content: "\f505"; } +.genericon-home:before { content: "\f409"; } +.genericon-image:before { content: "\f102"; } +.genericon-info:before { content: "\f455"; } +.genericon-instagram:before { content: "\f215"; } +.genericon-italic:before { content: "\f472"; } +.genericon-key:before { content: "\f427"; } +.genericon-leftarrow:before { content: "\f503"; } +.genericon-link:before { content: "\f107"; } +.genericon-linkedin:before { content: "\f207"; } +.genericon-linkedin-alt:before { content: "\f208"; } +.genericon-location:before { content: "\f417"; } +.genericon-lock:before { content: "\f470"; } +.genericon-mail:before { content: "\f410"; } +.genericon-maximize:before { content: "\f422"; } +.genericon-menu:before { content: "\f419"; } +.genericon-microphone:before { content: "\f50d"; } +.genericon-minimize:before { content: "\f421"; } +.genericon-minus:before { content: "\f50e"; } +.genericon-month:before { content: "\f307"; } +.genericon-move:before { content: "\f50f"; } +.genericon-next:before { content: "\f429"; } +.genericon-notice:before { content: "\f456"; } +.genericon-paintbrush:before { content: "\f506"; } +.genericon-path:before { content: "\f219"; } +.genericon-pause:before { content: "\f448"; } +.genericon-phone:before { content: "\f437"; } +.genericon-picture:before { content: "\f473"; } +.genericon-pinned:before { content: "\f308"; } +.genericon-pinterest:before { content: "\f209"; } +.genericon-pinterest-alt:before { content: "\f210"; } +.genericon-play:before { content: "\f452"; } +.genericon-plugin:before { content: "\f439"; } +.genericon-plus:before { content: "\f510"; } +.genericon-pocket:before { content: "\f224"; } +.genericon-polldaddy:before { content: "\f217"; } +.genericon-portfolio:before { content: "\f460"; } +.genericon-previous:before { content: "\f430"; } +.genericon-print:before { content: "\f469"; } +.genericon-quote:before { content: "\f106"; } +.genericon-rating-empty:before { content: "\f511"; } +.genericon-rating-full:before { content: "\f512"; } +.genericon-rating-half:before { content: "\f513"; } +.genericon-reddit:before { content: "\f222"; } +.genericon-refresh:before { content: "\f420"; } +.genericon-reply:before { content: "\f412"; } +.genericon-reply-alt:before { content: "\f466"; } +.genericon-reply-single:before { content: "\f467"; } +.genericon-rewind:before { content: "\f459"; } +.genericon-rightarrow:before { content: "\f501"; } +.genericon-search:before { content: "\f400"; } +.genericon-send-to-phone:before { content: "\f438"; } +.genericon-send-to-tablet:before { content: "\f454"; } +.genericon-share:before { content: "\f415"; } +.genericon-show:before { content: "\f403"; } +.genericon-shuffle:before { content: "\f514"; } +.genericon-sitemap:before { content: "\f507"; } +.genericon-skip-ahead:before { content: "\f451"; } +.genericon-skip-back:before { content: "\f450"; } +.genericon-skype:before { content: "\f220"; } +.genericon-spam:before { content: "\f424"; } +.genericon-spotify:before { content: "\f515"; } +.genericon-standard:before { content: "\f100"; } +.genericon-star:before { content: "\f408"; } +.genericon-status:before { content: "\f105"; } +.genericon-stop:before { content: "\f449"; } +.genericon-stumbleupon:before { content: "\f223"; } +.genericon-subscribe:before { content: "\f463"; } +.genericon-subscribed:before { content: "\f465"; } +.genericon-summary:before { content: "\f425"; } +.genericon-tablet:before { content: "\f453"; } +.genericon-tag:before { content: "\f302"; } +.genericon-time:before { content: "\f303"; } +.genericon-top:before { content: "\f435"; } +.genericon-trash:before { content: "\f407"; } +.genericon-tumblr:before { content: "\f214"; } +.genericon-twitch:before { content: "\f516"; } +.genericon-twitter:before { content: "\f202"; } +.genericon-unapprove:before { content: "\f446"; } +.genericon-unsubscribe:before { content: "\f464"; } +.genericon-unzoom:before { content: "\f401"; } +.genericon-uparrow:before { content: "\f500"; } +.genericon-user:before { content: "\f304"; } +.genericon-video:before { content: "\f104"; } +.genericon-videocamera:before { content: "\f517"; } +.genericon-vimeo:before { content: "\f212"; } +.genericon-warning:before { content: "\f414"; } +.genericon-website:before { content: "\f475"; } +.genericon-week:before { content: "\f306"; } +.genericon-wordpress:before { content: "\f205"; } +.genericon-xpost:before { content: "\f504"; } +.genericon-youtube:before { content: "\f213"; } +.genericon-zoom:before { content: "\f402"; } diff --git a/wp-content/themes/twentyfifteen/header.php b/wp-content/themes/twentyfifteen/header.php new file mode 100644 index 000000000..41a1e8df7 --- /dev/null +++ b/wp-content/themes/twentyfifteen/header.php @@ -0,0 +1,57 @@ + + class="no-js"> + + + + + + + + + +> + +
        + + + + +
        diff --git a/wp-content/themes/twentyfifteen/image.php b/wp-content/themes/twentyfifteen/image.php new file mode 100644 index 000000000..3eb25b3fb --- /dev/null +++ b/wp-content/themes/twentyfifteen/image.php @@ -0,0 +1,99 @@ + + +
        +
        + + + +
        > + + + +
        + ', '' ); ?> +
        + +
        + +
        + + + +
        + +
        + + +
        + + '', + 'link_before' => '', + 'link_after' => '', + 'pagelink' => '' . __( 'Page', 'twentyfifteen' ) . ' %', + 'separator' => ', ', + ) + ); + ?> +
        + +
        + + ', '' ); ?> +
        + +
        + + _x( 'Published in%title', 'Parent post link', 'twentyfifteen' ), + ) + ); + + // End the loop. + endwhile; + ?> + +
        +
        + + diff --git a/wp-content/themes/twentyfifteen/inc/back-compat.php b/wp-content/themes/twentyfifteen/inc/back-compat.php new file mode 100644 index 000000000..a4f03e3a6 --- /dev/null +++ b/wp-content/themes/twentyfifteen/inc/back-compat.php @@ -0,0 +1,67 @@ +

        %s

        ', $message ); +} + +/** + * Prevent the Customizer from being loaded on WordPress versions prior to 4.1. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_customize() { + wp_die( + sprintf( __( 'Twenty Fifteen requires at least WordPress version 4.1. You are running version %s. Please upgrade and try again.', 'twentyfifteen' ), $GLOBALS['wp_version'] ), + '', + array( + 'back_link' => true, + ) + ); +} +add_action( 'load-customize.php', 'twentyfifteen_customize' ); + +/** + * Prevent the Theme Preview from being loaded on WordPress versions prior to 4.1. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Fifteen requires at least WordPress version 4.1. You are running version %s. Please upgrade and try again.', 'twentyfifteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentyfifteen_preview' ); diff --git a/wp-content/themes/twentyfifteen/inc/custom-header.php b/wp-content/themes/twentyfifteen/inc/custom-header.php new file mode 100644 index 000000000..763ef00d0 --- /dev/null +++ b/wp-content/themes/twentyfifteen/inc/custom-header.php @@ -0,0 +1,380 @@ + $default_text_color, + 'width' => 954, + 'height' => 1300, + 'wp-head-callback' => 'twentyfifteen_header_style', + ) + ) + ); +} +add_action( 'after_setup_theme', 'twentyfifteen_custom_header_setup' ); + +/** + * Convert HEX to RGB. + * + * @since Twenty Fifteen 1.0 + * + * @param string $color The original color, in 3- or 6-digit hexadecimal form. + * @return array Array containing RGB (red, green, and blue) values for the given + * HEX code, empty array otherwise. + */ +function twentyfifteen_hex2rgb( $color ) { + $color = trim( $color, '#' ); + + if ( strlen( $color ) == 3 ) { + $r = hexdec( substr( $color, 0, 1 ) . substr( $color, 0, 1 ) ); + $g = hexdec( substr( $color, 1, 1 ) . substr( $color, 1, 1 ) ); + $b = hexdec( substr( $color, 2, 1 ) . substr( $color, 2, 1 ) ); + } elseif ( strlen( $color ) == 6 ) { + $r = hexdec( substr( $color, 0, 2 ) ); + $g = hexdec( substr( $color, 2, 2 ) ); + $b = hexdec( substr( $color, 4, 2 ) ); + } else { + return array(); + } + + return array( + 'red' => $r, + 'green' => $g, + 'blue' => $b, + ); +} + +if ( ! function_exists( 'twentyfifteen_header_style' ) ) : + /** + * Styles the header image and text displayed on the blog. + * + * @since Twenty Fifteen 1.0 + * + * @see twentyfifteen_custom_header_setup() + */ + function twentyfifteen_header_style() { + $header_image = get_header_image(); + + // If no custom options for text are set, let's bail. + if ( empty( $header_image ) && display_header_text() ) { + return; + } + + // If we get this far, we have custom styles. Let's do this. + ?> + + get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title a', + 'container_inclusive' => false, + 'render_callback' => 'twentyfifteen_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'container_inclusive' => false, + 'render_callback' => 'twentyfifteen_customize_partial_blogdescription', + ) + ); + } + + // Add color scheme setting and control. + $wp_customize->add_setting( + 'color_scheme', + array( + 'default' => 'default', + 'sanitize_callback' => 'twentyfifteen_sanitize_color_scheme', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + 'color_scheme', + array( + 'label' => __( 'Base Color Scheme', 'twentyfifteen' ), + 'section' => 'colors', + 'type' => 'select', + 'choices' => twentyfifteen_get_color_scheme_choices(), + 'priority' => 1, + ) + ); + + // Add custom header and sidebar text color setting and control. + $wp_customize->add_setting( + 'sidebar_textcolor', + array( + 'default' => $color_scheme[4], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'sidebar_textcolor', + array( + 'label' => __( 'Header and Sidebar Text Color', 'twentyfifteen' ), + 'description' => __( 'Applied to the header on small screens and the sidebar on wide screens.', 'twentyfifteen' ), + 'section' => 'colors', + ) + ) + ); + + // Remove the core header textcolor control, as it shares the sidebar text color. + $wp_customize->remove_control( 'header_textcolor' ); + + // Add custom header and sidebar background color setting and control. + $wp_customize->add_setting( + 'header_background_color', + array( + 'default' => $color_scheme[1], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'header_background_color', + array( + 'label' => __( 'Header and Sidebar Background Color', 'twentyfifteen' ), + 'description' => __( 'Applied to the header on small screens and the sidebar on wide screens.', 'twentyfifteen' ), + 'section' => 'colors', + ) + ) + ); + + // Add an additional description to the header image section. + $wp_customize->get_section( 'header_image' )->description = __( 'Applied to the header on small screens and the sidebar on wide screens.', 'twentyfifteen' ); +} +add_action( 'customize_register', 'twentyfifteen_customize_register', 11 ); + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Fifteen 1.5 + * @see twentyfifteen_customize_register() + * + * @return void + */ +function twentyfifteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Fifteen 1.5 + * @see twentyfifteen_customize_register() + * + * @return void + */ +function twentyfifteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Register color schemes for Twenty Fifteen. + * + * Can be filtered with {@see 'twentyfifteen_color_schemes'}. + * + * The order of colors in a colors array: + * 1. Main Background Color. + * 2. Sidebar Background Color. + * 3. Box Background Color. + * 4. Main Text and Link Color. + * 5. Sidebar Text and Link Color. + * 6. Meta Box Background Color. + * + * @since Twenty Fifteen 1.0 + * + * @return array An associative array of color scheme options. + */ +function twentyfifteen_get_color_schemes() { + /** + * Filter the color schemes registered for use with Twenty Fifteen. + * + * The default schemes include 'default', 'dark', 'yellow', 'pink', 'purple', and 'blue'. + * + * @since Twenty Fifteen 1.0 + * + * @param array $schemes { + * Associative array of color schemes data. + * + * @type array $slug { + * Associative array of information for setting up the color scheme. + * + * @type string $label Color scheme label. + * @type array $colors HEX codes for default colors prepended with a hash symbol ('#'). + * Colors are defined in the following order: Main background, sidebar + * background, box background, main text and link, sidebar text and link, + * meta box background. + * } + * } + */ + return apply_filters( + 'twentyfifteen_color_schemes', + array( + 'default' => array( + 'label' => __( 'Default', 'twentyfifteen' ), + 'colors' => array( + '#f1f1f1', + '#ffffff', + '#ffffff', + '#333333', + '#333333', + '#f7f7f7', + ), + ), + 'dark' => array( + 'label' => __( 'Dark', 'twentyfifteen' ), + 'colors' => array( + '#111111', + '#202020', + '#202020', + '#bebebe', + '#bebebe', + '#1b1b1b', + ), + ), + 'yellow' => array( + 'label' => __( 'Yellow', 'twentyfifteen' ), + 'colors' => array( + '#f4ca16', + '#ffdf00', + '#ffffff', + '#111111', + '#111111', + '#f1f1f1', + ), + ), + 'pink' => array( + 'label' => __( 'Pink', 'twentyfifteen' ), + 'colors' => array( + '#ffe5d1', + '#e53b51', + '#ffffff', + '#352712', + '#ffffff', + '#f1f1f1', + ), + ), + 'purple' => array( + 'label' => __( 'Purple', 'twentyfifteen' ), + 'colors' => array( + '#674970', + '#2e2256', + '#ffffff', + '#2e2256', + '#ffffff', + '#f1f1f1', + ), + ), + 'blue' => array( + 'label' => __( 'Blue', 'twentyfifteen' ), + 'colors' => array( + '#e9f2f9', + '#55c3dc', + '#ffffff', + '#22313f', + '#ffffff', + '#f1f1f1', + ), + ), + ) + ); +} + +if ( ! function_exists( 'twentyfifteen_get_color_scheme' ) ) : + /** + * Get the current Twenty Fifteen color scheme. + * + * @since Twenty Fifteen 1.0 + * + * @return array An associative array of either the current or default color scheme hex values. + */ + function twentyfifteen_get_color_scheme() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + $color_schemes = twentyfifteen_get_color_schemes(); + + if ( array_key_exists( $color_scheme_option, $color_schemes ) ) { + return $color_schemes[ $color_scheme_option ]['colors']; + } + + return $color_schemes['default']['colors']; + } +endif; // twentyfifteen_get_color_scheme + +if ( ! function_exists( 'twentyfifteen_get_color_scheme_choices' ) ) : + /** + * Returns an array of color scheme choices registered for Twenty Fifteen. + * + * @since Twenty Fifteen 1.0 + * + * @return array Array of color schemes. + */ + function twentyfifteen_get_color_scheme_choices() { + $color_schemes = twentyfifteen_get_color_schemes(); + $color_scheme_control_options = array(); + + foreach ( $color_schemes as $color_scheme => $value ) { + $color_scheme_control_options[ $color_scheme ] = $value['label']; + } + + return $color_scheme_control_options; + } +endif; // twentyfifteen_get_color_scheme_choices + +if ( ! function_exists( 'twentyfifteen_sanitize_color_scheme' ) ) : + /** + * Sanitization callback for color schemes. + * + * @since Twenty Fifteen 1.0 + * + * @param string $value Color scheme name value. + * @return string Color scheme name. + */ + function twentyfifteen_sanitize_color_scheme( $value ) { + $color_schemes = twentyfifteen_get_color_scheme_choices(); + + if ( ! array_key_exists( $value, $color_schemes ) ) { + $value = 'default'; + } + + return $value; + } +endif; // twentyfifteen_sanitize_color_scheme + +/** + * Enqueues front-end CSS for color scheme. + * + * @since Twenty Fifteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentyfifteen_color_scheme_css() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + + // Don't do anything if the default color scheme is selected. + if ( 'default' === $color_scheme_option ) { + return; + } + + $color_scheme = twentyfifteen_get_color_scheme(); + + // Convert main and sidebar text hex color to rgba. + $color_textcolor_rgb = twentyfifteen_hex2rgb( $color_scheme[3] ); + $color_sidebar_textcolor_rgb = twentyfifteen_hex2rgb( $color_scheme[4] ); + $colors = array( + 'background_color' => $color_scheme[0], + 'header_background_color' => $color_scheme[1], + 'box_background_color' => $color_scheme[2], + 'textcolor' => $color_scheme[3], + 'secondary_textcolor' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.7)', $color_textcolor_rgb ), + 'border_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.1)', $color_textcolor_rgb ), + 'border_focus_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.3)', $color_textcolor_rgb ), + 'sidebar_textcolor' => $color_scheme[4], + 'sidebar_border_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.1)', $color_sidebar_textcolor_rgb ), + 'sidebar_border_focus_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.3)', $color_sidebar_textcolor_rgb ), + 'secondary_sidebar_textcolor' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.7)', $color_sidebar_textcolor_rgb ), + 'meta_box_background_color' => $color_scheme[5], + ); + + $color_scheme_css = twentyfifteen_get_color_scheme_css( $colors ); + + wp_add_inline_style( 'twentyfifteen-style', $color_scheme_css ); +} +add_action( 'wp_enqueue_scripts', 'twentyfifteen_color_scheme_css' ); + +/** + * Binds JS listener to make Customizer color_scheme control. + * + * Passes color scheme data as colorScheme global. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_customize_control_js() { + wp_enqueue_script( 'color-scheme-control', get_template_directory_uri() . '/js/color-scheme-control.js', array( 'customize-controls', 'iris', 'underscore', 'wp-util' ), '20141216', true ); + wp_localize_script( 'color-scheme-control', 'colorScheme', twentyfifteen_get_color_schemes() ); +} +add_action( 'customize_controls_enqueue_scripts', 'twentyfifteen_customize_control_js' ); + +/** + * Binds JS handlers to make the Customizer preview reload changes asynchronously. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_customize_preview_js() { + wp_enqueue_script( 'twentyfifteen-customize-preview', get_template_directory_uri() . '/js/customize-preview.js', array( 'customize-preview' ), '20141216', true ); +} +add_action( 'customize_preview_init', 'twentyfifteen_customize_preview_js' ); + +/** + * Returns CSS for the color schemes. + * + * @since Twenty Fifteen 1.0 + * + * @param array $colors Color scheme colors. + * @return string Color scheme CSS. + */ +function twentyfifteen_get_color_scheme_css( $colors ) { + $colors = wp_parse_args( + $colors, + array( + 'background_color' => '', + 'header_background_color' => '', + 'box_background_color' => '', + 'textcolor' => '', + 'secondary_textcolor' => '', + 'border_color' => '', + 'border_focus_color' => '', + 'sidebar_textcolor' => '', + 'sidebar_border_color' => '', + 'sidebar_border_focus_color' => '', + 'secondary_sidebar_textcolor' => '', + 'meta_box_background_color' => '', + ) + ); + + $css = << a, + .author-description a, + .taxonomy-description a, + .textwidget a, + .entry-footer a:hover, + .comment-metadata a:hover, + .pingback .edit-link a:hover, + .comment-list .reply a:hover, + .site-info a:hover { + border-color: {$colors['textcolor']}; + } + + /* Secondary Text Color */ + button:hover, + button:focus, + input[type="button"]:hover, + input[type="button"]:focus, + input[type="reset"]:hover, + input[type="reset"]:focus, + input[type="submit"]:hover, + input[type="submit"]:focus, + .pagination .prev:hover, + .pagination .prev:focus, + .pagination .next:hover, + .pagination .next:focus, + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus, + .page-links a:hover, + .page-links a:focus { + background-color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + background-color: {$colors['secondary_textcolor']}; + } + + /* Secondary Text Color */ + blockquote, + a:hover, + a:focus, + .main-navigation .menu-item-description, + .post-navigation .meta-nav, + .post-navigation a:hover .post-title, + .post-navigation a:focus .post-title, + .image-navigation, + .image-navigation a, + .comment-navigation, + .comment-navigation a, + .widget, + .author-heading, + .entry-footer, + .entry-footer a, + .taxonomy-description, + .page-links > .page-links-title, + .entry-caption, + .comment-author, + .comment-metadata, + .comment-metadata a, + .pingback .edit-link, + .pingback .edit-link a, + .post-password-form label, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .no-comments, + .site-info, + .site-info a, + .wp-caption-text, + .gallery-caption, + .comment-list .reply a, + .widecolumn label, + .widecolumn .mu_register label { + color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + color: {$colors['secondary_textcolor']}; + } + + /* Secondary Text Color */ + blockquote, + .logged-in-as a:hover, + .comment-author a:hover { + border-color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['secondary_textcolor']}; + } + + /* Border Color */ + hr, + .dropdown-toggle:hover, + .dropdown-toggle:focus { + background-color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + background-color: {$colors['border_color']}; + } + + /* Border Color */ + pre, + abbr[title], + table, + th, + td, + input, + textarea, + .main-navigation ul, + .main-navigation li, + .post-navigation, + .post-navigation div + div, + .pagination, + .comment-navigation, + .widget li, + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children, + .site-header, + .site-footer, + .hentry + .hentry, + .author-info, + .entry-content .page-links a, + .page-links > span, + .page-header, + .comments-area, + .comment-list + .comment-respond, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-list .reply a, + .no-comments { + border-color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['border_color']}; + } + + /* Border Focus Color */ + a:focus, + button:focus, + input:focus { + outline-color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + outline-color: {$colors['border_focus_color']}; + } + + input:focus, + textarea:focus { + border-color: {$colors['textcolor']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['border_focus_color']}; + } + + /* Sidebar Link Color */ + .secondary-toggle:before { + color: {$colors['sidebar_textcolor']}; + } + + .site-title a, + .site-description { + color: {$colors['sidebar_textcolor']}; + } + + /* Sidebar Text Color */ + .site-title a:hover, + .site-title a:focus { + color: {$colors['secondary_sidebar_textcolor']}; + } + + /* Sidebar Border Color */ + .secondary-toggle { + border-color: {$colors['sidebar_textcolor']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['sidebar_border_color']}; + } + + /* Sidebar Border Focus Color */ + .secondary-toggle:hover, + .secondary-toggle:focus { + border-color: {$colors['sidebar_textcolor']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['sidebar_border_focus_color']}; + } + + .site-title a { + outline-color: {$colors['sidebar_textcolor']}; /* Fallback for IE7 and IE8 */ + outline-color: {$colors['sidebar_border_focus_color']}; + } + + /* Meta Background Color */ + .entry-footer { + background-color: {$colors['meta_box_background_color']}; + } + + @media screen and (min-width: 38.75em) { + /* Main Text Color */ + .page-header { + border-color: {$colors['textcolor']}; + } + } + + @media screen and (min-width: 59.6875em) { + /* Make sure its transparent on desktop */ + .site-header, + .secondary { + background-color: transparent; + } + + /* Sidebar Background Color */ + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"], + .widget_calendar tbody a, + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + color: {$colors['header_background_color']}; + } + + /* Sidebar Link Color */ + .secondary a, + .dropdown-toggle:after, + .widget-title, + .widget blockquote cite, + .widget blockquote small { + color: {$colors['sidebar_textcolor']}; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"], + .widget_calendar tbody a { + background-color: {$colors['sidebar_textcolor']}; + } + + .textwidget a { + border-color: {$colors['sidebar_textcolor']}; + } + + /* Sidebar Text Color */ + .secondary a:hover, + .secondary a:focus, + .main-navigation .menu-item-description, + .widget, + .widget blockquote, + .widget .wp-caption-text, + .widget .gallery-caption { + color: {$colors['secondary_sidebar_textcolor']}; + } + + .widget button:hover, + .widget button:focus, + .widget input[type="button"]:hover, + .widget input[type="button"]:focus, + .widget input[type="reset"]:hover, + .widget input[type="reset"]:focus, + .widget input[type="submit"]:hover, + .widget input[type="submit"]:focus, + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: {$colors['secondary_sidebar_textcolor']}; + } + + .widget blockquote { + border-color: {$colors['secondary_sidebar_textcolor']}; + } + + /* Sidebar Border Color */ + .main-navigation ul, + .main-navigation li, + .widget input, + .widget textarea, + .widget table, + .widget th, + .widget td, + .widget pre, + .widget li, + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children, + .widget abbr[title] { + border-color: {$colors['sidebar_border_color']}; + } + + .dropdown-toggle:hover, + .dropdown-toggle:focus, + .widget hr { + background-color: {$colors['sidebar_border_color']}; + } + + .widget input:focus, + .widget textarea:focus { + border-color: {$colors['sidebar_border_focus_color']}; + } + + .sidebar a:focus, + .dropdown-toggle:focus { + outline-color: {$colors['sidebar_border_focus_color']}; + } + } +CSS; + + return $css; +} + +/** + * Output an Underscore template for generating CSS for the color scheme. + * + * The template generates the css dynamically for instant display in the Customizer + * preview. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_color_scheme_css_template() { + $colors = array( + 'background_color' => '{{ data.background_color }}', + 'header_background_color' => '{{ data.header_background_color }}', + 'box_background_color' => '{{ data.box_background_color }}', + 'textcolor' => '{{ data.textcolor }}', + 'secondary_textcolor' => '{{ data.secondary_textcolor }}', + 'border_color' => '{{ data.border_color }}', + 'border_focus_color' => '{{ data.border_focus_color }}', + 'sidebar_textcolor' => '{{ data.sidebar_textcolor }}', + 'sidebar_border_color' => '{{ data.sidebar_border_color }}', + 'sidebar_border_focus_color' => '{{ data.sidebar_border_focus_color }}', + 'secondary_sidebar_textcolor' => '{{ data.secondary_sidebar_textcolor }}', + 'meta_box_background_color' => '{{ data.meta_box_background_color }}', + ); + ?> + + 1 && get_option( 'page_comments' ) ) : + ?> +
        + + %s
        ', __( 'Featured', 'twentyfifteen' ) ); + } + + $format = get_post_format(); + if ( current_theme_supports( 'post-formats', $format ) ) { + printf( + '%1$s%3$s', + sprintf( '%s ', _x( 'Format', 'Used before post format.', 'twentyfifteen' ) ), + esc_url( get_post_format_link( $format ) ), + get_post_format_string( $format ) + ); + } + + if ( in_array( get_post_type(), array( 'post', 'attachment' ) ) ) { + $time_string = ''; + + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( + $time_string, + esc_attr( get_the_date( 'c' ) ), + get_the_date(), + esc_attr( get_the_modified_date( 'c' ) ), + get_the_modified_date() + ); + + printf( + '%1$s %3$s', + _x( 'Posted on', 'Used before publish date.', 'twentyfifteen' ), + esc_url( get_permalink() ), + $time_string + ); + } + + if ( 'post' == get_post_type() ) { + if ( is_singular() || is_multi_author() ) { + printf( + '', + _x( 'Author', 'Used before post author name.', 'twentyfifteen' ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + get_the_author() + ); + } + + $categories_list = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentyfifteen' ) ); + if ( $categories_list && twentyfifteen_categorized_blog() ) { + printf( + '%1$s %2$s', + _x( 'Categories', 'Used before category names.', 'twentyfifteen' ), + $categories_list + ); + } + + $tags_list = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'twentyfifteen' ) ); + if ( $tags_list && ! is_wp_error( $tags_list ) ) { + printf( + '%1$s %2$s', + _x( 'Tags', 'Used before tag names.', 'twentyfifteen' ), + $tags_list + ); + } + } + + if ( is_attachment() && wp_attachment_is_image() ) { + // Retrieve attachment metadata. + $metadata = wp_get_attachment_metadata(); + + printf( + '%1$s %3$s × %4$s', + _x( 'Full size', 'Used before full size attachment link.', 'twentyfifteen' ), + esc_url( wp_get_attachment_url() ), + $metadata['width'], + $metadata['height'] + ); + } + + if ( ! is_single() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) { + echo ''; + /* translators: %s: post title */ + comments_popup_link( sprintf( __( 'Leave a comment on %s', 'twentyfifteen' ), get_the_title() ) ); + echo ''; + } + } +endif; + +/** + * Determine whether blog/site has more than one category. + * + * @since Twenty Fifteen 1.0 + * + * @return bool True of there is more than one category, false otherwise. + */ +function twentyfifteen_categorized_blog() { + if ( false === ( $all_the_cool_cats = get_transient( 'twentyfifteen_categories' ) ) ) { + // Create an array of all the categories that are attached to posts. + $all_the_cool_cats = get_categories( + array( + 'fields' => 'ids', + 'hide_empty' => 1, + + // We only need to know if there is more than one category. + 'number' => 2, + ) + ); + + // Count the number of categories that are attached to the posts. + $all_the_cool_cats = count( $all_the_cool_cats ); + + set_transient( 'twentyfifteen_categories', $all_the_cool_cats ); + } + + if ( $all_the_cool_cats > 1 || is_preview() ) { + // This blog has more than 1 category so twentyfifteen_categorized_blog should return true. + return true; + } else { + // This blog has only 1 category so twentyfifteen_categorized_blog should return false. + return false; + } +} + +/** + * Flush out the transients used in {@see twentyfifteen_categorized_blog()}. + * + * @since Twenty Fifteen 1.0 + */ +function twentyfifteen_category_transient_flusher() { + // Like, beat it. Dig? + delete_transient( 'twentyfifteen_categories' ); +} +add_action( 'edit_category', 'twentyfifteen_category_transient_flusher' ); +add_action( 'save_post', 'twentyfifteen_category_transient_flusher' ); + +if ( ! function_exists( 'twentyfifteen_post_thumbnail' ) ) : + /** + * Display an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index views, or a div + * element when on single views. + * + * @since Twenty Fifteen 1.0 + */ + function twentyfifteen_post_thumbnail() { + if ( post_password_required() || is_attachment() || ! has_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + +
        + +
        + + + + + + %2$s', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( __( 'Continue reading %s', 'twentyfifteen' ), '' . get_the_title( get_the_ID() ) . '' ) + ); + return ' … ' . $link; + } + add_filter( 'excerpt_more', 'twentyfifteen_excerpt_more' ); +endif; + +if ( ! function_exists( 'twentyfifteen_the_custom_logo' ) ) : + /** + * Displays the optional custom logo. + * + * Does nothing if the custom logo is not available. + * + * @since Twenty Fifteen 1.5 + */ + function twentyfifteen_the_custom_logo() { + if ( function_exists( 'the_custom_logo' ) ) { + the_custom_logo(); + } + } +endif; + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Fifteen 2.5 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Fifteen 2.5 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentyfifteen/index.php b/wp-content/themes/twentyfifteen/index.php new file mode 100644 index 000000000..4abac6a1b --- /dev/null +++ b/wp-content/themes/twentyfifteen/index.php @@ -0,0 +1,64 @@ + + +
        +
        + + + + +
        +

        +
        + + + __( 'Previous page', 'twentyfifteen' ), + 'next_text' => __( 'Next page', 'twentyfifteen' ), + 'before_page_number' => '' . __( 'Page', 'twentyfifteen' ) . ' ', + ) + ); + + // If no content, include the "No posts found" template. + else : + get_template_part( 'content', 'none' ); + + endif; + ?> + +
        +
        + + diff --git a/wp-content/themes/twentyfifteen/js/color-scheme-control.js b/wp-content/themes/twentyfifteen/js/color-scheme-control.js new file mode 100644 index 000000000..356323963 --- /dev/null +++ b/wp-content/themes/twentyfifteen/js/color-scheme-control.js @@ -0,0 +1,78 @@ +/* global colorScheme, Color */ +/** + * Add a listener to the Color Scheme control to update other color controls to new values/defaults. + * Also trigger an update of the Color Scheme CSS when a color is changed. + */ + +( function( api ) { + var cssTemplate = wp.template( 'twentyfifteen-color-scheme' ), + colorSchemeKeys = [ + 'background_color', + 'header_background_color', + 'box_background_color', + 'textcolor', + 'sidebar_textcolor', + 'meta_box_background_color' + ], + colorSettings = [ + 'background_color', + 'header_background_color', + 'sidebar_textcolor' + ]; + + api.controlConstructor.select = api.Control.extend( { + ready: function() { + if ( 'color_scheme' === this.id ) { + this.setting.bind( 'change', function( value ) { + // Update Background Color. + api( 'background_color' ).set( colorScheme[value].colors[0] ); + api.control( 'background_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', colorScheme[value].colors[0] ) + .wpColorPicker( 'defaultColor', colorScheme[value].colors[0] ); + + // Update Header/Sidebar Background Color. + api( 'header_background_color' ).set( colorScheme[value].colors[1] ); + api.control( 'header_background_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', colorScheme[value].colors[1] ) + .wpColorPicker( 'defaultColor', colorScheme[value].colors[1] ); + + // Update Header/Sidebar Text Color. + api( 'sidebar_textcolor' ).set( colorScheme[value].colors[4] ); + api.control( 'sidebar_textcolor' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', colorScheme[value].colors[4] ) + .wpColorPicker( 'defaultColor', colorScheme[value].colors[4] ); + } ); + } + } + } ); + + // Generate the CSS for the current Color Scheme. + function updateCSS() { + var scheme = api( 'color_scheme' )(), css, + colors = _.object( colorSchemeKeys, colorScheme[ scheme ].colors ); + + // Merge in color scheme overrides. + _.each( colorSettings, function( setting ) { + colors[ setting ] = api( setting )(); + }); + + // Add additional colors. + colors.secondary_textcolor = Color( colors.textcolor ).toCSS( 'rgba', 0.7 ); + colors.border_color = Color( colors.textcolor ).toCSS( 'rgba', 0.1 ); + colors.border_focus_color = Color( colors.textcolor ).toCSS( 'rgba', 0.3 ); + colors.secondary_sidebar_textcolor = Color( colors.sidebar_textcolor ).toCSS( 'rgba', 0.7 ); + colors.sidebar_border_color = Color( colors.sidebar_textcolor ).toCSS( 'rgba', 0.1 ); + colors.sidebar_border_focus_color = Color( colors.sidebar_textcolor ).toCSS( 'rgba', 0.3 ); + + css = cssTemplate( colors ); + + api.previewer.send( 'update-color-scheme-css', css ); + } + + // Update the CSS whenever a color setting is changed. + _.each( colorSettings, function( setting ) { + api( setting, function( setting ) { + setting.bind( updateCSS ); + } ); + } ); +} )( wp.customize ); diff --git a/wp-content/themes/twentyfifteen/js/customize-preview.js b/wp-content/themes/twentyfifteen/js/customize-preview.js new file mode 100644 index 000000000..58ca269a6 --- /dev/null +++ b/wp-content/themes/twentyfifteen/js/customize-preview.js @@ -0,0 +1,35 @@ +/** + * Live-update changed settings in real time in the Customizer preview. + */ + +( function( $ ) { + var $style = $( '#twentyfifteen-color-scheme-css' ), + api = wp.customize; + + if ( ! $style.length ) { + $style = $( 'head' ).append( '"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d -1 || ua.indexOf( 'opera' ) > -1 || ua.indexOf( 'msie' ) > -1 ) && + document.getElementById && window.addEventListener ) { + + window.addEventListener( 'hashchange', function() { + var element = document.getElementById( location.hash.substring( 1 ) ); + + if ( element ) { + if ( ! /^(?:a|select|input|button|textarea)$/i.test( element.nodeName ) ) { + element.tabIndex = -1; + } + + element.focus(); + } + }, false ); + } +} )(); diff --git a/wp-content/themes/twentyfifteen/page.php b/wp-content/themes/twentyfifteen/page.php new file mode 100644 index 000000000..50d0bf1c1 --- /dev/null +++ b/wp-content/themes/twentyfifteen/page.php @@ -0,0 +1,39 @@ + + +
        +
        + + + +
        +
        + + diff --git a/wp-content/themes/twentyfifteen/readme.txt b/wp-content/themes/twentyfifteen/readme.txt new file mode 100644 index 000000000..fd936ad1f --- /dev/null +++ b/wp-content/themes/twentyfifteen/readme.txt @@ -0,0 +1,137 @@ +=== Twenty Fifteen === +Contributors: wordpressdotorg +Requires at least: WordPress 4.1 +Tested up to: WordPress 5.0 +Requires PHP: 5.2.4 +Version: 2.5 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready + +== Description == +Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen's simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer. + +* Mobile-first, Responsive Layout +* Custom Colors +* Custom Header +* Social Links +* Menu Description +* Post Formats +* The GPL v2.0 or later license. :) Use it to make something cool. + +For more information about Twenty Fifteen please go to https://codex.wordpress.org/Twenty_Fifteen. + +== Installation == + +1. In your admin panel, go to Appearance -> Themes and click the 'Add New' button. +2. Type in Twenty Fifteen in the search form and press the 'Enter' key on your keyboard. +3. Click on the 'Activate' button to use your new theme right away. +4. Go to https://codex.wordpress.org/Twenty_Fifteen for a guide on how to customize this theme. +5. Navigate to Appearance > Customize in your admin panel and customize to taste. + +== Copyright == + +Twenty Fifteen WordPress Theme, Copyright 2014-2018 WordPress.org & Automattic.com +Twenty Fifteen is distributed under the terms of the GNU GPL + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Twenty Fifteen Theme bundles the following third-party resources: + +HTML5 Shiv v3.7.0, Copyright 2014 Alexander Farkas +Licenses: MIT/GPL2 +Source: https://github.com/aFarkas/html5shiv + +Genericons icon font, Copyright 2013-2017 Automattic.com +License: GNU GPL, Version 2 (or later) +Source: http://www.genericons.com + +== Changelog == + += 2.5 = +* Released: May 7, 2019 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.5 + += 2.4 = +* Released: February 21, 2019 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.4 + += 2.3 = +* Released: January 9, 2019 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.3 + += 2.2 = +* Released: December 19, 2018 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.2 + += 2.1 = +* Released: December 6, 2018 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.1 + += 2.0 = +* Released: May 17, 2018 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.0 + += 1.9 = +* Released: November 14, 2017 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.9 + += 1.8 = +* Released: June 8, 2017 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.8 + += 1.7 = +* Released: December 6, 2016 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.7 + += 1.6 = +* Released: August 15, 2016 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.6 + += 1.5 = +* Released: April 12, 2016 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.5 + += 1.4 = +* Released: December 8, 2015 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.4 + += 1.3 = +* Released: August 18, 2015 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.3 + += 1.2 = +* Released: May 6, 2015 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.2 + += 1.1 = +* Released: April 23, 2015 + +https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.1 + += 1.0 = +* Released: December 18, 2014 + +Initial release diff --git a/wp-content/themes/twentyfifteen/rtl.css b/wp-content/themes/twentyfifteen/rtl.css new file mode 100644 index 000000000..4a7397f85 --- /dev/null +++ b/wp-content/themes/twentyfifteen/rtl.css @@ -0,0 +1,848 @@ +/* +Theme Name: Twenty Fifteen +Description: Adds support for languages written in a Right To Left (RTL) direction. +It's easy, just a matter of overwriting all the horizontal positioning attributes +of your CSS stylesheet in a separate stylesheet file named rtl.css. + +See: https://codex.wordpress.org/Right_to_Left_Language_Support +*/ + +/** + * Table of Contents: + * + * 1.0 - Reset + * 2.0 - Typography + * 3.0 - Elements + * 4.0 - Forms + * 5.0 - Navigations + * 6.0 - Accessibility + * 7.0 - Alignments + * 8.0 - Header + * 9.0 - Widgets + * 10.0 - Content + * 10.1 - Posts and pages + * 10.2 - Comments + * 11.0 - Media Queries + * 11.1 - Mobile Large + * 11.2 - Tablet Small + * 11.3 - Tablet Large + * 11.4 - Desktop Small + * 11.5 - Desktop Medium + * 11.6 - Desktop Large + * 11.7 - Desktop X-Large + */ + + +/** + * 1.0 Reset + */ + +body { + direction: rtl; + unicode-bidi: embed; +} + +caption, +th, +td { + text-align: right; +} + + +/** + * 2.0 Typography + */ + +body, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input, +select, +textarea, +blockquote cite, +blockquote small, +.post-password-form label, +.main-navigation .menu-item-description, +.post-navigation .meta-nav, +.post-navigation .post-title, +.pagination, +.image-navigation, +.comment-navigation, +.site-title, +.site-description, +.widget-title, +.widget_calendar caption, +.widget_rss .rss-date, +.widget_rss cite, +.author-heading, +.entry-footer, +.page-title, +.page-links, +.entry-caption, +.comments-title, +.comment-reply-title, +.comment-metadata, +.pingback .edit-link, +.comment-list .reply a, +.comment-form label, +.comment-notes, +.comment-awaiting-moderation, +.logged-in-as, +.form-allowed-tags, +.no-comments, +.wp-caption-text, +.gallery-caption { + font-family: Arial, Tahoma, sans-serif; +} + +::-webkit-input-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +:-moz-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +::-moz-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +:-ms-input-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +blockquote { + border-right: 4px solid rgba(51, 51, 51, 0.7); + border-left: 0; + padding-right: 0.7778em; + padding-left: 0; +} + + +/** + * 3.0 Elements + */ + +ul, +ol { + margin: 0 1.3333em 1.6em 0; +} + +caption, +th, +td { + text-align: right; +} + + +/** + * 4.0 Forms + */ + +.post-password-form input[type="submit"] { + right: auto; + left: 0; +} + + +/** + * 5.0 Navigations + */ + +.main-navigation ul ul { + margin-right: 0.8em; + margin-left: auto; +} + +.main-navigation .menu-item-has-children > a { + padding-right: 0; + padding-left: 48px; +} + +.dropdown-toggle { + right: auto; + left: 0; +} + +.dropdown-toggle:after { + right: -1px; + left: auto; +} + +.social-navigation li { + float: right; +} + +.social-navigation a:before { + right: 0; + left: auto; +} + +.secondary-toggle { + right: auto; + left: 0; +} + +.post-navigation .has-post-thumbnail a:before { + right: 0; + left: auto; +} + +.pagination .prev { + right: 0; + left: auto; +} + +.pagination .prev:before { + content: "\f429"; + right: -1px; + left: auto; +} + +.pagination .next { + right: auto; + left: 0; +} + +.pagination .next:before { + content: "\f430"; + right: auto; + left: -1px; +} + +.image-navigation .nav-previous a:before, +.comment-navigation .nav-previous a:before { + content: "\f429"; + margin-right: auto; + margin-left: 0.2em; +} + +.image-navigation .nav-next a:after, +.comment-navigation .nav-next a:after { + content: "\f430"; + margin-right: 0.2em; + margin-left: auto; +} + + +/** + * 6.0 Accessibility + */ + +.screen-reader-text:hover, +.screen-reader-text:focus { + right: 5px; + left: auto; +} + + +/** + * 7.0 Alignments + */ + +.alignright { + float: right; +} + +.alignleft { + float: left; +} + +.aligncenter { + margin-right: auto; + margin-left: auto; +} + +blockquote.alignright, +.wp-caption.alignright, +img.alignright { + margin: 0.4em 0 1.6em 1.6em; +} + +blockquote.alignleft, +.wp-caption.alignleft, +img.alignleft { + margin: 0.4em 1.6em 1.6em 0; +} + + +/** + * 8.0 Header + */ + +.site-branding { + padding-right: 0; + padding-left: 60px; +} + + +/** + * 9.0 Widgets + */ + +.widget_categories .children, +.widget_nav_menu .sub-menu, +.widget_pages .children { + margin: 0.7667em 0.8em 0 0; +} + +.textwidget ul, +.textwidget ol { + margin-left: 0; + margin-right: 1.6em; +} + +/** + * 10.0 Content + */ + +/** + * 10.1 Posts and pages + */ + +.entry-content .more-link:after { + content: "\f430"; +} + +.author-link:after { + content: "\f430"; +} + +.author-info .avatar { + float: right; + margin: 0 0 1.6em 1.6em; +} + +.posted-on:before, +.byline:before, +.cat-links:before, +.tags-links:before, +.comments-link:before, +.entry-format:before, +.edit-link:before, +.full-size-link:before { + margin-right: auto; + margin-left: 2px; +} + +.posted-on, +.byline, +.cat-links, +.tags-links, +.comments-link, +.entry-format, +.full-size-link { + margin-right: auto; + margin-left: 1em; +} + +.page-links a, +.page-links > span { + margin: 0 0 0.3333em 0.3333em; +} + +.page-links > .page-links-title { + padding-right: 0; + padding-left: 0.5em; +} + +.type-attachment .entry-header { + clear: left; +} + +.format-link .entry-title a:after { + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); +} + + +/** + * 10.2 Comments + */ + +.comment-list .children > li { + padding-right: 0.8em; + padding-left: 0; +} + +.comment-author .avatar { + float: right; + margin-right: 0; + margin-left: 0.4em; +} + +.bypostauthor > article .fn:after { + right: 3px; + left: auto; +} + +.comment-metadata .edit-link { + margin-right: 1em; + margin-left: auto; +} + +.pingback .edit-link { + margin-right: 1em; + margin-left: auto; +} + +.comment-content ul, +.comment-content ol { + margin: 0 1.3333em 1.6em 0; +} + +.comment-reply-title small a { + float: left; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 0 0 10px; +} + +/** + * 11.0 Media Queries + */ + + +/** + * 11.1 Mobile Large 620px + */ + +@media screen and (min-width: 38.75em) { + ul, + ol { + margin-right: 0; + margin-left: auto; + } + + li > ul, + li > ol, + blockquote > ul, + blockquote > ol { + margin-right: 1.3333em; + margin-left: auto; + } + + blockquote { + margin-right: -1em; + margin-left: auto; + } + + blockquote > blockquote { + margin-right: 0; + margin-left: auto; + } + + .page-header { + border-color: inherit; + border-left: none; + border-style: solid; + border-width: 0 7px 0 0; + } + + .page-title, + .taxonomy-description { + margin-right: -7px; + margin-left: auto; + } + + .comment-content ul, + .comment-content ol { + margin-right: 0; + margin-left: auto; + } + + .comment-content li > ul, + .comment-content li > ol, + .comment-content blockquote > ul, + .comment-content blockquote > ol { + margin-right: 1.3333em; + margin-left: auto; + } +} + + +/** + * 11.2 Tablet Small 740px + */ + +@media screen and (min-width: 46.25em) { + blockquote { + margin-right: -1.05em; + margin-left: auto; + padding-right: 0.85em; + padding-left: 0; + } + + .main-navigation ul ul { + margin-right: 1em; + margin-left: auto; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4118em 0 1.6471em 1.6471em; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4118em 1.6471em 1.6471em 0; + } + + .site-branding { + padding-right: 0; + padding-left: 66px; + } + + .widget blockquote { + margin-right: -1.2353em; + margin-left: auto; + padding-right: 1em; + padding-left: 0; + } + + .widget blockquote > blockquote { + margin-right: 0; + margin-left: auto; + } + + .widget blockquote.alignright, + .widget .wp-caption.alignright, + .widget img.alignright { + margin: 0.5em 0 1.5em 1.5em; + } + + .widget blockquote.alignleft, + .widget .wp-caption.alignleft, + .widget img.alignleft { + margin: 0.5em 1.5em 1.5em 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.9643em 1em 0 0; + } + + .page-links a, + .page-links > span { + margin: 0 0 0.2857em 0.2857em; + } + + .author-info .avatar { + margin: 0 0 1.6471em 1.6471em; + } + + .comment-list .children > li { + padding-right: 1.2353em; + padding-left: 0; + } + + .comment-author .avatar { + margin-left: 1.64705em; + } + + .bypostauthor > article .fn:after { + right: 6px; + left: auto; + } +} + + +/** + * 11.3 Tablet Large 880px + */ + +@media screen and (min-width: 55em) { + blockquote { + margin-right: -1.0909em; + margin-left: auto; + padding-right: 0.9091em; + padding-left: 0; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4211em 0 1.6842em 1.6842em; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4211em 1.6842em 1.6842em 0; + } + + .site-branding { + padding-right: 0; + padding-left: 74px; + } + + .widget blockquote { + margin-right: -1.2632em; + margin-left: auto; + padding-right: 1.0526em; + padding-left: 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.7188em 1em 0 0; + } + + .page-links a, + .page-links > span { + margin: 0 0 0.25em 0.25em; + } + + .author-info .avatar { + margin: 0 0 1.6842em 1.6842em; + } + + .comment-list .children > li { + padding-right: 1.4737em; + padding-left: 0; + } + + .comment-author .avatar { + margin-left: 1.6842em; + } +} + + +/** + * 11.4 Desktop Small 955px + */ + +@media screen and (min-width: 59.6875em) { + body:before { + right: 0; + left: auto; + } + + .sidebar { + float: right; + margin-right: auto; + margin-left: -100%; + } + + .site-content { + float: right; + margin-right: 29.4118%; + margin-left: auto; + } + + blockquote { + margin-right: -1.3333em; + margin-left: auto; + padding-right: 1.1111em; + padding-left: 0; + } + + .main-navigation .menu-item-has-children > a { + padding-right: 0; + padding-left: 30px; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4em 0 1.6em 1.6em; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4em 1.6em 1.6em 0; + } + + .widget blockquote { + margin-right: -1.5em; + margin-left: auto; + padding-right: 1.1667em; + padding-left: 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.4583em 1em 0 0; + } + + .page-links a, + .page-links > span { + margin: 0 0 0.3333em 0.3333em; + } + + .author-info .avatar { + margin: 0 0 1.5em 1.5em; + } + + .comment-list .children > li { + padding-right: 0.8em; + padding-left: 0; + } + + .comment-author .avatar { + margin-left: 0.8em; + } + + .bypostauthor > article .fn:after { + right: 3px; + left: auto; + } + + .site-branding { + padding: 0; + } + + .site-footer { + float: right; + margin: 0 35.2941% 0 0; + } +} + + +/** + * 11.5 Desktop Medium 1100px + */ + +@media screen and (min-width: 68.75em) { + blockquote { + margin-right: -1.05em; + margin-left: auto; + padding-right: 0.85em; + padding-left: 0; + } + + .main-navigation .menu-item-has-children > a { + padding-right: 0; + padding-left: 34px; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4118em 0 1.6471em 1.6471em; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4118em 1.6471em 1.6471em 0; + } + + .widget blockquote { + padding-right: 1.2143em; + padding-left: 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.4643em 1em 0 0; + } + + .page-links a, + .page-links > span { + margin: 0 0 0.2857em 0.2857em; + } + + .author-info .avatar { + margin: 0 0 1.6471em 1.6471em; + } + + .comment-list .children > li { + padding-right: 1.1667em; + padding-left: 0; + } + + .comment-author .avatar { + margin-left: 1.64705em; + } + + .bypostauthor > article .fn:after { + right: 6px; + left: auto; + } +} + + +/** + * 11.6 Desktop Large 1240px + */ + +@media screen and (min-width: 77.5em) { + blockquote { + margin-right: -1.0909em; + margin-left: auto; + padding-right: 0.9091em; + padding-left: 0; + } + + .main-navigation .menu-item-has-children > a { + padding-right: 0; + padding-left: 38px; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4211em 0 1.6842em 1.6842em; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4211em 1.6842em 1.6842em 0; + } + + .widget blockquote { + padding-right: 1.25em; + padding-left: 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.4688em 1em 0 0; + } + + .page-links a, + .page-links > span { + margin: 0 0 0.25em 0.25em; + } + + .author-info .avatar { + margin: 0 0 1.6842em 1.6842em; + } + + .comment-list .children > li { + padding-right: 1.4737em; + padding-left: 0; + } + + .comment-author .avatar { + margin-left: 1.64705em; + } +} + + +/** + * 11.7 Desktop X-Large 1403px + */ + +@media screen and (min-width: 87.6875em) { + body:before { + width: -webkit-calc(50% - 289px); + width: calc(50% - 289px); + } +} diff --git a/wp-content/themes/twentyfifteen/screenshot.png b/wp-content/themes/twentyfifteen/screenshot.png new file mode 100644 index 000000000..d00b44386 Binary files /dev/null and b/wp-content/themes/twentyfifteen/screenshot.png differ diff --git a/wp-content/themes/twentyfifteen/search.php b/wp-content/themes/twentyfifteen/search.php new file mode 100644 index 000000000..f3778f34d --- /dev/null +++ b/wp-content/themes/twentyfifteen/search.php @@ -0,0 +1,57 @@ + + +
        +
        + + + + + + + + __( 'Previous page', 'twentyfifteen' ), + 'next_text' => __( 'Next page', 'twentyfifteen' ), + 'before_page_number' => '' . __( 'Page', 'twentyfifteen' ) . ' ', + ) + ); + + // If no content, include the "No posts found" template. + else : + get_template_part( 'content', 'none' ); + + endif; + ?> + +
        +
        + + diff --git a/wp-content/themes/twentyfifteen/sidebar.php b/wp-content/themes/twentyfifteen/sidebar.php new file mode 100644 index 000000000..f2326a8c8 --- /dev/null +++ b/wp-content/themes/twentyfifteen/sidebar.php @@ -0,0 +1,51 @@ + +
        + + + + + + + + + + + + + +
        + + diff --git a/wp-content/themes/twentyfifteen/single.php b/wp-content/themes/twentyfifteen/single.php new file mode 100644 index 000000000..4de3a493a --- /dev/null +++ b/wp-content/themes/twentyfifteen/single.php @@ -0,0 +1,51 @@ + + +
        +
        + + ' ' . + '' . __( 'Next post:', 'twentyfifteen' ) . ' ' . + '%title', + 'prev_text' => ' ' . + '' . __( 'Previous post:', 'twentyfifteen' ) . ' ' . + '%title', + ) + ); + + // End the loop. + endwhile; + ?> + +
        +
        + + diff --git a/wp-content/themes/twentyfifteen/style.css b/wp-content/themes/twentyfifteen/style.css new file mode 100644 index 000000000..4d0d8e79e --- /dev/null +++ b/wp-content/themes/twentyfifteen/style.css @@ -0,0 +1,6087 @@ +/* +Theme Name: Twenty Fifteen +Theme URI: https://wordpress.org/themes/twentyfifteen/ +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen's simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer. +Version: 2.5 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready +Text Domain: twentyfifteen + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. +*/ + + +/** + * Table of Contents + * + * 1.0 - Reset + * 2.0 - Genericons + * 3.0 - Typography + * 4.0 - Elements + * 5.0 - Forms + * 6.0 - Navigations + * 6.1 - Links + * 6.2 - Menus + * 7.0 - Accessibility + * 8.0 - Alignments + * 9.0 - Clearings + * 10.0 - Header + * 11.0 - Widgets + * 12.0 - Content + * 12.1 - Posts and pages + * 12.2 - Post Formats + * 12.3 - Comments + * 13.0 - Footer + * 14.0 - Media + * 14.1 - Captions + * 14.2 - Galleries + * 15.0 - Multisite + * 16.0 - Media Queries + * 16.1 - Mobile Large + * 16.2 - Tablet Small + * 16.3 - Tablet Large + * 16.4 - Desktop Small + * 16.5 - Desktop Medium + * 16.6 - Desktop Large + * 16.7 - Desktop X-Large + * 17.0 - Print + */ + + +/** + * 1.0 - Reset + * + * Resetting and rebuilding styles have been helped along thanks to the fine + * work of Eric Meyer, Nicolas Gallagher, Jonathan Neal, and Blueprint. + */ + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { + border: 0; + font-family: inherit; + font-size: 100%; + font-style: inherit; + font-weight: inherit; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +html { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 62.5%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +*, +*:before, +*:after { + -webkit-box-sizing: inherit; + -moz-box-sizing: inherit; + box-sizing: inherit; +} + +body { + background: #f1f1f1; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +nav, +section { + display: block; +} + +ol, +ul { + list-style: none; +} + +table { + border-collapse: separate; + border-spacing: 0; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +fieldset { + min-width: inherit; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; +} + +blockquote, +q { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + quotes: none; +} + +a:focus { + outline: 2px solid #c1c1c1; + outline: 2px solid rgba(51, 51, 51, 0.3); +} + +a:hover, +a:active { + outline: 0; +} + +a img { + border: 0; +} + + +/** + * 2.0 - Genericons + */ + +.social-navigation a:before, +.secondary-toggle:before, +.dropdown-toggle:after, +.bypostauthor > article .fn:after, +.comment-reply-title small a:before, +.comment-navigation .nav-next a:after, +.comment-navigation .nav-previous a:before, +.posted-on:before, +.byline:before, +.cat-links:before, +.tags-links:before, +.comments-link:before, +.entry-format:before, +.edit-link:before, +.full-size-link:before, +.pagination .prev:before, +.pagination .next:before, +.image-navigation a:before, +.image-navigation a:after, +.format-link .entry-title a:after, +.entry-content .more-link:after, +.entry-summary .more-link:after, +.author-link:after { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-family: "Genericons"; + font-size: 16px; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + speak: none; + text-align: center; + text-decoration: inherit; + text-transform: none; + vertical-align: top; +} + + +/** + * 3.0 Typography + */ + +body, +button, +input, +select, +textarea { + color: #333; + font-family: "Noto Serif", serif; + font-size: 15px; + font-size: 1.5rem; + line-height: 1.6; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-weight: 700; +} + +p { + margin-bottom: 1.6em; +} + +b, +strong { + font-weight: 700; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + border-left: 4px solid #707070; + border-left: 4px solid rgba(51, 51, 51, 0.7); + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-size: 18px; + font-size: 1.8rem; + font-style: italic; + line-height: 1.6667; + margin-bottom: 1.6667em; + padding-left: 0.7778em; +} + +blockquote p { + margin-bottom: 1.6667em; +} + +blockquote > p:last-child { + margin-bottom: 0; +} + +blockquote cite, +blockquote small { + color: #333; + font-size: 15px; + font-size: 1.5rem; + font-family: "Noto Sans", sans-serif; + line-height: 1.6; +} + +blockquote em, +blockquote i, +blockquote cite { + font-style: normal; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +address { + font-style: italic; + margin: 0 0 1.6em; +} + +code, +kbd, +tt, +var, +samp, +pre { + font-family: Inconsolata, monospace; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre { + background-color: transparent; + background-color: rgba(0, 0, 0, 0.01); + border: 1px solid #eaeaea; + border: 1px solid rgba(51, 51, 51, 0.1); + line-height: 1.2; + margin-bottom: 1.6em; + max-width: 100%; + overflow: auto; + padding: 0.8em; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +abbr[title] { + border-bottom: 1px dotted #eaeaea; + border-bottom: 1px dotted rgba(51, 51, 51, 0.1); + cursor: help; +} + +mark, +ins { + background-color: #fff9c0; + text-decoration: none; +} + +sup, +sub { + font-size: 75%; + height: 0; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + bottom: 1ex; +} + +sub { + top: .5ex; +} + +small { + font-size: 75%; +} + +big { + font-size: 125%; +} + + +/** + * 4.0 Elements + */ + +hr { + background-color: #eaeaea; + background-color: rgba(51, 51, 51, 0.1); + border: 0; + height: 1px; + margin-bottom: 1.6em; +} + +ul, +ol { + margin: 0 0 1.6em 1.3333em; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li > ul, +li > ol { + margin-bottom: 0; +} + +dl { + margin-bottom: 1.6em; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: 1.6em; +} + +table, +th, +td { + border: 1px solid #eaeaea; + border: 1px solid rgba(51, 51, 51, 0.1); +} + +table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin: 0 0 1.6em; + table-layout: fixed; /* Prevents HTML tables from becoming too wide */ + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +th { + border-width: 0 1px 1px 0; + font-weight: 700; +} + +td { + border-width: 0 1px 1px 0; +} + +th, td { + padding: 0.4em; +} + +img { + -ms-interpolation-mode: bicubic; + border: 0; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +figure { + margin: 0; +} + +del { + opacity: 0.8; +} + +/* Placeholder text color -- selectors need to be separate to work. */ + +::-webkit-input-placeholder { + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; +} + +:-moz-placeholder { + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; +} + +::-moz-placeholder { + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + opacity: 1; /* Since FF19 lowers the opacity of the placeholder by default */ +} + +:-ms-input-placeholder { + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; +} + + +/** + * 5.0 Forms + */ + +button, +input, +select, +textarea { + background-color: #f7f7f7; + border-radius: 0; + font-size: 16px; + font-size: 1.6rem; + line-height: 1.5; + margin: 0; + max-width: 100%; + vertical-align: baseline; +} + +button, +input { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + line-height: normal; +} + +input, +textarea { + background-image: -webkit-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0)); /* Removing the inner shadow on iOS inputs */ + border: 1px solid #eaeaea; + border: 1px solid rgba(51, 51, 51, 0.1); + color: #707070; + color: rgba(51, 51, 51, 0.7); +} + +input:focus, +textarea:focus { + background-color: #fff; + border: 1px solid #c1c1c1; + border: 1px solid rgba(51, 51, 51, 0.3); + color: #333; +} + +input:focus, +select:focus { + outline: 2px solid #c1c1c1; + outline: 2px solid rgba(51, 51, 51, 0.3); +} + +button[disabled], +input[disabled], +select[disabled], +textarea[disabled] { + cursor: default; + opacity: .5; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + background-color: #333; + border: 0; + color: #fff; + cursor: pointer; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 700; + padding: 0.7917em 1.5em; + text-transform: uppercase; +} + +button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover, +button:focus, +input[type="button"]:focus, +input[type="reset"]:focus, +input[type="submit"]:focus { + background-color: #707070; + background-color: rgba(51, 51, 51, 0.7); + outline: 0; +} + +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +textarea { + padding: 0.375em; + width: 100%; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +textarea:focus { + outline: 0; +} + +.post-password-form { + position: relative; +} + +.post-password-form label { + color: #707070; + color: rgba(51, 51, 51, 0.7); + display: block; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 700; + letter-spacing: 0.04em; + line-height: 1.5; + text-transform: uppercase; +} + +.post-password-form input[type="submit"] { + padding: 0.7917em; + position: absolute; + right: 0; + bottom: 0; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; +} + +.search-form input[type="submit"], +.widget .search-form input[type="submit"] { + padding: 0; +} + + +/** + * 6.0 Navigations + */ + + +/** + * 6.1 Links + */ + +a { + color: #333; + text-decoration: none; +} + +a:hover, +a:focus { + color: #707070; + color: rgba(51, 51, 51, 0.7); +} + + +/** + * 6.2 Menus + */ + +.main-navigation a { + display: block; + padding: 0.8em 0; + position: relative; + text-decoration: none; +} + +.main-navigation ul { + list-style: none; + margin: 0; +} + +.main-navigation ul ul { + display: none; + margin-left: 0.8em; +} + +.main-navigation ul .toggled-on { + display: block; +} + +.main-navigation li { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + position: relative; +} + +.main-navigation .current-menu-item > a, +.main-navigation .current-menu-ancestor > a { + font-weight: 700; +} + +.main-navigation .nav-menu > ul > li:first-child, +.main-navigation .nav-menu > li:first-child { + border-top: 0; +} + +.main-navigation .menu-item-has-children > a { + padding-right: 48px; +} + +.main-navigation .menu-item-description { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 400; + line-height: 1.5; + margin-top: 0.5em; +} + +.no-js .main-navigation ul ul { + display: block; +} + +.dropdown-toggle { + background-color: transparent; + border: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + content: ""; + height: 42px; + padding: 0; + position: absolute; + text-transform: lowercase; /* Stop screen readers to read the text as capital letters */ + top: 3px; + right: 0; + width: 42px; +} + +.dropdown-toggle:after { + color: #333; + content: "\f431"; + font-size: 24px; + line-height: 42px; + position: relative; + top: 0; + left: 1px; + width: 42px; +} + +.dropdown-toggle:hover, +.dropdown-toggle:focus { + background-color: #eaeaea; + background-color: rgba(51, 51, 51, 0.1); +} + +.dropdown-toggle:focus { + outline: 1px solid #c1c1c1; + outline: 1px solid rgba(51, 51, 51, 0.3); +} + +.dropdown-toggle.toggle-on:after { + content: "\f432"; +} + +.social-navigation { + margin: 9.0909% 0; +} + +.social-navigation ul { + list-style: none; + margin: 0 0 -1.6em 0; +} + +.social-navigation li { + float: left; +} + +.social-navigation a { + display: block; + height: 3.2em; + position: relative; + width: 3.2em; +} + +.social-navigation a:before { + content: "\f415"; + font-size: 24px; + position: absolute; + top: 0; + left: 0; +} + +.social-navigation a[href*="codepen.io"]:before { + content: "\f216"; +} + +.social-navigation a[href*="digg.com"]:before { + content: "\f221"; +} + +.social-navigation a[href*="dribbble.com"]:before { + content: "\f201"; +} + +.social-navigation a[href*="dropbox.com"]:before { + content: "\f225"; +} + +.social-navigation a[href*="facebook.com"]:before { + content: "\f203"; +} + +.social-navigation a[href*="flickr.com"]:before { + content: "\f211"; +} + +.social-navigation a[href*="foursquare.com"]:before { + content: "\f226"; +} + +.social-navigation a[href*="plus.google.com"]:before { + content: "\f206"; +} + +.social-navigation a[href*="github.com"]:before { + content: "\f200"; +} + +.social-navigation a[href*="instagram.com"]:before { + content: "\f215"; +} + +.social-navigation a[href*="linkedin.com"]:before { + content: "\f208"; +} + +.social-navigation a[href*="pinterest.com"]:before { + content: "\f210"; +} + +.social-navigation a[href*="getpocket.com"]:before { + content: "\f224"; +} + +.social-navigation a[href*="polldaddy.com"]:before { + content: "\f217"; +} + +.social-navigation a[href*="reddit.com"]:before { + content: "\f222"; +} + +.social-navigation a[href*="stumbleupon.com"]:before { + content: "\f223"; +} + +.social-navigation a[href*="tumblr.com"]:before { + content: "\f214"; +} + +.social-navigation a[href*="twitter.com"]:before { + content: "\f202"; +} + +.social-navigation a[href*="vimeo.com"]:before { + content: "\f212"; +} + +.social-navigation a[href*="wordpress.com"]:before, +.social-navigation a[href*="wordpress.org"]:before { + content: "\f205"; +} + +.social-navigation a[href*="youtube.com"]:before { + content: "\f213"; +} + +.social-navigation a[href*="mailto:"]:before { + content: "\f410"; +} + +.social-navigation a[href*="spotify.com"]:before { + content: "\f515"; +} + +.social-navigation a[href*="twitch.tv"]:before { + content: "\f516"; +} + +.social-navigation a[href$="/feed/"]:before { + content: "\f413"; +} + +.social-navigation a[href*="path.com"]:before { + content: "\f219"; +} + +.social-navigation a[href*="skype.com"]:before { + content: "\f220"; +} + +.secondary-toggle { + background-color: transparent; + border: 1px solid #eaeaea; + border: 1px solid rgba(51, 51, 51, 0.1); + height: 42px; + overflow: hidden; + padding: 0; + position: absolute; + top: 50%; + right: 0; + text-align: center; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 42px; +} + +.secondary-toggle:before { + color: #333; + content: "\f419"; + line-height: 40px; + width: 40px; +} + +.secondary-toggle:hover, +.secondary-toggle:focus { + background-color: transparent; + border: 1px solid #c1c1c1; + border: 1px solid rgba(51, 51, 51, 0.3); + outline: 0; +} + +.secondary-toggle.toggled-on:before { + content: "\f405"; + font-size: 32px; + position: relative; + top: 1px; + left: -1px; +} + +.post-navigation { + background-color: #fff; + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + font-weight: 700; +} + +.post-navigation a { + display: block; + padding: 3.8461% 7.6923%; +} + +.post-navigation span { + display: block; +} + +.post-navigation .meta-nav { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + letter-spacing: 0.04em; + line-height: 1.5; + position: relative; + text-transform: uppercase; + z-index: 2; +} + +.post-navigation .post-title { + font-family: "Noto Serif", serif; + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; + position: relative; + z-index: 2; +} + +.post-navigation .nav-next, +.post-navigation .nav-previous { + background-position: center; + background-size: cover; + position: relative; +} + +.post-navigation a:before { + content: ""; + display: block; + height: 100%; + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 1; +} + +.post-navigation a:hover:before, +.post-navigation a:focus:before { + opacity: 0.5; +} + +.post-navigation .meta-nav { + opacity: 0.8; +} + +.post-navigation div + div { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); +} + +.pagination { + background-color: #fff; + border-top: 1px solid rgba(51, 51, 51, 0.1); + font-family: "Noto Sans", sans-serif; +} + +.pagination .nav-links { + min-height: 3.2em; + position: relative; + text-align: center; +} + +/* reset screen-reader-text */ +.pagination .current .screen-reader-text { + position: static !important; +} + +.pagination .page-numbers { + display: none; + line-height: 3.2em; + padding: 0 0.6667em; +} + +.pagination .page-numbers.current { + text-transform: uppercase; +} + +.pagination .current { + display: inline-block; + font-weight: 700; +} + +.pagination .prev, +.pagination .next { + -webkit-tap-highlight-color: rgba(255, 255, 255, 0.3); + background-color: #333; + color: #fff; + display: inline-block; + height: 48px; + overflow: hidden; + padding: 0; + position: absolute; + width: 48px; +} + +.pagination .prev:before, +.pagination .next:before { + font-size: 32px; + height: 48px; + line-height: 48px; + position: relative; + width: 48px; +} + +.pagination .prev:hover, +.pagination .prev:focus, +.pagination .next:hover, +.pagination .next:focus { + background-color: #707070; + background-color: rgba(51, 51, 51, 0.7); +} + +.pagination .prev { + left: 0; +} + +.pagination .prev:before { + content: "\f430"; + left: -1px; +} + +.pagination .next { + right: 0; +} + +.pagination .next:before { + content: "\f429"; + right: -1px; +} + +.image-navigation, +.comment-navigation { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-size: 12px; + font-size: 1.2rem; + font-family: "Noto Sans", sans-serif; + font-weight: 700; + line-height: 1.5; + text-transform: uppercase; +} + +.image-navigation a, +.comment-navigation a { + color: #707070; + color: rgba(51, 51, 51, 0.7); +} + +.image-navigation a:hover, +.image-navigation a:focus, +.comment-navigation a:hover, +.comment-navigation a:focus { + color: #333; +} + +.image-navigation .nav-previous:not(:empty), +.image-navigation .nav-next:not(:empty), +.comment-navigation .nav-previous:not(:empty), +.comment-navigation .nav-next:not(:empty) { + display: inline-block; +} + +.image-navigation .nav-previous:not(:empty) + .nav-next:not(:empty):before, +.comment-navigation .nav-previous:not(:empty) + .nav-next:not(:empty):before { + content: "\2215"; + font-weight: 400; + margin: 0 0.7em; +} + +.image-navigation .nav-previous a:before, +.comment-navigation .nav-previous a:before { + content: "\f430"; + margin-right: 0.2em; + position: relative; +} + +.image-navigation .nav-next a:after, +.comment-navigation .nav-next a:after { + content: "\f429"; + margin-left: 0.2em; + position: relative; +} + +.comment-navigation { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + border-bottom: 1px solid #eaeaea; + border-bottom: 1px solid rgba(51, 51, 51, 0.1); + padding: 2em 0; +} + +.comments-title + .comment-navigation { + border-bottom: 0; +} + +.image-navigation { + padding: 0 7.6923%; +} + +.image-navigation .nav-previous:not(:empty), +.image-navigation .nav-next:not(:empty) { + margin-bottom: 2em; +} + + +/** + * 7.0 Accessibility + */ + +/* Text meant only for screen readers */ +.says, +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + overflow: hidden; + position: absolute !important; + width: 1px; +} + +/* must have higher specificity than alternative color schemes inline styles */ +.site .skip-link { + background-color: #f1f1f1; + box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.2); + color: #21759b; + display: block; + font: bold 14px/normal "Noto Sans", sans-serif; + left: -9999em; + outline: none; + padding: 15px 23px 14px; + text-decoration: none; + text-transform: none; + top: -9999em; +} + +.logged-in .site .skip-link { + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + font: bold 14px/normal "Open Sans", sans-serif; +} + +.site .skip-link:focus { + clip: auto; + height: auto; + left: 6px; + top: 7px; + width: auto; + z-index: 100000; +} + + +/** + * 8.0 Alignments + */ + +.alignleft { + display: inline; + float: left; +} + +.alignright { + display: inline; + float: right; +} + +.aligncenter { + display: block; + margin-right: auto; + margin-left: auto; +} + +blockquote.alignleft, +.wp-caption.alignleft, +img.alignleft { + margin: 0.4em 1.6em 1.6em 0; +} + +blockquote.alignright, +.wp-caption.alignright, +img.alignright { + margin: 0.4em 0 1.6em 1.6em; +} + +blockquote.aligncenter, +.wp-caption.aligncenter, +img.aligncenter { + clear: both; + margin-top: 0.4em; + margin-bottom: 1.6em; +} + +.wp-caption.alignleft, +.wp-caption.alignright, +.wp-caption.aligncenter { + margin-bottom: 1.2em; +} + + +/** + * 9.0 Clearings + */ + +.clear:before, +.clear:after, +.site:before, +.site:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-content:before, +.site-content:after, +.nav-links:before, +.nav-links:after, +.comment-navigation:before, +.comment-navigation:after, +.social-navigation ul:before, +.social-navigation ul:after, +.textwidget:before, +.textwidget:after { + content: ""; + display: table; +} + +.clear:after, +.site:after, +.entry-content:after, +.comment-content:after, +.site-content:after, +.nav-links:after, +.comment-navigation:after, +.social-navigation ul:after, +.textwidget:after { + clear: both; +} + + +/** + * 10.0 Header + */ + +.site-header { + background-color: #fff; + border-bottom: 1px solid rgba(51, 51, 51, 0.1); + padding: 7.6923%; +} + +.site-branding { + min-height: 2em; + padding-right: 60px; + position: relative; +} + +.site-title { + font-family: "Noto Sans", sans-serif; + font-size: 22px; + font-size: 2.2rem; + font-weight: 700; + line-height: 1.3636; + margin-bottom: 0; +} + +.custom-logo { + max-height: 84px; + width: auto; +} + +.wp-custom-logo .site-title { + margin-top: 0.545454545em; +} + +.site-description { + display: none; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 400; + line-height: 1.5; + margin: 0.5em 0 0; + opacity: 0.7; +} + + +/** + * 11.0 Widgets + */ + +.widget { + color: #707070; + color: rgba(51, 51, 51, 0.7); + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + margin: 0 auto 9.09090%; + width: 100%; + word-wrap: break-word; +} + +.widget pre { + line-height: 1.2; +} + +.widget button, +.widget input, +.widget select, +.widget textarea { + font-size: 16px; + font-size: 1.6rem; + line-height: 1.5; +} + +.widget button, +.widget input { + line-height: normal; +} + +.widget button, +.widget input[type="button"], +.widget input[type="reset"], +.widget input[type="submit"] { + font-size: 12px; + font-size: 1.2rem; + padding: 0.7917em 1.5833em; +} + +.widget input[type="text"], +.widget input[type="email"], +.widget input[type="url"], +.widget input[type="password"], +.widget input[type="search"], +.widget textarea { + padding: 0.375em; +} + +.widget-title { + color: #333; + font-family: "Noto Sans", sans-serif; + margin: 0 0 1.6em; + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.widget > :last-child { + margin-bottom: 0; +} + +.widget_calendar table { + margin: 0; +} + +.widget_calendar td, +.widget_calendar th { + line-height: 2.3333; + text-align: center; + padding: 0; +} + +.widget_calendar caption { + font-family: "Noto Serif", serif; + font-weight: 700; + margin: 0 0 1.6em; + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.widget_calendar tbody a { + -webkit-tap-highlight-color: rgba(255, 255, 255, 0.3); + background-color: #333; + color: #fff; + display: block; + font-weight: 700; +} + +.widget_calendar tbody a:hover, +.widget_calendar tbody a:focus { + background-color: #707070; + background-color: rgba(51, 51, 51, 0.7); + color: #fff; +} + +.widget_archive a, +.widget_categories a, +.widget_links a, +.widget_meta a, +.widget_nav_menu a, +.widget_pages a, +.widget_recent_comments a, +.widget_recent_entries a { + border: 0; +} + +.widget_archive ul, +.widget_categories ul, +.widget_links ul, +.widget_meta ul, +.widget_nav_menu ul, +.widget_pages ul, +.widget_recent_comments ul, +.widget_recent_entries ul { + list-style: none; + margin: 0; +} + +.widget_archive li, +.widget_categories li, +.widget_links li, +.widget_meta li, +.widget_nav_menu li, +.widget_pages li, +.widget_recent_comments li, +.widget_recent_entries li { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + padding: 0.7667em 0; +} + +.widget_archive li:first-child, +.widget_categories li:first-child, +.widget_links li:first-child, +.widget_meta li:first-child, +.widget_nav_menu li:first-child, +.widget_pages li:first-child, +.widget_recent_comments li:first-child, +.widget_recent_entries li:first-child { + border-top: 0; + padding-top: 0; +} + +.widget_archive li:last-child, +.widget_categories li:last-child, +.widget_links li:last-child, +.widget_meta li:last-child, +.widget_nav_menu li:last-child, +.widget_pages li:last-child, +.widget_recent_comments li:last-child, +.widget_recent_entries li:last-child { + padding-bottom: 0; +} + +.widget_categories .children, +.widget_nav_menu .sub-menu, +.widget_pages .children { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + margin: 0.7667em 0 0 0.8em; + padding-top: 0.7667em; +} + +.widget_recent_entries .post-date { + display: block; +} + +.widget_rss ul { + list-style: none; + margin: 0; +} + +.widget_rss li { + margin-bottom: 1.6em; +} + +.widget_rss ul:last-child, +.widget_rss li:last-child { + margin-bottom: 0; +} + +.widget_rss .rsswidget { + border: 0; + font-weight: 700; +} + +.widget_rss .rsswidget img { + margin-top: -4px; +} + +.widget_rss .rss-date, +.widget_rss cite { + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-style: normal; + display: block; + line-height: 2; + opacity: 0.8; +} + +.textwidget > :last-child { + margin-bottom: 0; +} + +.textwidget a { + border-bottom: 1px solid #333; +} + +.textwidget a:hover, +.textwidget a:focus { + border-bottom: 0; +} + +.textwidget ul, +.textwidget ol { + margin-left: 1.6em; +} + +.tagcloud ul { + list-style-type: none; +} + +.tagcloud ul li { + display: inline-block; +} + +/** + * 12.0 Content + */ + +.secondary { + background-color: #fff; + display: none; + padding: 0 7.6923%; +} + +.secondary.toggled-on { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + display: block; +} + +.widget-area { + margin: 9.09090% auto 0; +} + +.site-footer { + background-color: #fff; + border-top: 1px solid rgba(51, 51, 51, 0.1); + padding: 3.84615% 7.6923%; +} + + +/** + * 12.1 Posts and pages + */ + +.hentry { + background-color: #fff; + padding-top: 7.6923%; + position: relative; +} + +.hentry.has-post-thumbnail { + padding-top: 0; +} + +.hentry.sticky:not(.has-post-thumbnail) { + padding-top: -webkit-calc(7.6923% + 24px); + padding-top: calc(7.6923% + 24px); +} + +.hentry + .hentry { + border-top: 1px solid rgba(51, 51, 51, 0.1); +} + +.post-thumbnail { + border: 0; + display: block; + margin-bottom: 2.4em; +} +.post-thumbnail img { + display: block; + margin: 0 auto; +} + +a.post-thumbnail:hover, +a.post-thumbnail:focus { + opacity: 0.85; +} + +.entry-header { + padding: 0 7.6923%; +} + +.entry-title { + font-size: 26px; + font-size: 2.6rem; + line-height: 1.1538; + margin-bottom: 0.9231em; +} + +.entry-content, +.entry-summary { + padding: 0 7.6923% 7.6923%; +} + +.entry-content > :last-child, +.entry-summary > :last-child { + margin-bottom: 0; +} + +.entry-content, +.entry-summary, +.page-content, +.comment-content { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.entry-content h1, +.entry-summary h1, +.page-content h1, +.comment-content h1 { + font-size: 26px; + font-size: 2.6rem; + line-height: 1.1538; + margin-top: 1.8462em; + margin-bottom: 0.9231em; +} + +.entry-content h2, +.entry-summary h2, +.page-content h2, +.comment-content h2 { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.3636; + margin-top: 2.1818em; + margin-bottom: 1.0909em; +} + +.entry-content h3, +.entry-summary h3, +.page-content h3, +.comment-content h3 { + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; + margin-top: 2.6667em; + margin-bottom: 1.3333em; +} + +.entry-content h4, +.entry-content h5, +.entry-content h6, +.entry-summary h4, +.entry-summary h5, +.entry-summary h6, +.page-content h4, +.page-content h5, +.page-content h6, +.comment-content h4, +.comment-content h5, +.comment-content h6 { + font-size: 15px; + font-size: 1.5rem; + line-height: 1.2; + margin-top: 3.2em; + margin-bottom: 1.6em; +} + +.entry-content h5, +.entry-content h6, +.entry-summary h5, +.entry-summary h6, +.page-content h5, +.page-content h6, +.comment-content h5, +.comment-content h6 { + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.entry-content > h1:first-child, +.entry-content > h2:first-child, +.entry-content > h3:first-child, +.entry-content > h4:first-child, +.entry-content > h5:first-child, +.entry-content > h6:first-child, +.entry-summary > h1:first-child, +.entry-summary > h2:first-child, +.entry-summary > h3:first-child, +.entry-summary > h4:first-child, +.entry-summary > h5:first-child, +.entry-summary > h6:first-child, +.page-content > h1:first-child, +.page-content > h2:first-child, +.page-content > h3:first-child, +.page-content > h4:first-child, +.page-content > h5:first-child, +.page-content > h6:first-child, +.comment-content > h1:first-child, +.comment-content > h2:first-child, +.comment-content > h3:first-child, +.comment-content > h4:first-child, +.comment-content > h5:first-child, +.comment-content > h6:first-child { + margin-top: 0; +} + +.entry-content a, +.entry-summary a, +.page-content a, +.comment-content a, +.pingback .comment-body > a { + border-bottom: 1px solid #333; +} + +.entry-content a:hover, +.entry-content a:focus, +.entry-summary a:hover, +.entry-summary a:focus, +.page-content a:hover, +.page-content a:focus, +.comment-content a:hover, +.comment-content a:focus, +.pingback .comment-body > a:hover, +.pingback .comment-body > a:focus { + border-bottom: 0; +} + +.entry-content a img, +.entry-summary a img, +.page-content a img, +.comment-content a img { + display: block; +} + +.entry-content .more-link, +.entry-summary .more-link:after { + white-space: nowrap; +} + +.entry-content .more-link:after, +.entry-summary .more-link:after { + content: "\f429"; + font-size: 16px; + position: relative; + top: 5px; +} + +.author-info { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + margin: 0 7.6923%; + padding: 7.6923% 0; +} + +.author-info .avatar { + float: left; + height: 36px; + margin: 0 1.6em 1.6em 0; + width: 36px; +} + +.author-heading { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + letter-spacing: 0.04em; + margin-bottom: 1.5em; + text-transform: uppercase; +} + +.author-title { + clear: none; +} + +.author-bio { + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + overflow: hidden; + padding-bottom: 1px; +} + +.author-description { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.author-description a { + border-bottom: 1px solid #333; +} + +.author-description a:hover, +.author-description a:focus { + border-bottom: 0; +} + +.author-description > :last-child { + margin-bottom: 0; +} + +.author-link { + white-space: nowrap; +} + +.author-link:after { + content: "\f429"; + position: relative; + top: 1px; +} + +.entry-footer { + background-color: #f7f7f7; + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + padding: 3.8461% 7.6923%; +} + +.entry-footer a { + border-bottom: 1px solid transparent; + color: #707070; + color: rgba(51, 51, 51, 0.7); +} + +.entry-footer a:hover { + border-bottom: 1px solid #333; +} + +.entry-footer a:hover, +.entry-footer a:focus { + color: #333; +} + +.sticky-post { + background-color: #333; + color: #fff; + font-weight: 700; + letter-spacing: 0.04em; + padding: 0.25em 0.5em; + position: absolute; + top: 0; + text-transform: uppercase; +} + +.updated:not(.published) { + display: none; +} + +.sticky .posted-on { + display: none; +} + +.posted-on:before, +.byline:before, +.cat-links:before, +.tags-links:before, +.comments-link:before, +.entry-format:before, +.edit-link:before, +.full-size-link:before { + margin-right: 2px; + position: relative; +} + +.posted-on, +.byline, +.cat-links, +.tags-links, +.comments-link, +.entry-format, +.full-size-link { + margin-right: 1em; +} + +.format-aside .entry-format:before { + content: "\f101"; +} + +.format-image .entry-format:before { + content: "\f473"; +} + +.format-gallery .entry-format:before { + content: "\f103"; +} + +.format-video .entry-format:before { + content: "\f104"; +} + +.format-status .entry-format:before { + content: "\f105"; +} + +.format-quote .entry-format:before { + content: "\f106"; +} + +.format-link .entry-format:before { + content: "\f107"; +} + +.format-chat .entry-format:before { + content: "\f108"; +} + +.format-audio .entry-format:before { + content: "\f109"; +} + +.posted-on:before { + content: "\f307"; +} + +.byline:before { + content: "\f304"; +} + +.cat-links:before { + content: "\f301"; +} + +.tags-links:before { + content: "\f302"; +} + +.comments-link:before { + content: "\f300"; +} + +.full-size-link:before { + content: "\f402"; +} + +.edit-link:before { + content: "\f411"; +} + +.comments-link, +.edit-link { + white-space: nowrap; +} + +.page-header { + background-color: #fff; + border-bottom: 1px solid rgba(51, 51, 51, 0.1); + padding: 7.6923%; +} + +.page-title { + font-family: "Noto Serif", serif; + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; +} + +.taxonomy-description { + color: #707070; + color: rgba(51, 51, 51, 0.7); + padding-top: 0.4em; +} + +.taxonomy-description a { + border-bottom: 1px solid #333; +} + +.taxonomy-description a:hover, +.taxonomy-description a:focus { + border-bottom: 0; +} + +.taxonomy-description > :last-child { + margin-bottom: 0; +} + +.page-content { + background-color: #fff; + padding: 7.6923%; +} + +.page-content > :last-child { + margin-bottom: 0; +} + +.page-links { + clear: both; + font-family: "Noto Sans", sans-serif; + margin-bottom: 1.3333em; +} + +.page-links a, +.page-links > span { + border: 1px solid #eaeaea; + border: 1px solid rgba(51, 51, 51, 0.1); + display: inline-block; + font-size: 12px; + font-size: 1.2rem; + height: 2em; + line-height: 2; + margin: 0 0.3333em 0.3333em 0; + text-align: center; + width: 2em; +} + +.page-links a { + -webkit-tap-highlight-color: rgba(255, 255, 255, 0.3); + background-color: #333; + border-color: #333; + color: #fff; +} + +.page-links a:hover, +.page-links a:focus { + background-color: #707070; + background-color: rgba(51, 51, 51, 0.7); + border-color: transparent; + color: #fff; +} + +.page-links > .page-links-title { + border: 0; + color: #707070; + color: rgba(51, 51, 51, 0.7); + height: auto; + margin: 0; + padding-right: 0.5em; + width: auto; +} + +.entry-attachment { + margin-bottom: 1.6em; +} + +.type-attachment .entry-title { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.entry-caption { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + line-height: 1.5; + padding-top: 0.5em; + word-wrap: break-word; +} + +.entry-caption > :last-child { + margin-bottom: 0; +} + + +/** + * 12.2 Post Formats + */ + +.format-aside .entry-title, +.format-image .entry-title, +.format-video .entry-title, +.format-quote .entry-title, +.format-gallery .entry-title, +.format-status .entry-title, +.format-link .entry-title, +.format-audio .entry-title, +.format-chat .entry-title { + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; + margin-bottom: 1.3333em; +} + +.format-link .entry-title a:after { + content: "\f442"; + font-size: 24px; + height: 24px; + position: relative; + top: 0; + width: 24px; +} + +.blog .format-status .entry-title, +.archive .format-status .entry-title { + display: none; +} + + +/** + * 12.3 Comments + */ + +.comments-area { + background-color: #fff; + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + padding: 7.6923%; +} + +.comments-area > :last-child { + margin-bottom: 0; +} + +.comment-list + .comment-respond { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); +} + +.comment-list + .comment-respond, +.comment-navigation + .comment-respond { + padding-top: 1.6em; +} + +.comments-title, +.comment-reply-title { + font-family: "Noto Serif", serif; + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; +} + +.comments-title { + margin-bottom: 1.3333em; +} + +.comment-list { + list-style: none; + margin: 0; +} + +.comment-list article, +.comment-list .pingback, +.comment-list .trackback { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + padding: 1.6em 0; +} + +.comment-list .children { + list-style: none; + margin: 0; +} + +.comment-list .children > li { + padding-left: 0.8em; +} + +.comment-author { + color: #707070; + color: rgba(51, 51, 51, 0.7); + margin-bottom: 0.4em; +} + +.comment-author a:hover { + border-bottom: 1px solid #707070; + border-bottom: 1px solid rgba(51, 51, 51, 0.7); +} + +.comment-author .avatar { + float: left; + height: 24px; + margin-right: 0.8em; + width: 24px; +} + +.bypostauthor > article .fn:after { + content: "\f304"; + position: relative; + top: 5px; + left: 3px; +} + +.comment-metadata, +.pingback .edit-link { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; +} + +.comment-metadata a, +.pingback .edit-link a { + color: #707070; + color: rgba(51, 51, 51, 0.7); +} + +.comment-metadata a:hover, +.pingback .edit-link a:hover { + border-bottom: 1px solid #333; +} + +.comment-metadata a:hover, +.comment-metadata a:focus, +.pingback .edit-link a:hover, +.pingback .edit-link a:focus { + color: #333; +} + +.comment-metadata { + margin-bottom: 1.6em; +} + +.comment-metadata .edit-link { + margin-left: 1em; +} + +.pingback .edit-link { + margin-left: 1em; +} + +.pingback .edit-link:before { + top: 5px; +} + +.comment-content ul, +.comment-content ol { + margin: 0 0 1.6em 1.3333em; +} + +.comment-content li > ul, +.comment-content li > ol { + margin-bottom: 0; +} + +.comment-content > :last-child { + margin-bottom: 0; +} + +.comment-list .reply { + font-size: 12px; + font-size: 1.2rem; +} + +.comment-list .reply a { + border: 1px solid #eaeaea; + border: 1px solid rgba(51, 51, 51, 0.1); + color: #707070; + color: rgba(51, 51, 51, 0.7); + display: inline-block; + font-family: "Noto Sans", sans-serif; + font-weight: 700; + line-height: 1; + margin-top: 2em; + padding: 0.4167em 0.8333em; + text-transform: uppercase; +} + +.comment-list .reply a:hover, +.comment-list .reply a:focus { + border-color: #333; + color: #333; + outline: 0; +} + +.comment-form { + padding-top: 1.6em; +} + +.comment-form label { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 700; + display: block; + letter-spacing: 0.04em; + line-height: 1.5; + text-transform: uppercase; +} + +.comment-form input[type="text"], +.comment-form input[type="email"], +.comment-form input[type="url"], +.comment-form input[type="submit"] { + width: 100%; +} + +.comment-notes, +.comment-awaiting-moderation, +.logged-in-as, +.form-allowed-tags { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + margin-bottom: 2em; +} + +.logged-in-as a:hover { + border-bottom: 1px solid #333; +} + +.no-comments { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-weight: 700; + padding-top: 1.6em; +} + +.comment-navigation + .no-comments { + border-top: 0; +} + +.form-allowed-tags code { + font-family: Inconsolata, monospace; +} + +.form-submit { + margin-bottom: 0; +} + +.required { + color: #c0392b; +} + +.comment-reply-title small { + font-size: 100%; +} + +.comment-reply-title small a { + border: 0; + float: right; + height: 32px; + overflow: hidden; + width: 26px; +} + +.comment-reply-title small a:before { + content: "\f405"; + font-size: 32px; + position: relative; + top: -3px; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 10px 0 0; +} + +.comment-form .comment-form-cookies-consent label { + display: inline; + font-size: 12px; + font-size: 1.2rem; + font-weight: normal; + letter-spacing: 0; + text-transform: none; +} + +/** + * 13.0 Footer + */ + +.site-info { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; +} + +.site-info a { + border-bottom: 1px solid transparent; + color: #707070; + color: rgba(51, 51, 51, 0.7); +} + +.site-info a:hover { + border-bottom: 1px solid #333; +} + +.site-info a:hover, +.site-info a:focus { + color: #333; +} + +.site-info span[role=separator] { + padding: 0 0.25em 0 0.5em; +} + +.site-info span[role=separator]::before { + content: '\002f'; +} + +/** + * 14.0 Media + */ + +.site .avatar { + border-radius: 50%; +} + +.page-content img.wp-smiley, +.entry-content img.wp-smiley, +.comment-content img.wp-smiley { + border: none; + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +audio, +canvas { + display: inline-block; +} + +embed, +iframe, +object, +video { + margin-bottom: 1.6em; + max-width: 100%; + vertical-align: middle; +} + +p > embed, +p > iframe, +p > object, +p > video { + margin-bottom: 0; +} + +.wp-audio-shortcode, +.wp-video, +.wp-playlist.wp-audio-playlist { + font-size: 15px; + font-size: 1.5rem; + margin-top: 0; + margin-bottom: 1.6em; +} + +.wp-playlist.wp-playlist { + padding-bottom: 0; +} + +.wp-playlist .wp-playlist-tracks { + margin-top: 0; +} + +.wp-playlist-item .wp-playlist-caption { + border-bottom: 0; + padding: 10px 0; +} + +.wp-playlist-item .wp-playlist-item-length { + top: 10px; +} + + +/** + * 14.1 Captions + */ + +.wp-caption { + margin-bottom: 1.6em; + max-width: 100%; +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin: 0; +} + +.wp-caption-text { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + padding: 0.5em 0; +} + + +/** + * 14.2 Galleries + */ + +.gallery { + margin-bottom: 1.6em; +} + +.gallery-item { + display: inline-block; + padding: 1.79104477%; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; +} + +.gallery-columns-3 .gallery-item { + max-width: 33.33%; +} + +.gallery-columns-4 .gallery-item { + max-width: 25%; +} + +.gallery-columns-5 .gallery-item { + max-width: 20%; +} + +.gallery-columns-6 .gallery-item { + max-width: 16.66%; +} + +.gallery-columns-7 .gallery-item { + max-width: 14.28%; +} + +.gallery-columns-8 .gallery-item { + max-width: 12.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 11.11%; +} + +.gallery-icon img { + margin: 0 auto; +} + +.gallery-caption { + color: #707070; + color: rgba(51, 51, 51, 0.7); + display: block; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + padding: 0.5em 0; +} + +.gallery-columns-6 .gallery-caption, +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 15.0 Multisite + */ + +.widecolumn { + background-color: #fff; + padding: 7.6923%; +} + +.widecolumn .mu_register { + width: auto; +} + +.widecolumn .mu_alert { + margin-bottom: 1.6em; +} + +.widecolumn form, +.widecolumn .mu_register form { + margin-top: 0; +} + +.widecolumn h2 { + font-size: 26px; + font-size: 2.6rem; + line-height: 1.1538; + margin-bottom: 0.9231em; +} + +.widecolumn p { + margin: 1.6em 0; +} + +.widecolumn p + h2 { + margin-top: 1.8462em; +} + +.widecolumn label, +.widecolumn .mu_register label { + color: #707070; + color: rgba(51, 51, 51, 0.7); + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 700; + letter-spacing: 0.04em; + line-height: 1.5; + text-transform: uppercase; +} + +.widecolumn .mu_register label { + margin: 2em 0 0; +} + +.widecolumn #key, +.widecolumn .mu_register #blog_title, +.widecolumn .mu_register #user_email, +.widecolumn .mu_register #blogname, +.widecolumn .mu_register #user_name { + font-size: 16px; + font-size: 1.6rem; + width: 100%; +} + +.widecolumn .mu_register #blogname { + margin: 0; +} + +.widecolumn .mu_register #blog_title, +.widecolumn .mu_register #user_email, +.widecolumn .mu_register #user_name { + margin: 0 0 0.375em; +} + +.widecolumn #submit, +.widecolumn .mu_register input[type="submit"] { + font-size: 12px; + font-size: 1.2rem; + margin: 0; + width: 100%; +} + +.widecolumn .mu_register .prefix_address, +.widecolumn .mu_register .suffix_address { + font-size: inherit; +} + +.widecolumn .mu_register > :last-child, +.widecolumn form > :last-child { + margin-bottom: 0; +} + + +/** + * 16.0 Media Queries + */ + +/* + * Does the same thing as , + * but in the future W3C standard way. -ms- prefix is required for IE10+ to + * render responsive styling in Windows 8 "snapped" views; IE10+ does not honor + * the meta tag. See https://core.trac.wordpress.org/ticket/25888. + */ +@-ms-viewport { + width: device-width; +} + +@viewport { + width: device-width; +} + +/** + * 16.1 Mobile Large 620px + */ + +@media screen and (min-width: 38.75em) { + ul, + ol { + margin-left: 0; + } + + li > ul, + li > ol, + blockquote > ul, + blockquote > ol { + margin-left: 1.3333em; + } + + blockquote { + margin-left: -1em; + } + + blockquote > blockquote { + margin-left: 0; + } + + .site-branding { + min-height: 3.2em; + } + + .site-title { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.0909; + } + + .site-description { + display: block; + } + + .secondary { + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 7.6923% 7.6923% 0; + padding: 7.6923% 7.6923% 0; + } + + .main-navigation { + margin-bottom: 11.1111%; + } + + .main-navigation ul { + border-top: 1px solid rgba(51, 51, 51, 0.1); + border-bottom: 1px solid rgba(51, 51, 51, 0.1); + } + + .main-navigation ul ul { + border-top: 0; + border-bottom: 0; + } + + .social-navigation { + margin-bottom: 11.1111%; + } + + .social-navigation { + margin-top: 0; + } + + .widget-area { + margin-top: 0; + } + + .widget { + margin-bottom: 11.1111%; + } + + .site-main { + padding: 7.6923% 0; + } + + .hentry.sticky:not(.has-post-thumbnail) { + padding-top: inherit; + } + + .hentry, + .page-header, + .page-content { + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 0 7.6923%; + } + + .hentry + .hentry, + .page-header + .hentry, + .page-header + .page-content { + margin-top: 7.6923%; + } + + .hentry + .hentry { + border-top: 0; + } + + .post-thumbnail { + margin-bottom: 2.4em; + } + + .entry-header { + padding: 0 9.0909%; + } + + .entry-content, + .entry-summary { + padding: 0 9.0909% 9.0909%; + } + + .entry-footer { + padding: 4.5454% 9.0909%; + } + + .page-header { + border-bottom: 0; + border-left: 7px solid #333; + padding: 3.8461% 7.6923%; + } + + .page-title, + .taxonomy-description { + margin-left: -7px; + } + + .page-content { + padding: 9.0909%; + } + + .site-footer { + border-top: 0; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 0 7.6923%; + padding: 3.84615% 7.6923%; + } + + .post-navigation { + border-top: 0; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 7.6923% 7.6923% 0; + } + + .post-navigation a { + padding: 4.5454% 9.0909%; + } + + .pagination { + border-top: 0; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 7.6923% 7.6923% 0; + padding: 0; + } + + /* restore screen-reader-text */ + .pagination .current .screen-reader-text { + position: absolute !important; + } + + .pagination .page-numbers { + display: inline-block; + } + + .image-navigation { + padding: 0 9.0909%; + } + + .comments-area { + border-top: 0; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 7.6923% 7.6923% 0; + } + + .comment-content ul, + .comment-content ol { + margin-left: 0; + } + + .comment-content li > ul, + .comment-content li > ol, + .comment-content blockquote > ul, + .comment-content blockquote > ol { + margin-left: 1.3333em; + } + + .widecolumn { + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + margin: 7.6923%; + } +} + + +/** + * 16.2 Tablet Small 740px + */ + +@media screen and (min-width: 46.25em) { + body, + button, + input, + select, + textarea { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.6471; + } + + button, + input { + line-height: normal; + } + + p, + address, + pre, + hr, + ul, + ol, + dl, + dd, + table { + margin-bottom: 1.6471em; + } + + blockquote { + font-size: 20px; + font-size: 2rem; + line-height: 1.75; + margin-bottom: 1.75em; + margin-left: -1.05em; + padding-left: 0.85em; + } + + blockquote p { + margin-bottom: 1.75em; + } + + blockquote cite, + blockquote small { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.6471; + } + + pre { + line-height: 1.2353; + } + + button, + input[type="button"], + input[type="reset"], + input[type="submit"], + .post-password-form input[type="submit"], + .widecolumn #submit, + .widecolumn .mu_register input[type="submit"] { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.6429em; + } + + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea { + padding: 0.5em; + } + + .main-navigation { + font-size: 14px; + font-size: 1.4rem; + line-height: 1.5; + } + + .main-navigation a { + padding: 1em 0; + } + + .main-navigation ul ul { + margin-left: 1em; + } + + .main-navigation .menu-item-description { + font-size: 14px; + font-size: 1.4rem; + line-height: 1.5; + } + + .social-navigation ul { + margin-bottom: -1.4706em; + } + + .social-navigation a { + height: 2.8824em; + width: 2.8824em; + } + + .secondary-toggle { + height: 56px; + width: 56px; + } + + .secondary-toggle:before { + line-height: 54px; + width: 54px; + } + + .post-password-form label, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .author-heading, + .author-bio, + .entry-footer, + .page-links a, + .page-links span, + .comment-metadata, + .pingback .edit-link, + .comment-list .reply, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .comment-form label, + .comment-form .comment-form-cookies-consent label, + .form-allowed-tags, + .site-info, + .wp-caption-text, + .gallery-caption, + .entry-caption, + .widecolumn label, + .widecolumn .mu_register label { + font-size: 14px; + font-size: 1.4rem; + } + + .pagination .nav-links { + min-height: 3.2941em; + } + + .pagination .page-numbers { + line-height: 3.2941em; + padding: 0 0.8235em; + } + + .pagination .prev, + .pagination .next { + height: 56px; + padding: 0; + width: 56px; + } + + .pagination .prev:before, + .pagination .next:before { + height: 56px; + line-height: 56px; + width: 56px; + } + + .image-navigation .nav-previous a:before, + .image-navigation .nav-next a:after, + .comment-navigation .nav-previous a:before, + .comment-navigation .nav-next a:after { + top: 2px; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4118em 1.6471em 1.6471em 0; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4118em 0 1.6471em 1.6471em; + } + + blockquote.aligncenter, + .wp-caption.aligncenter, + img.aligncenter { + margin-top: 0.4118em; + margin-bottom: 1.6471em; + } + + .wp-caption.alignleft, + .wp-caption.alignright, + .wp-caption.aligncenter { + margin-bottom: 1.2353em; + } + + .site-branding { + min-height: 3.7059em; + padding-right: 66px; + } + + .site-title { + font-size: 29px; + font-size: 2.9rem; + line-height: 1.2069; + } + + .custom-logo { + max-height: 105px; + } + + .wp-custom-logo .site-title { + margin-top: 0.482758621em; + } + + .site-description { + font-size: 14px; + font-size: 1.4rem; + } + + .widget { + font-size: 14px; + font-size: 1.4rem; + line-height: 1.5; + } + + .widget p, + .widget address, + .widget hr, + .widget ul, + .widget ol, + .widget dl, + .widget dd, + .widget table, + .widget pre { + margin-bottom: 1.5em; + } + + .widget li > ul, + .widget li > ol { + margin-bottom: 0; + } + + .widget blockquote { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.6471; + margin-bottom: 1.6471em; + margin-left: -1.2353em; + padding-left: 1em; + } + + .widget blockquote p { + margin-bottom: 1.6471em; + } + + .widget blockquote cite, + .widget blockquote small { + font-size: 14px; + font-size: 1.4rem; + line-height: 1.5; + } + + .widget blockquote > blockquote { + margin-left: 0; + } + + .widget pre { + line-height: 1.5; + padding: 0.75em; + } + + .widget button, + .widget input, + .widget select, + .widget textarea { + line-height: 1.75; + } + + .widget button, + .widget input { + line-height: normal; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"] { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.6429em; + } + + .widget input[type="text"], + .widget input[type="email"], + .widget input[type="url"], + .widget input[type="password"], + .widget input[type="search"], + .widget textarea { + padding: 0.5625em; + } + + .widget blockquote.alignleft, + .widget .wp-caption.alignleft, + .widget img.alignleft { + margin: 0.5em 1.5em 1.5em 0; + } + + .widget blockquote.alignright, + .widget .wp-caption.alignright, + .widget img.alignright { + margin: 0.5em 0 1.5em 1.5em; + } + + .widget blockquote.aligncenter, + .widget .wp-caption.aligncenter, + .widget img.aligncenter { + margin-top: 0.5em; + margin-bottom: 1.5em; + } + + .widget .wp-caption.alignleft, + .widget .wp-caption.alignright, + .widget .wp-caption.aligncenter { + margin-bottom: 1em; + } + + .widget-title { + margin: 0 0 1.5em; + } + + .widget_calendar td, + .widget_calendar th { + line-height: 2.9286; + } + + .widget_calendar caption { + margin: 0 0 1.5em; + } + + .widget_archive li, + .widget_categories li, + .widget_links li, + .widget_meta li, + .widget_nav_menu li, + .widget_pages li, + .widget_recent_comments li, + .widget_recent_entries li { + padding: 0.9643em 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.9643em 0 0 1em; + padding-top: 0.9643em; + } + + .widget_rss li { + margin-bottom: 1.5em; + } + + .widget_rss .rss-date, + .widget_rss cite { + line-height: 1.75; + } + + .post-thumbnail { + margin-bottom: 3em; + } + + .entry-title, + .widecolumn h2 { + font-size: 35px; + font-size: 3.5rem; + line-height: 1.2; + margin-bottom: 1.2em; + } + + .entry-content h1, + .entry-summary h1, + .page-content h1, + .comment-content h1 { + font-size: 35px; + font-size: 3.5rem; + line-height: 1.2; + margin-top: 1.6em; + margin-bottom: 0.8em; + } + + .entry-content h2, + .entry-summary h2, + .page-content h2, + .comment-content h2 { + font-size: 29px; + font-size: 2.9rem; + line-height: 1.2069; + margin-top: 1.931em; + margin-bottom: 0.9655em; + } + + .entry-content h3, + .entry-summary h3, + .page-content h3, + .comment-content h3 { + font-size: 24px; + font-size: 2.4rem; + line-height: 1.1667; + margin-top: 2.3333em; + margin-bottom: 1.1667em; + } + + .entry-content h4, + .entry-summary h4, + .page-content h4, + .comment-content h4 { + font-size: 20px; + font-size: 2rem; + line-height: 1.4; + margin-top: 2.8em; + margin-bottom: 1.4em; + } + + .entry-content h5, + .entry-content h6, + .entry-summary h5, + .entry-summary h6, + .page-content h5, + .page-content h6, + .comment-content h5, + .comment-content h6 { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.2353; + margin-top: 3.2941em; + margin-bottom: 1.6471em; + } + + .entry-content .more-link:after, + .entry-summary .more-link:after { + font-size: 24px; + top: 2px; + } + + .author-info { + margin: 0 9.0909%; + padding: 9.0909% 0; + } + + .author-info .avatar { + height: 42px; + margin: 0 1.6471em 1.6471em 0; + width: 42px; + } + + .author-link:after { + top: 3px; + } + + .posted-on:before, + .byline:before, + .cat-links:before, + .tags-links:before, + .comments-link:before, + .entry-format:before, + .edit-link:before, + .full-size-link:before { + top: 3px; + } + + .taxonomy-description { + padding-top: 0.4118em; + } + + .page-title, + .comments-title, + .comment-reply-title, + .post-navigation .post-title { + font-size: 24px; + font-size: 2.4rem; + line-height: 1.1667; + } + + .page-links { + margin-bottom: 1.4117em; + } + + .page-links a, + .page-links > span { + margin: 0 0.2857em 0.2857em 0; + } + + .entry-attachment { + margin-bottom: 1.6471em; + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 20px; + font-size: 2rem; + line-height: 1.4; + margin-bottom: 1.4em; + } + + .format-link .entry-title a:after { + top: 0.0833em; + } + + .comments-title { + margin-bottom: 1.4em; + } + + .comment-list article, + .comment-list .pingback, + .comment-list .trackback { + padding: 1.6471em 0; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 1.6471em; + } + + .comment-list .children > li { + padding-left: 1.2353em; + } + + .comment-meta { + position: relative; + } + + .comment-author { + margin-bottom: 0; + } + + .comment-author .avatar { + height: 42px; + margin-right: 1.64705em; + position: relative; + top: 5px; + width: 42px; + } + + .comment-metadata .edit-link:before { + top: 2px; + } + + .pingback .edit-link:before { + top: 6px; + } + + .bypostauthor > article .fn:after { + top: 7px; + left: 6px; + } + + .comment-content ul, + .comment-content ol { + margin-bottom: 1.6471em; + } + + .comment-list .reply a { + padding: 0.4286em 0.8571em; + } + + .comment-form, + .no-comments { + padding-top: 1.6471em; + } + + .comment-reply-title small a:before { + top: -1px; + } + + embed, + iframe, + object, + video { + margin-bottom: 1.6471em; + } + + .wp-audio-shortcode, + .wp-video, + .wp-playlist.wp-audio-playlist { + font-size: 17px; + font-size: 1.7rem; + margin-bottom: 1.6471em; + } + + .wp-caption, + .gallery { + margin-bottom: 1.6471em; + } + + .widecolumn .mu_alert { + margin-bottom: 1.6471em; + } + + .widecolumn p { + margin: 1.6471em 0; + } + + .widecolumn p + h2 { + margin-top: 1.6em; + } + + .widecolumn #key, + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #blogname, + .widecolumn .mu_register #user_name { + font-size: 17px; + font-size: 1.7rem; + line-height: normal; + } + + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #user_name { + margin: 0 0 0.4117em; + } +} + + +/** + * 16.3 Tablet Large 880px + */ + +@media screen and (min-width: 55em) { + body, + button, + input, + select, + textarea { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.6842; + } + + button, + input { + line-height: normal; + } + + p, + address, + pre, + hr, + ul, + ol, + dl, + dd, + table { + margin-bottom: 1.6842em; + } + + blockquote { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.8182; + margin-bottom: 1.8182em; + margin-left: -1.0909em; + padding-left: 0.9091em; + } + + blockquote p { + margin-bottom: 1.8182em; + } + + blockquote cite, + blockquote small { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.6842; + } + + pre { + line-height: 1.2632; + } + + button, + input[type="button"], + input[type="reset"], + input[type="submit"], + .post-password-form input[type="submit"], + .widecolumn #submit, + .widecolumn .mu_register input[type="submit"] { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } + + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea { + padding: 0.5278em; + } + + .main-navigation { + font-size: 16px; + font-size: 1.6rem; + line-height: 1.5; + } + + .main-navigation a { + padding: 0.75em 0; + } + + .main-navigation .menu-item-description { + font-size: 16px; + font-size: 1.6rem; + line-height: 1.5; + } + + .social-navigation ul { + margin-bottom: -1.2632em; + } + + .social-navigation a { + height: 2.5263em; + width: 2.5263em; + } + + .secondary-toggle { + height: 64px; + width: 64px; + } + + .secondary-toggle:before { + line-height: 62px; + width: 62px; + } + + .post-password-form label, + .post-navigation .meta-nav, + .comment-navigation, + .image-navigation, + .author-heading, + .author-bio, + .entry-footer, + .page-links a, + .page-links span, + .comment-metadata, + .pingback .edit-link, + .comment-list .reply, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .comment-form label, + .comment-form .comment-form-cookies-consent label, + .form-allowed-tags, + .site-info, + .wp-caption-text, + .gallery-caption, + .entry-caption, + .widecolumn label, + .widecolumn .mu_register label { + font-size: 16px; + font-size: 1.6rem; + } + + .pagination .nav-links { + min-height: 3.3684em; + } + + .pagination .page-numbers { + line-height: 3.3684em; + padding: 0 0.8421em; + } + + .pagination .prev, + .pagination .next { + height: 64px; + padding: 0; + width: 64px; + } + + .pagination .prev:before, + .pagination .next:before { + height: 64px; + line-height: 64px; + width: 64px; + } + + .image-navigation .nav-previous a:before, + .image-navigation .nav-next a:after, + .comment-navigation .nav-previous a:before, + .comment-navigation .nav-next a:after { + font-size: 24px; + top: -1px; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4211em 1.6842em 1.6842em 0; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4211em 0 1.6842em 1.6842em; + } + + blockquote.aligncenter, + .wp-caption.aligncenter, + img.aligncenter { + margin-top: 0.4211em; + margin-bottom: 1.6842em; + } + + .wp-caption.alignleft, + .wp-caption.alignright, + .wp-caption.aligncenter { + margin-bottom: 1.2632em; + } + + .site-branding { + min-height: 3.7895em; + padding-right: 74px; + } + + .site-title { + font-size: 32px; + font-size: 3.2rem; + line-height: 1.25; + } + + .custom-logo { + max-height: 104px; + } + + .wp-custom-logo .site-title { + margin-top: 0.5em; + } + + .site-description { + font-size: 16px; + font-size: 1.6rem; + } + + .widget { + font-size: 16px; + font-size: 1.6rem; + } + + .widget blockquote { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.6842; + margin-bottom: 1.6842em; + margin-left: -1.2632em; + padding-left: 1.0526em; + } + + .widget blockquote p { + margin-bottom: 1.6842em; + } + + .widget blockquote cite, + .widget blockquote small { + font-size: 16px; + font-size: 1.6rem; + } + + .widget button, + .widget input, + .widget select, + .widget textarea { + line-height: 1.5; + } + + .widget button, + .widget input { + line-height: normal; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"] { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } + + .widget input[type="text"], + .widget input[type="email"], + .widget input[type="url"], + .widget input[type="password"], + .widget input[type="search"], + .widget textarea { + padding: 0.75em; + } + + .widget .wp-caption-text, + .widget .gallery-caption { + line-height: 1.5; + } + + .widget_calendar td, + .widget_calendar th { + line-height: 2.9375; + } + + .widget_archive li, + .widget_categories li, + .widget_links li, + .widget_meta li, + .widget_nav_menu li, + .widget_pages li, + .widget_recent_comments li, + .widget_recent_entries li { + padding: 0.7188em 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.7188em 0 0 1em; + padding-top: 0.7188em; + } + + .widget_rss .rss-date, + .widget_rss cite { + font-size: 13px; + font-size: 1.3rem; + line-height: 1.8462; + } + + .post-thumbnail { + margin-bottom: 2.9474em; + } + + .entry-title, + .widecolumn h2 { + font-size: 39px; + font-size: 3.9rem; + line-height: 1.2308; + margin-bottom: 1.2308em; + } + + .entry-content h1, + .entry-summary h1, + .page-content h1, + .comment-content h1 { + font-size: 39px; + font-size: 3.9rem; + line-height: 1.2308; + margin-top: 1.641em; + margin-bottom: 0.8205em; + } + + .entry-content h2, + .entry-summary h2, + .page-content h2, + .comment-content h2 { + font-size: 32px; + font-size: 3.2rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; + } + + .entry-content h3, + .entry-summary h3, + .page-content h3, + .comment-content h3 { + font-size: 27px; + font-size: 2.7rem; + line-height: 1.1852; + margin-top: 2.3704em; + margin-bottom: 1.1852em; + } + + .entry-content h4, + .entry-summary h4, + .page-content h4, + .comment-content h4 { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.4545; + margin-top: 2.9091em; + margin-bottom: 1.4545em; + } + + .entry-content h5, + .entry-content h6, + .entry-summary h5, + .entry-summary h6, + .page-content h5, + .page-content h6, + .comment-content h5, + .comment-content h6 { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.2632; + margin-top: 3.3684em; + margin-bottom: 1.6842em; + } + + .entry-content .more-link:after, + .entry-summary .more-link:after { + top: 3px; + } + + .author-info .avatar { + height: 56px; + margin: 0 1.6842em 1.6842em 0; + width: 56px; + } + + .author-link:after { + font-size: 24px; + top: 0; + } + + .posted-on:before, + .byline:before, + .cat-links:before, + .tags-links:before, + .comments-link:before, + .entry-format:before, + .edit-link:before, + .full-size-link:before { + top: 4px; + } + + .taxonomy-description { + padding-top: 0.4211em; + } + + .page-title, + .comments-title, + .comment-reply-title, + .post-navigation .post-title { + font-size: 27px; + font-size: 2.7rem; + line-height: 1.1852; + } + + .page-links { + margin-bottom: 1.4736em; + } + + .page-links a, + .page-links > span { + margin: 0 0.25em 0.25em 0; + } + + .entry-attachment { + margin-bottom: 1.6842em + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.4545; + margin-bottom: 1.4545em; + } + + .format-link .entry-title a:after { + top: 0.125em; + } + + .comments-title { + margin-bottom: 1.4545em; + } + + .comment-list article, + .comment-list .pingback, + .comment-list .trackback { + padding: 1.6842em 0; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 1.6842em; + } + + .comment-list .children > li { + padding-left: 1.4737em; + } + + .comment-author .avatar { + height: 56px; + margin-right: 1.6842em; + top: 3px; + width: 56px; + } + + .comment-metadata { + line-height: 2; + } + + .comment-metadata .edit-link:before { + top: 8px; + } + + .pingback .edit-link:before { + top: 8px; + } + + .bypostauthor > article .fn:after { + top: 8px; + } + + .comment-content ul, + .comment-content ol { + margin-bottom: 1.6842em; + } + + .comment-list .reply a { + padding: 0.4375em 0.875em; + } + + .comment-form, + .no-comments { + padding-top: 1.6842em; + } + + embed, + iframe, + object, + video { + margin-bottom: 1.6842em; + } + + .wp-audio-shortcode, + .wp-video, + .wp-playlist.wp-audio-playlist { + font-size: 19px; + font-size: 1.9rem; + margin-bottom: 1.6842em; + } + + .wp-caption, + .gallery { + margin-bottom: 1.6842em; + } + + .widecolumn .mu_alert { + margin-bottom: 1.6842em; + } + + .widecolumn p { + margin: 1.6842em 0; + } + + .widecolumn p + h2 { + margin-top: 1.641em; + } + + .widecolumn #key, + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #blogname, + .widecolumn .mu_register #user_name { + font-size: 19px; + font-size: 1.9rem; + } + + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #user_name { + margin: 0 0 0.421em; + } +} + + +/** + * 16.4 Desktop Small 955px + */ + +@media screen and (min-width: 59.6875em) { + body:before { + background-color: #fff; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.15); + content: ""; + display: block; + height: 100%; + min-height: 100%; + position: fixed; + top: 0; + left: 0; + width: 29.4118%; + z-index: 0; /* Fixes flashing bug with scrolling on Safari */ + } + + .site { + margin: 0 auto; + max-width: 1403px; + } + + .sidebar { + float: left; + margin-right: -100%; + max-width: 413px; + position: relative; + width: 29.4118%; + } + + .secondary { + background-color: transparent; + box-shadow: none; + display: block; + margin: 0; + padding: 0; + } + + .site-main { + padding: 8.3333% 0; + } + + .site-content { + display: block; + float: left; + margin-left: 29.4118%; + width: 70.5882%; + } + + body { + font-size: 15px; + font-size: 1.5rem; + line-height: 1.6; + } + + p, + address, + pre, + hr, + ul, + ol, + dl, + dd, + table { + margin-bottom: 1.6em; + } + + blockquote { + font-size: 18px; + font-size: 1.8rem; + line-height: 1.6667; + margin-bottom: 1.6667em; + margin-left: -1.3333em; + padding-left: 1.1111em; + } + + blockquote cite, + blockquote small { + font-size: 15px; + font-size: 1.5rem; + line-height: 1.6; + } + + pre { + line-height: 1.2; + } + + button, + input, + select, + textarea { + font-size: 16px; + font-size: 1.6rem; + line-height: 1.5; + } + + button, + input { + line-height: normal; + } + + button, + input[type="button"], + input[type="reset"], + input[type="submit"], + .post-password-form input[type="submit"], + .widecolumn #submit, + .widecolumn .mu_register input[type="submit"] { + font-size: 12px; + font-size: 1.2rem; + padding: 0.7917em 1.5833em; + } + + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea { + padding: 0.375em; + } + + .main-navigation { + font-size: 12px; + font-size: 1.2rem; + margin: 0 20% 20%; + } + + .main-navigation a { + padding: 0.5em 0; + } + + .main-navigation .menu-item-has-children > a { + padding-right: 30px; + } + + .main-navigation .menu-item-description { + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + } + + .dropdown-toggle { + height: 24px; + width: 24px; + } + + .dropdown-toggle:after { + font-size: 16px; + line-height: 24px; + width: 24px; + } + + .social-navigation { + margin: 0 20% 20%; + } + + .social-navigation ul { + margin-bottom: -1.6em; + } + + .social-navigation li { + width: 25%; + } + + .social-navigation a { + height: 3.2em; + } + + .secondary-toggle { + display: none; + } + + .post-password-form label, + .post-navigation .meta-nav, + .comment-navigation, + .image-navigation, + .author-heading, + .author-bio, + .entry-footer, + .page-links a, + .page-links span, + .comment-metadata, + .pingback .edit-link, + .comment-list .reply, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .comment-form label, + .comment-form .comment-form-cookies-consent label, + .form-allowed-tags, + .site-info, + .wp-caption-text, + .gallery-caption, + .entry-caption, + .widecolumn label, + .widecolumn .mu_register label { + font-size: 12px; + font-size: 1.2rem; + } + + .post-navigation { + margin: 8.3333% 8.3333% 0; + } + + .post-navigation a { + padding: 5% 10%; + } + + .pagination { + margin: 8.333% 8.333% 0; + } + + .pagination .nav-links { + min-height: 3.2em; + } + + .pagination .page-numbers { + line-height: 3.2em; + padding: 0 0.8em; + } + + .pagination .prev, + .pagination .next { + height: 48px; + padding: 0; + width: 48px; + } + + .pagination .prev:before, + .pagination .next:before { + height: 48px; + line-height: 48px; + width: 48px; + } + + .image-navigation .nav-previous a:before, + .image-navigation .nav-next a:after, + .comment-navigation .nav-previous a:before, + .comment-navigation .nav-next a:after { + font-size: 16px; + top: 0; + } + + .image-navigation { + padding: 0 10%; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4em 1.6em 1.6em 0; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4em 0 1.6em 1.6em; + } + + blockquote.aligncenter, + .wp-caption.aligncenter, + img.aligncenter { + clear: both; + margin-top: 0.4em; + margin-bottom: 1.6em; + } + + .wp-caption.alignleft, + .wp-caption.alignright, + .wp-caption.aligncenter { + margin-bottom: 1.2em; + } + + .site-header { + background-color: transparent; + border-bottom: 0; + margin: 20% 0; + padding: 0 20%; + } + + .site-branding { + min-height: 0; + padding: 0; + } + + .site-title { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.3636; + } + + .custom-logo { + max-height: none; + } + + .wp-custom-logo .site-title { + margin-top: 0.545454545em; + } + + .site-description { + font-size: 12px; + font-size: 1.2rem; + } + + .widget { + font-size: 12px; + font-size: 1.2rem; + margin: 0 0 20%; + padding: 0 20%; + } + + .widget blockquote { + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + margin-bottom: 1.5em; + margin-left: -1.5em; + padding-left: 1.1667em; + } + + .widget blockquote p { + margin-bottom: 1.5em; + } + + .widget blockquote cite, + .widget blockquote small { + font-size: 12px; + font-size: 1.2rem; + } + + .widget pre { + padding: 0.5em; + } + + .widget button, + .widget input, + .widget select, + .widget textarea { + font-size: 12px; + font-size: 1.2rem; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"] { + font-size: 12px; + font-size: 1.2rem; + padding: 0.5417em 1.0833em; + } + + .widget input[type="text"], + .widget input[type="email"], + .widget input[type="url"], + .widget input[type="password"], + .widget input[type="search"], + .widget textarea { + padding: 0.4583em; + } + + .widget .wp-caption-text, + .widget .gallery-caption { + font-size: 12px; + font-size: 1.2rem; + } + + .widget_calendar td, + .widget_calendar th { + line-height: 1.9167; + } + + .widget_archive li, + .widget_categories li, + .widget_links li, + .widget_meta li, + .widget_nav_menu li, + .widget_pages li, + .widget_recent_comments li, + .widget_recent_entries li { + padding: 0.4583em 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.4583em 0 0 1em; + padding-top: 0.4583em; + } + + .widget_rss .rss-date, + .widget_rss cite { + font-size: 12px; + font-size: 1.2rem; + line-height: 1.5; + } + + .hentry, + .page-header, + .page-content { + margin: 0 8.3333%; + } + + .hentry { + padding-top: 8.3333%; + } + + .hentry + .hentry, + .page-header + .hentry, + .page-header + .page-content { + margin-top: 8.3333%; + } + + .post-thumbnail { + margin-bottom: 2.4em; + } + + .entry-header { + padding: 0 10%; + } + + .entry-title, + .widecolumn h2 { + font-size: 31px; + font-size: 3.1rem; + line-height: 1.1613; + margin-bottom: 1.1613em; + } + + .entry-content, + .entry-summary { + padding: 0 10% 10%; + } + + .entry-content h1, + .entry-summary h1, + .page-content h1, + .comment-content h1 { + font-size: 31px; + font-size: 3.1rem; + line-height: 1.1613; + margin-top: 1.5484em; + margin-bottom: 0.7742em; + } + + .entry-content h2, + .entry-summary h2, + .page-content h2, + .comment-content h2 { + font-size: 26px; + font-size: 2.6rem; + line-height: 1.3846; + margin-top: 1.8462em; + margin-bottom: 0.9231em; + } + + .entry-content h3, + .entry-summary h3, + .page-content h3, + .comment-content h3 { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.3636; + margin-top: 2.1818em; + margin-bottom: 1.0909em; + } + + .entry-content h4, + .entry-summary h4, + .page-content h4, + .comment-content h4 { + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; + margin-top: 2.6667em; + margin-bottom: 1.3333em; + } + + .entry-content h5, + .entry-content h6, + .entry-summary h5, + .entry-summary h6, + .page-content h5, + .page-content h6, + .comment-content h5, + .comment-content h6 { + font-size: 15px; + font-size: 1.5rem; + line-height: 1.2; + margin-top: 3.2em; + margin-bottom: 1.6em; + } + + .entry-content .more-link:after, + .entry-summary .more-link:after { + font-size: 16px; + top: 5px; + } + + .author-info { + margin: 0 10%; + padding: 10% 0; + } + + .author-info .avatar { + height: 36px; + margin: 0 1.5em 1.5em 0; + width: 36px; + } + + .author-link:after { + font-size: 16px; + top: 1px; + } + + .entry-footer { + padding: 5% 10%; + } + + .posted-on:before, + .byline:before, + .cat-links:before, + .tags-links:before, + .comments-link:before, + .entry-format:before, + .edit-link:before, + .full-size-link:before { + top: 0; + } + + .page-header { + padding: 4.1666% 8.3333%; + } + + .page-content { + padding: 8.3333%; + } + + .taxonomy-description { + padding-top: 0.4em; + } + + .page-title, + .comments-title, + .comment-reply-title, + .post-navigation .post-title { + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; + } + + .page-links { + margin-bottom: 1.3333em; + } + + .page-links a, + .page-links > span { + margin: 0 0.3333em 0.3333em 0; + } + + .entry-attachment { + margin-bottom: 1.6em; + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 18px; + font-size: 1.8rem; + line-height: 1.3333; + margin-bottom: 1.3333em; + } + + .format-link .entry-title a:after { + top: 0; + } + + .comments-area { + margin: 8.3333% 8.3333% 0; + padding: 8.3333%; + } + + .comments-title { + margin-bottom: 1.3333em; + } + + .comment-list article, + .comment-list .pingback, + .comment-list .trackback { + padding: 1.6em 0; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 1.6em; + } + + .comment-list .children > li { + padding-left: 0.8em; + } + + .comment-author { + margin-bottom: 0.4em; + } + + .comment-author .avatar { + height: 24px; + margin-right: 0.8em; + top: 0; + width: 24px; + } + + .comment-metadata .edit-link:before { + top: 3px; + } + + .pingback .edit-link:before { + top: 5px; + } + + .bypostauthor > article .fn:after { + top: 5px; + left: 3px; + } + + .comment-content ul, + .comment-content ol { + margin-bottom: 2em; + } + + .comment-list .reply a { + padding: 0.4167em 0.8333em; + } + + .comment-form, + .no-comments { + padding-top: 1.6em; + } + + .comment-reply-title small a:before { + top: -3px; + } + + .site-footer { + float: left; + margin: 0 0 0 35.2941%; + padding: 0; + width: 58.8235%; + } + + .site-info { + padding: 5% 10%; + } + + embed, + iframe, + object, + video { + margin-bottom: 1.6em; + } + + .wp-audio-shortcode, + .wp-video, + .wp-playlist.wp-audio-playlist { + font-size: 15px; + font-size: 1.5rem; + margin-bottom: 1.6em; + } + + .wp-caption, + .gallery { + margin-bottom: 1.6em; + } + + .widecolumn { + margin: 8.3333%; + padding: 8.3333%; + } + + .widecolumn .mu_alert { + margin-bottom: 1.6em; + } + + .widecolumn p { + margin: 1.6em 0; + } + + .widecolumn p + h2 { + margin-top: 1.5484em; + } + + .widecolumn #key, + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #blogname, + .widecolumn .mu_register #user_name { + font-size: 16px; + font-size: 1.6rem; + } + + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #user_name { + margin: 0 0 0.375em; + } +} + + +/** + * 16.5 Desktop Medium 1100px + */ + +@media screen and (min-width: 68.75em) { + body, + button, + input, + select, + textarea { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.6471; + } + + button, + input { + line-height: normal; + } + + p, + address, + pre, + hr, + ul, + ol, + dl, + dd, + table { + margin-bottom: 1.6471em; + } + + blockquote { + font-size: 20px; + font-size: 2rem; + line-height: 1.75; + margin-bottom: 1.75em; + margin-left: -1.05em; + padding-left: 0.85em; + } + + blockquote p { + margin-bottom: 1.75em; + } + + blockquote cite, + blockquote small { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.6471; + } + + pre { + line-height: 1.2353; + } + + button, + input[type="button"], + input[type="reset"], + input[type="submit"], + .post-password-form input[type="submit"], + .widecolumn #submit, + .widecolumn .mu_register input[type="submit"] { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.5714em; + } + + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea { + padding: 0.5em; + } + + .main-navigation { + font-size: 14px; + font-size: 1.4rem; + } + + .main-navigation a { + padding: 0.4643em 0; + } + + .main-navigation .menu-item-has-children > a { + padding-right: 34px; + } + + .main-navigation .menu-item-description { + line-height: 1.4583; + margin-top: 0.25em; + } + + .dropdown-toggle { + height: 28px; + width: 28px; + } + + .dropdown-toggle:after { + line-height: 28px; + width: 28px; + } + + .social-navigation ul { + margin-bottom: -1.4706em; + } + + .social-navigation li { + width: 20%; + } + + .social-navigation a { + height: 2.8824em; + } + + .post-password-form label, + .post-navigation .meta-nav, + .comment-navigation, + .image-navigation, + .author-heading, + .author-bio, + .entry-footer, + .page-links a, + .page-links span, + .comment-metadata, + .pingback .edit-link, + .comment-list .reply, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .comment-form label, + .comment-form .comment-form-cookies-consent label, + .form-allowed-tags, + .site-info, + .wp-caption-text, + .gallery-caption, + .entry-caption, + .widecolumn label, + .widecolumn .mu_register label { + font-size: 14px; + font-size: 1.4rem; + } + + .pagination .nav-links { + min-height: 3.2941em; + } + + .pagination .page-numbers { + line-height: 3.2941em; + padding: 0 0.8235em; + } + + .pagination .prev, + .pagination .next { + height: 56px; + padding: 0; + width: 56px; + } + + .pagination .prev:before, + .pagination .next:before { + height: 56px; + line-height: 56px; + width: 56px; + } + + .image-navigation .nav-previous a:before, + .image-navigation .nav-next a:after, + .comment-navigation .nav-previous a:before, + .comment-navigation .nav-next a:after { + top: 2px; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4118em 1.6471em 1.6471em 0; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4118em 0 1.6471em 1.6471em; + } + + blockquote.aligncenter, + .wp-caption.aligncenter, + img.aligncenter { + margin-top: 0.4118em; + margin-bottom: 1.6471em; + } + + .wp-caption.alignleft, + .wp-caption.alignright, + .wp-caption.aligncenter { + margin-bottom: 1.2353em; + } + + .site-title { + font-size: 24px; + font-size: 2.4rem; + line-height: 1.1667; + } + + .wp-custom-logo .site-title { + margin-top: 0.583333333em; + } + + .site-description { + font-size: 14px; + font-size: 1.4rem; + } + + .widget { + font-size: 14px; + font-size: 1.4rem; + } + + .widget blockquote { + font-size: 14px; + font-size: 1.4rem; + padding-left: 1.2143em; + } + + .widget button, + .widget input, + .widget select, + .widget textarea { + font-size: 14px; + font-size: 1.4rem; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"] { + font-size: 12px; + font-size: 1.2rem; + padding: 0.75em 1.5em; + } + + .widget input[type="text"], + .widget input[type="email"], + .widget input[type="url"], + .widget input[type="password"], + .widget input[type="search"], + .widget textarea { + padding: 0.5em; + } + + .widget .wp-caption-text, + .widget .gallery-caption { + line-height: 1.4583; + padding: 0.5833em 0; + } + + .widget_calendar caption { + margin: 0 0 1.9286em; + } + + .widget_calendar td, + .widget_calendar th { + line-height: 1.9286; + } + + .widget_archive li, + .widget_categories li, + .widget_links li, + .widget_meta li, + .widget_nav_menu li, + .widget_pages li, + .widget_recent_comments li, + .widget_recent_entries li { + padding: 0.4643em 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.4643em 0 0 1em; + padding-top: 0.4643em; + } + + .widget_rss .rss-date, + .widget_rss cite { + line-height: 1.75; + } + + .post-thumbnail { + margin-bottom: 2.4706em; + } + + .entry-title, + .widecolumn h2 { + font-size: 35px; + font-size: 3.5rem; + line-height: 1.2; + margin-bottom: 1.2em; + } + + .entry-content h1, + .entry-summary h1, + .page-content h1, + .comment-content h1 { + font-size: 35px; + font-size: 3.5rem; + line-height: 1.2; + margin-top: 1.6em; + margin-bottom: 0.8em; + } + + .entry-content h2, + .entry-summary h2, + .page-content h2, + .comment-content h2 { + font-size: 29px; + font-size: 2.9rem; + line-height: 1.2069; + margin-top: 1.931em; + margin-bottom: 0.9655em; + } + + .entry-content h3, + .entry-summary h3, + .page-content h3, + .comment-content h3 { + font-size: 24px; + font-size: 2.4rem; + line-height: 1.1667; + margin-top: 2.3333em; + margin-bottom: 1.1667em; + } + + .entry-content h4, + .entry-summary h4, + .page-content h4, + .comment-content h4 { + font-size: 20px; + font-size: 2rem; + line-height: 1.4; + margin-top: 2.8em; + margin-bottom: 1.4em; + } + + .entry-content h5, + .entry-content h6, + .entry-summary h5, + .entry-summary h6, + .page-content h5, + .page-content h6, + .comment-content h5, + .comment-content h6 { + font-size: 17px; + font-size: 1.7rem; + line-height: 1.2353; + margin-top: 3.2941em; + margin-bottom: 1.6471em; + } + + .entry-content .more-link:after, + .entry-summary .more-link:after { + font-size: 24px; + top: 2px; + } + + .author-info .avatar { + height: 42px; + margin: 0 1.6471em 1.6471em 0; + width: 42px; + } + + .author-link:after { + top: 3px; + } + + .posted-on:before, + .byline:before, + .cat-links:before, + .tags-links:before, + .comments-link:before, + .entry-format:before, + .edit-link:before, + .full-size-link:before { + top: 3px; + } + + .taxonomy-description { + padding-top: 0.4118em; + } + + .page-title, + .comments-title, + .comment-reply-title, + .post-navigation .post-title { + font-size: 24px; + font-size: 2.4rem; + line-height: 1.1667; + } + + .page-links { + margin-bottom: 1.4117em; + } + + .page-links a, + .page-links > span { + margin: 0 0.2857em 0.2857em 0; + } + + .entry-attachment { + margin-bottom: 1.6471em; + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 20px; + font-size: 2rem; + line-height: 1.4; + margin-bottom: 1.4em; + } + + .format-link .entry-title a:after { + top: 0.0833em; + } + + .comments-title { + margin-bottom: 1.4em; + } + + .comment-list article, + .comment-list .pingback, + .comment-list .trackback { + padding: 1.6471em 0; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 1.6471em; + } + + .comment-list .children > li { + padding-left: 1.1667em; + } + + .comment-author { + margin-bottom: 0; + } + + .comment-author .avatar { + height: 42px; + margin-right: 1.64705em; + top: 5px; + width: 42px; + } + + .bypostauthor > article .fn:after { + top: 7px; + left: 6px; + } + + .comment-metadata .edit-link:before { + top: 6px; + } + + .pingback .edit-link:before { + top: 6px; + } + + .comment-content ul, + .comment-content ol { + margin-bottom: 1.6471em; + } + + .comment-list .reply a { + padding: 0.4286em 0.8571em; + } + + .comment-form, + .no-comments { + padding-top: 1.6471em; + } + + .comment-reply-title small a:before { + top: -1px; + } + + embed, + iframe, + object, + video { + margin-bottom: 1.6471em; + } + + .wp-audio-shortcode, + .wp-video, + .wp-playlist.wp-audio-playlist { + font-size: 17px; + font-size: 1.7rem; + margin-bottom: 1.6471em; + } + + .wp-caption, + .gallery { + margin-bottom: 1.6471em; + } + + .widecolumn .mu_alert { + margin-bottom: 1.6471em; + } + + .widecolumn p { + margin: 1.6471em 0; + } + + .widecolumn p + h2 { + margin-top: 1.6em; + } + + .widecolumn #key, + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #blogname, + .widecolumn .mu_register #user_name { + font-size: 17px; + font-size: 1.7rem; + } + + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #user_name { + margin: 0 0 0.4117em; + } +} + + +/** + * 16.6 Desktop Large 1240px + */ + +@media screen and (min-width: 77.5em) { + body, + button, + input, + select, + textarea { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.6842; + } + + button, + input { + line-height: normal; + } + + p, + address, + pre, + hr, + ul, + ol, + dl, + dd, + table { + margin-bottom: 1.6842em; + } + + blockquote { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.8182; + margin-bottom: 1.8182em; + margin-left: -1.0909em; + padding-left: 0.9091em; + } + + blockquote p { + margin-bottom: 1.8182em; + } + + blockquote cite, + blockquote small { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.6842; + } + + pre { + line-height: 1.2632; + } + + button, + input[type="button"], + input[type="reset"], + input[type="submit"], + .post-password-form input[type="submit"], + .widecolumn #submit, + .widecolumn .mu_register input[type="submit"] { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } + + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea { + padding: 0.5278em; + } + + .main-navigation { + font-size: 16px; + font-size: 1.6rem; + } + + .main-navigation a { + padding: 0.5em 0; + } + + .main-navigation .menu-item-has-children > a { + padding-right: 38px; + } + + .main-navigation .menu-item-description { + font-size: 13px; + font-size: 1.3rem; + line-height: 1.5385; + margin-top: 0.3077em; + } + + .dropdown-toggle { + height: 32px; + top: 4px; + width: 32px; + } + + .dropdown-toggle:after { + line-height: 32px; + width: 32px; + } + + .social-navigation ul { + margin-bottom: -1.2632em; + } + + .social-navigation a { + height: 2.5263em; + } + + .post-password-form label, + .post-navigation .meta-nav, + .comment-navigation, + .image-navigation, + .author-heading, + .author-bio, + .entry-footer, + .page-links a, + .page-links span, + .comment-metadata, + .pingback .edit-link, + .comment-list .reply, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .comment-form label, + .comment-form .comment-form-cookies-consent label, + .form-allowed-tags, + .site-info, + .wp-caption-text, + .gallery-caption, + .entry-caption, + .widecolumn label, + .widecolumn .mu_register label { + font-size: 16px; + font-size: 1.6rem; + } + + .pagination .nav-links { + min-height: 3.3684em; + } + + .pagination .page-numbers { + line-height: 3.3684em; + padding: 0 0.8421em; + } + + .pagination .prev, + .pagination .next { + height: 64px; + padding: 0; + width: 64px; + } + + .pagination .prev:before, + .pagination .next:before { + height: 64px; + line-height: 64px; + width: 64px; + } + + .image-navigation .nav-previous a:before, + .image-navigation .nav-next a:after, + .comment-navigation .nav-previous a:before, + .comment-navigation .nav-next a:after { + font-size: 24px; + top: -1px; + } + + blockquote.alignleft, + .wp-caption.alignleft, + img.alignleft { + margin: 0.4211em 1.6842em 1.6842em 0; + } + + blockquote.alignright, + .wp-caption.alignright, + img.alignright { + margin: 0.4211em 0 1.6842em 1.6842em; + } + + blockquote.aligncenter, + .wp-caption.aligncenter, + img.aligncenter { + margin-top: 0.4211em; + margin-bottom: 1.6842em; + } + + .wp-caption.alignleft, + .wp-caption.alignright, + .wp-caption.aligncenter { + margin-bottom: 1.2632em; + } + + .site-title { + font-size: 27px; + font-size: 2.7rem; + line-height: 1.1852; + } + + .wp-custom-logo .site-title { + margin-top: 0.592592593em; + } + + .site-description { + font-size: 16px; + font-size: 1.6rem; + } + + .widget { + font-size: 16px; + font-size: 1.6rem; + } + + .widget blockquote { + font-size: 16px; + font-size: 1.6rem; + padding-left: 1.25em; + } + + .widget blockquote cite, + .widget blockquote small { + font-size: 13px; + font-size: 1.3rem; + line-height: 1.8462; + } + + .widget button, + .widget input, + .widget select, + .widget textarea { + font-size: 16px; + font-size: 1.6rem; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"] { + font-size: 13px; + font-size: 1.3rem; + padding: 0.8462em 1.6923em; + } + + .widget input[type="text"], + .widget input[type="email"], + .widget input[type="url"], + .widget input[type="password"], + .widget input[type="search"], + .widget textarea { + padding: 0.5em; + } + + .widget .wp-caption-text, + .widget .gallery-caption { + font-size: 13px; + font-size: 1.3rem; + line-height: 1.5385; + padding: 0.6154em 0; + } + + .widget_calendar td, + .widget_calendar th { + line-height: 1.9375; + } + + .widget_calendar caption { + margin: 0 0 1.5em; + } + + .widget_archive li, + .widget_categories li, + .widget_links li, + .widget_meta li, + .widget_nav_menu li, + .widget_pages li, + .widget_recent_comments li, + .widget_recent_entries li { + padding: 0.4688em 0; + } + + .widget_categories .children, + .widget_nav_menu .sub-menu, + .widget_pages .children { + margin: 0.4688em 0 0 1em; + padding-top: 0.4688em; + } + + .widget_rss .rss-date, + .widget_rss cite { + font-size: 13px; + font-size: 1.3rem; + line-height: 1.8462; + } + + .post-thumbnail { + margin-bottom: 2.9474em; + } + + .entry-title, + .widecolumn h2 { + font-size: 39px; + font-size: 3.9rem; + line-height: 1.2308; + margin-bottom: 1.2308em; + } + + .entry-content h1, + .entry-summary h1, + .page-content h1, + .comment-content h1 { + font-size: 39px; + font-size: 3.9rem; + line-height: 1.2308; + margin-top: 1.641em; + margin-bottom: 0.8205em; + } + + .entry-content h2, + .entry-summary h2, + .page-content h2, + .comment-content h2 { + font-size: 32px; + font-size: 3.2rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; + } + + .entry-content h3, + .entry-summary h3, + .page-content h3, + .comment-content h3 { + font-size: 27px; + font-size: 2.7rem; + line-height: 1.1852; + margin-top: 2.3704em; + margin-bottom: 1.1852em; + } + + .entry-content h4, + .entry-summary h4, + .page-content h4, + .comment-content h4 { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.4545; + margin-top: 2.9091em; + margin-bottom: 1.4545em; + } + + .entry-content h5, + .entry-content h6, + .entry-summary h5, + .entry-summary h6, + .page-content h5, + .page-content h6, + .comment-content h5, + .comment-content h6 { + font-size: 19px; + font-size: 1.9rem; + line-height: 1.2632; + margin-top: 3.3684em; + margin-bottom: 1.6842em; + } + + .entry-content .more-link:after, + .entry-summary .more-link:after { + top: 3px; + } + + .author-info .avatar { + height: 56px; + margin: 0 1.6842em 1.6842em 0; + width: 56px; + } + + .author-link:after { + font-size: 24px; + top: 0; + } + + .posted-on:before, + .byline:before, + .cat-links:before, + .tags-links:before, + .comments-link:before, + .entry-format:before, + .edit-link:before, + .full-size-link:before { + top: 4px; + } + + .taxonomy-description { + padding-top: 0.4211em; + } + + .page-title, + .comments-title, + .comment-reply-title, + .post-navigation .post-title { + font-size: 27px; + font-size: 2.7rem; + line-height: 1.1852; + } + + .page-links { + margin-bottom: 1.4736em; + } + + .page-links a, + .page-links > span { + margin: 0 0.25em 0.25em 0; + } + + .entry-attachment { + margin-bottom: 1.6842em; + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 22px; + font-size: 2.2rem; + line-height: 1.4545; + margin-bottom: 1.4545em; + } + + .format-link .entry-title a:after { + top: 3px; + } + + .comments-title { + margin-bottom: 1.4545em; + } + + .comment-list article, + .comment-list .pingback, + .comment-list .trackback { + padding: 1.6842em 0; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 1.6842em; + } + + .comment-list .children > li { + padding-left: 1.4737em; + } + + .comment-author .avatar { + height: 56px; + margin-right: 1.6842em; + top: 3px; + width: 56px; + } + + .bypostauthor > article .fn:after { + top: 8px; + } + + .comment-metadata .edit-link:before { + top: 8px; + } + + .pingback .edit-link:before { + top: 8px; + } + + .comment-content ul, + .comment-content ol { + margin-bottom: 1.6842em; + } + + .comment-list .reply a { + padding: 0.4375em 0.875em; + } + + .comment-form, + .no-comments { + padding-top: 1.6842em; + } + + embed, + iframe, + object, + video { + margin-bottom: 1.6842em; + } + + .wp-audio-shortcode, + .wp-video, + .wp-playlist.wp-audio-playlist { + font-size: 19px; + font-size: 1.9rem; + margin-bottom: 1.6842em; + } + + .wp-caption, + .gallery { + margin-bottom: 1.6842em; + } + + .widecolumn .mu_alert { + margin-bottom: 1.6842em; + } + + .widecolumn p { + margin: 1.6842em 0; + } + + .widecolumn p + h2 { + margin-top: 1.641em; + } + + .widecolumn #key, + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #blogname, + .widecolumn .mu_register #user_name { + font-size: 19px; + font-size: 1.9rem; + } + + .widecolumn .mu_register #blog_title, + .widecolumn .mu_register #user_email, + .widecolumn .mu_register #user_name { + margin: 0 0 0.421em; + } +} + + +/** + * 16.7 Desktop X-Large 1403px + */ + +@media screen and (min-width: 87.6875em) { + body:before { + width: -webkit-calc(50% - 289px); + width: calc(50% - 289px); + } +} + + +/** + * 17.0 Print + */ + +@media print { + body { + background: none !important; /* Brute force since user agents all print differently. */ + font-size: 11.25pt; + } + + .secondary-toggle, + .navigation, + .page-links, + .edit-link, + #reply-title, + .comment-form, + .comment-edit-link, + .comment-list .reply a, + button, + input, + textarea, + select, + .widecolumn form, + .widecolumn .mu_register form { + display: none; + } + + .site-header, + .site-footer, + .hentry, + .entry-footer, + .page-header, + .page-content, + .comments-area, + .widecolumn { + background: none !important; /* Make sure color schemes don't affect to print */ + } + + body, + blockquote, + blockquote cite, + blockquote small, + label, + a, + .site-title a, + .site-description, + .post-title, + .author-heading, + .entry-footer, + .entry-footer a, + .taxonomy-description, + .entry-caption, + .comment-author, + .comment-metadata, + .comment-metadata a, + .comment-notes, + .comment-awaiting-moderation, + .no-comments, + .site-info, + .site-info a, + .wp-caption-text, + .gallery-caption { + color: #000 !important; /* Make sure color schemes don't affect to print */ + } + + pre, + abbr[title], + table, + th, + td, + .site-header, + .site-footer, + .hentry + .hentry, + .author-info, + .page-header, + .comments-area, + .comment-list + .comment-respond, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .no-comments { + border-color: #eaeaea !important; /* Make sure color schemes don't affect to print */ + } + + .site { + margin: 0 7.6923%; + } + + .sidebar { + position: relative !important; /* Make sure sticky sidebar doesn't affect to print */ + } + + .site-branding { + padding: 0; + } + + .site-header { + padding: 7.6923% 0; + } + + .site-description { + display: block; + } + + .hentry + .hentry { + margin-top: 7.6923%; + } + + .hentry.has-post-thumbnail { + padding-top: 7.6923%; + } + + .sticky-post { + background: #000 !important; + color: #fff !important; + } + + .entry-header, + .entry-footer { + padding: 0; + } + + .entry-content, + .entry-summary { + padding: 0 0 7.6923%; + } + + .post-thumbnail img { + margin: 0; + } + + .author-info { + margin: 0; + } + + .page-content { + padding: 7.6923% 0 0; + } + + .page-header { + padding: 3.84615% 0; + } + + .comments-area { + border: 0; + padding: 7.6923% 0 0; + } + + .site-footer { + margin-top: 7.6923%; + padding: 3.84615% 0; + } + + .widecolumn { + margin: 7.6923% 0 0; + padding: 0; + } +} diff --git a/wp-content/themes/twentynineteen/404.php b/wp-content/themes/twentynineteen/404.php new file mode 100644 index 000000000..1067ab030 --- /dev/null +++ b/wp-content/themes/twentynineteen/404.php @@ -0,0 +1,33 @@ + + +
        +
        + +
        + + +
        +

        + +
        +
        + +
        +
        + + + +
        +
        + + + + + + +
        +
        + + source on its own array key, without adding the + * both `width` and `height` attributes, since these are added dnamically, + * before rendering the SVG code. + * + * All icons are assumed to have equal width and height, hence the option + * to only specify a `$size` parameter in the svg methods. + * + * @since 1.0.0 + */ +class TwentyNineteen_SVG_Icons { + + /** + * Gets the SVG code for a given icon. + */ + public static function get_svg( $group, $icon, $size ) { + if ( 'ui' == $group ) { + $arr = self::$ui_icons; + } elseif ( 'social' == $group ) { + $arr = self::$social_icons; + } else { + $arr = array(); + } + if ( array_key_exists( $icon, $arr ) ) { + $repl = sprintf( '\s*<', $svg ); // Remove white space between SVG tags. + return $svg; + } + return null; + } + + /** + * Detects the social network from a URL and returns the SVG code for its icon. + */ + public static function get_social_link_svg( $uri, $size ) { + static $regex_map; // Only compute regex map once, for performance. + if ( ! isset( $regex_map ) ) { + $regex_map = array(); + $map = &self::$social_icons_map; // Use reference instead of copy, to save memory. + foreach ( array_keys( self::$social_icons ) as $icon ) { + $domains = array_key_exists( $icon, $map ) ? $map[ $icon ] : array( sprintf( '%s.com', $icon ) ); + $domains = array_map( 'trim', $domains ); // Remove leading/trailing spaces, to prevent regex from failing to match. + $domains = array_map( 'preg_quote', $domains ); + $regex_map[ $icon ] = sprintf( '/(%s)/i', implode( '|', $domains ) ); + } + } + foreach ( $regex_map as $icon => $regex ) { + if ( preg_match( $regex, $uri ) ) { + return self::get_svg( 'social', $icon, $size ); + } + } + return null; + } + + /** + * User Interface icons – svg sources. + * + * @var array + */ + static $ui_icons = array( + 'link' => /* material-design – link */ ' + + + +', + + 'watch' => /* material-design – watch-later */ ' + + + + + + + + +', + + 'archive' => /* material-design – folder */ ' + + + +', + + 'tag' => /* material-design – local_offer */ ' + + + +', + + 'comment' => /* material-design – comment */ ' + + + +', + + 'person' => /* material-design – person */ ' + + + +', + + 'edit' => /* material-design – edit */ ' + + + +', + + 'chevron_left' => /* material-design – chevron_left */ ' + + + +', + + 'chevron_right' => /* material-design – chevron_right */ ' + + + +', + + 'check' => /* material-design – check */ ' + + + +', + + 'arrow_drop_down_circle' => /* material-design – arrow_drop_down_circle */ ' + + + +', + + 'keyboard_arrow_down' => /* material-design – keyboard_arrow_down */ ' + + + +', + + 'keyboard_arrow_right' => /* material-design – keyboard_arrow_right */ ' + + + +', + + 'keyboard_arrow_left' => /* material-design – keyboard_arrow_left */ ' + + + +', + + 'arrow_drop_down_ellipsis' => /* custom – arrow_drop_down_ellipsis */ ' + + + + + +', + + ); + + /** + * Social Icons – domain mappings. + * + * By default, each Icon ID is matched against a .com TLD. To override this behavior, + * specify all the domains it covers (including the .com TLD too, if applicable). + * + * @var array + */ + static $social_icons_map = array( + 'amazon' => array( + 'amazon.com', + 'amazon.cn', + 'amazon.in', + 'amazon.fr', + 'amazon.de', + 'amazon.it', + 'amazon.nl', + 'amazon.es', + 'amazon.co', + 'amazon.ca', + ), + 'apple' => array( + 'apple.com', + 'itunes.com', + ), + 'behance' => array( + 'behance.net', + ), + 'codepen' => array( + 'codepen.io', + ), + 'facebook' => array( + 'facebook.com', + 'fb.me', + ), + 'feed' => array( + 'feed', + ), + 'google-plus' => array( + 'plus.google.com', + ), + 'lastfm' => array( + 'last.fm', + ), + 'mail' => array( + 'mailto:', + ), + 'slideshare' => array( + 'slideshare.net', + ), + 'pocket' => array( + 'getpocket.com', + ), + 'twitch' => array( + 'twitch.tv', + ), + 'wordpress' => array( + 'wordpress.com', + 'wordpress.org', + ), + ); + + /** + * Social Icons – svg sources. + * + * @var array + */ + static $social_icons = array( + '500px' => ' + + +', + + 'amazon' => ' + + +', + + 'apple' => ' + + +', + + 'bandcamp' => ' + + +', + + 'behance' => ' + + +', + + 'chain' => ' + + +', + + 'codepen' => ' + + +', + + 'deviantart' => ' + + +', + + 'digg' => ' + + +', + + 'dribbble' => ' + + +', + + 'dropbox' => ' + + +', + + 'etsy' => ' + + +', + + 'facebook' => ' + + +', + + 'feed' => ' + + +', + + 'flickr' => ' + + +', + + 'foursquare' => ' + + +', + + 'goodreads' => ' + + +', + + 'google-plus' => ' + + +', + + 'google' => ' + + +', + + 'github' => ' + + +', + + 'instagram' => ' + + +', + + 'lastfm' => ' + + +', + + 'linkedin' => ' + + +', + + 'mail' => ' + + +', + + 'meetup' => ' + + +', + + 'medium' => ' + + +', + + 'pinterest' => ' + + +', + + 'pocket' => ' + + +', + + 'reddit' => ' + + +', + + 'skype' => ' + + +', + + 'slideshare' => ' + + +', + + 'snapchat' => ' + + +', + + 'soundcloud' => ' + + +', + + 'spotify' => ' + + +', + + 'stumbleupon' => ' + + +', + + 'tumblr' => ' + + +', + + 'twitch' => ' + + +', + + 'twitter' => ' + + +', + + 'vimeo' => ' + + +', + + 'vk' => ' + + +', + + 'wordpress' => ' + + +', + + 'yelp' => ' + + +', + + 'youtube' => ' + + +', + + ); + +} diff --git a/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php b/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php new file mode 100644 index 000000000..6237a3608 --- /dev/null +++ b/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php @@ -0,0 +1,125 @@ + + < id="comment-" has_children ? 'parent' : '', $comment ); ?>> +
        +
        +
        + ', $comment_author_url ); + echo $avatar; + } + } + /* + * Using the `check` icon instead of `check_circle`, since we can't add a + * fill color to the inner check shape when in circle form. + */ + if ( twentynineteen_is_comment_by_post_author( $comment ) ) { + printf( '', twentynineteen_get_icon_svg( 'check', 24 ) ); + } + + /* + * Using the `check` icon instead of `check_circle`, since we can't add a + * fill color to the inner check shape when in circle form. + */ + if ( twentynineteen_is_comment_by_post_author( $comment ) ) { + printf( '', twentynineteen_get_icon_svg( 'check', 24 ) ); + } + + printf( + /* translators: %s: comment author link */ + wp_kses( + __( '%s says:', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + '' . $comment_author . '' + ); + + if ( ! empty( $comment_author_url ) ) { + echo ''; + } + ?> +
        + + + + comment_approved ) : ?> +

        + +
        + +
        + +
        + +
        + + 'div-comment', + 'depth' => $depth, + 'max_depth' => $args['max_depth'], + 'before' => '
        ', + 'after' => '
        ', + ) + ) + ); + ?> + + +
        +
        +

        + responses ) { + /* translators: %s: post title */ + printf( _x( 'One reply on “%s”', 'comments title', 'twentynineteen' ), get_the_title() ); + } else { + printf( + /* translators: 1: number of comments, 2: post title */ + _nx( + '%1$s reply on “%2$s”', + '%1$s replies on “%2$s”', + $discussion->responses, + 'comments title', + 'twentynineteen' + ), + number_format_i18n( $discussion->responses ), + get_the_title() + ); + } + } + ?> +

        + +
        + +
          + new TwentyNineteen_Walker_Comment(), + 'avatar_size' => twentynineteen_get_avatar_size(), + 'short_ping' => true, + 'style' => 'ol', + ) + ); + ?> +
        + sprintf( '%s %s %s', $prev_icon, __( 'Previous', 'twentynineteen' ), __( 'Comments', 'twentynineteen' ) ), + 'next_text' => sprintf( '%s %s %s', __( 'Next', 'twentynineteen' ), __( 'Comments', 'twentynineteen' ), $next_icon ), + ) + ); + endif; + + // Show comment form at bottom if showing newest comments at the bottom. + if ( comments_open() && 'asc' === strtolower( get_option( 'comment_order', 'asc' ) ) ) : + ?> +
        + + + +
        + +

        + +

        + +
        diff --git a/wp-content/themes/twentynineteen/fonts/NonBreakingSpaceOverride.woff b/wp-content/themes/twentynineteen/fonts/NonBreakingSpaceOverride.woff new file mode 100644 index 000000000..7f859ce25 Binary files /dev/null and b/wp-content/themes/twentynineteen/fonts/NonBreakingSpaceOverride.woff differ diff --git a/wp-content/themes/twentynineteen/fonts/NonBreakingSpaceOverride.woff2 b/wp-content/themes/twentynineteen/fonts/NonBreakingSpaceOverride.woff2 new file mode 100644 index 000000000..6651a4288 Binary files /dev/null and b/wp-content/themes/twentynineteen/fonts/NonBreakingSpaceOverride.woff2 differ diff --git a/wp-content/themes/twentynineteen/footer.php b/wp-content/themes/twentynineteen/footer.php new file mode 100644 index 000000000..98645131c --- /dev/null +++ b/wp-content/themes/twentynineteen/footer.php @@ -0,0 +1,57 @@ + + + + +
        + +
        + + + , + + + + + ' ); + } + ?> + + + +
        +
        + + + + + + + diff --git a/wp-content/themes/twentynineteen/functions.php b/wp-content/themes/twentynineteen/functions.php new file mode 100644 index 000000000..79dfb7ca9 --- /dev/null +++ b/wp-content/themes/twentynineteen/functions.php @@ -0,0 +1,323 @@ + tag in the document head, and expect WordPress to + * provide it for us. + */ + add_theme_support( 'title-tag' ); + + /* + * Enable support for Post Thumbnails on posts and pages. + * + * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ + */ + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 1568, 9999 ); + + // This theme uses wp_nav_menu() in two locations. + register_nav_menus( + array( + 'menu-1' => __( 'Primary', 'twentynineteen' ), + 'footer' => __( 'Footer Menu', 'twentynineteen' ), + 'social' => __( 'Social Links Menu', 'twentynineteen' ), + ) + ); + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( + 'html5', + array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); + + /** + * Add support for core custom logo. + * + * @link https://codex.wordpress.org/Theme_Logo + */ + add_theme_support( + 'custom-logo', + array( + 'height' => 190, + 'width' => 190, + 'flex-width' => false, + 'flex-height' => false, + ) + ); + + // Add theme support for selective refresh for widgets. + add_theme_support( 'customize-selective-refresh-widgets' ); + + // Add support for Block Styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for full and wide align images. + add_theme_support( 'align-wide' ); + + // Add support for editor styles. + add_theme_support( 'editor-styles' ); + + // Enqueue editor styles. + add_editor_style( 'style-editor.css' ); + + // Add custom editor font sizes. + add_theme_support( + 'editor-font-sizes', + array( + array( + 'name' => __( 'Small', 'twentynineteen' ), + 'shortName' => __( 'S', 'twentynineteen' ), + 'size' => 19.5, + 'slug' => 'small', + ), + array( + 'name' => __( 'Normal', 'twentynineteen' ), + 'shortName' => __( 'M', 'twentynineteen' ), + 'size' => 22, + 'slug' => 'normal', + ), + array( + 'name' => __( 'Large', 'twentynineteen' ), + 'shortName' => __( 'L', 'twentynineteen' ), + 'size' => 36.5, + 'slug' => 'large', + ), + array( + 'name' => __( 'Huge', 'twentynineteen' ), + 'shortName' => __( 'XL', 'twentynineteen' ), + 'size' => 49.5, + 'slug' => 'huge', + ), + ) + ); + + // Editor color palette. + add_theme_support( + 'editor-color-palette', + array( + array( + 'name' => __( 'Primary', 'twentynineteen' ), + 'slug' => 'primary', + 'color' => twentynineteen_hsl_hex( 'default' === get_theme_mod( 'primary_color' ) ? 199 : get_theme_mod( 'primary_color_hue', 199 ), 100, 33 ), + ), + array( + 'name' => __( 'Secondary', 'twentynineteen' ), + 'slug' => 'secondary', + 'color' => twentynineteen_hsl_hex( 'default' === get_theme_mod( 'primary_color' ) ? 199 : get_theme_mod( 'primary_color_hue', 199 ), 100, 23 ), + ), + array( + 'name' => __( 'Dark Gray', 'twentynineteen' ), + 'slug' => 'dark-gray', + 'color' => '#111', + ), + array( + 'name' => __( 'Light Gray', 'twentynineteen' ), + 'slug' => 'light-gray', + 'color' => '#767676', + ), + array( + 'name' => __( 'White', 'twentynineteen' ), + 'slug' => 'white', + 'color' => '#FFF', + ), + ) + ); + + // Add support for responsive embedded content. + add_theme_support( 'responsive-embeds' ); + } +endif; +add_action( 'after_setup_theme', 'twentynineteen_setup' ); + +/** + * Register widget area. + * + * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar + */ +function twentynineteen_widgets_init() { + + register_sidebar( + array( + 'name' => __( 'Footer', 'twentynineteen' ), + 'id' => 'sidebar-1', + 'description' => __( 'Add widgets here to appear in your footer.', 'twentynineteen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + +} +add_action( 'widgets_init', 'twentynineteen_widgets_init' ); + +/** + * Set the content width in pixels, based on the theme's design and stylesheet. + * + * Priority 0 to make it available to lower priority callbacks. + * + * @global int $content_width Content width. + */ +function twentynineteen_content_width() { + // This variable is intended to be overruled from themes. + // Open WPCS issue: {@link https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/issues/1043}. + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound + $GLOBALS['content_width'] = apply_filters( 'twentynineteen_content_width', 640 ); +} +add_action( 'after_setup_theme', 'twentynineteen_content_width', 0 ); + +/** + * Enqueue scripts and styles. + */ +function twentynineteen_scripts() { + wp_enqueue_style( 'twentynineteen-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) ); + + wp_style_add_data( 'twentynineteen-style', 'rtl', 'replace' ); + + if ( has_nav_menu( 'menu-1' ) ) { + wp_enqueue_script( 'twentynineteen-priority-menu', get_theme_file_uri( '/js/priority-menu.js' ), array(), '1.1', true ); + wp_enqueue_script( 'twentynineteen-touch-navigation', get_theme_file_uri( '/js/touch-keyboard-navigation.js' ), array(), '1.1', true ); + } + + wp_enqueue_style( 'twentynineteen-print-style', get_template_directory_uri() . '/print.css', array(), wp_get_theme()->get( 'Version' ), 'print' ); + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } +} +add_action( 'wp_enqueue_scripts', 'twentynineteen_scripts' ); + +/** + * Fix skip link focus in IE11. + * + * This does not enqueue the script because it is tiny and because it is only for IE11, + * thus it does not warrant having an entire dedicated blocking script being loaded. + * + * @link https://git.io/vWdr2 + */ +function twentynineteen_skip_link_focus_fix() { + // The following is minified via `terser --compress --mangle -- js/skip-link-focus-fix.js`. + ?> + + + + + section and everything up until
        + * + * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials + * + * @package WordPress + * @subpackage Twenty_Nineteen + * @since 1.0.0 + */ +?> +> + + + + + + + +> + +
        + + +
        + +
        + +
        + + + + +
        + +
        diff --git a/wp-content/themes/twentynineteen/image.php b/wp-content/themes/twentynineteen/image.php new file mode 100644 index 000000000..000983ce7 --- /dev/null +++ b/wp-content/themes/twentynineteen/image.php @@ -0,0 +1,104 @@ + + +
        +
        + + + +
        > + +
        + ', '' ); ?> +
        + +
        + +
        + + +
        + +
        + + '', + 'link_before' => '', + 'link_after' => '', + 'pagelink' => '' . __( 'Page', 'twentynineteen' ) . ' %', + 'separator' => ', ', + ) + ); + ?> +
        + +
        + %1$s%3$s × %4$s', + _x( 'Full size', 'Used before full size attachment link.', 'twentynineteen' ), + esc_url( wp_get_attachment_url() ), + absint( $metadata['width'] ), + absint( $metadata['height'] ) + ); + } + ?> + + + +
        +
        + + _x( 'Published in
        %title', 'Parent post link', 'twentynineteen' ), + ) + ); + + // If comments are open or we have at least one comment, load up the comment template. + if ( comments_open() || get_comments_number() ) { + comments_template(); + } + + // End the loop. + endwhile; + ?> + +
        +
        + +

        %s

        ', $message ); +} + +/** + * Prevents the Customizer from being loaded on WordPress versions prior to 4.7. + * + * @since Twenty Nineteen 1.0.0 + * + * @global string $wp_version WordPress version. + */ +function twentynineteen_customize() { + wp_die( + sprintf( + __( 'Twenty Nineteen requires at least WordPress version 4.7. You are running version %s. Please upgrade and try again.', 'twentynineteen' ), + $GLOBALS['wp_version'] + ), + '', + array( + 'back_link' => true, + ) + ); +} +add_action( 'load-customize.php', 'twentynineteen_customize' ); + +/** + * Prevents the Theme Preview from being loaded on WordPress versions prior to 4.7. + * + * @since Twenty Nineteen 1.0.0 + * + * @global string $wp_version WordPress version. + */ +function twentynineteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Nineteen requires at least WordPress version 4.7. You are running version %s. Please upgrade and try again.', 'twentynineteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentynineteen_preview' ); diff --git a/wp-content/themes/twentynineteen/inc/color-patterns.php b/wp-content/themes/twentynineteen/inc/color-patterns.php new file mode 100644 index 000000000..c16c1d6a4 --- /dev/null +++ b/wp-content/themes/twentynineteen/inc/color-patterns.php @@ -0,0 +1,271 @@ + .has-primary-background-color, + .entry .entry-content > *[class^="wp-block-"].has-primary-background-color, + .entry .entry-content > *[class^="wp-block-"] .has-primary-background-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color.has-primary-background-color, + .entry .entry-content .wp-block-file .wp-block-file__button { + background-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + /* + * Set Color for: + * - all links + * - main navigation links + * - Post navigation links + * - Post entry meta hover + * - Post entry header more-link hover + * - main navigation svg + * - comment navigation + * - Comment edit link hover + * - Site Footer Link hover + * - Widget links + */ + a, + a:visited, + .main-navigation .main-menu > li, + .main-navigation ul.main-menu > li > a, + .post-navigation .post-title, + .entry .entry-meta a:hover, + .entry .entry-footer a:hover, + .entry .entry-content .more-link:hover, + .main-navigation .main-menu > li > a + svg, + .comment .comment-metadata > a:hover, + .comment .comment-metadata .comment-edit-link:hover, + #colophon .site-info a:hover, + .widget a, + .entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color), + .entry .entry-content > .has-primary-color, + .entry .entry-content > *[class^="wp-block-"] .has-primary-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color blockquote.has-primary-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color blockquote.has-primary-color p { + color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + /* + * Set border color for: + * wp block quote + * :focus + */ + blockquote, + .entry .entry-content blockquote, + .entry .entry-content .wp-block-quote:not(.is-large), + .entry .entry-content .wp-block-quote:not(.is-style-large), + input[type="text"]:focus, + input[type="email"]:focus, + input[type="url"]:focus, + input[type="password"]:focus, + input[type="search"]:focus, + input[type="number"]:focus, + input[type="tel"]:focus, + input[type="range"]:focus, + input[type="date"]:focus, + input[type="month"]:focus, + input[type="week"]:focus, + input[type="time"]:focus, + input[type="datetime"]:focus, + input[type="datetime-local"]:focus, + input[type="color"]:focus, + textarea:focus { + border-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + .gallery-item > div > a:focus { + box-shadow: 0 0 0 2px hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + /* Hover colors */ + a:hover, a:active, + .main-navigation .main-menu > li > a:hover, + .main-navigation .main-menu > li > a:hover + svg, + .post-navigation .nav-links a:hover, + .post-navigation .nav-links a:hover .post-title, + .author-bio .author-description .author-link:hover, + .entry .entry-content > .has-secondary-color, + .entry .entry-content > *[class^="wp-block-"] .has-secondary-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color blockquote.has-secondary-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color blockquote.has-secondary-color p, + .comment .comment-author .fn a:hover, + .comment-reply-link:hover, + .comment-navigation .nav-previous a:hover, + .comment-navigation .nav-next a:hover, + #cancel-comment-reply-link:hover, + .widget a:hover { + color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness_hover . ' ); /* base: #005177; */ + } + + .main-navigation .sub-menu > li > a:hover, + .main-navigation .sub-menu > li > a:focus, + .main-navigation .sub-menu > li > a:hover:after, + .main-navigation .sub-menu > li > a:focus:after, + .main-navigation .sub-menu > li > .menu-item-link-return:hover, + .main-navigation .sub-menu > li > .menu-item-link-return:focus, + .main-navigation .sub-menu > li > a:not(.submenu-expand):hover, + .main-navigation .sub-menu > li > a:not(.submenu-expand):focus, + .entry .entry-content > .has-secondary-background-color, + .entry .entry-content > *[class^="wp-block-"].has-secondary-background-color, + .entry .entry-content > *[class^="wp-block-"] .has-secondary-background-color, + .entry .entry-content > *[class^="wp-block-"].is-style-solid-color.has-secondary-background-color { + background-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness_hover . ' ); /* base: #005177; */ + } + + /* Text selection colors */ + ::selection { + background-color: hsl( ' . $primary_color . ', ' . $saturation_selection . ', ' . $lightness_selection . ' ); /* base: #005177; */ + } + ::-moz-selection { + background-color: hsl( ' . $primary_color . ', ' . $saturation_selection . ', ' . $lightness_selection . ' ); /* base: #005177; */ + }'; + + $editor_css = ' + /* + * Set colors for: + * - links + * - blockquote + * - pullquote (solid color) + * - buttons + */ + .editor-block-list__layout .editor-block-list__block a, + .editor-block-list__layout .editor-block-list__block .wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color), + .editor-block-list__layout .editor-block-list__block .wp-block-button.is-style-outline:hover .wp-block-button__link:not(.has-text-color), + .editor-block-list__layout .editor-block-list__block .wp-block-button.is-style-outline:focus .wp-block-button__link:not(.has-text-color), + .editor-block-list__layout .editor-block-list__block .wp-block-button.is-style-outline:active .wp-block-button__link:not(.has-text-color), + .editor-block-list__layout .editor-block-list__block .wp-block-file .wp-block-file__textlink { + color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + .editor-block-list__layout .editor-block-list__block .wp-block-quote:not(.is-large):not(.is-style-large), + .editor-styles-wrapper .editor-block-list__layout .wp-block-freeform blockquote { + border-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + .editor-block-list__layout .editor-block-list__block .wp-block-pullquote.is-style-solid-color:not(.has-background-color) { + background-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + .editor-block-list__layout .editor-block-list__block .wp-block-file .wp-block-file__button, + .editor-block-list__layout .editor-block-list__block .wp-block-button:not(.is-style-outline) .wp-block-button__link, + .editor-block-list__layout .editor-block-list__block .wp-block-button:not(.is-style-outline) .wp-block-button__link:active, + .editor-block-list__layout .editor-block-list__block .wp-block-button:not(.is-style-outline) .wp-block-button__link:focus, + .editor-block-list__layout .editor-block-list__block .wp-block-button:not(.is-style-outline) .wp-block-button__link:hover { + background-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' ); /* base: #0073a8; */ + } + + /* Hover colors */ + .editor-block-list__layout .editor-block-list__block a:hover, + .editor-block-list__layout .editor-block-list__block a:active, + .editor-block-list__layout .editor-block-list__block .wp-block-file .wp-block-file__textlink:hover { + color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness_hover . ' ); /* base: #005177; */ + } + + /* Do not overwrite solid color pullquote or cover links */ + .editor-block-list__layout .editor-block-list__block .wp-block-pullquote.is-style-solid-color a, + .editor-block-list__layout .editor-block-list__block .wp-block-cover a { + color: inherit; + } + '; + + if ( function_exists( 'register_block_type' ) && is_admin() ) { + $theme_css = $editor_css; + } + + /** + * Filters Twenty Nineteen custom colors CSS. + * + * @since Twenty Nineteen 1.0 + * + * @param string $css Base theme colors CSS. + * @param int $primary_color The user's selected color hue. + * @param string $saturation Filtered theme color saturation level. + */ + return apply_filters( 'twentynineteen_custom_colors_css', $theme_css, $primary_color, $saturation ); +} diff --git a/wp-content/themes/twentynineteen/inc/customizer.php b/wp-content/themes/twentynineteen/inc/customizer.php new file mode 100644 index 000000000..3d2389374 --- /dev/null +++ b/wp-content/themes/twentynineteen/inc/customizer.php @@ -0,0 +1,158 @@ +get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title a', + 'render_callback' => 'twentynineteen_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'render_callback' => 'twentynineteen_customize_partial_blogdescription', + ) + ); + } + + /** + * Primary color. + */ + $wp_customize->add_setting( + 'primary_color', + array( + 'default' => 'default', + 'transport' => 'postMessage', + 'sanitize_callback' => 'twentynineteen_sanitize_color_option', + ) + ); + + $wp_customize->add_control( + 'primary_color', + array( + 'type' => 'radio', + 'label' => __( 'Primary Color', 'twentynineteen' ), + 'choices' => array( + 'default' => _x( 'Default', 'primary color', 'twentynineteen' ), + 'custom' => _x( 'Custom', 'primary color', 'twentynineteen' ), + ), + 'section' => 'colors', + 'priority' => 5, + ) + ); + + // Add primary color hue setting and control. + $wp_customize->add_setting( + 'primary_color_hue', + array( + 'default' => 199, + 'transport' => 'postMessage', + 'sanitize_callback' => 'absint', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'primary_color_hue', + array( + 'description' => __( 'Apply a custom color for buttons, links, featured images, etc.', 'twentynineteen' ), + 'section' => 'colors', + 'mode' => 'hue', + ) + ) + ); + + // Add image filter setting and control. + $wp_customize->add_setting( + 'image_filter', + array( + 'default' => 1, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + 'image_filter', + array( + 'label' => __( 'Apply a filter to featured images using the primary color', 'twentynineteen' ), + 'section' => 'colors', + 'type' => 'checkbox', + ) + ); +} +add_action( 'customize_register', 'twentynineteen_customize_register' ); + +/** + * Render the site title for the selective refresh partial. + * + * @return void + */ +function twentynineteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @return void + */ +function twentynineteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Bind JS handlers to instantly live-preview changes. + */ +function twentynineteen_customize_preview_js() { + wp_enqueue_script( 'twentynineteen-customize-preview', get_theme_file_uri( '/js/customize-preview.js' ), array( 'customize-preview' ), '20181231', true ); +} +add_action( 'customize_preview_init', 'twentynineteen_customize_preview_js' ); + +/** + * Load dynamic logic for the customizer controls area. + */ +function twentynineteen_panels_js() { + wp_enqueue_script( 'twentynineteen-customize-controls', get_theme_file_uri( '/js/customize-controls.js' ), array(), '20181231', true ); +} +add_action( 'customize_controls_enqueue_scripts', 'twentynineteen_panels_js' ); + +/** + * Sanitize custom color choice. + * + * @param string $choice Whether image filter is active. + * + * @return string + */ +function twentynineteen_sanitize_color_option( $choice ) { + $valid = array( + 'default', + 'custom', + ); + + if ( in_array( $choice, $valid, true ) ) { + return $choice; + } + + return 'default'; +} diff --git a/wp-content/themes/twentynineteen/inc/icon-functions.php b/wp-content/themes/twentynineteen/inc/icon-functions.php new file mode 100644 index 000000000..abd7c86bb --- /dev/null +++ b/wp-content/themes/twentynineteen/inc/icon-functions.php @@ -0,0 +1,52 @@ +theme_location ) { + $svg = twentynineteen_get_social_link_svg( $item->url, 26 ); + if ( empty( $svg ) ) { + $svg = twentynineteen_get_icon_svg( 'link' ); + } + $item_output = str_replace( $args->link_after, '' . $svg, $item_output ); + } + + return $item_output; +} +add_filter( 'walker_nav_menu_start_el', 'twentynineteen_nav_menu_social_icons', 10, 4 ); diff --git a/wp-content/themes/twentynineteen/inc/template-functions.php b/wp-content/themes/twentynineteen/inc/template-functions.php new file mode 100644 index 000000000..2dbd0c5eb --- /dev/null +++ b/wp-content/themes/twentynineteen/inc/template-functions.php @@ -0,0 +1,421 @@ +'; + } +} +add_action( 'wp_head', 'twentynineteen_pingback_header' ); + +/** + * Changes comment form default fields. + */ +function twentynineteen_comment_form_defaults( $defaults ) { + $comment_field = $defaults['comment_field']; + + // Adjust height of comment form. + $defaults['comment_field'] = preg_replace( '/rows="\d+"/', 'rows="5"', $comment_field ); + + return $defaults; +} +add_filter( 'comment_form_defaults', 'twentynineteen_comment_form_defaults' ); + +/** + * Filters the default archive titles. + */ +function twentynineteen_get_the_archive_title() { + if ( is_category() ) { + $title = __( 'Category Archives: ', 'twentynineteen' ) . '' . single_term_title( '', false ) . ''; + } elseif ( is_tag() ) { + $title = __( 'Tag Archives: ', 'twentynineteen' ) . '' . single_term_title( '', false ) . ''; + } elseif ( is_author() ) { + $title = __( 'Author Archives: ', 'twentynineteen' ) . '' . get_the_author_meta( 'display_name' ) . ''; + } elseif ( is_year() ) { + $title = __( 'Yearly Archives: ', 'twentynineteen' ) . '' . get_the_date( _x( 'Y', 'yearly archives date format', 'twentynineteen' ) ) . ''; + } elseif ( is_month() ) { + $title = __( 'Monthly Archives: ', 'twentynineteen' ) . '' . get_the_date( _x( 'F Y', 'monthly archives date format', 'twentynineteen' ) ) . ''; + } elseif ( is_day() ) { + $title = __( 'Daily Archives: ', 'twentynineteen' ) . '' . get_the_date() . ''; + } elseif ( is_post_type_archive() ) { + $title = __( 'Post Type Archives: ', 'twentynineteen' ) . '' . post_type_archive_title( '', false ) . ''; + } elseif ( is_tax() ) { + $tax = get_taxonomy( get_queried_object()->taxonomy ); + /* translators: %s: Taxonomy singular name */ + $title = sprintf( esc_html__( '%s Archives:', 'twentynineteen' ), $tax->labels->singular_name ); + } else { + $title = __( 'Archives:', 'twentynineteen' ); + } + return $title; +} +add_filter( 'get_the_archive_title', 'twentynineteen_get_the_archive_title' ); + +/** + * Determines if post thumbnail can be displayed. + */ +function twentynineteen_can_show_post_thumbnail() { + return apply_filters( 'twentynineteen_can_show_post_thumbnail', ! post_password_required() && ! is_attachment() && has_post_thumbnail() ); +} + +/** + * Returns true if image filters are enabled on the theme options. + */ +function twentynineteen_image_filters_enabled() { + return 0 !== get_theme_mod( 'image_filter', 1 ); +} + +/** + * Add custom sizes attribute to responsive image functionality for post thumbnails. + * + * @origin Twenty Nineteen 1.0 + * + * @param array $attr Attributes for the image markup. + * @return string Value for use in post thumbnail 'sizes' attribute. + */ +function twentynineteen_post_thumbnail_sizes_attr( $attr ) { + + if ( is_admin() ) { + return $attr; + } + + if ( ! is_singular() ) { + $attr['sizes'] = '(max-width: 34.9rem) calc(100vw - 2rem), (max-width: 53rem) calc(8 * (100vw / 12)), (min-width: 53rem) calc(6 * (100vw / 12)), 100vw'; + } + + return $attr; +} +add_filter( 'wp_get_attachment_image_attributes', 'twentynineteen_post_thumbnail_sizes_attr', 10, 1 ); + +/** + * Returns the size for avatars used in the theme. + */ +function twentynineteen_get_avatar_size() { + return 60; +} + +/** + * Returns true if comment is by author of the post. + * + * @see get_comment_class() + */ +function twentynineteen_is_comment_by_post_author( $comment = null ) { + if ( is_object( $comment ) && $comment->user_id > 0 ) { + $user = get_userdata( $comment->user_id ); + $post = get_post( $comment->comment_post_ID ); + if ( ! empty( $user ) && ! empty( $post ) ) { + return $comment->user_id === $post->post_author; + } + } + return false; +} + +/** + * Returns information about the current post's discussion, with cache support. + */ +function twentynineteen_get_discussion_data() { + static $discussion, $post_id; + + $current_post_id = get_the_ID(); + if ( $current_post_id === $post_id ) { + return $discussion; /* If we have discussion information for post ID, return cached object */ + } else { + $post_id = $current_post_id; + } + + $comments = get_comments( + array( + 'post_id' => $current_post_id, + 'orderby' => 'comment_date_gmt', + 'order' => get_option( 'comment_order', 'asc' ), /* Respect comment order from Settings » Discussion. */ + 'status' => 'approve', + 'number' => 20, /* Only retrieve the last 20 comments, as the end goal is just 6 unique authors */ + ) + ); + + $authors = array(); + foreach ( $comments as $comment ) { + $authors[] = ( (int) $comment->user_id > 0 ) ? (int) $comment->user_id : $comment->comment_author_email; + } + + $authors = array_unique( $authors ); + $discussion = (object) array( + 'authors' => array_slice( $authors, 0, 6 ), /* Six unique authors commenting on the post. */ + 'responses' => get_comments_number( $current_post_id ), /* Number of responses. */ + ); + + return $discussion; +} + +/** + * Add an extra menu to our nav for our priority+ navigation to use + * + * @param object $nav_menu Nav menu. + * @param object $args Nav menu args. + * @return string More link for hidden menu items. + */ +function twentynineteen_add_ellipses_to_nav( $nav_menu, $args ) { + + if ( 'menu-1' === $args->theme_location ) : + + $nav_menu .= ''; + + endif; + + return $nav_menu; +} +add_filter( 'wp_nav_menu', 'twentynineteen_add_ellipses_to_nav', 10, 2 ); + +/** + * WCAG 2.0 Attributes for Dropdown Menus + * + * Adjustments to menu attributes tot support WCAG 2.0 recommendations + * for flyout and dropdown menus. + * + * @ref https://www.w3.org/WAI/tutorials/menus/flyout/ + */ +function twentynineteen_nav_menu_link_attributes( $atts, $item, $args, $depth ) { + + // Add [aria-haspopup] and [aria-expanded] to menu items that have children + $item_has_children = in_array( 'menu-item-has-children', $item->classes ); + if ( $item_has_children ) { + $atts['aria-haspopup'] = 'true'; + $atts['aria-expanded'] = 'false'; + } + + return $atts; +} +add_filter( 'nav_menu_link_attributes', 'twentynineteen_nav_menu_link_attributes', 10, 4 ); + +/** + * Add a dropdown icon to top-level menu items. + * + * @param string $output Nav menu item start element. + * @param object $item Nav menu item. + * @param int $depth Depth. + * @param object $args Nav menu args. + * @return string Nav menu item start element. + * Add a dropdown icon to top-level menu items + */ +function twentynineteen_add_dropdown_icons( $output, $item, $depth, $args ) { + + // Only add class to 'top level' items on the 'primary' menu. + if ( ! isset( $args->theme_location ) || 'menu-1' !== $args->theme_location ) { + return $output; + } + + if ( in_array( 'mobile-parent-nav-menu-item', $item->classes, true ) && isset( $item->original_id ) ) { + // Inject the keyboard_arrow_left SVG inside the parent nav menu item, and let the item link to the parent item. + // @todo Only do this for nested submenus? If on a first-level submenu, then really the link could be "#" since the desire is to remove the target entirely. + $link = sprintf( + ' + $output = preg_replace( + '##i', + '', + $output, + 1 // Limit. + ); + + } elseif ( in_array( 'menu-item-has-children', $item->classes, true ) ) { + + // Add SVG icon to parent items. + $icon = twentynineteen_get_icon_svg( 'keyboard_arrow_down', 24 ); + + $output .= sprintf( + '', + $icon + ); + } + + return $output; +} +add_filter( 'walker_nav_menu_start_el', 'twentynineteen_add_dropdown_icons', 10, 4 ); + +/** + * Create a nav menu item to be displayed on mobile to navigate from submenu back to the parent. + * + * This duplicates each parent nav menu item and makes it the first child of itself. + * + * @param array $sorted_menu_items Sorted nav menu items. + * @param object $args Nav menu args. + * @return array Amended nav menu items. + */ +function twentynineteen_add_mobile_parent_nav_menu_items( $sorted_menu_items, $args ) { + static $pseudo_id = 0; + if ( ! isset( $args->theme_location ) || 'menu-1' !== $args->theme_location ) { + return $sorted_menu_items; + } + + $amended_menu_items = array(); + foreach ( $sorted_menu_items as $nav_menu_item ) { + $amended_menu_items[] = $nav_menu_item; + if ( in_array( 'menu-item-has-children', $nav_menu_item->classes, true ) ) { + $parent_menu_item = clone $nav_menu_item; + $parent_menu_item->original_id = $nav_menu_item->ID; + $parent_menu_item->ID = --$pseudo_id; + $parent_menu_item->db_id = $parent_menu_item->ID; + $parent_menu_item->object_id = $parent_menu_item->ID; + $parent_menu_item->classes = array( 'mobile-parent-nav-menu-item' ); + $parent_menu_item->menu_item_parent = $nav_menu_item->ID; + + $amended_menu_items[] = $parent_menu_item; + } + } + + return $amended_menu_items; +} +add_filter( 'wp_nav_menu_objects', 'twentynineteen_add_mobile_parent_nav_menu_items', 10, 2 ); + +/** + * Convert HSL to HEX colors + */ +function twentynineteen_hsl_hex( $h, $s, $l, $to_hex = true ) { + + $h /= 360; + $s /= 100; + $l /= 100; + + $r = $l; + $g = $l; + $b = $l; + $v = ( $l <= 0.5 ) ? ( $l * ( 1.0 + $s ) ) : ( $l + $s - $l * $s ); + if ( $v > 0 ) { + $m; + $sv; + $sextant; + $fract; + $vsf; + $mid1; + $mid2; + + $m = $l + $l - $v; + $sv = ( $v - $m ) / $v; + $h *= 6.0; + $sextant = floor( $h ); + $fract = $h - $sextant; + $vsf = $v * $sv * $fract; + $mid1 = $m + $vsf; + $mid2 = $v - $vsf; + + switch ( $sextant ) { + case 0: + $r = $v; + $g = $mid1; + $b = $m; + break; + case 1: + $r = $mid2; + $g = $v; + $b = $m; + break; + case 2: + $r = $m; + $g = $v; + $b = $mid1; + break; + case 3: + $r = $m; + $g = $mid2; + $b = $v; + break; + case 4: + $r = $mid1; + $g = $m; + $b = $v; + break; + case 5: + $r = $v; + $g = $m; + $b = $mid2; + break; + } + } + $r = round( $r * 255, 0 ); + $g = round( $g * 255, 0 ); + $b = round( $b * 255, 0 ); + + if ( $to_hex ) { + + $r = ( $r < 15 ) ? '0' . dechex( $r ) : dechex( $r ); + $g = ( $g < 15 ) ? '0' . dechex( $g ) : dechex( $g ); + $b = ( $b < 15 ) ? '0' . dechex( $b ) : dechex( $b ); + + return "#$r$g$b"; + + } + + return "rgb($r, $g, $b)"; +} diff --git a/wp-content/themes/twentynineteen/inc/template-tags.php b/wp-content/themes/twentynineteen/inc/template-tags.php new file mode 100644 index 000000000..6b210bcaa --- /dev/null +++ b/wp-content/themes/twentynineteen/inc/template-tags.php @@ -0,0 +1,258 @@ +%2$s'; + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( + $time_string, + esc_attr( get_the_date( DATE_W3C ) ), + esc_html( get_the_date() ), + esc_attr( get_the_modified_date( DATE_W3C ) ), + esc_html( get_the_modified_date() ) + ); + + printf( + '%1$s%3$s', + twentynineteen_get_icon_svg( 'watch', 16 ), + esc_url( get_permalink() ), + $time_string + ); + } +endif; + +if ( ! function_exists( 'twentynineteen_posted_by' ) ) : + /** + * Prints HTML with meta information about theme author. + */ + function twentynineteen_posted_by() { + printf( + /* translators: 1: SVG icon. 2: post author, only visible to screen readers. 3: author link. */ + '', + twentynineteen_get_icon_svg( 'person', 16 ), + __( 'Posted by', 'twentynineteen' ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + esc_html( get_the_author() ) + ); + } +endif; + +if ( ! function_exists( 'twentynineteen_comment_count' ) ) : + /** + * Prints HTML with the comment count for the current post. + */ + function twentynineteen_comment_count() { + if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) { + echo ''; + echo twentynineteen_get_icon_svg( 'comment', 16 ); + + /* translators: %s: Name of current post. Only visible to screen readers. */ + comments_popup_link( sprintf( __( 'Leave a comment on %s', 'twentynineteen' ), get_the_title() ) ); + + echo ''; + } + } +endif; + +if ( ! function_exists( 'twentynineteen_entry_footer' ) ) : + /** + * Prints HTML with meta information for the categories, tags and comments. + */ + function twentynineteen_entry_footer() { + + // Hide author, post date, category and tag text for pages. + if ( 'post' === get_post_type() ) { + + // Posted by + twentynineteen_posted_by(); + + // Posted on + twentynineteen_posted_on(); + + /* translators: used between list items, there is a space after the comma. */ + $categories_list = get_the_category_list( __( ', ', 'twentynineteen' ) ); + if ( $categories_list ) { + printf( + /* translators: 1: SVG icon. 2: posted in label, only visible to screen readers. 3: list of categories. */ + '%1$s%2$s%3$s', + twentynineteen_get_icon_svg( 'archive', 16 ), + __( 'Posted in', 'twentynineteen' ), + $categories_list + ); // WPCS: XSS OK. + } + + /* translators: used between list items, there is a space after the comma. */ + $tags_list = get_the_tag_list( '', __( ', ', 'twentynineteen' ) ); + if ( $tags_list ) { + printf( + /* translators: 1: SVG icon. 2: posted in label, only visible to screen readers. 3: list of tags. */ + '%1$s%2$s %3$s', + twentynineteen_get_icon_svg( 'tag', 16 ), + __( 'Tags:', 'twentynineteen' ), + $tags_list + ); // WPCS: XSS OK. + } + } + + // Comment count. + if ( ! is_singular() ) { + twentynineteen_comment_count(); + } + + // Edit post link. + edit_post_link( + sprintf( + wp_kses( + /* translators: %s: Name of current post. Only visible to screen readers. */ + __( 'Edit %s', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ), + '' . twentynineteen_get_icon_svg( 'edit', 16 ), + '' + ); + } +endif; + +if ( ! function_exists( 'twentynineteen_post_thumbnail' ) ) : + /** + * Displays an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index views, or a div + * element when on single views. + */ + function twentynineteen_post_thumbnail() { + if ( ! twentynineteen_can_show_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + +
        + +
        + + + +
        + +
        + + %s
        ', get_avatar( $id_or_email, twentynineteen_get_avatar_size() ) ); + } +endif; + +if ( ! function_exists( 'twentynineteen_discussion_avatars_list' ) ) : + /** + * Displays a list of avatars involved in a discussion for a given post. + */ + function twentynineteen_discussion_avatars_list( $comment_authors ) { + if ( empty( $comment_authors ) ) { + return; + } + echo '
          ', "\n"; + foreach ( $comment_authors as $id_or_email ) { + printf( + "
        1. %s
        2. \n", + twentynineteen_get_user_avatar_markup( $id_or_email ) + ); + } + echo '
        ', "\n"; + } +endif; + +if ( ! function_exists( 'twentynineteen_comment_form' ) ) : + /** + * Documentation for function. + */ + function twentynineteen_comment_form( $order ) { + if ( true === $order || strtolower( $order ) === strtolower( get_option( 'comment_order', 'asc' ) ) ) { + + comment_form( + array( + 'logged_in_as' => null, + 'title_reply' => null, + ) + ); + } + } +endif; + +if ( ! function_exists( 'twentynineteen_the_posts_navigation' ) ) : + /** + * Documentation for function. + */ + function twentynineteen_the_posts_navigation() { + the_posts_pagination( + array( + 'mid_size' => 2, + 'prev_text' => sprintf( + '%s %s', + twentynineteen_get_icon_svg( 'chevron_left', 22 ), + __( 'Newer posts', 'twentynineteen' ) + ), + 'next_text' => sprintf( + '%s %s', + __( 'Older posts', 'twentynineteen' ), + twentynineteen_get_icon_svg( 'chevron_right', 22 ) + ), + ) + ); + } +endif; + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Nineteen 1.4 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Nineteen 1.4 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentynineteen/index.php b/wp-content/themes/twentynineteen/index.php new file mode 100644 index 000000000..480be7ef1 --- /dev/null +++ b/wp-content/themes/twentynineteen/index.php @@ -0,0 +1,47 @@ + + +
        +
        + + + +
        +
        + + getAvailableSpace( button, container ); + } + + /** + * Set menu container variable + */ + var navContainer = document.querySelector('.main-navigation'); + var breaks = []; + + /** + * Let’s bail if we our menu doesn't exist + */ + if ( ! navContainer ) { + return; + } + + /** + * Refreshes the list item from the menu depending on the menu size + */ + function updateNavigationMenu( container ) { + + /** + * Let’s bail if our menu is empty + */ + if ( ! container.parentNode.querySelector('.main-menu[id]') ) { + return; + } + + // Adds the necessary UI to operate the menu. + var visibleList = container.parentNode.querySelector('.main-menu[id]'); + var hiddenList = visibleList.parentNode.nextElementSibling.querySelector('.hidden-links'); + var toggleButton = visibleList.parentNode.nextElementSibling.querySelector('.main-menu-more-toggle'); + + if ( isOverflowingNavivation( visibleList, toggleButton, container ) ) { + + // Record the width of the list + breaks.push( visibleList.offsetWidth ); + // Move last item to the hidden list + prependElement( hiddenList, ! visibleList.lastChild || null === visibleList.lastChild ? visibleList.previousElementSibling : visibleList.lastChild ); + // Show the toggle button + showButton( toggleButton ); + + } else { + + // There is space for another item in the nav + if ( getAvailableSpace( toggleButton, container ) > breaks[breaks.length - 1] ) { + // Move the item to the visible list + visibleList.appendChild( hiddenList.firstChild.nextSibling ); + breaks.pop(); + } + + // Hide the dropdown btn if hidden list is empty + if (breaks.length < 2) { + hideButton( toggleButton ); + } + } + + // Recur if the visible list is still overflowing the nav + if ( isOverflowingNavivation( visibleList, toggleButton, container ) ) { + updateNavigationMenu( container ); + } + } + + /** + * Run our priority+ function as soon as the document is `ready` + */ + document.addEventListener( 'DOMContentLoaded', function() { + + updateNavigationMenu( navContainer ); + + // Also, run our priority+ function on selective refresh in the customizer + var hasSelectiveRefresh = ( + 'undefined' !== typeof wp && + wp.customize && + wp.customize.selectiveRefresh && + wp.customize.navMenusPreview.NavMenuInstancePartial + ); + + if ( hasSelectiveRefresh ) { + // Re-run our priority+ function on Nav Menu partial refreshes + wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function ( placement ) { + + var isNewNavMenu = ( + placement && + placement.partial.id.includes( 'nav_menu_instance' ) && + 'null' !== placement.container[0].parentNode && + placement.container[0].parentNode.classList.contains( 'main-navigation' ) + ); + + if ( isNewNavMenu ) { + updateNavigationMenu( placement.container[0].parentNode ); + } + }); + } + }); + + /** + * Run our priority+ function on load + */ + window.addEventListener( 'load', function() { + updateNavigationMenu( navContainer ); + }); + + /** + * Run our priority+ function every time the window resizes + */ + var isResizing = false; + window.addEventListener( 'resize', + debounce( function() { + if ( isResizing ) { + return; + } + + isResizing = true; + setTimeout( function() { + updateNavigationMenu( navContainer ); + isResizing = false; + }, 150 ); + } ) + ); + + /** + * Run our priority+ function + */ + updateNavigationMenu( navContainer ); + +})(); diff --git a/wp-content/themes/twentynineteen/js/skip-link-focus-fix.js b/wp-content/themes/twentynineteen/js/skip-link-focus-fix.js new file mode 100644 index 000000000..32ba80cc3 --- /dev/null +++ b/wp-content/themes/twentynineteen/js/skip-link-focus-fix.js @@ -0,0 +1,33 @@ +/** + * File skip-link-focus-fix.js. + * + * Helps with accessibility for keyboard only users. + * + * This is the source file for what is minified in the twentynineteen_skip_link_focus_fix() PHP function. + * + * Learn more: https://git.io/vWdr2 + */ +( function() { + var isIe = /(trident|msie)/i.test( navigator.userAgent ); + + if ( isIe && document.getElementById && window.addEventListener ) { + window.addEventListener( 'hashchange', function() { + var id = location.hash.substring( 1 ), + element; + + if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { + return; + } + + element = document.getElementById( id ); + + if ( element ) { + if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { + element.tabIndex = -1; + } + + element.focus(); + } + }, false ); + } +} )(); diff --git a/wp-content/themes/twentynineteen/js/touch-keyboard-navigation.js b/wp-content/themes/twentynineteen/js/touch-keyboard-navigation.js new file mode 100644 index 000000000..2fa190562 --- /dev/null +++ b/wp-content/themes/twentynineteen/js/touch-keyboard-navigation.js @@ -0,0 +1,354 @@ +/** + * Touch & Keyboard navigation. + * + * Contains handlers for touch devices and keyboard navigation. + */ + +(function() { + + /** + * Debounce + * + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + */ + function debounce(func, wait, immediate) { + 'use strict'; + + var timeout; + wait = (typeof wait !== 'undefined') ? wait : 20; + immediate = (typeof immediate !== 'undefined') ? immediate : true; + + return function() { + + var context = this, args = arguments; + var later = function() { + timeout = null; + + if (!immediate) { + func.apply(context, args); + } + }; + + var callNow = immediate && !timeout; + + clearTimeout(timeout); + timeout = setTimeout(later, wait); + + if (callNow) { + func.apply(context, args); + } + }; + } + + /** + * Add class + * + * @param {Object} el + * @param {string} cls + */ + function addClass(el, cls) { + if ( ! el.className.match( '(?:^|\\s)' + cls + '(?!\\S)') ) { + el.className += ' ' + cls; + } + } + + /** + * Delete class + * + * @param {Object} el + * @param {string} cls + */ + function deleteClass(el, cls) { + el.className = el.className.replace( new RegExp( '(?:^|\\s)' + cls + '(?!\\S)' ),'' ); + } + + /** + * Has class? + * + * @param {Object} el + * @param {string} cls + * + * @returns {boolean} Has class + */ + function hasClass(el, cls) { + + if ( el.className.match( '(?:^|\\s)' + cls + '(?!\\S)' ) ) { + return true; + } + } + + /** + * Toggle Aria Expanded state for screenreaders + * + * @param {Object} ariaItem + */ + function toggleAriaExpandedState( ariaItem ) { + 'use strict'; + + var ariaState = ariaItem.getAttribute('aria-expanded'); + + if ( ariaState === 'true' ) { + ariaState = 'false'; + } else { + ariaState = 'true'; + } + + ariaItem.setAttribute('aria-expanded', ariaState); + } + + /** + * Open sub-menu + * + * @param {Object} currentSubMenu + */ + function openSubMenu( currentSubMenu ) { + 'use strict'; + + // Update classes + // classList.add is not supported in IE11 + currentSubMenu.parentElement.className += ' off-canvas'; + currentSubMenu.parentElement.lastElementChild.className += ' expanded-true'; + + // Update aria-expanded state + toggleAriaExpandedState( currentSubMenu ); + } + + /** + * Close sub-menu + * + * @param {Object} currentSubMenu + */ + function closeSubMenu( currentSubMenu ) { + 'use strict'; + + var menuItem = getCurrentParent( currentSubMenu, '.menu-item' ); // this.parentNode + var menuItemAria = menuItem.querySelector('a[aria-expanded]'); + var subMenu = currentSubMenu.closest('.sub-menu'); + + // If this is in a sub-sub-menu, go back to parent sub-menu + if ( getCurrentParent( currentSubMenu, 'ul' ).classList.contains( 'sub-menu' ) ) { + + // Update classes + // classList.remove is not supported in IE11 + menuItem.className = menuItem.className.replace( 'off-canvas', '' ); + subMenu.className = subMenu.className.replace( 'expanded-true', '' ); + + // Update aria-expanded and :focus states + toggleAriaExpandedState( menuItemAria ); + + // Or else close all sub-menus + } else { + + // Update classes + // classList.remove is not supported in IE11 + menuItem.className = menuItem.className.replace( 'off-canvas', '' ); + menuItem.lastElementChild.className = menuItem.lastElementChild.className.replace( 'expanded-true', '' ); + + // Update aria-expanded and :focus states + toggleAriaExpandedState( menuItemAria ); + } + } + + /** + * Find first ancestor of an element by selector + * + * @param {Object} child + * @param {String} selector + * @param {String} stopSelector + */ + function getCurrentParent( child, selector, stopSelector ) { + + var currentParent = null; + + while ( child ) { + + if ( child.matches(selector) ) { + + currentParent = child; + break; + + } else if ( stopSelector && child.matches(stopSelector) ) { + + break; + } + + child = child.parentElement; + } + + return currentParent; + } + + /** + * Remove all off-canvas states + */ + function removeAllFocusStates() { + 'use strict'; + + var siteBranding = document.getElementsByClassName( 'site-branding' )[0]; + var getFocusedElements = siteBranding.querySelectorAll(':hover, :focus, :focus-within'); + var getFocusedClassElements = siteBranding.querySelectorAll('.is-focused'); + var i; + var o; + + for ( i = 0; i < getFocusedElements.length; i++) { + getFocusedElements[i].blur(); + } + + for ( o = 0; o < getFocusedClassElements.length; o++) { + deleteClass( getFocusedClassElements[o], 'is-focused' ); + } + } + + /** + * Matches polyfill for IE11 + */ + if (!Element.prototype.matches) { + Element.prototype.matches = Element.prototype.msMatchesSelector; + } + + /** + * Toggle `focus` class to allow sub-menu access on touch screens. + */ + function toggleSubmenuDisplay() { + + document.addEventListener('touchstart', function(event) { + + if ( event.target.matches('a') ) { + + var url = event.target.getAttribute( 'href' ) ? event.target.getAttribute( 'href' ) : ''; + + // Open submenu if url is # + if ( '#' === url && event.target.nextSibling.matches('.submenu-expand') ) { + openSubMenu( event.target ); + } + } + + // Check if .submenu-expand is touched + if ( event.target.matches('.submenu-expand') ) { + openSubMenu(event.target); + + // Check if child of .submenu-expand is touched + } else if ( null != getCurrentParent( event.target, '.submenu-expand' ) && + getCurrentParent( event.target, '.submenu-expand' ).matches( '.submenu-expand' ) ) { + openSubMenu( getCurrentParent( event.target, '.submenu-expand' ) ); + + // Check if .menu-item-link-return is touched + } else if ( event.target.matches('.menu-item-link-return') ) { + closeSubMenu( event.target ); + + // Check if child of .menu-item-link-return is touched + } else if ( null != getCurrentParent( event.target, '.menu-item-link-return' ) && getCurrentParent( event.target, '.menu-item-link-return' ).matches( '.menu-item-link-return' ) ) { + closeSubMenu( event.target ); + } + + // Prevent default mouse/focus events + removeAllFocusStates(); + + }, false); + + document.addEventListener('touchend', function(event) { + + var mainNav = getCurrentParent( event.target, '.main-navigation' ); + + if ( null != mainNav && hasClass( mainNav, '.main-navigation' ) ) { + // Prevent default mouse events + event.preventDefault(); + + } else if ( + event.target.matches('.submenu-expand') || + null != getCurrentParent( event.target, '.submenu-expand' ) && + getCurrentParent( event.target, '.submenu-expand' ).matches( '.submenu-expand' ) || + event.target.matches('.menu-item-link-return') || + null != getCurrentParent( event.target, '.menu-item-link-return' ) && + getCurrentParent( event.target, '.menu-item-link-return' ).matches( '.menu-item-link-return' ) ) { + // Prevent default mouse events + event.preventDefault(); + } + + // Prevent default mouse/focus events + removeAllFocusStates(); + + }, false); + + document.addEventListener('focus', function(event) { + + if ( event.target.matches('.main-navigation > div > ul > li a') ) { + + // Remove Focused elements in sibling div + var currentDiv = getCurrentParent( event.target, 'div', '.main-navigation' ); + var currentDivSibling = currentDiv.previousElementSibling === null ? currentDiv.nextElementSibling : currentDiv.previousElementSibling; + var focusedElement = currentDivSibling.querySelector( '.is-focused' ); + var focusedClass = 'is-focused'; + var prevLi = getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ).previousElementSibling; + var nextLi = getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ).nextElementSibling; + + if ( null !== focusedElement && null !== hasClass( focusedElement, focusedClass ) ) { + deleteClass( focusedElement, focusedClass ); + } + + // Add .is-focused class to top-level li + if ( getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ) ) { + addClass( getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ), focusedClass ); + } + + // Check for previous li + if ( prevLi && hasClass( prevLi, focusedClass ) ) { + deleteClass( prevLi, focusedClass ); + } + + // Check for next li + if ( nextLi && hasClass( nextLi, focusedClass ) ) { + deleteClass( nextLi, focusedClass ); + } + } + + }, true); + + document.addEventListener('click', function(event) { + + // Remove all focused menu states when clicking outside site branding + if ( event.target !== document.getElementsByClassName( 'site-branding' )[0] ) { + removeAllFocusStates(); + } else { + // nothing + } + + }, false); + } + + /** + * Run our sub-menu function as soon as the document is `ready` + */ + document.addEventListener( 'DOMContentLoaded', function() { + toggleSubmenuDisplay(); + }); + + /** + * Run our sub-menu function on selective refresh in the customizer + */ + document.addEventListener( 'customize-preview-menu-refreshed', function( e, params ) { + if ( 'menu-1' === params.wpNavMenuArgs.theme_location ) { + toggleSubmenuDisplay(); + } + }); + + /** + * Run our sub-menu function every time the window resizes + */ + var isResizing = false; + window.addEventListener( 'resize', function() { + isResizing = true; + debounce( function() { + if ( isResizing ) { + return; + } + + toggleSubmenuDisplay(); + isResizing = false; + + }, 150 ); + } ); + +})(); diff --git a/wp-content/themes/twentynineteen/package-lock.json b/wp-content/themes/twentynineteen/package-lock.json new file mode 100644 index 000000000..5945aebbd --- /dev/null +++ b/wp-content/themes/twentynineteen/package-lock.json @@ -0,0 +1,4447 @@ +{ + "name": "twentynineteen", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", + "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==", + "dev": true + }, + "@wordpress/browserslist-config": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-2.2.2.tgz", + "integrity": "sha512-RZ9XeDeXTc/l3RdSnfYYwcsylFPouV+2ZpQQaAgALSXthMWJT2wU61zD4mH9aMI5Oo6Z8OUVI2vOZM/7HObPxw==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.5.tgz", + "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", + "dev": true, + "requires": { + "browserslist": "^4.1.0", + "caniuse-lite": "^1.0.30000884", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.2", + "postcss-value-parser": "^3.2.3" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browserslist": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", + "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000884", + "electron-to-chromium": "^1.3.62", + "node-releases": "^1.0.0-alpha.11" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000885", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz", + "integrity": "sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "chokidar-cli": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-1.2.1.tgz", + "integrity": "sha512-JIrV9Z/pT7KjBWp9u+Uba0utdl2rmNaTj6t4ucaFseYDQASHZnWXy6vJIufDX+4FVh081gQZ2odrqorMfQhn7w==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chokidar": "2.0.4", + "lodash": "4.17.10", + "yargs": "12.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz", + "integrity": "sha512-WYMjqCnPVS5JA+XvwEnpwucJpVi2+q9cdCFpbhxgWGsCtforFBEkuP9+nCyy/wnU/0SyLcLRIeZct9ayMGcXoQ==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-glob": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.3.tgz", + "integrity": "sha512-NiX+JXjnx43RzvVFwRWfPKo4U+1BrK5pJPsHQdKMlLoFHrrGktXglQhHliSihWAq+m1z6fHk3uwGHrtRbS9vLA==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.0.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "dev": true, + "requires": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + } + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-base64": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", + "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", + "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", + "dev": true + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "dev": true, + "requires": { + "mime-db": "~1.36.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.11.tgz", + "integrity": "sha512-CaViu+2FqTNYOYNihXa5uPS/zry92I3vPU4nCB6JB3OeZ2UGtOpF5gRwuN4+m3hbEcL47bOXyun1jX2iC+3uEQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", + "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "2.87.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pidtree": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", + "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", + "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-6.0.1.tgz", + "integrity": "sha512-M9GiEMzXVMlI4ln8e+mdeHT+qvoHVZdlN06hj5/EhrRZWDr+J1sniPeGJ4nghknl+du3Oj2UoqqhgpKKhiZ9+w==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "chokidar": "^2.0.0", + "dependency-graph": "^0.7.0", + "fs-extra": "^7.0.0", + "get-stdin": "^6.0.0", + "globby": "^8.0.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "postcss-reporter": "^6.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "dev": true, + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-reporter": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.0.tgz", + "integrity": "sha512-5xQXm1UPWuFObjbtyQzWvQaupru8yFcFi4HUlm6OPo1o2bUszYASuqRJ7bVArb3svGCdbYtqdMBKrqR1Aoy+tw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "rtlcss": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.4.0.tgz", + "integrity": "sha512-hdjFhZ5FCI0ABOfyXOMOhBtwPWtANLCG7rOiOcRf+yi5eDdxmDjqBruWouEnwVdzfh/TWF6NNncIEsigOCFZOA==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.14", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +} diff --git a/wp-content/themes/twentynineteen/package.json b/wp-content/themes/twentynineteen/package.json new file mode 100644 index 000000000..5f424d3fe --- /dev/null +++ b/wp-content/themes/twentynineteen/package.json @@ -0,0 +1,44 @@ +{ + "name": "twentynineteen", + "version": "1.0.0", + "description": "Default WP Theme", + "bugs": { + "url": "https://github.com/WordPress/twentynineteen/issues" + }, + "homepage": "https://github.com/WordPress/twentynineteen#readme", + "devDependencies": { + "@wordpress/browserslist-config": "^2.2.2", + "autoprefixer": "^9.1.5", + "chokidar-cli": "^1.2.1", + "node-sass": "^4.9.3", + "npm-run-all": "^4.1.5", + "postcss-cli": "^6.0.1", + "postcss-focus-within": "^3.0.0", + "rtlcss": "^2.4.0" + }, + "rtlcssConfig": { + "options": { + "autoRename": false, + "autoRenameStrict": false, + "blacklist": {}, + "clean": true, + "greedy": false, + "processUrls": false, + "stringMap": [] + }, + "plugins": [], + "map": false + }, + "browserslist": [ + "extends @wordpress/browserslist-config" + ], + "scripts": { + "build:style": "node-sass style.scss style.css --output-style expanded && postcss -r style.css", + "build:style-editor": "node-sass style-editor.scss style-editor.css --output-style expanded && postcss -r style-editor.css", + "build:style-editor-customizer": "node-sass style-editor-customizer.scss style-editor-customizer.css --output-style expanded && postcss -r style-editor-customizer.css", + "build:rtl": "rtlcss style.css style-rtl.css", + "build:print": "node-sass print.scss print.css --output-style expanded && postcss -r print.css", + "build": "run-p \"build:*\"", + "watch": "chokidar \"**/*.scss\" -c \"npm run build\" --initial" + } +} diff --git a/wp-content/themes/twentynineteen/page.php b/wp-content/themes/twentynineteen/page.php new file mode 100644 index 000000000..9b1540685 --- /dev/null +++ b/wp-content/themes/twentynineteen/page.php @@ -0,0 +1,38 @@ + + +
        +
        + + + +
        +
        + +>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Margins +# Typography +# Page breaks +# Links +# Visibility +--------------------------------------------------------------*/ +@media print { + /* Margins */ + @page { + margin: 2cm; + } + .entry { + margin-top: 1em; + } + .entry .entry-header, .site-footer .site-info { + margin: 0; + } + /* Fonts */ + body { + font: 13pt Georgia, "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + color: #000; + } + h1 { + font-size: 24pt; + } + h2, + h3, + h4, + .has-regular-font-size, + .has-large-font-size, + h2.author-title, + p.author-bio, + .comments-title, h3 { + font-size: 14pt; + margin-top: 25px; + } + /* Page breaks */ + a { + page-break-inside: avoid; + } + blockquote { + page-break-inside: avoid; + } + h1, + h2, + h3, + h4, + h5, + h6 { + page-break-after: avoid; + page-break-inside: avoid; + } + img { + page-break-inside: avoid; + page-break-after: avoid; + } + table, pre { + page-break-inside: avoid; + } + ul, ol, dl { + page-break-before: avoid; + } + /* Links */ + a:link, a:visited, a { + background: transparent; + font-weight: bold; + text-decoration: underline; + text-align: left; + } + a { + page-break-inside: avoid; + } + a[href^=http]:after { + content: " < " attr(href) "> "; + } + a:after > img { + content: ""; + } + article a[href^="#"]:after { + content: ""; + } + a:not(:local-link):after { + content: " < " attr(href) "> "; + } + /* Visibility */ + .main-navigation, + .site-title + .main-navigation, + .social-navigation, + .site-branding-container:before, + .entry .entry-title:before, + .entry-footer, + .author-description:before, + .post-navigation, + .widget-area, + .comment-form-flex, + .comment-reply, + .comment .comment-metadata .edit-link { + display: none; + } + .entry .entry-content .wp-block-button .wp-block-button__link, + .entry .entry-content .button { + color: #000; + background: none; + } + /* Site Header (With Featured Image) */ + .site-header.featured-image { + min-height: 0; + } + .site-header.featured-image .main-navigation a, + .site-header.featured-image .main-navigation a + svg, + .site-header.featured-image .social-navigation a, + .site-header.featured-image .site-title a, + .site-header.featured-image .site-featured-image a, + .site-header.featured-image .site-branding .site-title, + .site-header.featured-image .site-branding .site-description, + .site-header.featured-image .main-navigation a:after, + .site-header.featured-image .main-navigation .main-menu > li.menu-item-has-children:after, + .site-header.featured-image .main-navigation li, + .site-header.featured-image .social-navigation li, + .site-header.featured-image .entry-meta, + .site-header.featured-image .entry-title, + .site-header.featured-image#masthead .site-title a { + color: #000; + text-shadow: none; + } + .site-header.featured-image .site-featured-image .entry-header, + .site-header.featured-image .site-branding-container { + margin-top: 0; + margin-bottom: 0; + } + .site-header.featured-image .site-featured-image .post-thumbnail img { + position: relative; + height: initial; + width: initial; + object-fit: none; + min-width: 0; + min-height: 0; + max-width: 100%; + margin-top: 1rem; + } + /* Remove image filters from featured image */ + .image-filters-enabled *:after { + display: none !important; + } + .image-filters-enabled .site-header.featured-image .site-featured-image:before { + display: none; + } + .image-filters-enabled .site-header.featured-image .site-featured-image .post-thumbnail img { + filter: none; + } +} diff --git a/wp-content/themes/twentynineteen/print.scss b/wp-content/themes/twentynineteen/print.scss new file mode 100644 index 000000000..47976da65 --- /dev/null +++ b/wp-content/themes/twentynineteen/print.scss @@ -0,0 +1,198 @@ +/* +Theme Name: Twenty Nineteen + +Adding print support. The print styles are based on the the great work of +Andreas Hecht in https://www.jotform.com/blog/css-perfect-print-stylesheet-98272/. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Margins +# Typography +# Page breaks +# Links +# Visibility +--------------------------------------------------------------*/ + +@media print { + + /* Margins */ + + @page { + margin: 2cm; + } + + .entry { + margin-top: 1em; + } + + .entry .entry-header, .site-footer .site-info { + margin: 0; + } + + /* Fonts */ + + body { + font: 13pt Georgia, "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + color: #000; + } + + h1 { + font-size: 24pt; + } + + h2, + h3, + h4, + .has-regular-font-size, + .has-large-font-size, + h2.author-title, + p.author-bio, + .comments-title, h3 { + font-size: 14pt; + margin-top: 25px; + } + + /* Page breaks */ + + a { + page-break-inside: avoid + } + + blockquote { + page-break-inside: avoid; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + page-break-after: avoid; + page-break-inside: avoid + } + + img { + page-break-inside: avoid; + page-break-after: avoid; + } + + table, pre { + page-break-inside: avoid; + } + + ul, ol, dl { + page-break-before: avoid; + } + + /* Links */ + + a:link, a:visited, a { + background: transparent; + font-weight: bold; + text-decoration: underline; + text-align: left; + } + + a { + page-break-inside: avoid; + } + + a[href^=http]:after { + content: " < " attr(href) "> "; + } + + a:after > img { + content: ""; + } + + article a[href^="#"]:after { + content: ""; + } + + a:not(:local-link):after { + content: " < " attr(href) "> "; + } + + /* Visibility */ + .main-navigation, + .site-title + .main-navigation, + .social-navigation, + .site-branding-container:before, + .entry .entry-title:before, + .entry-footer, + .author-description:before, + .post-navigation, + .widget-area, + .comment-form-flex, + .comment-reply, + .comment .comment-metadata .edit-link { + display: none; + } + + .entry .entry-content .wp-block-button .wp-block-button__link, + .entry .entry-content .button { + color: #000; + background: none; + } + + /* Site Header (With Featured Image) */ + .site-header.featured-image { + min-height: 0; + + .main-navigation a, + .main-navigation a + svg, + .social-navigation a, + .site-title a, + .site-featured-image a, + .site-branding .site-title, + .site-branding .site-description, + .main-navigation a:after, + .main-navigation .main-menu > li.menu-item-has-children:after, + .main-navigation li, + .social-navigation li, + .entry-meta, + .entry-title, + &#masthead .site-title a { + color: #000; + text-shadow: none; + } + + .site-featured-image .entry-header, + .site-branding-container { + margin-top: 0; + margin-bottom: 0; + } + + .site-featured-image .post-thumbnail img { + position: relative; + height: initial; + width: initial; + object-fit: none; + min-width: 0; + min-height: 0; + max-width: 100%; + margin-top: 1rem; + } + } + + /* Remove image filters from featured image */ + .image-filters-enabled { + + *:after { + display: none !important; + } + + .site-header.featured-image .site-featured-image:before { + display: none; + } + + .site-header.featured-image .site-featured-image .post-thumbnail img { + filter: none; + } + } +} \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/readme.txt b/wp-content/themes/twentynineteen/readme.txt new file mode 100644 index 000000000..ab446a9a4 --- /dev/null +++ b/wp-content/themes/twentynineteen/readme.txt @@ -0,0 +1,45 @@ +=== Twenty Nineteen === +Contributors: wordpressdotorg +Tags: one-column, flexible-header, accessibility-ready, custom-colors, custom-menu, custom-logo, editor-style, featured-images, footer-widgets, rtl-language-support, sticky-post, threaded-comments, translation-ready +Requires at least: 4.9.6 +Tested up to: WordPress 5.0 +Requires PHP: 5.2.4 +Stable tag: 1.4 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Our 2019 default theme is designed to show off the power of the block editor. + +== Description == +Our 2019 default theme is designed to show off the power of the block editor. It features custom styles for all the default blocks, and is built so that what you see in the editor looks like what you'll see on your website. Twenty Nineteen is designed to be adaptable to a wide range of websites, whether you’re running a photo blog, launching a new business, or supporting a non-profit. Featuring ample whitespace and modern sans-serif headlines paired with classic serif body text, it's built to be beautiful on all screen sizes. + +== Changelog == + += 1.4 = +* Released: May 7, 2019 + +https://codex.wordpress.org/Twenty_Nineteen_Theme_Changelog#Version_1.4 + += 1.3 = +* Released: February 21, 2019 + +https://codex.wordpress.org/Twenty_Nineteen_Theme_Changelog#Version_1.3 + += 1.2 = +* Released: January 9, 2019 + +https://codex.wordpress.org/Twenty_Nineteen_Theme_Changelog#Version_1.2 + += 1.1 = +* Released: December 19, 2018 + +https://codex.wordpress.org/Twenty_Nineteen_Theme_Changelog#Version_1.1 + += 1.0 = +* Released: December 6, 2018 + +Initial release + +== Resources == +* normalize.css, © 2012-2018 Nicolas Gallagher and Jonathan Neal, MIT +* Underscores, © 2012-2018 Automattic, Inc., GNU GPL v2 or later diff --git a/wp-content/themes/twentynineteen/sass/_normalize.scss b/wp-content/themes/twentynineteen/sass/_normalize.scss new file mode 100644 index 000000000..c5ad67a1a --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/_normalize.scss @@ -0,0 +1,341 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss b/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss new file mode 100644 index 000000000..034a16378 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss @@ -0,0 +1,906 @@ +/* !Block styles */ + +.entry .entry-content > *, +.entry .entry-summary > * { + margin: 32px 0; + max-width: 100%; + + @include postContentMaxWidth(); + + @include media(tablet) { + margin: 32px 0; + } + + > *:first-child { + margin-top: 0; + } + + > *:last-child { + margin-bottom: 0; + } + + &.alignwide { + margin-left: auto; + margin-right: auto; + clear: both; + + @include media(tablet) { + width: 100%; + max-width: 100%; + } + } + + &.alignfull { + position: relative; + left: -#{$size__spacing-unit }; + width: calc( 100% + (2 * #{$size__spacing-unit})); + max-width: calc( 100% + (2 * #{$size__spacing-unit})); + clear: both; + + @include media(tablet) { + margin-top: calc(2 * #{$size__spacing-unit}); + margin-bottom: calc(2 * #{$size__spacing-unit}); + left: calc( -12.5% - 75px ); + width: calc( 125% + 150px ); + max-width: calc( 125% + 150px ); + } + } + + &.alignleft { + /*rtl:ignore*/ + float: left; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-left: 0; + /*rtl:ignore*/ + margin-right: $size__spacing-unit; + + @include media(tablet) { + max-width: calc(4 * (100vw / 12)); + /*rtl:ignore*/ + margin-right: calc(2 * #{$size__spacing-unit}); + } + } + + &.alignright { + /*rtl:ignore*/ + float: right; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-right: 0; + /*rtl:ignore*/ + margin-left: $size__spacing-unit; + + @include media(tablet) { + max-width: calc(4 * (100vw / 12)); + margin-right: 0; + /*rtl:ignore*/ + margin-left: calc(2 * #{$size__spacing-unit}); + } + } + &.aligncenter { + margin-left: auto; + margin-right: auto; + + @include postContentMaxWidth(); + + @include media(tablet) { + margin-left: 0; + margin-right: 0; + } + } +} + +/* + * Unset nested content selector styles + * - Prevents layout styles from cascading too deeply + * - helps with plugin compatibility + */ +.entry .entry-content, +.entry .entry-summary { + + .entry-content, + .entry-summary, + .entry { + margin: inherit; + max-width: inherit; + padding: inherit; + + @include media(tablet) { + margin: inherit; + max-width: inherit; + padding: inherit; + } + } +} + +.entry .entry-content { + + //! Paragraphs + p.has-background { + padding: 20px 30px; + } + + //! Audio + .wp-block-audio { + + width: 100%; + + audio { + width: 100%; + } + + &.alignleft audio, + &.alignright audio { + + max-width: (0.33 * $mobile_width); + + @include media(tablet) { + max-width: (0.5 * $tablet_width); + } + + @include media(wide) { + max-width: (0.33 * $desktop_width); + } + } + } + + //! Video + .wp-block-video { + + video { + width: 100%; + } + } + + //! Button + .wp-block-button { + + .wp-block-button__link { + @include button-transition; + border: none; + font-size: $font__size-sm; + @include font-family( $font__heading ); + line-height: $font__line-height-heading; + box-sizing: border-box; + font-weight: bold; + text-decoration: none; + padding: ($size__spacing-unit * .76) $size__spacing-unit; + outline: none; + outline: none; + + &:not(.has-background) { + background-color: $color__background-button; + } + + &:not(.has-text-color) { + color: white; + } + + &:hover { + color: white; + background: $color__background-button-hover; + cursor: pointer; + } + + &:focus { + color: white; + background: $color__background-button-hover; + outline: thin dotted; + outline-offset: -4px; + } + } + + &:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; + } + + &.is-style-outline .wp-block-button__link, + &.is-style-outline .wp-block-button__link:focus, + &.is-style-outline .wp-block-button__link:active { + @include button-all-transition; + border-width: 2px; + border-style: solid; + + &:not(.has-background) { + background: transparent; + } + + &:not(.has-text-color) { + color: $color__background-button; + border-color: currentColor; + } + } + + &.is-style-outline .wp-block-button__link:hover { + color: white; + border-color: $color__background-button-hover; + &:not(.has-background) { + color: $color__background-button-hover; + } + } + } + + //! Latest posts, categories, archives + .wp-block-archives, + .wp-block-categories, + .wp-block-latest-posts { + padding: 0; + list-style: none; + + li { + color: $color__text-light; + @include font-family( $font__heading ); + font-size: calc(#{$font__size_base} * #{$font__size-ratio}); + font-weight: bold; + line-height: $font__line-height-heading; + padding-bottom: ( .75 * $size__spacing-unit ); + + &.menu-item-has-children, + &:last-child { + padding-bottom: 0; + } + + a { + text-decoration: none; + } + } + } + + .wp-block-archives, + .wp-block-categories { + + &.aligncenter { + text-align: center; + } + } + + //! Latest categories + .wp-block-categories { + + ul { + padding-top: ( .75 * $size__spacing-unit ); + } + + li ul { + list-style: none; + padding-left: 0; + } + + @include nestedSubMenuPadding(); + } + + //! Latest posts grid view + .wp-block-latest-posts.is-grid { + li { + border-top: 2px solid $color__border; + padding-top: (1 * $size__spacing-unit); + margin-bottom: (2 * $size__spacing-unit); + a { + &:after { + content: ''; + } + } + &:last-child { + margin-bottom: auto; + a:after { + content: ''; + } + } + } + } + + //! Latest preformatted text + .wp-block-preformatted { + font-size: $font__size-xs; + line-height: 1.8; + padding: $size__spacing-unit; + } + + //! Verse + .wp-block-verse { + @include font-family( $font__body ); + font-size: $font__size_base; + line-height: 1.8; + } + + //! Paragraphs + .has-drop-cap { + &:not(:focus):first-letter { + @include font-family( $font__heading ); + font-size: $font__size-xxxl; + line-height: 1; + font-weight: bold; + margin: 0 0.25em 0 0; + } + } + + //! Pullquote + .wp-block-pullquote { + border-color: transparent; + border-width: 2px; + padding: $size__spacing-unit; + + blockquote { + color: $color__text-main; + border: none; + margin-top: calc(4 * #{ $size__spacing-unit}); + margin-bottom: calc(4.33 * #{ $size__spacing-unit}); + margin-right: 0; + padding-left: 0; + } + + p { + font-size: $font__size-lg; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + + em { + font-style: normal; + } + + @include media(tablet) { + font-size: $font__size-xl; + } + } + + cite { + display: inline-block; + @include font-family( $font__heading ); + line-height: 1.6; + text-transform: none; + color: $color__text-light; + + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * #{$font__size-ratio})); + } + + &.alignleft, + &.alignright { + width: 100%; + padding: 0; + + blockquote { + margin: $size__spacing-unit 0; + padding: 0; + text-align: left; + max-width: 100%; + + p:first-child { + margin-top: 0; + } + } + } + + &.is-style-solid-color { + background-color: $color__link; + padding-left: 0; + padding-right: 0; + + @include media(tablet) { + padding-left: 10%; + padding-right: 10%; + } + + p { + font-size: $font__size-lg; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + + @include media(tablet) { + font-size: $font__size-xl; + } + } + + a { + color: $color__background-body; + } + + cite { + color: inherit; + } + + blockquote { + max-width: 100%; + color: $color__background-body; + padding-left: 0; + margin-left: $size__spacing-unit; + margin-right: $size__spacing-unit; + + &.has-text-color p, + &.has-text-color a, + &.has-primary-color, + &.has-secondary-color, + &.has-dark-gray-color, + &.has-light-gray-color, + &.has-white-color { + color: inherit; + } + + @include media(tablet) { + margin-left: 0; + margin-right: 0; + } + } + + &.alignright, + &.alignleft { + + @include media(tablet) { + padding: $size__spacing-unit calc(2 * #{$size__spacing-unit}); + } + } + + &.alignfull { + + @include media(tablet) { + padding-left: calc(10% + 58px + (2 * #{$size__spacing-unit})); + padding-right: calc(10% + 58px + (2 * #{$size__spacing-unit})); + } + } + } + } + + //! Blockquote + .wp-block-quote { + + &:not(.is-large), + &:not(.is-style-large) { + border-width: 2px; + border-color: $color__link; + padding-top: 0; + padding-bottom: 0; + } + + p { + font-size: 1em; + font-style: normal; + line-height: 1.8; + } + + cite { + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * #{$font__size-ratio})); + } + + &.is-large, + &.is-style-large { + margin: $size__spacing-unit 0; + padding: 0; + border-left: none; + + p { + font-size: $font__size-lg; + line-height: 1.4; + font-style: italic; + } + + cite, + footer { + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * #{$font__size-ratio})); + } + + @include media(tablet) { + margin: $size__spacing-unit 0; + padding: $size__spacing-unit 0; + + p { + font-size: $font__size-lg; + } + } + } + } + + //! Image + .wp-block-image { + max-width: 100%; + + img { + display: block; + } + + .aligncenter { + + @include postContentMaxWidth(); + + @include media(tablet) { + margin: 0; + width: $size__site-tablet-content; + + img { + margin: 0 auto; + } + } + + @include media(desktop) { + width: $size__site-desktop-content; + + img { + margin: 0 auto; + } + } + } + + &.alignfull img { + width: 100vw; + max-width: calc( 100% + (2 * #{$size__spacing-unit})); + + @include media(tablet) { + max-width: calc( 125% + 150px ); + margin-left: auto; + margin-right: auto; + } + } + } + + //! Cover Image + .wp-block-cover-image, + .wp-block-cover { + position: relative; + min-height: 430px; + padding: $size__spacing-unit; + + @include media(tablet) { + padding: $size__spacing-unit 10%; + } + + .wp-block-cover-image-text, + .wp-block-cover-text, + h2 { + @include font-family( $font__heading ); + font-size: $font__size-lg; + font-weight: bold; + line-height: 1.25; + padding: 0; + color: #fff; + + @include media(tablet) { + font-size: $font__size-xl; + max-width: 100%; + } + } + + &.alignleft, + &.alignright { + width: 100%; + + @include media(tablet) { + padding: $size__spacing-unit calc(2 * #{$size__spacing-unit}); + } + } + + &.alignfull { + + .wp-block-cover-image-text, + .wp-block-cover-text, + h2 { + @include postContentMaxWidth(); + } + + @include media(tablet) { + padding-left: calc(10% + 58px + (2 * #{$size__spacing-unit})); + padding-right: calc(10% + 58px + (2 * #{$size__spacing-unit})); + + .wp-block-cover-image-text, + .wp-block-cover-text, + h2 { + padding: 0; + } + } + } + } + + //! Galleries + .wp-block-gallery { + list-style-type: none; + padding-left: 0; + + .blocks-gallery-image:last-child, + .blocks-gallery-item:last-child { + margin-bottom: 16px; + } + + figcaption a { + color: #fff; + } + } + + //! Captions + .wp-block-audio figcaption, + .wp-block-video figcaption, + .wp-block-image figcaption, + .wp-block-gallery .blocks-gallery-image figcaption, + .wp-block-gallery .blocks-gallery-item figcaption { + font-size: $font__size-xs; + @include font-family( $font__heading ); + line-height: $font__line-height-pre; + margin: 0; + padding: ( $size__spacing-unit * .5 ); + text-align: center; + } + + //! Separator + .wp-block-separator, + hr { + background-color: $color__text-light; + border: 0; + height: 2px; + margin-bottom: (2 * $size__spacing-unit); + margin-top: (2 * $size__spacing-unit); + max-width: 2.25em; + text-align: left; + + &.is-style-wide { + max-width: 100%; + @include postContentMaxWidth(); + } + + &.is-style-dots { + max-width: 100%; + @include postContentMaxWidth(); + background-color: inherit; + border: inherit; + height: inherit; + text-align: center; + + &:before { + color: $color__text-light; + font-size: $font__size-lg; + letter-spacing: $font__size-sm; + padding-left: $font__size-sm; + } + } + + /* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ + & + h1, + & + h2 { + + &:before { + display: none; + } + } + } + + //! Twitter Embed + .wp-block-embed-twitter { + word-break: break-word; + } + + //! Table + .wp-block-table { + + th, + td { + border-color: $color__text-light; + } + } + + //! File + .wp-block-file { + @include font-family( $font__heading ); + + .wp-block-file__button { + display: table; + @include button-transition; + border: none; + border-radius: 5px; + background: $color__background-button; + font-size: $font__size-base; + @include font-family( $font__heading ); + line-height: $font__line-height-heading; + text-decoration: none; + font-weight: bold; + padding: ($size__spacing-unit * .75) $size__spacing-unit; + color: #fff; + margin-left: 0; + margin-top: calc(0.75 * #{$size__spacing-unit}); + + @include media(desktop) { + font-size: $font__size-base; + padding: ($size__spacing-unit * .875) ($size__spacing-unit * 1.5); + } + + &:hover { + background: $color__background-button-hover; + cursor: pointer; + } + + &:focus { + background: $color__background-button-hover; + outline: thin dotted; + outline-offset: -4px; + } + } + } + + //! Code + .wp-block-code { + border-radius: 0; + + code { + font-size: $font__size-md; + white-space: pre-wrap; + word-break: break-word; + } + } + + //! Columns + .wp-block-columns { + + .wp-block-column > * { + + &:first-child { + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } + } + + @include media(tablet) { + flex-wrap: nowrap; + + .wp-block-column:not(:first-child) { + margin-left: 32px; + } + } + } + + //! Latest Comments + .wp-block-latest-comments { + + .wp-block-latest-comments__comment-meta { + @include font-family( $font__heading ); + font-weight: bold; + + .wp-block-latest-comments__comment-date { + font-weight: normal; + } + } + + .wp-block-latest-comments__comment, + .wp-block-latest-comments__comment-date, + .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; + } + + &.has-avatars { + + } + + &.has-dates { + + .wp-block-latest-comments__comment-date { + font-size: $font__size-xs; + } + } + + &.has-excerpts { + + } + } + + //! Font Sizes + .has-small-font-size { + font-size: $font__size-sm; + } + + .has-normal-font-size { + font-size: $font__size-md; + } + + .has-large-font-size { + font-size: $font__size-lg; + } + + .has-huge-font-size { + font-size: $font__size-xl; + } + + //! Custom background colors + .has-primary-background-color, + .has-secondary-background-color, + .has-dark-gray-background-color, + .has-light-gray-background-color { + + // Use white text against these backgrounds by default. + color: $color__background-body; + + > p, + > h1, + > h2, + > h3, + > h4, + > h5, + > h6, + > a { + color: $color__background-body; + } + } + + .has-white-background-color { + color: $color__text-main; + + // Use dark gray text against this background by default. + > p, + > h1, + > h2, + > h3, + > h4, + > h5, + > h6, + > a { + color: $color__text-main; + } + } + + .has-primary-background-color, + .wp-block-pullquote.is-style-solid-color.has-primary-background-color { + background-color: $color__link; + } + + .has-secondary-background-color, + .wp-block-pullquote.is-style-solid-color.has-secondary-background-color { + background-color: $color__border-link-hover; + } + + .has-dark-gray-background-color, + .wp-block-pullquote.is-style-solid-color.has-dark-gray-background-color { + background-color: $color__text-main; + } + + .has-light-gray-background-color, + .wp-block-pullquote.is-style-solid-color.has-light-gray-background-color { + background-color: $color__text-light; + } + + .has-white-background-color, + .wp-block-pullquote.is-style-solid-color.has-white-background-color { + background-color: #FFF; + } + + //! Custom foreground colors + .has-primary-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color > p { + color: $color__link; + } + + .has-secondary-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color > p { + color: $color__border-link-hover; + } + + .has-dark-gray-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color > p { + color: $color__text-main; + } + + .has-light-gray-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color > p { + color: $color__text-light; + } + + .has-white-color, + .wp-block-pullquote.is-style-solid-color blockquote.has-white-color { + color: #FFF; + } +} diff --git a/wp-content/themes/twentynineteen/sass/elements/_elements.scss b/wp-content/themes/twentynineteen/sass/elements/_elements.scss new file mode 100644 index 000000000..b1fad0583 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/elements/_elements.scss @@ -0,0 +1,92 @@ +html { + box-sizing: border-box; +} + +::-moz-selection { + background-color: $color__background_selection; +} + +::selection { + background-color: $color__background_selection; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + background-color: $color__background-body; +} + +a { + @include link-transition; + color: $color__link; +} + +a:visited { + +} + +a:hover, +a:active { + color: $color__link-hover; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: thin; + outline-style: dotted; + text-decoration: underline; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + margin: $size__spacing-unit 0; +} + +h1:not(.site-title), +h2 { + @include post-section-dash; +} + +hr { + background-color: $color__text-light; + border: 0; + height: 2px; +} + +@import "lists"; + +img { + height: auto; + max-width: 100%; + position: relative; +} + +figure { + margin: 0; +} + +blockquote { + border-left: 2px solid $color__link; + margin-left: 0; + padding: 0 0 0 $size__spacing-unit; + + > p { + margin: 0 0 $size__spacing-unit; + } + + cite { + color: $color__text-light; + } +} + +@import "tables"; diff --git a/wp-content/themes/twentynineteen/sass/elements/_lists.scss b/wp-content/themes/twentynineteen/sass/elements/_lists.scss new file mode 100644 index 000000000..1db7633e1 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/elements/_lists.scss @@ -0,0 +1,33 @@ +ul, +ol { + padding-left: ( 1 * $size__spacing-unit ); +} + +ul { + list-style: disc; + + ul { + list-style-type: circle; + } +} + +ol { + list-style: decimal; +} + +li { + line-height: $font__line-height-body; +} + +li > ul, +li > ol { + padding-left: ( 2 * $size__spacing-unit ); +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 $size__spacing-unit $size__spacing-unit; +} diff --git a/wp-content/themes/twentynineteen/sass/elements/_tables.scss b/wp-content/themes/twentynineteen/sass/elements/_tables.scss new file mode 100644 index 000000000..0f653a585 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/elements/_tables.scss @@ -0,0 +1,13 @@ +table { + margin: 0 0 $size__spacing-unit; + border-collapse: collapse; + width: 100%; + @include font-family( $font__heading ); + + td, + th { + padding: 0.5em; + border: 1px solid $color__text-light; + word-break: break-all; + } +} diff --git a/wp-content/themes/twentynineteen/sass/forms/_buttons.scss b/wp-content/themes/twentynineteen/sass/forms/_buttons.scss new file mode 100644 index 000000000..f527a0882 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/forms/_buttons.scss @@ -0,0 +1,37 @@ +.button, +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + + @include button-transition; + background: $color__background-button; + border: none; + border-radius: 5px; + box-sizing: border-box; + color: $color__background-body; + @include font-family( $font__heading ); + font-size: $font__size-sm; + font-weight: 700; + line-height: $font__line-height-heading; + outline: none; + padding: ( $size__spacing-unit * .76 ) $size__spacing-unit; + text-decoration: none; + vertical-align: bottom; + + &:hover { + background: $color__background-button-hover; + cursor: pointer; + } + + &:visited { + color: $color__background-body; + text-decoration: none; + } + + &:focus { + background: $color__background-button-hover; + outline: thin dotted; + outline-offset: -4px; + } +} diff --git a/wp-content/themes/twentynineteen/sass/forms/_fields.scss b/wp-content/themes/twentynineteen/sass/forms/_fields.scss new file mode 100644 index 000000000..448b707ac --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/forms/_fields.scss @@ -0,0 +1,58 @@ +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + -webkit-backface-visibility: hidden; + background: $color__background-input; + border: solid 1px $color__border; + box-sizing: border-box; + outline: none; + padding: #{.36 * $size__spacing-unit} #{.66 * $size__spacing-unit}; + -webkit-appearance: none; + outline-offset: 0; + border-radius: 0; + + &:focus { + border-color: $color__link; + outline: thin solid rgba( $color__link, 0.15 ); + outline-offset: -4px; + } +} + +input[type="search"] { + &::-webkit-search-decoration { + display: none; + } +} + +select { + +} + +textarea { + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + resize: vertical; +} + +form { + + p { + margin: $size__spacing-unit 0; + } + +} \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/sass/forms/_forms.scss b/wp-content/themes/twentynineteen/sass/forms/_forms.scss new file mode 100644 index 000000000..2036ef92c --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/forms/_forms.scss @@ -0,0 +1,3 @@ +@import "buttons"; + +@import "fields"; diff --git a/wp-content/themes/twentynineteen/sass/layout/_layout.scss b/wp-content/themes/twentynineteen/sass/layout/_layout.scss new file mode 100644 index 000000000..e0e2c7614 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/layout/_layout.scss @@ -0,0 +1,11 @@ + +/** === Layout === */ + +#page { + width: 100%; +} + +.site-content { + overflow: hidden; +} + diff --git a/wp-content/themes/twentynineteen/sass/media/_captions.scss b/wp-content/themes/twentynineteen/sass/media/_captions.scss new file mode 100644 index 000000000..761eb2f59 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/media/_captions.scss @@ -0,0 +1,32 @@ +.wp-caption { + margin-bottom: calc(1.5 * #{$size__spacing-unit}); + + &.aligncenter { + + @include media(tablet) { + position: relative; + left: calc( #{$size__site-tablet-content} / 2 ); + transform: translateX( -50% ); + } + + @include media(desktop) { + left: calc( #{$size__site-desktop-content} / 2 ); + } + } +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption-text { + color: $color__text-light; + font-size: $font__size-xs; + @include font-family( $font__heading ); + line-height: $font__line-height-pre; + margin: 0; + padding: ( $size__spacing-unit * .5 ); + text-align: center; +} diff --git a/wp-content/themes/twentynineteen/sass/media/_galleries.scss b/wp-content/themes/twentynineteen/sass/media/_galleries.scss new file mode 100644 index 000000000..fbc0bb18e --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/media/_galleries.scss @@ -0,0 +1,52 @@ +.gallery { + display: flex; + flex-flow: row wrap; + justify-content: center; + margin-bottom: calc(1.5 * #{$size__spacing-unit}); +} + +.gallery-item { + display: inline-block; + margin-right: 16px; + margin-bottom: 16px; + text-align: center; + vertical-align: top; + width: 100%; + + // Loops to enumerate the classes for gallery columns. + @for $i from 2 through 9 { + .gallery-columns-#{$i} & { + max-width: calc((100% - 16px * #{ $i - 1 }) / #{ $i }); + + &:nth-of-type(#{$i}n+#{$i}) { + margin-right: 0; + } + } + } + + &:last-of-type { + padding-right: 0; + } +} + +.gallery-caption { + display: block; + font-size: $font__size-xs; + @include font-family( $font__heading ); + line-height: $font__line-height-pre; + margin: 0; + padding: ( $size__spacing-unit * .5 ); +} + +.gallery-item > div > a { + display: block; + line-height: 0; + + // Accessibility + box-shadow: 0 0 0 0 transparent; + + &:focus { + box-shadow: 0 0 0 2px rgba( $color__link, 1 ); + } +} + diff --git a/wp-content/themes/twentynineteen/sass/media/_media.scss b/wp-content/themes/twentynineteen/sass/media/_media.scss new file mode 100644 index 000000000..3fba8c647 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/media/_media.scss @@ -0,0 +1,41 @@ +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +embed, +iframe, +object { + max-width: 100%; +} + +.custom-logo-link { + display: inline-block; +} + +.avatar { + border-radius: 100%; + display: block; + height: calc(2.25 * #{$size__spacing-unit}); + min-height: inherit; + width: calc(2.25 * #{$size__spacing-unit}); +} + +svg { + transition: fill $icon_transition ease-in-out; + fill: currentColor; +} + +/*-------------------------------------------------------------- +## Captions +--------------------------------------------------------------*/ +@import "captions"; + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +@import "galleries"; diff --git a/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss b/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss new file mode 100644 index 000000000..16065f94b --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss @@ -0,0 +1,132 @@ +// Rem output with px fallback +@mixin font-size($sizeValue: 1) { + font-size: ($sizeValue * 16) * 1px; + font-size: $sizeValue * 1rem; +} + +// Center block +@mixin center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Clearfix +@mixin clearfix() { + content: ""; + display: table; + table-layout: fixed; +} + +// Clear after (not all clearfix need this also) +@mixin clearfix-after() { + clear: both; +} + +// Column width with margin +@mixin column-width($numberColumns: 3) { + width: map-get($columns, $numberColumns) - (($columns__margin * ($numberColumns - 1)) / $numberColumns); +} + +@mixin filter-duotone { + + &:before { + background: $color__link; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; + } + + &:after { + background: $color__link; + mix-blend-mode: multiply; + opacity: .8; + z-index: 3; + + /* Browsers supporting mix-blend-mode don't need opacity < 1 */ + @supports (mix-blend-mode: multiply) { + opacity: 1; + } + } +} + +@mixin filter-grayscale { + + position: relative; + filter: grayscale(100%); + z-index: 1; + + &:after { + display: block; + width: 100%; + height: 100%; + z-index: 10; + } +} + +@mixin post-section-dash { + + &:before { + background: $color__text-light; + content: "\020"; + display: block; + height: 2px; + margin: $size__spacing-unit 0; + width: 1em; + } +} + +/* If we add the border using a regular CSS border, it won't look good on non-retina devices, + * since its edges can look jagged due to lack of antialiasing. In this case, we are several + * layers of box-shadow to add the border visually, which will render the border smoother. */ + +@mixin box-shadow( $size ) { + box-shadow: + 0 0 0 $size $color__text-light inset, // Original border. + 0 0 0 ($size + 1px) $color__text-light inset, // Antialiasing, inner edge. + 0 0 1px 0 rgba( $color__text-light, 0.7 ); // Antialiasing, outer edge. +} + +/* Calculates maximum width for post content */ +@mixin postContentMaxWidth() { + + @include media(tablet) { + max-width: $size__site-tablet-content; + } + + @include media(desktop) { + max-width: $size__site-desktop-content; + } +} + +/* Nested sub-menu padding: 10 levels deep */ +@mixin nestedSubMenuPadding() { + + ul { + counter-reset: submenu; + } + + ul > li > a::before { + font-family: $font__body; + font-weight: normal; + content: "\2013\00a0" counters(submenu, "\2013\00a0", none); + counter-increment: submenu + } +} + +/* Ensure all font family declarations come with non-latin fallbacks */ +@mixin font-family( $font_family: $font__body ) { + font-family: $font_family; + @extend %non-latin-fonts; +} + +/* Build our non-latin font styles */ +%non-latin-fonts { + @each $lang, $font__fallback in $font__fallbacks { + &:lang(#{$lang}) { + font-family: unquote( $font__fallback ); + } + } +} + +@import "utilities"; diff --git a/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss b/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss new file mode 100644 index 000000000..c753fe278 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss @@ -0,0 +1,51 @@ + +@mixin media( $res ) { + @if mobile == $res { + @media only screen and (min-width: $mobile_width) { + @content; + } + } + + @if tablet == $res { + @media only screen and (min-width: $tablet_width) { + @content; + } + } + + @if desktop == $res { + @media only screen and (min-width: $desktop_width) { + @content; + } + } + + @if wide == $res { + @media only screen and (min-width: $wide_width) { + @content; + } + } +} + +@mixin link-transition( $attr: color ) { + transition: $attr $link_transition ease-in-out; +} + +@mixin button-transition() { + transition: background $button_transition ease-in-out; +} + +@mixin button-all-transition() { + transition: all $button_transition ease-in-out; +} + +@mixin background-transition() { + transition: background $background_transition ease-in-out; +} + +@mixin selection { + ::-moz-selection { + @content; + } + ::selection { + @content; + } +} diff --git a/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss b/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss new file mode 100644 index 000000000..469887cca --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss @@ -0,0 +1,38 @@ +/* Text meant only for screen readers. */ +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ + + &:focus { + background-color: $color__background-screen; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + clip-path: none; + color: $color__text-screen; + display: block; + @include font-size(0.875); + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; /* Above WP toolbar. */ + } +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} diff --git a/wp-content/themes/twentynineteen/sass/modules/_alignments.scss b/wp-content/themes/twentynineteen/sass/modules/_alignments.scss new file mode 100644 index 000000000..2fb584add --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/modules/_alignments.scss @@ -0,0 +1,28 @@ +.alignleft { + /*rtl:ignore*/ + float: left; + /*rtl:ignore*/ + margin-right: $size__spacing-unit; + + @include media(tablet) { + /*rtl:ignore*/ + margin-right: calc(2 * #{$size__spacing-unit}); + } +} + +.alignright { + /*rtl:ignore*/ + float: right; + /*rtl:ignore*/ + margin-left: $size__spacing-unit; + + @include media(tablet) { + /*rtl:ignore*/ + margin-left: calc(2 * #{$size__spacing-unit}); + } +} + +.aligncenter { + clear: both; + @include center-block; +} diff --git a/wp-content/themes/twentynineteen/sass/modules/_clearings.scss b/wp-content/themes/twentynineteen/sass/modules/_clearings.scss new file mode 100644 index 000000000..444b6b606 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/modules/_clearings.scss @@ -0,0 +1,23 @@ +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after { + @include clearfix; +} + +.clear:after, +.entry-content:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after { + @include clearfix-after; +} diff --git a/wp-content/themes/twentynineteen/sass/navigation/_links.scss b/wp-content/themes/twentynineteen/sass/navigation/_links.scss new file mode 100644 index 000000000..cbee4579d --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/navigation/_links.scss @@ -0,0 +1,21 @@ +a { + + @include link-transition; + color: $color__link; + + &:visited { + color: $color__link-visited; + } + + &:hover, + &:active { + color: $color__link-hover; + outline: 0; + text-decoration: none; + } + + &:focus { + outline: thin dotted; + text-decoration: underline; + } +} diff --git a/wp-content/themes/twentynineteen/sass/navigation/_menu-footer-navigation.scss b/wp-content/themes/twentynineteen/sass/navigation/_menu-footer-navigation.scss new file mode 100644 index 000000000..afe697177 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/navigation/_menu-footer-navigation.scss @@ -0,0 +1,22 @@ +/** === Footer menu === */ + +.footer-navigation { + + display: inline; + + & > div { + display: inline; + } + + .footer-menu { + + display: inline; + padding-left: 0; + + li { + display: inline; + margin-right: 1rem; + } + } + +} \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss b/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss new file mode 100644 index 000000000..4bbd9cff5 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss @@ -0,0 +1,506 @@ +/** === Main menu === */ + +.main-navigation { + + display: block; + margin-top: #{0.25 * $size__spacing-unit}; + + body.page & { + display: block; + } + + > div { + display: inline; + } + + /* Un-style buttons */ + button { + display: inline-block; + border: none; + padding: 0; + margin: 0; + font-family: $font__heading; + font-weight: 700; + line-height: $font__line-height-heading; + text-decoration: none; + background: transparent; + color: inherit; + cursor: pointer; + transition: + background 250ms ease-in-out, + transform 150ms ease; + -webkit-appearance: none; + -moz-appearance: none; + + &:hover, + &:focus { + background: transparent; + } + + &:focus { + outline: 1px solid transparent; + outline-offset: -4px; + } + + &:active { + transform: scale(0.99); + } + } + + .main-menu { + + display: inline-block; + margin: 0; + padding: 0; + + > li { + + color: $color__link; + display: inline; + position: relative; + + > a { + + font-weight: 700; + color: $color__link; + margin-right: #{0.5 * $size__spacing-unit}; + + + svg { + margin-right: #{0.5 * $size__spacing-unit}; + } + + &:hover, + &:hover + svg { + color: $color__link-hover; + } + } + + &.menu-item-has-children { + + display: inline-block; + position: inherit; + + @include media(tablet) { + position: relative; + } + + > a { + margin-right: #{0.125 * $size__spacing-unit}; + } + + & > a, + .menu-item-has-children > a { + + &:after { + content: ""; + display: none; + } + } + + .submenu-expand { + + display: inline-block; + margin-right: #{0.25 * $size__spacing-unit}; + + /* Priority+ Menu */ + &.main-menu-more-toggle { + + position: relative; + height: 24px; + line-height: $font__line-height-heading; + width: 24px; + padding: 0; + margin-left: #{0.5 * $size__spacing-unit}; + + svg { + height: 24px; + width: 24px; + top: #{-0.125 * $size__spacing-unit}; + vertical-align: text-bottom; + } + } + + .wp-customizer-unloading &, + &.is-empty { + display: none; + } + + svg { + position: relative; + top: 0.2rem; + } + } + } + + &:last-child > a, + &:last-child.menu-item-has-children .submenu-expand { + margin-right: 0; + } + } + } + + .sub-menu { + + background-color: $color__link; + color: $color__background-body; + list-style: none; + padding-left: 0; + + position: absolute; + opacity: 0; + left: -9999px; + z-index: 99999; + + @include media(tablet) { + width: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + } + + > li { + + display: block; + float: none; + position: relative; + + &.menu-item-has-children { + + .submenu-expand { + display: inline-block; + position: absolute; + width: calc( 24px + #{$size__spacing-unit} ); + right: 0; + top: calc( .125 * #{$size__spacing-unit} ); + bottom: 0; + color: white; + line-height: 1; + padding: calc( .5 * #{$size__spacing-unit} ); + + svg { + top: 0; + } + } + + .submenu-expand { + margin-right: 0; + } + + @include media(tablet) { + + .menu-item-has-children > a { + + &:after { + content: "\203a"; + } + } + } + } + + > a, + > .menu-item-link-return { + + color: $color__background-body; + display: block; + line-height: $font__line-height-heading; + text-shadow: none; + padding: calc( .5 * #{$size__spacing-unit} ) calc( 24px + #{$size__spacing-unit} ) calc( .5 * #{$size__spacing-unit} ) $size__spacing-unit; + white-space: nowrap; + + &:hover, + &:focus { + background: $color__link-hover; + + &:after { + background: $color__link-hover; + } + } + } + + > .menu-item-link-return { + width: 100%; + font-size: $font__size_base; + font-weight: normal; + text-align: left; + } + + > a:empty { + display: none; + } + + &.mobile-parent-nav-menu-item { + + display: none; + font-size: $font__size-sm; + font-weight: normal; + + svg { + position: relative; + top: 0.2rem; + margin-right: calc( .25 * #{$size__spacing-unit} ); + } + } + } + } + + /* + * Sub-menu styles + * + * :focus-within needs its own selector so other similar + * selectors don’t get ignored if a browser doesn’t recognize it + */ + .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu { + + display: block; + left: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + + + /* Non-mobile position */ + @include media(tablet) { + display: block; + margin-top: 0; + opacity: 1; + position: absolute; + left: 0; + right: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } + + &.hidden-links { + left: 0; + width: 100%; + display: table; + position: absolute; + + @include media(tablet) { + right: 0; + left: auto; + display: block; + width: max-content; + } + } + + .submenu-expand { + display: none; + } + + .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + left: 0; + opacity: 1; + + /* Non-mobile position */ + @include media(tablet) { + float: none; + max-width: 100%; + } + } + + /* Nested sub-menu dashes */ + .sub-menu { + counter-reset: submenu; + } + + .sub-menu > li > a::before { + font-family: $font__body; + font-weight: normal; + content: "\2013\00a0" counters(submenu, "\2013\00a0", none); + counter-increment: submenu + } + } + + .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu, + .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu, + .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu { + + display: block; + left: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + + + /* Non-mobile position */ + @include media(tablet) { + display: block; + float: none; + margin-top: 0; + opacity: 1; + position: absolute; + left: 0; + right: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } + + &.hidden-links { + left: 0; + width: 100%; + display: table; + position: absolute; + + @include media(tablet) { + right: 0; + left: auto; + display: table; + width: max-content; + } + } + + .submenu-expand { + display: none; + } + + .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + left: 0; + opacity: 1; + + /* Non-mobile position */ + @include media(tablet) { + float: none; + max-width: 100%; + } + } + + /* Nested sub-menu dashes */ + .sub-menu { + counter-reset: submenu; + } + + .sub-menu > li > a::before { + font-family: $font__body; + font-weight: normal; + content: "\2013\00a0" counters(submenu, "\2013\00a0", none); + counter-increment: submenu + } + } + + /** + * Fade-in animation for top-level submenus + */ + .main-menu > .menu-item-has-children:not(.off-canvas):hover > .sub-menu { + animation: fade_in 0.1s forwards; + } + + /** + * Off-canvas touch device styles + */ + .main-menu .menu-item-has-children.off-canvas .sub-menu { + + .submenu-expand .svg-icon { + transform: rotate(270deg); + } + + .sub-menu { + opacity: 0; + position: absolute; + z-index: 0; + transform: translateX(-100%); + } + + li:hover, + li:focus, + li > a:hover, + li > a:focus { + background-color: transparent; + } + + > li > a, + > li > .menu-item-link-return { + white-space: inherit; + } + + &.expanded-true { + + display: table; + margin-top: 0; + opacity: 1; + padding-left: 0; + + /* Mobile position */ + left: 0; + top: 0; + right: 0; + bottom: 0; + position: fixed; + z-index: 100000; /* Make sure appears above mobile admin bar */ + width: 100vw; + height: 100vh; + max-width: 100vw; + transform: translateX(+100%); + animation: slide_in_right 0.3s forwards; + + > .mobile-parent-nav-menu-item { + display: block; + } + + /* Prevent menu from being blocked by admin bar */ + .admin-bar & { + top: 46px; + height: calc( 100vh - 46px ); + + .sub-menu.expanded-true { + top: 0; + } + + /* WP core breakpoint */ + @media only screen and ( min-width: 782px ) { + top: 32px; + height: calc( 100vh - 32px ); + + .sub-menu.expanded-true { + top: 0; + } + } + } + } + } + + // Hide duplicate menu-more-link when re-loading a menu in the customizer + .main-menu-more { + &:nth-child(n+3) { + display: none; + } + } + +} + +/* Menu animation */ + +@keyframes slide_in_right { + 100% { + transform: translateX(0%); + } +} + +@keyframes fade_in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} diff --git a/wp-content/themes/twentynineteen/sass/navigation/_menu-social-navigation.scss b/wp-content/themes/twentynineteen/sass/navigation/_menu-social-navigation.scss new file mode 100644 index 000000000..00724b5ec --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/navigation/_menu-social-navigation.scss @@ -0,0 +1,66 @@ +/* Social menu */ + +.social-navigation { + margin-top: calc(#{$size__spacing-unit} / 2 ); + text-align: left; + + ul.social-links-menu { + @include clearfix; + + display: inline-block; + margin: 0; + padding: 0; + + li { + display: inline-block; + vertical-align: bottom; + vertical-align: -webkit-baseline-middle; + list-style: none; + + &:nth-child(n+2) { + margin-left: 0.1em; + } + + a { + border-bottom: 1px solid transparent; + display: block; + color: $color__text-main; + margin-bottom: -1px; + transition: opacity $link_transition ease-in-out; + + &:hover, + &:active { + color: $color__text-main; + opacity: 0.6; + } + + &:focus { + color: $color__text-main; + opacity: 1; + border-bottom: 1px solid $color__text-main; + } + + svg { + display: block; + width: 32px; + height: 32px; + + // Prevent icons from jumping in Safari using hardware acceleration. + transform: translateZ(0); + + &#ui-icon-link { + transform: rotate(-45deg); + } + } + } + } + } +} + +.site-title + .social-navigation, +.site-description + .social-navigation { + + @include media(tablet) { + margin-top: calc(#{$size__spacing-unit} / 5 ); + } +} diff --git a/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss b/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss new file mode 100644 index 000000000..a4cf51540 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss @@ -0,0 +1,16 @@ +/*-------------------------------------------------------------- +## Links +--------------------------------------------------------------*/ +@import "links"; + +/*-------------------------------------------------------------- +## Menus +--------------------------------------------------------------*/ +@import "menu-main-navigation"; +@import "menu-social-navigation"; +@import "menu-footer-navigation"; + +/*-------------------------------------------------------------- +## Next / Previous +--------------------------------------------------------------*/ +@import "next-previous"; diff --git a/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss b/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss new file mode 100644 index 000000000..b2a4c1dba --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss @@ -0,0 +1,201 @@ +/* Next/Previous navigation */ + +// Singular navigation +.post-navigation { + + margin: calc(3 * 1rem) 0; + + @include media(tablet) { + margin: calc(3 * 1rem) $size__site-margins; + max-width: calc(6 * (100vw / 12)); + } + + @include media(desktop) { + margin: calc(3 * 1rem) 0; + max-width: 100%; + } + + .nav-links { + + margin: 0 $size__spacing-unit; + max-width: 100%; + display: flex; + flex-direction: column; + + @include media(tablet) { + margin: 0; + } + + @include media(desktop) { + flex-direction: row; + margin: 0 $size__site-margins; + max-width: $size__site-desktop-content; + } + + a { + .meta-nav { + color: $color__text-light; + user-select: none; + + &:before, + &:after { + display: none; + content: "—"; + width: 2em; + color: $color__text-light; + height: 1em; + } + } + + .post-title { + hyphens: auto; + } + + &:hover { + color: $color__link-hover; + } + } + + .nav-previous, + .nav-next { + + @include media(desktop) { + min-width: calc(50% - 2 * #{$size__spacing-unit}); + } + } + + .nav-previous { + order: 2; + + @include media(desktop) { + order: 1; + } + + + .nav-next { + margin-bottom: $size__spacing-unit; + } + + .meta-nav { + &:before { + display: inline; + } + } + } + + .nav-next { + order: 1; + + @include media(desktop) { + order: 2; + padding-left: $size__spacing-unit; + } + + .meta-nav { + &:after { + display: inline; + } + } + } + } +} + +// Index/archive navigation +.pagination { + + .nav-links { + + display: flex; + flex-wrap: wrap; + padding: 0 calc(.5 * #{$size__spacing-unit}); + + + & > * { + padding: calc(.5 * #{$size__spacing-unit}); + + &.dots, + &.prev { + padding-left: 0; + } + + &.dots, + &.next { + padding-right: 0; + } + } + + a:focus { + text-decoration: underline; + outline-offset: -1px; + + &.prev, + &.next { + text-decoration: none; + + .nav-prev-text, + .nav-next-text { + text-decoration: underline; + } + } + } + + .nav-next-text, + .nav-prev-text { + display: none; + } + + @include media(tablet) { + + margin-left: $size__site-margins; + padding: 0; + + .prev, + .next { + + & > * { + display: inline-block; + vertical-align: text-bottom; + } + } + + & > * { + padding: $size__spacing-unit; + } + } + } +} + +// Comments navigation +.comment-navigation { + + .nav-links { + display: flex; + flex-direction: row; + } + + .nav-previous, + .nav-next { + min-width: 50%; + width: 100%; + @include font-family( $font__heading ); + font-weight: bold; + + .secondary-text { + display: none; + + @include media(tablet) { + display: inline; + } + } + + svg { + vertical-align: middle; + position: relative; + margin: 0 -0.35em; + top: -1px; + } + } + + .nav-next { + text-align: right; + } +} diff --git a/wp-content/themes/twentynineteen/sass/site/_site.scss b/wp-content/themes/twentynineteen/sass/site/_site.scss new file mode 100644 index 000000000..692244f5a --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/_site.scss @@ -0,0 +1,27 @@ + +/*-------------------------------------------------------------- +## Header +--------------------------------------------------------------*/ +@import "header/site-header"; +@import "header/site-featured-image"; + +/*-------------------------------------------------------------- +## Posts and pages +--------------------------------------------------------------*/ +@import "primary/posts-and-pages"; + +/*-------------------------------------------------------------- +## Comments +--------------------------------------------------------------*/ +@import "primary/comments"; + +/*-------------------------------------------------------------- +## Archives +--------------------------------------------------------------*/ +@import "primary/archives"; + +/*-------------------------------------------------------------- +## Footer +--------------------------------------------------------------*/ +@import "footer/site-footer"; + diff --git a/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss b/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss new file mode 100644 index 000000000..4e1379461 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss @@ -0,0 +1,53 @@ +/* Site footer */ + +#colophon { + + .widget-area, + .site-info { + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit; + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) $size__site-margins; + } + } + + .widget-column { + display: flex; + flex-wrap: wrap; + .widget { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + width: 100%; + word-wrap: break-word; + @include media(desktop) { + margin-right: calc(3 * #{$size__spacing-unit}); + width: calc(50% - (3 * #{$size__spacing-unit})); + } + } + } + + .site-info { + color: $color__text-light; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; + + a { + color: inherit; + + &:hover { + text-decoration: none; + color: $color__link; + } + } + + .imprint, + .privacy-policy-link { + margin-right: $size__spacing-unit; + } + } +} \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss b/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss new file mode 100644 index 000000000..5e67aa242 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss @@ -0,0 +1,301 @@ +// Featured image styles + +.site-header.featured-image { + + /* Hide overflow for overflowing featured image */ + overflow: hidden; + + /* Need relative positioning to properly align layers. */ + position: relative; + + /* Add text shadow to text, to increase readability. */ + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35); + + /* Set white text color when featured image is set. */ + .site-branding .site-title, + .site-branding .site-description, + .main-navigation a:after, + .main-navigation .main-menu > li.menu-item-has-children:after, + .main-navigation li, + .social-navigation li, + .entry-meta, + .entry-title { + color: $color__background-body; + } + + .main-navigation a, + .main-navigation a + svg, + .social-navigation a, + .site-title a, + .site-featured-image a { + color: $color__background-body; + transition: opacity $link_transition ease-in-out; + + &:hover, + &:active, + &:hover + svg, + &:active + svg { + color: $color__background-body; + opacity: 0.6; + } + + &:focus, + &:focus + svg { + color: $color__background-body; + } + } + + .main-navigation .sub-menu a { + opacity: inherit; + } + + /* add focus state to social media icons */ + .social-navigation a { + &:focus { + color: $color__background-body; + opacity: 1; + border-bottom: 1px solid $color__background-body; + } + } + + .social-navigation svg, + .site-featured-image svg { + /* Use -webkit- only if supporting: Chrome < 54, iOS < 9.3, Android < 4.4.4 */ + -webkit-filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35) ); + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35) ); + } + + /* Entry header */ + .site-featured-image { + + /* First layer: grayscale. */ + .post-thumbnail img { + height: auto; + left: 50%; + max-width: 1000%; + min-height: 100%; + min-width: 100vw; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: auto; + z-index: 1; + + @supports ( object-fit: cover ) { + height: 100%; + left: 0; + object-fit: cover; + top: 0; + transform: none; + width: 100%; + } + + /* When image filters are active, make it grayscale to colorize it blue. */ + .image-filters-enabled & { + filter: grayscale(100%); + } + } + + .entry-header { + + margin-top: calc( 4 * #{$size__spacing-unit}); + margin-bottom: 0; + margin-left: 0; + margin-right: 0; + + @include media (tablet) { + + margin-left: $size__site-margins; + margin-right: $size__site-margins; + } + + .entry-title { + + &:before { + background: $color__background-body; + } + } + + /* Entry meta */ + + .entry-meta { + + font-weight: 500; + + > span { + + margin-right: $size__spacing-unit; + display: inline-block; + + &:last-child { + margin-right: 0; + } + } + + a { + + @include link-transition; + color: currentColor; + + &:hover { + text-decoration: none; + } + } + + .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; + } + + .discussion-avatar-list { + display: none; + } + } + + &.has-discussion { + + @include media (tablet) { + + .entry-meta { + display: flex; + position: relative; + } + + .entry-title { + padding-right: calc(1 * (100vw / 12) + #{$size__spacing-unit}); + } + + .entry-meta .comment-count { + position: absolute; + right: 0; + } + + .entry-meta .discussion-avatar-list { + display: block; + position: absolute; + bottom: 100%; + } + } + } + } + } + + /* Custom Logo Link */ + + .custom-logo-link { + + background: $color__background-body; + box-shadow: 0 0 0 0 rgba($color__background-body, 0); + + &:hover, + &:active, + &:focus { + box-shadow: 0 0 0 2px rgba($color__background-body, 1); + } + } + + /* Make sure important elements are above pseudo elements used for effects. */ + .site-branding { + position: relative; + z-index: 10; + } + + .site-featured-image .entry-header { + position: relative; + z-index: 9; + } + + /* Set up image filter layer positioning */ + .site-branding-container:after, + .site-featured-image:before, + .site-featured-image:after, + &:after { + display: block; + position: absolute; + top: 0; left: 0; + content: "\020"; + width: 100%; + height: 100%; + } + + /* Background & Effects */ + /* Shared background settings between pseudo elements. */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; + + /* The intensity of each blend mode is controlled via layer opacity. */ + + /* Second layer: screen. */ + .image-filters-enabled & .site-featured-image:before { + background: $color__link; + mix-blend-mode: screen; + opacity: 0.1; + } + + /* Third layer: multiply. */ + /* When image filters are inactive, a black overlay is added. */ + .site-featured-image:after { + background: #000; + mix-blend-mode: multiply; + opacity: .7; + + /* When image filters are active, a blue overlay is added. */ + .image-filters-enabled & { + background: $color__link; + opacity: .8; + z-index: 3; + + /* Browsers supporting mix-blend-mode don't need opacity < 1 */ + @supports (mix-blend-mode: multiply) { + opacity: 1; + } + } + } + + /* Fourth layer: overlay. */ + .image-filters-enabled & .site-branding-container:after { + background: rgba(0, 0, 0, 0.35); + mix-blend-mode: overlay; + opacity: 0.5; + z-index: 4; + + /* Browsers supporting mix-blend-mode can have a light overlay */ + @supports (mix-blend-mode: overlay) { + background: rgba($color__background-body, 0.35); + } + } + + /* Fifth layer: readability overlay */ + &:after { + background: #000; + /** + * Add a transition to the readability overlay, to add a subtle + * but smooth effect when resizing the screen. + */ + transition: opacity 1200ms ease-in-out; + opacity: 0.7; + z-index: 5; + + /* When image filters are active, a blue overlay is added. */ + .image-filters-enabled & { + background: mix($color__link, black, 12%); + opacity: 0.38; + + @include media(tablet) { + opacity: 0.18; + } + } + } + + + ::-moz-selection { + background: rgba($color__background-body, 0.17); + } + + ::selection { + background: rgba($color__background-body, 0.17); + } +} diff --git a/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss b/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss new file mode 100644 index 000000000..3f723ba9e --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss @@ -0,0 +1,139 @@ +// Site header + +.site-header { + padding: 1em; + + &.featured-image { + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 90vh; + + .site-branding-container { + margin-bottom: auto; + } + } + + @include media(tablet) { + margin: 0; + padding: 3rem 0; + + &.featured-image { + min-height: 100vh; + margin-bottom: 3rem; + } + } +} + +// Site branding + +.site-branding { + + color: $color__text-light; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + position: relative; + word-wrap: break-word; + + @include media(tablet) { + margin: 0 $size__site-margins; + } +} + +// Site logo + +.site-logo { + + position: relative; + z-index: 999; + margin-bottom: calc(.66 * #{$size__spacing-unit}); + + @include media(tablet) { + margin-bottom: 0; + position: absolute; + right: calc(100% + (1.25 * #{$size__spacing-unit})); + top: 4px; // Accounts for box-shadow widths + z-index: 999; + } + + .custom-logo-link { + border-radius: 100%; + box-sizing: content-box; + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + display: block; + width: 50px; + height: 50px; + overflow: hidden; + transition: box-shadow $background_transition ease-in-out; + + .custom-logo { + min-height: inherit; + } + + &:hover, + &:active, + &:focus { + box-shadow: 0 0 0 2px rgba(0, 0, 0, 1); + } + + @include media(tablet) { + width: 64px; + height: 64px; + } + } +} + +// Site title + +.site-title { + margin: auto; + display: inline; + color: $color__text-main; + + a { + color: $color__text-main; + + &:link, + &:visited { + color: $color__text-main; + } + + &:hover { + color: $color__text-hover; + } + } + + .featured-image & { + margin: 0; + + @include media(tablet) { + display: inline-block; + } + } + + /* When there is no description set, make sure navigation appears below title. */ + + .main-navigation { + display: block; + } + + @include media(tablet) { + display: inline; + } + + &:not(:empty) + .site-description:not(:empty):before { + content: "\2014"; + margin: 0 .2em; + } +} + +// Site description + +.site-description { + + display: inline; + color: $color__text-light; + font-weight: normal; + margin: 0; +} diff --git a/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss b/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss new file mode 100644 index 000000000..c040c27b3 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss @@ -0,0 +1,71 @@ +.archive .page-header, +.search .page-header, +.error404 .page-header { + + margin: $size__spacing-unit $size__spacing-unit calc(3 * #{$size__spacing-unit}); + + @include media(tablet) { + margin: 0 $size__site-margins $size__site-margins; + } + + .page-title { + + color: $color__text-light; + display: inline; + letter-spacing: normal; + + &:before { + display: none; + } + } + + .search-term, + .page-description { + display: inherit; + clear: both; + + &:after { + content: "."; + font-weight: bold; + color: $color__text-light; + } + } +} + +.archive .page-header .page-description { + display: block; + color: $color__text-main; + font-size: 1em; +} + +.hfeed .entry .entry-header { + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) $size__site-margins calc(#{ $size__spacing-unit } / 2); + } +} + +/* 404 & Not found */ + +.error-404.not-found, +.no-results.not-found { + + .page-title, + .page-content { + + margin: calc(3 * #{$size__spacing-unit}) #{$size__spacing-unit}; + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) $size__site-margins calc(#{ $size__spacing-unit } / 2); + } + } + + .search-submit { + vertical-align: middle; + margin: $size__spacing-unit 0; + } + + .search-field { + width: 100%; + } +} diff --git a/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss b/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss new file mode 100644 index 000000000..ec9fb12b9 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss @@ -0,0 +1,405 @@ +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + display: block; +} + +.comments-area { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit; + word-wrap: break-word; + @include postContentMaxWidth(); + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) $size__site-margins; + } + + & > * { + margin-top: calc(2 * #{$size__spacing-unit}); + margin-bottom: calc(2 * #{$size__spacing-unit}); + + @include media(tablet) { + margin-top: calc(3 * #{$size__spacing-unit}); + margin-bottom: calc(3 * #{$size__spacing-unit}); + } + } + + /* Add extra margin when the comments section is located immediately after the + * post itself (this happens on pages). + */ + .entry + & { + margin-top: calc(3 * #{$size__spacing-unit}); + } + + .comments-title-wrap { + + @include media(tablet) { + align-items: baseline; + display: flex; + justify-content: space-between; + } + + .comments-title { + @include post-section-dash; + margin: 0; + + @include media(tablet) { + flex: 1 0 calc(3 * (100vw / 12)); + } + } + + .discussion-meta { + @include media(tablet) { + flex: 0 0 calc(2 * (100vw / 12)); + margin-left: #{$size__spacing-unit}; + } + } + } +} + +#comment { + max-width: 100%; + box-sizing: border-box; +} + +#respond { + position: relative; + + .comment-user-avatar { + margin: $size__spacing-unit 0 -#{$size__spacing-unit}; + } + + .comment .comment-form { + padding-left: 0; + } + + > small { + display: block; + font-size: $font__size_base; + position: absolute; + left: calc(#{$size__spacing-unit} + 100%); + top: calc(-3.5 * #{$size__spacing-unit}); + width: calc(100vw / 12 ); + } +} + +#comments { + + > .comments-title:last-child { + display: none; + } +} + +.comment-form-flex { + display: flex; + flex-direction: column; + + .comments-title { + display: none; + margin: 0; + order: 1; + } + + #respond { + order: 2; + + + .comments-title { + display: block; + } + } +} + +.comment-list { + list-style: none; + padding: 0; + + .children { + margin: 0; + padding: 0 0 0 $size__spacing-unit; + } + + > .comment:first-child { + margin-top: 0; + } + + .pingback, + .trackback { + + .comment-body { + color: $color__text-light; + @include font-family( $font__heading ); + font-size: $font__size-xs; + font-weight: 500; + margin-top: $size__spacing-unit; + margin-bottom: $size__spacing-unit; + + a:not(.comment-edit-link) { + font-weight: bold; + font-size: $font__size-base / (1 * $font__size-ratio); + line-height: 1.5; + padding-right: #{0.5 * $size__spacing-unit}; + display: block; + } + + .comment-edit-link { + color: $color__text-light; + @include font-family( $font__heading ); + font-weight: 500; + } + } + } +} + +.comment-reply { + + #respond + & { + display: none; + } + + .comment-reply-link { + display: inline-block; + } +} + +.comment { + list-style: none; + position: relative; + + @include media(tablet) { + padding-left: calc(.5 * (#{$size__spacing-unit} + calc(100vw / 12 ))); + + &.depth-1, + .children { + padding-left: 0; + } + + &.depth-1 { + margin-left: calc(3.25 * #{$size__spacing-unit}); + } + } + + .comment-body { + margin: calc(2 * #{$size__spacing-unit}) 0 0; + } + + + .comment-meta { + position: relative; + } + + .comment-author { + + .avatar { + float: left; + margin-right: $size__spacing-unit; + position: relative; + + @include media(tablet) { + float: inherit; + margin-right: inherit; + position: absolute; + top: 0; + right: calc(100% + #{$size__spacing-unit}); + } + } + + .fn { + position: relative; + display: block; + + a { + color: inherit; + + &:hover { + color: $color__link-hover; + } + } + } + + .post-author-badge { + border-radius: 100%; + display: block; + height: 18px; + position: absolute; + background: lighten( $color__link, 8% ); + right: calc(100% - #{$size__spacing-unit * 2.5}); + top: -3px; + width: 18px; + + @include media(tablet) { + right: calc(100% + #{$size__spacing-unit * .75}); + } + + svg { + width: inherit; + height: inherit; + display: block; + fill: white; + transform: scale(0.875); + } + } + } + + .comment-metadata { + + > a, + .comment-edit-link { + display: inline; + font-weight: 500; + color: $color__text-light; + vertical-align: baseline; + + time { + vertical-align: baseline; + } + + &:hover { + color: $color__link-hover; + text-decoration: none; + } + } + + > * { + display: inline-block; + } + + .edit-link-sep { + color: $color__text-light; + margin: 0 0.2em; + vertical-align: baseline; + } + + .edit-link { + color: $color__text-light; + + svg { + transform: scale(0.8); + vertical-align: baseline; + margin-right: 0.1em; + } + } + + .comment-edit-link { + position: relative; + padding-left: $size__spacing-unit; + margin-left: -#{$size__spacing-unit}; + z-index: 1; + + &:hover { + color: $color__link; + } + } + } + + .comment-content { + + margin: $size__spacing-unit 0; + + @include media(desktop) { + padding-right: $size__spacing-unit; + } + + > *:first-child { + margin-top: 0; + } + + > *:last-child { + margin-bottom: 0; + } + + blockquote { + margin-left: 0; + } + + a { + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + } +} + +.comment-reply-link, +#cancel-comment-reply-link { + font-weight: 500; + + &:hover { + color: $color__link-hover; + } +} + +.discussion-avatar-list { + @include clearfix; + + margin: 0; + padding: 0; + + li { + position: relative; + list-style: none; + margin: 0 -8px 0 0; + padding: 0; + float: left; + } + + .comment-user-avatar { + + img { + height: calc(1.5 * #{$size__spacing-unit}); + width: calc(1.5 * #{$size__spacing-unit}); + } + } +} + +.discussion-meta { + + .discussion-meta-info { + margin: 0; + + .svg-icon { + vertical-align: middle; + fill: currentColor; + transform: scale( 0.6 ) scaleX(-1) translateY(-0.1em); + margin-left: -#{.25 * $size__spacing-unit}; // Align icon with avatars above. + } + } + +} + +.comment-form { + + .comment-notes, + label { + @include font-family( $font__heading ); + font-size: $font__size-xs; + color: $color__text-light; + } + + .comment-form-author, + .comment-form-email { + @include media(tablet) { + width: calc(50% - #{$size__spacing-unit / 2}); + float: left; + } + } + + .comment-form-email { + @include media(tablet) { + margin-left: $size__spacing-unit; + } + } + + input[name="author"], + input[name="email"], + input[name="url"] { + display: block; + width: 100%; + } +} diff --git a/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss b/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss new file mode 100644 index 000000000..8f65b9c27 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss @@ -0,0 +1,304 @@ +.sticky { + display: block; +} + +.sticky-post { + background: $color__background-button; + color: #fff; + display: inline-block; + font-weight: bold; + line-height: 1; + padding: .25rem; + position: absolute; + text-transform: uppercase; + top: -$size__spacing-unit; + z-index: 1; +} + +.updated:not(.published) { + display: none; +} + +.page-links { + clear: both; + margin: 0 0 calc(1.5 * #{$size__spacing-unit}); +} + +.entry { + + margin-top: calc(6 * #{$size__spacing-unit}); + + &:first-of-type { + margin-top: 0; + } + + .entry-header { + + margin: calc(3 * #{ $size__spacing-unit}) $size__spacing-unit $size__spacing-unit; + position: relative; + + @include media(tablet) { + margin: calc(3 * #{ $size__spacing-unit}) $size__site-margins $size__spacing-unit; + } + } + + .entry-title { + + @include post-section-dash; + margin: 0; + + a { + color: inherit; + + &:hover { + color: $color__text-hover; + } + } + } + + .entry-meta, + .entry-footer { + + color: $color__text-light; + font-weight: 500; + + > span { + + margin-right: $size__spacing-unit; + display: inline-block; + + &:last-child { + margin-right: 0; + } + } + + a { + + @include link-transition; + color: currentColor; + + &:hover { + text-decoration: none; + color: $color__link; + } + } + + .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; + } + } + + .entry-meta { + margin: $size__spacing-unit 0; + } + + .entry-footer { + + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit $size__spacing-unit; + + @include media(tablet) { + margin: $size__spacing-unit $size__site-margins calc(3 * #{$size__spacing-unit}); + max-width: $size__site-tablet-content; + } + + @include media(tablet) { + max-width: $size__site-desktop-content; + } + } + + .post-thumbnail { + + margin: $size__spacing-unit; + + @include media(tablet) { + margin: $size__spacing-unit $size__site-margins; + } + + &:focus { + outline: none; + } + + .post-thumbnail-inner { + display: block; + + img { + position: relative; + display: block; + width: 100%; + } + } + } + + .image-filters-enabled & { + + .post-thumbnail { + position: relative; + display: block; + + .post-thumbnail-inner { + filter: grayscale(100%); + + &:after { + background: rgba(0, 0, 0, 0.35); + content: ""; + display: block; + height: 100%; + opacity: .5; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + z-index: 4; + + @supports (mix-blend-mode: multiply) { + display: none; + } + } + } + + &:before, + &:after, { + position: absolute; + display: block; + width: 100%; + height: 100%; + top: 0; left: 0; + content: "\020"; + pointer-events: none; + } + + @include filter-duotone; + + } + } + + .entry-content, + .entry-summary { + max-width: calc(100% - (2 * #{ $size__spacing-unit })); + margin: 0 $size__spacing-unit; + + @include media(tablet) { + max-width: 80%; + margin: 0 10%; + padding: 0 60px; + } + } + + .entry-content { + + p { + word-wrap: break-word; + } + + .more-link { + @include link-transition; + display: inline; + color: inherit; + + &:after { + content: "\02192"; + display: inline-block; + margin-left: 0.5em; + } + + &:hover { + color: $color__link; + text-decoration: none; + } + } + + a { + text-decoration: underline; + + &.button, + &:hover { + text-decoration: none; + } + + &.button { + display: inline-block; + } + + &.button:hover { + background: $color__background-button-hover; + color: $color__background-body; + cursor: pointer; + } + } + + // Overwrite iframe embeds that have inline styles. + > iframe[style] { + + margin: 32px 0 !important; + max-width: 100% !important; + + @include media(tablet) { + max-width: $size__site-tablet-content !important; + } + + @include media(desktop) { + max-width: $size__site-desktop-content !important; + } + } + + // Page links + .page-links a { + margin: calc(0.5 * #{$size__spacing-unit}); + text-decoration: none; + } + + // Classic editor audio embeds. + .wp-audio-shortcode { + max-width: calc(100vw - (2 * #{ $size__spacing-unit })); + + @include media(tablet) { + max-width: $size__site-tablet-content; + } + + @include media(desktop) { + max-width: $size__site-desktop-content; + } + } + } +} + +/* Author description */ + +.author-bio { + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit $size__spacing-unit; + + @include postContentMaxWidth(); + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) $size__site-margins; + } + + @include media(desktop) { + margin: calc(3 * #{$size__spacing-unit}) $size__site-margins; + } + + .author-title { + @include post-section-dash; + display: inline; + } + + .author-description { + + display: inline; + color: $color__text-light; + font-size: $font__size-md; + line-height: $font__line-height-heading; + + .author-link { + display: inline-block; + + &:hover { + color: $color__link-hover; + text-decoration: none; + } + } + } +} diff --git a/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss b/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss new file mode 100644 index 000000000..3156a8e2f --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss @@ -0,0 +1,81 @@ +.widget { + margin: 0 0 #{$size__spacing-unit}; + + /* Make sure select elements fit in widgets. */ + select { + max-width: 100%; + } + + a { + color: $color__link; + + &:hover { + color: $color__link-hover; + } + } +} + +.widget_archive, +.widget_categories, +.widget_meta, +.widget_nav_menu, +.widget_pages, +.widget_recent_comments, +.widget_recent_entries, +.widget_rss { + + ul { + padding: 0; + list-style: none; + + li { + color: $color__text-light; + @include font-family( $font__heading ); + font-size: calc(#{$font__size_base} * #{$font__size-ratio}); + font-weight: 700; + line-height: $font__line-height-heading; + margin-top: #{0.5 * $size__spacing-unit}; + margin-bottom: #{0.5 * $size__spacing-unit}; + } + + @include nestedSubMenuPadding(); + } +} + +.widget_tag_cloud { + + .tagcloud { + @include font-family( $font__heading ); + font-weight: 700; + } +} + + +.widget_search { + + .search-field { + width: 100%; + + @include media(mobile) { + width: auto; + } + } + + .search-submit { + display: block; + margin-top: $size__spacing-unit; + } +} + +.widget_calendar .calendar_wrap { + text-align: center; + + table td, + table th { + border: none; + } + + a { + text-decoration: underline; + } +} \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/sass/typography/_copy.scss b/wp-content/themes/twentynineteen/sass/typography/_copy.scss new file mode 100644 index 000000000..bfbd0feb4 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/typography/_copy.scss @@ -0,0 +1,62 @@ +p { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + + cite { + font-size: $font__size-xs; + font-style: normal; + @include font-family( $font__heading ); + } +} + +pre { + font-size: $font__size-sm; + font-family: $font__pre; + line-height: $font__line-height-body; + overflow: auto; +} + +code, +kbd, +tt, +var { + font-size: $font__size-sm; + font-family: $font__code; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, +ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +a { + text-decoration: none; + + &:hover { + text-decoration: none; + } + + &:focus { + text-decoration: underline; + } +} diff --git a/wp-content/themes/twentynineteen/sass/typography/_headings.scss b/wp-content/themes/twentynineteen/sass/typography/_headings.scss new file mode 100644 index 000000000..21ea2e447 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/typography/_headings.scss @@ -0,0 +1,164 @@ +.author-description .author-link, +.comment-metadata, +.comment-reply-link, +.comments-title, +.comment-author .fn, +.discussion-meta-info, +.entry-meta, +.entry-footer, +.main-navigation, +.no-comments, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.page-links, +.page-description, +.pagination .nav-links, +.sticky-post, +.site-title, +.site-info, +#cancel-comment-reply-link, +h1, +h2, +h3, +h4, +h5, +h6 { + @include font-family( $font__heading ); +} + +.main-navigation, +.page-description, +.author-description .author-link, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.pagination .nav-links, +.comments-title, +.comment-author .fn, +.no-comments, +.site-title, +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 700; + letter-spacing: -0.02em; + line-height: $font__line-height-heading; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.page-title { + @include font-family( $font__body ); +} + +.site-branding, +.main-navigation ul.main-menu > li, +.social-navigation, +.author-description .author-bio, +.nav-links { + line-height: 1.25; +} + +h1 { + font-size: $font__size-xl; + + @include media(tablet) { + font-size: $font__size-xxl; + } +} + +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.has-larger-font-size, +h2 { + font-size: $font__size-lg; + + @include media(tablet) { + font-size: $font__size-xl; + } +} + +.has-regular-font-size, +.has-large-font-size, +.comments-title, +h3 { + font-size: $font__size-lg; +} + +.site-title, +.site-description, +.main-navigation, +.nav-links, +.page-title, +.page-description, +.comment-author .fn, +.no-comments, +h2.author-title, +p.author-bio, +h4 { + font-size: $font__size-md; +} + +.pagination .nav-links, +.comment-content, +h5 { + font-size: $font__size-sm; +} + +.entry-meta, +.entry-footer, +.discussion-meta-info, +.site-info, +.has-small-font-size, +.comment-reply-link, +.comment-metadata, +.comment-notes, +.sticky-post, +#cancel-comment-reply-link, +img:after, +h6 { + font-size: $font__size-xs; +} + +.site-title, +.page-title { + font-weight: normal; +} + +.page-description, +.page-links a { + font-weight: bold; +} + +.site-description { + letter-spacing: -0.01em; +} + +.post-navigation .post-title, +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.comments-title, +blockquote { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; + word-wrap: break-word; +} + +/* Do not hyphenate entry title on tablet view and bigger. */ +.entry-title { + @include media(tablet) { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } +} diff --git a/wp-content/themes/twentynineteen/sass/typography/_typography.scss b/wp-content/themes/twentynineteen/sass/typography/_typography.scss new file mode 100644 index 000000000..055b7a63d --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/typography/_typography.scss @@ -0,0 +1,32 @@ + +html { + font-size: $font__size_base; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: $color__text-main; + @include font-family( $font__body ); + font-weight: 400; + font-size: 1em; + line-height: $font__line-height-body; + margin: 0; + text-rendering: optimizeLegibility; +} + +button, +input, +select, +optgroup, +textarea { + color: $color__text-main; + @include font-family( $font__body ); + font-weight: 400; + line-height: $font__line-height-body; + text-rendering: optimizeLegibility; +} + +@import "headings"; + +@import "copy"; diff --git a/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss b/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss new file mode 100644 index 000000000..989daa0ca --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss @@ -0,0 +1,34 @@ + +// Backgrounds +$color__background-body: #fff; +$color__background-input: #fff; +$color__background-screen: #f1f1f1; +$color__background-hr: #ccc; +$color__background-button: #0073aa; +$color__background-button-hover: #111; +$color__background-pre: #eee; +$color__background-ins: #fff9c0; +$color__background_selection: mix( $color__background-body, $color__background-button, 75% ); // lighten( salmon, 22.5% ); // lighten( #0999d4, 48% ); + +// Text +$color__text-main: #111; +$color__text-light: #767676; +$color__text-hover: lighten( #111, 22.5% ); +$color__text-screen: #21759b; +$color__text-input: #666; +$color__text-input-focus: #111; + +// Links +$color__link: #0073aa; +$color__link-visited: #0073aa; +$color__link-hover: darken( $color__link, 10% ); + +// Borders +$color__border: #ccc; +$color__border-link: #0073aa; +$color__border-link-hover: darken( $color__link, 10% ); +$color__border-button: #ccc #ccc #bbb; +$color__border-button-hover: #ccc #bbb #aaa; +$color__border-button-focus: #aaa #bbb #bbb; +$color__border-input: $color__border; +$color__border-abbr: #666; diff --git a/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss b/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss new file mode 100644 index 000000000..6bd29bcc6 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss @@ -0,0 +1,16 @@ +$columns: ( + 1: calc(1 * (100vw / 12)), + 2: calc(2 * (100vw / 12)), + 3: calc(3 * (100vw / 12)), + 4: calc(4 * (100vw / 12)), + 5: calc(5 * (100vw / 12)), + 6: calc(6 * (100vw / 12)), + 7: calc(7 * (100vw / 12)), + 8: calc(8 * (100vw / 12)), + 9: calc(9 * (100vw / 12)), + 10: calc(10 * (100vw / 12)), + 11: calc(11 * (100vw / 12)), + 12: calc(12 * (100vw / 12)) +); + +$columns__margin: $size__spacing-unit; diff --git a/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss b/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss new file mode 100644 index 000000000..1003f4e3c --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss @@ -0,0 +1,83 @@ +/* + * Chrome renders extra-wide   characters for the Hoefler Text font. + * This results in a jumping cursor when typing in both the Classic and block + * editors. The following font-face override fixes the issue by manually inserting + * a custom font that includes just a Hoefler Text space replacement for that + * character instead. + */ +@font-face { + font-family: 'NonBreakingSpaceOverride'; + src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format('woff2'), + url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format('woff'); + +} + +// Font and typographic variables + +$font__body: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; +$font__heading: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +$font__fallbacks: ( + /* Arabic */ + ar: 'Tahoma, Arial, sans-serif', + ary: 'Tahoma, Arial, sans-serif', + azb: 'Tahoma, Arial, sans-serif', + ckb: 'Tahoma, Arial, sans-serif', + fa-IR: 'Tahoma, Arial, sans-serif', + haz: 'Tahoma, Arial, sans-serif', + ps: 'Tahoma, Arial, sans-serif', + /* Cyrillic */ + be: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + bg-BG: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + kk: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + mk-MK: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + mn: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + ru-RU: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + sah: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + sr-RS: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + tt-RU: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + uk: '"Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif', + /* Chinese (Hong Kong) */ + zh-HK: '-apple-system, BlinkMacSystemFont, "PingFang HK", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif', + /* Chinese (Taiwan) */ + zh-TW: '-apple-system, BlinkMacSystemFont, "PingFang TC", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif', + /* Chinese (China) */ + zh-CN: '-apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif', + /* Devanagari */ + bn-BD: 'Arial, sans-serif', + hi-IN: 'Arial, sans-serif', + mr: 'Arial, sans-serif', + ne-NP: 'Arial, sans-serif', + /* Greek */ + el: '"Helvetica Neue", Helvetica, Arial, sans-serif', + /* Gujarati */ + gu: 'Arial, sans-serif', + /* Hebrew */ + he-IL: '"Arial Hebrew", Arial, sans-serif', + /* Japanese */ + ja: '-apple-system, BlinkMacSystemFont, "Hiragino Sans", Meiryo, "Helvetica Neue", sans-serif', + /* Korean */ + ko-KR: '"Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif', + /* Thai */ + th: '"Sukhumvit Set", "Helvetica Neue", helvetica, arial, sans-serif', + /* Vietnamese */ + vi: '"Libre Franklin", sans-serif', +); +$font__code: Menlo, monaco, Consolas, Lucida Console, monospace; +$font__pre: "Courier 10 Pitch", Courier, monospace; + +$font__size_base: 22px; +$font__size-ratio: 1.125; + +$font__size-xxs: 1em / (1.5 * $font__size-ratio); +$font__size-xs: 1em / (1.25 * $font__size-ratio); +$font__size-sm: 1em / (1 * $font__size-ratio); +$font__size-md: 1em * (1 * $font__size-ratio); +$font__size-lg: 1em * (1.5 * $font__size-ratio); +$font__size-xl: 1em * (2 * $font__size-ratio); +$font__size-xxl: 1em * (2.5 * $font__size-ratio); +$font__size-xxxl: 1em * (3 * $font__size-ratio); + +$font__line-height-body: 1.8; +$font__line-height-pre: 1.6; +$font__line-height-heading: 1.2; +$font__line-height-double: 2 * $font__line-height-heading; \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss b/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss new file mode 100644 index 000000000..dc62145b5 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss @@ -0,0 +1,16 @@ +// Responsive widths. + +$size__spacing-unit: 1rem; +$size__site-main: 100%; +$size__site-sidebar: 25%; +$size__site-margins: calc(10% + 60px); +$size__site-tablet-content: calc(8 * (100vw / 12) - 28px); +$size__site-desktop-content: calc(6 * (100vw / 12) - 28px); + +// Responsive widths. + +$mobile_width: 600px; +$tablet_width: 768px; +$desktop_width: 1168px; +$wide_width: 1379px; + diff --git a/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss b/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss new file mode 100644 index 000000000..f0eebbd25 --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss @@ -0,0 +1,6 @@ +// Transition timeouts. + +$link_transition: 110ms; +$icon_transition: 120ms; +$button_transition: 150ms; +$background_transition: 200ms; \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss b/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss new file mode 100644 index 000000000..9d527f9fc --- /dev/null +++ b/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss @@ -0,0 +1,5 @@ +@import "colors"; +@import "fonts"; +@import "structure"; +@import "columns"; +@import "transitions"; diff --git a/wp-content/themes/twentynineteen/screenshot.png b/wp-content/themes/twentynineteen/screenshot.png new file mode 100644 index 000000000..7dc53c5f1 Binary files /dev/null and b/wp-content/themes/twentynineteen/screenshot.png differ diff --git a/wp-content/themes/twentynineteen/search.php b/wp-content/themes/twentynineteen/search.php new file mode 100644 index 000000000..fc00c5282 --- /dev/null +++ b/wp-content/themes/twentynineteen/search.php @@ -0,0 +1,55 @@ + + +
        +
        + + + + + + +
        +
        + + + +
        +
        + + sprintf( __( 'Published in%s', 'twentynineteen' ), '%title' ), + ) + ); + } elseif ( is_singular( 'post' ) ) { + // Previous/next post navigation. + the_post_navigation( + array( + 'next_text' => ' ' . + '' . __( 'Next post:', 'twentynineteen' ) . '
        ' . + '%title', + 'prev_text' => ' ' . + '' . __( 'Previous post:', 'twentynineteen' ) . '
        ' . + '%title', + ) + ); + } + + // If comments are open or we have at least one comment, load up the comment template. + if ( comments_open() || get_comments_number() ) { + comments_template(); + } + + endwhile; // End of the loop. + ?> + +
        +
        + + .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +.wp-block[data-type="core/pullquote"] blockquote > .editor-rich-text p, +.wp-block[data-type="core/pullquote"] p, +.wp-block[data-type="core/pullquote"][data-align="left"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +.wp-block[data-type="core/pullquote"][data-align="left"] blockquote > .editor-rich-text p, +.wp-block[data-type="core/pullquote"][data-align="left"] p, +.wp-block[data-type="core/pullquote"][data-align="right"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +.wp-block[data-type="core/pullquote"][data-align="right"] blockquote > .editor-rich-text p, +.wp-block[data-type="core/pullquote"][data-align="right"] p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +@media only screen and (min-width: 768px) { + .wp-block[data-type="core/pullquote"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + .wp-block[data-type="core/pullquote"] blockquote > .editor-rich-text p, + .wp-block[data-type="core/pullquote"] p, + .wp-block[data-type="core/pullquote"][data-align="left"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + .wp-block[data-type="core/pullquote"][data-align="left"] blockquote > .editor-rich-text p, + .wp-block[data-type="core/pullquote"][data-align="left"] p, + .wp-block[data-type="core/pullquote"][data-align="right"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + .wp-block[data-type="core/pullquote"][data-align="right"] blockquote > .editor-rich-text p, + .wp-block[data-type="core/pullquote"][data-align="right"] p { + font-size: 2.25em; + } +} + +.wp-block[data-type="core/pullquote"] .wp-block-pullquote__citation, +.wp-block[data-type="core/pullquote"][data-align="left"] .wp-block-pullquote__citation, +.wp-block[data-type="core/pullquote"][data-align="right"] .wp-block-pullquote__citation { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + line-height: 1.6; + text-transform: none; +} + +.wp-block[data-type="core/pullquote"] em, +.wp-block[data-type="core/pullquote"][data-align="left"] em, +.wp-block[data-type="core/pullquote"][data-align="right"] em { + font-style: normal; +} + +.wp-block[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit, +.wp-block[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit { + width: calc(4 * (100vw / 12)); + max-width: 50%; +} + +.wp-block[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit .wp-block-pullquote:not(.is-style-solid-color), +.wp-block[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit .wp-block-pullquote:not(.is-style-solid-color) { + padding: 0; +} + +.wp-block[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color, +.wp-block[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color { + padding: 1em; +} + +.wp-block[data-type="core/pullquote"][data-align="left"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +.wp-block[data-type="core/pullquote"][data-align="left"] blockquote > .editor-rich-text p, +.wp-block[data-type="core/pullquote"][data-align="left"] p, +.wp-block[data-type="core/pullquote"][data-align="left"] .wp-block-pullquote__citation, +.wp-block[data-type="core/pullquote"][data-align="right"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +.wp-block[data-type="core/pullquote"][data-align="right"] blockquote > .editor-rich-text p, +.wp-block[data-type="core/pullquote"][data-align="right"] p, +.wp-block[data-type="core/pullquote"][data-align="right"] .wp-block-pullquote__citation { + text-align: left; +} + +@media only screen and (min-width: 768px) { + .wp-block[data-type="core/pullquote"][data-align="full"] .wp-block-pullquote blockquote { + max-width: calc(80% - 128px); + } +} + +/** === File === */ +.wp-block-file { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.wp-block-file .wp-block-file__textlink { + text-decoration: underline; + color: #0073aa; +} + +.wp-block-file .wp-block-file__textlink:hover { + color: #005177; + text-decoration: none; +} + +.wp-block-file .wp-block-file__button { + display: table; + line-height: 1.8; + font-size: 0.88889em; + font-weight: bold; + background-color: #0073aa; + border-radius: 5px; +} + +.wp-block-file .wp-block-file__button-richtext-wrapper { + display: block; + margin-top: calc(0.75 * 1rem); + margin-left: 0; +} + +/** === Verse === */ +.wp-block-verse, +.wp-block-verse pre { + padding: 0; +} + +/** === Code === */ +.wp-block-code { + border-radius: 0; +} + +/** === Table === */ +.wp-block-table td, .wp-block-table th { + border-color: #767676; +} + +/** === Separator === */ +.wp-block-separator:not(.is-style-dots) { + border-bottom: 2px solid #767676; +} + +.wp-block-separator:not(.is-style-wide):not(.is-style-dots) { + width: 2.25em; + margin-left: 0; +} + +.wp-block-separator.is-style-dots:before { + color: #767676; + font-size: 1.6875em; + letter-spacing: calc(2 * 1rem); + padding-left: calc(2 * 1rem); +} + +/* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ +.wp-block[data-type="core/separator"] + .wp-block[data-type="core/heading"] h1:before, +.wp-block[data-type="core/separator"] + .wp-block[data-type="core/heading"] h2:before { + display: none; +} + +/** === Latest Posts, Archives, Categories === */ +ul.wp-block-archives, +.wp-block-categories, +.wp-block-latest-posts { + padding: 0; + list-style-type: none; +} + +ul.wp-block-archives ul, +.wp-block-categories ul, +.wp-block-latest-posts ul { + padding: 0; + list-style-type: none; +} + +ul.wp-block-archives li, +.wp-block-categories li, +.wp-block-latest-posts li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.125); + font-weight: bold; + line-height: 1.2; + padding-bottom: 0.75rem; +} + +ul.wp-block-archives li.menu-item-has-children, ul.wp-block-archives li:last-child, +.wp-block-categories li.menu-item-has-children, +.wp-block-categories li:last-child, +.wp-block-latest-posts li.menu-item-has-children, +.wp-block-latest-posts li:last-child { + padding-bottom: 0; +} + +ul.wp-block-archives li a, +.wp-block-categories li a, +.wp-block-latest-posts li a { + text-decoration: none; +} + +ul.wp-block-archives li ul, +.wp-block-categories li ul, +.wp-block-latest-posts li ul { + padding-left: 1rem; +} + +.wp-block-categories ul { + padding-top: 0.75rem; +} + +.wp-block-categories ul ul { + counter-reset: submenu; +} + +.wp-block-categories ul ul > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.wp-block-categories li ul { + list-style: none; + padding-left: 0; + margin-bottom: -0.75rem; +} + +/** === Latest Posts grid view === */ +.wp-block-latest-posts.is-grid li { + border-top: 2px solid #ccc; + padding-top: 1rem; + margin-bottom: 2rem; +} + +.wp-block-latest-posts.is-grid li a:after { + content: ''; +} + +.wp-block-latest-posts.is-grid li:last-child { + margin-bottom: auto; +} + +.wp-block-latest-posts.is-grid li:last-child a:after { + content: ''; +} + +/** === Latest Comments === */ +.wp-block-latest-comments .wp-block-latest-comments__comment-meta { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment-meta .wp-block-latest-comments__comment-date { + font-weight: normal; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment, +.wp-block-latest-comments .wp-block-latest-comments__comment-date, +.wp-block-latest-comments .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment-date { + font-size: 0.71111em; +} + +/** === Classic Editor === */ +/* Properly center-align captions in the classic-editor block */ +.wp-caption dd { + color: #767676; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: left; + text-align: center; + -webkit-margin-start: 0px; + margin-inline-start: 0px; +} + +.wp-block-freeform { + /* Add style for galleries in classic-editor block */ +} + +.wp-block-freeform blockquote { + border-left: 2px solid #0073aa; +} + +.wp-block-freeform blockquote cite { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + font-style: normal; + line-height: 1.6; + color: #767676; +} diff --git a/wp-content/themes/twentynineteen/style-editor.scss b/wp-content/themes/twentynineteen/style-editor.scss new file mode 100644 index 000000000..43ce4a94b --- /dev/null +++ b/wp-content/themes/twentynineteen/style-editor.scss @@ -0,0 +1,741 @@ +/*! +Twenty Nineteen Editor Styles +*/ + +/** === Includes === */ + +@import "sass/variables-site/variables-site"; +@import "sass/mixins/mixins-master"; + +/** === Editor Frame === */ + +body { + + .wp-block[data-align="full"] { + width: 100%; + } + + @include media(mobile) { + + .wp-block[data-align="full"] { + width: calc( 100% + 90px ); + max-width: calc( 100% + 90px ); + } + } + + @include media(tablet) { + + .editor-writing-flow { + max-width: 80%; + margin: 0 10%; + } + + .editor-post-title__block, + .editor-default-block-appender, + .editor-block-list__block { + margin-left: 0; + margin-right: 0; + } + + .wp-block[data-align="wide"] { + width: 100%; + } + + .wp-block[data-align="full"] { + position: relative; + left: calc( -12.5% - 14px ); + width: calc( 125% + 116px ); + max-width: calc( 125% + 115px ); // Subtract 1px here to avoid the rounding errors that happen due to the usage of percentages. + } + + .wp-block[data-align="right"] { + max-width: 125%; + } + } +} + +/** === Content Width === */ + +.wp-block { + width: calc(100vw - (2 * #{$size__spacing-unit})); + max-width: 100%; + + @include media(tablet) { + width: calc(8 * (100vw / 12)); + } + + @include media(desktop) { + width: calc(6 * (100vw / 12 )); + } + + // Only the top level blocks need specific widths, therefore override for every nested block. + .wp-block { + width: 100%; + } +} + +/** === Base Typography === */ + +body { + font-size: $font__size_base; + @include font-family( $font__body ); + line-height: $font__line-height-body; + color: $color__text-main; +} + +p { + font-size: $font__size_base; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + @include font-family( $font__heading ); + font-weight: 700; +} + +h1 { + font-size: $font__size-xl; + @include post-section-dash; + + @include media(tablet) { + font-size: $font__size-xxl; + } +} + +h2 { + font-size: $font__size-lg; + @include post-section-dash; + + @include media(tablet) { + font-size: $font__size-xl; + } +} + +h3 { + font-size: $font__size-lg; +} + +h4 { + font-size: $font__size-md; +} + +h5 { + font-size: $font__size-sm; +} + +h6 { + font-size: $font__size-xs; +} + +a { + @include link-transition; + color: $color__link; + + *:visited { + + } + + &:hover, + &:active { + color: $color__link-hover; + outline: 0; + text-decoration: none; + } + + &:focus { + outline: 0; + text-decoration: underline; + } +} + +// Use white text against these backgrounds by default. +.has-primary-background-color, +.has-secondary-background-color, +.has-dark-gray-background-color, +.has-light-gray-background-color { + color: $color__background-body; + + p, + h1, + h2, + h3, + h4, + h5, + h6, + a { + color: $color__background-body; + } +} + +// Use dark gray text against this background by default. +.has-white-background-color { + color: $color__text-main; + + p, + h1, + h2, + h3, + h4, + h5, + h6, + a { + color: $color__text-main; + } +} + +figcaption, +.gallery-caption { + @include font-family( $font__heading ); + font-size: $font__size-xs; + line-height: 1.6; + color: $color__text-light; +} + +/** === Post Title === */ + +.editor-post-title__block { + @include post-section-dash; + + &:before { + width: $font__size-xxl; + margin-top: 0; + margin-bottom: 0; + margin-left: 1em; + position: relative; + top: 0.5em; + } + + .editor-post-title__input { + @include font-family( $font__heading ); + font-size: $font__size-xxl; + font-weight: 700; + } +} + +/** === Default Appender === */ + +.editor-default-block-appender .editor-default-block-appender__content { + @include font-family( $font__body ); + font-size: $font__size_base; +} + +/** === Heading === */ + +.wp-block-heading { + strong { + font-weight: bolder; + } +} +/** === Paragraph === */ + +.wp-block-paragraph { + + &.has-drop-cap:not(:focus)::first-letter { + @include font-family( $font__heading ); + font-size: $font__size-xxxl; + line-height: 1; + font-weight: bold; + margin: 0 0.25em 0 0; + } +} + +/** === Table === */ + +.wp-block-table { + @include font-family( $font__heading ); +} + +/** === Cover === */ + +.wp-block-cover { + + h2, + .wp-block-cover-text { + @include font-family( $font__heading ); + font-size: $font__size-lg; + font-weight: bold; + line-height: 1.4; + padding-left: $size__spacing-unit; + padding-right: $size__spacing-unit; + + strong { + font-weight: bolder; + } + + @include media(tablet) { + margin-left: auto; + margin-right: auto; + padding: 0; + } + } + + @include media(tablet) { + padding-left: 10%; + padding-right: 10%; + + h2, + .wp-block-cover-text { + font-size: $font__size-xl; + } + } +} + +.wp-block[data-type="core/cover"][data-align="left"], +.wp-block[data-type="core/cover"][data-align="right"] { + + .editor-block-list__block-edit { + width: calc(4 * (100vw / 12)); + } + + .wp-block-cover { + width: 100%; + max-width: 100%; + padding: calc(1.375 * #{$size__spacing-unit}); + + p { + padding-left: 0; + padding-right: 0; + } + + @include media(tablet) { + padding: calc(2.75 * #{$size__spacing-unit}) calc(2.75 * #{$size__spacing-unit}) calc(3.125 * #{$size__spacing-unit}); + } + } +} + +.wp-block[data-type="core/cover"][data-align="wide"], +.wp-block[data-type="core/cover"][data-align="full"] { + + @include media(tablet) { + + h2, + .wp-block-cover-text { + max-width: calc(8 * (100vw / 12)); + } + } + + @include media(desktop) { + + h2, + .wp-block-cover-text { + max-width: calc(6 * (100vw / 12)); + } + } +} + +.wp-block[data-type="core/cover"][data-align="full"] { + + @include media(tablet) { + + .wp-block-cover { + padding-left: calc(10% + 64px); + padding-right: calc(10% + 64px); + } + } +} + +/** === Gallery === */ + +.wp-block-gallery { + + .blocks-gallery-image figcaption, + .blocks-gallery-item figcaption, + .gallery-item .gallery-caption { + font-size: $font__size-xs; + line-height: 1.6; + } +} + +/** === Button === */ + +.wp-block-button { + + .wp-block-button__link { + line-height: 1.8; + @include font-family( $font__heading ); + font-size: $font__size-sm; + font-weight: bold; + } + + &:not(.is-style-outline) .wp-block-button__link { + background: $color__background-button; + } + + &:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; + } + + &.is-style-outline, + &.is-style-outline:hover, + &.is-style-outline:focus, + &.is-style-outline:active { + background: transparent; + color: $color__background-button; + + .wp-block-button__link { + background: transparent; + + &:not(.has-text-color) { + color: $color__background-button; + } + } + } +} + +/** === Blockquote === */ + +.wp-block-quote { + + &:not(.is-large):not(.is-style-large) { + border-width: 2px; + border-color: $color__link; + } + + &.is-large, + &.is-style-large { + margin-top: $font__size-xxl; + margin-bottom: $font__size-xxl; + } + + &.is-large p, + &.is-style-large p { + font-size: $font__size-lg; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + } + + cite, + footer, + .wp-block-quote__citation { + @include font-family( $font__heading ); + font-size: $font__size-xs; + line-height: 1.6; + color: $color__text-light; + } +} + +/** === Pullquote === */ + +.wp-block-pullquote { + border-color: transparent; + border-width: 2px; + color: #000; + + blockquote { + margin-top: calc(3 * #{ $size__spacing-unit}); + margin-bottom: calc(3.33 * #{ $size__spacing-unit}); + hyphens: auto; + word-break: break-word; + } + + &:not(.is-style-solid-color) .wp-block-pullquote__citation { + color: $color__text-light; + } + + &.is-style-solid-color { + + blockquote { + width: calc(100% - (2 * #{ $size__spacing-unit})); + max-width: calc( 100% - (2 * #{ $size__spacing-unit})); + + a, + &.has-text-color p, + &.has-text-color a { + color: inherit; + } + + &:not(.has-text-color) { + color: $color__background-body; + } + + @include media(tablet) { + max-width: 80%; + } + } + + &:not(.has-background-color) { + background-color: $color__link; + } + } +} + +.wp-block[data-type="core/pullquote"], +.wp-block[data-type="core/pullquote"][data-align="left"], +.wp-block[data-type="core/pullquote"][data-align="right"] { + + blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + blockquote > .editor-rich-text p, + p { + font-size: $font__size-lg; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + + @include media(tablet) { + font-size: $font__size-xl; + } + } + + .wp-block-pullquote__citation { + @include font-family( $font__heading ); + font-size: $font__size-xs; + line-height: 1.6; + text-transform: none; + } + + em { + font-style: normal; + } +} + +.wp-block[data-type="core/pullquote"][data-align="left"], +.wp-block[data-type="core/pullquote"][data-align="right"] { + + .editor-block-list__block-edit { + width: calc(4 * (100vw / 12)); + max-width: 50%; + + .wp-block-pullquote:not(.is-style-solid-color) { + padding: 0; + } + + .wp-block-pullquote.is-style-solid-color { + padding: 1em; + } + } + + blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + blockquote > .editor-rich-text p, + p, + .wp-block-pullquote__citation { + text-align: left; + } +} + +.wp-block[data-type="core/pullquote"][data-align="full"] { + + @include media(tablet) { + + .wp-block-pullquote blockquote { + max-width: calc(80% - 128px); + } + } +} + + +/** === File === */ + +.wp-block-file { + @include font-family( $font__heading ); + + .wp-block-file__textlink { + text-decoration: underline; + color: $color__link; + + &:hover { + color: $color__link-hover; + text-decoration: none; + } + } + + .wp-block-file__button { + display: table; + line-height: 1.8; + font-size: $font__size-sm; + font-weight: bold; + background-color: $color__link; + border-radius: 5px; + } + + .wp-block-file__button-richtext-wrapper { + display: block; + margin-top: calc(0.75 * #{$size__spacing-unit}); + margin-left: 0; + } + +} + +/** === Verse === */ + +.wp-block-verse, +.wp-block-verse pre { + padding: 0; +} + +/** === Code === */ + +.wp-block-code { + border-radius: 0; +} + +/** === Table === */ + +.wp-block-table { + + td, th { + border-color: $color__text-light; + } +} + +/** === Separator === */ + +.wp-block-separator { + + &:not(.is-style-dots) { + border-bottom: 2px solid $color__text-light; + } + + &:not(.is-style-wide):not(.is-style-dots) { + width: $font__size-xl; + margin-left: 0; + } + + &.is-style-dots:before { + color: $color__text-light; + font-size: $font__size-lg; + letter-spacing: calc(2 * #{$size__spacing-unit}); + padding-left: calc(2 * #{$size__spacing-unit}); + } +} + +/* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ +.wp-block[data-type="core/separator"] + .wp-block[data-type="core/heading"] h1:before, +.wp-block[data-type="core/separator"] + .wp-block[data-type="core/heading"] h2:before { + display: none; +} + +/** === Latest Posts, Archives, Categories === */ + +ul.wp-block-archives, +.wp-block-categories, +.wp-block-latest-posts { + padding: 0; + list-style-type: none; + + ul { + padding: 0; + list-style-type: none; + } + + li { + color: $color__text-light; + @include font-family( $font__heading ); + font-size: calc(#{$font__size_base} * #{$font__size-ratio}); + font-weight: bold; + line-height: $font__line-height-heading; + padding-bottom: ( .75 * $size__spacing-unit ); + + &.menu-item-has-children, + &:last-child { + padding-bottom: 0; + } + + a { + text-decoration: none; + } + + ul { + padding-left: $size__spacing-unit; + } + } +} + +.wp-block-categories { + + ul { + padding-top: ( .75 * $size__spacing-unit ); + @include nestedSubMenuPadding(); + } + + li ul { + list-style: none; + padding-left: 0; + margin-bottom: ( -.75 * $size__spacing-unit ); + } + +} + +/** === Latest Posts grid view === */ +.wp-block-latest-posts.is-grid { + li { + border-top: 2px solid $color__border; + padding-top: (1 * $size__spacing-unit); + margin-bottom: (2 * $size__spacing-unit); + a { + &:after { + content: ''; + } + } + &:last-child { + margin-bottom: auto; + a:after { + content: ''; + } + } + } + } + +/** === Latest Comments === */ + +.wp-block-latest-comments { + + .wp-block-latest-comments__comment-meta { + @include font-family( $font__heading ); + font-weight: bold; + + .wp-block-latest-comments__comment-date { + font-weight: normal; + } + } + + .wp-block-latest-comments__comment, + .wp-block-latest-comments__comment-date, + .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; + } + + .wp-block-latest-comments__comment-date { + font-size: $font__size-xs; + } +} + +/** === Classic Editor === */ + +/* Properly center-align captions in the classic-editor block */ +.wp-caption { + dd { + color: $color__text-light; + font-size: $font__size-xs; + @include font-family( $font__heading ); + line-height: $font__line-height-pre; + margin: 0; + padding: ( $size__spacing-unit * .5 ); + text-align: left; + text-align: center; + -webkit-margin-start: 0px; + margin-inline-start: 0px; + } +} + +.wp-block-freeform { + + /* Add style for galleries in classic-editor block */ + blockquote { + border-left: 2px solid $color__link; + + cite { + @include font-family( $font__heading ); + font-size: $font__size-xs; + font-style: normal; + line-height: 1.6; + color: $color__text-light; + } + } +} diff --git a/wp-content/themes/twentynineteen/style-rtl.css b/wp-content/themes/twentynineteen/style-rtl.css new file mode 100644 index 000000000..a626c385b --- /dev/null +++ b/wp-content/themes/twentynineteen/style-rtl.css @@ -0,0 +1,6369 @@ +@charset "UTF-8"; +/* +Theme Name: Twenty Nineteen +Theme URI: https://wordpress.org/themes/twentynineteen/ +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: Our 2019 default theme is designed to show off the power of the block editor. It features custom styles for all the default blocks, and is built so that what you see in the editor looks like what you'll see on your website. Twenty Nineteen is designed to be adaptable to a wide range of websites, whether you’re running a photo blog, launching a new business, or supporting a non-profit. Featuring ample whitespace and modern sans-serif headlines paired with classic serif body text, it's built to be beautiful on all screen sizes. +Requires at least: WordPress 4.9.6 +Version: 1.4 +License: GNU General Public License v2 or later +License URI: LICENSE +Text Domain: twentynineteen +Tags: one-column, flexible-header, accessibility-ready, custom-colors, custom-menu, custom-logo, editor-style, featured-images, footer-widgets, rtl-language-support, sticky-post, threaded-comments, translation-ready + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. + +Twenty Nineteen is based on Underscores https://underscores.me/, (C) 2012-2018 Automattic, Inc. +Underscores is distributed under the terms of the GNU GPL v2 or later. + +Normalizing styles have been helped along thanks to the fine work of +Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ +*/ +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Variables +# Normalize +# Typography + ## Headings + ## Copy +# Elements + ## Lists + ## Tables +# Forms + ## Buttons + ## Fields +# Navigation + ## Links + ## Menus + ## Next & Previous +# Accessibility +# Alignments +# Clearings +# Layout +# Widgets +# Content + ## Archives + ## Posts and pages + ## Comments +# Blocks +# Media + ## Captions + ## Galleries +--------------------------------------------------------------*/ +/* + * Chrome renders extra-wide   characters for the Hoefler Text font. + * This results in a jumping cursor when typing in both the Classic and block + * editors. The following font-face override fixes the issue by manually inserting + * a custom font that includes just a Hoefler Text space replacement for that + * character instead. + */ +@font-face { + font-family: 'NonBreakingSpaceOverride'; + src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format("woff"); +} + +/* If we add the border using a regular CSS border, it won't look good on non-retina devices, + * since its edges can look jagged due to lack of antialiasing. In this case, we are several + * layers of box-shadow to add the border visually, which will render the border smoother. */ +/* Calculates maximum width for post content */ +/* Nested sub-menu padding: 10 levels deep */ +/* Ensure all font family declarations come with non-latin fallbacks */ +/* Build our non-latin font styles */ +body:lang(ar), button:lang(ar), +input:lang(ar), +select:lang(ar), +optgroup:lang(ar), +textarea:lang(ar), .author-description .author-link:lang(ar), +.comment-metadata:lang(ar), +.comment-reply-link:lang(ar), +.comments-title:lang(ar), +.comment-author .fn:lang(ar), +.discussion-meta-info:lang(ar), +.entry-meta:lang(ar), +.entry-footer:lang(ar), +.main-navigation:lang(ar), +.no-comments:lang(ar), +.not-found .page-title:lang(ar), +.error-404 .page-title:lang(ar), +.post-navigation .post-title:lang(ar), +.page-links:lang(ar), +.page-description:lang(ar), +.pagination .nav-links:lang(ar), +.sticky-post:lang(ar), +.site-title:lang(ar), +.site-info:lang(ar), +#cancel-comment-reply-link:lang(ar), +h1:lang(ar), +h2:lang(ar), +h3:lang(ar), +h4:lang(ar), +h5:lang(ar), +h6:lang(ar), .page-title:lang(ar), blockquote cite:lang(ar), table:lang(ar), .button:lang(ar), +input:lang(ar)[type="button"], +input:lang(ar)[type="reset"], +input:lang(ar)[type="submit"], .comment-navigation .nav-previous:lang(ar), +.comment-navigation .nav-next:lang(ar), .comment-list .pingback .comment-body:lang(ar), +.comment-list .trackback .comment-body:lang(ar), .comment-list .pingback .comment-body .comment-edit-link:lang(ar), +.comment-list .trackback .comment-body .comment-edit-link:lang(ar), .comment-form .comment-notes:lang(ar), +.comment-form label:lang(ar), .widget_archive ul li:lang(ar), +.widget_categories ul li:lang(ar), +.widget_meta ul li:lang(ar), +.widget_nav_menu ul li:lang(ar), +.widget_pages ul li:lang(ar), +.widget_recent_comments ul li:lang(ar), +.widget_recent_entries ul li:lang(ar), +.widget_rss ul li:lang(ar), .widget_tag_cloud .tagcloud:lang(ar), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ar), .entry .entry-content .wp-block-archives li:lang(ar), +.entry .entry-content .wp-block-categories li:lang(ar), +.entry .entry-content .wp-block-latest-posts li:lang(ar), .entry .entry-content .wp-block-verse:lang(ar), .entry .entry-content .has-drop-cap:lang(ar):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ar), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ar), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ar), +.entry .entry-content .wp-block-cover-image h2:lang(ar), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ar), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ar), +.entry .entry-content .wp-block-cover h2:lang(ar), .entry .entry-content .wp-block-audio figcaption:lang(ar), +.entry .entry-content .wp-block-video figcaption:lang(ar), +.entry .entry-content .wp-block-image figcaption:lang(ar), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ar), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ar), .entry .entry-content .wp-block-file:lang(ar), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ar), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ar), .wp-caption-text:lang(ar), .gallery-caption:lang(ar) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(ary), button:lang(ary), +input:lang(ary), +select:lang(ary), +optgroup:lang(ary), +textarea:lang(ary), .author-description .author-link:lang(ary), +.comment-metadata:lang(ary), +.comment-reply-link:lang(ary), +.comments-title:lang(ary), +.comment-author .fn:lang(ary), +.discussion-meta-info:lang(ary), +.entry-meta:lang(ary), +.entry-footer:lang(ary), +.main-navigation:lang(ary), +.no-comments:lang(ary), +.not-found .page-title:lang(ary), +.error-404 .page-title:lang(ary), +.post-navigation .post-title:lang(ary), +.page-links:lang(ary), +.page-description:lang(ary), +.pagination .nav-links:lang(ary), +.sticky-post:lang(ary), +.site-title:lang(ary), +.site-info:lang(ary), +#cancel-comment-reply-link:lang(ary), +h1:lang(ary), +h2:lang(ary), +h3:lang(ary), +h4:lang(ary), +h5:lang(ary), +h6:lang(ary), .page-title:lang(ary), blockquote cite:lang(ary), table:lang(ary), .button:lang(ary), +input:lang(ary)[type="button"], +input:lang(ary)[type="reset"], +input:lang(ary)[type="submit"], .comment-navigation .nav-previous:lang(ary), +.comment-navigation .nav-next:lang(ary), .comment-list .pingback .comment-body:lang(ary), +.comment-list .trackback .comment-body:lang(ary), .comment-list .pingback .comment-body .comment-edit-link:lang(ary), +.comment-list .trackback .comment-body .comment-edit-link:lang(ary), .comment-form .comment-notes:lang(ary), +.comment-form label:lang(ary), .widget_archive ul li:lang(ary), +.widget_categories ul li:lang(ary), +.widget_meta ul li:lang(ary), +.widget_nav_menu ul li:lang(ary), +.widget_pages ul li:lang(ary), +.widget_recent_comments ul li:lang(ary), +.widget_recent_entries ul li:lang(ary), +.widget_rss ul li:lang(ary), .widget_tag_cloud .tagcloud:lang(ary), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ary), .entry .entry-content .wp-block-archives li:lang(ary), +.entry .entry-content .wp-block-categories li:lang(ary), +.entry .entry-content .wp-block-latest-posts li:lang(ary), .entry .entry-content .wp-block-verse:lang(ary), .entry .entry-content .has-drop-cap:lang(ary):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ary), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ary), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ary), +.entry .entry-content .wp-block-cover-image h2:lang(ary), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ary), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ary), +.entry .entry-content .wp-block-cover h2:lang(ary), .entry .entry-content .wp-block-audio figcaption:lang(ary), +.entry .entry-content .wp-block-video figcaption:lang(ary), +.entry .entry-content .wp-block-image figcaption:lang(ary), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ary), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ary), .entry .entry-content .wp-block-file:lang(ary), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ary), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ary), .wp-caption-text:lang(ary), .gallery-caption:lang(ary) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(azb), button:lang(azb), +input:lang(azb), +select:lang(azb), +optgroup:lang(azb), +textarea:lang(azb), .author-description .author-link:lang(azb), +.comment-metadata:lang(azb), +.comment-reply-link:lang(azb), +.comments-title:lang(azb), +.comment-author .fn:lang(azb), +.discussion-meta-info:lang(azb), +.entry-meta:lang(azb), +.entry-footer:lang(azb), +.main-navigation:lang(azb), +.no-comments:lang(azb), +.not-found .page-title:lang(azb), +.error-404 .page-title:lang(azb), +.post-navigation .post-title:lang(azb), +.page-links:lang(azb), +.page-description:lang(azb), +.pagination .nav-links:lang(azb), +.sticky-post:lang(azb), +.site-title:lang(azb), +.site-info:lang(azb), +#cancel-comment-reply-link:lang(azb), +h1:lang(azb), +h2:lang(azb), +h3:lang(azb), +h4:lang(azb), +h5:lang(azb), +h6:lang(azb), .page-title:lang(azb), blockquote cite:lang(azb), table:lang(azb), .button:lang(azb), +input:lang(azb)[type="button"], +input:lang(azb)[type="reset"], +input:lang(azb)[type="submit"], .comment-navigation .nav-previous:lang(azb), +.comment-navigation .nav-next:lang(azb), .comment-list .pingback .comment-body:lang(azb), +.comment-list .trackback .comment-body:lang(azb), .comment-list .pingback .comment-body .comment-edit-link:lang(azb), +.comment-list .trackback .comment-body .comment-edit-link:lang(azb), .comment-form .comment-notes:lang(azb), +.comment-form label:lang(azb), .widget_archive ul li:lang(azb), +.widget_categories ul li:lang(azb), +.widget_meta ul li:lang(azb), +.widget_nav_menu ul li:lang(azb), +.widget_pages ul li:lang(azb), +.widget_recent_comments ul li:lang(azb), +.widget_recent_entries ul li:lang(azb), +.widget_rss ul li:lang(azb), .widget_tag_cloud .tagcloud:lang(azb), .entry .entry-content .wp-block-button .wp-block-button__link:lang(azb), .entry .entry-content .wp-block-archives li:lang(azb), +.entry .entry-content .wp-block-categories li:lang(azb), +.entry .entry-content .wp-block-latest-posts li:lang(azb), .entry .entry-content .wp-block-verse:lang(azb), .entry .entry-content .has-drop-cap:lang(azb):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(azb), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(azb), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(azb), +.entry .entry-content .wp-block-cover-image h2:lang(azb), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(azb), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(azb), +.entry .entry-content .wp-block-cover h2:lang(azb), .entry .entry-content .wp-block-audio figcaption:lang(azb), +.entry .entry-content .wp-block-video figcaption:lang(azb), +.entry .entry-content .wp-block-image figcaption:lang(azb), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(azb), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(azb), .entry .entry-content .wp-block-file:lang(azb), .entry .entry-content .wp-block-file .wp-block-file__button:lang(azb), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(azb), .wp-caption-text:lang(azb), .gallery-caption:lang(azb) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(ckb), button:lang(ckb), +input:lang(ckb), +select:lang(ckb), +optgroup:lang(ckb), +textarea:lang(ckb), .author-description .author-link:lang(ckb), +.comment-metadata:lang(ckb), +.comment-reply-link:lang(ckb), +.comments-title:lang(ckb), +.comment-author .fn:lang(ckb), +.discussion-meta-info:lang(ckb), +.entry-meta:lang(ckb), +.entry-footer:lang(ckb), +.main-navigation:lang(ckb), +.no-comments:lang(ckb), +.not-found .page-title:lang(ckb), +.error-404 .page-title:lang(ckb), +.post-navigation .post-title:lang(ckb), +.page-links:lang(ckb), +.page-description:lang(ckb), +.pagination .nav-links:lang(ckb), +.sticky-post:lang(ckb), +.site-title:lang(ckb), +.site-info:lang(ckb), +#cancel-comment-reply-link:lang(ckb), +h1:lang(ckb), +h2:lang(ckb), +h3:lang(ckb), +h4:lang(ckb), +h5:lang(ckb), +h6:lang(ckb), .page-title:lang(ckb), blockquote cite:lang(ckb), table:lang(ckb), .button:lang(ckb), +input:lang(ckb)[type="button"], +input:lang(ckb)[type="reset"], +input:lang(ckb)[type="submit"], .comment-navigation .nav-previous:lang(ckb), +.comment-navigation .nav-next:lang(ckb), .comment-list .pingback .comment-body:lang(ckb), +.comment-list .trackback .comment-body:lang(ckb), .comment-list .pingback .comment-body .comment-edit-link:lang(ckb), +.comment-list .trackback .comment-body .comment-edit-link:lang(ckb), .comment-form .comment-notes:lang(ckb), +.comment-form label:lang(ckb), .widget_archive ul li:lang(ckb), +.widget_categories ul li:lang(ckb), +.widget_meta ul li:lang(ckb), +.widget_nav_menu ul li:lang(ckb), +.widget_pages ul li:lang(ckb), +.widget_recent_comments ul li:lang(ckb), +.widget_recent_entries ul li:lang(ckb), +.widget_rss ul li:lang(ckb), .widget_tag_cloud .tagcloud:lang(ckb), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ckb), .entry .entry-content .wp-block-archives li:lang(ckb), +.entry .entry-content .wp-block-categories li:lang(ckb), +.entry .entry-content .wp-block-latest-posts li:lang(ckb), .entry .entry-content .wp-block-verse:lang(ckb), .entry .entry-content .has-drop-cap:lang(ckb):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ckb), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ckb), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ckb), +.entry .entry-content .wp-block-cover-image h2:lang(ckb), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ckb), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ckb), +.entry .entry-content .wp-block-cover h2:lang(ckb), .entry .entry-content .wp-block-audio figcaption:lang(ckb), +.entry .entry-content .wp-block-video figcaption:lang(ckb), +.entry .entry-content .wp-block-image figcaption:lang(ckb), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ckb), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ckb), .entry .entry-content .wp-block-file:lang(ckb), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ckb), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ckb), .wp-caption-text:lang(ckb), .gallery-caption:lang(ckb) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(fa-IR), button:lang(fa-IR), +input:lang(fa-IR), +select:lang(fa-IR), +optgroup:lang(fa-IR), +textarea:lang(fa-IR), .author-description .author-link:lang(fa-IR), +.comment-metadata:lang(fa-IR), +.comment-reply-link:lang(fa-IR), +.comments-title:lang(fa-IR), +.comment-author .fn:lang(fa-IR), +.discussion-meta-info:lang(fa-IR), +.entry-meta:lang(fa-IR), +.entry-footer:lang(fa-IR), +.main-navigation:lang(fa-IR), +.no-comments:lang(fa-IR), +.not-found .page-title:lang(fa-IR), +.error-404 .page-title:lang(fa-IR), +.post-navigation .post-title:lang(fa-IR), +.page-links:lang(fa-IR), +.page-description:lang(fa-IR), +.pagination .nav-links:lang(fa-IR), +.sticky-post:lang(fa-IR), +.site-title:lang(fa-IR), +.site-info:lang(fa-IR), +#cancel-comment-reply-link:lang(fa-IR), +h1:lang(fa-IR), +h2:lang(fa-IR), +h3:lang(fa-IR), +h4:lang(fa-IR), +h5:lang(fa-IR), +h6:lang(fa-IR), .page-title:lang(fa-IR), blockquote cite:lang(fa-IR), table:lang(fa-IR), .button:lang(fa-IR), +input:lang(fa-IR)[type="button"], +input:lang(fa-IR)[type="reset"], +input:lang(fa-IR)[type="submit"], .comment-navigation .nav-previous:lang(fa-IR), +.comment-navigation .nav-next:lang(fa-IR), .comment-list .pingback .comment-body:lang(fa-IR), +.comment-list .trackback .comment-body:lang(fa-IR), .comment-list .pingback .comment-body .comment-edit-link:lang(fa-IR), +.comment-list .trackback .comment-body .comment-edit-link:lang(fa-IR), .comment-form .comment-notes:lang(fa-IR), +.comment-form label:lang(fa-IR), .widget_archive ul li:lang(fa-IR), +.widget_categories ul li:lang(fa-IR), +.widget_meta ul li:lang(fa-IR), +.widget_nav_menu ul li:lang(fa-IR), +.widget_pages ul li:lang(fa-IR), +.widget_recent_comments ul li:lang(fa-IR), +.widget_recent_entries ul li:lang(fa-IR), +.widget_rss ul li:lang(fa-IR), .widget_tag_cloud .tagcloud:lang(fa-IR), .entry .entry-content .wp-block-button .wp-block-button__link:lang(fa-IR), .entry .entry-content .wp-block-archives li:lang(fa-IR), +.entry .entry-content .wp-block-categories li:lang(fa-IR), +.entry .entry-content .wp-block-latest-posts li:lang(fa-IR), .entry .entry-content .wp-block-verse:lang(fa-IR), .entry .entry-content .has-drop-cap:lang(fa-IR):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(fa-IR), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(fa-IR), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(fa-IR), +.entry .entry-content .wp-block-cover-image h2:lang(fa-IR), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(fa-IR), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(fa-IR), +.entry .entry-content .wp-block-cover h2:lang(fa-IR), .entry .entry-content .wp-block-audio figcaption:lang(fa-IR), +.entry .entry-content .wp-block-video figcaption:lang(fa-IR), +.entry .entry-content .wp-block-image figcaption:lang(fa-IR), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(fa-IR), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(fa-IR), .entry .entry-content .wp-block-file:lang(fa-IR), .entry .entry-content .wp-block-file .wp-block-file__button:lang(fa-IR), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(fa-IR), .wp-caption-text:lang(fa-IR), .gallery-caption:lang(fa-IR) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(haz), button:lang(haz), +input:lang(haz), +select:lang(haz), +optgroup:lang(haz), +textarea:lang(haz), .author-description .author-link:lang(haz), +.comment-metadata:lang(haz), +.comment-reply-link:lang(haz), +.comments-title:lang(haz), +.comment-author .fn:lang(haz), +.discussion-meta-info:lang(haz), +.entry-meta:lang(haz), +.entry-footer:lang(haz), +.main-navigation:lang(haz), +.no-comments:lang(haz), +.not-found .page-title:lang(haz), +.error-404 .page-title:lang(haz), +.post-navigation .post-title:lang(haz), +.page-links:lang(haz), +.page-description:lang(haz), +.pagination .nav-links:lang(haz), +.sticky-post:lang(haz), +.site-title:lang(haz), +.site-info:lang(haz), +#cancel-comment-reply-link:lang(haz), +h1:lang(haz), +h2:lang(haz), +h3:lang(haz), +h4:lang(haz), +h5:lang(haz), +h6:lang(haz), .page-title:lang(haz), blockquote cite:lang(haz), table:lang(haz), .button:lang(haz), +input:lang(haz)[type="button"], +input:lang(haz)[type="reset"], +input:lang(haz)[type="submit"], .comment-navigation .nav-previous:lang(haz), +.comment-navigation .nav-next:lang(haz), .comment-list .pingback .comment-body:lang(haz), +.comment-list .trackback .comment-body:lang(haz), .comment-list .pingback .comment-body .comment-edit-link:lang(haz), +.comment-list .trackback .comment-body .comment-edit-link:lang(haz), .comment-form .comment-notes:lang(haz), +.comment-form label:lang(haz), .widget_archive ul li:lang(haz), +.widget_categories ul li:lang(haz), +.widget_meta ul li:lang(haz), +.widget_nav_menu ul li:lang(haz), +.widget_pages ul li:lang(haz), +.widget_recent_comments ul li:lang(haz), +.widget_recent_entries ul li:lang(haz), +.widget_rss ul li:lang(haz), .widget_tag_cloud .tagcloud:lang(haz), .entry .entry-content .wp-block-button .wp-block-button__link:lang(haz), .entry .entry-content .wp-block-archives li:lang(haz), +.entry .entry-content .wp-block-categories li:lang(haz), +.entry .entry-content .wp-block-latest-posts li:lang(haz), .entry .entry-content .wp-block-verse:lang(haz), .entry .entry-content .has-drop-cap:lang(haz):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(haz), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(haz), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(haz), +.entry .entry-content .wp-block-cover-image h2:lang(haz), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(haz), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(haz), +.entry .entry-content .wp-block-cover h2:lang(haz), .entry .entry-content .wp-block-audio figcaption:lang(haz), +.entry .entry-content .wp-block-video figcaption:lang(haz), +.entry .entry-content .wp-block-image figcaption:lang(haz), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(haz), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(haz), .entry .entry-content .wp-block-file:lang(haz), .entry .entry-content .wp-block-file .wp-block-file__button:lang(haz), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(haz), .wp-caption-text:lang(haz), .gallery-caption:lang(haz) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(ps), button:lang(ps), +input:lang(ps), +select:lang(ps), +optgroup:lang(ps), +textarea:lang(ps), .author-description .author-link:lang(ps), +.comment-metadata:lang(ps), +.comment-reply-link:lang(ps), +.comments-title:lang(ps), +.comment-author .fn:lang(ps), +.discussion-meta-info:lang(ps), +.entry-meta:lang(ps), +.entry-footer:lang(ps), +.main-navigation:lang(ps), +.no-comments:lang(ps), +.not-found .page-title:lang(ps), +.error-404 .page-title:lang(ps), +.post-navigation .post-title:lang(ps), +.page-links:lang(ps), +.page-description:lang(ps), +.pagination .nav-links:lang(ps), +.sticky-post:lang(ps), +.site-title:lang(ps), +.site-info:lang(ps), +#cancel-comment-reply-link:lang(ps), +h1:lang(ps), +h2:lang(ps), +h3:lang(ps), +h4:lang(ps), +h5:lang(ps), +h6:lang(ps), .page-title:lang(ps), blockquote cite:lang(ps), table:lang(ps), .button:lang(ps), +input:lang(ps)[type="button"], +input:lang(ps)[type="reset"], +input:lang(ps)[type="submit"], .comment-navigation .nav-previous:lang(ps), +.comment-navigation .nav-next:lang(ps), .comment-list .pingback .comment-body:lang(ps), +.comment-list .trackback .comment-body:lang(ps), .comment-list .pingback .comment-body .comment-edit-link:lang(ps), +.comment-list .trackback .comment-body .comment-edit-link:lang(ps), .comment-form .comment-notes:lang(ps), +.comment-form label:lang(ps), .widget_archive ul li:lang(ps), +.widget_categories ul li:lang(ps), +.widget_meta ul li:lang(ps), +.widget_nav_menu ul li:lang(ps), +.widget_pages ul li:lang(ps), +.widget_recent_comments ul li:lang(ps), +.widget_recent_entries ul li:lang(ps), +.widget_rss ul li:lang(ps), .widget_tag_cloud .tagcloud:lang(ps), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ps), .entry .entry-content .wp-block-archives li:lang(ps), +.entry .entry-content .wp-block-categories li:lang(ps), +.entry .entry-content .wp-block-latest-posts li:lang(ps), .entry .entry-content .wp-block-verse:lang(ps), .entry .entry-content .has-drop-cap:lang(ps):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ps), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ps), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ps), +.entry .entry-content .wp-block-cover-image h2:lang(ps), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ps), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ps), +.entry .entry-content .wp-block-cover h2:lang(ps), .entry .entry-content .wp-block-audio figcaption:lang(ps), +.entry .entry-content .wp-block-video figcaption:lang(ps), +.entry .entry-content .wp-block-image figcaption:lang(ps), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ps), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ps), .entry .entry-content .wp-block-file:lang(ps), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ps), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ps), .wp-caption-text:lang(ps), .gallery-caption:lang(ps) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(be), button:lang(be), +input:lang(be), +select:lang(be), +optgroup:lang(be), +textarea:lang(be), .author-description .author-link:lang(be), +.comment-metadata:lang(be), +.comment-reply-link:lang(be), +.comments-title:lang(be), +.comment-author .fn:lang(be), +.discussion-meta-info:lang(be), +.entry-meta:lang(be), +.entry-footer:lang(be), +.main-navigation:lang(be), +.no-comments:lang(be), +.not-found .page-title:lang(be), +.error-404 .page-title:lang(be), +.post-navigation .post-title:lang(be), +.page-links:lang(be), +.page-description:lang(be), +.pagination .nav-links:lang(be), +.sticky-post:lang(be), +.site-title:lang(be), +.site-info:lang(be), +#cancel-comment-reply-link:lang(be), +h1:lang(be), +h2:lang(be), +h3:lang(be), +h4:lang(be), +h5:lang(be), +h6:lang(be), .page-title:lang(be), blockquote cite:lang(be), table:lang(be), .button:lang(be), +input:lang(be)[type="button"], +input:lang(be)[type="reset"], +input:lang(be)[type="submit"], .comment-navigation .nav-previous:lang(be), +.comment-navigation .nav-next:lang(be), .comment-list .pingback .comment-body:lang(be), +.comment-list .trackback .comment-body:lang(be), .comment-list .pingback .comment-body .comment-edit-link:lang(be), +.comment-list .trackback .comment-body .comment-edit-link:lang(be), .comment-form .comment-notes:lang(be), +.comment-form label:lang(be), .widget_archive ul li:lang(be), +.widget_categories ul li:lang(be), +.widget_meta ul li:lang(be), +.widget_nav_menu ul li:lang(be), +.widget_pages ul li:lang(be), +.widget_recent_comments ul li:lang(be), +.widget_recent_entries ul li:lang(be), +.widget_rss ul li:lang(be), .widget_tag_cloud .tagcloud:lang(be), .entry .entry-content .wp-block-button .wp-block-button__link:lang(be), .entry .entry-content .wp-block-archives li:lang(be), +.entry .entry-content .wp-block-categories li:lang(be), +.entry .entry-content .wp-block-latest-posts li:lang(be), .entry .entry-content .wp-block-verse:lang(be), .entry .entry-content .has-drop-cap:lang(be):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(be), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(be), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(be), +.entry .entry-content .wp-block-cover-image h2:lang(be), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(be), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(be), +.entry .entry-content .wp-block-cover h2:lang(be), .entry .entry-content .wp-block-audio figcaption:lang(be), +.entry .entry-content .wp-block-video figcaption:lang(be), +.entry .entry-content .wp-block-image figcaption:lang(be), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(be), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(be), .entry .entry-content .wp-block-file:lang(be), .entry .entry-content .wp-block-file .wp-block-file__button:lang(be), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(be), .wp-caption-text:lang(be), .gallery-caption:lang(be) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(bg-BG), button:lang(bg-BG), +input:lang(bg-BG), +select:lang(bg-BG), +optgroup:lang(bg-BG), +textarea:lang(bg-BG), .author-description .author-link:lang(bg-BG), +.comment-metadata:lang(bg-BG), +.comment-reply-link:lang(bg-BG), +.comments-title:lang(bg-BG), +.comment-author .fn:lang(bg-BG), +.discussion-meta-info:lang(bg-BG), +.entry-meta:lang(bg-BG), +.entry-footer:lang(bg-BG), +.main-navigation:lang(bg-BG), +.no-comments:lang(bg-BG), +.not-found .page-title:lang(bg-BG), +.error-404 .page-title:lang(bg-BG), +.post-navigation .post-title:lang(bg-BG), +.page-links:lang(bg-BG), +.page-description:lang(bg-BG), +.pagination .nav-links:lang(bg-BG), +.sticky-post:lang(bg-BG), +.site-title:lang(bg-BG), +.site-info:lang(bg-BG), +#cancel-comment-reply-link:lang(bg-BG), +h1:lang(bg-BG), +h2:lang(bg-BG), +h3:lang(bg-BG), +h4:lang(bg-BG), +h5:lang(bg-BG), +h6:lang(bg-BG), .page-title:lang(bg-BG), blockquote cite:lang(bg-BG), table:lang(bg-BG), .button:lang(bg-BG), +input:lang(bg-BG)[type="button"], +input:lang(bg-BG)[type="reset"], +input:lang(bg-BG)[type="submit"], .comment-navigation .nav-previous:lang(bg-BG), +.comment-navigation .nav-next:lang(bg-BG), .comment-list .pingback .comment-body:lang(bg-BG), +.comment-list .trackback .comment-body:lang(bg-BG), .comment-list .pingback .comment-body .comment-edit-link:lang(bg-BG), +.comment-list .trackback .comment-body .comment-edit-link:lang(bg-BG), .comment-form .comment-notes:lang(bg-BG), +.comment-form label:lang(bg-BG), .widget_archive ul li:lang(bg-BG), +.widget_categories ul li:lang(bg-BG), +.widget_meta ul li:lang(bg-BG), +.widget_nav_menu ul li:lang(bg-BG), +.widget_pages ul li:lang(bg-BG), +.widget_recent_comments ul li:lang(bg-BG), +.widget_recent_entries ul li:lang(bg-BG), +.widget_rss ul li:lang(bg-BG), .widget_tag_cloud .tagcloud:lang(bg-BG), .entry .entry-content .wp-block-button .wp-block-button__link:lang(bg-BG), .entry .entry-content .wp-block-archives li:lang(bg-BG), +.entry .entry-content .wp-block-categories li:lang(bg-BG), +.entry .entry-content .wp-block-latest-posts li:lang(bg-BG), .entry .entry-content .wp-block-verse:lang(bg-BG), .entry .entry-content .has-drop-cap:lang(bg-BG):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(bg-BG), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(bg-BG), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(bg-BG), +.entry .entry-content .wp-block-cover-image h2:lang(bg-BG), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(bg-BG), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(bg-BG), +.entry .entry-content .wp-block-cover h2:lang(bg-BG), .entry .entry-content .wp-block-audio figcaption:lang(bg-BG), +.entry .entry-content .wp-block-video figcaption:lang(bg-BG), +.entry .entry-content .wp-block-image figcaption:lang(bg-BG), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(bg-BG), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(bg-BG), .entry .entry-content .wp-block-file:lang(bg-BG), .entry .entry-content .wp-block-file .wp-block-file__button:lang(bg-BG), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(bg-BG), .wp-caption-text:lang(bg-BG), .gallery-caption:lang(bg-BG) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(kk), button:lang(kk), +input:lang(kk), +select:lang(kk), +optgroup:lang(kk), +textarea:lang(kk), .author-description .author-link:lang(kk), +.comment-metadata:lang(kk), +.comment-reply-link:lang(kk), +.comments-title:lang(kk), +.comment-author .fn:lang(kk), +.discussion-meta-info:lang(kk), +.entry-meta:lang(kk), +.entry-footer:lang(kk), +.main-navigation:lang(kk), +.no-comments:lang(kk), +.not-found .page-title:lang(kk), +.error-404 .page-title:lang(kk), +.post-navigation .post-title:lang(kk), +.page-links:lang(kk), +.page-description:lang(kk), +.pagination .nav-links:lang(kk), +.sticky-post:lang(kk), +.site-title:lang(kk), +.site-info:lang(kk), +#cancel-comment-reply-link:lang(kk), +h1:lang(kk), +h2:lang(kk), +h3:lang(kk), +h4:lang(kk), +h5:lang(kk), +h6:lang(kk), .page-title:lang(kk), blockquote cite:lang(kk), table:lang(kk), .button:lang(kk), +input:lang(kk)[type="button"], +input:lang(kk)[type="reset"], +input:lang(kk)[type="submit"], .comment-navigation .nav-previous:lang(kk), +.comment-navigation .nav-next:lang(kk), .comment-list .pingback .comment-body:lang(kk), +.comment-list .trackback .comment-body:lang(kk), .comment-list .pingback .comment-body .comment-edit-link:lang(kk), +.comment-list .trackback .comment-body .comment-edit-link:lang(kk), .comment-form .comment-notes:lang(kk), +.comment-form label:lang(kk), .widget_archive ul li:lang(kk), +.widget_categories ul li:lang(kk), +.widget_meta ul li:lang(kk), +.widget_nav_menu ul li:lang(kk), +.widget_pages ul li:lang(kk), +.widget_recent_comments ul li:lang(kk), +.widget_recent_entries ul li:lang(kk), +.widget_rss ul li:lang(kk), .widget_tag_cloud .tagcloud:lang(kk), .entry .entry-content .wp-block-button .wp-block-button__link:lang(kk), .entry .entry-content .wp-block-archives li:lang(kk), +.entry .entry-content .wp-block-categories li:lang(kk), +.entry .entry-content .wp-block-latest-posts li:lang(kk), .entry .entry-content .wp-block-verse:lang(kk), .entry .entry-content .has-drop-cap:lang(kk):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(kk), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(kk), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(kk), +.entry .entry-content .wp-block-cover-image h2:lang(kk), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(kk), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(kk), +.entry .entry-content .wp-block-cover h2:lang(kk), .entry .entry-content .wp-block-audio figcaption:lang(kk), +.entry .entry-content .wp-block-video figcaption:lang(kk), +.entry .entry-content .wp-block-image figcaption:lang(kk), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(kk), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(kk), .entry .entry-content .wp-block-file:lang(kk), .entry .entry-content .wp-block-file .wp-block-file__button:lang(kk), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(kk), .wp-caption-text:lang(kk), .gallery-caption:lang(kk) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(mk-MK), button:lang(mk-MK), +input:lang(mk-MK), +select:lang(mk-MK), +optgroup:lang(mk-MK), +textarea:lang(mk-MK), .author-description .author-link:lang(mk-MK), +.comment-metadata:lang(mk-MK), +.comment-reply-link:lang(mk-MK), +.comments-title:lang(mk-MK), +.comment-author .fn:lang(mk-MK), +.discussion-meta-info:lang(mk-MK), +.entry-meta:lang(mk-MK), +.entry-footer:lang(mk-MK), +.main-navigation:lang(mk-MK), +.no-comments:lang(mk-MK), +.not-found .page-title:lang(mk-MK), +.error-404 .page-title:lang(mk-MK), +.post-navigation .post-title:lang(mk-MK), +.page-links:lang(mk-MK), +.page-description:lang(mk-MK), +.pagination .nav-links:lang(mk-MK), +.sticky-post:lang(mk-MK), +.site-title:lang(mk-MK), +.site-info:lang(mk-MK), +#cancel-comment-reply-link:lang(mk-MK), +h1:lang(mk-MK), +h2:lang(mk-MK), +h3:lang(mk-MK), +h4:lang(mk-MK), +h5:lang(mk-MK), +h6:lang(mk-MK), .page-title:lang(mk-MK), blockquote cite:lang(mk-MK), table:lang(mk-MK), .button:lang(mk-MK), +input:lang(mk-MK)[type="button"], +input:lang(mk-MK)[type="reset"], +input:lang(mk-MK)[type="submit"], .comment-navigation .nav-previous:lang(mk-MK), +.comment-navigation .nav-next:lang(mk-MK), .comment-list .pingback .comment-body:lang(mk-MK), +.comment-list .trackback .comment-body:lang(mk-MK), .comment-list .pingback .comment-body .comment-edit-link:lang(mk-MK), +.comment-list .trackback .comment-body .comment-edit-link:lang(mk-MK), .comment-form .comment-notes:lang(mk-MK), +.comment-form label:lang(mk-MK), .widget_archive ul li:lang(mk-MK), +.widget_categories ul li:lang(mk-MK), +.widget_meta ul li:lang(mk-MK), +.widget_nav_menu ul li:lang(mk-MK), +.widget_pages ul li:lang(mk-MK), +.widget_recent_comments ul li:lang(mk-MK), +.widget_recent_entries ul li:lang(mk-MK), +.widget_rss ul li:lang(mk-MK), .widget_tag_cloud .tagcloud:lang(mk-MK), .entry .entry-content .wp-block-button .wp-block-button__link:lang(mk-MK), .entry .entry-content .wp-block-archives li:lang(mk-MK), +.entry .entry-content .wp-block-categories li:lang(mk-MK), +.entry .entry-content .wp-block-latest-posts li:lang(mk-MK), .entry .entry-content .wp-block-verse:lang(mk-MK), .entry .entry-content .has-drop-cap:lang(mk-MK):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(mk-MK), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(mk-MK), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(mk-MK), +.entry .entry-content .wp-block-cover-image h2:lang(mk-MK), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(mk-MK), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(mk-MK), +.entry .entry-content .wp-block-cover h2:lang(mk-MK), .entry .entry-content .wp-block-audio figcaption:lang(mk-MK), +.entry .entry-content .wp-block-video figcaption:lang(mk-MK), +.entry .entry-content .wp-block-image figcaption:lang(mk-MK), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(mk-MK), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(mk-MK), .entry .entry-content .wp-block-file:lang(mk-MK), .entry .entry-content .wp-block-file .wp-block-file__button:lang(mk-MK), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(mk-MK), .wp-caption-text:lang(mk-MK), .gallery-caption:lang(mk-MK) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(mn), button:lang(mn), +input:lang(mn), +select:lang(mn), +optgroup:lang(mn), +textarea:lang(mn), .author-description .author-link:lang(mn), +.comment-metadata:lang(mn), +.comment-reply-link:lang(mn), +.comments-title:lang(mn), +.comment-author .fn:lang(mn), +.discussion-meta-info:lang(mn), +.entry-meta:lang(mn), +.entry-footer:lang(mn), +.main-navigation:lang(mn), +.no-comments:lang(mn), +.not-found .page-title:lang(mn), +.error-404 .page-title:lang(mn), +.post-navigation .post-title:lang(mn), +.page-links:lang(mn), +.page-description:lang(mn), +.pagination .nav-links:lang(mn), +.sticky-post:lang(mn), +.site-title:lang(mn), +.site-info:lang(mn), +#cancel-comment-reply-link:lang(mn), +h1:lang(mn), +h2:lang(mn), +h3:lang(mn), +h4:lang(mn), +h5:lang(mn), +h6:lang(mn), .page-title:lang(mn), blockquote cite:lang(mn), table:lang(mn), .button:lang(mn), +input:lang(mn)[type="button"], +input:lang(mn)[type="reset"], +input:lang(mn)[type="submit"], .comment-navigation .nav-previous:lang(mn), +.comment-navigation .nav-next:lang(mn), .comment-list .pingback .comment-body:lang(mn), +.comment-list .trackback .comment-body:lang(mn), .comment-list .pingback .comment-body .comment-edit-link:lang(mn), +.comment-list .trackback .comment-body .comment-edit-link:lang(mn), .comment-form .comment-notes:lang(mn), +.comment-form label:lang(mn), .widget_archive ul li:lang(mn), +.widget_categories ul li:lang(mn), +.widget_meta ul li:lang(mn), +.widget_nav_menu ul li:lang(mn), +.widget_pages ul li:lang(mn), +.widget_recent_comments ul li:lang(mn), +.widget_recent_entries ul li:lang(mn), +.widget_rss ul li:lang(mn), .widget_tag_cloud .tagcloud:lang(mn), .entry .entry-content .wp-block-button .wp-block-button__link:lang(mn), .entry .entry-content .wp-block-archives li:lang(mn), +.entry .entry-content .wp-block-categories li:lang(mn), +.entry .entry-content .wp-block-latest-posts li:lang(mn), .entry .entry-content .wp-block-verse:lang(mn), .entry .entry-content .has-drop-cap:lang(mn):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(mn), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(mn), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(mn), +.entry .entry-content .wp-block-cover-image h2:lang(mn), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(mn), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(mn), +.entry .entry-content .wp-block-cover h2:lang(mn), .entry .entry-content .wp-block-audio figcaption:lang(mn), +.entry .entry-content .wp-block-video figcaption:lang(mn), +.entry .entry-content .wp-block-image figcaption:lang(mn), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(mn), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(mn), .entry .entry-content .wp-block-file:lang(mn), .entry .entry-content .wp-block-file .wp-block-file__button:lang(mn), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(mn), .wp-caption-text:lang(mn), .gallery-caption:lang(mn) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(ru-RU), button:lang(ru-RU), +input:lang(ru-RU), +select:lang(ru-RU), +optgroup:lang(ru-RU), +textarea:lang(ru-RU), .author-description .author-link:lang(ru-RU), +.comment-metadata:lang(ru-RU), +.comment-reply-link:lang(ru-RU), +.comments-title:lang(ru-RU), +.comment-author .fn:lang(ru-RU), +.discussion-meta-info:lang(ru-RU), +.entry-meta:lang(ru-RU), +.entry-footer:lang(ru-RU), +.main-navigation:lang(ru-RU), +.no-comments:lang(ru-RU), +.not-found .page-title:lang(ru-RU), +.error-404 .page-title:lang(ru-RU), +.post-navigation .post-title:lang(ru-RU), +.page-links:lang(ru-RU), +.page-description:lang(ru-RU), +.pagination .nav-links:lang(ru-RU), +.sticky-post:lang(ru-RU), +.site-title:lang(ru-RU), +.site-info:lang(ru-RU), +#cancel-comment-reply-link:lang(ru-RU), +h1:lang(ru-RU), +h2:lang(ru-RU), +h3:lang(ru-RU), +h4:lang(ru-RU), +h5:lang(ru-RU), +h6:lang(ru-RU), .page-title:lang(ru-RU), blockquote cite:lang(ru-RU), table:lang(ru-RU), .button:lang(ru-RU), +input:lang(ru-RU)[type="button"], +input:lang(ru-RU)[type="reset"], +input:lang(ru-RU)[type="submit"], .comment-navigation .nav-previous:lang(ru-RU), +.comment-navigation .nav-next:lang(ru-RU), .comment-list .pingback .comment-body:lang(ru-RU), +.comment-list .trackback .comment-body:lang(ru-RU), .comment-list .pingback .comment-body .comment-edit-link:lang(ru-RU), +.comment-list .trackback .comment-body .comment-edit-link:lang(ru-RU), .comment-form .comment-notes:lang(ru-RU), +.comment-form label:lang(ru-RU), .widget_archive ul li:lang(ru-RU), +.widget_categories ul li:lang(ru-RU), +.widget_meta ul li:lang(ru-RU), +.widget_nav_menu ul li:lang(ru-RU), +.widget_pages ul li:lang(ru-RU), +.widget_recent_comments ul li:lang(ru-RU), +.widget_recent_entries ul li:lang(ru-RU), +.widget_rss ul li:lang(ru-RU), .widget_tag_cloud .tagcloud:lang(ru-RU), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ru-RU), .entry .entry-content .wp-block-archives li:lang(ru-RU), +.entry .entry-content .wp-block-categories li:lang(ru-RU), +.entry .entry-content .wp-block-latest-posts li:lang(ru-RU), .entry .entry-content .wp-block-verse:lang(ru-RU), .entry .entry-content .has-drop-cap:lang(ru-RU):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ru-RU), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ru-RU), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ru-RU), +.entry .entry-content .wp-block-cover-image h2:lang(ru-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ru-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ru-RU), +.entry .entry-content .wp-block-cover h2:lang(ru-RU), .entry .entry-content .wp-block-audio figcaption:lang(ru-RU), +.entry .entry-content .wp-block-video figcaption:lang(ru-RU), +.entry .entry-content .wp-block-image figcaption:lang(ru-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ru-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ru-RU), .entry .entry-content .wp-block-file:lang(ru-RU), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ru-RU), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ru-RU), .wp-caption-text:lang(ru-RU), .gallery-caption:lang(ru-RU) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(sah), button:lang(sah), +input:lang(sah), +select:lang(sah), +optgroup:lang(sah), +textarea:lang(sah), .author-description .author-link:lang(sah), +.comment-metadata:lang(sah), +.comment-reply-link:lang(sah), +.comments-title:lang(sah), +.comment-author .fn:lang(sah), +.discussion-meta-info:lang(sah), +.entry-meta:lang(sah), +.entry-footer:lang(sah), +.main-navigation:lang(sah), +.no-comments:lang(sah), +.not-found .page-title:lang(sah), +.error-404 .page-title:lang(sah), +.post-navigation .post-title:lang(sah), +.page-links:lang(sah), +.page-description:lang(sah), +.pagination .nav-links:lang(sah), +.sticky-post:lang(sah), +.site-title:lang(sah), +.site-info:lang(sah), +#cancel-comment-reply-link:lang(sah), +h1:lang(sah), +h2:lang(sah), +h3:lang(sah), +h4:lang(sah), +h5:lang(sah), +h6:lang(sah), .page-title:lang(sah), blockquote cite:lang(sah), table:lang(sah), .button:lang(sah), +input:lang(sah)[type="button"], +input:lang(sah)[type="reset"], +input:lang(sah)[type="submit"], .comment-navigation .nav-previous:lang(sah), +.comment-navigation .nav-next:lang(sah), .comment-list .pingback .comment-body:lang(sah), +.comment-list .trackback .comment-body:lang(sah), .comment-list .pingback .comment-body .comment-edit-link:lang(sah), +.comment-list .trackback .comment-body .comment-edit-link:lang(sah), .comment-form .comment-notes:lang(sah), +.comment-form label:lang(sah), .widget_archive ul li:lang(sah), +.widget_categories ul li:lang(sah), +.widget_meta ul li:lang(sah), +.widget_nav_menu ul li:lang(sah), +.widget_pages ul li:lang(sah), +.widget_recent_comments ul li:lang(sah), +.widget_recent_entries ul li:lang(sah), +.widget_rss ul li:lang(sah), .widget_tag_cloud .tagcloud:lang(sah), .entry .entry-content .wp-block-button .wp-block-button__link:lang(sah), .entry .entry-content .wp-block-archives li:lang(sah), +.entry .entry-content .wp-block-categories li:lang(sah), +.entry .entry-content .wp-block-latest-posts li:lang(sah), .entry .entry-content .wp-block-verse:lang(sah), .entry .entry-content .has-drop-cap:lang(sah):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(sah), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(sah), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(sah), +.entry .entry-content .wp-block-cover-image h2:lang(sah), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(sah), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(sah), +.entry .entry-content .wp-block-cover h2:lang(sah), .entry .entry-content .wp-block-audio figcaption:lang(sah), +.entry .entry-content .wp-block-video figcaption:lang(sah), +.entry .entry-content .wp-block-image figcaption:lang(sah), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(sah), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(sah), .entry .entry-content .wp-block-file:lang(sah), .entry .entry-content .wp-block-file .wp-block-file__button:lang(sah), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(sah), .wp-caption-text:lang(sah), .gallery-caption:lang(sah) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(sr-RS), button:lang(sr-RS), +input:lang(sr-RS), +select:lang(sr-RS), +optgroup:lang(sr-RS), +textarea:lang(sr-RS), .author-description .author-link:lang(sr-RS), +.comment-metadata:lang(sr-RS), +.comment-reply-link:lang(sr-RS), +.comments-title:lang(sr-RS), +.comment-author .fn:lang(sr-RS), +.discussion-meta-info:lang(sr-RS), +.entry-meta:lang(sr-RS), +.entry-footer:lang(sr-RS), +.main-navigation:lang(sr-RS), +.no-comments:lang(sr-RS), +.not-found .page-title:lang(sr-RS), +.error-404 .page-title:lang(sr-RS), +.post-navigation .post-title:lang(sr-RS), +.page-links:lang(sr-RS), +.page-description:lang(sr-RS), +.pagination .nav-links:lang(sr-RS), +.sticky-post:lang(sr-RS), +.site-title:lang(sr-RS), +.site-info:lang(sr-RS), +#cancel-comment-reply-link:lang(sr-RS), +h1:lang(sr-RS), +h2:lang(sr-RS), +h3:lang(sr-RS), +h4:lang(sr-RS), +h5:lang(sr-RS), +h6:lang(sr-RS), .page-title:lang(sr-RS), blockquote cite:lang(sr-RS), table:lang(sr-RS), .button:lang(sr-RS), +input:lang(sr-RS)[type="button"], +input:lang(sr-RS)[type="reset"], +input:lang(sr-RS)[type="submit"], .comment-navigation .nav-previous:lang(sr-RS), +.comment-navigation .nav-next:lang(sr-RS), .comment-list .pingback .comment-body:lang(sr-RS), +.comment-list .trackback .comment-body:lang(sr-RS), .comment-list .pingback .comment-body .comment-edit-link:lang(sr-RS), +.comment-list .trackback .comment-body .comment-edit-link:lang(sr-RS), .comment-form .comment-notes:lang(sr-RS), +.comment-form label:lang(sr-RS), .widget_archive ul li:lang(sr-RS), +.widget_categories ul li:lang(sr-RS), +.widget_meta ul li:lang(sr-RS), +.widget_nav_menu ul li:lang(sr-RS), +.widget_pages ul li:lang(sr-RS), +.widget_recent_comments ul li:lang(sr-RS), +.widget_recent_entries ul li:lang(sr-RS), +.widget_rss ul li:lang(sr-RS), .widget_tag_cloud .tagcloud:lang(sr-RS), .entry .entry-content .wp-block-button .wp-block-button__link:lang(sr-RS), .entry .entry-content .wp-block-archives li:lang(sr-RS), +.entry .entry-content .wp-block-categories li:lang(sr-RS), +.entry .entry-content .wp-block-latest-posts li:lang(sr-RS), .entry .entry-content .wp-block-verse:lang(sr-RS), .entry .entry-content .has-drop-cap:lang(sr-RS):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(sr-RS), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(sr-RS), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(sr-RS), +.entry .entry-content .wp-block-cover-image h2:lang(sr-RS), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(sr-RS), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(sr-RS), +.entry .entry-content .wp-block-cover h2:lang(sr-RS), .entry .entry-content .wp-block-audio figcaption:lang(sr-RS), +.entry .entry-content .wp-block-video figcaption:lang(sr-RS), +.entry .entry-content .wp-block-image figcaption:lang(sr-RS), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(sr-RS), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(sr-RS), .entry .entry-content .wp-block-file:lang(sr-RS), .entry .entry-content .wp-block-file .wp-block-file__button:lang(sr-RS), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(sr-RS), .wp-caption-text:lang(sr-RS), .gallery-caption:lang(sr-RS) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(tt-RU), button:lang(tt-RU), +input:lang(tt-RU), +select:lang(tt-RU), +optgroup:lang(tt-RU), +textarea:lang(tt-RU), .author-description .author-link:lang(tt-RU), +.comment-metadata:lang(tt-RU), +.comment-reply-link:lang(tt-RU), +.comments-title:lang(tt-RU), +.comment-author .fn:lang(tt-RU), +.discussion-meta-info:lang(tt-RU), +.entry-meta:lang(tt-RU), +.entry-footer:lang(tt-RU), +.main-navigation:lang(tt-RU), +.no-comments:lang(tt-RU), +.not-found .page-title:lang(tt-RU), +.error-404 .page-title:lang(tt-RU), +.post-navigation .post-title:lang(tt-RU), +.page-links:lang(tt-RU), +.page-description:lang(tt-RU), +.pagination .nav-links:lang(tt-RU), +.sticky-post:lang(tt-RU), +.site-title:lang(tt-RU), +.site-info:lang(tt-RU), +#cancel-comment-reply-link:lang(tt-RU), +h1:lang(tt-RU), +h2:lang(tt-RU), +h3:lang(tt-RU), +h4:lang(tt-RU), +h5:lang(tt-RU), +h6:lang(tt-RU), .page-title:lang(tt-RU), blockquote cite:lang(tt-RU), table:lang(tt-RU), .button:lang(tt-RU), +input:lang(tt-RU)[type="button"], +input:lang(tt-RU)[type="reset"], +input:lang(tt-RU)[type="submit"], .comment-navigation .nav-previous:lang(tt-RU), +.comment-navigation .nav-next:lang(tt-RU), .comment-list .pingback .comment-body:lang(tt-RU), +.comment-list .trackback .comment-body:lang(tt-RU), .comment-list .pingback .comment-body .comment-edit-link:lang(tt-RU), +.comment-list .trackback .comment-body .comment-edit-link:lang(tt-RU), .comment-form .comment-notes:lang(tt-RU), +.comment-form label:lang(tt-RU), .widget_archive ul li:lang(tt-RU), +.widget_categories ul li:lang(tt-RU), +.widget_meta ul li:lang(tt-RU), +.widget_nav_menu ul li:lang(tt-RU), +.widget_pages ul li:lang(tt-RU), +.widget_recent_comments ul li:lang(tt-RU), +.widget_recent_entries ul li:lang(tt-RU), +.widget_rss ul li:lang(tt-RU), .widget_tag_cloud .tagcloud:lang(tt-RU), .entry .entry-content .wp-block-button .wp-block-button__link:lang(tt-RU), .entry .entry-content .wp-block-archives li:lang(tt-RU), +.entry .entry-content .wp-block-categories li:lang(tt-RU), +.entry .entry-content .wp-block-latest-posts li:lang(tt-RU), .entry .entry-content .wp-block-verse:lang(tt-RU), .entry .entry-content .has-drop-cap:lang(tt-RU):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(tt-RU), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(tt-RU), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(tt-RU), +.entry .entry-content .wp-block-cover-image h2:lang(tt-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(tt-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(tt-RU), +.entry .entry-content .wp-block-cover h2:lang(tt-RU), .entry .entry-content .wp-block-audio figcaption:lang(tt-RU), +.entry .entry-content .wp-block-video figcaption:lang(tt-RU), +.entry .entry-content .wp-block-image figcaption:lang(tt-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(tt-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(tt-RU), .entry .entry-content .wp-block-file:lang(tt-RU), .entry .entry-content .wp-block-file .wp-block-file__button:lang(tt-RU), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(tt-RU), .wp-caption-text:lang(tt-RU), .gallery-caption:lang(tt-RU) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(uk), button:lang(uk), +input:lang(uk), +select:lang(uk), +optgroup:lang(uk), +textarea:lang(uk), .author-description .author-link:lang(uk), +.comment-metadata:lang(uk), +.comment-reply-link:lang(uk), +.comments-title:lang(uk), +.comment-author .fn:lang(uk), +.discussion-meta-info:lang(uk), +.entry-meta:lang(uk), +.entry-footer:lang(uk), +.main-navigation:lang(uk), +.no-comments:lang(uk), +.not-found .page-title:lang(uk), +.error-404 .page-title:lang(uk), +.post-navigation .post-title:lang(uk), +.page-links:lang(uk), +.page-description:lang(uk), +.pagination .nav-links:lang(uk), +.sticky-post:lang(uk), +.site-title:lang(uk), +.site-info:lang(uk), +#cancel-comment-reply-link:lang(uk), +h1:lang(uk), +h2:lang(uk), +h3:lang(uk), +h4:lang(uk), +h5:lang(uk), +h6:lang(uk), .page-title:lang(uk), blockquote cite:lang(uk), table:lang(uk), .button:lang(uk), +input:lang(uk)[type="button"], +input:lang(uk)[type="reset"], +input:lang(uk)[type="submit"], .comment-navigation .nav-previous:lang(uk), +.comment-navigation .nav-next:lang(uk), .comment-list .pingback .comment-body:lang(uk), +.comment-list .trackback .comment-body:lang(uk), .comment-list .pingback .comment-body .comment-edit-link:lang(uk), +.comment-list .trackback .comment-body .comment-edit-link:lang(uk), .comment-form .comment-notes:lang(uk), +.comment-form label:lang(uk), .widget_archive ul li:lang(uk), +.widget_categories ul li:lang(uk), +.widget_meta ul li:lang(uk), +.widget_nav_menu ul li:lang(uk), +.widget_pages ul li:lang(uk), +.widget_recent_comments ul li:lang(uk), +.widget_recent_entries ul li:lang(uk), +.widget_rss ul li:lang(uk), .widget_tag_cloud .tagcloud:lang(uk), .entry .entry-content .wp-block-button .wp-block-button__link:lang(uk), .entry .entry-content .wp-block-archives li:lang(uk), +.entry .entry-content .wp-block-categories li:lang(uk), +.entry .entry-content .wp-block-latest-posts li:lang(uk), .entry .entry-content .wp-block-verse:lang(uk), .entry .entry-content .has-drop-cap:lang(uk):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(uk), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(uk), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(uk), +.entry .entry-content .wp-block-cover-image h2:lang(uk), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(uk), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(uk), +.entry .entry-content .wp-block-cover h2:lang(uk), .entry .entry-content .wp-block-audio figcaption:lang(uk), +.entry .entry-content .wp-block-video figcaption:lang(uk), +.entry .entry-content .wp-block-image figcaption:lang(uk), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(uk), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(uk), .entry .entry-content .wp-block-file:lang(uk), .entry .entry-content .wp-block-file .wp-block-file__button:lang(uk), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(uk), .wp-caption-text:lang(uk), .gallery-caption:lang(uk) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(zh-HK), button:lang(zh-HK), +input:lang(zh-HK), +select:lang(zh-HK), +optgroup:lang(zh-HK), +textarea:lang(zh-HK), .author-description .author-link:lang(zh-HK), +.comment-metadata:lang(zh-HK), +.comment-reply-link:lang(zh-HK), +.comments-title:lang(zh-HK), +.comment-author .fn:lang(zh-HK), +.discussion-meta-info:lang(zh-HK), +.entry-meta:lang(zh-HK), +.entry-footer:lang(zh-HK), +.main-navigation:lang(zh-HK), +.no-comments:lang(zh-HK), +.not-found .page-title:lang(zh-HK), +.error-404 .page-title:lang(zh-HK), +.post-navigation .post-title:lang(zh-HK), +.page-links:lang(zh-HK), +.page-description:lang(zh-HK), +.pagination .nav-links:lang(zh-HK), +.sticky-post:lang(zh-HK), +.site-title:lang(zh-HK), +.site-info:lang(zh-HK), +#cancel-comment-reply-link:lang(zh-HK), +h1:lang(zh-HK), +h2:lang(zh-HK), +h3:lang(zh-HK), +h4:lang(zh-HK), +h5:lang(zh-HK), +h6:lang(zh-HK), .page-title:lang(zh-HK), blockquote cite:lang(zh-HK), table:lang(zh-HK), .button:lang(zh-HK), +input:lang(zh-HK)[type="button"], +input:lang(zh-HK)[type="reset"], +input:lang(zh-HK)[type="submit"], .comment-navigation .nav-previous:lang(zh-HK), +.comment-navigation .nav-next:lang(zh-HK), .comment-list .pingback .comment-body:lang(zh-HK), +.comment-list .trackback .comment-body:lang(zh-HK), .comment-list .pingback .comment-body .comment-edit-link:lang(zh-HK), +.comment-list .trackback .comment-body .comment-edit-link:lang(zh-HK), .comment-form .comment-notes:lang(zh-HK), +.comment-form label:lang(zh-HK), .widget_archive ul li:lang(zh-HK), +.widget_categories ul li:lang(zh-HK), +.widget_meta ul li:lang(zh-HK), +.widget_nav_menu ul li:lang(zh-HK), +.widget_pages ul li:lang(zh-HK), +.widget_recent_comments ul li:lang(zh-HK), +.widget_recent_entries ul li:lang(zh-HK), +.widget_rss ul li:lang(zh-HK), .widget_tag_cloud .tagcloud:lang(zh-HK), .entry .entry-content .wp-block-button .wp-block-button__link:lang(zh-HK), .entry .entry-content .wp-block-archives li:lang(zh-HK), +.entry .entry-content .wp-block-categories li:lang(zh-HK), +.entry .entry-content .wp-block-latest-posts li:lang(zh-HK), .entry .entry-content .wp-block-verse:lang(zh-HK), .entry .entry-content .has-drop-cap:lang(zh-HK):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(zh-HK), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(zh-HK), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(zh-HK), +.entry .entry-content .wp-block-cover-image h2:lang(zh-HK), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(zh-HK), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(zh-HK), +.entry .entry-content .wp-block-cover h2:lang(zh-HK), .entry .entry-content .wp-block-audio figcaption:lang(zh-HK), +.entry .entry-content .wp-block-video figcaption:lang(zh-HK), +.entry .entry-content .wp-block-image figcaption:lang(zh-HK), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(zh-HK), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(zh-HK), .entry .entry-content .wp-block-file:lang(zh-HK), .entry .entry-content .wp-block-file .wp-block-file__button:lang(zh-HK), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(zh-HK), .wp-caption-text:lang(zh-HK), .gallery-caption:lang(zh-HK) { + font-family: -apple-system, BlinkMacSystemFont, "PingFang HK", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif; +} + +body:lang(zh-TW), button:lang(zh-TW), +input:lang(zh-TW), +select:lang(zh-TW), +optgroup:lang(zh-TW), +textarea:lang(zh-TW), .author-description .author-link:lang(zh-TW), +.comment-metadata:lang(zh-TW), +.comment-reply-link:lang(zh-TW), +.comments-title:lang(zh-TW), +.comment-author .fn:lang(zh-TW), +.discussion-meta-info:lang(zh-TW), +.entry-meta:lang(zh-TW), +.entry-footer:lang(zh-TW), +.main-navigation:lang(zh-TW), +.no-comments:lang(zh-TW), +.not-found .page-title:lang(zh-TW), +.error-404 .page-title:lang(zh-TW), +.post-navigation .post-title:lang(zh-TW), +.page-links:lang(zh-TW), +.page-description:lang(zh-TW), +.pagination .nav-links:lang(zh-TW), +.sticky-post:lang(zh-TW), +.site-title:lang(zh-TW), +.site-info:lang(zh-TW), +#cancel-comment-reply-link:lang(zh-TW), +h1:lang(zh-TW), +h2:lang(zh-TW), +h3:lang(zh-TW), +h4:lang(zh-TW), +h5:lang(zh-TW), +h6:lang(zh-TW), .page-title:lang(zh-TW), blockquote cite:lang(zh-TW), table:lang(zh-TW), .button:lang(zh-TW), +input:lang(zh-TW)[type="button"], +input:lang(zh-TW)[type="reset"], +input:lang(zh-TW)[type="submit"], .comment-navigation .nav-previous:lang(zh-TW), +.comment-navigation .nav-next:lang(zh-TW), .comment-list .pingback .comment-body:lang(zh-TW), +.comment-list .trackback .comment-body:lang(zh-TW), .comment-list .pingback .comment-body .comment-edit-link:lang(zh-TW), +.comment-list .trackback .comment-body .comment-edit-link:lang(zh-TW), .comment-form .comment-notes:lang(zh-TW), +.comment-form label:lang(zh-TW), .widget_archive ul li:lang(zh-TW), +.widget_categories ul li:lang(zh-TW), +.widget_meta ul li:lang(zh-TW), +.widget_nav_menu ul li:lang(zh-TW), +.widget_pages ul li:lang(zh-TW), +.widget_recent_comments ul li:lang(zh-TW), +.widget_recent_entries ul li:lang(zh-TW), +.widget_rss ul li:lang(zh-TW), .widget_tag_cloud .tagcloud:lang(zh-TW), .entry .entry-content .wp-block-button .wp-block-button__link:lang(zh-TW), .entry .entry-content .wp-block-archives li:lang(zh-TW), +.entry .entry-content .wp-block-categories li:lang(zh-TW), +.entry .entry-content .wp-block-latest-posts li:lang(zh-TW), .entry .entry-content .wp-block-verse:lang(zh-TW), .entry .entry-content .has-drop-cap:lang(zh-TW):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(zh-TW), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(zh-TW), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(zh-TW), +.entry .entry-content .wp-block-cover-image h2:lang(zh-TW), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(zh-TW), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(zh-TW), +.entry .entry-content .wp-block-cover h2:lang(zh-TW), .entry .entry-content .wp-block-audio figcaption:lang(zh-TW), +.entry .entry-content .wp-block-video figcaption:lang(zh-TW), +.entry .entry-content .wp-block-image figcaption:lang(zh-TW), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(zh-TW), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(zh-TW), .entry .entry-content .wp-block-file:lang(zh-TW), .entry .entry-content .wp-block-file .wp-block-file__button:lang(zh-TW), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(zh-TW), .wp-caption-text:lang(zh-TW), .gallery-caption:lang(zh-TW) { + font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif; +} + +body:lang(zh-CN), button:lang(zh-CN), +input:lang(zh-CN), +select:lang(zh-CN), +optgroup:lang(zh-CN), +textarea:lang(zh-CN), .author-description .author-link:lang(zh-CN), +.comment-metadata:lang(zh-CN), +.comment-reply-link:lang(zh-CN), +.comments-title:lang(zh-CN), +.comment-author .fn:lang(zh-CN), +.discussion-meta-info:lang(zh-CN), +.entry-meta:lang(zh-CN), +.entry-footer:lang(zh-CN), +.main-navigation:lang(zh-CN), +.no-comments:lang(zh-CN), +.not-found .page-title:lang(zh-CN), +.error-404 .page-title:lang(zh-CN), +.post-navigation .post-title:lang(zh-CN), +.page-links:lang(zh-CN), +.page-description:lang(zh-CN), +.pagination .nav-links:lang(zh-CN), +.sticky-post:lang(zh-CN), +.site-title:lang(zh-CN), +.site-info:lang(zh-CN), +#cancel-comment-reply-link:lang(zh-CN), +h1:lang(zh-CN), +h2:lang(zh-CN), +h3:lang(zh-CN), +h4:lang(zh-CN), +h5:lang(zh-CN), +h6:lang(zh-CN), .page-title:lang(zh-CN), blockquote cite:lang(zh-CN), table:lang(zh-CN), .button:lang(zh-CN), +input:lang(zh-CN)[type="button"], +input:lang(zh-CN)[type="reset"], +input:lang(zh-CN)[type="submit"], .comment-navigation .nav-previous:lang(zh-CN), +.comment-navigation .nav-next:lang(zh-CN), .comment-list .pingback .comment-body:lang(zh-CN), +.comment-list .trackback .comment-body:lang(zh-CN), .comment-list .pingback .comment-body .comment-edit-link:lang(zh-CN), +.comment-list .trackback .comment-body .comment-edit-link:lang(zh-CN), .comment-form .comment-notes:lang(zh-CN), +.comment-form label:lang(zh-CN), .widget_archive ul li:lang(zh-CN), +.widget_categories ul li:lang(zh-CN), +.widget_meta ul li:lang(zh-CN), +.widget_nav_menu ul li:lang(zh-CN), +.widget_pages ul li:lang(zh-CN), +.widget_recent_comments ul li:lang(zh-CN), +.widget_recent_entries ul li:lang(zh-CN), +.widget_rss ul li:lang(zh-CN), .widget_tag_cloud .tagcloud:lang(zh-CN), .entry .entry-content .wp-block-button .wp-block-button__link:lang(zh-CN), .entry .entry-content .wp-block-archives li:lang(zh-CN), +.entry .entry-content .wp-block-categories li:lang(zh-CN), +.entry .entry-content .wp-block-latest-posts li:lang(zh-CN), .entry .entry-content .wp-block-verse:lang(zh-CN), .entry .entry-content .has-drop-cap:lang(zh-CN):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(zh-CN), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(zh-CN), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(zh-CN), +.entry .entry-content .wp-block-cover-image h2:lang(zh-CN), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(zh-CN), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(zh-CN), +.entry .entry-content .wp-block-cover h2:lang(zh-CN), .entry .entry-content .wp-block-audio figcaption:lang(zh-CN), +.entry .entry-content .wp-block-video figcaption:lang(zh-CN), +.entry .entry-content .wp-block-image figcaption:lang(zh-CN), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(zh-CN), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(zh-CN), .entry .entry-content .wp-block-file:lang(zh-CN), .entry .entry-content .wp-block-file .wp-block-file__button:lang(zh-CN), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(zh-CN), .wp-caption-text:lang(zh-CN), .gallery-caption:lang(zh-CN) { + font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif; +} + +body:lang(bn-BD), button:lang(bn-BD), +input:lang(bn-BD), +select:lang(bn-BD), +optgroup:lang(bn-BD), +textarea:lang(bn-BD), .author-description .author-link:lang(bn-BD), +.comment-metadata:lang(bn-BD), +.comment-reply-link:lang(bn-BD), +.comments-title:lang(bn-BD), +.comment-author .fn:lang(bn-BD), +.discussion-meta-info:lang(bn-BD), +.entry-meta:lang(bn-BD), +.entry-footer:lang(bn-BD), +.main-navigation:lang(bn-BD), +.no-comments:lang(bn-BD), +.not-found .page-title:lang(bn-BD), +.error-404 .page-title:lang(bn-BD), +.post-navigation .post-title:lang(bn-BD), +.page-links:lang(bn-BD), +.page-description:lang(bn-BD), +.pagination .nav-links:lang(bn-BD), +.sticky-post:lang(bn-BD), +.site-title:lang(bn-BD), +.site-info:lang(bn-BD), +#cancel-comment-reply-link:lang(bn-BD), +h1:lang(bn-BD), +h2:lang(bn-BD), +h3:lang(bn-BD), +h4:lang(bn-BD), +h5:lang(bn-BD), +h6:lang(bn-BD), .page-title:lang(bn-BD), blockquote cite:lang(bn-BD), table:lang(bn-BD), .button:lang(bn-BD), +input:lang(bn-BD)[type="button"], +input:lang(bn-BD)[type="reset"], +input:lang(bn-BD)[type="submit"], .comment-navigation .nav-previous:lang(bn-BD), +.comment-navigation .nav-next:lang(bn-BD), .comment-list .pingback .comment-body:lang(bn-BD), +.comment-list .trackback .comment-body:lang(bn-BD), .comment-list .pingback .comment-body .comment-edit-link:lang(bn-BD), +.comment-list .trackback .comment-body .comment-edit-link:lang(bn-BD), .comment-form .comment-notes:lang(bn-BD), +.comment-form label:lang(bn-BD), .widget_archive ul li:lang(bn-BD), +.widget_categories ul li:lang(bn-BD), +.widget_meta ul li:lang(bn-BD), +.widget_nav_menu ul li:lang(bn-BD), +.widget_pages ul li:lang(bn-BD), +.widget_recent_comments ul li:lang(bn-BD), +.widget_recent_entries ul li:lang(bn-BD), +.widget_rss ul li:lang(bn-BD), .widget_tag_cloud .tagcloud:lang(bn-BD), .entry .entry-content .wp-block-button .wp-block-button__link:lang(bn-BD), .entry .entry-content .wp-block-archives li:lang(bn-BD), +.entry .entry-content .wp-block-categories li:lang(bn-BD), +.entry .entry-content .wp-block-latest-posts li:lang(bn-BD), .entry .entry-content .wp-block-verse:lang(bn-BD), .entry .entry-content .has-drop-cap:lang(bn-BD):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(bn-BD), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(bn-BD), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(bn-BD), +.entry .entry-content .wp-block-cover-image h2:lang(bn-BD), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(bn-BD), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(bn-BD), +.entry .entry-content .wp-block-cover h2:lang(bn-BD), .entry .entry-content .wp-block-audio figcaption:lang(bn-BD), +.entry .entry-content .wp-block-video figcaption:lang(bn-BD), +.entry .entry-content .wp-block-image figcaption:lang(bn-BD), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(bn-BD), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(bn-BD), .entry .entry-content .wp-block-file:lang(bn-BD), .entry .entry-content .wp-block-file .wp-block-file__button:lang(bn-BD), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(bn-BD), .wp-caption-text:lang(bn-BD), .gallery-caption:lang(bn-BD) { + font-family: Arial, sans-serif; +} + +body:lang(hi-IN), button:lang(hi-IN), +input:lang(hi-IN), +select:lang(hi-IN), +optgroup:lang(hi-IN), +textarea:lang(hi-IN), .author-description .author-link:lang(hi-IN), +.comment-metadata:lang(hi-IN), +.comment-reply-link:lang(hi-IN), +.comments-title:lang(hi-IN), +.comment-author .fn:lang(hi-IN), +.discussion-meta-info:lang(hi-IN), +.entry-meta:lang(hi-IN), +.entry-footer:lang(hi-IN), +.main-navigation:lang(hi-IN), +.no-comments:lang(hi-IN), +.not-found .page-title:lang(hi-IN), +.error-404 .page-title:lang(hi-IN), +.post-navigation .post-title:lang(hi-IN), +.page-links:lang(hi-IN), +.page-description:lang(hi-IN), +.pagination .nav-links:lang(hi-IN), +.sticky-post:lang(hi-IN), +.site-title:lang(hi-IN), +.site-info:lang(hi-IN), +#cancel-comment-reply-link:lang(hi-IN), +h1:lang(hi-IN), +h2:lang(hi-IN), +h3:lang(hi-IN), +h4:lang(hi-IN), +h5:lang(hi-IN), +h6:lang(hi-IN), .page-title:lang(hi-IN), blockquote cite:lang(hi-IN), table:lang(hi-IN), .button:lang(hi-IN), +input:lang(hi-IN)[type="button"], +input:lang(hi-IN)[type="reset"], +input:lang(hi-IN)[type="submit"], .comment-navigation .nav-previous:lang(hi-IN), +.comment-navigation .nav-next:lang(hi-IN), .comment-list .pingback .comment-body:lang(hi-IN), +.comment-list .trackback .comment-body:lang(hi-IN), .comment-list .pingback .comment-body .comment-edit-link:lang(hi-IN), +.comment-list .trackback .comment-body .comment-edit-link:lang(hi-IN), .comment-form .comment-notes:lang(hi-IN), +.comment-form label:lang(hi-IN), .widget_archive ul li:lang(hi-IN), +.widget_categories ul li:lang(hi-IN), +.widget_meta ul li:lang(hi-IN), +.widget_nav_menu ul li:lang(hi-IN), +.widget_pages ul li:lang(hi-IN), +.widget_recent_comments ul li:lang(hi-IN), +.widget_recent_entries ul li:lang(hi-IN), +.widget_rss ul li:lang(hi-IN), .widget_tag_cloud .tagcloud:lang(hi-IN), .entry .entry-content .wp-block-button .wp-block-button__link:lang(hi-IN), .entry .entry-content .wp-block-archives li:lang(hi-IN), +.entry .entry-content .wp-block-categories li:lang(hi-IN), +.entry .entry-content .wp-block-latest-posts li:lang(hi-IN), .entry .entry-content .wp-block-verse:lang(hi-IN), .entry .entry-content .has-drop-cap:lang(hi-IN):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(hi-IN), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(hi-IN), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(hi-IN), +.entry .entry-content .wp-block-cover-image h2:lang(hi-IN), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(hi-IN), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(hi-IN), +.entry .entry-content .wp-block-cover h2:lang(hi-IN), .entry .entry-content .wp-block-audio figcaption:lang(hi-IN), +.entry .entry-content .wp-block-video figcaption:lang(hi-IN), +.entry .entry-content .wp-block-image figcaption:lang(hi-IN), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(hi-IN), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(hi-IN), .entry .entry-content .wp-block-file:lang(hi-IN), .entry .entry-content .wp-block-file .wp-block-file__button:lang(hi-IN), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(hi-IN), .wp-caption-text:lang(hi-IN), .gallery-caption:lang(hi-IN) { + font-family: Arial, sans-serif; +} + +body:lang(mr), button:lang(mr), +input:lang(mr), +select:lang(mr), +optgroup:lang(mr), +textarea:lang(mr), .author-description .author-link:lang(mr), +.comment-metadata:lang(mr), +.comment-reply-link:lang(mr), +.comments-title:lang(mr), +.comment-author .fn:lang(mr), +.discussion-meta-info:lang(mr), +.entry-meta:lang(mr), +.entry-footer:lang(mr), +.main-navigation:lang(mr), +.no-comments:lang(mr), +.not-found .page-title:lang(mr), +.error-404 .page-title:lang(mr), +.post-navigation .post-title:lang(mr), +.page-links:lang(mr), +.page-description:lang(mr), +.pagination .nav-links:lang(mr), +.sticky-post:lang(mr), +.site-title:lang(mr), +.site-info:lang(mr), +#cancel-comment-reply-link:lang(mr), +h1:lang(mr), +h2:lang(mr), +h3:lang(mr), +h4:lang(mr), +h5:lang(mr), +h6:lang(mr), .page-title:lang(mr), blockquote cite:lang(mr), table:lang(mr), .button:lang(mr), +input:lang(mr)[type="button"], +input:lang(mr)[type="reset"], +input:lang(mr)[type="submit"], .comment-navigation .nav-previous:lang(mr), +.comment-navigation .nav-next:lang(mr), .comment-list .pingback .comment-body:lang(mr), +.comment-list .trackback .comment-body:lang(mr), .comment-list .pingback .comment-body .comment-edit-link:lang(mr), +.comment-list .trackback .comment-body .comment-edit-link:lang(mr), .comment-form .comment-notes:lang(mr), +.comment-form label:lang(mr), .widget_archive ul li:lang(mr), +.widget_categories ul li:lang(mr), +.widget_meta ul li:lang(mr), +.widget_nav_menu ul li:lang(mr), +.widget_pages ul li:lang(mr), +.widget_recent_comments ul li:lang(mr), +.widget_recent_entries ul li:lang(mr), +.widget_rss ul li:lang(mr), .widget_tag_cloud .tagcloud:lang(mr), .entry .entry-content .wp-block-button .wp-block-button__link:lang(mr), .entry .entry-content .wp-block-archives li:lang(mr), +.entry .entry-content .wp-block-categories li:lang(mr), +.entry .entry-content .wp-block-latest-posts li:lang(mr), .entry .entry-content .wp-block-verse:lang(mr), .entry .entry-content .has-drop-cap:lang(mr):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(mr), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(mr), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(mr), +.entry .entry-content .wp-block-cover-image h2:lang(mr), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(mr), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(mr), +.entry .entry-content .wp-block-cover h2:lang(mr), .entry .entry-content .wp-block-audio figcaption:lang(mr), +.entry .entry-content .wp-block-video figcaption:lang(mr), +.entry .entry-content .wp-block-image figcaption:lang(mr), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(mr), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(mr), .entry .entry-content .wp-block-file:lang(mr), .entry .entry-content .wp-block-file .wp-block-file__button:lang(mr), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(mr), .wp-caption-text:lang(mr), .gallery-caption:lang(mr) { + font-family: Arial, sans-serif; +} + +body:lang(ne-NP), button:lang(ne-NP), +input:lang(ne-NP), +select:lang(ne-NP), +optgroup:lang(ne-NP), +textarea:lang(ne-NP), .author-description .author-link:lang(ne-NP), +.comment-metadata:lang(ne-NP), +.comment-reply-link:lang(ne-NP), +.comments-title:lang(ne-NP), +.comment-author .fn:lang(ne-NP), +.discussion-meta-info:lang(ne-NP), +.entry-meta:lang(ne-NP), +.entry-footer:lang(ne-NP), +.main-navigation:lang(ne-NP), +.no-comments:lang(ne-NP), +.not-found .page-title:lang(ne-NP), +.error-404 .page-title:lang(ne-NP), +.post-navigation .post-title:lang(ne-NP), +.page-links:lang(ne-NP), +.page-description:lang(ne-NP), +.pagination .nav-links:lang(ne-NP), +.sticky-post:lang(ne-NP), +.site-title:lang(ne-NP), +.site-info:lang(ne-NP), +#cancel-comment-reply-link:lang(ne-NP), +h1:lang(ne-NP), +h2:lang(ne-NP), +h3:lang(ne-NP), +h4:lang(ne-NP), +h5:lang(ne-NP), +h6:lang(ne-NP), .page-title:lang(ne-NP), blockquote cite:lang(ne-NP), table:lang(ne-NP), .button:lang(ne-NP), +input:lang(ne-NP)[type="button"], +input:lang(ne-NP)[type="reset"], +input:lang(ne-NP)[type="submit"], .comment-navigation .nav-previous:lang(ne-NP), +.comment-navigation .nav-next:lang(ne-NP), .comment-list .pingback .comment-body:lang(ne-NP), +.comment-list .trackback .comment-body:lang(ne-NP), .comment-list .pingback .comment-body .comment-edit-link:lang(ne-NP), +.comment-list .trackback .comment-body .comment-edit-link:lang(ne-NP), .comment-form .comment-notes:lang(ne-NP), +.comment-form label:lang(ne-NP), .widget_archive ul li:lang(ne-NP), +.widget_categories ul li:lang(ne-NP), +.widget_meta ul li:lang(ne-NP), +.widget_nav_menu ul li:lang(ne-NP), +.widget_pages ul li:lang(ne-NP), +.widget_recent_comments ul li:lang(ne-NP), +.widget_recent_entries ul li:lang(ne-NP), +.widget_rss ul li:lang(ne-NP), .widget_tag_cloud .tagcloud:lang(ne-NP), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ne-NP), .entry .entry-content .wp-block-archives li:lang(ne-NP), +.entry .entry-content .wp-block-categories li:lang(ne-NP), +.entry .entry-content .wp-block-latest-posts li:lang(ne-NP), .entry .entry-content .wp-block-verse:lang(ne-NP), .entry .entry-content .has-drop-cap:lang(ne-NP):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ne-NP), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ne-NP), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ne-NP), +.entry .entry-content .wp-block-cover-image h2:lang(ne-NP), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ne-NP), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ne-NP), +.entry .entry-content .wp-block-cover h2:lang(ne-NP), .entry .entry-content .wp-block-audio figcaption:lang(ne-NP), +.entry .entry-content .wp-block-video figcaption:lang(ne-NP), +.entry .entry-content .wp-block-image figcaption:lang(ne-NP), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ne-NP), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ne-NP), .entry .entry-content .wp-block-file:lang(ne-NP), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ne-NP), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ne-NP), .wp-caption-text:lang(ne-NP), .gallery-caption:lang(ne-NP) { + font-family: Arial, sans-serif; +} + +body:lang(el), button:lang(el), +input:lang(el), +select:lang(el), +optgroup:lang(el), +textarea:lang(el), .author-description .author-link:lang(el), +.comment-metadata:lang(el), +.comment-reply-link:lang(el), +.comments-title:lang(el), +.comment-author .fn:lang(el), +.discussion-meta-info:lang(el), +.entry-meta:lang(el), +.entry-footer:lang(el), +.main-navigation:lang(el), +.no-comments:lang(el), +.not-found .page-title:lang(el), +.error-404 .page-title:lang(el), +.post-navigation .post-title:lang(el), +.page-links:lang(el), +.page-description:lang(el), +.pagination .nav-links:lang(el), +.sticky-post:lang(el), +.site-title:lang(el), +.site-info:lang(el), +#cancel-comment-reply-link:lang(el), +h1:lang(el), +h2:lang(el), +h3:lang(el), +h4:lang(el), +h5:lang(el), +h6:lang(el), .page-title:lang(el), blockquote cite:lang(el), table:lang(el), .button:lang(el), +input:lang(el)[type="button"], +input:lang(el)[type="reset"], +input:lang(el)[type="submit"], .comment-navigation .nav-previous:lang(el), +.comment-navigation .nav-next:lang(el), .comment-list .pingback .comment-body:lang(el), +.comment-list .trackback .comment-body:lang(el), .comment-list .pingback .comment-body .comment-edit-link:lang(el), +.comment-list .trackback .comment-body .comment-edit-link:lang(el), .comment-form .comment-notes:lang(el), +.comment-form label:lang(el), .widget_archive ul li:lang(el), +.widget_categories ul li:lang(el), +.widget_meta ul li:lang(el), +.widget_nav_menu ul li:lang(el), +.widget_pages ul li:lang(el), +.widget_recent_comments ul li:lang(el), +.widget_recent_entries ul li:lang(el), +.widget_rss ul li:lang(el), .widget_tag_cloud .tagcloud:lang(el), .entry .entry-content .wp-block-button .wp-block-button__link:lang(el), .entry .entry-content .wp-block-archives li:lang(el), +.entry .entry-content .wp-block-categories li:lang(el), +.entry .entry-content .wp-block-latest-posts li:lang(el), .entry .entry-content .wp-block-verse:lang(el), .entry .entry-content .has-drop-cap:lang(el):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(el), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(el), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(el), +.entry .entry-content .wp-block-cover-image h2:lang(el), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(el), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(el), +.entry .entry-content .wp-block-cover h2:lang(el), .entry .entry-content .wp-block-audio figcaption:lang(el), +.entry .entry-content .wp-block-video figcaption:lang(el), +.entry .entry-content .wp-block-image figcaption:lang(el), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(el), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(el), .entry .entry-content .wp-block-file:lang(el), .entry .entry-content .wp-block-file .wp-block-file__button:lang(el), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(el), .wp-caption-text:lang(el), .gallery-caption:lang(el) { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +body:lang(gu), button:lang(gu), +input:lang(gu), +select:lang(gu), +optgroup:lang(gu), +textarea:lang(gu), .author-description .author-link:lang(gu), +.comment-metadata:lang(gu), +.comment-reply-link:lang(gu), +.comments-title:lang(gu), +.comment-author .fn:lang(gu), +.discussion-meta-info:lang(gu), +.entry-meta:lang(gu), +.entry-footer:lang(gu), +.main-navigation:lang(gu), +.no-comments:lang(gu), +.not-found .page-title:lang(gu), +.error-404 .page-title:lang(gu), +.post-navigation .post-title:lang(gu), +.page-links:lang(gu), +.page-description:lang(gu), +.pagination .nav-links:lang(gu), +.sticky-post:lang(gu), +.site-title:lang(gu), +.site-info:lang(gu), +#cancel-comment-reply-link:lang(gu), +h1:lang(gu), +h2:lang(gu), +h3:lang(gu), +h4:lang(gu), +h5:lang(gu), +h6:lang(gu), .page-title:lang(gu), blockquote cite:lang(gu), table:lang(gu), .button:lang(gu), +input:lang(gu)[type="button"], +input:lang(gu)[type="reset"], +input:lang(gu)[type="submit"], .comment-navigation .nav-previous:lang(gu), +.comment-navigation .nav-next:lang(gu), .comment-list .pingback .comment-body:lang(gu), +.comment-list .trackback .comment-body:lang(gu), .comment-list .pingback .comment-body .comment-edit-link:lang(gu), +.comment-list .trackback .comment-body .comment-edit-link:lang(gu), .comment-form .comment-notes:lang(gu), +.comment-form label:lang(gu), .widget_archive ul li:lang(gu), +.widget_categories ul li:lang(gu), +.widget_meta ul li:lang(gu), +.widget_nav_menu ul li:lang(gu), +.widget_pages ul li:lang(gu), +.widget_recent_comments ul li:lang(gu), +.widget_recent_entries ul li:lang(gu), +.widget_rss ul li:lang(gu), .widget_tag_cloud .tagcloud:lang(gu), .entry .entry-content .wp-block-button .wp-block-button__link:lang(gu), .entry .entry-content .wp-block-archives li:lang(gu), +.entry .entry-content .wp-block-categories li:lang(gu), +.entry .entry-content .wp-block-latest-posts li:lang(gu), .entry .entry-content .wp-block-verse:lang(gu), .entry .entry-content .has-drop-cap:lang(gu):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(gu), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(gu), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(gu), +.entry .entry-content .wp-block-cover-image h2:lang(gu), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(gu), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(gu), +.entry .entry-content .wp-block-cover h2:lang(gu), .entry .entry-content .wp-block-audio figcaption:lang(gu), +.entry .entry-content .wp-block-video figcaption:lang(gu), +.entry .entry-content .wp-block-image figcaption:lang(gu), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(gu), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(gu), .entry .entry-content .wp-block-file:lang(gu), .entry .entry-content .wp-block-file .wp-block-file__button:lang(gu), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(gu), .wp-caption-text:lang(gu), .gallery-caption:lang(gu) { + font-family: Arial, sans-serif; +} + +body:lang(he-IL), button:lang(he-IL), +input:lang(he-IL), +select:lang(he-IL), +optgroup:lang(he-IL), +textarea:lang(he-IL), .author-description .author-link:lang(he-IL), +.comment-metadata:lang(he-IL), +.comment-reply-link:lang(he-IL), +.comments-title:lang(he-IL), +.comment-author .fn:lang(he-IL), +.discussion-meta-info:lang(he-IL), +.entry-meta:lang(he-IL), +.entry-footer:lang(he-IL), +.main-navigation:lang(he-IL), +.no-comments:lang(he-IL), +.not-found .page-title:lang(he-IL), +.error-404 .page-title:lang(he-IL), +.post-navigation .post-title:lang(he-IL), +.page-links:lang(he-IL), +.page-description:lang(he-IL), +.pagination .nav-links:lang(he-IL), +.sticky-post:lang(he-IL), +.site-title:lang(he-IL), +.site-info:lang(he-IL), +#cancel-comment-reply-link:lang(he-IL), +h1:lang(he-IL), +h2:lang(he-IL), +h3:lang(he-IL), +h4:lang(he-IL), +h5:lang(he-IL), +h6:lang(he-IL), .page-title:lang(he-IL), blockquote cite:lang(he-IL), table:lang(he-IL), .button:lang(he-IL), +input:lang(he-IL)[type="button"], +input:lang(he-IL)[type="reset"], +input:lang(he-IL)[type="submit"], .comment-navigation .nav-previous:lang(he-IL), +.comment-navigation .nav-next:lang(he-IL), .comment-list .pingback .comment-body:lang(he-IL), +.comment-list .trackback .comment-body:lang(he-IL), .comment-list .pingback .comment-body .comment-edit-link:lang(he-IL), +.comment-list .trackback .comment-body .comment-edit-link:lang(he-IL), .comment-form .comment-notes:lang(he-IL), +.comment-form label:lang(he-IL), .widget_archive ul li:lang(he-IL), +.widget_categories ul li:lang(he-IL), +.widget_meta ul li:lang(he-IL), +.widget_nav_menu ul li:lang(he-IL), +.widget_pages ul li:lang(he-IL), +.widget_recent_comments ul li:lang(he-IL), +.widget_recent_entries ul li:lang(he-IL), +.widget_rss ul li:lang(he-IL), .widget_tag_cloud .tagcloud:lang(he-IL), .entry .entry-content .wp-block-button .wp-block-button__link:lang(he-IL), .entry .entry-content .wp-block-archives li:lang(he-IL), +.entry .entry-content .wp-block-categories li:lang(he-IL), +.entry .entry-content .wp-block-latest-posts li:lang(he-IL), .entry .entry-content .wp-block-verse:lang(he-IL), .entry .entry-content .has-drop-cap:lang(he-IL):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(he-IL), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(he-IL), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(he-IL), +.entry .entry-content .wp-block-cover-image h2:lang(he-IL), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(he-IL), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(he-IL), +.entry .entry-content .wp-block-cover h2:lang(he-IL), .entry .entry-content .wp-block-audio figcaption:lang(he-IL), +.entry .entry-content .wp-block-video figcaption:lang(he-IL), +.entry .entry-content .wp-block-image figcaption:lang(he-IL), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(he-IL), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(he-IL), .entry .entry-content .wp-block-file:lang(he-IL), .entry .entry-content .wp-block-file .wp-block-file__button:lang(he-IL), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(he-IL), .wp-caption-text:lang(he-IL), .gallery-caption:lang(he-IL) { + font-family: "Arial Hebrew", Arial, sans-serif; +} + +body:lang(ja), button:lang(ja), +input:lang(ja), +select:lang(ja), +optgroup:lang(ja), +textarea:lang(ja), .author-description .author-link:lang(ja), +.comment-metadata:lang(ja), +.comment-reply-link:lang(ja), +.comments-title:lang(ja), +.comment-author .fn:lang(ja), +.discussion-meta-info:lang(ja), +.entry-meta:lang(ja), +.entry-footer:lang(ja), +.main-navigation:lang(ja), +.no-comments:lang(ja), +.not-found .page-title:lang(ja), +.error-404 .page-title:lang(ja), +.post-navigation .post-title:lang(ja), +.page-links:lang(ja), +.page-description:lang(ja), +.pagination .nav-links:lang(ja), +.sticky-post:lang(ja), +.site-title:lang(ja), +.site-info:lang(ja), +#cancel-comment-reply-link:lang(ja), +h1:lang(ja), +h2:lang(ja), +h3:lang(ja), +h4:lang(ja), +h5:lang(ja), +h6:lang(ja), .page-title:lang(ja), blockquote cite:lang(ja), table:lang(ja), .button:lang(ja), +input:lang(ja)[type="button"], +input:lang(ja)[type="reset"], +input:lang(ja)[type="submit"], .comment-navigation .nav-previous:lang(ja), +.comment-navigation .nav-next:lang(ja), .comment-list .pingback .comment-body:lang(ja), +.comment-list .trackback .comment-body:lang(ja), .comment-list .pingback .comment-body .comment-edit-link:lang(ja), +.comment-list .trackback .comment-body .comment-edit-link:lang(ja), .comment-form .comment-notes:lang(ja), +.comment-form label:lang(ja), .widget_archive ul li:lang(ja), +.widget_categories ul li:lang(ja), +.widget_meta ul li:lang(ja), +.widget_nav_menu ul li:lang(ja), +.widget_pages ul li:lang(ja), +.widget_recent_comments ul li:lang(ja), +.widget_recent_entries ul li:lang(ja), +.widget_rss ul li:lang(ja), .widget_tag_cloud .tagcloud:lang(ja), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ja), .entry .entry-content .wp-block-archives li:lang(ja), +.entry .entry-content .wp-block-categories li:lang(ja), +.entry .entry-content .wp-block-latest-posts li:lang(ja), .entry .entry-content .wp-block-verse:lang(ja), .entry .entry-content .has-drop-cap:lang(ja):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ja), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ja), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ja), +.entry .entry-content .wp-block-cover-image h2:lang(ja), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ja), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ja), +.entry .entry-content .wp-block-cover h2:lang(ja), .entry .entry-content .wp-block-audio figcaption:lang(ja), +.entry .entry-content .wp-block-video figcaption:lang(ja), +.entry .entry-content .wp-block-image figcaption:lang(ja), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ja), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ja), .entry .entry-content .wp-block-file:lang(ja), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ja), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ja), .wp-caption-text:lang(ja), .gallery-caption:lang(ja) { + font-family: -apple-system, BlinkMacSystemFont, "Hiragino Sans", Meiryo, "Helvetica Neue", sans-serif; +} + +body:lang(ko-KR), button:lang(ko-KR), +input:lang(ko-KR), +select:lang(ko-KR), +optgroup:lang(ko-KR), +textarea:lang(ko-KR), .author-description .author-link:lang(ko-KR), +.comment-metadata:lang(ko-KR), +.comment-reply-link:lang(ko-KR), +.comments-title:lang(ko-KR), +.comment-author .fn:lang(ko-KR), +.discussion-meta-info:lang(ko-KR), +.entry-meta:lang(ko-KR), +.entry-footer:lang(ko-KR), +.main-navigation:lang(ko-KR), +.no-comments:lang(ko-KR), +.not-found .page-title:lang(ko-KR), +.error-404 .page-title:lang(ko-KR), +.post-navigation .post-title:lang(ko-KR), +.page-links:lang(ko-KR), +.page-description:lang(ko-KR), +.pagination .nav-links:lang(ko-KR), +.sticky-post:lang(ko-KR), +.site-title:lang(ko-KR), +.site-info:lang(ko-KR), +#cancel-comment-reply-link:lang(ko-KR), +h1:lang(ko-KR), +h2:lang(ko-KR), +h3:lang(ko-KR), +h4:lang(ko-KR), +h5:lang(ko-KR), +h6:lang(ko-KR), .page-title:lang(ko-KR), blockquote cite:lang(ko-KR), table:lang(ko-KR), .button:lang(ko-KR), +input:lang(ko-KR)[type="button"], +input:lang(ko-KR)[type="reset"], +input:lang(ko-KR)[type="submit"], .comment-navigation .nav-previous:lang(ko-KR), +.comment-navigation .nav-next:lang(ko-KR), .comment-list .pingback .comment-body:lang(ko-KR), +.comment-list .trackback .comment-body:lang(ko-KR), .comment-list .pingback .comment-body .comment-edit-link:lang(ko-KR), +.comment-list .trackback .comment-body .comment-edit-link:lang(ko-KR), .comment-form .comment-notes:lang(ko-KR), +.comment-form label:lang(ko-KR), .widget_archive ul li:lang(ko-KR), +.widget_categories ul li:lang(ko-KR), +.widget_meta ul li:lang(ko-KR), +.widget_nav_menu ul li:lang(ko-KR), +.widget_pages ul li:lang(ko-KR), +.widget_recent_comments ul li:lang(ko-KR), +.widget_recent_entries ul li:lang(ko-KR), +.widget_rss ul li:lang(ko-KR), .widget_tag_cloud .tagcloud:lang(ko-KR), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ko-KR), .entry .entry-content .wp-block-archives li:lang(ko-KR), +.entry .entry-content .wp-block-categories li:lang(ko-KR), +.entry .entry-content .wp-block-latest-posts li:lang(ko-KR), .entry .entry-content .wp-block-verse:lang(ko-KR), .entry .entry-content .has-drop-cap:lang(ko-KR):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ko-KR), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ko-KR), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ko-KR), +.entry .entry-content .wp-block-cover-image h2:lang(ko-KR), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ko-KR), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ko-KR), +.entry .entry-content .wp-block-cover h2:lang(ko-KR), .entry .entry-content .wp-block-audio figcaption:lang(ko-KR), +.entry .entry-content .wp-block-video figcaption:lang(ko-KR), +.entry .entry-content .wp-block-image figcaption:lang(ko-KR), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ko-KR), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ko-KR), .entry .entry-content .wp-block-file:lang(ko-KR), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ko-KR), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ko-KR), .wp-caption-text:lang(ko-KR), .gallery-caption:lang(ko-KR) { + font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; +} + +body:lang(th), button:lang(th), +input:lang(th), +select:lang(th), +optgroup:lang(th), +textarea:lang(th), .author-description .author-link:lang(th), +.comment-metadata:lang(th), +.comment-reply-link:lang(th), +.comments-title:lang(th), +.comment-author .fn:lang(th), +.discussion-meta-info:lang(th), +.entry-meta:lang(th), +.entry-footer:lang(th), +.main-navigation:lang(th), +.no-comments:lang(th), +.not-found .page-title:lang(th), +.error-404 .page-title:lang(th), +.post-navigation .post-title:lang(th), +.page-links:lang(th), +.page-description:lang(th), +.pagination .nav-links:lang(th), +.sticky-post:lang(th), +.site-title:lang(th), +.site-info:lang(th), +#cancel-comment-reply-link:lang(th), +h1:lang(th), +h2:lang(th), +h3:lang(th), +h4:lang(th), +h5:lang(th), +h6:lang(th), .page-title:lang(th), blockquote cite:lang(th), table:lang(th), .button:lang(th), +input:lang(th)[type="button"], +input:lang(th)[type="reset"], +input:lang(th)[type="submit"], .comment-navigation .nav-previous:lang(th), +.comment-navigation .nav-next:lang(th), .comment-list .pingback .comment-body:lang(th), +.comment-list .trackback .comment-body:lang(th), .comment-list .pingback .comment-body .comment-edit-link:lang(th), +.comment-list .trackback .comment-body .comment-edit-link:lang(th), .comment-form .comment-notes:lang(th), +.comment-form label:lang(th), .widget_archive ul li:lang(th), +.widget_categories ul li:lang(th), +.widget_meta ul li:lang(th), +.widget_nav_menu ul li:lang(th), +.widget_pages ul li:lang(th), +.widget_recent_comments ul li:lang(th), +.widget_recent_entries ul li:lang(th), +.widget_rss ul li:lang(th), .widget_tag_cloud .tagcloud:lang(th), .entry .entry-content .wp-block-button .wp-block-button__link:lang(th), .entry .entry-content .wp-block-archives li:lang(th), +.entry .entry-content .wp-block-categories li:lang(th), +.entry .entry-content .wp-block-latest-posts li:lang(th), .entry .entry-content .wp-block-verse:lang(th), .entry .entry-content .has-drop-cap:lang(th):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(th), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(th), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(th), +.entry .entry-content .wp-block-cover-image h2:lang(th), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(th), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(th), +.entry .entry-content .wp-block-cover h2:lang(th), .entry .entry-content .wp-block-audio figcaption:lang(th), +.entry .entry-content .wp-block-video figcaption:lang(th), +.entry .entry-content .wp-block-image figcaption:lang(th), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(th), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(th), .entry .entry-content .wp-block-file:lang(th), .entry .entry-content .wp-block-file .wp-block-file__button:lang(th), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(th), .wp-caption-text:lang(th), .gallery-caption:lang(th) { + font-family: "Sukhumvit Set", "Helvetica Neue", helvetica, arial, sans-serif; +} + +body:lang(vi), button:lang(vi), +input:lang(vi), +select:lang(vi), +optgroup:lang(vi), +textarea:lang(vi), .author-description .author-link:lang(vi), +.comment-metadata:lang(vi), +.comment-reply-link:lang(vi), +.comments-title:lang(vi), +.comment-author .fn:lang(vi), +.discussion-meta-info:lang(vi), +.entry-meta:lang(vi), +.entry-footer:lang(vi), +.main-navigation:lang(vi), +.no-comments:lang(vi), +.not-found .page-title:lang(vi), +.error-404 .page-title:lang(vi), +.post-navigation .post-title:lang(vi), +.page-links:lang(vi), +.page-description:lang(vi), +.pagination .nav-links:lang(vi), +.sticky-post:lang(vi), +.site-title:lang(vi), +.site-info:lang(vi), +#cancel-comment-reply-link:lang(vi), +h1:lang(vi), +h2:lang(vi), +h3:lang(vi), +h4:lang(vi), +h5:lang(vi), +h6:lang(vi), .page-title:lang(vi), blockquote cite:lang(vi), table:lang(vi), .button:lang(vi), +input:lang(vi)[type="button"], +input:lang(vi)[type="reset"], +input:lang(vi)[type="submit"], .comment-navigation .nav-previous:lang(vi), +.comment-navigation .nav-next:lang(vi), .comment-list .pingback .comment-body:lang(vi), +.comment-list .trackback .comment-body:lang(vi), .comment-list .pingback .comment-body .comment-edit-link:lang(vi), +.comment-list .trackback .comment-body .comment-edit-link:lang(vi), .comment-form .comment-notes:lang(vi), +.comment-form label:lang(vi), .widget_archive ul li:lang(vi), +.widget_categories ul li:lang(vi), +.widget_meta ul li:lang(vi), +.widget_nav_menu ul li:lang(vi), +.widget_pages ul li:lang(vi), +.widget_recent_comments ul li:lang(vi), +.widget_recent_entries ul li:lang(vi), +.widget_rss ul li:lang(vi), .widget_tag_cloud .tagcloud:lang(vi), .entry .entry-content .wp-block-button .wp-block-button__link:lang(vi), .entry .entry-content .wp-block-archives li:lang(vi), +.entry .entry-content .wp-block-categories li:lang(vi), +.entry .entry-content .wp-block-latest-posts li:lang(vi), .entry .entry-content .wp-block-verse:lang(vi), .entry .entry-content .has-drop-cap:lang(vi):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(vi), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(vi), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(vi), +.entry .entry-content .wp-block-cover-image h2:lang(vi), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(vi), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(vi), +.entry .entry-content .wp-block-cover h2:lang(vi), .entry .entry-content .wp-block-audio figcaption:lang(vi), +.entry .entry-content .wp-block-video figcaption:lang(vi), +.entry .entry-content .wp-block-image figcaption:lang(vi), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(vi), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(vi), .entry .entry-content .wp-block-file:lang(vi), .entry .entry-content .wp-block-file .wp-block-file__button:lang(vi), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(vi), .wp-caption-text:lang(vi), .gallery-caption:lang(vi) { + font-family: "Libre Franklin", sans-serif; +} + +/* Normalize */ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +/* Typography */ +html { + font-size: 22px; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #111; + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + font-size: 1em; + line-height: 1.8; + margin: 0; + text-rendering: optimizeLegibility; +} + +button, +input, +select, +optgroup, +textarea { + color: #111; + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + line-height: 1.8; + text-rendering: optimizeLegibility; +} + +.author-description .author-link, +.comment-metadata, +.comment-reply-link, +.comments-title, +.comment-author .fn, +.discussion-meta-info, +.entry-meta, +.entry-footer, +.main-navigation, +.no-comments, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.page-links, +.page-description, +.pagination .nav-links, +.sticky-post, +.site-title, +.site-info, +#cancel-comment-reply-link, +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.main-navigation, +.page-description, +.author-description .author-link, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.pagination .nav-links, +.comments-title, +.comment-author .fn, +.no-comments, +.site-title, +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.page-title { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; +} + +.site-branding, +.main-navigation ul.main-menu > li, +.social-navigation, +.author-description .author-bio, +.nav-links { + line-height: 1.25; +} + +h1 { + font-size: 2.25em; +} + +@media only screen and (min-width: 768px) { + h1 { + font-size: 2.8125em; + } +} + +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.has-larger-font-size, +h2 { + font-size: 1.6875em; +} + +@media only screen and (min-width: 768px) { + .entry-title, + .not-found .page-title, + .error-404 .page-title, + .has-larger-font-size, + h2 { + font-size: 2.25em; + } +} + +.has-regular-font-size, +.has-large-font-size, +.comments-title, +h3 { + font-size: 1.6875em; +} + +.site-title, +.site-description, +.main-navigation, +.nav-links, +.page-title, +.page-description, +.comment-author .fn, +.no-comments, +h2.author-title, +p.author-bio, +h4 { + font-size: 1.125em; +} + +.pagination .nav-links, +.comment-content, +h5 { + font-size: 0.88889em; +} + +.entry-meta, +.entry-footer, +.discussion-meta-info, +.site-info, +.has-small-font-size, +.comment-reply-link, +.comment-metadata, +.comment-notes, +.sticky-post, +#cancel-comment-reply-link, +img:after, +h6 { + font-size: 0.71111em; +} + +.site-title, +.page-title { + font-weight: normal; +} + +.page-description, +.page-links a { + font-weight: bold; +} + +.site-description { + letter-spacing: -0.01em; +} + +.post-navigation .post-title, +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.comments-title, +blockquote { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; + word-wrap: break-word; +} + +/* Do not hyphenate entry title on tablet view and bigger. */ +@media only screen and (min-width: 768px) { + .entry-title { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } +} + +p { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote cite { + font-size: 0.71111em; + font-style: normal; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +pre { + font-size: 0.88889em; + font-family: "Courier 10 Pitch", Courier, monospace; + line-height: 1.8; + overflow: auto; +} + +code, +kbd, +tt, +var { + font-size: 0.88889em; + font-family: Menlo, monaco, Consolas, Lucida Console, monospace; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, +ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: none; +} + +a:focus { + text-decoration: underline; +} + +/* Elements */ +html { + box-sizing: border-box; +} + +::-moz-selection { + background-color: #bfdcea; +} + +::selection { + background-color: #bfdcea; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + background-color: #fff; +} + +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:hover, +a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: thin; + outline-style: dotted; + text-decoration: underline; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + margin: 1rem 0; +} + +h1:not(.site-title):before, +h2:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +hr { + background-color: #767676; + border: 0; + height: 2px; +} + +ul, +ol { + padding-right: 1rem; +} + +ul { + list-style: disc; +} + +ul ul { + list-style-type: circle; +} + +ol { + list-style: decimal; +} + +li { + line-height: 1.8; +} + +li > ul, +li > ol { + padding-right: 2rem; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 1rem 1rem; +} + +img { + height: auto; + max-width: 100%; + position: relative; +} + +figure { + margin: 0; +} + +blockquote { + border-right: 2px solid #0073aa; + margin-right: 0; + padding: 0 1rem 0 0; +} + +blockquote > p { + margin: 0 0 1rem; +} + +blockquote cite { + color: #767676; +} + +table { + margin: 0 0 1rem; + border-collapse: collapse; + width: 100%; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +table td, +table th { + padding: 0.5em; + border: 1px solid #767676; + word-break: break-all; +} + +/* Forms */ +.button, +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + transition: background 150ms ease-in-out; + background: #0073aa; + border: none; + border-radius: 5px; + box-sizing: border-box; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.88889em; + font-weight: 700; + line-height: 1.2; + outline: none; + padding: 0.76rem 1rem; + text-decoration: none; + vertical-align: bottom; +} + +.button:hover, +button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + background: #111; + cursor: pointer; +} + +.button:visited, +button:visited, +input[type="button"]:visited, +input[type="reset"]:visited, +input[type="submit"]:visited { + color: #fff; + text-decoration: none; +} + +.button:focus, +button:focus, +input[type="button"]:focus, +input[type="reset"]:focus, +input[type="submit"]:focus { + background: #111; + outline: thin dotted; + outline-offset: -4px; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + -webkit-backface-visibility: hidden; + background: #fff; + border: solid 1px #ccc; + box-sizing: border-box; + outline: none; + padding: 0.36rem 0.66rem; + -webkit-appearance: none; + outline-offset: 0; + border-radius: 0; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="number"]:focus, +input[type="tel"]:focus, +input[type="range"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="time"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="color"]:focus, +textarea:focus { + border-color: #0073aa; + outline: thin solid rgba(0, 115, 170, 0.15); + outline-offset: -4px; +} + +input[type="search"]::-webkit-search-decoration { + display: none; +} + +textarea { + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + resize: vertical; +} + +form p { + margin: 1rem 0; +} + +/* Navigation */ +/*-------------------------------------------------------------- +## Links +--------------------------------------------------------------*/ +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:visited { + color: #0073aa; +} + +a:hover, +a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: thin dotted; + text-decoration: underline; +} + +/*-------------------------------------------------------------- +## Menus +--------------------------------------------------------------*/ +/** === Main menu === */ +.main-navigation { + display: block; + margin-top: 0.25rem; + /* Un-style buttons */ + /* + * Sub-menu styles + * + * :focus-within needs its own selector so other similar + * selectors don’t get ignored if a browser doesn’t recognize it + */ + /** + * Fade-in animation for top-level submenus + */ + /** + * Off-canvas touch device styles + */ +} + +body.page .main-navigation { + display: block; +} + +.main-navigation > div { + display: inline; +} + +.main-navigation button { + display: inline-block; + border: none; + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 700; + line-height: 1.2; + text-decoration: none; + background: transparent; + color: inherit; + cursor: pointer; + transition: background 250ms ease-in-out, transform 150ms ease; + -webkit-appearance: none; + -moz-appearance: none; +} + +.main-navigation button:hover, .main-navigation button:focus { + background: transparent; +} + +.main-navigation button:focus { + outline: 1px solid transparent; + outline-offset: -4px; +} + +.main-navigation button:active { + transform: scale(0.99); +} + +.main-navigation .main-menu { + display: inline-block; + margin: 0; + padding: 0; +} + +.main-navigation .main-menu > li { + color: #0073aa; + display: inline; + position: relative; +} + +.main-navigation .main-menu > li > a { + font-weight: 700; + color: #0073aa; + margin-left: 0.5rem; +} + +.main-navigation .main-menu > li > a + svg { + margin-left: 0.5rem; +} + +.main-navigation .main-menu > li > a:hover, +.main-navigation .main-menu > li > a:hover + svg { + color: #005177; +} + +.main-navigation .main-menu > li.menu-item-has-children { + display: inline-block; + position: inherit; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu > li.menu-item-has-children { + position: relative; + } +} + +.main-navigation .main-menu > li.menu-item-has-children > a { + margin-left: 0.125rem; +} + +.main-navigation .main-menu > li.menu-item-has-children > a:after, +.main-navigation .main-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: ""; + display: none; +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand { + display: inline-block; + margin-left: 0.25rem; + /* Priority+ Menu */ +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand.main-menu-more-toggle { + position: relative; + height: 24px; + line-height: 1.2; + width: 24px; + padding: 0; + margin-right: 0.5rem; +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand.main-menu-more-toggle svg { + height: 24px; + width: 24px; + top: -0.125rem; + vertical-align: text-bottom; +} + +.wp-customizer-unloading .main-navigation .main-menu > li.menu-item-has-children .submenu-expand, .main-navigation .main-menu > li.menu-item-has-children .submenu-expand.is-empty { + display: none; +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand svg { + position: relative; + top: 0.2rem; +} + +.main-navigation .main-menu > li:last-child > a, +.main-navigation .main-menu > li:last-child.menu-item-has-children .submenu-expand { + margin-left: 0; +} + +.main-navigation .sub-menu { + background-color: #0073aa; + color: #fff; + list-style: none; + padding-right: 0; + position: absolute; + opacity: 0; + right: -9999px; + z-index: 99999; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu { + width: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + } +} + +.main-navigation .sub-menu > li { + display: block; + float: none; + position: relative; +} + +.main-navigation .sub-menu > li.menu-item-has-children .submenu-expand { + display: inline-block; + position: absolute; + width: calc( 24px + 1rem); + left: 0; + top: calc( .125 * 1rem); + bottom: 0; + color: white; + line-height: 1; + padding: calc( .5 * 1rem); +} + +.main-navigation .sub-menu > li.menu-item-has-children .submenu-expand svg { + top: 0; +} + +.main-navigation .sub-menu > li.menu-item-has-children .submenu-expand { + margin-left: 0; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: "\203a"; + } +} + +.main-navigation .sub-menu > li > a, +.main-navigation .sub-menu > li > .menu-item-link-return { + color: #fff; + display: block; + line-height: 1.2; + text-shadow: none; + padding: calc( .5 * 1rem) 1rem calc( .5 * 1rem) calc( 24px + 1rem); + white-space: nowrap; +} + +.main-navigation .sub-menu > li > a:hover, .main-navigation .sub-menu > li > a:focus, +.main-navigation .sub-menu > li > .menu-item-link-return:hover, +.main-navigation .sub-menu > li > .menu-item-link-return:focus { + background: #005177; +} + +.main-navigation .sub-menu > li > a:hover:after, .main-navigation .sub-menu > li > a:focus:after, +.main-navigation .sub-menu > li > .menu-item-link-return:hover:after, +.main-navigation .sub-menu > li > .menu-item-link-return:focus:after { + background: #005177; +} + +.main-navigation .sub-menu > li > .menu-item-link-return { + width: 100%; + font-size: 22px; + font-weight: normal; + text-align: right; +} + +.main-navigation .sub-menu > li > a:empty { + display: none; +} + +.main-navigation .sub-menu > li.mobile-parent-nav-menu-item { + display: none; + font-size: 0.88889em; + font-weight: normal; +} + +.main-navigation .sub-menu > li.mobile-parent-nav-menu-item svg { + position: relative; + top: 0.2rem; + margin-left: calc( .25 * 1rem); +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu { + display: block; + right: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + /* Non-mobile position */ + /* Nested sub-menu dashes */ +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu { + display: block; + right: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + /* Non-mobile position */ + /* Nested sub-menu dashes */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu { + display: block; + margin-top: 0; + opacity: 1; + position: absolute; + right: 0; + left: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu { + display: block; + margin-top: 0; + opacity: 1; + position: absolute; + right: 0; + left: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu.hidden-links { + right: 0; + width: 100%; + display: table; + position: absolute; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu.hidden-links { + right: 0; + width: 100%; + display: table; + position: absolute; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu.hidden-links { + left: 0; + right: auto; + display: block; + width: max-content; + } + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu.hidden-links { + left: 0; + right: auto; + display: block; + width: max-content; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .submenu-expand { + display: none; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .submenu-expand { + display: none; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + right: 0; + opacity: 1; + /* Non-mobile position */ +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + right: 0; + opacity: 1; + /* Non-mobile position */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu { + float: none; + max-width: 100%; + } + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu { + float: none; + max-width: 100%; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu { + counter-reset: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu { + counter-reset: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu { + display: block; + right: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + /* Non-mobile position */ + /* Nested sub-menu dashes */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu, + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu, + .main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu { + display: block; + float: none; + margin-top: 0; + opacity: 1; + position: absolute; + right: 0; + left: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu.hidden-links, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu.hidden-links, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu.hidden-links { + right: 0; + width: 100%; + display: table; + position: absolute; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu.hidden-links, + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu.hidden-links, + .main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu.hidden-links { + left: 0; + right: auto; + display: table; + width: max-content; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .submenu-expand, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .submenu-expand, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .submenu-expand { + display: none; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + right: 0; + opacity: 1; + /* Non-mobile position */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu, + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu, + .main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu { + float: none; + max-width: 100%; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu { + counter-reset: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu > li > a::before, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu > li > a::before, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.main-navigation .main-menu > .menu-item-has-children:not(.off-canvas):hover > .sub-menu { + animation: fade_in 0.1s forwards; +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu .submenu-expand .svg-icon { + transform: rotate(-270deg); +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu .sub-menu { + opacity: 0; + position: absolute; + z-index: 0; + transform: translateX(100%); +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li:hover, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li:focus, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li > a:hover, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li > a:focus { + background-color: transparent; +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu > li > a, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu > li > .menu-item-link-return { + white-space: inherit; +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true { + display: table; + margin-top: 0; + opacity: 1; + padding-right: 0; + /* Mobile position */ + right: 0; + top: 0; + left: 0; + bottom: 0; + position: fixed; + z-index: 100000; + /* Make sure appears above mobile admin bar */ + width: 100vw; + height: 100vh; + max-width: 100vw; + transform: translateX(-100%); + animation: slide_in_right 0.3s forwards; + /* Prevent menu from being blocked by admin bar */ +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true > .mobile-parent-nav-menu-item { + display: block; +} + +.admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true { + top: 46px; + height: calc( 100vh - 46px); + /* WP core breakpoint */ +} + +.admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true .sub-menu.expanded-true { + top: 0; +} + +@media only screen and (min-width: 782px) { + .admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true { + top: 32px; + height: calc( 100vh - 32px); + } + .admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true .sub-menu.expanded-true { + top: 0; + } +} + +.main-navigation .main-menu-more:nth-child(n+3) { + display: none; +} + +/* Menu animation */ +@keyframes slide_in_right { + 100% { + transform: translateX(0%); + } +} + +@keyframes fade_in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* Social menu */ +.social-navigation { + margin-top: calc(1rem / 2); + text-align: right; +} + +.social-navigation ul.social-links-menu { + content: ""; + display: table; + table-layout: fixed; + display: inline-block; + margin: 0; + padding: 0; +} + +.social-navigation ul.social-links-menu li { + display: inline-block; + vertical-align: bottom; + vertical-align: -webkit-baseline-middle; + list-style: none; +} + +.social-navigation ul.social-links-menu li:nth-child(n+2) { + margin-right: 0.1em; +} + +.social-navigation ul.social-links-menu li a { + border-bottom: 1px solid transparent; + display: block; + color: #111; + margin-bottom: -1px; + transition: opacity 110ms ease-in-out; +} + +.social-navigation ul.social-links-menu li a:hover, .social-navigation ul.social-links-menu li a:active { + color: #111; + opacity: 0.6; +} + +.social-navigation ul.social-links-menu li a:focus { + color: #111; + opacity: 1; + border-bottom: 1px solid #111; +} + +.social-navigation ul.social-links-menu li a svg { + display: block; + width: 32px; + height: 32px; + transform: translateZ(0); +} + +.social-navigation ul.social-links-menu li a svg#ui-icon-link { + transform: rotate(45deg); +} + +@media only screen and (min-width: 768px) { + .site-title + .social-navigation, + .site-description + .social-navigation { + margin-top: calc(1rem / 5); + } +} + +/** === Footer menu === */ +.footer-navigation { + display: inline; +} + +.footer-navigation > div { + display: inline; +} + +.footer-navigation .footer-menu { + display: inline; + padding-right: 0; +} + +.footer-navigation .footer-menu li { + display: inline; + margin-left: 1rem; +} + +/*-------------------------------------------------------------- +## Next / Previous +--------------------------------------------------------------*/ +/* Next/Previous navigation */ +.post-navigation { + margin: calc(3 * 1rem) 0; +} + +@media only screen and (min-width: 768px) { + .post-navigation { + margin: calc(3 * 1rem) calc(10% + 60px); + max-width: calc(6 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .post-navigation { + margin: calc(3 * 1rem) 0; + max-width: 100%; + } +} + +.post-navigation .nav-links { + margin: 0 1rem; + max-width: 100%; + display: flex; + flex-direction: column; +} + +@media only screen and (min-width: 768px) { + .post-navigation .nav-links { + margin: 0; + } +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links { + flex-direction: row; + margin: 0 calc(10% + 60px); + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.post-navigation .nav-links a .meta-nav { + color: #767676; + user-select: none; +} + +.post-navigation .nav-links a .meta-nav:before, .post-navigation .nav-links a .meta-nav:after { + display: none; + content: "—"; + width: 2em; + color: #767676; + height: 1em; +} + +.post-navigation .nav-links a .post-title { + hyphens: auto; +} + +.post-navigation .nav-links a:hover { + color: #005177; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous, + .post-navigation .nav-links .nav-next { + min-width: calc(50% - 2 * 1rem); + } +} + +.post-navigation .nav-links .nav-previous { + order: 2; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous { + order: 1; + } +} + +.post-navigation .nav-links .nav-previous + .nav-next { + margin-bottom: 1rem; +} + +.post-navigation .nav-links .nav-previous .meta-nav:before { + display: inline; +} + +.post-navigation .nav-links .nav-next { + order: 1; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-next { + order: 2; + padding-right: 1rem; + } +} + +.post-navigation .nav-links .nav-next .meta-nav:after { + display: inline; +} + +.pagination .nav-links { + display: flex; + flex-wrap: wrap; + padding: 0 calc(.5 * 1rem); +} + +.pagination .nav-links > * { + padding: calc(.5 * 1rem); +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.prev { + padding-right: 0; +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.next { + padding-left: 0; +} + +.pagination .nav-links a:focus { + text-decoration: underline; + outline-offset: -1px; +} + +.pagination .nav-links a:focus.prev, .pagination .nav-links a:focus.next { + text-decoration: none; +} + +.pagination .nav-links a:focus.prev .nav-prev-text, +.pagination .nav-links a:focus.prev .nav-next-text, .pagination .nav-links a:focus.next .nav-prev-text, +.pagination .nav-links a:focus.next .nav-next-text { + text-decoration: underline; +} + +.pagination .nav-links .nav-next-text, +.pagination .nav-links .nav-prev-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .pagination .nav-links { + margin-right: calc(10% + 60px); + padding: 0; + } + .pagination .nav-links .prev > *, + .pagination .nav-links .next > * { + display: inline-block; + vertical-align: text-bottom; + } + .pagination .nav-links > * { + padding: 1rem; + } +} + +.comment-navigation .nav-links { + display: flex; + flex-direction: row; +} + +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + min-width: 50%; + width: 100%; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.comment-navigation .nav-previous .secondary-text, +.comment-navigation .nav-next .secondary-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .comment-navigation .nav-previous .secondary-text, + .comment-navigation .nav-next .secondary-text { + display: inline; + } +} + +.comment-navigation .nav-previous svg, +.comment-navigation .nav-next svg { + vertical-align: middle; + position: relative; + margin: 0 -0.35em; + top: -1px; +} + +.comment-navigation .nav-next { + text-align: left; +} + +/* Accessibility */ +/* Text meant only for screen readers. */ +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; + /* Many screen reader and browser combinations announce broken words as they would appear visually. */ +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + clip-path: none; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + right: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; + /* Above WP toolbar. */ +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} + +/* Alignments */ +.alignleft { + float: left; + margin-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .alignleft { + margin-right: calc(2 * 1rem); + } +} + +.alignright { + float: right; + margin-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .alignright { + margin-left: calc(2 * 1rem); + } +} + +.aligncenter { + clear: both; + display: block; + margin-right: auto; + margin-left: auto; +} + +/* Clearings */ +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after { + content: ""; + display: table; + table-layout: fixed; +} + +.clear:after, +.entry-content:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after { + clear: both; +} + +/* Layout */ +/** === Layout === */ +#page { + width: 100%; +} + +.site-content { + overflow: hidden; +} + +/* Content */ +/*-------------------------------------------------------------- +## Header +--------------------------------------------------------------*/ +.site-header { + padding: 1em; +} + +.site-header.featured-image { + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 90vh; +} + +.site-header.featured-image .site-branding-container { + margin-bottom: auto; +} + +@media only screen and (min-width: 768px) { + .site-header { + margin: 0; + padding: 3rem 0; + } + .site-header.featured-image { + min-height: 100vh; + margin-bottom: 3rem; + } +} + +.site-branding { + color: #767676; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + position: relative; + word-wrap: break-word; +} + +@media only screen and (min-width: 768px) { + .site-branding { + margin: 0 calc(10% + 60px); + } +} + +.site-logo { + position: relative; + z-index: 999; + margin-bottom: calc(.66 * 1rem); +} + +@media only screen and (min-width: 768px) { + .site-logo { + margin-bottom: 0; + position: absolute; + left: calc(100% + (1.25 * 1rem)); + top: 4px; + z-index: 999; + } +} + +.site-logo .custom-logo-link { + border-radius: 100%; + box-sizing: content-box; + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + display: block; + width: 50px; + height: 50px; + overflow: hidden; + transition: box-shadow 200ms ease-in-out; +} + +.site-logo .custom-logo-link .custom-logo { + min-height: inherit; +} + +.site-logo .custom-logo-link:hover, .site-logo .custom-logo-link:active, .site-logo .custom-logo-link:focus { + box-shadow: 0 0 0 2px black; +} + +@media only screen and (min-width: 768px) { + .site-logo .custom-logo-link { + width: 64px; + height: 64px; + } +} + +.site-title { + margin: auto; + display: inline; + color: #111; + /* When there is no description set, make sure navigation appears below title. */ +} + +.site-title a { + color: #111; +} + +.site-title a:link, .site-title a:visited { + color: #111; +} + +.site-title a:hover { + color: #4a4a4a; +} + +.featured-image .site-title { + margin: 0; +} + +@media only screen and (min-width: 768px) { + .featured-image .site-title { + display: inline-block; + } +} + +.site-title + .main-navigation { + display: block; +} + +@media only screen and (min-width: 768px) { + .site-title { + display: inline; + } +} + +.site-title:not(:empty) + .site-description:not(:empty):before { + content: "\2014"; + margin: 0 .2em; +} + +.site-description { + display: inline; + color: #767676; + font-weight: normal; + margin: 0; +} + +.site-header.featured-image { + /* Hide overflow for overflowing featured image */ + overflow: hidden; + /* Need relative positioning to properly align layers. */ + position: relative; + /* Add text shadow to text, to increase readability. */ + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35); + /* Set white text color when featured image is set. */ + /* add focus state to social media icons */ + /* Entry header */ + /* Custom Logo Link */ + /* Make sure important elements are above pseudo elements used for effects. */ + /* Set up image filter layer positioning */ + /* Background & Effects */ + /* Shared background settings between pseudo elements. */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; + /* The intensity of each blend mode is controlled via layer opacity. */ + /* Second layer: screen. */ + /* Third layer: multiply. */ + /* When image filters are inactive, a black overlay is added. */ + /* Fourth layer: overlay. */ + /* Fifth layer: readability overlay */ +} + +.site-header.featured-image .site-branding .site-title, +.site-header.featured-image .site-branding .site-description, +.site-header.featured-image .main-navigation a:after, +.site-header.featured-image .main-navigation .main-menu > li.menu-item-has-children:after, +.site-header.featured-image .main-navigation li, +.site-header.featured-image .social-navigation li, +.site-header.featured-image .entry-meta, +.site-header.featured-image .entry-title { + color: #fff; +} + +.site-header.featured-image .main-navigation a, +.site-header.featured-image .main-navigation a + svg, +.site-header.featured-image .social-navigation a, +.site-header.featured-image .site-title a, +.site-header.featured-image .site-featured-image a { + color: #fff; + transition: opacity 110ms ease-in-out; +} + +.site-header.featured-image .main-navigation a:hover, .site-header.featured-image .main-navigation a:active, +.site-header.featured-image .main-navigation a:hover + svg, +.site-header.featured-image .main-navigation a:active + svg, +.site-header.featured-image .main-navigation a + svg:hover, +.site-header.featured-image .main-navigation a + svg:active, +.site-header.featured-image .main-navigation a + svg:hover + svg, +.site-header.featured-image .main-navigation a + svg:active + svg, +.site-header.featured-image .social-navigation a:hover, +.site-header.featured-image .social-navigation a:active, +.site-header.featured-image .social-navigation a:hover + svg, +.site-header.featured-image .social-navigation a:active + svg, +.site-header.featured-image .site-title a:hover, +.site-header.featured-image .site-title a:active, +.site-header.featured-image .site-title a:hover + svg, +.site-header.featured-image .site-title a:active + svg, +.site-header.featured-image .site-featured-image a:hover, +.site-header.featured-image .site-featured-image a:active, +.site-header.featured-image .site-featured-image a:hover + svg, +.site-header.featured-image .site-featured-image a:active + svg { + color: #fff; + opacity: 0.6; +} + +.site-header.featured-image .main-navigation a:focus, +.site-header.featured-image .main-navigation a:focus + svg, +.site-header.featured-image .main-navigation a + svg:focus, +.site-header.featured-image .main-navigation a + svg:focus + svg, +.site-header.featured-image .social-navigation a:focus, +.site-header.featured-image .social-navigation a:focus + svg, +.site-header.featured-image .site-title a:focus, +.site-header.featured-image .site-title a:focus + svg, +.site-header.featured-image .site-featured-image a:focus, +.site-header.featured-image .site-featured-image a:focus + svg { + color: #fff; +} + +.site-header.featured-image .main-navigation .sub-menu a { + opacity: inherit; +} + +.site-header.featured-image .social-navigation a:focus { + color: #fff; + opacity: 1; + border-bottom: 1px solid #fff; +} + +.site-header.featured-image .social-navigation svg, +.site-header.featured-image .site-featured-image svg { + /* Use -webkit- only if supporting: Chrome < 54, iOS < 9.3, Android < 4.4.4 */ + -webkit-filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35)); + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35)); +} + +.site-header.featured-image .site-featured-image { + /* First layer: grayscale. */ +} + +.site-header.featured-image .site-featured-image .post-thumbnail img { + height: auto; + right: 50%; + max-width: 1000%; + min-height: 100%; + min-width: 100vw; + position: absolute; + top: 50%; + transform: translateX(50%) translateY(-50%); + width: auto; + z-index: 1; + /* When image filters are active, make it grayscale to colorize it blue. */ +} + +@supports (object-fit: cover) { + .site-header.featured-image .site-featured-image .post-thumbnail img { + height: 100%; + right: 0; + object-fit: cover; + top: 0; + transform: none; + width: 100%; + } +} + +.image-filters-enabled .site-header.featured-image .site-featured-image .post-thumbnail img { + filter: grayscale(100%); +} + +.site-header.featured-image .site-featured-image .entry-header { + margin-top: calc( 4 * 1rem); + margin-bottom: 0; + margin-right: 0; + margin-left: 0; + /* Entry meta */ +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image .site-featured-image .entry-header { + margin-right: calc(10% + 60px); + margin-left: calc(10% + 60px); + } +} + +.site-header.featured-image .site-featured-image .entry-header .entry-title:before { + background: #fff; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta { + font-weight: 500; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta > span { + margin-left: 1rem; + display: inline-block; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta > span:last-child { + margin-left: 0; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta a { + transition: color 110ms ease-in-out; + color: currentColor; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta a:hover { + text-decoration: none; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: 0.5em; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta .discussion-avatar-list { + display: none; +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-meta { + display: flex; + position: relative; + } + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-title { + padding-left: calc(1 * (100vw / 12) + 1rem); + } + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-meta .comment-count { + position: absolute; + left: 0; + } + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-meta .discussion-avatar-list { + display: block; + position: absolute; + bottom: 100%; + } +} + +.site-header.featured-image .custom-logo-link { + background: #fff; + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); +} + +.site-header.featured-image .custom-logo-link:hover, .site-header.featured-image .custom-logo-link:active, .site-header.featured-image .custom-logo-link:focus { + box-shadow: 0 0 0 2px white; +} + +.site-header.featured-image .site-branding { + position: relative; + z-index: 10; +} + +.site-header.featured-image .site-featured-image .entry-header { + position: relative; + z-index: 9; +} + +.site-header.featured-image .site-branding-container:after, +.site-header.featured-image .site-featured-image:before, +.site-header.featured-image .site-featured-image:after, .site-header.featured-image:after { + display: block; + position: absolute; + top: 0; + right: 0; + content: "\020"; + width: 100%; + height: 100%; +} + +.image-filters-enabled .site-header.featured-image .site-featured-image:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; +} + +.site-header.featured-image .site-featured-image:after { + background: #000; + mix-blend-mode: multiply; + opacity: .7; + /* When image filters are active, a blue overlay is added. */ +} + +.image-filters-enabled .site-header.featured-image .site-featured-image:after { + background: #0073aa; + opacity: .8; + z-index: 3; + /* Browsers supporting mix-blend-mode don't need opacity < 1 */ +} + +@supports (mix-blend-mode: multiply) { + .image-filters-enabled .site-header.featured-image .site-featured-image:after { + opacity: 1; + } +} + +.image-filters-enabled .site-header.featured-image .site-branding-container:after { + background: rgba(0, 0, 0, 0.35); + mix-blend-mode: overlay; + opacity: 0.5; + z-index: 4; + /* Browsers supporting mix-blend-mode can have a light overlay */ +} + +@supports (mix-blend-mode: overlay) { + .image-filters-enabled .site-header.featured-image .site-branding-container:after { + background: rgba(255, 255, 255, 0.35); + } +} + +.site-header.featured-image:after { + background: #000; + /** + * Add a transition to the readability overlay, to add a subtle + * but smooth effect when resizing the screen. + */ + transition: opacity 1200ms ease-in-out; + opacity: 0.7; + z-index: 5; + /* When image filters are active, a blue overlay is added. */ +} + +.image-filters-enabled .site-header.featured-image:after { + background: #000e14; + opacity: 0.38; +} + +@media only screen and (min-width: 768px) { + .image-filters-enabled .site-header.featured-image:after { + opacity: 0.18; + } +} + +.site-header.featured-image ::-moz-selection { + background: rgba(255, 255, 255, 0.17); +} + +.site-header.featured-image ::selection { + background: rgba(255, 255, 255, 0.17); +} + +/*-------------------------------------------------------------- +## Posts and pages +--------------------------------------------------------------*/ +.sticky { + display: block; +} + +.sticky-post { + background: #0073aa; + color: #fff; + display: inline-block; + font-weight: bold; + line-height: 1; + padding: .25rem; + position: absolute; + text-transform: uppercase; + top: -1rem; + z-index: 1; +} + +.updated:not(.published) { + display: none; +} + +.page-links { + clear: both; + margin: 0 0 calc(1.5 * 1rem); +} + +.entry { + margin-top: calc(6 * 1rem); +} + +.entry:first-of-type { + margin-top: 0; +} + +.entry .entry-header { + margin: calc(3 * 1rem) 1rem 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .entry .entry-header { + margin: calc(3 * 1rem) calc(10% + 60px) 1rem; + } +} + +.entry .entry-title { + margin: 0; +} + +.entry .entry-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +.entry .entry-title a { + color: inherit; +} + +.entry .entry-title a:hover { + color: #4a4a4a; +} + +.entry .entry-meta, +.entry .entry-footer { + color: #767676; + font-weight: 500; +} + +.entry .entry-meta > span, +.entry .entry-footer > span { + margin-left: 1rem; + display: inline-block; +} + +.entry .entry-meta > span:last-child, +.entry .entry-footer > span:last-child { + margin-left: 0; +} + +.entry .entry-meta a, +.entry .entry-footer a { + transition: color 110ms ease-in-out; + color: currentColor; +} + +.entry .entry-meta a:hover, +.entry .entry-footer a:hover { + text-decoration: none; + color: #0073aa; +} + +.entry .entry-meta .svg-icon, +.entry .entry-footer .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: 0.5em; +} + +.entry .entry-meta { + margin: 1rem 0; +} + +.entry .entry-footer { + margin: calc(2 * 1rem) 1rem 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-footer { + margin: 1rem calc(10% + 60px) calc(3 * 1rem); + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-footer { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.entry .post-thumbnail { + margin: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .post-thumbnail { + margin: 1rem calc(10% + 60px); + } +} + +.entry .post-thumbnail:focus { + outline: none; +} + +.entry .post-thumbnail .post-thumbnail-inner { + display: block; +} + +.entry .post-thumbnail .post-thumbnail-inner img { + position: relative; + display: block; + width: 100%; +} + +.image-filters-enabled .entry .post-thumbnail { + position: relative; + display: block; +} + +.image-filters-enabled .entry .post-thumbnail .post-thumbnail-inner { + filter: grayscale(100%); +} + +.image-filters-enabled .entry .post-thumbnail .post-thumbnail-inner:after { + background: rgba(0, 0, 0, 0.35); + content: ""; + display: block; + height: 100%; + opacity: .5; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + z-index: 4; +} + +@supports (mix-blend-mode: multiply) { + .image-filters-enabled .entry .post-thumbnail .post-thumbnail-inner:after { + display: none; + } +} + +.image-filters-enabled .entry .post-thumbnail:before, .image-filters-enabled .entry .post-thumbnail:after { + position: absolute; + display: block; + width: 100%; + height: 100%; + top: 0; + right: 0; + content: "\020"; + pointer-events: none; +} + +.image-filters-enabled .entry .post-thumbnail:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; +} + +.image-filters-enabled .entry .post-thumbnail:after { + background: #0073aa; + mix-blend-mode: multiply; + opacity: .8; + z-index: 3; + /* Browsers supporting mix-blend-mode don't need opacity < 1 */ +} + +@supports (mix-blend-mode: multiply) { + .image-filters-enabled .entry .post-thumbnail:after { + opacity: 1; + } +} + +.entry .entry-content, +.entry .entry-summary { + max-width: calc(100% - (2 * 1rem)); + margin: 0 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content, + .entry .entry-summary { + max-width: 80%; + margin: 0 10%; + padding: 0 60px; + } +} + +.entry .entry-content p { + word-wrap: break-word; +} + +.entry .entry-content .more-link { + transition: color 110ms ease-in-out; + display: inline; + color: inherit; +} + +.entry .entry-content .more-link:after { + content: "\02192"; + display: inline-block; + margin-right: 0.5em; +} + +.entry .entry-content .more-link:hover { + color: #0073aa; + text-decoration: none; +} + +.entry .entry-content a { + text-decoration: underline; +} + +.entry .entry-content a.button, .entry .entry-content a:hover { + text-decoration: none; +} + +.entry .entry-content a.button { + display: inline-block; +} + +.entry .entry-content a.button:hover { + background: #111; + color: #fff; + cursor: pointer; +} + +.entry .entry-content > iframe[style] { + margin: 32px 0 !important; + max-width: 100% !important; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > iframe[style] { + max-width: calc(8 * (100vw / 12) - 28px) !important; + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content > iframe[style] { + max-width: calc(6 * (100vw / 12) - 28px) !important; + } +} + +.entry .entry-content .page-links a { + margin: calc(0.5 * 1rem); + text-decoration: none; +} + +.entry .entry-content .wp-audio-shortcode { + max-width: calc(100vw - (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-audio-shortcode { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-audio-shortcode { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +/* Author description */ +.author-bio { + margin: calc(2 * 1rem) 1rem 1rem; +} + +@media only screen and (min-width: 768px) { + .author-bio { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .author-bio { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .author-bio { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +@media only screen and (min-width: 1168px) { + .author-bio { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +.author-bio .author-title { + display: inline; +} + +.author-bio .author-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +.author-bio .author-description { + display: inline; + color: #767676; + font-size: 1.125em; + line-height: 1.2; +} + +.author-bio .author-description .author-link { + display: inline-block; +} + +.author-bio .author-description .author-link:hover { + color: #005177; + text-decoration: none; +} + +/*-------------------------------------------------------------- +## Comments +--------------------------------------------------------------*/ +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + display: block; +} + +.comments-area { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + margin: calc(2 * 1rem) 1rem; + word-wrap: break-word; + /* Add extra margin when the comments section is located immediately after the + * post itself (this happens on pages). + */ +} + +@media only screen and (min-width: 768px) { + .comments-area { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .comments-area { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .comments-area { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +.comments-area > * { + margin-top: calc(2 * 1rem); + margin-bottom: calc(2 * 1rem); +} + +@media only screen and (min-width: 768px) { + .comments-area > * { + margin-top: calc(3 * 1rem); + margin-bottom: calc(3 * 1rem); + } +} + +.entry + .comments-area { + margin-top: calc(3 * 1rem); +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap { + align-items: baseline; + display: flex; + justify-content: space-between; + } +} + +.comments-area .comments-title-wrap .comments-title { + margin: 0; +} + +.comments-area .comments-title-wrap .comments-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap .comments-title { + flex: 1 0 calc(3 * (100vw / 12)); + } +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap .discussion-meta { + flex: 0 0 calc(2 * (100vw / 12)); + margin-right: 1rem; + } +} + +#comment { + max-width: 100%; + box-sizing: border-box; +} + +#respond { + position: relative; +} + +#respond .comment-user-avatar { + margin: 1rem 0 -1rem; +} + +#respond .comment .comment-form { + padding-right: 0; +} + +#respond > small { + display: block; + font-size: 22px; + position: absolute; + right: calc(1rem + 100%); + top: calc(-3.5 * 1rem); + width: calc(100vw / 12); +} + +#comments > .comments-title:last-child { + display: none; +} + +.comment-form-flex { + display: flex; + flex-direction: column; +} + +.comment-form-flex .comments-title { + display: none; + margin: 0; + order: 1; +} + +.comment-form-flex #respond { + order: 2; +} + +.comment-form-flex #respond + .comments-title { + display: block; +} + +.comment-list { + list-style: none; + padding: 0; +} + +.comment-list .children { + margin: 0; + padding: 0 1rem 0 0; +} + +.comment-list > .comment:first-child { + margin-top: 0; +} + +.comment-list .pingback .comment-body, +.comment-list .trackback .comment-body { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + font-weight: 500; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.comment-list .pingback .comment-body a:not(.comment-edit-link), +.comment-list .trackback .comment-body a:not(.comment-edit-link) { + font-weight: bold; + font-size: 19.55556px; + line-height: 1.5; + padding-left: 0.5rem; + display: block; +} + +.comment-list .pingback .comment-body .comment-edit-link, +.comment-list .trackback .comment-body .comment-edit-link { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 500; +} + +#respond + .comment-reply { + display: none; +} + +.comment-reply .comment-reply-link { + display: inline-block; +} + +.comment { + list-style: none; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment { + padding-right: calc(.5 * (1rem + calc(100vw / 12 ))); + } + .comment.depth-1, + .comment .children { + padding-right: 0; + } + .comment.depth-1 { + margin-right: calc(3.25 * 1rem); + } +} + +.comment .comment-body { + margin: calc(2 * 1rem) 0 0; +} + +.comment .comment-meta { + position: relative; +} + +.comment .comment-author .avatar { + float: right; + margin-left: 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .avatar { + float: inherit; + margin-left: inherit; + position: absolute; + top: 0; + left: calc(100% + 1rem); + } +} + +.comment .comment-author .fn { + position: relative; + display: block; +} + +.comment .comment-author .fn a { + color: inherit; +} + +.comment .comment-author .fn a:hover { + color: #005177; +} + +.comment .comment-author .post-author-badge { + border-radius: 100%; + display: block; + height: 18px; + position: absolute; + background: #008fd3; + left: calc(100% - 2.5rem); + top: -3px; + width: 18px; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .post-author-badge { + left: calc(100% + 0.75rem); + } +} + +.comment .comment-author .post-author-badge svg { + width: inherit; + height: inherit; + display: block; + fill: white; + transform: scale(0.875); +} + +.comment .comment-metadata > a, +.comment .comment-metadata .comment-edit-link { + display: inline; + font-weight: 500; + color: #767676; + vertical-align: baseline; +} + +.comment .comment-metadata > a time, +.comment .comment-metadata .comment-edit-link time { + vertical-align: baseline; +} + +.comment .comment-metadata > a:hover, +.comment .comment-metadata .comment-edit-link:hover { + color: #005177; + text-decoration: none; +} + +.comment .comment-metadata > * { + display: inline-block; +} + +.comment .comment-metadata .edit-link-sep { + color: #767676; + margin: 0 0.2em; + vertical-align: baseline; +} + +.comment .comment-metadata .edit-link { + color: #767676; +} + +.comment .comment-metadata .edit-link svg { + transform: scale(0.8); + vertical-align: baseline; + margin-left: 0.1em; +} + +.comment .comment-metadata .comment-edit-link { + position: relative; + padding-right: 1rem; + margin-right: -1rem; + z-index: 1; +} + +.comment .comment-metadata .comment-edit-link:hover { + color: #0073aa; +} + +.comment .comment-content { + margin: 1rem 0; +} + +@media only screen and (min-width: 1168px) { + .comment .comment-content { + padding-left: 1rem; + } +} + +.comment .comment-content > *:first-child { + margin-top: 0; +} + +.comment .comment-content > *:last-child { + margin-bottom: 0; +} + +.comment .comment-content blockquote { + margin-right: 0; +} + +.comment .comment-content a { + text-decoration: underline; +} + +.comment .comment-content a:hover { + text-decoration: none; +} + +.comment-reply-link, +#cancel-comment-reply-link { + font-weight: 500; +} + +.comment-reply-link:hover, +#cancel-comment-reply-link:hover { + color: #005177; +} + +.discussion-avatar-list { + content: ""; + display: table; + table-layout: fixed; + margin: 0; + padding: 0; +} + +.discussion-avatar-list li { + position: relative; + list-style: none; + margin: 0 0 0 -8px; + padding: 0; + float: right; +} + +.discussion-avatar-list .comment-user-avatar img { + height: calc(1.5 * 1rem); + width: calc(1.5 * 1rem); +} + +.discussion-meta .discussion-meta-info { + margin: 0; +} + +.discussion-meta .discussion-meta-info .svg-icon { + vertical-align: middle; + fill: currentColor; + transform: scale(0.6) scaleX(-1) translateY(-0.1em); + margin-right: -0.25rem; +} + +.comment-form .comment-notes, +.comment-form label { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + color: #767676; +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-author, + .comment-form .comment-form-email { + width: calc(50% - 0.5rem); + float: right; + } +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-email { + margin-right: 1rem; + } +} + +.comment-form input[name="author"], +.comment-form input[name="email"], +.comment-form input[name="url"] { + display: block; + width: 100%; +} + +/*-------------------------------------------------------------- +## Archives +--------------------------------------------------------------*/ +.archive .page-header, +.search .page-header, +.error404 .page-header { + margin: 1rem 1rem calc(3 * 1rem); +} + +@media only screen and (min-width: 768px) { + .archive .page-header, + .search .page-header, + .error404 .page-header { + margin: 0 calc(10% + 60px) calc(10% + 60px); + } +} + +.archive .page-header .page-title, +.search .page-header .page-title, +.error404 .page-header .page-title { + color: #767676; + display: inline; + letter-spacing: normal; +} + +.archive .page-header .page-title:before, +.search .page-header .page-title:before, +.error404 .page-header .page-title:before { + display: none; +} + +.archive .page-header .search-term, +.archive .page-header .page-description, +.search .page-header .search-term, +.search .page-header .page-description, +.error404 .page-header .search-term, +.error404 .page-header .page-description { + display: inherit; + clear: both; +} + +.archive .page-header .search-term:after, +.archive .page-header .page-description:after, +.search .page-header .search-term:after, +.search .page-header .page-description:after, +.error404 .page-header .search-term:after, +.error404 .page-header .page-description:after { + content: "."; + font-weight: bold; + color: #767676; +} + +.archive .page-header .page-description { + display: block; + color: #111; + font-size: 1em; +} + +@media only screen and (min-width: 768px) { + .hfeed .entry .entry-header { + margin: calc(3 * 1rem) calc(10% + 60px) calc(1rem / 2); + } +} + +/* 404 & Not found */ +.error-404.not-found .page-title, +.error-404.not-found .page-content, +.no-results.not-found .page-title, +.no-results.not-found .page-content { + margin: calc(3 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .error-404.not-found .page-title, + .error-404.not-found .page-content, + .no-results.not-found .page-title, + .no-results.not-found .page-content { + margin: calc(3 * 1rem) calc(10% + 60px) calc(1rem / 2); + } +} + +.error-404.not-found .search-submit, +.no-results.not-found .search-submit { + vertical-align: middle; + margin: 1rem 0; +} + +.error-404.not-found .search-field, +.no-results.not-found .search-field { + width: 100%; +} + +/*-------------------------------------------------------------- +## Footer +--------------------------------------------------------------*/ +/* Site footer */ +#colophon .widget-area, +#colophon .site-info { + margin: calc(2 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + #colophon .widget-area, + #colophon .site-info { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +#colophon .widget-column { + display: flex; + flex-wrap: wrap; +} + +#colophon .widget-column .widget { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + width: 100%; + word-wrap: break-word; +} + +@media only screen and (min-width: 1168px) { + #colophon .widget-column .widget { + margin-left: calc(3 * 1rem); + width: calc(50% - (3 * 1rem)); + } +} + +#colophon .site-info { + color: #767676; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +#colophon .site-info a { + color: inherit; +} + +#colophon .site-info a:hover { + text-decoration: none; + color: #0073aa; +} + +#colophon .site-info .imprint, +#colophon .site-info .privacy-policy-link { + margin-left: 1rem; +} + +/* Widgets */ +.widget { + margin: 0 0 1rem; + /* Make sure select elements fit in widgets. */ +} + +.widget select { + max-width: 100%; +} + +.widget a { + color: #0073aa; +} + +.widget a:hover { + color: #005177; +} + +.widget_archive ul, +.widget_categories ul, +.widget_meta ul, +.widget_nav_menu ul, +.widget_pages ul, +.widget_recent_comments ul, +.widget_recent_entries ul, +.widget_rss ul { + padding: 0; + list-style: none; +} + +.widget_archive ul li, +.widget_categories ul li, +.widget_meta ul li, +.widget_nav_menu ul li, +.widget_pages ul li, +.widget_recent_comments ul li, +.widget_recent_entries ul li, +.widget_rss ul li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.125); + font-weight: 700; + line-height: 1.2; + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.widget_archive ul ul, +.widget_categories ul ul, +.widget_meta ul ul, +.widget_nav_menu ul ul, +.widget_pages ul ul, +.widget_recent_comments ul ul, +.widget_recent_entries ul ul, +.widget_rss ul ul { + counter-reset: submenu; +} + +.widget_archive ul ul > li > a::before, +.widget_categories ul ul > li > a::before, +.widget_meta ul ul > li > a::before, +.widget_nav_menu ul ul > li > a::before, +.widget_pages ul ul > li > a::before, +.widget_recent_comments ul ul > li > a::before, +.widget_recent_entries ul ul > li > a::before, +.widget_rss ul ul > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.widget_tag_cloud .tagcloud { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 700; +} + +.widget_search .search-field { + width: 100%; +} + +@media only screen and (min-width: 600px) { + .widget_search .search-field { + width: auto; + } +} + +.widget_search .search-submit { + display: block; + margin-top: 1rem; +} + +.widget_calendar .calendar_wrap { + text-align: center; +} + +.widget_calendar .calendar_wrap table td, +.widget_calendar .calendar_wrap table th { + border: none; +} + +.widget_calendar .calendar_wrap a { + text-decoration: underline; +} + +/* Blocks */ +/* !Block styles */ +.entry .entry-content > *, +.entry .entry-summary > * { + margin: 32px 0; + max-width: 100%; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *, + .entry .entry-summary > * { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content > *, + .entry .entry-summary > * { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *, + .entry .entry-summary > * { + margin: 32px 0; + } +} + +.entry .entry-content > * > *:first-child, +.entry .entry-summary > * > *:first-child { + margin-top: 0; +} + +.entry .entry-content > * > *:last-child, +.entry .entry-summary > * > *:last-child { + margin-bottom: 0; +} + +.entry .entry-content > *.alignwide, +.entry .entry-summary > *.alignwide { + margin-right: auto; + margin-left: auto; + clear: both; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignwide, + .entry .entry-summary > *.alignwide { + width: 100%; + max-width: 100%; + } +} + +.entry .entry-content > *.alignfull, +.entry .entry-summary > *.alignfull { + position: relative; + right: -1rem; + width: calc( 100% + (2 * 1rem)); + max-width: calc( 100% + (2 * 1rem)); + clear: both; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignfull, + .entry .entry-summary > *.alignfull { + margin-top: calc(2 * 1rem); + margin-bottom: calc(2 * 1rem); + right: calc( -12.5% - 75px); + width: calc( 125% + 150px); + max-width: calc( 125% + 150px); + } +} + +.entry .entry-content > *.alignleft, +.entry .entry-summary > *.alignleft { + float: left; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-right: 0; + margin-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignleft, + .entry .entry-summary > *.alignleft { + max-width: calc(4 * (100vw / 12)); + margin-right: calc(2 * 1rem); + } +} + +.entry .entry-content > *.alignright, +.entry .entry-summary > *.alignright { + float: right; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-left: 0; + margin-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignright, + .entry .entry-summary > *.alignright { + max-width: calc(4 * (100vw / 12)); + margin-left: 0; + margin-left: calc(2 * 1rem); + } +} + +.entry .entry-content > *.aligncenter, +.entry .entry-summary > *.aligncenter { + margin-right: auto; + margin-left: auto; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.aligncenter, + .entry .entry-summary > *.aligncenter { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content > *.aligncenter, + .entry .entry-summary > *.aligncenter { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.aligncenter, + .entry .entry-summary > *.aligncenter { + margin-right: 0; + margin-left: 0; + } +} + +/* + * Unset nested content selector styles + * - Prevents layout styles from cascading too deeply + * - helps with plugin compatibility + */ +.entry .entry-content .entry-content, +.entry .entry-content .entry-summary, +.entry .entry-content .entry, +.entry .entry-summary .entry-content, +.entry .entry-summary .entry-summary, +.entry .entry-summary .entry { + margin: inherit; + max-width: inherit; + padding: inherit; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .entry-content, + .entry .entry-content .entry-summary, + .entry .entry-content .entry, + .entry .entry-summary .entry-content, + .entry .entry-summary .entry-summary, + .entry .entry-summary .entry { + margin: inherit; + max-width: inherit; + padding: inherit; + } +} + +.entry .entry-content p.has-background { + padding: 20px 30px; +} + +.entry .entry-content .wp-block-audio { + width: 100%; +} + +.entry .entry-content .wp-block-audio audio { + width: 100%; +} + +.entry .entry-content .wp-block-audio.alignleft audio, +.entry .entry-content .wp-block-audio.alignright audio { + max-width: 198px; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-audio.alignleft audio, + .entry .entry-content .wp-block-audio.alignright audio { + max-width: 384px; + } +} + +@media only screen and (min-width: 1379px) { + .entry .entry-content .wp-block-audio.alignleft audio, + .entry .entry-content .wp-block-audio.alignright audio { + max-width: 385.44px; + } +} + +.entry .entry-content .wp-block-video video { + width: 100%; +} + +.entry .entry-content .wp-block-button .wp-block-button__link { + transition: background 150ms ease-in-out; + border: none; + font-size: 0.88889em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + box-sizing: border-box; + font-weight: bold; + text-decoration: none; + padding: 0.76rem 1rem; + outline: none; + outline: none; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:not(.has-background) { + background-color: #0073aa; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:not(.has-text-color) { + color: white; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:hover { + color: white; + background: #111; + cursor: pointer; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:focus { + color: white; + background: #111; + outline: thin dotted; + outline-offset: -4px; +} + +.entry .entry-content .wp-block-button:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link, +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus, +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:active { + transition: all 150ms ease-in-out; + border-width: 2px; + border-style: solid; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-background), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus:not(.has-background), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:active:not(.has-background) { + background: transparent; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus:not(.has-text-color), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:active:not(.has-text-color) { + color: #0073aa; + border-color: currentColor; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:hover { + color: white; + border-color: #111; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:hover:not(.has-background) { + color: #111; +} + +.entry .entry-content .wp-block-archives, +.entry .entry-content .wp-block-categories, +.entry .entry-content .wp-block-latest-posts { + padding: 0; + list-style: none; +} + +.entry .entry-content .wp-block-archives li, +.entry .entry-content .wp-block-categories li, +.entry .entry-content .wp-block-latest-posts li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.125); + font-weight: bold; + line-height: 1.2; + padding-bottom: 0.75rem; +} + +.entry .entry-content .wp-block-archives li.menu-item-has-children, .entry .entry-content .wp-block-archives li:last-child, +.entry .entry-content .wp-block-categories li.menu-item-has-children, +.entry .entry-content .wp-block-categories li:last-child, +.entry .entry-content .wp-block-latest-posts li.menu-item-has-children, +.entry .entry-content .wp-block-latest-posts li:last-child { + padding-bottom: 0; +} + +.entry .entry-content .wp-block-archives li a, +.entry .entry-content .wp-block-categories li a, +.entry .entry-content .wp-block-latest-posts li a { + text-decoration: none; +} + +.entry .entry-content .wp-block-archives.aligncenter, +.entry .entry-content .wp-block-categories.aligncenter { + text-align: center; +} + +.entry .entry-content .wp-block-categories ul { + padding-top: 0.75rem; +} + +.entry .entry-content .wp-block-categories li ul { + list-style: none; + padding-right: 0; +} + +.entry .entry-content .wp-block-categories ul { + counter-reset: submenu; +} + +.entry .entry-content .wp-block-categories ul > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li { + border-top: 2px solid #ccc; + padding-top: 1rem; + margin-bottom: 2rem; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li a:after { + content: ''; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li:last-child { + margin-bottom: auto; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li:last-child a:after { + content: ''; +} + +.entry .entry-content .wp-block-preformatted { + font-size: 0.71111em; + line-height: 1.8; + padding: 1rem; +} + +.entry .entry-content .wp-block-verse { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-size: 22px; + line-height: 1.8; +} + +.entry .entry-content .has-drop-cap:not(:focus):first-letter { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 3.375em; + line-height: 1; + font-weight: bold; + margin: 0 0 0 0.25em; +} + +.entry .entry-content .wp-block-pullquote { + border-color: transparent; + border-width: 2px; + padding: 1rem; +} + +.entry .entry-content .wp-block-pullquote blockquote { + color: #111; + border: none; + margin-top: calc(4 * 1rem); + margin-bottom: calc(4.33 * 1rem); + margin-left: 0; + padding-right: 0; +} + +.entry .entry-content .wp-block-pullquote p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +.entry .entry-content .wp-block-pullquote p em { + font-style: normal; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote p { + font-size: 2.25em; + } +} + +.entry .entry-content .wp-block-pullquote cite { + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + text-transform: none; + color: #767676; + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * 1.125)); +} + +.entry .entry-content .wp-block-pullquote.alignleft, .entry .entry-content .wp-block-pullquote.alignright { + width: 100%; + padding: 0; +} + +.entry .entry-content .wp-block-pullquote.alignleft blockquote, .entry .entry-content .wp-block-pullquote.alignright blockquote { + margin: 1rem 0; + padding: 0; + text-align: right; + max-width: 100%; +} + +.entry .entry-content .wp-block-pullquote.alignleft blockquote p:first-child, .entry .entry-content .wp-block-pullquote.alignright blockquote p:first-child { + margin-top: 0; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color { + background-color: #0073aa; + padding-right: 0; + padding-left: 0; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color { + padding-right: 10%; + padding-left: 10%; + } +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 1.6875em; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 2.25em; + } +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color a { + color: #fff; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color cite { + color: inherit; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote { + max-width: 100%; + color: #fff; + padding-right: 0; + margin-right: 1rem; + margin-left: 1rem; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-text-color p, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-text-color a, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-white-color { + color: inherit; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote { + margin-right: 0; + margin-left: 0; + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color.alignright, .entry .entry-content .wp-block-pullquote.is-style-solid-color.alignleft { + padding: 1rem calc(2 * 1rem); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color.alignfull { + padding-right: calc(10% + 58px + (2 * 1rem)); + padding-left: calc(10% + 58px + (2 * 1rem)); + } +} + +.entry .entry-content .wp-block-quote:not(.is-large), .entry .entry-content .wp-block-quote:not(.is-style-large) { + border-width: 2px; + border-color: #0073aa; + padding-top: 0; + padding-bottom: 0; +} + +.entry .entry-content .wp-block-quote p { + font-size: 1em; + font-style: normal; + line-height: 1.8; +} + +.entry .entry-content .wp-block-quote cite { + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * 1.125)); +} + +.entry .entry-content .wp-block-quote.is-large, .entry .entry-content .wp-block-quote.is-style-large { + margin: 1rem 0; + padding: 0; + border-right: none; +} + +.entry .entry-content .wp-block-quote.is-large p, .entry .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + line-height: 1.4; + font-style: italic; +} + +.entry .entry-content .wp-block-quote.is-large cite, +.entry .entry-content .wp-block-quote.is-large footer, .entry .entry-content .wp-block-quote.is-style-large cite, +.entry .entry-content .wp-block-quote.is-style-large footer { + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * 1.125)); +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-quote.is-large, .entry .entry-content .wp-block-quote.is-style-large { + margin: 1rem 0; + padding: 1rem 0; + } + .entry .entry-content .wp-block-quote.is-large p, .entry .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + } +} + +.entry .entry-content .wp-block-image { + max-width: 100%; +} + +.entry .entry-content .wp-block-image img { + display: block; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-image .aligncenter { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-image .aligncenter { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-image .aligncenter { + margin: 0; + width: calc(8 * (100vw / 12) - 28px); + } + .entry .entry-content .wp-block-image .aligncenter img { + margin: 0 auto; + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-image .aligncenter { + width: calc(6 * (100vw / 12) - 28px); + } + .entry .entry-content .wp-block-image .aligncenter img { + margin: 0 auto; + } +} + +.entry .entry-content .wp-block-image.alignfull img { + width: 100vw; + max-width: calc( 100% + (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-image.alignfull img { + max-width: calc( 125% + 150px); + margin-right: auto; + margin-left: auto; + } +} + +.entry .entry-content .wp-block-cover-image, +.entry .entry-content .wp-block-cover { + position: relative; + min-height: 430px; + padding: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image, + .entry .entry-content .wp-block-cover { + padding: 1rem 10%; + } +} + +.entry .entry-content .wp-block-cover-image .wp-block-cover-image-text, +.entry .entry-content .wp-block-cover-image .wp-block-cover-text, +.entry .entry-content .wp-block-cover-image h2, +.entry .entry-content .wp-block-cover .wp-block-cover-image-text, +.entry .entry-content .wp-block-cover .wp-block-cover-text, +.entry .entry-content .wp-block-cover h2 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 1.6875em; + font-weight: bold; + line-height: 1.25; + padding: 0; + color: #fff; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image h2, + .entry .entry-content .wp-block-cover .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover .wp-block-cover-text, + .entry .entry-content .wp-block-cover h2 { + font-size: 2.25em; + max-width: 100%; + } +} + +.entry .entry-content .wp-block-cover-image.alignleft, .entry .entry-content .wp-block-cover-image.alignright, +.entry .entry-content .wp-block-cover.alignleft, +.entry .entry-content .wp-block-cover.alignright { + width: 100%; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image.alignleft, .entry .entry-content .wp-block-cover-image.alignright, + .entry .entry-content .wp-block-cover.alignleft, + .entry .entry-content .wp-block-cover.alignright { + padding: 1rem calc(2 * 1rem); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image.alignfull h2, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover.alignfull h2 { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image.alignfull h2, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover.alignfull h2 { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image.alignfull, + .entry .entry-content .wp-block-cover.alignfull { + padding-right: calc(10% + 58px + (2 * 1rem)); + padding-left: calc(10% + 58px + (2 * 1rem)); + } + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image.alignfull h2, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover.alignfull h2 { + padding: 0; + } +} + +.entry .entry-content .wp-block-gallery { + list-style-type: none; + padding-right: 0; +} + +.entry .entry-content .wp-block-gallery .blocks-gallery-image:last-child, +.entry .entry-content .wp-block-gallery .blocks-gallery-item:last-child { + margin-bottom: 16px; +} + +.entry .entry-content .wp-block-gallery figcaption a { + color: #fff; +} + +.entry .entry-content .wp-block-audio figcaption, +.entry .entry-content .wp-block-video figcaption, +.entry .entry-content .wp-block-image figcaption, +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption, +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption { + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: center; +} + +.entry .entry-content .wp-block-separator, +.entry .entry-content hr { + background-color: #767676; + border: 0; + height: 2px; + margin-bottom: 2rem; + margin-top: 2rem; + max-width: 2.25em; + text-align: right; + /* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ +} + +.entry .entry-content .wp-block-separator.is-style-wide, +.entry .entry-content hr.is-style-wide { + max-width: 100%; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-separator.is-style-wide, + .entry .entry-content hr.is-style-wide { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-separator.is-style-wide, + .entry .entry-content hr.is-style-wide { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.entry .entry-content .wp-block-separator.is-style-dots, +.entry .entry-content hr.is-style-dots { + max-width: 100%; + background-color: inherit; + border: inherit; + height: inherit; + text-align: center; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-separator.is-style-dots, + .entry .entry-content hr.is-style-dots { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-separator.is-style-dots, + .entry .entry-content hr.is-style-dots { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.entry .entry-content .wp-block-separator.is-style-dots:before, +.entry .entry-content hr.is-style-dots:before { + color: #767676; + font-size: 1.6875em; + letter-spacing: 0.88889em; + padding-right: 0.88889em; +} + +.entry .entry-content .wp-block-separator + h1:before, +.entry .entry-content .wp-block-separator + h2:before, +.entry .entry-content hr + h1:before, +.entry .entry-content hr + h2:before { + display: none; +} + +.entry .entry-content .wp-block-embed-twitter { + word-break: break-word; +} + +.entry .entry-content .wp-block-table th, +.entry .entry-content .wp-block-table td { + border-color: #767676; +} + +.entry .entry-content .wp-block-file { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.entry .entry-content .wp-block-file .wp-block-file__button { + display: table; + transition: background 150ms ease-in-out; + border: none; + border-radius: 5px; + background: #0073aa; + font-size: 22px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + text-decoration: none; + font-weight: bold; + padding: 0.75rem 1rem; + color: #fff; + margin-right: 0; + margin-top: calc(0.75 * 1rem); +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-file .wp-block-file__button { + font-size: 22px; + padding: 0.875rem 1.5rem; + } +} + +.entry .entry-content .wp-block-file .wp-block-file__button:hover { + background: #111; + cursor: pointer; +} + +.entry .entry-content .wp-block-file .wp-block-file__button:focus { + background: #111; + outline: thin dotted; + outline-offset: -4px; +} + +.entry .entry-content .wp-block-code { + border-radius: 0; +} + +.entry .entry-content .wp-block-code code { + font-size: 1.125em; + white-space: pre-wrap; + word-break: break-word; +} + +.entry .entry-content .wp-block-columns .wp-block-column > *:first-child { + margin-top: 0; +} + +.entry .entry-content .wp-block-columns .wp-block-column > *:last-child { + margin-bottom: 0; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-columns { + flex-wrap: nowrap; + } + .entry .entry-content .wp-block-columns .wp-block-column:not(:first-child) { + margin-right: 32px; + } +} + +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta .wp-block-latest-comments__comment-date { + font-weight: normal; +} + +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment, +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-date, +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.entry .entry-content .wp-block-latest-comments.has-dates .wp-block-latest-comments__comment-date { + font-size: 0.71111em; +} + +.entry .entry-content .has-small-font-size { + font-size: 0.88889em; +} + +.entry .entry-content .has-normal-font-size { + font-size: 1.125em; +} + +.entry .entry-content .has-large-font-size { + font-size: 1.6875em; +} + +.entry .entry-content .has-huge-font-size { + font-size: 2.25em; +} + +.entry .entry-content .has-primary-background-color, +.entry .entry-content .has-secondary-background-color, +.entry .entry-content .has-dark-gray-background-color, +.entry .entry-content .has-light-gray-background-color { + color: #fff; +} + +.entry .entry-content .has-primary-background-color > p, +.entry .entry-content .has-primary-background-color > h1, +.entry .entry-content .has-primary-background-color > h2, +.entry .entry-content .has-primary-background-color > h3, +.entry .entry-content .has-primary-background-color > h4, +.entry .entry-content .has-primary-background-color > h5, +.entry .entry-content .has-primary-background-color > h6, +.entry .entry-content .has-primary-background-color > a, +.entry .entry-content .has-secondary-background-color > p, +.entry .entry-content .has-secondary-background-color > h1, +.entry .entry-content .has-secondary-background-color > h2, +.entry .entry-content .has-secondary-background-color > h3, +.entry .entry-content .has-secondary-background-color > h4, +.entry .entry-content .has-secondary-background-color > h5, +.entry .entry-content .has-secondary-background-color > h6, +.entry .entry-content .has-secondary-background-color > a, +.entry .entry-content .has-dark-gray-background-color > p, +.entry .entry-content .has-dark-gray-background-color > h1, +.entry .entry-content .has-dark-gray-background-color > h2, +.entry .entry-content .has-dark-gray-background-color > h3, +.entry .entry-content .has-dark-gray-background-color > h4, +.entry .entry-content .has-dark-gray-background-color > h5, +.entry .entry-content .has-dark-gray-background-color > h6, +.entry .entry-content .has-dark-gray-background-color > a, +.entry .entry-content .has-light-gray-background-color > p, +.entry .entry-content .has-light-gray-background-color > h1, +.entry .entry-content .has-light-gray-background-color > h2, +.entry .entry-content .has-light-gray-background-color > h3, +.entry .entry-content .has-light-gray-background-color > h4, +.entry .entry-content .has-light-gray-background-color > h5, +.entry .entry-content .has-light-gray-background-color > h6, +.entry .entry-content .has-light-gray-background-color > a { + color: #fff; +} + +.entry .entry-content .has-white-background-color { + color: #111; +} + +.entry .entry-content .has-white-background-color > p, +.entry .entry-content .has-white-background-color > h1, +.entry .entry-content .has-white-background-color > h2, +.entry .entry-content .has-white-background-color > h3, +.entry .entry-content .has-white-background-color > h4, +.entry .entry-content .has-white-background-color > h5, +.entry .entry-content .has-white-background-color > h6, +.entry .entry-content .has-white-background-color > a { + color: #111; +} + +.entry .entry-content .has-primary-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-primary-background-color { + background-color: #0073aa; +} + +.entry .entry-content .has-secondary-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-secondary-background-color { + background-color: #005177; +} + +.entry .entry-content .has-dark-gray-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-dark-gray-background-color { + background-color: #111; +} + +.entry .entry-content .has-light-gray-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-light-gray-background-color { + background-color: #767676; +} + +.entry .entry-content .has-white-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-white-background-color { + background-color: #FFF; +} + +.entry .entry-content .has-primary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color > p { + color: #0073aa; +} + +.entry .entry-content .has-secondary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color > p { + color: #005177; +} + +.entry .entry-content .has-dark-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color > p { + color: #111; +} + +.entry .entry-content .has-light-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color > p { + color: #767676; +} + +.entry .entry-content .has-white-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-white-color { + color: #FFF; +} + +/* Media */ +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +embed, +iframe, +object { + max-width: 100%; +} + +.custom-logo-link { + display: inline-block; +} + +.avatar { + border-radius: 100%; + display: block; + height: calc(2.25 * 1rem); + min-height: inherit; + width: calc(2.25 * 1rem); +} + +svg { + transition: fill 120ms ease-in-out; + fill: currentColor; +} + +/*-------------------------------------------------------------- +## Captions +--------------------------------------------------------------*/ +.wp-caption { + margin-bottom: calc(1.5 * 1rem); +} + +@media only screen and (min-width: 768px) { + .wp-caption.aligncenter { + position: relative; + right: calc( calc(8 * (100vw / 12) - 28px) / 2); + transform: translateX(50%); + } +} + +@media only screen and (min-width: 1168px) { + .wp-caption.aligncenter { + right: calc( calc(6 * (100vw / 12) - 28px) / 2); + } +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-right: auto; + margin-left: auto; +} + +.wp-caption-text { + color: #767676; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: center; +} + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +.gallery { + display: flex; + flex-flow: row wrap; + justify-content: center; + margin-bottom: calc(1.5 * 1rem); +} + +.gallery-item { + display: inline-block; + margin-left: 16px; + margin-bottom: 16px; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: calc((100% - 16px * 1) / 2); +} + +.gallery-columns-2 .gallery-item:nth-of-type(2n+2) { + margin-left: 0; +} + +.gallery-columns-3 .gallery-item { + max-width: calc((100% - 16px * 2) / 3); +} + +.gallery-columns-3 .gallery-item:nth-of-type(3n+3) { + margin-left: 0; +} + +.gallery-columns-4 .gallery-item { + max-width: calc((100% - 16px * 3) / 4); +} + +.gallery-columns-4 .gallery-item:nth-of-type(4n+4) { + margin-left: 0; +} + +.gallery-columns-5 .gallery-item { + max-width: calc((100% - 16px * 4) / 5); +} + +.gallery-columns-5 .gallery-item:nth-of-type(5n+5) { + margin-left: 0; +} + +.gallery-columns-6 .gallery-item { + max-width: calc((100% - 16px * 5) / 6); +} + +.gallery-columns-6 .gallery-item:nth-of-type(6n+6) { + margin-left: 0; +} + +.gallery-columns-7 .gallery-item { + max-width: calc((100% - 16px * 6) / 7); +} + +.gallery-columns-7 .gallery-item:nth-of-type(7n+7) { + margin-left: 0; +} + +.gallery-columns-8 .gallery-item { + max-width: calc((100% - 16px * 7) / 8); +} + +.gallery-columns-8 .gallery-item:nth-of-type(8n+8) { + margin-left: 0; +} + +.gallery-columns-9 .gallery-item { + max-width: calc((100% - 16px * 8) / 9); +} + +.gallery-columns-9 .gallery-item:nth-of-type(9n+9) { + margin-left: 0; +} + +.gallery-item:last-of-type { + padding-left: 0; +} + +.gallery-caption { + display: block; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; +} + +.gallery-item > div > a { + display: block; + line-height: 0; + box-shadow: 0 0 0 0 transparent; +} + +.gallery-item > div > a:focus { + box-shadow: 0 0 0 2px #0073aa; +} diff --git a/wp-content/themes/twentynineteen/style.css b/wp-content/themes/twentynineteen/style.css new file mode 100644 index 000000000..ccf9014fa --- /dev/null +++ b/wp-content/themes/twentynineteen/style.css @@ -0,0 +1,6381 @@ +@charset "UTF-8"; +/* +Theme Name: Twenty Nineteen +Theme URI: https://wordpress.org/themes/twentynineteen/ +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: Our 2019 default theme is designed to show off the power of the block editor. It features custom styles for all the default blocks, and is built so that what you see in the editor looks like what you'll see on your website. Twenty Nineteen is designed to be adaptable to a wide range of websites, whether you’re running a photo blog, launching a new business, or supporting a non-profit. Featuring ample whitespace and modern sans-serif headlines paired with classic serif body text, it's built to be beautiful on all screen sizes. +Requires at least: WordPress 4.9.6 +Version: 1.4 +License: GNU General Public License v2 or later +License URI: LICENSE +Text Domain: twentynineteen +Tags: one-column, flexible-header, accessibility-ready, custom-colors, custom-menu, custom-logo, editor-style, featured-images, footer-widgets, rtl-language-support, sticky-post, threaded-comments, translation-ready + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. + +Twenty Nineteen is based on Underscores https://underscores.me/, (C) 2012-2018 Automattic, Inc. +Underscores is distributed under the terms of the GNU GPL v2 or later. + +Normalizing styles have been helped along thanks to the fine work of +Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ +*/ +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Variables +# Normalize +# Typography + ## Headings + ## Copy +# Elements + ## Lists + ## Tables +# Forms + ## Buttons + ## Fields +# Navigation + ## Links + ## Menus + ## Next & Previous +# Accessibility +# Alignments +# Clearings +# Layout +# Widgets +# Content + ## Archives + ## Posts and pages + ## Comments +# Blocks +# Media + ## Captions + ## Galleries +--------------------------------------------------------------*/ +/* + * Chrome renders extra-wide   characters for the Hoefler Text font. + * This results in a jumping cursor when typing in both the Classic and block + * editors. The following font-face override fixes the issue by manually inserting + * a custom font that includes just a Hoefler Text space replacement for that + * character instead. + */ +@font-face { + font-family: 'NonBreakingSpaceOverride'; + src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format("woff"); +} + +/* If we add the border using a regular CSS border, it won't look good on non-retina devices, + * since its edges can look jagged due to lack of antialiasing. In this case, we are several + * layers of box-shadow to add the border visually, which will render the border smoother. */ +/* Calculates maximum width for post content */ +/* Nested sub-menu padding: 10 levels deep */ +/* Ensure all font family declarations come with non-latin fallbacks */ +/* Build our non-latin font styles */ +body:lang(ar), button:lang(ar), +input:lang(ar), +select:lang(ar), +optgroup:lang(ar), +textarea:lang(ar), .author-description .author-link:lang(ar), +.comment-metadata:lang(ar), +.comment-reply-link:lang(ar), +.comments-title:lang(ar), +.comment-author .fn:lang(ar), +.discussion-meta-info:lang(ar), +.entry-meta:lang(ar), +.entry-footer:lang(ar), +.main-navigation:lang(ar), +.no-comments:lang(ar), +.not-found .page-title:lang(ar), +.error-404 .page-title:lang(ar), +.post-navigation .post-title:lang(ar), +.page-links:lang(ar), +.page-description:lang(ar), +.pagination .nav-links:lang(ar), +.sticky-post:lang(ar), +.site-title:lang(ar), +.site-info:lang(ar), +#cancel-comment-reply-link:lang(ar), +h1:lang(ar), +h2:lang(ar), +h3:lang(ar), +h4:lang(ar), +h5:lang(ar), +h6:lang(ar), .page-title:lang(ar), blockquote cite:lang(ar), table:lang(ar), .button:lang(ar), +input:lang(ar)[type="button"], +input:lang(ar)[type="reset"], +input:lang(ar)[type="submit"], .comment-navigation .nav-previous:lang(ar), +.comment-navigation .nav-next:lang(ar), .comment-list .pingback .comment-body:lang(ar), +.comment-list .trackback .comment-body:lang(ar), .comment-list .pingback .comment-body .comment-edit-link:lang(ar), +.comment-list .trackback .comment-body .comment-edit-link:lang(ar), .comment-form .comment-notes:lang(ar), +.comment-form label:lang(ar), .widget_archive ul li:lang(ar), +.widget_categories ul li:lang(ar), +.widget_meta ul li:lang(ar), +.widget_nav_menu ul li:lang(ar), +.widget_pages ul li:lang(ar), +.widget_recent_comments ul li:lang(ar), +.widget_recent_entries ul li:lang(ar), +.widget_rss ul li:lang(ar), .widget_tag_cloud .tagcloud:lang(ar), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ar), .entry .entry-content .wp-block-archives li:lang(ar), +.entry .entry-content .wp-block-categories li:lang(ar), +.entry .entry-content .wp-block-latest-posts li:lang(ar), .entry .entry-content .wp-block-verse:lang(ar), .entry .entry-content .has-drop-cap:lang(ar):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ar), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ar), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ar), +.entry .entry-content .wp-block-cover-image h2:lang(ar), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ar), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ar), +.entry .entry-content .wp-block-cover h2:lang(ar), .entry .entry-content .wp-block-audio figcaption:lang(ar), +.entry .entry-content .wp-block-video figcaption:lang(ar), +.entry .entry-content .wp-block-image figcaption:lang(ar), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ar), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ar), .entry .entry-content .wp-block-file:lang(ar), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ar), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ar), .wp-caption-text:lang(ar), .gallery-caption:lang(ar) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(ary), button:lang(ary), +input:lang(ary), +select:lang(ary), +optgroup:lang(ary), +textarea:lang(ary), .author-description .author-link:lang(ary), +.comment-metadata:lang(ary), +.comment-reply-link:lang(ary), +.comments-title:lang(ary), +.comment-author .fn:lang(ary), +.discussion-meta-info:lang(ary), +.entry-meta:lang(ary), +.entry-footer:lang(ary), +.main-navigation:lang(ary), +.no-comments:lang(ary), +.not-found .page-title:lang(ary), +.error-404 .page-title:lang(ary), +.post-navigation .post-title:lang(ary), +.page-links:lang(ary), +.page-description:lang(ary), +.pagination .nav-links:lang(ary), +.sticky-post:lang(ary), +.site-title:lang(ary), +.site-info:lang(ary), +#cancel-comment-reply-link:lang(ary), +h1:lang(ary), +h2:lang(ary), +h3:lang(ary), +h4:lang(ary), +h5:lang(ary), +h6:lang(ary), .page-title:lang(ary), blockquote cite:lang(ary), table:lang(ary), .button:lang(ary), +input:lang(ary)[type="button"], +input:lang(ary)[type="reset"], +input:lang(ary)[type="submit"], .comment-navigation .nav-previous:lang(ary), +.comment-navigation .nav-next:lang(ary), .comment-list .pingback .comment-body:lang(ary), +.comment-list .trackback .comment-body:lang(ary), .comment-list .pingback .comment-body .comment-edit-link:lang(ary), +.comment-list .trackback .comment-body .comment-edit-link:lang(ary), .comment-form .comment-notes:lang(ary), +.comment-form label:lang(ary), .widget_archive ul li:lang(ary), +.widget_categories ul li:lang(ary), +.widget_meta ul li:lang(ary), +.widget_nav_menu ul li:lang(ary), +.widget_pages ul li:lang(ary), +.widget_recent_comments ul li:lang(ary), +.widget_recent_entries ul li:lang(ary), +.widget_rss ul li:lang(ary), .widget_tag_cloud .tagcloud:lang(ary), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ary), .entry .entry-content .wp-block-archives li:lang(ary), +.entry .entry-content .wp-block-categories li:lang(ary), +.entry .entry-content .wp-block-latest-posts li:lang(ary), .entry .entry-content .wp-block-verse:lang(ary), .entry .entry-content .has-drop-cap:lang(ary):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ary), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ary), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ary), +.entry .entry-content .wp-block-cover-image h2:lang(ary), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ary), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ary), +.entry .entry-content .wp-block-cover h2:lang(ary), .entry .entry-content .wp-block-audio figcaption:lang(ary), +.entry .entry-content .wp-block-video figcaption:lang(ary), +.entry .entry-content .wp-block-image figcaption:lang(ary), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ary), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ary), .entry .entry-content .wp-block-file:lang(ary), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ary), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ary), .wp-caption-text:lang(ary), .gallery-caption:lang(ary) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(azb), button:lang(azb), +input:lang(azb), +select:lang(azb), +optgroup:lang(azb), +textarea:lang(azb), .author-description .author-link:lang(azb), +.comment-metadata:lang(azb), +.comment-reply-link:lang(azb), +.comments-title:lang(azb), +.comment-author .fn:lang(azb), +.discussion-meta-info:lang(azb), +.entry-meta:lang(azb), +.entry-footer:lang(azb), +.main-navigation:lang(azb), +.no-comments:lang(azb), +.not-found .page-title:lang(azb), +.error-404 .page-title:lang(azb), +.post-navigation .post-title:lang(azb), +.page-links:lang(azb), +.page-description:lang(azb), +.pagination .nav-links:lang(azb), +.sticky-post:lang(azb), +.site-title:lang(azb), +.site-info:lang(azb), +#cancel-comment-reply-link:lang(azb), +h1:lang(azb), +h2:lang(azb), +h3:lang(azb), +h4:lang(azb), +h5:lang(azb), +h6:lang(azb), .page-title:lang(azb), blockquote cite:lang(azb), table:lang(azb), .button:lang(azb), +input:lang(azb)[type="button"], +input:lang(azb)[type="reset"], +input:lang(azb)[type="submit"], .comment-navigation .nav-previous:lang(azb), +.comment-navigation .nav-next:lang(azb), .comment-list .pingback .comment-body:lang(azb), +.comment-list .trackback .comment-body:lang(azb), .comment-list .pingback .comment-body .comment-edit-link:lang(azb), +.comment-list .trackback .comment-body .comment-edit-link:lang(azb), .comment-form .comment-notes:lang(azb), +.comment-form label:lang(azb), .widget_archive ul li:lang(azb), +.widget_categories ul li:lang(azb), +.widget_meta ul li:lang(azb), +.widget_nav_menu ul li:lang(azb), +.widget_pages ul li:lang(azb), +.widget_recent_comments ul li:lang(azb), +.widget_recent_entries ul li:lang(azb), +.widget_rss ul li:lang(azb), .widget_tag_cloud .tagcloud:lang(azb), .entry .entry-content .wp-block-button .wp-block-button__link:lang(azb), .entry .entry-content .wp-block-archives li:lang(azb), +.entry .entry-content .wp-block-categories li:lang(azb), +.entry .entry-content .wp-block-latest-posts li:lang(azb), .entry .entry-content .wp-block-verse:lang(azb), .entry .entry-content .has-drop-cap:lang(azb):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(azb), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(azb), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(azb), +.entry .entry-content .wp-block-cover-image h2:lang(azb), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(azb), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(azb), +.entry .entry-content .wp-block-cover h2:lang(azb), .entry .entry-content .wp-block-audio figcaption:lang(azb), +.entry .entry-content .wp-block-video figcaption:lang(azb), +.entry .entry-content .wp-block-image figcaption:lang(azb), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(azb), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(azb), .entry .entry-content .wp-block-file:lang(azb), .entry .entry-content .wp-block-file .wp-block-file__button:lang(azb), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(azb), .wp-caption-text:lang(azb), .gallery-caption:lang(azb) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(ckb), button:lang(ckb), +input:lang(ckb), +select:lang(ckb), +optgroup:lang(ckb), +textarea:lang(ckb), .author-description .author-link:lang(ckb), +.comment-metadata:lang(ckb), +.comment-reply-link:lang(ckb), +.comments-title:lang(ckb), +.comment-author .fn:lang(ckb), +.discussion-meta-info:lang(ckb), +.entry-meta:lang(ckb), +.entry-footer:lang(ckb), +.main-navigation:lang(ckb), +.no-comments:lang(ckb), +.not-found .page-title:lang(ckb), +.error-404 .page-title:lang(ckb), +.post-navigation .post-title:lang(ckb), +.page-links:lang(ckb), +.page-description:lang(ckb), +.pagination .nav-links:lang(ckb), +.sticky-post:lang(ckb), +.site-title:lang(ckb), +.site-info:lang(ckb), +#cancel-comment-reply-link:lang(ckb), +h1:lang(ckb), +h2:lang(ckb), +h3:lang(ckb), +h4:lang(ckb), +h5:lang(ckb), +h6:lang(ckb), .page-title:lang(ckb), blockquote cite:lang(ckb), table:lang(ckb), .button:lang(ckb), +input:lang(ckb)[type="button"], +input:lang(ckb)[type="reset"], +input:lang(ckb)[type="submit"], .comment-navigation .nav-previous:lang(ckb), +.comment-navigation .nav-next:lang(ckb), .comment-list .pingback .comment-body:lang(ckb), +.comment-list .trackback .comment-body:lang(ckb), .comment-list .pingback .comment-body .comment-edit-link:lang(ckb), +.comment-list .trackback .comment-body .comment-edit-link:lang(ckb), .comment-form .comment-notes:lang(ckb), +.comment-form label:lang(ckb), .widget_archive ul li:lang(ckb), +.widget_categories ul li:lang(ckb), +.widget_meta ul li:lang(ckb), +.widget_nav_menu ul li:lang(ckb), +.widget_pages ul li:lang(ckb), +.widget_recent_comments ul li:lang(ckb), +.widget_recent_entries ul li:lang(ckb), +.widget_rss ul li:lang(ckb), .widget_tag_cloud .tagcloud:lang(ckb), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ckb), .entry .entry-content .wp-block-archives li:lang(ckb), +.entry .entry-content .wp-block-categories li:lang(ckb), +.entry .entry-content .wp-block-latest-posts li:lang(ckb), .entry .entry-content .wp-block-verse:lang(ckb), .entry .entry-content .has-drop-cap:lang(ckb):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ckb), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ckb), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ckb), +.entry .entry-content .wp-block-cover-image h2:lang(ckb), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ckb), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ckb), +.entry .entry-content .wp-block-cover h2:lang(ckb), .entry .entry-content .wp-block-audio figcaption:lang(ckb), +.entry .entry-content .wp-block-video figcaption:lang(ckb), +.entry .entry-content .wp-block-image figcaption:lang(ckb), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ckb), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ckb), .entry .entry-content .wp-block-file:lang(ckb), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ckb), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ckb), .wp-caption-text:lang(ckb), .gallery-caption:lang(ckb) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(fa-IR), button:lang(fa-IR), +input:lang(fa-IR), +select:lang(fa-IR), +optgroup:lang(fa-IR), +textarea:lang(fa-IR), .author-description .author-link:lang(fa-IR), +.comment-metadata:lang(fa-IR), +.comment-reply-link:lang(fa-IR), +.comments-title:lang(fa-IR), +.comment-author .fn:lang(fa-IR), +.discussion-meta-info:lang(fa-IR), +.entry-meta:lang(fa-IR), +.entry-footer:lang(fa-IR), +.main-navigation:lang(fa-IR), +.no-comments:lang(fa-IR), +.not-found .page-title:lang(fa-IR), +.error-404 .page-title:lang(fa-IR), +.post-navigation .post-title:lang(fa-IR), +.page-links:lang(fa-IR), +.page-description:lang(fa-IR), +.pagination .nav-links:lang(fa-IR), +.sticky-post:lang(fa-IR), +.site-title:lang(fa-IR), +.site-info:lang(fa-IR), +#cancel-comment-reply-link:lang(fa-IR), +h1:lang(fa-IR), +h2:lang(fa-IR), +h3:lang(fa-IR), +h4:lang(fa-IR), +h5:lang(fa-IR), +h6:lang(fa-IR), .page-title:lang(fa-IR), blockquote cite:lang(fa-IR), table:lang(fa-IR), .button:lang(fa-IR), +input:lang(fa-IR)[type="button"], +input:lang(fa-IR)[type="reset"], +input:lang(fa-IR)[type="submit"], .comment-navigation .nav-previous:lang(fa-IR), +.comment-navigation .nav-next:lang(fa-IR), .comment-list .pingback .comment-body:lang(fa-IR), +.comment-list .trackback .comment-body:lang(fa-IR), .comment-list .pingback .comment-body .comment-edit-link:lang(fa-IR), +.comment-list .trackback .comment-body .comment-edit-link:lang(fa-IR), .comment-form .comment-notes:lang(fa-IR), +.comment-form label:lang(fa-IR), .widget_archive ul li:lang(fa-IR), +.widget_categories ul li:lang(fa-IR), +.widget_meta ul li:lang(fa-IR), +.widget_nav_menu ul li:lang(fa-IR), +.widget_pages ul li:lang(fa-IR), +.widget_recent_comments ul li:lang(fa-IR), +.widget_recent_entries ul li:lang(fa-IR), +.widget_rss ul li:lang(fa-IR), .widget_tag_cloud .tagcloud:lang(fa-IR), .entry .entry-content .wp-block-button .wp-block-button__link:lang(fa-IR), .entry .entry-content .wp-block-archives li:lang(fa-IR), +.entry .entry-content .wp-block-categories li:lang(fa-IR), +.entry .entry-content .wp-block-latest-posts li:lang(fa-IR), .entry .entry-content .wp-block-verse:lang(fa-IR), .entry .entry-content .has-drop-cap:lang(fa-IR):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(fa-IR), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(fa-IR), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(fa-IR), +.entry .entry-content .wp-block-cover-image h2:lang(fa-IR), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(fa-IR), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(fa-IR), +.entry .entry-content .wp-block-cover h2:lang(fa-IR), .entry .entry-content .wp-block-audio figcaption:lang(fa-IR), +.entry .entry-content .wp-block-video figcaption:lang(fa-IR), +.entry .entry-content .wp-block-image figcaption:lang(fa-IR), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(fa-IR), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(fa-IR), .entry .entry-content .wp-block-file:lang(fa-IR), .entry .entry-content .wp-block-file .wp-block-file__button:lang(fa-IR), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(fa-IR), .wp-caption-text:lang(fa-IR), .gallery-caption:lang(fa-IR) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(haz), button:lang(haz), +input:lang(haz), +select:lang(haz), +optgroup:lang(haz), +textarea:lang(haz), .author-description .author-link:lang(haz), +.comment-metadata:lang(haz), +.comment-reply-link:lang(haz), +.comments-title:lang(haz), +.comment-author .fn:lang(haz), +.discussion-meta-info:lang(haz), +.entry-meta:lang(haz), +.entry-footer:lang(haz), +.main-navigation:lang(haz), +.no-comments:lang(haz), +.not-found .page-title:lang(haz), +.error-404 .page-title:lang(haz), +.post-navigation .post-title:lang(haz), +.page-links:lang(haz), +.page-description:lang(haz), +.pagination .nav-links:lang(haz), +.sticky-post:lang(haz), +.site-title:lang(haz), +.site-info:lang(haz), +#cancel-comment-reply-link:lang(haz), +h1:lang(haz), +h2:lang(haz), +h3:lang(haz), +h4:lang(haz), +h5:lang(haz), +h6:lang(haz), .page-title:lang(haz), blockquote cite:lang(haz), table:lang(haz), .button:lang(haz), +input:lang(haz)[type="button"], +input:lang(haz)[type="reset"], +input:lang(haz)[type="submit"], .comment-navigation .nav-previous:lang(haz), +.comment-navigation .nav-next:lang(haz), .comment-list .pingback .comment-body:lang(haz), +.comment-list .trackback .comment-body:lang(haz), .comment-list .pingback .comment-body .comment-edit-link:lang(haz), +.comment-list .trackback .comment-body .comment-edit-link:lang(haz), .comment-form .comment-notes:lang(haz), +.comment-form label:lang(haz), .widget_archive ul li:lang(haz), +.widget_categories ul li:lang(haz), +.widget_meta ul li:lang(haz), +.widget_nav_menu ul li:lang(haz), +.widget_pages ul li:lang(haz), +.widget_recent_comments ul li:lang(haz), +.widget_recent_entries ul li:lang(haz), +.widget_rss ul li:lang(haz), .widget_tag_cloud .tagcloud:lang(haz), .entry .entry-content .wp-block-button .wp-block-button__link:lang(haz), .entry .entry-content .wp-block-archives li:lang(haz), +.entry .entry-content .wp-block-categories li:lang(haz), +.entry .entry-content .wp-block-latest-posts li:lang(haz), .entry .entry-content .wp-block-verse:lang(haz), .entry .entry-content .has-drop-cap:lang(haz):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(haz), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(haz), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(haz), +.entry .entry-content .wp-block-cover-image h2:lang(haz), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(haz), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(haz), +.entry .entry-content .wp-block-cover h2:lang(haz), .entry .entry-content .wp-block-audio figcaption:lang(haz), +.entry .entry-content .wp-block-video figcaption:lang(haz), +.entry .entry-content .wp-block-image figcaption:lang(haz), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(haz), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(haz), .entry .entry-content .wp-block-file:lang(haz), .entry .entry-content .wp-block-file .wp-block-file__button:lang(haz), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(haz), .wp-caption-text:lang(haz), .gallery-caption:lang(haz) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(ps), button:lang(ps), +input:lang(ps), +select:lang(ps), +optgroup:lang(ps), +textarea:lang(ps), .author-description .author-link:lang(ps), +.comment-metadata:lang(ps), +.comment-reply-link:lang(ps), +.comments-title:lang(ps), +.comment-author .fn:lang(ps), +.discussion-meta-info:lang(ps), +.entry-meta:lang(ps), +.entry-footer:lang(ps), +.main-navigation:lang(ps), +.no-comments:lang(ps), +.not-found .page-title:lang(ps), +.error-404 .page-title:lang(ps), +.post-navigation .post-title:lang(ps), +.page-links:lang(ps), +.page-description:lang(ps), +.pagination .nav-links:lang(ps), +.sticky-post:lang(ps), +.site-title:lang(ps), +.site-info:lang(ps), +#cancel-comment-reply-link:lang(ps), +h1:lang(ps), +h2:lang(ps), +h3:lang(ps), +h4:lang(ps), +h5:lang(ps), +h6:lang(ps), .page-title:lang(ps), blockquote cite:lang(ps), table:lang(ps), .button:lang(ps), +input:lang(ps)[type="button"], +input:lang(ps)[type="reset"], +input:lang(ps)[type="submit"], .comment-navigation .nav-previous:lang(ps), +.comment-navigation .nav-next:lang(ps), .comment-list .pingback .comment-body:lang(ps), +.comment-list .trackback .comment-body:lang(ps), .comment-list .pingback .comment-body .comment-edit-link:lang(ps), +.comment-list .trackback .comment-body .comment-edit-link:lang(ps), .comment-form .comment-notes:lang(ps), +.comment-form label:lang(ps), .widget_archive ul li:lang(ps), +.widget_categories ul li:lang(ps), +.widget_meta ul li:lang(ps), +.widget_nav_menu ul li:lang(ps), +.widget_pages ul li:lang(ps), +.widget_recent_comments ul li:lang(ps), +.widget_recent_entries ul li:lang(ps), +.widget_rss ul li:lang(ps), .widget_tag_cloud .tagcloud:lang(ps), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ps), .entry .entry-content .wp-block-archives li:lang(ps), +.entry .entry-content .wp-block-categories li:lang(ps), +.entry .entry-content .wp-block-latest-posts li:lang(ps), .entry .entry-content .wp-block-verse:lang(ps), .entry .entry-content .has-drop-cap:lang(ps):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ps), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ps), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ps), +.entry .entry-content .wp-block-cover-image h2:lang(ps), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ps), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ps), +.entry .entry-content .wp-block-cover h2:lang(ps), .entry .entry-content .wp-block-audio figcaption:lang(ps), +.entry .entry-content .wp-block-video figcaption:lang(ps), +.entry .entry-content .wp-block-image figcaption:lang(ps), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ps), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ps), .entry .entry-content .wp-block-file:lang(ps), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ps), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ps), .wp-caption-text:lang(ps), .gallery-caption:lang(ps) { + font-family: Tahoma, Arial, sans-serif; +} + +body:lang(be), button:lang(be), +input:lang(be), +select:lang(be), +optgroup:lang(be), +textarea:lang(be), .author-description .author-link:lang(be), +.comment-metadata:lang(be), +.comment-reply-link:lang(be), +.comments-title:lang(be), +.comment-author .fn:lang(be), +.discussion-meta-info:lang(be), +.entry-meta:lang(be), +.entry-footer:lang(be), +.main-navigation:lang(be), +.no-comments:lang(be), +.not-found .page-title:lang(be), +.error-404 .page-title:lang(be), +.post-navigation .post-title:lang(be), +.page-links:lang(be), +.page-description:lang(be), +.pagination .nav-links:lang(be), +.sticky-post:lang(be), +.site-title:lang(be), +.site-info:lang(be), +#cancel-comment-reply-link:lang(be), +h1:lang(be), +h2:lang(be), +h3:lang(be), +h4:lang(be), +h5:lang(be), +h6:lang(be), .page-title:lang(be), blockquote cite:lang(be), table:lang(be), .button:lang(be), +input:lang(be)[type="button"], +input:lang(be)[type="reset"], +input:lang(be)[type="submit"], .comment-navigation .nav-previous:lang(be), +.comment-navigation .nav-next:lang(be), .comment-list .pingback .comment-body:lang(be), +.comment-list .trackback .comment-body:lang(be), .comment-list .pingback .comment-body .comment-edit-link:lang(be), +.comment-list .trackback .comment-body .comment-edit-link:lang(be), .comment-form .comment-notes:lang(be), +.comment-form label:lang(be), .widget_archive ul li:lang(be), +.widget_categories ul li:lang(be), +.widget_meta ul li:lang(be), +.widget_nav_menu ul li:lang(be), +.widget_pages ul li:lang(be), +.widget_recent_comments ul li:lang(be), +.widget_recent_entries ul li:lang(be), +.widget_rss ul li:lang(be), .widget_tag_cloud .tagcloud:lang(be), .entry .entry-content .wp-block-button .wp-block-button__link:lang(be), .entry .entry-content .wp-block-archives li:lang(be), +.entry .entry-content .wp-block-categories li:lang(be), +.entry .entry-content .wp-block-latest-posts li:lang(be), .entry .entry-content .wp-block-verse:lang(be), .entry .entry-content .has-drop-cap:lang(be):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(be), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(be), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(be), +.entry .entry-content .wp-block-cover-image h2:lang(be), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(be), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(be), +.entry .entry-content .wp-block-cover h2:lang(be), .entry .entry-content .wp-block-audio figcaption:lang(be), +.entry .entry-content .wp-block-video figcaption:lang(be), +.entry .entry-content .wp-block-image figcaption:lang(be), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(be), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(be), .entry .entry-content .wp-block-file:lang(be), .entry .entry-content .wp-block-file .wp-block-file__button:lang(be), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(be), .wp-caption-text:lang(be), .gallery-caption:lang(be) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(bg-BG), button:lang(bg-BG), +input:lang(bg-BG), +select:lang(bg-BG), +optgroup:lang(bg-BG), +textarea:lang(bg-BG), .author-description .author-link:lang(bg-BG), +.comment-metadata:lang(bg-BG), +.comment-reply-link:lang(bg-BG), +.comments-title:lang(bg-BG), +.comment-author .fn:lang(bg-BG), +.discussion-meta-info:lang(bg-BG), +.entry-meta:lang(bg-BG), +.entry-footer:lang(bg-BG), +.main-navigation:lang(bg-BG), +.no-comments:lang(bg-BG), +.not-found .page-title:lang(bg-BG), +.error-404 .page-title:lang(bg-BG), +.post-navigation .post-title:lang(bg-BG), +.page-links:lang(bg-BG), +.page-description:lang(bg-BG), +.pagination .nav-links:lang(bg-BG), +.sticky-post:lang(bg-BG), +.site-title:lang(bg-BG), +.site-info:lang(bg-BG), +#cancel-comment-reply-link:lang(bg-BG), +h1:lang(bg-BG), +h2:lang(bg-BG), +h3:lang(bg-BG), +h4:lang(bg-BG), +h5:lang(bg-BG), +h6:lang(bg-BG), .page-title:lang(bg-BG), blockquote cite:lang(bg-BG), table:lang(bg-BG), .button:lang(bg-BG), +input:lang(bg-BG)[type="button"], +input:lang(bg-BG)[type="reset"], +input:lang(bg-BG)[type="submit"], .comment-navigation .nav-previous:lang(bg-BG), +.comment-navigation .nav-next:lang(bg-BG), .comment-list .pingback .comment-body:lang(bg-BG), +.comment-list .trackback .comment-body:lang(bg-BG), .comment-list .pingback .comment-body .comment-edit-link:lang(bg-BG), +.comment-list .trackback .comment-body .comment-edit-link:lang(bg-BG), .comment-form .comment-notes:lang(bg-BG), +.comment-form label:lang(bg-BG), .widget_archive ul li:lang(bg-BG), +.widget_categories ul li:lang(bg-BG), +.widget_meta ul li:lang(bg-BG), +.widget_nav_menu ul li:lang(bg-BG), +.widget_pages ul li:lang(bg-BG), +.widget_recent_comments ul li:lang(bg-BG), +.widget_recent_entries ul li:lang(bg-BG), +.widget_rss ul li:lang(bg-BG), .widget_tag_cloud .tagcloud:lang(bg-BG), .entry .entry-content .wp-block-button .wp-block-button__link:lang(bg-BG), .entry .entry-content .wp-block-archives li:lang(bg-BG), +.entry .entry-content .wp-block-categories li:lang(bg-BG), +.entry .entry-content .wp-block-latest-posts li:lang(bg-BG), .entry .entry-content .wp-block-verse:lang(bg-BG), .entry .entry-content .has-drop-cap:lang(bg-BG):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(bg-BG), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(bg-BG), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(bg-BG), +.entry .entry-content .wp-block-cover-image h2:lang(bg-BG), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(bg-BG), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(bg-BG), +.entry .entry-content .wp-block-cover h2:lang(bg-BG), .entry .entry-content .wp-block-audio figcaption:lang(bg-BG), +.entry .entry-content .wp-block-video figcaption:lang(bg-BG), +.entry .entry-content .wp-block-image figcaption:lang(bg-BG), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(bg-BG), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(bg-BG), .entry .entry-content .wp-block-file:lang(bg-BG), .entry .entry-content .wp-block-file .wp-block-file__button:lang(bg-BG), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(bg-BG), .wp-caption-text:lang(bg-BG), .gallery-caption:lang(bg-BG) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(kk), button:lang(kk), +input:lang(kk), +select:lang(kk), +optgroup:lang(kk), +textarea:lang(kk), .author-description .author-link:lang(kk), +.comment-metadata:lang(kk), +.comment-reply-link:lang(kk), +.comments-title:lang(kk), +.comment-author .fn:lang(kk), +.discussion-meta-info:lang(kk), +.entry-meta:lang(kk), +.entry-footer:lang(kk), +.main-navigation:lang(kk), +.no-comments:lang(kk), +.not-found .page-title:lang(kk), +.error-404 .page-title:lang(kk), +.post-navigation .post-title:lang(kk), +.page-links:lang(kk), +.page-description:lang(kk), +.pagination .nav-links:lang(kk), +.sticky-post:lang(kk), +.site-title:lang(kk), +.site-info:lang(kk), +#cancel-comment-reply-link:lang(kk), +h1:lang(kk), +h2:lang(kk), +h3:lang(kk), +h4:lang(kk), +h5:lang(kk), +h6:lang(kk), .page-title:lang(kk), blockquote cite:lang(kk), table:lang(kk), .button:lang(kk), +input:lang(kk)[type="button"], +input:lang(kk)[type="reset"], +input:lang(kk)[type="submit"], .comment-navigation .nav-previous:lang(kk), +.comment-navigation .nav-next:lang(kk), .comment-list .pingback .comment-body:lang(kk), +.comment-list .trackback .comment-body:lang(kk), .comment-list .pingback .comment-body .comment-edit-link:lang(kk), +.comment-list .trackback .comment-body .comment-edit-link:lang(kk), .comment-form .comment-notes:lang(kk), +.comment-form label:lang(kk), .widget_archive ul li:lang(kk), +.widget_categories ul li:lang(kk), +.widget_meta ul li:lang(kk), +.widget_nav_menu ul li:lang(kk), +.widget_pages ul li:lang(kk), +.widget_recent_comments ul li:lang(kk), +.widget_recent_entries ul li:lang(kk), +.widget_rss ul li:lang(kk), .widget_tag_cloud .tagcloud:lang(kk), .entry .entry-content .wp-block-button .wp-block-button__link:lang(kk), .entry .entry-content .wp-block-archives li:lang(kk), +.entry .entry-content .wp-block-categories li:lang(kk), +.entry .entry-content .wp-block-latest-posts li:lang(kk), .entry .entry-content .wp-block-verse:lang(kk), .entry .entry-content .has-drop-cap:lang(kk):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(kk), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(kk), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(kk), +.entry .entry-content .wp-block-cover-image h2:lang(kk), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(kk), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(kk), +.entry .entry-content .wp-block-cover h2:lang(kk), .entry .entry-content .wp-block-audio figcaption:lang(kk), +.entry .entry-content .wp-block-video figcaption:lang(kk), +.entry .entry-content .wp-block-image figcaption:lang(kk), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(kk), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(kk), .entry .entry-content .wp-block-file:lang(kk), .entry .entry-content .wp-block-file .wp-block-file__button:lang(kk), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(kk), .wp-caption-text:lang(kk), .gallery-caption:lang(kk) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(mk-MK), button:lang(mk-MK), +input:lang(mk-MK), +select:lang(mk-MK), +optgroup:lang(mk-MK), +textarea:lang(mk-MK), .author-description .author-link:lang(mk-MK), +.comment-metadata:lang(mk-MK), +.comment-reply-link:lang(mk-MK), +.comments-title:lang(mk-MK), +.comment-author .fn:lang(mk-MK), +.discussion-meta-info:lang(mk-MK), +.entry-meta:lang(mk-MK), +.entry-footer:lang(mk-MK), +.main-navigation:lang(mk-MK), +.no-comments:lang(mk-MK), +.not-found .page-title:lang(mk-MK), +.error-404 .page-title:lang(mk-MK), +.post-navigation .post-title:lang(mk-MK), +.page-links:lang(mk-MK), +.page-description:lang(mk-MK), +.pagination .nav-links:lang(mk-MK), +.sticky-post:lang(mk-MK), +.site-title:lang(mk-MK), +.site-info:lang(mk-MK), +#cancel-comment-reply-link:lang(mk-MK), +h1:lang(mk-MK), +h2:lang(mk-MK), +h3:lang(mk-MK), +h4:lang(mk-MK), +h5:lang(mk-MK), +h6:lang(mk-MK), .page-title:lang(mk-MK), blockquote cite:lang(mk-MK), table:lang(mk-MK), .button:lang(mk-MK), +input:lang(mk-MK)[type="button"], +input:lang(mk-MK)[type="reset"], +input:lang(mk-MK)[type="submit"], .comment-navigation .nav-previous:lang(mk-MK), +.comment-navigation .nav-next:lang(mk-MK), .comment-list .pingback .comment-body:lang(mk-MK), +.comment-list .trackback .comment-body:lang(mk-MK), .comment-list .pingback .comment-body .comment-edit-link:lang(mk-MK), +.comment-list .trackback .comment-body .comment-edit-link:lang(mk-MK), .comment-form .comment-notes:lang(mk-MK), +.comment-form label:lang(mk-MK), .widget_archive ul li:lang(mk-MK), +.widget_categories ul li:lang(mk-MK), +.widget_meta ul li:lang(mk-MK), +.widget_nav_menu ul li:lang(mk-MK), +.widget_pages ul li:lang(mk-MK), +.widget_recent_comments ul li:lang(mk-MK), +.widget_recent_entries ul li:lang(mk-MK), +.widget_rss ul li:lang(mk-MK), .widget_tag_cloud .tagcloud:lang(mk-MK), .entry .entry-content .wp-block-button .wp-block-button__link:lang(mk-MK), .entry .entry-content .wp-block-archives li:lang(mk-MK), +.entry .entry-content .wp-block-categories li:lang(mk-MK), +.entry .entry-content .wp-block-latest-posts li:lang(mk-MK), .entry .entry-content .wp-block-verse:lang(mk-MK), .entry .entry-content .has-drop-cap:lang(mk-MK):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(mk-MK), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(mk-MK), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(mk-MK), +.entry .entry-content .wp-block-cover-image h2:lang(mk-MK), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(mk-MK), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(mk-MK), +.entry .entry-content .wp-block-cover h2:lang(mk-MK), .entry .entry-content .wp-block-audio figcaption:lang(mk-MK), +.entry .entry-content .wp-block-video figcaption:lang(mk-MK), +.entry .entry-content .wp-block-image figcaption:lang(mk-MK), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(mk-MK), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(mk-MK), .entry .entry-content .wp-block-file:lang(mk-MK), .entry .entry-content .wp-block-file .wp-block-file__button:lang(mk-MK), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(mk-MK), .wp-caption-text:lang(mk-MK), .gallery-caption:lang(mk-MK) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(mn), button:lang(mn), +input:lang(mn), +select:lang(mn), +optgroup:lang(mn), +textarea:lang(mn), .author-description .author-link:lang(mn), +.comment-metadata:lang(mn), +.comment-reply-link:lang(mn), +.comments-title:lang(mn), +.comment-author .fn:lang(mn), +.discussion-meta-info:lang(mn), +.entry-meta:lang(mn), +.entry-footer:lang(mn), +.main-navigation:lang(mn), +.no-comments:lang(mn), +.not-found .page-title:lang(mn), +.error-404 .page-title:lang(mn), +.post-navigation .post-title:lang(mn), +.page-links:lang(mn), +.page-description:lang(mn), +.pagination .nav-links:lang(mn), +.sticky-post:lang(mn), +.site-title:lang(mn), +.site-info:lang(mn), +#cancel-comment-reply-link:lang(mn), +h1:lang(mn), +h2:lang(mn), +h3:lang(mn), +h4:lang(mn), +h5:lang(mn), +h6:lang(mn), .page-title:lang(mn), blockquote cite:lang(mn), table:lang(mn), .button:lang(mn), +input:lang(mn)[type="button"], +input:lang(mn)[type="reset"], +input:lang(mn)[type="submit"], .comment-navigation .nav-previous:lang(mn), +.comment-navigation .nav-next:lang(mn), .comment-list .pingback .comment-body:lang(mn), +.comment-list .trackback .comment-body:lang(mn), .comment-list .pingback .comment-body .comment-edit-link:lang(mn), +.comment-list .trackback .comment-body .comment-edit-link:lang(mn), .comment-form .comment-notes:lang(mn), +.comment-form label:lang(mn), .widget_archive ul li:lang(mn), +.widget_categories ul li:lang(mn), +.widget_meta ul li:lang(mn), +.widget_nav_menu ul li:lang(mn), +.widget_pages ul li:lang(mn), +.widget_recent_comments ul li:lang(mn), +.widget_recent_entries ul li:lang(mn), +.widget_rss ul li:lang(mn), .widget_tag_cloud .tagcloud:lang(mn), .entry .entry-content .wp-block-button .wp-block-button__link:lang(mn), .entry .entry-content .wp-block-archives li:lang(mn), +.entry .entry-content .wp-block-categories li:lang(mn), +.entry .entry-content .wp-block-latest-posts li:lang(mn), .entry .entry-content .wp-block-verse:lang(mn), .entry .entry-content .has-drop-cap:lang(mn):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(mn), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(mn), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(mn), +.entry .entry-content .wp-block-cover-image h2:lang(mn), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(mn), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(mn), +.entry .entry-content .wp-block-cover h2:lang(mn), .entry .entry-content .wp-block-audio figcaption:lang(mn), +.entry .entry-content .wp-block-video figcaption:lang(mn), +.entry .entry-content .wp-block-image figcaption:lang(mn), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(mn), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(mn), .entry .entry-content .wp-block-file:lang(mn), .entry .entry-content .wp-block-file .wp-block-file__button:lang(mn), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(mn), .wp-caption-text:lang(mn), .gallery-caption:lang(mn) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(ru-RU), button:lang(ru-RU), +input:lang(ru-RU), +select:lang(ru-RU), +optgroup:lang(ru-RU), +textarea:lang(ru-RU), .author-description .author-link:lang(ru-RU), +.comment-metadata:lang(ru-RU), +.comment-reply-link:lang(ru-RU), +.comments-title:lang(ru-RU), +.comment-author .fn:lang(ru-RU), +.discussion-meta-info:lang(ru-RU), +.entry-meta:lang(ru-RU), +.entry-footer:lang(ru-RU), +.main-navigation:lang(ru-RU), +.no-comments:lang(ru-RU), +.not-found .page-title:lang(ru-RU), +.error-404 .page-title:lang(ru-RU), +.post-navigation .post-title:lang(ru-RU), +.page-links:lang(ru-RU), +.page-description:lang(ru-RU), +.pagination .nav-links:lang(ru-RU), +.sticky-post:lang(ru-RU), +.site-title:lang(ru-RU), +.site-info:lang(ru-RU), +#cancel-comment-reply-link:lang(ru-RU), +h1:lang(ru-RU), +h2:lang(ru-RU), +h3:lang(ru-RU), +h4:lang(ru-RU), +h5:lang(ru-RU), +h6:lang(ru-RU), .page-title:lang(ru-RU), blockquote cite:lang(ru-RU), table:lang(ru-RU), .button:lang(ru-RU), +input:lang(ru-RU)[type="button"], +input:lang(ru-RU)[type="reset"], +input:lang(ru-RU)[type="submit"], .comment-navigation .nav-previous:lang(ru-RU), +.comment-navigation .nav-next:lang(ru-RU), .comment-list .pingback .comment-body:lang(ru-RU), +.comment-list .trackback .comment-body:lang(ru-RU), .comment-list .pingback .comment-body .comment-edit-link:lang(ru-RU), +.comment-list .trackback .comment-body .comment-edit-link:lang(ru-RU), .comment-form .comment-notes:lang(ru-RU), +.comment-form label:lang(ru-RU), .widget_archive ul li:lang(ru-RU), +.widget_categories ul li:lang(ru-RU), +.widget_meta ul li:lang(ru-RU), +.widget_nav_menu ul li:lang(ru-RU), +.widget_pages ul li:lang(ru-RU), +.widget_recent_comments ul li:lang(ru-RU), +.widget_recent_entries ul li:lang(ru-RU), +.widget_rss ul li:lang(ru-RU), .widget_tag_cloud .tagcloud:lang(ru-RU), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ru-RU), .entry .entry-content .wp-block-archives li:lang(ru-RU), +.entry .entry-content .wp-block-categories li:lang(ru-RU), +.entry .entry-content .wp-block-latest-posts li:lang(ru-RU), .entry .entry-content .wp-block-verse:lang(ru-RU), .entry .entry-content .has-drop-cap:lang(ru-RU):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ru-RU), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ru-RU), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ru-RU), +.entry .entry-content .wp-block-cover-image h2:lang(ru-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ru-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ru-RU), +.entry .entry-content .wp-block-cover h2:lang(ru-RU), .entry .entry-content .wp-block-audio figcaption:lang(ru-RU), +.entry .entry-content .wp-block-video figcaption:lang(ru-RU), +.entry .entry-content .wp-block-image figcaption:lang(ru-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ru-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ru-RU), .entry .entry-content .wp-block-file:lang(ru-RU), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ru-RU), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ru-RU), .wp-caption-text:lang(ru-RU), .gallery-caption:lang(ru-RU) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(sah), button:lang(sah), +input:lang(sah), +select:lang(sah), +optgroup:lang(sah), +textarea:lang(sah), .author-description .author-link:lang(sah), +.comment-metadata:lang(sah), +.comment-reply-link:lang(sah), +.comments-title:lang(sah), +.comment-author .fn:lang(sah), +.discussion-meta-info:lang(sah), +.entry-meta:lang(sah), +.entry-footer:lang(sah), +.main-navigation:lang(sah), +.no-comments:lang(sah), +.not-found .page-title:lang(sah), +.error-404 .page-title:lang(sah), +.post-navigation .post-title:lang(sah), +.page-links:lang(sah), +.page-description:lang(sah), +.pagination .nav-links:lang(sah), +.sticky-post:lang(sah), +.site-title:lang(sah), +.site-info:lang(sah), +#cancel-comment-reply-link:lang(sah), +h1:lang(sah), +h2:lang(sah), +h3:lang(sah), +h4:lang(sah), +h5:lang(sah), +h6:lang(sah), .page-title:lang(sah), blockquote cite:lang(sah), table:lang(sah), .button:lang(sah), +input:lang(sah)[type="button"], +input:lang(sah)[type="reset"], +input:lang(sah)[type="submit"], .comment-navigation .nav-previous:lang(sah), +.comment-navigation .nav-next:lang(sah), .comment-list .pingback .comment-body:lang(sah), +.comment-list .trackback .comment-body:lang(sah), .comment-list .pingback .comment-body .comment-edit-link:lang(sah), +.comment-list .trackback .comment-body .comment-edit-link:lang(sah), .comment-form .comment-notes:lang(sah), +.comment-form label:lang(sah), .widget_archive ul li:lang(sah), +.widget_categories ul li:lang(sah), +.widget_meta ul li:lang(sah), +.widget_nav_menu ul li:lang(sah), +.widget_pages ul li:lang(sah), +.widget_recent_comments ul li:lang(sah), +.widget_recent_entries ul li:lang(sah), +.widget_rss ul li:lang(sah), .widget_tag_cloud .tagcloud:lang(sah), .entry .entry-content .wp-block-button .wp-block-button__link:lang(sah), .entry .entry-content .wp-block-archives li:lang(sah), +.entry .entry-content .wp-block-categories li:lang(sah), +.entry .entry-content .wp-block-latest-posts li:lang(sah), .entry .entry-content .wp-block-verse:lang(sah), .entry .entry-content .has-drop-cap:lang(sah):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(sah), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(sah), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(sah), +.entry .entry-content .wp-block-cover-image h2:lang(sah), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(sah), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(sah), +.entry .entry-content .wp-block-cover h2:lang(sah), .entry .entry-content .wp-block-audio figcaption:lang(sah), +.entry .entry-content .wp-block-video figcaption:lang(sah), +.entry .entry-content .wp-block-image figcaption:lang(sah), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(sah), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(sah), .entry .entry-content .wp-block-file:lang(sah), .entry .entry-content .wp-block-file .wp-block-file__button:lang(sah), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(sah), .wp-caption-text:lang(sah), .gallery-caption:lang(sah) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(sr-RS), button:lang(sr-RS), +input:lang(sr-RS), +select:lang(sr-RS), +optgroup:lang(sr-RS), +textarea:lang(sr-RS), .author-description .author-link:lang(sr-RS), +.comment-metadata:lang(sr-RS), +.comment-reply-link:lang(sr-RS), +.comments-title:lang(sr-RS), +.comment-author .fn:lang(sr-RS), +.discussion-meta-info:lang(sr-RS), +.entry-meta:lang(sr-RS), +.entry-footer:lang(sr-RS), +.main-navigation:lang(sr-RS), +.no-comments:lang(sr-RS), +.not-found .page-title:lang(sr-RS), +.error-404 .page-title:lang(sr-RS), +.post-navigation .post-title:lang(sr-RS), +.page-links:lang(sr-RS), +.page-description:lang(sr-RS), +.pagination .nav-links:lang(sr-RS), +.sticky-post:lang(sr-RS), +.site-title:lang(sr-RS), +.site-info:lang(sr-RS), +#cancel-comment-reply-link:lang(sr-RS), +h1:lang(sr-RS), +h2:lang(sr-RS), +h3:lang(sr-RS), +h4:lang(sr-RS), +h5:lang(sr-RS), +h6:lang(sr-RS), .page-title:lang(sr-RS), blockquote cite:lang(sr-RS), table:lang(sr-RS), .button:lang(sr-RS), +input:lang(sr-RS)[type="button"], +input:lang(sr-RS)[type="reset"], +input:lang(sr-RS)[type="submit"], .comment-navigation .nav-previous:lang(sr-RS), +.comment-navigation .nav-next:lang(sr-RS), .comment-list .pingback .comment-body:lang(sr-RS), +.comment-list .trackback .comment-body:lang(sr-RS), .comment-list .pingback .comment-body .comment-edit-link:lang(sr-RS), +.comment-list .trackback .comment-body .comment-edit-link:lang(sr-RS), .comment-form .comment-notes:lang(sr-RS), +.comment-form label:lang(sr-RS), .widget_archive ul li:lang(sr-RS), +.widget_categories ul li:lang(sr-RS), +.widget_meta ul li:lang(sr-RS), +.widget_nav_menu ul li:lang(sr-RS), +.widget_pages ul li:lang(sr-RS), +.widget_recent_comments ul li:lang(sr-RS), +.widget_recent_entries ul li:lang(sr-RS), +.widget_rss ul li:lang(sr-RS), .widget_tag_cloud .tagcloud:lang(sr-RS), .entry .entry-content .wp-block-button .wp-block-button__link:lang(sr-RS), .entry .entry-content .wp-block-archives li:lang(sr-RS), +.entry .entry-content .wp-block-categories li:lang(sr-RS), +.entry .entry-content .wp-block-latest-posts li:lang(sr-RS), .entry .entry-content .wp-block-verse:lang(sr-RS), .entry .entry-content .has-drop-cap:lang(sr-RS):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(sr-RS), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(sr-RS), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(sr-RS), +.entry .entry-content .wp-block-cover-image h2:lang(sr-RS), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(sr-RS), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(sr-RS), +.entry .entry-content .wp-block-cover h2:lang(sr-RS), .entry .entry-content .wp-block-audio figcaption:lang(sr-RS), +.entry .entry-content .wp-block-video figcaption:lang(sr-RS), +.entry .entry-content .wp-block-image figcaption:lang(sr-RS), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(sr-RS), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(sr-RS), .entry .entry-content .wp-block-file:lang(sr-RS), .entry .entry-content .wp-block-file .wp-block-file__button:lang(sr-RS), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(sr-RS), .wp-caption-text:lang(sr-RS), .gallery-caption:lang(sr-RS) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(tt-RU), button:lang(tt-RU), +input:lang(tt-RU), +select:lang(tt-RU), +optgroup:lang(tt-RU), +textarea:lang(tt-RU), .author-description .author-link:lang(tt-RU), +.comment-metadata:lang(tt-RU), +.comment-reply-link:lang(tt-RU), +.comments-title:lang(tt-RU), +.comment-author .fn:lang(tt-RU), +.discussion-meta-info:lang(tt-RU), +.entry-meta:lang(tt-RU), +.entry-footer:lang(tt-RU), +.main-navigation:lang(tt-RU), +.no-comments:lang(tt-RU), +.not-found .page-title:lang(tt-RU), +.error-404 .page-title:lang(tt-RU), +.post-navigation .post-title:lang(tt-RU), +.page-links:lang(tt-RU), +.page-description:lang(tt-RU), +.pagination .nav-links:lang(tt-RU), +.sticky-post:lang(tt-RU), +.site-title:lang(tt-RU), +.site-info:lang(tt-RU), +#cancel-comment-reply-link:lang(tt-RU), +h1:lang(tt-RU), +h2:lang(tt-RU), +h3:lang(tt-RU), +h4:lang(tt-RU), +h5:lang(tt-RU), +h6:lang(tt-RU), .page-title:lang(tt-RU), blockquote cite:lang(tt-RU), table:lang(tt-RU), .button:lang(tt-RU), +input:lang(tt-RU)[type="button"], +input:lang(tt-RU)[type="reset"], +input:lang(tt-RU)[type="submit"], .comment-navigation .nav-previous:lang(tt-RU), +.comment-navigation .nav-next:lang(tt-RU), .comment-list .pingback .comment-body:lang(tt-RU), +.comment-list .trackback .comment-body:lang(tt-RU), .comment-list .pingback .comment-body .comment-edit-link:lang(tt-RU), +.comment-list .trackback .comment-body .comment-edit-link:lang(tt-RU), .comment-form .comment-notes:lang(tt-RU), +.comment-form label:lang(tt-RU), .widget_archive ul li:lang(tt-RU), +.widget_categories ul li:lang(tt-RU), +.widget_meta ul li:lang(tt-RU), +.widget_nav_menu ul li:lang(tt-RU), +.widget_pages ul li:lang(tt-RU), +.widget_recent_comments ul li:lang(tt-RU), +.widget_recent_entries ul li:lang(tt-RU), +.widget_rss ul li:lang(tt-RU), .widget_tag_cloud .tagcloud:lang(tt-RU), .entry .entry-content .wp-block-button .wp-block-button__link:lang(tt-RU), .entry .entry-content .wp-block-archives li:lang(tt-RU), +.entry .entry-content .wp-block-categories li:lang(tt-RU), +.entry .entry-content .wp-block-latest-posts li:lang(tt-RU), .entry .entry-content .wp-block-verse:lang(tt-RU), .entry .entry-content .has-drop-cap:lang(tt-RU):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(tt-RU), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(tt-RU), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(tt-RU), +.entry .entry-content .wp-block-cover-image h2:lang(tt-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(tt-RU), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(tt-RU), +.entry .entry-content .wp-block-cover h2:lang(tt-RU), .entry .entry-content .wp-block-audio figcaption:lang(tt-RU), +.entry .entry-content .wp-block-video figcaption:lang(tt-RU), +.entry .entry-content .wp-block-image figcaption:lang(tt-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(tt-RU), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(tt-RU), .entry .entry-content .wp-block-file:lang(tt-RU), .entry .entry-content .wp-block-file .wp-block-file__button:lang(tt-RU), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(tt-RU), .wp-caption-text:lang(tt-RU), .gallery-caption:lang(tt-RU) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(uk), button:lang(uk), +input:lang(uk), +select:lang(uk), +optgroup:lang(uk), +textarea:lang(uk), .author-description .author-link:lang(uk), +.comment-metadata:lang(uk), +.comment-reply-link:lang(uk), +.comments-title:lang(uk), +.comment-author .fn:lang(uk), +.discussion-meta-info:lang(uk), +.entry-meta:lang(uk), +.entry-footer:lang(uk), +.main-navigation:lang(uk), +.no-comments:lang(uk), +.not-found .page-title:lang(uk), +.error-404 .page-title:lang(uk), +.post-navigation .post-title:lang(uk), +.page-links:lang(uk), +.page-description:lang(uk), +.pagination .nav-links:lang(uk), +.sticky-post:lang(uk), +.site-title:lang(uk), +.site-info:lang(uk), +#cancel-comment-reply-link:lang(uk), +h1:lang(uk), +h2:lang(uk), +h3:lang(uk), +h4:lang(uk), +h5:lang(uk), +h6:lang(uk), .page-title:lang(uk), blockquote cite:lang(uk), table:lang(uk), .button:lang(uk), +input:lang(uk)[type="button"], +input:lang(uk)[type="reset"], +input:lang(uk)[type="submit"], .comment-navigation .nav-previous:lang(uk), +.comment-navigation .nav-next:lang(uk), .comment-list .pingback .comment-body:lang(uk), +.comment-list .trackback .comment-body:lang(uk), .comment-list .pingback .comment-body .comment-edit-link:lang(uk), +.comment-list .trackback .comment-body .comment-edit-link:lang(uk), .comment-form .comment-notes:lang(uk), +.comment-form label:lang(uk), .widget_archive ul li:lang(uk), +.widget_categories ul li:lang(uk), +.widget_meta ul li:lang(uk), +.widget_nav_menu ul li:lang(uk), +.widget_pages ul li:lang(uk), +.widget_recent_comments ul li:lang(uk), +.widget_recent_entries ul li:lang(uk), +.widget_rss ul li:lang(uk), .widget_tag_cloud .tagcloud:lang(uk), .entry .entry-content .wp-block-button .wp-block-button__link:lang(uk), .entry .entry-content .wp-block-archives li:lang(uk), +.entry .entry-content .wp-block-categories li:lang(uk), +.entry .entry-content .wp-block-latest-posts li:lang(uk), .entry .entry-content .wp-block-verse:lang(uk), .entry .entry-content .has-drop-cap:lang(uk):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(uk), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(uk), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(uk), +.entry .entry-content .wp-block-cover-image h2:lang(uk), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(uk), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(uk), +.entry .entry-content .wp-block-cover h2:lang(uk), .entry .entry-content .wp-block-audio figcaption:lang(uk), +.entry .entry-content .wp-block-video figcaption:lang(uk), +.entry .entry-content .wp-block-image figcaption:lang(uk), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(uk), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(uk), .entry .entry-content .wp-block-file:lang(uk), .entry .entry-content .wp-block-file .wp-block-file__button:lang(uk), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(uk), .wp-caption-text:lang(uk), .gallery-caption:lang(uk) { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +body:lang(zh-HK), button:lang(zh-HK), +input:lang(zh-HK), +select:lang(zh-HK), +optgroup:lang(zh-HK), +textarea:lang(zh-HK), .author-description .author-link:lang(zh-HK), +.comment-metadata:lang(zh-HK), +.comment-reply-link:lang(zh-HK), +.comments-title:lang(zh-HK), +.comment-author .fn:lang(zh-HK), +.discussion-meta-info:lang(zh-HK), +.entry-meta:lang(zh-HK), +.entry-footer:lang(zh-HK), +.main-navigation:lang(zh-HK), +.no-comments:lang(zh-HK), +.not-found .page-title:lang(zh-HK), +.error-404 .page-title:lang(zh-HK), +.post-navigation .post-title:lang(zh-HK), +.page-links:lang(zh-HK), +.page-description:lang(zh-HK), +.pagination .nav-links:lang(zh-HK), +.sticky-post:lang(zh-HK), +.site-title:lang(zh-HK), +.site-info:lang(zh-HK), +#cancel-comment-reply-link:lang(zh-HK), +h1:lang(zh-HK), +h2:lang(zh-HK), +h3:lang(zh-HK), +h4:lang(zh-HK), +h5:lang(zh-HK), +h6:lang(zh-HK), .page-title:lang(zh-HK), blockquote cite:lang(zh-HK), table:lang(zh-HK), .button:lang(zh-HK), +input:lang(zh-HK)[type="button"], +input:lang(zh-HK)[type="reset"], +input:lang(zh-HK)[type="submit"], .comment-navigation .nav-previous:lang(zh-HK), +.comment-navigation .nav-next:lang(zh-HK), .comment-list .pingback .comment-body:lang(zh-HK), +.comment-list .trackback .comment-body:lang(zh-HK), .comment-list .pingback .comment-body .comment-edit-link:lang(zh-HK), +.comment-list .trackback .comment-body .comment-edit-link:lang(zh-HK), .comment-form .comment-notes:lang(zh-HK), +.comment-form label:lang(zh-HK), .widget_archive ul li:lang(zh-HK), +.widget_categories ul li:lang(zh-HK), +.widget_meta ul li:lang(zh-HK), +.widget_nav_menu ul li:lang(zh-HK), +.widget_pages ul li:lang(zh-HK), +.widget_recent_comments ul li:lang(zh-HK), +.widget_recent_entries ul li:lang(zh-HK), +.widget_rss ul li:lang(zh-HK), .widget_tag_cloud .tagcloud:lang(zh-HK), .entry .entry-content .wp-block-button .wp-block-button__link:lang(zh-HK), .entry .entry-content .wp-block-archives li:lang(zh-HK), +.entry .entry-content .wp-block-categories li:lang(zh-HK), +.entry .entry-content .wp-block-latest-posts li:lang(zh-HK), .entry .entry-content .wp-block-verse:lang(zh-HK), .entry .entry-content .has-drop-cap:lang(zh-HK):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(zh-HK), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(zh-HK), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(zh-HK), +.entry .entry-content .wp-block-cover-image h2:lang(zh-HK), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(zh-HK), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(zh-HK), +.entry .entry-content .wp-block-cover h2:lang(zh-HK), .entry .entry-content .wp-block-audio figcaption:lang(zh-HK), +.entry .entry-content .wp-block-video figcaption:lang(zh-HK), +.entry .entry-content .wp-block-image figcaption:lang(zh-HK), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(zh-HK), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(zh-HK), .entry .entry-content .wp-block-file:lang(zh-HK), .entry .entry-content .wp-block-file .wp-block-file__button:lang(zh-HK), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(zh-HK), .wp-caption-text:lang(zh-HK), .gallery-caption:lang(zh-HK) { + font-family: -apple-system, BlinkMacSystemFont, "PingFang HK", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif; +} + +body:lang(zh-TW), button:lang(zh-TW), +input:lang(zh-TW), +select:lang(zh-TW), +optgroup:lang(zh-TW), +textarea:lang(zh-TW), .author-description .author-link:lang(zh-TW), +.comment-metadata:lang(zh-TW), +.comment-reply-link:lang(zh-TW), +.comments-title:lang(zh-TW), +.comment-author .fn:lang(zh-TW), +.discussion-meta-info:lang(zh-TW), +.entry-meta:lang(zh-TW), +.entry-footer:lang(zh-TW), +.main-navigation:lang(zh-TW), +.no-comments:lang(zh-TW), +.not-found .page-title:lang(zh-TW), +.error-404 .page-title:lang(zh-TW), +.post-navigation .post-title:lang(zh-TW), +.page-links:lang(zh-TW), +.page-description:lang(zh-TW), +.pagination .nav-links:lang(zh-TW), +.sticky-post:lang(zh-TW), +.site-title:lang(zh-TW), +.site-info:lang(zh-TW), +#cancel-comment-reply-link:lang(zh-TW), +h1:lang(zh-TW), +h2:lang(zh-TW), +h3:lang(zh-TW), +h4:lang(zh-TW), +h5:lang(zh-TW), +h6:lang(zh-TW), .page-title:lang(zh-TW), blockquote cite:lang(zh-TW), table:lang(zh-TW), .button:lang(zh-TW), +input:lang(zh-TW)[type="button"], +input:lang(zh-TW)[type="reset"], +input:lang(zh-TW)[type="submit"], .comment-navigation .nav-previous:lang(zh-TW), +.comment-navigation .nav-next:lang(zh-TW), .comment-list .pingback .comment-body:lang(zh-TW), +.comment-list .trackback .comment-body:lang(zh-TW), .comment-list .pingback .comment-body .comment-edit-link:lang(zh-TW), +.comment-list .trackback .comment-body .comment-edit-link:lang(zh-TW), .comment-form .comment-notes:lang(zh-TW), +.comment-form label:lang(zh-TW), .widget_archive ul li:lang(zh-TW), +.widget_categories ul li:lang(zh-TW), +.widget_meta ul li:lang(zh-TW), +.widget_nav_menu ul li:lang(zh-TW), +.widget_pages ul li:lang(zh-TW), +.widget_recent_comments ul li:lang(zh-TW), +.widget_recent_entries ul li:lang(zh-TW), +.widget_rss ul li:lang(zh-TW), .widget_tag_cloud .tagcloud:lang(zh-TW), .entry .entry-content .wp-block-button .wp-block-button__link:lang(zh-TW), .entry .entry-content .wp-block-archives li:lang(zh-TW), +.entry .entry-content .wp-block-categories li:lang(zh-TW), +.entry .entry-content .wp-block-latest-posts li:lang(zh-TW), .entry .entry-content .wp-block-verse:lang(zh-TW), .entry .entry-content .has-drop-cap:lang(zh-TW):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(zh-TW), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(zh-TW), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(zh-TW), +.entry .entry-content .wp-block-cover-image h2:lang(zh-TW), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(zh-TW), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(zh-TW), +.entry .entry-content .wp-block-cover h2:lang(zh-TW), .entry .entry-content .wp-block-audio figcaption:lang(zh-TW), +.entry .entry-content .wp-block-video figcaption:lang(zh-TW), +.entry .entry-content .wp-block-image figcaption:lang(zh-TW), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(zh-TW), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(zh-TW), .entry .entry-content .wp-block-file:lang(zh-TW), .entry .entry-content .wp-block-file .wp-block-file__button:lang(zh-TW), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(zh-TW), .wp-caption-text:lang(zh-TW), .gallery-caption:lang(zh-TW) { + font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif; +} + +body:lang(zh-CN), button:lang(zh-CN), +input:lang(zh-CN), +select:lang(zh-CN), +optgroup:lang(zh-CN), +textarea:lang(zh-CN), .author-description .author-link:lang(zh-CN), +.comment-metadata:lang(zh-CN), +.comment-reply-link:lang(zh-CN), +.comments-title:lang(zh-CN), +.comment-author .fn:lang(zh-CN), +.discussion-meta-info:lang(zh-CN), +.entry-meta:lang(zh-CN), +.entry-footer:lang(zh-CN), +.main-navigation:lang(zh-CN), +.no-comments:lang(zh-CN), +.not-found .page-title:lang(zh-CN), +.error-404 .page-title:lang(zh-CN), +.post-navigation .post-title:lang(zh-CN), +.page-links:lang(zh-CN), +.page-description:lang(zh-CN), +.pagination .nav-links:lang(zh-CN), +.sticky-post:lang(zh-CN), +.site-title:lang(zh-CN), +.site-info:lang(zh-CN), +#cancel-comment-reply-link:lang(zh-CN), +h1:lang(zh-CN), +h2:lang(zh-CN), +h3:lang(zh-CN), +h4:lang(zh-CN), +h5:lang(zh-CN), +h6:lang(zh-CN), .page-title:lang(zh-CN), blockquote cite:lang(zh-CN), table:lang(zh-CN), .button:lang(zh-CN), +input:lang(zh-CN)[type="button"], +input:lang(zh-CN)[type="reset"], +input:lang(zh-CN)[type="submit"], .comment-navigation .nav-previous:lang(zh-CN), +.comment-navigation .nav-next:lang(zh-CN), .comment-list .pingback .comment-body:lang(zh-CN), +.comment-list .trackback .comment-body:lang(zh-CN), .comment-list .pingback .comment-body .comment-edit-link:lang(zh-CN), +.comment-list .trackback .comment-body .comment-edit-link:lang(zh-CN), .comment-form .comment-notes:lang(zh-CN), +.comment-form label:lang(zh-CN), .widget_archive ul li:lang(zh-CN), +.widget_categories ul li:lang(zh-CN), +.widget_meta ul li:lang(zh-CN), +.widget_nav_menu ul li:lang(zh-CN), +.widget_pages ul li:lang(zh-CN), +.widget_recent_comments ul li:lang(zh-CN), +.widget_recent_entries ul li:lang(zh-CN), +.widget_rss ul li:lang(zh-CN), .widget_tag_cloud .tagcloud:lang(zh-CN), .entry .entry-content .wp-block-button .wp-block-button__link:lang(zh-CN), .entry .entry-content .wp-block-archives li:lang(zh-CN), +.entry .entry-content .wp-block-categories li:lang(zh-CN), +.entry .entry-content .wp-block-latest-posts li:lang(zh-CN), .entry .entry-content .wp-block-verse:lang(zh-CN), .entry .entry-content .has-drop-cap:lang(zh-CN):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(zh-CN), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(zh-CN), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(zh-CN), +.entry .entry-content .wp-block-cover-image h2:lang(zh-CN), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(zh-CN), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(zh-CN), +.entry .entry-content .wp-block-cover h2:lang(zh-CN), .entry .entry-content .wp-block-audio figcaption:lang(zh-CN), +.entry .entry-content .wp-block-video figcaption:lang(zh-CN), +.entry .entry-content .wp-block-image figcaption:lang(zh-CN), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(zh-CN), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(zh-CN), .entry .entry-content .wp-block-file:lang(zh-CN), .entry .entry-content .wp-block-file .wp-block-file__button:lang(zh-CN), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(zh-CN), .wp-caption-text:lang(zh-CN), .gallery-caption:lang(zh-CN) { + font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", "Microsoft YaHei New", STHeiti Light, sans-serif; +} + +body:lang(bn-BD), button:lang(bn-BD), +input:lang(bn-BD), +select:lang(bn-BD), +optgroup:lang(bn-BD), +textarea:lang(bn-BD), .author-description .author-link:lang(bn-BD), +.comment-metadata:lang(bn-BD), +.comment-reply-link:lang(bn-BD), +.comments-title:lang(bn-BD), +.comment-author .fn:lang(bn-BD), +.discussion-meta-info:lang(bn-BD), +.entry-meta:lang(bn-BD), +.entry-footer:lang(bn-BD), +.main-navigation:lang(bn-BD), +.no-comments:lang(bn-BD), +.not-found .page-title:lang(bn-BD), +.error-404 .page-title:lang(bn-BD), +.post-navigation .post-title:lang(bn-BD), +.page-links:lang(bn-BD), +.page-description:lang(bn-BD), +.pagination .nav-links:lang(bn-BD), +.sticky-post:lang(bn-BD), +.site-title:lang(bn-BD), +.site-info:lang(bn-BD), +#cancel-comment-reply-link:lang(bn-BD), +h1:lang(bn-BD), +h2:lang(bn-BD), +h3:lang(bn-BD), +h4:lang(bn-BD), +h5:lang(bn-BD), +h6:lang(bn-BD), .page-title:lang(bn-BD), blockquote cite:lang(bn-BD), table:lang(bn-BD), .button:lang(bn-BD), +input:lang(bn-BD)[type="button"], +input:lang(bn-BD)[type="reset"], +input:lang(bn-BD)[type="submit"], .comment-navigation .nav-previous:lang(bn-BD), +.comment-navigation .nav-next:lang(bn-BD), .comment-list .pingback .comment-body:lang(bn-BD), +.comment-list .trackback .comment-body:lang(bn-BD), .comment-list .pingback .comment-body .comment-edit-link:lang(bn-BD), +.comment-list .trackback .comment-body .comment-edit-link:lang(bn-BD), .comment-form .comment-notes:lang(bn-BD), +.comment-form label:lang(bn-BD), .widget_archive ul li:lang(bn-BD), +.widget_categories ul li:lang(bn-BD), +.widget_meta ul li:lang(bn-BD), +.widget_nav_menu ul li:lang(bn-BD), +.widget_pages ul li:lang(bn-BD), +.widget_recent_comments ul li:lang(bn-BD), +.widget_recent_entries ul li:lang(bn-BD), +.widget_rss ul li:lang(bn-BD), .widget_tag_cloud .tagcloud:lang(bn-BD), .entry .entry-content .wp-block-button .wp-block-button__link:lang(bn-BD), .entry .entry-content .wp-block-archives li:lang(bn-BD), +.entry .entry-content .wp-block-categories li:lang(bn-BD), +.entry .entry-content .wp-block-latest-posts li:lang(bn-BD), .entry .entry-content .wp-block-verse:lang(bn-BD), .entry .entry-content .has-drop-cap:lang(bn-BD):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(bn-BD), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(bn-BD), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(bn-BD), +.entry .entry-content .wp-block-cover-image h2:lang(bn-BD), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(bn-BD), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(bn-BD), +.entry .entry-content .wp-block-cover h2:lang(bn-BD), .entry .entry-content .wp-block-audio figcaption:lang(bn-BD), +.entry .entry-content .wp-block-video figcaption:lang(bn-BD), +.entry .entry-content .wp-block-image figcaption:lang(bn-BD), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(bn-BD), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(bn-BD), .entry .entry-content .wp-block-file:lang(bn-BD), .entry .entry-content .wp-block-file .wp-block-file__button:lang(bn-BD), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(bn-BD), .wp-caption-text:lang(bn-BD), .gallery-caption:lang(bn-BD) { + font-family: Arial, sans-serif; +} + +body:lang(hi-IN), button:lang(hi-IN), +input:lang(hi-IN), +select:lang(hi-IN), +optgroup:lang(hi-IN), +textarea:lang(hi-IN), .author-description .author-link:lang(hi-IN), +.comment-metadata:lang(hi-IN), +.comment-reply-link:lang(hi-IN), +.comments-title:lang(hi-IN), +.comment-author .fn:lang(hi-IN), +.discussion-meta-info:lang(hi-IN), +.entry-meta:lang(hi-IN), +.entry-footer:lang(hi-IN), +.main-navigation:lang(hi-IN), +.no-comments:lang(hi-IN), +.not-found .page-title:lang(hi-IN), +.error-404 .page-title:lang(hi-IN), +.post-navigation .post-title:lang(hi-IN), +.page-links:lang(hi-IN), +.page-description:lang(hi-IN), +.pagination .nav-links:lang(hi-IN), +.sticky-post:lang(hi-IN), +.site-title:lang(hi-IN), +.site-info:lang(hi-IN), +#cancel-comment-reply-link:lang(hi-IN), +h1:lang(hi-IN), +h2:lang(hi-IN), +h3:lang(hi-IN), +h4:lang(hi-IN), +h5:lang(hi-IN), +h6:lang(hi-IN), .page-title:lang(hi-IN), blockquote cite:lang(hi-IN), table:lang(hi-IN), .button:lang(hi-IN), +input:lang(hi-IN)[type="button"], +input:lang(hi-IN)[type="reset"], +input:lang(hi-IN)[type="submit"], .comment-navigation .nav-previous:lang(hi-IN), +.comment-navigation .nav-next:lang(hi-IN), .comment-list .pingback .comment-body:lang(hi-IN), +.comment-list .trackback .comment-body:lang(hi-IN), .comment-list .pingback .comment-body .comment-edit-link:lang(hi-IN), +.comment-list .trackback .comment-body .comment-edit-link:lang(hi-IN), .comment-form .comment-notes:lang(hi-IN), +.comment-form label:lang(hi-IN), .widget_archive ul li:lang(hi-IN), +.widget_categories ul li:lang(hi-IN), +.widget_meta ul li:lang(hi-IN), +.widget_nav_menu ul li:lang(hi-IN), +.widget_pages ul li:lang(hi-IN), +.widget_recent_comments ul li:lang(hi-IN), +.widget_recent_entries ul li:lang(hi-IN), +.widget_rss ul li:lang(hi-IN), .widget_tag_cloud .tagcloud:lang(hi-IN), .entry .entry-content .wp-block-button .wp-block-button__link:lang(hi-IN), .entry .entry-content .wp-block-archives li:lang(hi-IN), +.entry .entry-content .wp-block-categories li:lang(hi-IN), +.entry .entry-content .wp-block-latest-posts li:lang(hi-IN), .entry .entry-content .wp-block-verse:lang(hi-IN), .entry .entry-content .has-drop-cap:lang(hi-IN):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(hi-IN), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(hi-IN), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(hi-IN), +.entry .entry-content .wp-block-cover-image h2:lang(hi-IN), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(hi-IN), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(hi-IN), +.entry .entry-content .wp-block-cover h2:lang(hi-IN), .entry .entry-content .wp-block-audio figcaption:lang(hi-IN), +.entry .entry-content .wp-block-video figcaption:lang(hi-IN), +.entry .entry-content .wp-block-image figcaption:lang(hi-IN), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(hi-IN), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(hi-IN), .entry .entry-content .wp-block-file:lang(hi-IN), .entry .entry-content .wp-block-file .wp-block-file__button:lang(hi-IN), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(hi-IN), .wp-caption-text:lang(hi-IN), .gallery-caption:lang(hi-IN) { + font-family: Arial, sans-serif; +} + +body:lang(mr), button:lang(mr), +input:lang(mr), +select:lang(mr), +optgroup:lang(mr), +textarea:lang(mr), .author-description .author-link:lang(mr), +.comment-metadata:lang(mr), +.comment-reply-link:lang(mr), +.comments-title:lang(mr), +.comment-author .fn:lang(mr), +.discussion-meta-info:lang(mr), +.entry-meta:lang(mr), +.entry-footer:lang(mr), +.main-navigation:lang(mr), +.no-comments:lang(mr), +.not-found .page-title:lang(mr), +.error-404 .page-title:lang(mr), +.post-navigation .post-title:lang(mr), +.page-links:lang(mr), +.page-description:lang(mr), +.pagination .nav-links:lang(mr), +.sticky-post:lang(mr), +.site-title:lang(mr), +.site-info:lang(mr), +#cancel-comment-reply-link:lang(mr), +h1:lang(mr), +h2:lang(mr), +h3:lang(mr), +h4:lang(mr), +h5:lang(mr), +h6:lang(mr), .page-title:lang(mr), blockquote cite:lang(mr), table:lang(mr), .button:lang(mr), +input:lang(mr)[type="button"], +input:lang(mr)[type="reset"], +input:lang(mr)[type="submit"], .comment-navigation .nav-previous:lang(mr), +.comment-navigation .nav-next:lang(mr), .comment-list .pingback .comment-body:lang(mr), +.comment-list .trackback .comment-body:lang(mr), .comment-list .pingback .comment-body .comment-edit-link:lang(mr), +.comment-list .trackback .comment-body .comment-edit-link:lang(mr), .comment-form .comment-notes:lang(mr), +.comment-form label:lang(mr), .widget_archive ul li:lang(mr), +.widget_categories ul li:lang(mr), +.widget_meta ul li:lang(mr), +.widget_nav_menu ul li:lang(mr), +.widget_pages ul li:lang(mr), +.widget_recent_comments ul li:lang(mr), +.widget_recent_entries ul li:lang(mr), +.widget_rss ul li:lang(mr), .widget_tag_cloud .tagcloud:lang(mr), .entry .entry-content .wp-block-button .wp-block-button__link:lang(mr), .entry .entry-content .wp-block-archives li:lang(mr), +.entry .entry-content .wp-block-categories li:lang(mr), +.entry .entry-content .wp-block-latest-posts li:lang(mr), .entry .entry-content .wp-block-verse:lang(mr), .entry .entry-content .has-drop-cap:lang(mr):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(mr), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(mr), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(mr), +.entry .entry-content .wp-block-cover-image h2:lang(mr), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(mr), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(mr), +.entry .entry-content .wp-block-cover h2:lang(mr), .entry .entry-content .wp-block-audio figcaption:lang(mr), +.entry .entry-content .wp-block-video figcaption:lang(mr), +.entry .entry-content .wp-block-image figcaption:lang(mr), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(mr), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(mr), .entry .entry-content .wp-block-file:lang(mr), .entry .entry-content .wp-block-file .wp-block-file__button:lang(mr), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(mr), .wp-caption-text:lang(mr), .gallery-caption:lang(mr) { + font-family: Arial, sans-serif; +} + +body:lang(ne-NP), button:lang(ne-NP), +input:lang(ne-NP), +select:lang(ne-NP), +optgroup:lang(ne-NP), +textarea:lang(ne-NP), .author-description .author-link:lang(ne-NP), +.comment-metadata:lang(ne-NP), +.comment-reply-link:lang(ne-NP), +.comments-title:lang(ne-NP), +.comment-author .fn:lang(ne-NP), +.discussion-meta-info:lang(ne-NP), +.entry-meta:lang(ne-NP), +.entry-footer:lang(ne-NP), +.main-navigation:lang(ne-NP), +.no-comments:lang(ne-NP), +.not-found .page-title:lang(ne-NP), +.error-404 .page-title:lang(ne-NP), +.post-navigation .post-title:lang(ne-NP), +.page-links:lang(ne-NP), +.page-description:lang(ne-NP), +.pagination .nav-links:lang(ne-NP), +.sticky-post:lang(ne-NP), +.site-title:lang(ne-NP), +.site-info:lang(ne-NP), +#cancel-comment-reply-link:lang(ne-NP), +h1:lang(ne-NP), +h2:lang(ne-NP), +h3:lang(ne-NP), +h4:lang(ne-NP), +h5:lang(ne-NP), +h6:lang(ne-NP), .page-title:lang(ne-NP), blockquote cite:lang(ne-NP), table:lang(ne-NP), .button:lang(ne-NP), +input:lang(ne-NP)[type="button"], +input:lang(ne-NP)[type="reset"], +input:lang(ne-NP)[type="submit"], .comment-navigation .nav-previous:lang(ne-NP), +.comment-navigation .nav-next:lang(ne-NP), .comment-list .pingback .comment-body:lang(ne-NP), +.comment-list .trackback .comment-body:lang(ne-NP), .comment-list .pingback .comment-body .comment-edit-link:lang(ne-NP), +.comment-list .trackback .comment-body .comment-edit-link:lang(ne-NP), .comment-form .comment-notes:lang(ne-NP), +.comment-form label:lang(ne-NP), .widget_archive ul li:lang(ne-NP), +.widget_categories ul li:lang(ne-NP), +.widget_meta ul li:lang(ne-NP), +.widget_nav_menu ul li:lang(ne-NP), +.widget_pages ul li:lang(ne-NP), +.widget_recent_comments ul li:lang(ne-NP), +.widget_recent_entries ul li:lang(ne-NP), +.widget_rss ul li:lang(ne-NP), .widget_tag_cloud .tagcloud:lang(ne-NP), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ne-NP), .entry .entry-content .wp-block-archives li:lang(ne-NP), +.entry .entry-content .wp-block-categories li:lang(ne-NP), +.entry .entry-content .wp-block-latest-posts li:lang(ne-NP), .entry .entry-content .wp-block-verse:lang(ne-NP), .entry .entry-content .has-drop-cap:lang(ne-NP):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ne-NP), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ne-NP), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ne-NP), +.entry .entry-content .wp-block-cover-image h2:lang(ne-NP), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ne-NP), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ne-NP), +.entry .entry-content .wp-block-cover h2:lang(ne-NP), .entry .entry-content .wp-block-audio figcaption:lang(ne-NP), +.entry .entry-content .wp-block-video figcaption:lang(ne-NP), +.entry .entry-content .wp-block-image figcaption:lang(ne-NP), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ne-NP), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ne-NP), .entry .entry-content .wp-block-file:lang(ne-NP), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ne-NP), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ne-NP), .wp-caption-text:lang(ne-NP), .gallery-caption:lang(ne-NP) { + font-family: Arial, sans-serif; +} + +body:lang(el), button:lang(el), +input:lang(el), +select:lang(el), +optgroup:lang(el), +textarea:lang(el), .author-description .author-link:lang(el), +.comment-metadata:lang(el), +.comment-reply-link:lang(el), +.comments-title:lang(el), +.comment-author .fn:lang(el), +.discussion-meta-info:lang(el), +.entry-meta:lang(el), +.entry-footer:lang(el), +.main-navigation:lang(el), +.no-comments:lang(el), +.not-found .page-title:lang(el), +.error-404 .page-title:lang(el), +.post-navigation .post-title:lang(el), +.page-links:lang(el), +.page-description:lang(el), +.pagination .nav-links:lang(el), +.sticky-post:lang(el), +.site-title:lang(el), +.site-info:lang(el), +#cancel-comment-reply-link:lang(el), +h1:lang(el), +h2:lang(el), +h3:lang(el), +h4:lang(el), +h5:lang(el), +h6:lang(el), .page-title:lang(el), blockquote cite:lang(el), table:lang(el), .button:lang(el), +input:lang(el)[type="button"], +input:lang(el)[type="reset"], +input:lang(el)[type="submit"], .comment-navigation .nav-previous:lang(el), +.comment-navigation .nav-next:lang(el), .comment-list .pingback .comment-body:lang(el), +.comment-list .trackback .comment-body:lang(el), .comment-list .pingback .comment-body .comment-edit-link:lang(el), +.comment-list .trackback .comment-body .comment-edit-link:lang(el), .comment-form .comment-notes:lang(el), +.comment-form label:lang(el), .widget_archive ul li:lang(el), +.widget_categories ul li:lang(el), +.widget_meta ul li:lang(el), +.widget_nav_menu ul li:lang(el), +.widget_pages ul li:lang(el), +.widget_recent_comments ul li:lang(el), +.widget_recent_entries ul li:lang(el), +.widget_rss ul li:lang(el), .widget_tag_cloud .tagcloud:lang(el), .entry .entry-content .wp-block-button .wp-block-button__link:lang(el), .entry .entry-content .wp-block-archives li:lang(el), +.entry .entry-content .wp-block-categories li:lang(el), +.entry .entry-content .wp-block-latest-posts li:lang(el), .entry .entry-content .wp-block-verse:lang(el), .entry .entry-content .has-drop-cap:lang(el):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(el), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(el), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(el), +.entry .entry-content .wp-block-cover-image h2:lang(el), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(el), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(el), +.entry .entry-content .wp-block-cover h2:lang(el), .entry .entry-content .wp-block-audio figcaption:lang(el), +.entry .entry-content .wp-block-video figcaption:lang(el), +.entry .entry-content .wp-block-image figcaption:lang(el), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(el), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(el), .entry .entry-content .wp-block-file:lang(el), .entry .entry-content .wp-block-file .wp-block-file__button:lang(el), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(el), .wp-caption-text:lang(el), .gallery-caption:lang(el) { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +body:lang(gu), button:lang(gu), +input:lang(gu), +select:lang(gu), +optgroup:lang(gu), +textarea:lang(gu), .author-description .author-link:lang(gu), +.comment-metadata:lang(gu), +.comment-reply-link:lang(gu), +.comments-title:lang(gu), +.comment-author .fn:lang(gu), +.discussion-meta-info:lang(gu), +.entry-meta:lang(gu), +.entry-footer:lang(gu), +.main-navigation:lang(gu), +.no-comments:lang(gu), +.not-found .page-title:lang(gu), +.error-404 .page-title:lang(gu), +.post-navigation .post-title:lang(gu), +.page-links:lang(gu), +.page-description:lang(gu), +.pagination .nav-links:lang(gu), +.sticky-post:lang(gu), +.site-title:lang(gu), +.site-info:lang(gu), +#cancel-comment-reply-link:lang(gu), +h1:lang(gu), +h2:lang(gu), +h3:lang(gu), +h4:lang(gu), +h5:lang(gu), +h6:lang(gu), .page-title:lang(gu), blockquote cite:lang(gu), table:lang(gu), .button:lang(gu), +input:lang(gu)[type="button"], +input:lang(gu)[type="reset"], +input:lang(gu)[type="submit"], .comment-navigation .nav-previous:lang(gu), +.comment-navigation .nav-next:lang(gu), .comment-list .pingback .comment-body:lang(gu), +.comment-list .trackback .comment-body:lang(gu), .comment-list .pingback .comment-body .comment-edit-link:lang(gu), +.comment-list .trackback .comment-body .comment-edit-link:lang(gu), .comment-form .comment-notes:lang(gu), +.comment-form label:lang(gu), .widget_archive ul li:lang(gu), +.widget_categories ul li:lang(gu), +.widget_meta ul li:lang(gu), +.widget_nav_menu ul li:lang(gu), +.widget_pages ul li:lang(gu), +.widget_recent_comments ul li:lang(gu), +.widget_recent_entries ul li:lang(gu), +.widget_rss ul li:lang(gu), .widget_tag_cloud .tagcloud:lang(gu), .entry .entry-content .wp-block-button .wp-block-button__link:lang(gu), .entry .entry-content .wp-block-archives li:lang(gu), +.entry .entry-content .wp-block-categories li:lang(gu), +.entry .entry-content .wp-block-latest-posts li:lang(gu), .entry .entry-content .wp-block-verse:lang(gu), .entry .entry-content .has-drop-cap:lang(gu):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(gu), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(gu), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(gu), +.entry .entry-content .wp-block-cover-image h2:lang(gu), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(gu), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(gu), +.entry .entry-content .wp-block-cover h2:lang(gu), .entry .entry-content .wp-block-audio figcaption:lang(gu), +.entry .entry-content .wp-block-video figcaption:lang(gu), +.entry .entry-content .wp-block-image figcaption:lang(gu), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(gu), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(gu), .entry .entry-content .wp-block-file:lang(gu), .entry .entry-content .wp-block-file .wp-block-file__button:lang(gu), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(gu), .wp-caption-text:lang(gu), .gallery-caption:lang(gu) { + font-family: Arial, sans-serif; +} + +body:lang(he-IL), button:lang(he-IL), +input:lang(he-IL), +select:lang(he-IL), +optgroup:lang(he-IL), +textarea:lang(he-IL), .author-description .author-link:lang(he-IL), +.comment-metadata:lang(he-IL), +.comment-reply-link:lang(he-IL), +.comments-title:lang(he-IL), +.comment-author .fn:lang(he-IL), +.discussion-meta-info:lang(he-IL), +.entry-meta:lang(he-IL), +.entry-footer:lang(he-IL), +.main-navigation:lang(he-IL), +.no-comments:lang(he-IL), +.not-found .page-title:lang(he-IL), +.error-404 .page-title:lang(he-IL), +.post-navigation .post-title:lang(he-IL), +.page-links:lang(he-IL), +.page-description:lang(he-IL), +.pagination .nav-links:lang(he-IL), +.sticky-post:lang(he-IL), +.site-title:lang(he-IL), +.site-info:lang(he-IL), +#cancel-comment-reply-link:lang(he-IL), +h1:lang(he-IL), +h2:lang(he-IL), +h3:lang(he-IL), +h4:lang(he-IL), +h5:lang(he-IL), +h6:lang(he-IL), .page-title:lang(he-IL), blockquote cite:lang(he-IL), table:lang(he-IL), .button:lang(he-IL), +input:lang(he-IL)[type="button"], +input:lang(he-IL)[type="reset"], +input:lang(he-IL)[type="submit"], .comment-navigation .nav-previous:lang(he-IL), +.comment-navigation .nav-next:lang(he-IL), .comment-list .pingback .comment-body:lang(he-IL), +.comment-list .trackback .comment-body:lang(he-IL), .comment-list .pingback .comment-body .comment-edit-link:lang(he-IL), +.comment-list .trackback .comment-body .comment-edit-link:lang(he-IL), .comment-form .comment-notes:lang(he-IL), +.comment-form label:lang(he-IL), .widget_archive ul li:lang(he-IL), +.widget_categories ul li:lang(he-IL), +.widget_meta ul li:lang(he-IL), +.widget_nav_menu ul li:lang(he-IL), +.widget_pages ul li:lang(he-IL), +.widget_recent_comments ul li:lang(he-IL), +.widget_recent_entries ul li:lang(he-IL), +.widget_rss ul li:lang(he-IL), .widget_tag_cloud .tagcloud:lang(he-IL), .entry .entry-content .wp-block-button .wp-block-button__link:lang(he-IL), .entry .entry-content .wp-block-archives li:lang(he-IL), +.entry .entry-content .wp-block-categories li:lang(he-IL), +.entry .entry-content .wp-block-latest-posts li:lang(he-IL), .entry .entry-content .wp-block-verse:lang(he-IL), .entry .entry-content .has-drop-cap:lang(he-IL):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(he-IL), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(he-IL), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(he-IL), +.entry .entry-content .wp-block-cover-image h2:lang(he-IL), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(he-IL), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(he-IL), +.entry .entry-content .wp-block-cover h2:lang(he-IL), .entry .entry-content .wp-block-audio figcaption:lang(he-IL), +.entry .entry-content .wp-block-video figcaption:lang(he-IL), +.entry .entry-content .wp-block-image figcaption:lang(he-IL), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(he-IL), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(he-IL), .entry .entry-content .wp-block-file:lang(he-IL), .entry .entry-content .wp-block-file .wp-block-file__button:lang(he-IL), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(he-IL), .wp-caption-text:lang(he-IL), .gallery-caption:lang(he-IL) { + font-family: "Arial Hebrew", Arial, sans-serif; +} + +body:lang(ja), button:lang(ja), +input:lang(ja), +select:lang(ja), +optgroup:lang(ja), +textarea:lang(ja), .author-description .author-link:lang(ja), +.comment-metadata:lang(ja), +.comment-reply-link:lang(ja), +.comments-title:lang(ja), +.comment-author .fn:lang(ja), +.discussion-meta-info:lang(ja), +.entry-meta:lang(ja), +.entry-footer:lang(ja), +.main-navigation:lang(ja), +.no-comments:lang(ja), +.not-found .page-title:lang(ja), +.error-404 .page-title:lang(ja), +.post-navigation .post-title:lang(ja), +.page-links:lang(ja), +.page-description:lang(ja), +.pagination .nav-links:lang(ja), +.sticky-post:lang(ja), +.site-title:lang(ja), +.site-info:lang(ja), +#cancel-comment-reply-link:lang(ja), +h1:lang(ja), +h2:lang(ja), +h3:lang(ja), +h4:lang(ja), +h5:lang(ja), +h6:lang(ja), .page-title:lang(ja), blockquote cite:lang(ja), table:lang(ja), .button:lang(ja), +input:lang(ja)[type="button"], +input:lang(ja)[type="reset"], +input:lang(ja)[type="submit"], .comment-navigation .nav-previous:lang(ja), +.comment-navigation .nav-next:lang(ja), .comment-list .pingback .comment-body:lang(ja), +.comment-list .trackback .comment-body:lang(ja), .comment-list .pingback .comment-body .comment-edit-link:lang(ja), +.comment-list .trackback .comment-body .comment-edit-link:lang(ja), .comment-form .comment-notes:lang(ja), +.comment-form label:lang(ja), .widget_archive ul li:lang(ja), +.widget_categories ul li:lang(ja), +.widget_meta ul li:lang(ja), +.widget_nav_menu ul li:lang(ja), +.widget_pages ul li:lang(ja), +.widget_recent_comments ul li:lang(ja), +.widget_recent_entries ul li:lang(ja), +.widget_rss ul li:lang(ja), .widget_tag_cloud .tagcloud:lang(ja), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ja), .entry .entry-content .wp-block-archives li:lang(ja), +.entry .entry-content .wp-block-categories li:lang(ja), +.entry .entry-content .wp-block-latest-posts li:lang(ja), .entry .entry-content .wp-block-verse:lang(ja), .entry .entry-content .has-drop-cap:lang(ja):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ja), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ja), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ja), +.entry .entry-content .wp-block-cover-image h2:lang(ja), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ja), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ja), +.entry .entry-content .wp-block-cover h2:lang(ja), .entry .entry-content .wp-block-audio figcaption:lang(ja), +.entry .entry-content .wp-block-video figcaption:lang(ja), +.entry .entry-content .wp-block-image figcaption:lang(ja), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ja), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ja), .entry .entry-content .wp-block-file:lang(ja), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ja), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ja), .wp-caption-text:lang(ja), .gallery-caption:lang(ja) { + font-family: -apple-system, BlinkMacSystemFont, "Hiragino Sans", Meiryo, "Helvetica Neue", sans-serif; +} + +body:lang(ko-KR), button:lang(ko-KR), +input:lang(ko-KR), +select:lang(ko-KR), +optgroup:lang(ko-KR), +textarea:lang(ko-KR), .author-description .author-link:lang(ko-KR), +.comment-metadata:lang(ko-KR), +.comment-reply-link:lang(ko-KR), +.comments-title:lang(ko-KR), +.comment-author .fn:lang(ko-KR), +.discussion-meta-info:lang(ko-KR), +.entry-meta:lang(ko-KR), +.entry-footer:lang(ko-KR), +.main-navigation:lang(ko-KR), +.no-comments:lang(ko-KR), +.not-found .page-title:lang(ko-KR), +.error-404 .page-title:lang(ko-KR), +.post-navigation .post-title:lang(ko-KR), +.page-links:lang(ko-KR), +.page-description:lang(ko-KR), +.pagination .nav-links:lang(ko-KR), +.sticky-post:lang(ko-KR), +.site-title:lang(ko-KR), +.site-info:lang(ko-KR), +#cancel-comment-reply-link:lang(ko-KR), +h1:lang(ko-KR), +h2:lang(ko-KR), +h3:lang(ko-KR), +h4:lang(ko-KR), +h5:lang(ko-KR), +h6:lang(ko-KR), .page-title:lang(ko-KR), blockquote cite:lang(ko-KR), table:lang(ko-KR), .button:lang(ko-KR), +input:lang(ko-KR)[type="button"], +input:lang(ko-KR)[type="reset"], +input:lang(ko-KR)[type="submit"], .comment-navigation .nav-previous:lang(ko-KR), +.comment-navigation .nav-next:lang(ko-KR), .comment-list .pingback .comment-body:lang(ko-KR), +.comment-list .trackback .comment-body:lang(ko-KR), .comment-list .pingback .comment-body .comment-edit-link:lang(ko-KR), +.comment-list .trackback .comment-body .comment-edit-link:lang(ko-KR), .comment-form .comment-notes:lang(ko-KR), +.comment-form label:lang(ko-KR), .widget_archive ul li:lang(ko-KR), +.widget_categories ul li:lang(ko-KR), +.widget_meta ul li:lang(ko-KR), +.widget_nav_menu ul li:lang(ko-KR), +.widget_pages ul li:lang(ko-KR), +.widget_recent_comments ul li:lang(ko-KR), +.widget_recent_entries ul li:lang(ko-KR), +.widget_rss ul li:lang(ko-KR), .widget_tag_cloud .tagcloud:lang(ko-KR), .entry .entry-content .wp-block-button .wp-block-button__link:lang(ko-KR), .entry .entry-content .wp-block-archives li:lang(ko-KR), +.entry .entry-content .wp-block-categories li:lang(ko-KR), +.entry .entry-content .wp-block-latest-posts li:lang(ko-KR), .entry .entry-content .wp-block-verse:lang(ko-KR), .entry .entry-content .has-drop-cap:lang(ko-KR):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(ko-KR), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(ko-KR), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(ko-KR), +.entry .entry-content .wp-block-cover-image h2:lang(ko-KR), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(ko-KR), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(ko-KR), +.entry .entry-content .wp-block-cover h2:lang(ko-KR), .entry .entry-content .wp-block-audio figcaption:lang(ko-KR), +.entry .entry-content .wp-block-video figcaption:lang(ko-KR), +.entry .entry-content .wp-block-image figcaption:lang(ko-KR), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(ko-KR), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(ko-KR), .entry .entry-content .wp-block-file:lang(ko-KR), .entry .entry-content .wp-block-file .wp-block-file__button:lang(ko-KR), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(ko-KR), .wp-caption-text:lang(ko-KR), .gallery-caption:lang(ko-KR) { + font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; +} + +body:lang(th), button:lang(th), +input:lang(th), +select:lang(th), +optgroup:lang(th), +textarea:lang(th), .author-description .author-link:lang(th), +.comment-metadata:lang(th), +.comment-reply-link:lang(th), +.comments-title:lang(th), +.comment-author .fn:lang(th), +.discussion-meta-info:lang(th), +.entry-meta:lang(th), +.entry-footer:lang(th), +.main-navigation:lang(th), +.no-comments:lang(th), +.not-found .page-title:lang(th), +.error-404 .page-title:lang(th), +.post-navigation .post-title:lang(th), +.page-links:lang(th), +.page-description:lang(th), +.pagination .nav-links:lang(th), +.sticky-post:lang(th), +.site-title:lang(th), +.site-info:lang(th), +#cancel-comment-reply-link:lang(th), +h1:lang(th), +h2:lang(th), +h3:lang(th), +h4:lang(th), +h5:lang(th), +h6:lang(th), .page-title:lang(th), blockquote cite:lang(th), table:lang(th), .button:lang(th), +input:lang(th)[type="button"], +input:lang(th)[type="reset"], +input:lang(th)[type="submit"], .comment-navigation .nav-previous:lang(th), +.comment-navigation .nav-next:lang(th), .comment-list .pingback .comment-body:lang(th), +.comment-list .trackback .comment-body:lang(th), .comment-list .pingback .comment-body .comment-edit-link:lang(th), +.comment-list .trackback .comment-body .comment-edit-link:lang(th), .comment-form .comment-notes:lang(th), +.comment-form label:lang(th), .widget_archive ul li:lang(th), +.widget_categories ul li:lang(th), +.widget_meta ul li:lang(th), +.widget_nav_menu ul li:lang(th), +.widget_pages ul li:lang(th), +.widget_recent_comments ul li:lang(th), +.widget_recent_entries ul li:lang(th), +.widget_rss ul li:lang(th), .widget_tag_cloud .tagcloud:lang(th), .entry .entry-content .wp-block-button .wp-block-button__link:lang(th), .entry .entry-content .wp-block-archives li:lang(th), +.entry .entry-content .wp-block-categories li:lang(th), +.entry .entry-content .wp-block-latest-posts li:lang(th), .entry .entry-content .wp-block-verse:lang(th), .entry .entry-content .has-drop-cap:lang(th):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(th), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(th), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(th), +.entry .entry-content .wp-block-cover-image h2:lang(th), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(th), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(th), +.entry .entry-content .wp-block-cover h2:lang(th), .entry .entry-content .wp-block-audio figcaption:lang(th), +.entry .entry-content .wp-block-video figcaption:lang(th), +.entry .entry-content .wp-block-image figcaption:lang(th), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(th), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(th), .entry .entry-content .wp-block-file:lang(th), .entry .entry-content .wp-block-file .wp-block-file__button:lang(th), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(th), .wp-caption-text:lang(th), .gallery-caption:lang(th) { + font-family: "Sukhumvit Set", "Helvetica Neue", helvetica, arial, sans-serif; +} + +body:lang(vi), button:lang(vi), +input:lang(vi), +select:lang(vi), +optgroup:lang(vi), +textarea:lang(vi), .author-description .author-link:lang(vi), +.comment-metadata:lang(vi), +.comment-reply-link:lang(vi), +.comments-title:lang(vi), +.comment-author .fn:lang(vi), +.discussion-meta-info:lang(vi), +.entry-meta:lang(vi), +.entry-footer:lang(vi), +.main-navigation:lang(vi), +.no-comments:lang(vi), +.not-found .page-title:lang(vi), +.error-404 .page-title:lang(vi), +.post-navigation .post-title:lang(vi), +.page-links:lang(vi), +.page-description:lang(vi), +.pagination .nav-links:lang(vi), +.sticky-post:lang(vi), +.site-title:lang(vi), +.site-info:lang(vi), +#cancel-comment-reply-link:lang(vi), +h1:lang(vi), +h2:lang(vi), +h3:lang(vi), +h4:lang(vi), +h5:lang(vi), +h6:lang(vi), .page-title:lang(vi), blockquote cite:lang(vi), table:lang(vi), .button:lang(vi), +input:lang(vi)[type="button"], +input:lang(vi)[type="reset"], +input:lang(vi)[type="submit"], .comment-navigation .nav-previous:lang(vi), +.comment-navigation .nav-next:lang(vi), .comment-list .pingback .comment-body:lang(vi), +.comment-list .trackback .comment-body:lang(vi), .comment-list .pingback .comment-body .comment-edit-link:lang(vi), +.comment-list .trackback .comment-body .comment-edit-link:lang(vi), .comment-form .comment-notes:lang(vi), +.comment-form label:lang(vi), .widget_archive ul li:lang(vi), +.widget_categories ul li:lang(vi), +.widget_meta ul li:lang(vi), +.widget_nav_menu ul li:lang(vi), +.widget_pages ul li:lang(vi), +.widget_recent_comments ul li:lang(vi), +.widget_recent_entries ul li:lang(vi), +.widget_rss ul li:lang(vi), .widget_tag_cloud .tagcloud:lang(vi), .entry .entry-content .wp-block-button .wp-block-button__link:lang(vi), .entry .entry-content .wp-block-archives li:lang(vi), +.entry .entry-content .wp-block-categories li:lang(vi), +.entry .entry-content .wp-block-latest-posts li:lang(vi), .entry .entry-content .wp-block-verse:lang(vi), .entry .entry-content .has-drop-cap:lang(vi):not(:focus):first-letter, .entry .entry-content .wp-block-pullquote cite:lang(vi), .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text:lang(vi), +.entry .entry-content .wp-block-cover-image .wp-block-cover-text:lang(vi), +.entry .entry-content .wp-block-cover-image h2:lang(vi), +.entry .entry-content .wp-block-cover .wp-block-cover-image-text:lang(vi), +.entry .entry-content .wp-block-cover .wp-block-cover-text:lang(vi), +.entry .entry-content .wp-block-cover h2:lang(vi), .entry .entry-content .wp-block-audio figcaption:lang(vi), +.entry .entry-content .wp-block-video figcaption:lang(vi), +.entry .entry-content .wp-block-image figcaption:lang(vi), +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption:lang(vi), +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption:lang(vi), .entry .entry-content .wp-block-file:lang(vi), .entry .entry-content .wp-block-file .wp-block-file__button:lang(vi), .entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta:lang(vi), .wp-caption-text:lang(vi), .gallery-caption:lang(vi) { + font-family: "Libre Franklin", sans-serif; +} + +/* Normalize */ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +/* Typography */ +html { + font-size: 22px; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #111; + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + font-size: 1em; + line-height: 1.8; + margin: 0; + text-rendering: optimizeLegibility; +} + +button, +input, +select, +optgroup, +textarea { + color: #111; + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + line-height: 1.8; + text-rendering: optimizeLegibility; +} + +.author-description .author-link, +.comment-metadata, +.comment-reply-link, +.comments-title, +.comment-author .fn, +.discussion-meta-info, +.entry-meta, +.entry-footer, +.main-navigation, +.no-comments, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.page-links, +.page-description, +.pagination .nav-links, +.sticky-post, +.site-title, +.site-info, +#cancel-comment-reply-link, +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.main-navigation, +.page-description, +.author-description .author-link, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.pagination .nav-links, +.comments-title, +.comment-author .fn, +.no-comments, +.site-title, +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.page-title { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; +} + +.site-branding, +.main-navigation ul.main-menu > li, +.social-navigation, +.author-description .author-bio, +.nav-links { + line-height: 1.25; +} + +h1 { + font-size: 2.25em; +} + +@media only screen and (min-width: 768px) { + h1 { + font-size: 2.8125em; + } +} + +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.has-larger-font-size, +h2 { + font-size: 1.6875em; +} + +@media only screen and (min-width: 768px) { + .entry-title, + .not-found .page-title, + .error-404 .page-title, + .has-larger-font-size, + h2 { + font-size: 2.25em; + } +} + +.has-regular-font-size, +.has-large-font-size, +.comments-title, +h3 { + font-size: 1.6875em; +} + +.site-title, +.site-description, +.main-navigation, +.nav-links, +.page-title, +.page-description, +.comment-author .fn, +.no-comments, +h2.author-title, +p.author-bio, +h4 { + font-size: 1.125em; +} + +.pagination .nav-links, +.comment-content, +h5 { + font-size: 0.88889em; +} + +.entry-meta, +.entry-footer, +.discussion-meta-info, +.site-info, +.has-small-font-size, +.comment-reply-link, +.comment-metadata, +.comment-notes, +.sticky-post, +#cancel-comment-reply-link, +img:after, +h6 { + font-size: 0.71111em; +} + +.site-title, +.page-title { + font-weight: normal; +} + +.page-description, +.page-links a { + font-weight: bold; +} + +.site-description { + letter-spacing: -0.01em; +} + +.post-navigation .post-title, +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.comments-title, +blockquote { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; + word-wrap: break-word; +} + +/* Do not hyphenate entry title on tablet view and bigger. */ +@media only screen and (min-width: 768px) { + .entry-title { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } +} + +p { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote cite { + font-size: 0.71111em; + font-style: normal; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +pre { + font-size: 0.88889em; + font-family: "Courier 10 Pitch", Courier, monospace; + line-height: 1.8; + overflow: auto; +} + +code, +kbd, +tt, +var { + font-size: 0.88889em; + font-family: Menlo, monaco, Consolas, Lucida Console, monospace; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, +ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: none; +} + +a:focus { + text-decoration: underline; +} + +/* Elements */ +html { + box-sizing: border-box; +} + +::-moz-selection { + background-color: #bfdcea; +} + +::selection { + background-color: #bfdcea; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + background-color: #fff; +} + +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:hover, +a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: thin; + outline-style: dotted; + text-decoration: underline; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + margin: 1rem 0; +} + +h1:not(.site-title):before, +h2:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +hr { + background-color: #767676; + border: 0; + height: 2px; +} + +ul, +ol { + padding-left: 1rem; +} + +ul { + list-style: disc; +} + +ul ul { + list-style-type: circle; +} + +ol { + list-style: decimal; +} + +li { + line-height: 1.8; +} + +li > ul, +li > ol { + padding-left: 2rem; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 1rem 1rem; +} + +img { + height: auto; + max-width: 100%; + position: relative; +} + +figure { + margin: 0; +} + +blockquote { + border-left: 2px solid #0073aa; + margin-left: 0; + padding: 0 0 0 1rem; +} + +blockquote > p { + margin: 0 0 1rem; +} + +blockquote cite { + color: #767676; +} + +table { + margin: 0 0 1rem; + border-collapse: collapse; + width: 100%; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +table td, +table th { + padding: 0.5em; + border: 1px solid #767676; + word-break: break-all; +} + +/* Forms */ +.button, +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + transition: background 150ms ease-in-out; + background: #0073aa; + border: none; + border-radius: 5px; + box-sizing: border-box; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.88889em; + font-weight: 700; + line-height: 1.2; + outline: none; + padding: 0.76rem 1rem; + text-decoration: none; + vertical-align: bottom; +} + +.button:hover, +button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + background: #111; + cursor: pointer; +} + +.button:visited, +button:visited, +input[type="button"]:visited, +input[type="reset"]:visited, +input[type="submit"]:visited { + color: #fff; + text-decoration: none; +} + +.button:focus, +button:focus, +input[type="button"]:focus, +input[type="reset"]:focus, +input[type="submit"]:focus { + background: #111; + outline: thin dotted; + outline-offset: -4px; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + -webkit-backface-visibility: hidden; + background: #fff; + border: solid 1px #ccc; + box-sizing: border-box; + outline: none; + padding: 0.36rem 0.66rem; + -webkit-appearance: none; + outline-offset: 0; + border-radius: 0; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="number"]:focus, +input[type="tel"]:focus, +input[type="range"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="time"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="color"]:focus, +textarea:focus { + border-color: #0073aa; + outline: thin solid rgba(0, 115, 170, 0.15); + outline-offset: -4px; +} + +input[type="search"]::-webkit-search-decoration { + display: none; +} + +textarea { + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + resize: vertical; +} + +form p { + margin: 1rem 0; +} + +/* Navigation */ +/*-------------------------------------------------------------- +## Links +--------------------------------------------------------------*/ +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:visited { + color: #0073aa; +} + +a:hover, +a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: thin dotted; + text-decoration: underline; +} + +/*-------------------------------------------------------------- +## Menus +--------------------------------------------------------------*/ +/** === Main menu === */ +.main-navigation { + display: block; + margin-top: 0.25rem; + /* Un-style buttons */ + /* + * Sub-menu styles + * + * :focus-within needs its own selector so other similar + * selectors don’t get ignored if a browser doesn’t recognize it + */ + /** + * Fade-in animation for top-level submenus + */ + /** + * Off-canvas touch device styles + */ +} + +body.page .main-navigation { + display: block; +} + +.main-navigation > div { + display: inline; +} + +.main-navigation button { + display: inline-block; + border: none; + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 700; + line-height: 1.2; + text-decoration: none; + background: transparent; + color: inherit; + cursor: pointer; + transition: background 250ms ease-in-out, transform 150ms ease; + -webkit-appearance: none; + -moz-appearance: none; +} + +.main-navigation button:hover, .main-navigation button:focus { + background: transparent; +} + +.main-navigation button:focus { + outline: 1px solid transparent; + outline-offset: -4px; +} + +.main-navigation button:active { + transform: scale(0.99); +} + +.main-navigation .main-menu { + display: inline-block; + margin: 0; + padding: 0; +} + +.main-navigation .main-menu > li { + color: #0073aa; + display: inline; + position: relative; +} + +.main-navigation .main-menu > li > a { + font-weight: 700; + color: #0073aa; + margin-right: 0.5rem; +} + +.main-navigation .main-menu > li > a + svg { + margin-right: 0.5rem; +} + +.main-navigation .main-menu > li > a:hover, +.main-navigation .main-menu > li > a:hover + svg { + color: #005177; +} + +.main-navigation .main-menu > li.menu-item-has-children { + display: inline-block; + position: inherit; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu > li.menu-item-has-children { + position: relative; + } +} + +.main-navigation .main-menu > li.menu-item-has-children > a { + margin-right: 0.125rem; +} + +.main-navigation .main-menu > li.menu-item-has-children > a:after, +.main-navigation .main-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: ""; + display: none; +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand { + display: inline-block; + margin-right: 0.25rem; + /* Priority+ Menu */ +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand.main-menu-more-toggle { + position: relative; + height: 24px; + line-height: 1.2; + width: 24px; + padding: 0; + margin-left: 0.5rem; +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand.main-menu-more-toggle svg { + height: 24px; + width: 24px; + top: -0.125rem; + vertical-align: text-bottom; +} + +.wp-customizer-unloading .main-navigation .main-menu > li.menu-item-has-children .submenu-expand, .main-navigation .main-menu > li.menu-item-has-children .submenu-expand.is-empty { + display: none; +} + +.main-navigation .main-menu > li.menu-item-has-children .submenu-expand svg { + position: relative; + top: 0.2rem; +} + +.main-navigation .main-menu > li:last-child > a, +.main-navigation .main-menu > li:last-child.menu-item-has-children .submenu-expand { + margin-right: 0; +} + +.main-navigation .sub-menu { + background-color: #0073aa; + color: #fff; + list-style: none; + padding-left: 0; + position: absolute; + opacity: 0; + left: -9999px; + z-index: 99999; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu { + width: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + } +} + +.main-navigation .sub-menu > li { + display: block; + float: none; + position: relative; +} + +.main-navigation .sub-menu > li.menu-item-has-children .submenu-expand { + display: inline-block; + position: absolute; + width: calc( 24px + 1rem); + right: 0; + top: calc( .125 * 1rem); + bottom: 0; + color: white; + line-height: 1; + padding: calc( .5 * 1rem); +} + +.main-navigation .sub-menu > li.menu-item-has-children .submenu-expand svg { + top: 0; +} + +.main-navigation .sub-menu > li.menu-item-has-children .submenu-expand { + margin-right: 0; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: "\203a"; + } +} + +.main-navigation .sub-menu > li > a, +.main-navigation .sub-menu > li > .menu-item-link-return { + color: #fff; + display: block; + line-height: 1.2; + text-shadow: none; + padding: calc( .5 * 1rem) calc( 24px + 1rem) calc( .5 * 1rem) 1rem; + white-space: nowrap; +} + +.main-navigation .sub-menu > li > a:hover, .main-navigation .sub-menu > li > a:focus, +.main-navigation .sub-menu > li > .menu-item-link-return:hover, +.main-navigation .sub-menu > li > .menu-item-link-return:focus { + background: #005177; +} + +.main-navigation .sub-menu > li > a:hover:after, .main-navigation .sub-menu > li > a:focus:after, +.main-navigation .sub-menu > li > .menu-item-link-return:hover:after, +.main-navigation .sub-menu > li > .menu-item-link-return:focus:after { + background: #005177; +} + +.main-navigation .sub-menu > li > .menu-item-link-return { + width: 100%; + font-size: 22px; + font-weight: normal; + text-align: left; +} + +.main-navigation .sub-menu > li > a:empty { + display: none; +} + +.main-navigation .sub-menu > li.mobile-parent-nav-menu-item { + display: none; + font-size: 0.88889em; + font-weight: normal; +} + +.main-navigation .sub-menu > li.mobile-parent-nav-menu-item svg { + position: relative; + top: 0.2rem; + margin-right: calc( .25 * 1rem); +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu { + display: block; + left: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + /* Non-mobile position */ + /* Nested sub-menu dashes */ +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu { + display: block; + left: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + /* Non-mobile position */ + /* Nested sub-menu dashes */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu { + display: block; + margin-top: 0; + opacity: 1; + position: absolute; + left: 0; + right: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu { + display: block; + margin-top: 0; + opacity: 1; + position: absolute; + left: 0; + right: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu.hidden-links { + left: 0; + width: 100%; + display: table; + position: absolute; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu.hidden-links { + left: 0; + width: 100%; + display: table; + position: absolute; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu.hidden-links { + right: 0; + left: auto; + display: block; + width: max-content; + } + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu.hidden-links { + right: 0; + left: auto; + display: block; + width: max-content; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .submenu-expand { + display: none; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .submenu-expand { + display: none; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + left: 0; + opacity: 1; + /* Non-mobile position */ +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + left: 0; + opacity: 1; + /* Non-mobile position */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu { + float: none; + max-width: 100%; + } + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu { + float: none; + max-width: 100%; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu { + counter-reset: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu { + counter-reset: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas)[focus-within] > .sub-menu .sub-menu > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu .sub-menu > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu { + display: block; + left: 0; + margin-top: 0; + opacity: 1; + width: auto; + min-width: 100%; + /* Non-mobile position */ + /* Nested sub-menu dashes */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu, + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu, + .main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu { + display: block; + float: none; + margin-top: 0; + opacity: 1; + position: absolute; + left: 0; + right: auto; + top: auto; + bottom: auto; + height: auto; + min-width: -moz-max-content; + min-width: -webkit-max-content; + min-width: max-content; + transform: none; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu.hidden-links, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu.hidden-links, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu.hidden-links { + left: 0; + width: 100%; + display: table; + position: absolute; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu.hidden-links, + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu.hidden-links, + .main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu.hidden-links { + right: 0; + left: auto; + display: table; + width: max-content; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .submenu-expand, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .submenu-expand, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .submenu-expand { + display: none; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu { + display: block; + margin-top: inherit; + position: relative; + width: 100%; + left: 0; + opacity: 1; + /* Non-mobile position */ +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu, + .main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu, + .main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu { + float: none; + max-width: 100%; + } +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu { + counter-reset: submenu; +} + +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu .sub-menu > li > a::before, +.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu .sub-menu > li > a::before, +.main-navigation .main-menu .menu-item-has-children.is-focused:not(.off-canvas) > .sub-menu .sub-menu > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.main-navigation .main-menu > .menu-item-has-children:not(.off-canvas):hover > .sub-menu { + animation: fade_in 0.1s forwards; +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu .submenu-expand .svg-icon { + transform: rotate(270deg); +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu .sub-menu { + opacity: 0; + position: absolute; + z-index: 0; + transform: translateX(-100%); +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li:hover, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li:focus, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li > a:hover, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu li > a:focus { + background-color: transparent; +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu > li > a, +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu > li > .menu-item-link-return { + white-space: inherit; +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true { + display: table; + margin-top: 0; + opacity: 1; + padding-left: 0; + /* Mobile position */ + left: 0; + top: 0; + right: 0; + bottom: 0; + position: fixed; + z-index: 100000; + /* Make sure appears above mobile admin bar */ + width: 100vw; + height: 100vh; + max-width: 100vw; + transform: translateX(100%); + animation: slide_in_right 0.3s forwards; + /* Prevent menu from being blocked by admin bar */ +} + +.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true > .mobile-parent-nav-menu-item { + display: block; +} + +.admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true { + top: 46px; + height: calc( 100vh - 46px); + /* WP core breakpoint */ +} + +.admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true .sub-menu.expanded-true { + top: 0; +} + +@media only screen and (min-width: 782px) { + .admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true { + top: 32px; + height: calc( 100vh - 32px); + } + .admin-bar .main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true .sub-menu.expanded-true { + top: 0; + } +} + +.main-navigation .main-menu-more:nth-child(n+3) { + display: none; +} + +/* Menu animation */ +@keyframes slide_in_right { + 100% { + transform: translateX(0%); + } +} + +@keyframes fade_in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* Social menu */ +.social-navigation { + margin-top: calc(1rem / 2); + text-align: left; +} + +.social-navigation ul.social-links-menu { + content: ""; + display: table; + table-layout: fixed; + display: inline-block; + margin: 0; + padding: 0; +} + +.social-navigation ul.social-links-menu li { + display: inline-block; + vertical-align: bottom; + vertical-align: -webkit-baseline-middle; + list-style: none; +} + +.social-navigation ul.social-links-menu li:nth-child(n+2) { + margin-left: 0.1em; +} + +.social-navigation ul.social-links-menu li a { + border-bottom: 1px solid transparent; + display: block; + color: #111; + margin-bottom: -1px; + transition: opacity 110ms ease-in-out; +} + +.social-navigation ul.social-links-menu li a:hover, .social-navigation ul.social-links-menu li a:active { + color: #111; + opacity: 0.6; +} + +.social-navigation ul.social-links-menu li a:focus { + color: #111; + opacity: 1; + border-bottom: 1px solid #111; +} + +.social-navigation ul.social-links-menu li a svg { + display: block; + width: 32px; + height: 32px; + transform: translateZ(0); +} + +.social-navigation ul.social-links-menu li a svg#ui-icon-link { + transform: rotate(-45deg); +} + +@media only screen and (min-width: 768px) { + .site-title + .social-navigation, + .site-description + .social-navigation { + margin-top: calc(1rem / 5); + } +} + +/** === Footer menu === */ +.footer-navigation { + display: inline; +} + +.footer-navigation > div { + display: inline; +} + +.footer-navigation .footer-menu { + display: inline; + padding-left: 0; +} + +.footer-navigation .footer-menu li { + display: inline; + margin-right: 1rem; +} + +/*-------------------------------------------------------------- +## Next / Previous +--------------------------------------------------------------*/ +/* Next/Previous navigation */ +.post-navigation { + margin: calc(3 * 1rem) 0; +} + +@media only screen and (min-width: 768px) { + .post-navigation { + margin: calc(3 * 1rem) calc(10% + 60px); + max-width: calc(6 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .post-navigation { + margin: calc(3 * 1rem) 0; + max-width: 100%; + } +} + +.post-navigation .nav-links { + margin: 0 1rem; + max-width: 100%; + display: flex; + flex-direction: column; +} + +@media only screen and (min-width: 768px) { + .post-navigation .nav-links { + margin: 0; + } +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links { + flex-direction: row; + margin: 0 calc(10% + 60px); + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.post-navigation .nav-links a .meta-nav { + color: #767676; + user-select: none; +} + +.post-navigation .nav-links a .meta-nav:before, .post-navigation .nav-links a .meta-nav:after { + display: none; + content: "—"; + width: 2em; + color: #767676; + height: 1em; +} + +.post-navigation .nav-links a .post-title { + hyphens: auto; +} + +.post-navigation .nav-links a:hover { + color: #005177; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous, + .post-navigation .nav-links .nav-next { + min-width: calc(50% - 2 * 1rem); + } +} + +.post-navigation .nav-links .nav-previous { + order: 2; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous { + order: 1; + } +} + +.post-navigation .nav-links .nav-previous + .nav-next { + margin-bottom: 1rem; +} + +.post-navigation .nav-links .nav-previous .meta-nav:before { + display: inline; +} + +.post-navigation .nav-links .nav-next { + order: 1; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-next { + order: 2; + padding-left: 1rem; + } +} + +.post-navigation .nav-links .nav-next .meta-nav:after { + display: inline; +} + +.pagination .nav-links { + display: flex; + flex-wrap: wrap; + padding: 0 calc(.5 * 1rem); +} + +.pagination .nav-links > * { + padding: calc(.5 * 1rem); +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.prev { + padding-left: 0; +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.next { + padding-right: 0; +} + +.pagination .nav-links a:focus { + text-decoration: underline; + outline-offset: -1px; +} + +.pagination .nav-links a:focus.prev, .pagination .nav-links a:focus.next { + text-decoration: none; +} + +.pagination .nav-links a:focus.prev .nav-prev-text, +.pagination .nav-links a:focus.prev .nav-next-text, .pagination .nav-links a:focus.next .nav-prev-text, +.pagination .nav-links a:focus.next .nav-next-text { + text-decoration: underline; +} + +.pagination .nav-links .nav-next-text, +.pagination .nav-links .nav-prev-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .pagination .nav-links { + margin-left: calc(10% + 60px); + padding: 0; + } + .pagination .nav-links .prev > *, + .pagination .nav-links .next > * { + display: inline-block; + vertical-align: text-bottom; + } + .pagination .nav-links > * { + padding: 1rem; + } +} + +.comment-navigation .nav-links { + display: flex; + flex-direction: row; +} + +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + min-width: 50%; + width: 100%; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.comment-navigation .nav-previous .secondary-text, +.comment-navigation .nav-next .secondary-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .comment-navigation .nav-previous .secondary-text, + .comment-navigation .nav-next .secondary-text { + display: inline; + } +} + +.comment-navigation .nav-previous svg, +.comment-navigation .nav-next svg { + vertical-align: middle; + position: relative; + margin: 0 -0.35em; + top: -1px; +} + +.comment-navigation .nav-next { + text-align: right; +} + +/* Accessibility */ +/* Text meant only for screen readers. */ +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; + /* Many screen reader and browser combinations announce broken words as they would appear visually. */ +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + clip-path: none; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; + /* Above WP toolbar. */ +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} + +/* Alignments */ +.alignleft { + /*rtl:ignore*/ + float: left; + /*rtl:ignore*/ + margin-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .alignleft { + /*rtl:ignore*/ + margin-right: calc(2 * 1rem); + } +} + +.alignright { + /*rtl:ignore*/ + float: right; + /*rtl:ignore*/ + margin-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .alignright { + /*rtl:ignore*/ + margin-left: calc(2 * 1rem); + } +} + +.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} + +/* Clearings */ +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after { + content: ""; + display: table; + table-layout: fixed; +} + +.clear:after, +.entry-content:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after { + clear: both; +} + +/* Layout */ +/** === Layout === */ +#page { + width: 100%; +} + +.site-content { + overflow: hidden; +} + +/* Content */ +/*-------------------------------------------------------------- +## Header +--------------------------------------------------------------*/ +.site-header { + padding: 1em; +} + +.site-header.featured-image { + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 90vh; +} + +.site-header.featured-image .site-branding-container { + margin-bottom: auto; +} + +@media only screen and (min-width: 768px) { + .site-header { + margin: 0; + padding: 3rem 0; + } + .site-header.featured-image { + min-height: 100vh; + margin-bottom: 3rem; + } +} + +.site-branding { + color: #767676; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + position: relative; + word-wrap: break-word; +} + +@media only screen and (min-width: 768px) { + .site-branding { + margin: 0 calc(10% + 60px); + } +} + +.site-logo { + position: relative; + z-index: 999; + margin-bottom: calc(.66 * 1rem); +} + +@media only screen and (min-width: 768px) { + .site-logo { + margin-bottom: 0; + position: absolute; + right: calc(100% + (1.25 * 1rem)); + top: 4px; + z-index: 999; + } +} + +.site-logo .custom-logo-link { + border-radius: 100%; + box-sizing: content-box; + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + display: block; + width: 50px; + height: 50px; + overflow: hidden; + transition: box-shadow 200ms ease-in-out; +} + +.site-logo .custom-logo-link .custom-logo { + min-height: inherit; +} + +.site-logo .custom-logo-link:hover, .site-logo .custom-logo-link:active, .site-logo .custom-logo-link:focus { + box-shadow: 0 0 0 2px black; +} + +@media only screen and (min-width: 768px) { + .site-logo .custom-logo-link { + width: 64px; + height: 64px; + } +} + +.site-title { + margin: auto; + display: inline; + color: #111; + /* When there is no description set, make sure navigation appears below title. */ +} + +.site-title a { + color: #111; +} + +.site-title a:link, .site-title a:visited { + color: #111; +} + +.site-title a:hover { + color: #4a4a4a; +} + +.featured-image .site-title { + margin: 0; +} + +@media only screen and (min-width: 768px) { + .featured-image .site-title { + display: inline-block; + } +} + +.site-title + .main-navigation { + display: block; +} + +@media only screen and (min-width: 768px) { + .site-title { + display: inline; + } +} + +.site-title:not(:empty) + .site-description:not(:empty):before { + content: "\2014"; + margin: 0 .2em; +} + +.site-description { + display: inline; + color: #767676; + font-weight: normal; + margin: 0; +} + +.site-header.featured-image { + /* Hide overflow for overflowing featured image */ + overflow: hidden; + /* Need relative positioning to properly align layers. */ + position: relative; + /* Add text shadow to text, to increase readability. */ + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35); + /* Set white text color when featured image is set. */ + /* add focus state to social media icons */ + /* Entry header */ + /* Custom Logo Link */ + /* Make sure important elements are above pseudo elements used for effects. */ + /* Set up image filter layer positioning */ + /* Background & Effects */ + /* Shared background settings between pseudo elements. */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; + /* The intensity of each blend mode is controlled via layer opacity. */ + /* Second layer: screen. */ + /* Third layer: multiply. */ + /* When image filters are inactive, a black overlay is added. */ + /* Fourth layer: overlay. */ + /* Fifth layer: readability overlay */ +} + +.site-header.featured-image .site-branding .site-title, +.site-header.featured-image .site-branding .site-description, +.site-header.featured-image .main-navigation a:after, +.site-header.featured-image .main-navigation .main-menu > li.menu-item-has-children:after, +.site-header.featured-image .main-navigation li, +.site-header.featured-image .social-navigation li, +.site-header.featured-image .entry-meta, +.site-header.featured-image .entry-title { + color: #fff; +} + +.site-header.featured-image .main-navigation a, +.site-header.featured-image .main-navigation a + svg, +.site-header.featured-image .social-navigation a, +.site-header.featured-image .site-title a, +.site-header.featured-image .site-featured-image a { + color: #fff; + transition: opacity 110ms ease-in-out; +} + +.site-header.featured-image .main-navigation a:hover, .site-header.featured-image .main-navigation a:active, +.site-header.featured-image .main-navigation a:hover + svg, +.site-header.featured-image .main-navigation a:active + svg, +.site-header.featured-image .main-navigation a + svg:hover, +.site-header.featured-image .main-navigation a + svg:active, +.site-header.featured-image .main-navigation a + svg:hover + svg, +.site-header.featured-image .main-navigation a + svg:active + svg, +.site-header.featured-image .social-navigation a:hover, +.site-header.featured-image .social-navigation a:active, +.site-header.featured-image .social-navigation a:hover + svg, +.site-header.featured-image .social-navigation a:active + svg, +.site-header.featured-image .site-title a:hover, +.site-header.featured-image .site-title a:active, +.site-header.featured-image .site-title a:hover + svg, +.site-header.featured-image .site-title a:active + svg, +.site-header.featured-image .site-featured-image a:hover, +.site-header.featured-image .site-featured-image a:active, +.site-header.featured-image .site-featured-image a:hover + svg, +.site-header.featured-image .site-featured-image a:active + svg { + color: #fff; + opacity: 0.6; +} + +.site-header.featured-image .main-navigation a:focus, +.site-header.featured-image .main-navigation a:focus + svg, +.site-header.featured-image .main-navigation a + svg:focus, +.site-header.featured-image .main-navigation a + svg:focus + svg, +.site-header.featured-image .social-navigation a:focus, +.site-header.featured-image .social-navigation a:focus + svg, +.site-header.featured-image .site-title a:focus, +.site-header.featured-image .site-title a:focus + svg, +.site-header.featured-image .site-featured-image a:focus, +.site-header.featured-image .site-featured-image a:focus + svg { + color: #fff; +} + +.site-header.featured-image .main-navigation .sub-menu a { + opacity: inherit; +} + +.site-header.featured-image .social-navigation a:focus { + color: #fff; + opacity: 1; + border-bottom: 1px solid #fff; +} + +.site-header.featured-image .social-navigation svg, +.site-header.featured-image .site-featured-image svg { + /* Use -webkit- only if supporting: Chrome < 54, iOS < 9.3, Android < 4.4.4 */ + -webkit-filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35)); + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35)); +} + +.site-header.featured-image .site-featured-image { + /* First layer: grayscale. */ +} + +.site-header.featured-image .site-featured-image .post-thumbnail img { + height: auto; + left: 50%; + max-width: 1000%; + min-height: 100%; + min-width: 100vw; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: auto; + z-index: 1; + /* When image filters are active, make it grayscale to colorize it blue. */ +} + +@supports (object-fit: cover) { + .site-header.featured-image .site-featured-image .post-thumbnail img { + height: 100%; + left: 0; + object-fit: cover; + top: 0; + transform: none; + width: 100%; + } +} + +.image-filters-enabled .site-header.featured-image .site-featured-image .post-thumbnail img { + filter: grayscale(100%); +} + +.site-header.featured-image .site-featured-image .entry-header { + margin-top: calc( 4 * 1rem); + margin-bottom: 0; + margin-left: 0; + margin-right: 0; + /* Entry meta */ +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image .site-featured-image .entry-header { + margin-left: calc(10% + 60px); + margin-right: calc(10% + 60px); + } +} + +.site-header.featured-image .site-featured-image .entry-header .entry-title:before { + background: #fff; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta { + font-weight: 500; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta > span { + margin-right: 1rem; + display: inline-block; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta > span:last-child { + margin-right: 0; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta a { + transition: color 110ms ease-in-out; + color: currentColor; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta a:hover { + text-decoration: none; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} + +.site-header.featured-image .site-featured-image .entry-header .entry-meta .discussion-avatar-list { + display: none; +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-meta { + display: flex; + position: relative; + } + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-title { + padding-right: calc(1 * (100vw / 12) + 1rem); + } + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-meta .comment-count { + position: absolute; + right: 0; + } + .site-header.featured-image .site-featured-image .entry-header.has-discussion .entry-meta .discussion-avatar-list { + display: block; + position: absolute; + bottom: 100%; + } +} + +.site-header.featured-image .custom-logo-link { + background: #fff; + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); +} + +.site-header.featured-image .custom-logo-link:hover, .site-header.featured-image .custom-logo-link:active, .site-header.featured-image .custom-logo-link:focus { + box-shadow: 0 0 0 2px white; +} + +.site-header.featured-image .site-branding { + position: relative; + z-index: 10; +} + +.site-header.featured-image .site-featured-image .entry-header { + position: relative; + z-index: 9; +} + +.site-header.featured-image .site-branding-container:after, +.site-header.featured-image .site-featured-image:before, +.site-header.featured-image .site-featured-image:after, .site-header.featured-image:after { + display: block; + position: absolute; + top: 0; + left: 0; + content: "\020"; + width: 100%; + height: 100%; +} + +.image-filters-enabled .site-header.featured-image .site-featured-image:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; +} + +.site-header.featured-image .site-featured-image:after { + background: #000; + mix-blend-mode: multiply; + opacity: .7; + /* When image filters are active, a blue overlay is added. */ +} + +.image-filters-enabled .site-header.featured-image .site-featured-image:after { + background: #0073aa; + opacity: .8; + z-index: 3; + /* Browsers supporting mix-blend-mode don't need opacity < 1 */ +} + +@supports (mix-blend-mode: multiply) { + .image-filters-enabled .site-header.featured-image .site-featured-image:after { + opacity: 1; + } +} + +.image-filters-enabled .site-header.featured-image .site-branding-container:after { + background: rgba(0, 0, 0, 0.35); + mix-blend-mode: overlay; + opacity: 0.5; + z-index: 4; + /* Browsers supporting mix-blend-mode can have a light overlay */ +} + +@supports (mix-blend-mode: overlay) { + .image-filters-enabled .site-header.featured-image .site-branding-container:after { + background: rgba(255, 255, 255, 0.35); + } +} + +.site-header.featured-image:after { + background: #000; + /** + * Add a transition to the readability overlay, to add a subtle + * but smooth effect when resizing the screen. + */ + transition: opacity 1200ms ease-in-out; + opacity: 0.7; + z-index: 5; + /* When image filters are active, a blue overlay is added. */ +} + +.image-filters-enabled .site-header.featured-image:after { + background: #000e14; + opacity: 0.38; +} + +@media only screen and (min-width: 768px) { + .image-filters-enabled .site-header.featured-image:after { + opacity: 0.18; + } +} + +.site-header.featured-image ::-moz-selection { + background: rgba(255, 255, 255, 0.17); +} + +.site-header.featured-image ::selection { + background: rgba(255, 255, 255, 0.17); +} + +/*-------------------------------------------------------------- +## Posts and pages +--------------------------------------------------------------*/ +.sticky { + display: block; +} + +.sticky-post { + background: #0073aa; + color: #fff; + display: inline-block; + font-weight: bold; + line-height: 1; + padding: .25rem; + position: absolute; + text-transform: uppercase; + top: -1rem; + z-index: 1; +} + +.updated:not(.published) { + display: none; +} + +.page-links { + clear: both; + margin: 0 0 calc(1.5 * 1rem); +} + +.entry { + margin-top: calc(6 * 1rem); +} + +.entry:first-of-type { + margin-top: 0; +} + +.entry .entry-header { + margin: calc(3 * 1rem) 1rem 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .entry .entry-header { + margin: calc(3 * 1rem) calc(10% + 60px) 1rem; + } +} + +.entry .entry-title { + margin: 0; +} + +.entry .entry-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +.entry .entry-title a { + color: inherit; +} + +.entry .entry-title a:hover { + color: #4a4a4a; +} + +.entry .entry-meta, +.entry .entry-footer { + color: #767676; + font-weight: 500; +} + +.entry .entry-meta > span, +.entry .entry-footer > span { + margin-right: 1rem; + display: inline-block; +} + +.entry .entry-meta > span:last-child, +.entry .entry-footer > span:last-child { + margin-right: 0; +} + +.entry .entry-meta a, +.entry .entry-footer a { + transition: color 110ms ease-in-out; + color: currentColor; +} + +.entry .entry-meta a:hover, +.entry .entry-footer a:hover { + text-decoration: none; + color: #0073aa; +} + +.entry .entry-meta .svg-icon, +.entry .entry-footer .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} + +.entry .entry-meta { + margin: 1rem 0; +} + +.entry .entry-footer { + margin: calc(2 * 1rem) 1rem 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-footer { + margin: 1rem calc(10% + 60px) calc(3 * 1rem); + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-footer { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.entry .post-thumbnail { + margin: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .post-thumbnail { + margin: 1rem calc(10% + 60px); + } +} + +.entry .post-thumbnail:focus { + outline: none; +} + +.entry .post-thumbnail .post-thumbnail-inner { + display: block; +} + +.entry .post-thumbnail .post-thumbnail-inner img { + position: relative; + display: block; + width: 100%; +} + +.image-filters-enabled .entry .post-thumbnail { + position: relative; + display: block; +} + +.image-filters-enabled .entry .post-thumbnail .post-thumbnail-inner { + filter: grayscale(100%); +} + +.image-filters-enabled .entry .post-thumbnail .post-thumbnail-inner:after { + background: rgba(0, 0, 0, 0.35); + content: ""; + display: block; + height: 100%; + opacity: .5; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + z-index: 4; +} + +@supports (mix-blend-mode: multiply) { + .image-filters-enabled .entry .post-thumbnail .post-thumbnail-inner:after { + display: none; + } +} + +.image-filters-enabled .entry .post-thumbnail:before, .image-filters-enabled .entry .post-thumbnail:after { + position: absolute; + display: block; + width: 100%; + height: 100%; + top: 0; + left: 0; + content: "\020"; + pointer-events: none; +} + +.image-filters-enabled .entry .post-thumbnail:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; +} + +.image-filters-enabled .entry .post-thumbnail:after { + background: #0073aa; + mix-blend-mode: multiply; + opacity: .8; + z-index: 3; + /* Browsers supporting mix-blend-mode don't need opacity < 1 */ +} + +@supports (mix-blend-mode: multiply) { + .image-filters-enabled .entry .post-thumbnail:after { + opacity: 1; + } +} + +.entry .entry-content, +.entry .entry-summary { + max-width: calc(100% - (2 * 1rem)); + margin: 0 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content, + .entry .entry-summary { + max-width: 80%; + margin: 0 10%; + padding: 0 60px; + } +} + +.entry .entry-content p { + word-wrap: break-word; +} + +.entry .entry-content .more-link { + transition: color 110ms ease-in-out; + display: inline; + color: inherit; +} + +.entry .entry-content .more-link:after { + content: "\02192"; + display: inline-block; + margin-left: 0.5em; +} + +.entry .entry-content .more-link:hover { + color: #0073aa; + text-decoration: none; +} + +.entry .entry-content a { + text-decoration: underline; +} + +.entry .entry-content a.button, .entry .entry-content a:hover { + text-decoration: none; +} + +.entry .entry-content a.button { + display: inline-block; +} + +.entry .entry-content a.button:hover { + background: #111; + color: #fff; + cursor: pointer; +} + +.entry .entry-content > iframe[style] { + margin: 32px 0 !important; + max-width: 100% !important; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > iframe[style] { + max-width: calc(8 * (100vw / 12) - 28px) !important; + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content > iframe[style] { + max-width: calc(6 * (100vw / 12) - 28px) !important; + } +} + +.entry .entry-content .page-links a { + margin: calc(0.5 * 1rem); + text-decoration: none; +} + +.entry .entry-content .wp-audio-shortcode { + max-width: calc(100vw - (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-audio-shortcode { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-audio-shortcode { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +/* Author description */ +.author-bio { + margin: calc(2 * 1rem) 1rem 1rem; +} + +@media only screen and (min-width: 768px) { + .author-bio { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .author-bio { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .author-bio { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +@media only screen and (min-width: 1168px) { + .author-bio { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +.author-bio .author-title { + display: inline; +} + +.author-bio .author-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +.author-bio .author-description { + display: inline; + color: #767676; + font-size: 1.125em; + line-height: 1.2; +} + +.author-bio .author-description .author-link { + display: inline-block; +} + +.author-bio .author-description .author-link:hover { + color: #005177; + text-decoration: none; +} + +/*-------------------------------------------------------------- +## Comments +--------------------------------------------------------------*/ +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + display: block; +} + +.comments-area { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + margin: calc(2 * 1rem) 1rem; + word-wrap: break-word; + /* Add extra margin when the comments section is located immediately after the + * post itself (this happens on pages). + */ +} + +@media only screen and (min-width: 768px) { + .comments-area { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .comments-area { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .comments-area { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +.comments-area > * { + margin-top: calc(2 * 1rem); + margin-bottom: calc(2 * 1rem); +} + +@media only screen and (min-width: 768px) { + .comments-area > * { + margin-top: calc(3 * 1rem); + margin-bottom: calc(3 * 1rem); + } +} + +.entry + .comments-area { + margin-top: calc(3 * 1rem); +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap { + align-items: baseline; + display: flex; + justify-content: space-between; + } +} + +.comments-area .comments-title-wrap .comments-title { + margin: 0; +} + +.comments-area .comments-title-wrap .comments-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap .comments-title { + flex: 1 0 calc(3 * (100vw / 12)); + } +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap .discussion-meta { + flex: 0 0 calc(2 * (100vw / 12)); + margin-left: 1rem; + } +} + +#comment { + max-width: 100%; + box-sizing: border-box; +} + +#respond { + position: relative; +} + +#respond .comment-user-avatar { + margin: 1rem 0 -1rem; +} + +#respond .comment .comment-form { + padding-left: 0; +} + +#respond > small { + display: block; + font-size: 22px; + position: absolute; + left: calc(1rem + 100%); + top: calc(-3.5 * 1rem); + width: calc(100vw / 12); +} + +#comments > .comments-title:last-child { + display: none; +} + +.comment-form-flex { + display: flex; + flex-direction: column; +} + +.comment-form-flex .comments-title { + display: none; + margin: 0; + order: 1; +} + +.comment-form-flex #respond { + order: 2; +} + +.comment-form-flex #respond + .comments-title { + display: block; +} + +.comment-list { + list-style: none; + padding: 0; +} + +.comment-list .children { + margin: 0; + padding: 0 0 0 1rem; +} + +.comment-list > .comment:first-child { + margin-top: 0; +} + +.comment-list .pingback .comment-body, +.comment-list .trackback .comment-body { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + font-weight: 500; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.comment-list .pingback .comment-body a:not(.comment-edit-link), +.comment-list .trackback .comment-body a:not(.comment-edit-link) { + font-weight: bold; + font-size: 19.55556px; + line-height: 1.5; + padding-right: 0.5rem; + display: block; +} + +.comment-list .pingback .comment-body .comment-edit-link, +.comment-list .trackback .comment-body .comment-edit-link { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 500; +} + +#respond + .comment-reply { + display: none; +} + +.comment-reply .comment-reply-link { + display: inline-block; +} + +.comment { + list-style: none; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment { + padding-left: calc(.5 * (1rem + calc(100vw / 12 ))); + } + .comment.depth-1, + .comment .children { + padding-left: 0; + } + .comment.depth-1 { + margin-left: calc(3.25 * 1rem); + } +} + +.comment .comment-body { + margin: calc(2 * 1rem) 0 0; +} + +.comment .comment-meta { + position: relative; +} + +.comment .comment-author .avatar { + float: left; + margin-right: 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .avatar { + float: inherit; + margin-right: inherit; + position: absolute; + top: 0; + right: calc(100% + 1rem); + } +} + +.comment .comment-author .fn { + position: relative; + display: block; +} + +.comment .comment-author .fn a { + color: inherit; +} + +.comment .comment-author .fn a:hover { + color: #005177; +} + +.comment .comment-author .post-author-badge { + border-radius: 100%; + display: block; + height: 18px; + position: absolute; + background: #008fd3; + right: calc(100% - 2.5rem); + top: -3px; + width: 18px; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .post-author-badge { + right: calc(100% + 0.75rem); + } +} + +.comment .comment-author .post-author-badge svg { + width: inherit; + height: inherit; + display: block; + fill: white; + transform: scale(0.875); +} + +.comment .comment-metadata > a, +.comment .comment-metadata .comment-edit-link { + display: inline; + font-weight: 500; + color: #767676; + vertical-align: baseline; +} + +.comment .comment-metadata > a time, +.comment .comment-metadata .comment-edit-link time { + vertical-align: baseline; +} + +.comment .comment-metadata > a:hover, +.comment .comment-metadata .comment-edit-link:hover { + color: #005177; + text-decoration: none; +} + +.comment .comment-metadata > * { + display: inline-block; +} + +.comment .comment-metadata .edit-link-sep { + color: #767676; + margin: 0 0.2em; + vertical-align: baseline; +} + +.comment .comment-metadata .edit-link { + color: #767676; +} + +.comment .comment-metadata .edit-link svg { + transform: scale(0.8); + vertical-align: baseline; + margin-right: 0.1em; +} + +.comment .comment-metadata .comment-edit-link { + position: relative; + padding-left: 1rem; + margin-left: -1rem; + z-index: 1; +} + +.comment .comment-metadata .comment-edit-link:hover { + color: #0073aa; +} + +.comment .comment-content { + margin: 1rem 0; +} + +@media only screen and (min-width: 1168px) { + .comment .comment-content { + padding-right: 1rem; + } +} + +.comment .comment-content > *:first-child { + margin-top: 0; +} + +.comment .comment-content > *:last-child { + margin-bottom: 0; +} + +.comment .comment-content blockquote { + margin-left: 0; +} + +.comment .comment-content a { + text-decoration: underline; +} + +.comment .comment-content a:hover { + text-decoration: none; +} + +.comment-reply-link, +#cancel-comment-reply-link { + font-weight: 500; +} + +.comment-reply-link:hover, +#cancel-comment-reply-link:hover { + color: #005177; +} + +.discussion-avatar-list { + content: ""; + display: table; + table-layout: fixed; + margin: 0; + padding: 0; +} + +.discussion-avatar-list li { + position: relative; + list-style: none; + margin: 0 -8px 0 0; + padding: 0; + float: left; +} + +.discussion-avatar-list .comment-user-avatar img { + height: calc(1.5 * 1rem); + width: calc(1.5 * 1rem); +} + +.discussion-meta .discussion-meta-info { + margin: 0; +} + +.discussion-meta .discussion-meta-info .svg-icon { + vertical-align: middle; + fill: currentColor; + transform: scale(0.6) scaleX(-1) translateY(-0.1em); + margin-left: -0.25rem; +} + +.comment-form .comment-notes, +.comment-form label { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + color: #767676; +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-author, + .comment-form .comment-form-email { + width: calc(50% - 0.5rem); + float: left; + } +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-email { + margin-left: 1rem; + } +} + +.comment-form input[name="author"], +.comment-form input[name="email"], +.comment-form input[name="url"] { + display: block; + width: 100%; +} + +/*-------------------------------------------------------------- +## Archives +--------------------------------------------------------------*/ +.archive .page-header, +.search .page-header, +.error404 .page-header { + margin: 1rem 1rem calc(3 * 1rem); +} + +@media only screen and (min-width: 768px) { + .archive .page-header, + .search .page-header, + .error404 .page-header { + margin: 0 calc(10% + 60px) calc(10% + 60px); + } +} + +.archive .page-header .page-title, +.search .page-header .page-title, +.error404 .page-header .page-title { + color: #767676; + display: inline; + letter-spacing: normal; +} + +.archive .page-header .page-title:before, +.search .page-header .page-title:before, +.error404 .page-header .page-title:before { + display: none; +} + +.archive .page-header .search-term, +.archive .page-header .page-description, +.search .page-header .search-term, +.search .page-header .page-description, +.error404 .page-header .search-term, +.error404 .page-header .page-description { + display: inherit; + clear: both; +} + +.archive .page-header .search-term:after, +.archive .page-header .page-description:after, +.search .page-header .search-term:after, +.search .page-header .page-description:after, +.error404 .page-header .search-term:after, +.error404 .page-header .page-description:after { + content: "."; + font-weight: bold; + color: #767676; +} + +.archive .page-header .page-description { + display: block; + color: #111; + font-size: 1em; +} + +@media only screen and (min-width: 768px) { + .hfeed .entry .entry-header { + margin: calc(3 * 1rem) calc(10% + 60px) calc(1rem / 2); + } +} + +/* 404 & Not found */ +.error-404.not-found .page-title, +.error-404.not-found .page-content, +.no-results.not-found .page-title, +.no-results.not-found .page-content { + margin: calc(3 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .error-404.not-found .page-title, + .error-404.not-found .page-content, + .no-results.not-found .page-title, + .no-results.not-found .page-content { + margin: calc(3 * 1rem) calc(10% + 60px) calc(1rem / 2); + } +} + +.error-404.not-found .search-submit, +.no-results.not-found .search-submit { + vertical-align: middle; + margin: 1rem 0; +} + +.error-404.not-found .search-field, +.no-results.not-found .search-field { + width: 100%; +} + +/*-------------------------------------------------------------- +## Footer +--------------------------------------------------------------*/ +/* Site footer */ +#colophon .widget-area, +#colophon .site-info { + margin: calc(2 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + #colophon .widget-area, + #colophon .site-info { + margin: calc(3 * 1rem) calc(10% + 60px); + } +} + +#colophon .widget-column { + display: flex; + flex-wrap: wrap; +} + +#colophon .widget-column .widget { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + width: 100%; + word-wrap: break-word; +} + +@media only screen and (min-width: 1168px) { + #colophon .widget-column .widget { + margin-right: calc(3 * 1rem); + width: calc(50% - (3 * 1rem)); + } +} + +#colophon .site-info { + color: #767676; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +#colophon .site-info a { + color: inherit; +} + +#colophon .site-info a:hover { + text-decoration: none; + color: #0073aa; +} + +#colophon .site-info .imprint, +#colophon .site-info .privacy-policy-link { + margin-right: 1rem; +} + +/* Widgets */ +.widget { + margin: 0 0 1rem; + /* Make sure select elements fit in widgets. */ +} + +.widget select { + max-width: 100%; +} + +.widget a { + color: #0073aa; +} + +.widget a:hover { + color: #005177; +} + +.widget_archive ul, +.widget_categories ul, +.widget_meta ul, +.widget_nav_menu ul, +.widget_pages ul, +.widget_recent_comments ul, +.widget_recent_entries ul, +.widget_rss ul { + padding: 0; + list-style: none; +} + +.widget_archive ul li, +.widget_categories ul li, +.widget_meta ul li, +.widget_nav_menu ul li, +.widget_pages ul li, +.widget_recent_comments ul li, +.widget_recent_entries ul li, +.widget_rss ul li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.125); + font-weight: 700; + line-height: 1.2; + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.widget_archive ul ul, +.widget_categories ul ul, +.widget_meta ul ul, +.widget_nav_menu ul ul, +.widget_pages ul ul, +.widget_recent_comments ul ul, +.widget_recent_entries ul ul, +.widget_rss ul ul { + counter-reset: submenu; +} + +.widget_archive ul ul > li > a::before, +.widget_categories ul ul > li > a::before, +.widget_meta ul ul > li > a::before, +.widget_nav_menu ul ul > li > a::before, +.widget_pages ul ul > li > a::before, +.widget_recent_comments ul ul > li > a::before, +.widget_recent_entries ul ul > li > a::before, +.widget_rss ul ul > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.widget_tag_cloud .tagcloud { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 700; +} + +.widget_search .search-field { + width: 100%; +} + +@media only screen and (min-width: 600px) { + .widget_search .search-field { + width: auto; + } +} + +.widget_search .search-submit { + display: block; + margin-top: 1rem; +} + +.widget_calendar .calendar_wrap { + text-align: center; +} + +.widget_calendar .calendar_wrap table td, +.widget_calendar .calendar_wrap table th { + border: none; +} + +.widget_calendar .calendar_wrap a { + text-decoration: underline; +} + +/* Blocks */ +/* !Block styles */ +.entry .entry-content > *, +.entry .entry-summary > * { + margin: 32px 0; + max-width: 100%; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *, + .entry .entry-summary > * { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content > *, + .entry .entry-summary > * { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *, + .entry .entry-summary > * { + margin: 32px 0; + } +} + +.entry .entry-content > * > *:first-child, +.entry .entry-summary > * > *:first-child { + margin-top: 0; +} + +.entry .entry-content > * > *:last-child, +.entry .entry-summary > * > *:last-child { + margin-bottom: 0; +} + +.entry .entry-content > *.alignwide, +.entry .entry-summary > *.alignwide { + margin-left: auto; + margin-right: auto; + clear: both; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignwide, + .entry .entry-summary > *.alignwide { + width: 100%; + max-width: 100%; + } +} + +.entry .entry-content > *.alignfull, +.entry .entry-summary > *.alignfull { + position: relative; + left: -1rem; + width: calc( 100% + (2 * 1rem)); + max-width: calc( 100% + (2 * 1rem)); + clear: both; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignfull, + .entry .entry-summary > *.alignfull { + margin-top: calc(2 * 1rem); + margin-bottom: calc(2 * 1rem); + left: calc( -12.5% - 75px); + width: calc( 125% + 150px); + max-width: calc( 125% + 150px); + } +} + +.entry .entry-content > *.alignleft, +.entry .entry-summary > *.alignleft { + /*rtl:ignore*/ + float: left; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-left: 0; + /*rtl:ignore*/ + margin-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignleft, + .entry .entry-summary > *.alignleft { + max-width: calc(4 * (100vw / 12)); + /*rtl:ignore*/ + margin-right: calc(2 * 1rem); + } +} + +.entry .entry-content > *.alignright, +.entry .entry-summary > *.alignright { + /*rtl:ignore*/ + float: right; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-right: 0; + /*rtl:ignore*/ + margin-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.alignright, + .entry .entry-summary > *.alignright { + max-width: calc(4 * (100vw / 12)); + margin-right: 0; + /*rtl:ignore*/ + margin-left: calc(2 * 1rem); + } +} + +.entry .entry-content > *.aligncenter, +.entry .entry-summary > *.aligncenter { + margin-left: auto; + margin-right: auto; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.aligncenter, + .entry .entry-summary > *.aligncenter { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content > *.aligncenter, + .entry .entry-summary > *.aligncenter { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content > *.aligncenter, + .entry .entry-summary > *.aligncenter { + margin-left: 0; + margin-right: 0; + } +} + +/* + * Unset nested content selector styles + * - Prevents layout styles from cascading too deeply + * - helps with plugin compatibility + */ +.entry .entry-content .entry-content, +.entry .entry-content .entry-summary, +.entry .entry-content .entry, +.entry .entry-summary .entry-content, +.entry .entry-summary .entry-summary, +.entry .entry-summary .entry { + margin: inherit; + max-width: inherit; + padding: inherit; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .entry-content, + .entry .entry-content .entry-summary, + .entry .entry-content .entry, + .entry .entry-summary .entry-content, + .entry .entry-summary .entry-summary, + .entry .entry-summary .entry { + margin: inherit; + max-width: inherit; + padding: inherit; + } +} + +.entry .entry-content p.has-background { + padding: 20px 30px; +} + +.entry .entry-content .wp-block-audio { + width: 100%; +} + +.entry .entry-content .wp-block-audio audio { + width: 100%; +} + +.entry .entry-content .wp-block-audio.alignleft audio, +.entry .entry-content .wp-block-audio.alignright audio { + max-width: 198px; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-audio.alignleft audio, + .entry .entry-content .wp-block-audio.alignright audio { + max-width: 384px; + } +} + +@media only screen and (min-width: 1379px) { + .entry .entry-content .wp-block-audio.alignleft audio, + .entry .entry-content .wp-block-audio.alignright audio { + max-width: 385.44px; + } +} + +.entry .entry-content .wp-block-video video { + width: 100%; +} + +.entry .entry-content .wp-block-button .wp-block-button__link { + transition: background 150ms ease-in-out; + border: none; + font-size: 0.88889em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + box-sizing: border-box; + font-weight: bold; + text-decoration: none; + padding: 0.76rem 1rem; + outline: none; + outline: none; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:not(.has-background) { + background-color: #0073aa; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:not(.has-text-color) { + color: white; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:hover { + color: white; + background: #111; + cursor: pointer; +} + +.entry .entry-content .wp-block-button .wp-block-button__link:focus { + color: white; + background: #111; + outline: thin dotted; + outline-offset: -4px; +} + +.entry .entry-content .wp-block-button:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link, +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus, +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:active { + transition: all 150ms ease-in-out; + border-width: 2px; + border-style: solid; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-background), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus:not(.has-background), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:active:not(.has-background) { + background: transparent; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus:not(.has-text-color), +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:active:not(.has-text-color) { + color: #0073aa; + border-color: currentColor; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:hover { + color: white; + border-color: #111; +} + +.entry .entry-content .wp-block-button.is-style-outline .wp-block-button__link:hover:not(.has-background) { + color: #111; +} + +.entry .entry-content .wp-block-archives, +.entry .entry-content .wp-block-categories, +.entry .entry-content .wp-block-latest-posts { + padding: 0; + list-style: none; +} + +.entry .entry-content .wp-block-archives li, +.entry .entry-content .wp-block-categories li, +.entry .entry-content .wp-block-latest-posts li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.125); + font-weight: bold; + line-height: 1.2; + padding-bottom: 0.75rem; +} + +.entry .entry-content .wp-block-archives li.menu-item-has-children, .entry .entry-content .wp-block-archives li:last-child, +.entry .entry-content .wp-block-categories li.menu-item-has-children, +.entry .entry-content .wp-block-categories li:last-child, +.entry .entry-content .wp-block-latest-posts li.menu-item-has-children, +.entry .entry-content .wp-block-latest-posts li:last-child { + padding-bottom: 0; +} + +.entry .entry-content .wp-block-archives li a, +.entry .entry-content .wp-block-categories li a, +.entry .entry-content .wp-block-latest-posts li a { + text-decoration: none; +} + +.entry .entry-content .wp-block-archives.aligncenter, +.entry .entry-content .wp-block-categories.aligncenter { + text-align: center; +} + +.entry .entry-content .wp-block-categories ul { + padding-top: 0.75rem; +} + +.entry .entry-content .wp-block-categories li ul { + list-style: none; + padding-left: 0; +} + +.entry .entry-content .wp-block-categories ul { + counter-reset: submenu; +} + +.entry .entry-content .wp-block-categories ul > li > a::before { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: normal; + content: "– " counters(submenu, "– ", none); + counter-increment: submenu; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li { + border-top: 2px solid #ccc; + padding-top: 1rem; + margin-bottom: 2rem; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li a:after { + content: ''; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li:last-child { + margin-bottom: auto; +} + +.entry .entry-content .wp-block-latest-posts.is-grid li:last-child a:after { + content: ''; +} + +.entry .entry-content .wp-block-preformatted { + font-size: 0.71111em; + line-height: 1.8; + padding: 1rem; +} + +.entry .entry-content .wp-block-verse { + font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-size: 22px; + line-height: 1.8; +} + +.entry .entry-content .has-drop-cap:not(:focus):first-letter { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 3.375em; + line-height: 1; + font-weight: bold; + margin: 0 0.25em 0 0; +} + +.entry .entry-content .wp-block-pullquote { + border-color: transparent; + border-width: 2px; + padding: 1rem; +} + +.entry .entry-content .wp-block-pullquote blockquote { + color: #111; + border: none; + margin-top: calc(4 * 1rem); + margin-bottom: calc(4.33 * 1rem); + margin-right: 0; + padding-left: 0; +} + +.entry .entry-content .wp-block-pullquote p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +.entry .entry-content .wp-block-pullquote p em { + font-style: normal; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote p { + font-size: 2.25em; + } +} + +.entry .entry-content .wp-block-pullquote cite { + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + text-transform: none; + color: #767676; + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * 1.125)); +} + +.entry .entry-content .wp-block-pullquote.alignleft, .entry .entry-content .wp-block-pullquote.alignright { + width: 100%; + padding: 0; +} + +.entry .entry-content .wp-block-pullquote.alignleft blockquote, .entry .entry-content .wp-block-pullquote.alignright blockquote { + margin: 1rem 0; + padding: 0; + text-align: left; + max-width: 100%; +} + +.entry .entry-content .wp-block-pullquote.alignleft blockquote p:first-child, .entry .entry-content .wp-block-pullquote.alignright blockquote p:first-child { + margin-top: 0; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color { + background-color: #0073aa; + padding-left: 0; + padding-right: 0; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color { + padding-left: 10%; + padding-right: 10%; + } +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 1.6875em; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 2.25em; + } +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color a { + color: #fff; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color cite { + color: inherit; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote { + max-width: 100%; + color: #fff; + padding-left: 0; + margin-left: 1rem; + margin-right: 1rem; +} + +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-text-color p, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-text-color a, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color, .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-white-color { + color: inherit; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote { + margin-left: 0; + margin-right: 0; + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color.alignright, .entry .entry-content .wp-block-pullquote.is-style-solid-color.alignleft { + padding: 1rem calc(2 * 1rem); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-pullquote.is-style-solid-color.alignfull { + padding-left: calc(10% + 58px + (2 * 1rem)); + padding-right: calc(10% + 58px + (2 * 1rem)); + } +} + +.entry .entry-content .wp-block-quote:not(.is-large), .entry .entry-content .wp-block-quote:not(.is-style-large) { + border-width: 2px; + border-color: #0073aa; + padding-top: 0; + padding-bottom: 0; +} + +.entry .entry-content .wp-block-quote p { + font-size: 1em; + font-style: normal; + line-height: 1.8; +} + +.entry .entry-content .wp-block-quote cite { + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * 1.125)); +} + +.entry .entry-content .wp-block-quote.is-large, .entry .entry-content .wp-block-quote.is-style-large { + margin: 1rem 0; + padding: 0; + border-left: none; +} + +.entry .entry-content .wp-block-quote.is-large p, .entry .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + line-height: 1.4; + font-style: italic; +} + +.entry .entry-content .wp-block-quote.is-large cite, +.entry .entry-content .wp-block-quote.is-large footer, .entry .entry-content .wp-block-quote.is-style-large cite, +.entry .entry-content .wp-block-quote.is-style-large footer { + /* + * This requires a rem-based font size calculation instead of our normal em-based one, + * because the cite tag sometimes gets wrapped in a p tag. This is equivalent to $font-size_xs. + */ + font-size: calc(1rem / (1.25 * 1.125)); +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-quote.is-large, .entry .entry-content .wp-block-quote.is-style-large { + margin: 1rem 0; + padding: 1rem 0; + } + .entry .entry-content .wp-block-quote.is-large p, .entry .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + } +} + +.entry .entry-content .wp-block-image { + max-width: 100%; +} + +.entry .entry-content .wp-block-image img { + display: block; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-image .aligncenter { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-image .aligncenter { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-image .aligncenter { + margin: 0; + width: calc(8 * (100vw / 12) - 28px); + } + .entry .entry-content .wp-block-image .aligncenter img { + margin: 0 auto; + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-image .aligncenter { + width: calc(6 * (100vw / 12) - 28px); + } + .entry .entry-content .wp-block-image .aligncenter img { + margin: 0 auto; + } +} + +.entry .entry-content .wp-block-image.alignfull img { + width: 100vw; + max-width: calc( 100% + (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-image.alignfull img { + max-width: calc( 125% + 150px); + margin-left: auto; + margin-right: auto; + } +} + +.entry .entry-content .wp-block-cover-image, +.entry .entry-content .wp-block-cover { + position: relative; + min-height: 430px; + padding: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image, + .entry .entry-content .wp-block-cover { + padding: 1rem 10%; + } +} + +.entry .entry-content .wp-block-cover-image .wp-block-cover-image-text, +.entry .entry-content .wp-block-cover-image .wp-block-cover-text, +.entry .entry-content .wp-block-cover-image h2, +.entry .entry-content .wp-block-cover .wp-block-cover-image-text, +.entry .entry-content .wp-block-cover .wp-block-cover-text, +.entry .entry-content .wp-block-cover h2 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 1.6875em; + font-weight: bold; + line-height: 1.25; + padding: 0; + color: #fff; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image h2, + .entry .entry-content .wp-block-cover .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover .wp-block-cover-text, + .entry .entry-content .wp-block-cover h2 { + font-size: 2.25em; + max-width: 100%; + } +} + +.entry .entry-content .wp-block-cover-image.alignleft, .entry .entry-content .wp-block-cover-image.alignright, +.entry .entry-content .wp-block-cover.alignleft, +.entry .entry-content .wp-block-cover.alignright { + width: 100%; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image.alignleft, .entry .entry-content .wp-block-cover-image.alignright, + .entry .entry-content .wp-block-cover.alignleft, + .entry .entry-content .wp-block-cover.alignright { + padding: 1rem calc(2 * 1rem); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image.alignfull h2, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover.alignfull h2 { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image.alignfull h2, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover.alignfull h2 { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-cover-image.alignfull, + .entry .entry-content .wp-block-cover.alignfull { + padding-left: calc(10% + 58px + (2 * 1rem)); + padding-right: calc(10% + 58px + (2 * 1rem)); + } + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover-image.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover-image.alignfull h2, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-image-text, + .entry .entry-content .wp-block-cover.alignfull .wp-block-cover-text, + .entry .entry-content .wp-block-cover.alignfull h2 { + padding: 0; + } +} + +.entry .entry-content .wp-block-gallery { + list-style-type: none; + padding-left: 0; +} + +.entry .entry-content .wp-block-gallery .blocks-gallery-image:last-child, +.entry .entry-content .wp-block-gallery .blocks-gallery-item:last-child { + margin-bottom: 16px; +} + +.entry .entry-content .wp-block-gallery figcaption a { + color: #fff; +} + +.entry .entry-content .wp-block-audio figcaption, +.entry .entry-content .wp-block-video figcaption, +.entry .entry-content .wp-block-image figcaption, +.entry .entry-content .wp-block-gallery .blocks-gallery-image figcaption, +.entry .entry-content .wp-block-gallery .blocks-gallery-item figcaption { + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: center; +} + +.entry .entry-content .wp-block-separator, +.entry .entry-content hr { + background-color: #767676; + border: 0; + height: 2px; + margin-bottom: 2rem; + margin-top: 2rem; + max-width: 2.25em; + text-align: left; + /* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ +} + +.entry .entry-content .wp-block-separator.is-style-wide, +.entry .entry-content hr.is-style-wide { + max-width: 100%; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-separator.is-style-wide, + .entry .entry-content hr.is-style-wide { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-separator.is-style-wide, + .entry .entry-content hr.is-style-wide { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.entry .entry-content .wp-block-separator.is-style-dots, +.entry .entry-content hr.is-style-dots { + max-width: 100%; + background-color: inherit; + border: inherit; + height: inherit; + text-align: center; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-separator.is-style-dots, + .entry .entry-content hr.is-style-dots { + max-width: calc(8 * (100vw / 12) - 28px); + } +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-separator.is-style-dots, + .entry .entry-content hr.is-style-dots { + max-width: calc(6 * (100vw / 12) - 28px); + } +} + +.entry .entry-content .wp-block-separator.is-style-dots:before, +.entry .entry-content hr.is-style-dots:before { + color: #767676; + font-size: 1.6875em; + letter-spacing: 0.88889em; + padding-left: 0.88889em; +} + +.entry .entry-content .wp-block-separator + h1:before, +.entry .entry-content .wp-block-separator + h2:before, +.entry .entry-content hr + h1:before, +.entry .entry-content hr + h2:before { + display: none; +} + +.entry .entry-content .wp-block-embed-twitter { + word-break: break-word; +} + +.entry .entry-content .wp-block-table th, +.entry .entry-content .wp-block-table td { + border-color: #767676; +} + +.entry .entry-content .wp-block-file { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.entry .entry-content .wp-block-file .wp-block-file__button { + display: table; + transition: background 150ms ease-in-out; + border: none; + border-radius: 5px; + background: #0073aa; + font-size: 22px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + text-decoration: none; + font-weight: bold; + padding: 0.75rem 1rem; + color: #fff; + margin-left: 0; + margin-top: calc(0.75 * 1rem); +} + +@media only screen and (min-width: 1168px) { + .entry .entry-content .wp-block-file .wp-block-file__button { + font-size: 22px; + padding: 0.875rem 1.5rem; + } +} + +.entry .entry-content .wp-block-file .wp-block-file__button:hover { + background: #111; + cursor: pointer; +} + +.entry .entry-content .wp-block-file .wp-block-file__button:focus { + background: #111; + outline: thin dotted; + outline-offset: -4px; +} + +.entry .entry-content .wp-block-code { + border-radius: 0; +} + +.entry .entry-content .wp-block-code code { + font-size: 1.125em; + white-space: pre-wrap; + word-break: break-word; +} + +.entry .entry-content .wp-block-columns .wp-block-column > *:first-child { + margin-top: 0; +} + +.entry .entry-content .wp-block-columns .wp-block-column > *:last-child { + margin-bottom: 0; +} + +@media only screen and (min-width: 768px) { + .entry .entry-content .wp-block-columns { + flex-wrap: nowrap; + } + .entry .entry-content .wp-block-columns .wp-block-column:not(:first-child) { + margin-left: 32px; + } +} + +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta .wp-block-latest-comments__comment-date { + font-weight: normal; +} + +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment, +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-date, +.entry .entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.entry .entry-content .wp-block-latest-comments.has-dates .wp-block-latest-comments__comment-date { + font-size: 0.71111em; +} + +.entry .entry-content .has-small-font-size { + font-size: 0.88889em; +} + +.entry .entry-content .has-normal-font-size { + font-size: 1.125em; +} + +.entry .entry-content .has-large-font-size { + font-size: 1.6875em; +} + +.entry .entry-content .has-huge-font-size { + font-size: 2.25em; +} + +.entry .entry-content .has-primary-background-color, +.entry .entry-content .has-secondary-background-color, +.entry .entry-content .has-dark-gray-background-color, +.entry .entry-content .has-light-gray-background-color { + color: #fff; +} + +.entry .entry-content .has-primary-background-color > p, +.entry .entry-content .has-primary-background-color > h1, +.entry .entry-content .has-primary-background-color > h2, +.entry .entry-content .has-primary-background-color > h3, +.entry .entry-content .has-primary-background-color > h4, +.entry .entry-content .has-primary-background-color > h5, +.entry .entry-content .has-primary-background-color > h6, +.entry .entry-content .has-primary-background-color > a, +.entry .entry-content .has-secondary-background-color > p, +.entry .entry-content .has-secondary-background-color > h1, +.entry .entry-content .has-secondary-background-color > h2, +.entry .entry-content .has-secondary-background-color > h3, +.entry .entry-content .has-secondary-background-color > h4, +.entry .entry-content .has-secondary-background-color > h5, +.entry .entry-content .has-secondary-background-color > h6, +.entry .entry-content .has-secondary-background-color > a, +.entry .entry-content .has-dark-gray-background-color > p, +.entry .entry-content .has-dark-gray-background-color > h1, +.entry .entry-content .has-dark-gray-background-color > h2, +.entry .entry-content .has-dark-gray-background-color > h3, +.entry .entry-content .has-dark-gray-background-color > h4, +.entry .entry-content .has-dark-gray-background-color > h5, +.entry .entry-content .has-dark-gray-background-color > h6, +.entry .entry-content .has-dark-gray-background-color > a, +.entry .entry-content .has-light-gray-background-color > p, +.entry .entry-content .has-light-gray-background-color > h1, +.entry .entry-content .has-light-gray-background-color > h2, +.entry .entry-content .has-light-gray-background-color > h3, +.entry .entry-content .has-light-gray-background-color > h4, +.entry .entry-content .has-light-gray-background-color > h5, +.entry .entry-content .has-light-gray-background-color > h6, +.entry .entry-content .has-light-gray-background-color > a { + color: #fff; +} + +.entry .entry-content .has-white-background-color { + color: #111; +} + +.entry .entry-content .has-white-background-color > p, +.entry .entry-content .has-white-background-color > h1, +.entry .entry-content .has-white-background-color > h2, +.entry .entry-content .has-white-background-color > h3, +.entry .entry-content .has-white-background-color > h4, +.entry .entry-content .has-white-background-color > h5, +.entry .entry-content .has-white-background-color > h6, +.entry .entry-content .has-white-background-color > a { + color: #111; +} + +.entry .entry-content .has-primary-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-primary-background-color { + background-color: #0073aa; +} + +.entry .entry-content .has-secondary-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-secondary-background-color { + background-color: #005177; +} + +.entry .entry-content .has-dark-gray-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-dark-gray-background-color { + background-color: #111; +} + +.entry .entry-content .has-light-gray-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-light-gray-background-color { + background-color: #767676; +} + +.entry .entry-content .has-white-background-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color.has-white-background-color { + background-color: #FFF; +} + +.entry .entry-content .has-primary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-primary-color > p { + color: #0073aa; +} + +.entry .entry-content .has-secondary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-secondary-color > p { + color: #005177; +} + +.entry .entry-content .has-dark-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-dark-gray-color > p { + color: #111; +} + +.entry .entry-content .has-light-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-light-gray-color > p { + color: #767676; +} + +.entry .entry-content .has-white-color, +.entry .entry-content .wp-block-pullquote.is-style-solid-color blockquote.has-white-color { + color: #FFF; +} + +/* Media */ +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +embed, +iframe, +object { + max-width: 100%; +} + +.custom-logo-link { + display: inline-block; +} + +.avatar { + border-radius: 100%; + display: block; + height: calc(2.25 * 1rem); + min-height: inherit; + width: calc(2.25 * 1rem); +} + +svg { + transition: fill 120ms ease-in-out; + fill: currentColor; +} + +/*-------------------------------------------------------------- +## Captions +--------------------------------------------------------------*/ +.wp-caption { + margin-bottom: calc(1.5 * 1rem); +} + +@media only screen and (min-width: 768px) { + .wp-caption.aligncenter { + position: relative; + left: calc( calc(8 * (100vw / 12) - 28px) / 2); + transform: translateX(-50%); + } +} + +@media only screen and (min-width: 1168px) { + .wp-caption.aligncenter { + left: calc( calc(6 * (100vw / 12) - 28px) / 2); + } +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption-text { + color: #767676; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: center; +} + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +.gallery { + display: flex; + flex-flow: row wrap; + justify-content: center; + margin-bottom: calc(1.5 * 1rem); +} + +.gallery-item { + display: inline-block; + margin-right: 16px; + margin-bottom: 16px; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: calc((100% - 16px * 1) / 2); +} + +.gallery-columns-2 .gallery-item:nth-of-type(2n+2) { + margin-right: 0; +} + +.gallery-columns-3 .gallery-item { + max-width: calc((100% - 16px * 2) / 3); +} + +.gallery-columns-3 .gallery-item:nth-of-type(3n+3) { + margin-right: 0; +} + +.gallery-columns-4 .gallery-item { + max-width: calc((100% - 16px * 3) / 4); +} + +.gallery-columns-4 .gallery-item:nth-of-type(4n+4) { + margin-right: 0; +} + +.gallery-columns-5 .gallery-item { + max-width: calc((100% - 16px * 4) / 5); +} + +.gallery-columns-5 .gallery-item:nth-of-type(5n+5) { + margin-right: 0; +} + +.gallery-columns-6 .gallery-item { + max-width: calc((100% - 16px * 5) / 6); +} + +.gallery-columns-6 .gallery-item:nth-of-type(6n+6) { + margin-right: 0; +} + +.gallery-columns-7 .gallery-item { + max-width: calc((100% - 16px * 6) / 7); +} + +.gallery-columns-7 .gallery-item:nth-of-type(7n+7) { + margin-right: 0; +} + +.gallery-columns-8 .gallery-item { + max-width: calc((100% - 16px * 7) / 8); +} + +.gallery-columns-8 .gallery-item:nth-of-type(8n+8) { + margin-right: 0; +} + +.gallery-columns-9 .gallery-item { + max-width: calc((100% - 16px * 8) / 9); +} + +.gallery-columns-9 .gallery-item:nth-of-type(9n+9) { + margin-right: 0; +} + +.gallery-item:last-of-type { + padding-right: 0; +} + +.gallery-caption { + display: block; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; +} + +.gallery-item > div > a { + display: block; + line-height: 0; + box-shadow: 0 0 0 0 transparent; +} + +.gallery-item > div > a:focus { + box-shadow: 0 0 0 2px #0073aa; +} diff --git a/wp-content/themes/twentynineteen/style.css.map b/wp-content/themes/twentynineteen/style.css.map new file mode 100644 index 000000000..ae5cbd515 --- /dev/null +++ b/wp-content/themes/twentynineteen/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["style.scss","sass/mixins/_mixins-master.scss","sass/_normalize.scss","sass/typography/_typography.scss","sass/variables-site/_fonts.scss","sass/variables-site/_colors.scss","sass/typography/_headings.scss","sass/mixins/_utilities.scss","sass/typography/_copy.scss","sass/elements/_elements.scss","sass/elements/_lists.scss","sass/elements/_tables.scss","sass/forms/_buttons.scss","sass/forms/_fields.scss","sass/navigation/_navigation.scss","sass/navigation/_links.scss","sass/navigation/_menus.scss","sass/variables-site/_structure.scss","sass/navigation/_next-previous.scss","sass/modules/_accessibility.scss","sass/modules/_alignments.scss","sass/modules/_clearings.scss","sass/layout/_layout.scss","sass/site/_site.scss","sass/site/header/_site-header.scss","sass/site/header/_site-featured-image.scss","sass/site/primary/_posts-and-pages.scss","sass/site/primary/_comments.scss","sass/site/primary/_archives.scss","sass/site/footer/_site-footer.scss","sass/site/secondary/_widgets.scss","sass/blocks/_blocks.scss","sass/media/_media.scss","sass/media/_captions.scss","sass/media/_galleries.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACuDA;AAAA;AAAA;ADpBA;AE1DA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACC;AAAmB;EACnB;AAAgC;;;AAGjC;AAAA;AAGA;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAAA;AAKA;EACC;EACA;;;AAGD;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACC;AAAyB;EACzB;AAAW;EACX;AAAmB;;;AAGpB;AAAA;AAAA;AAAA;AAKA;EACC;AAAmC;EACnC;AAAgB;;;AAGjB;AAAA;AAGA;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAAA;AAKA;EACC;AAAqB;EACrB;AAA4B;EAC5B;AAAmC;;;AAGpC;AAAA;AAAA;AAIA;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;EAGC;AAAmC;EACnC;AAAgB;;;AAGjB;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAAA;AAKA;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAGA;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;EAKC;AAAsB;EACtB;AAAiB;EACjB;AAAmB;EACnB;AAAW;;;AAGZ;AAAA;AAAA;AAAA;AAKA;AAAA;AACQ;EACP;;;AAGD;AAAA;AAAA;AAAA;AAKA;AAAA;AACS;EACR;;;AAGD;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIC;EACA;;;AAGD;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACC;AAAwB;EACxB;AAAgB;EAChB;AAAgB;EAChB;AAAiB;EACjB;AAAY;EACZ;AAAqB;;;AAGtB;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAAA;AAKA;AAAA;EAEC;AAAwB;EACxB;AAAY;;;AAGb;AAAA;AAAA;AAIA;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAAA;AAKA;EACC;AAA+B;EAC/B;AAAsB;;;AAGvB;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAAA;AAKA;EACC;AAA4B;EAC5B;AAAe;;;AAGhB;AAAA;AAGA;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAGA;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;;;AFrRD;AG7DA;EACC,WCKiB;;;ADFlB;EACC;EACA;EACA,OEKkB;EFJlB,aCPY;EDQZ;EACA;EACA,aCOwB;EDNxB;EACA;;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC,OETkB;EFUlB,aCrBY;EDsBZ;EACA,aCNwB;EDOxB;;;AG1BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAaC,aFVe;EEWf;EACA;EACA,aFK2B;EEJ3B;EACA;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAYC,aF9Be;;;AEiChB;EACC,aFnCY;;;AEsCb;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAGD;EACC,WFlCkB;;AGZjB;ED6CF;IAIE,WFpCiB;;;;AEwCnB;AAAA;AAAA;AAAA;AAAA;EAKC,WF/CkB;;AGXjB;EDqDF;AAAA;AAAA;AAAA;AAAA;IAQE,WFjDiB;;;;AEqDnB;AAAA;AAAA;AAAA;EAIC,WF1DkB;;;AE6DnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAWC,WFzEkB;;;AE4EnB;AAAA;AAAA;EAGC,WFhFkB;;;AEmFnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAYC,WFhGkB;;;AEmGnB;AAAA;EAEC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;EACA;;;AAGD;ACnIE;EDoIF;IAEE;;;;AEzIF;EACC;EACA;;;AAGD;EACC;;;AAKA;EACC,WJDiB;EIEjB;EACA,aJXc;;;AIehB;EACC,WJPkB;EIQlB,aJfW;EIgBX,aJFwB;EIGxB;;;AAGD;EACC,WJdkB;EIelB,aJvBY;;;AI0Bb;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;AAEA;EACC;;AAGD;EACC;;;ARcF;ASlEA;EACC;;;AAGD;EACC,YJK6B;;;AIH9B;EACC,YJE6B;;;AIC9B;AAAA;AAAA;EAGC;;;AAGD;EACC,YJhBwB;;;AImBzB;EFAC;EEEA,OJFa;;;AISd;AAAA;EAEC,OJTmB;EIUnB;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;ARuBA;EACC,YIvDkB;EJwDlB;EACA;EACA;EACA;EACA;;;AQtBF;EACC,kBJvCmB;EIwCnB;EACA;;;ACvDD;AAAA;EAEC;;;AAGD;EACC;;AAEA;EACC;;;AAIF;EACC;;;AAGD;EACC,aNCwB;;;AMEzB;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;AD6BD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC,OJlEkB;;;AMdpB;EACC;EACA;;AAEA;EACC,cNSkB;;;ALwDpB;AYtEA;AAAA;AAAA;AAAA;AAAA;ELyBC;EKlBA,YPD0B;EOE1B;EACA;EACA;EACA;EACA,aRTe;EQUf,WRDkB;EQElB;EACA,aRM2B;EQL3B;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC,YPnB+B;;AOsBhC;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;;AC/BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAgBC;EACA,YRdyB;EQezB;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,cRHY;EQIZ;EACA;;;AAQF;EACC;EACA;EACA;EACA;EACA;;;AAKA;EACC;;;Ab6BF;Ac1EA;AAAA;AAAA;ACAA;ERqBC;EQlBA,OVkBa;;AUhBb;EACC,OVgBoB;;AUbrB;EAEC,OVYkB;EUXlB;EACA;;AAGD;EACC;EACA;;;ADbF;AAAA;AAAA;AELA;AAEA;EAEC;EACA;AAuJA;AAAA;AAAA;AAAA;;AArJA;EACC;;AAGD;EACC;;AAGD;EAEC;EACA;EACA;;AAEA;EAEC,OXFW;EWGX;EACA;;AAEA;EAEC;EACA,OXTU;EWUV;;AAEA;EACC;;AAGD;EAEC,OXhBe;;AWsBhB;EACC;;AAMA;AAAA;EACC;EACA;;AAKH;EACC;;AAKH;EAEC,YX9CY;EW+CZ,OXlEuB;EWmEvB;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AT9EA;ES8DD;IAmBE;;;AAGD;EAEC;EACA;EACA;EACA;EACA;;AAIC;EACC;EACA;EACA;;ATjGH;ESuGI;IACC;;;AAMJ;EACC,OXhHqB;EWiHrB;EACA,aZ/FwB;EYgGxB;;AAEA;EAEC,YXlGe;;AWoGf;EACC,YXrGc;;AW4GnB;AAAA;AAAA;AAAA;EAIC;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEC;EACA;EACA,cC/IkB;;AVCnB;ES0IA;AAAA;AAAA;AAAA;IAOE;IACA;IACA;IACA;;;AASH;EACC;EACA;EACA;EACA;;AAEA;EAEC;EACA;EACA,cCxKkB;;AVCnB;ESmKA;IAOE;IACA;IACA;IACA;;;;AAMJ;AAEA;EACC;EACA;;AAEA;Ef7KA;EACA;EACA;Ee8KC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA,OXnMe;EWoMf;EACA;;AAEA;EAEC,OXzMc;EW0Md;;AAGD;EACC,OX9Mc;EW+Md;EACA;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;;AF5NN;AAAA;AAAA;AIVA;AAGA;EAEC;;AXFC;EWAF;IAKE;IACA;;;AXDA;EWLF;IAUE;IACA;;;AAGD;EAEC;EACA;EACA;EACA;;AXnBA;EWcD;IAQE;;;AXjBD;EWSD;IAYE;IACA;IACA;;;AAIA;EACC,ObtBgB;EauBhB;;AAEA;EAEC;EACA;EACA;EACA,Ob9Be;Ea+Bf;;AAIF;EACC;;AAGD;EACC,Ob/BgB;;AEflB;EWkDA;AAAA;IAIE;;;AAIF;EACC;;AX3DD;EW0DA;IAIE;;;AAGD;EACC,eDxEiB;;AC4EjB;EACC;;AAKH;EACC;;AX7ED;EW4EA;IAIE;IACA,cDvFiB;;;AC2FjB;EACC;;;AAUJ;EAEC;EACA;EACA;;AAGA;EACC;;AAEA;EAEC;;AAGD;EAEC;;AAIF;AAAA;EAEC;;AX5HD;EWqGD;IA4BE;IACA;;EAKC;AAAA;IACC;IACA;;EAIF;IACC,SD/IiB;;;;ACwJpB;EACC;EACA;EACA;;AXrJA;EWkJD;IAME;IACA;;;AAIF;AAAA;EAEC;EACA;EACA,adtKc;EcuKd;;AAEA;AAAA;EACC;;AX1KD;EWyKA;AAAA;IAIE;;;AAIF;AAAA;EACC;EACA;EACA;EACA;;AAKA;AAAA;EACC,ObzKU;;Aa8Kb;EACC;;;AlBtHF;AmB9EA;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAA8B;;AAE9B;EACC,kBdVyB;EcWzB;EACA;EACA;EACA;EACA,OdHmB;EcInB;ElBlBD;EACA;EkBmBC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAiB;;;AAInB;AACA;EACC;;;AnB8CD;AoBlFA;EACC;EACA;;;AAGD;EACC;EACA,aHLoB;;;AGQrB;EACC;EnBHA;EACA;EACA;;;AD4ED;AqBtFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EpBeC;EACA;EACA;;;AoBFD;AAAA;AAAA;AAAA;AAAA;AAAA;EpBOC;;;ADoED;AsBzFA;AAEA;EACC;;;AAGD;EACC;;;AtBsFD;AuB7FA;AAAA;AAAA;ACCA;EAEC;;AjBDC;EiBDF;IAKE;IACA;;EAEA;IACC;IACA;IACA;IACA;IACA;;EAEA;IACC;;;;AAQJ;EAEC,OnBdmB;EmBenB;;AjB1BC;EiBuBF;IAME;;;;AAMF;EAEC;EACA;EACA;;AjBvCC;EiBmCF;IAOE;IACA;IACA;IACA;IACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EAGC;;AjBlED;EiBiDD;IAqBE;IACA;;;;AAOH;EAEC;EACA;EACA,OnBxEkB;AmBkFlB;;AARA;EACC;;AjBrFA;EiBoFD;IAIE;;;AAKF;EACC;;AAGD;EACC;;AAEA;EACC,OnBzFiB;;AEZlB;EiB8EF;IA4BE;;;AAGD;EACC;EACA;;;AAMF;EAEC;EACA,OnB7GmB;EmB8GnB;EACA;;;AC3HD;AAEC;EACA;AAEA;EACA;AAEA;AAkCA;AAgBA;AAsFA;AAcA;AAOA;AAcA;AACA;EACA;EACA;EACA;AAEA;AAEA;AAaA;AAOA;AACE;AAmBF;AAaA;;AAvOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC,OpBjBuB;;AoBoBxB;AAAA;AAAA;AAAA;AAAA;EAKC,OpBzBuB;EoB0BvB;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC,OpBhCsB;EoBiCtB;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC,OpBtCsB;;AoB4CvB;EACC,OpB7CsB;EoB8CtB;EACA;;AAIF;AAAA;AAEC;EACA;EACE;;AAKH;EAEC;EACA;EACA;AAeA;;AlB9EA;EkB2DD;IAQE;IACA;;;AAKA;EACC,YpB3EqB;;AoBiFvB;EAEC;;AAEA;EAEC,cRvFiB;EQwFjB;;AAEA;EACC;;AAIF;ElB5EF;EkB+EG;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;;AAGD;EACC;;AlBhHF;EkBwHE;IACC;IACA;;EAGD;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;IACA;;;AAQJ;EAEC,YpBpJuB;EoBqJvB;;AAEA;EAGC;;AAKF;AAAA;EAEC;EACA;;AAID;AAAA;AAAA;AAAA;EAKC;EACA;EACA;EAAQ;EACR;EACA;EACA;;AAYC;EACD;EACA;EACA;EACA;AAEA;;AACA;EACE;;AAKH;EACC,YpBvLY;EoBwLZ;EACA;;AAKC;EACD;EACA;EACA;AAEE;;AACF;EACC,YpBrMW;EoBsMX;EACA;AAEA;;AACA;EAND;IAOE;;;AAMD;EACC;EACF;EACA;EACA;AAEA;;AACA;EAPC;IAQA;;;AAKF;EACG;AACF;AAAA;AAAA;AAAA;EAIA;EACE;EACF;AAEA;;AACA;EACC;EACA;;AlB7PD;EkB2PA;IAKE;;;AAMH;EACC;;AAGD;EACC;;;AFvQF;AAAA;AAAA;AGPA;EACC;;;AAGD;EACC,YrBC0B;EqBA1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EAEC;;AAEA;EACC;;AAGD;EAEC;EACA;;AnBlCA;EmB+BD;IAME;;;AAIF;EAGC;;AzBqBD;EACC,YIvDkB;EJwDlB;EACA;EACA;EACA;EACA;;AyBzBA;EACC;;AAEA;EACC,OrBtCgB;;AqB2CnB;AAAA;EAGC,OrB/CkB;EqBgDlB;;AAEA;AAAA;EAEC,cThEkB;ESiElB;;AAEA;AAAA;EACC;;AAIF;AAAA;EnBrDD;EmBwDE;;AAEA;AAAA;EACC;EACA,OrB5DU;;AqBgEZ;AAAA;EACC;EACA;EACA;EACA;;AAIF;EACC;;AAGD;EAEC;;AnBhGA;EmB8FD;IAKE;IACA;;;AnBpGD;EmB8FD;IAUE;;;AAIF;EAEC,QT/GmB;;AVCnB;EmB4GD;IAKE;;;AAGD;EACC;;AAGD;EACC;;AAEA;EACC;EACA;EACA;;AAQF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAZD;IAaE;;;AAKH;EACC;EACA;EACA;EACA;EACA;EAAQ;EACR;EACA;EACA;;AzB1IH;EACC,YIZY;EJaZ;EACA;EACA;;AAGD;EACC,YInBY;EJoBZ;EACA;EACA;AAEA;;AACA;EAPD;IAQE;;;AyBqID;EnB/JD;EmBiKE;EACA;;AAEA;EACC;EACA;;AAGD;EACC,OrB1KU;EqB2KV;;AAIF;EACC;;AAEA;EACC;;AAKF;EAEC;EACA;;AnB7MD;EmB0MA;IAME;IACA;;;AnB5MF;EmBqMA;IAWE;;;AAKF;EACC;;AnB3ND;EmB0NA;IAIE;;;AnBzNF;EmBqNA;IAQE;;;;AAMJ;AAEA;EAEC;;AnB5OC;EmB0OF;IAKE;IACA;;;AnBhPA;EmB0OF;IAUE;;;AAGD;EAEC;;AzBxLD;EACC,YIvDkB;EJwDlB;EACA;EACA;EACA;EACA;;AyBqLD;EAEC;EACA,OrBpPkB;EqBqPlB,WtBtPiB;EsBuPjB,atB/O0B;;AsBiP1B;EACC;;AAEA;EACC,OrBnPgB;EqBoPhB;;;AH/PJ;AAAA;AAAA;AIZA;EACC;;;AAGD;EACC;;;AAGD;AAEC;AAAA;AAAA;;AAGA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;;ApBnBA;EoBcD;AAAA;AAAA;AAAA;AAAA;IAQE;IACA;;;AAIF;EAEC;;ApB7BA;EoB2BD;IAKE;IACA;IACA;IACA;IACA;;;AAGD;EAEC;;A1BwBF;EACC,YIvDkB;EJwDlB;EACA;EACA;EACA;EACA;;AMvEA;EoBuCA;IAKE;;;ApB5CF;EoBgDA;IAEE;IACA;;;;AAMJ;EACC;EACA;;;AAGD;EACC;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;EACA,WvBvEgB;EuBwEhB;EACA;EACA;EACA;;;AAMD;EACC;;;AAIF;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAEA;EACC;;;AAKH;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;;ApB3IC;EoByIF;IAKE;;EAEA;IACC;;;AAKD;AAAA;EAEC;;AAIF;EACC;;AAGD;EACC;;ApBjKA;EoBoKD;IAGE;IACA;;;AAGD;EACC;EACA,cV9KkB;EU+KlB;;ApB9KD;EoB2KA;IAME;IACA;IACA;IACA;IACA;;;AAIF;EACC;EACA;;ApB3LD;EoByLA;IAKE;IACA;;;AAGD;EACC;;AAEA;EACC,OtBlLe;;AsBuLlB;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;ApBnND;EoB2MA;IAWE;;;AAGD;EACC;EACA;EACA;EACA;EACA;;ApB9NF;EoBmOD;IAGE;IACA,aVxOkB;IUyOlB;IACA;;;AAGD;AAAA;EAEC;EACA;EACA,OtBrOiB;EsBsOjB;;AAEA;AAAA;EACC;;AAGD;AAAA;EACC,OtB5OgB;EsB6OhB;;AAIF;EACC;;AAGD;EACC,OtBvPiB;EsBwPjB;EACA;EACA;EACA;;AAGD;EACC,OtB/PiB;EsBgQjB;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EACC;EACA,cVxRkB;EUyRlB;EACA;;AAEA;EACC,OtB1QU;;AsB+Qb;EAEC;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;AAEA;EACC;;;AAMJ;AAAA;EAEC;;AAEA;AAAA;EACC,OtBxSkB;;;AsB4SpB;E1BpTC;EACA;EACA;E0BqTA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAKA;EACC;EACA;;;AAOF;EACC;;AAEA;EACC;EACA;EACA;EACA;;;AAQF;AAAA;EAEC,avB1Wc;EuB2Wd,WvBnWiB;EuBoWjB,OtBjWkB;;AEXlB;EoB+WD;AAAA;IAGE;IACA;;;ApBnXD;EoBuXD;IAEE,aV1XkB;;;AU8XpB;AAAA;AAAA;EAGC;EACA;;;AJnXF;AAAA;AAAA;AKjBA;AAAA;AAAA;EAIC;;ArBDC;EqBHF;AAAA;AAAA;IAOE;IACA;;;AAGD;AAAA;AAAA;EAEC,OvBCkB;EuBAlB;EACA;;AAEA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA,OvBhBiB;;;AEXlB;EqBgCF;IAGE;;;;AAIF;AAKC;AAAA;EAEC;;ArB9CA;EqB4CD;AAAA;IAKE;;;AAIF;AAAA;EACC;EACA;;AAGD;AAAA;EACC;;;ALxCF;AAAA;AAAA;AMtBA;AAEA;EAEC,OxBUmB;;AwBRnB;EAEC;;AtBLA;EsBGD;IAKE;IACA;;;AAGD;EACC,cZdkB;;AYkBpB;EACC;;AAEA;EACC;EACA,OxBJW;;;AL6Ed;A8BlGA;EACC;AAEA;;AACA;EACC;;;A9BiGF;A+BtGA;AAEA;AAAA;EAGC;EACA;EACA;AAWD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AxBfE;EwBDF;AAAA;IAQE;IACA;;;AxBHA;EwBNF;AAAA;IAaE;;;AAeD;AAAA;EACC;;AAGD;AAAA;EACC;;AAGD;AAAA;EAEC;EACA;;AxBtCA;EwBmCD;AAAA;IAME;IACA;IACA;;;AAIF;AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;AAAA;EACC;EACA;EACA;;AxB1DA;EwBuDD;AAAA;IAME;IACA;;;AxBzDD;EwBkDD;AAAA;IAWE;;;AAIF;AAAA;EACC;EACA;EACA;EACA,ad3EmB;Ec4EnB,cd5EmB;;AVCnB;EwBsED;AAAA;IAQE;IACA;IACA;;;AAGF;AAAA;EAEC;EACA;;AxBjFA;EwB8ED;AAAA;IAME;IACA;IACA;IACA;IACA;IACA;;;;AAQF;EAEC;;AAEA;EACC;;AAGD;EAGC;;AxBjHD;EwB8GA;IAME;;;AxBzGF;EwBmGA;IAUE;;;AAQF;EACC;;AAOD;ExBlHD;EwBoHE;EACA,Y1BxIwB;E0ByIxB,W3BnIgB;E2BoIhB,a3B7Ia;E2B8Ib,a3B5HyB;E2B6HzB;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC,Y1BxJ6B;;A0B2J9B;EACC;EACA;;AAIF;EACC;;AAGD;ExB/ID;EwBoJE;EACA;;AAEA;EACC,O1B/KuB;;A0BmLzB;EACC,c1BnL8B;E0BoL9B,O1BpL8B;;A0ByLhC;AAAA;AAAA;EAGC;EACA;;AAEA;AAAA;AAAA;EACC,O1BzLiB;E0B0LjB,a3BrMa;E2BsMb;EACA;EACA,a3BtLyB;;A2BwLzB;AAAA;AAAA;EACC,O1BhMgB;E0BiMhB;;AAGD;AAAA;AAAA;EACC,O1BrMgB;E0BsMhB;;AAOF;EACC;EACA;EACA;;AAEC;EACC;;AAGF;EACC;;AACA;EACC;;AAOJ;EACC,W3BpOiB;E2BqOjB;EACA,Sd/OmB;;AcmPpB;EACC,a3BpPW;E2BqPX,W3BhPgB;E2BiPhB;;AAKA;EACC,a3B3Pa;E2B4Pb,W3B9OgB;E2B+OhB;EACA;EACA;;AAKF;EACC;EACA,SdvQmB;;AcyQnB;EACC;EACA;EACA;;AAGD;EACC,W3BpQgB;E2BqQhB;EACA;EACA;EACA;EACA,O1B1QgB;;A0B4QhB;EACC;;AxBvRF;EwB8QA;IAaE,W3B/Qe;;;A2BmRjB;EACC;EACA,a3BjSa;E2BkSb,W3B1RgB;E2B2RhB;EACA;EACA,O1B1RiB;;A0B6RlB;EAEC;;AAEA;EACC;EACA;EACA;EACA;;AAMD;EACC,W3B5Se;E2B6Sf;EACA;EACA;;AxB1TF;EwBsTC;IAOE,W3BjTc;;;A2BqThB;EACC;;AAGD;AAAA;EAEC;;AAGD;EACC,kB1BzTU;;A0B4TX;EAEC;;AAEA;EACC;EACA;EACA;;AxBrVH;EwB8UC;IAWE;;;AASH;EAEC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC,W3BxWgB;;A2B2WjB;EAEC;EACA;EACA;;AAEA;EACC,W3B/We;E2BgXf;EACA;;AAGD;AAAA;AAAA;EAEC,W3BzXe;;AGRjB;EwBmXA;IAmBE;IACA;;EAEA;IACC,W3B/Xc;;;A2BwYjB;EACC;;AAGD;EAEC;;AAGD;EACC;EACA;EACA;;AAQD;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC,a3B1aa;E2B2ab,W3BhagB;E2BiahB;EAEA;EACA;;AxB/aD;EwBuaA;AAAA;AAAA;AAAA;AAAA;AAAA;IAWE,W3Btae;I2Buaf;IACA;;;AxB/aF;EwBkaA;AAAA;AAAA;AAAA;AAAA;AAAA;IAiBE;IACA;;;AAOD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;AAIF;AAAA;EACC;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC,SdndiB;;AcudnB;AAAA;EACC;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC,Sd7diB;;AcmepB;AAAA;EAEC;;AAID;AAAA;AAAA;AAAA;AAAA;EAKC,W3BreiB;E2BsejB,a3B9ec;E2B+ed,a3B9dsB;E2B+dtB;EACA;EACA;;AAID;AAAA;EAEC;EACA;AAYA;AAAA;;AAVA;AAAA;EACC,kB1BjfiB;E0BkfjB;EACA;;AAGD;AAAA;EACC;;AAQA;AAAA;AAAA;EACC;;AAIF;AAAA;EACC,O1BrgBiB;E0BsgBjB,W3BtgBgB;E2BugBhB,gB3BzgBgB;E2B0gBhB,c3B1gBgB;;A2B+gBlB;EACC;;AAMA;EACC,c1BrhBiB;;A0B0hBnB;EACC,a3BtiBc;;A2BwiBd;ExBlhBD;EwBohBE;EACA;EACA,Y1BziBwB;E0B0iBxB,W3BziBe;E2B0iBf,a3B9iBa;E2B+iBb,a3B7hByB;E2B8hBzB;EACA;;AxB5iBD;EwBmiBA;IAYE,W3BhjBc;I2BijBd;;;AAGD;EACC;;AAGD;EACC,Y1BzjB6B;;A0B4jB9B;EACC;EACA;;AAMH;EACC;;AAEA;EACC,W3BlkBgB;;A2B2kBhB;EACC;;AAGD;EACC;;AAIF;EACC,cdhmBkB;;AckmBlB;EACC;;AAQF;EACC,a3B3mBa;E2B4mBb;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;;AASA;EACC,W3BxnBe;;AJ+FnB;AgC1GA;AAAA;AAAA;EAGC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAAA;AChCA;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;ADsBD;AAAA;AAAA;AErCA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA,ejBPoB;EiBQpB,ejBRoB;EiBSpB;EACA;EACA;;AAIC;EACC;;AADD;EACC;;AADD;EACC;;AADD;EACC;;AADD;EACC;;AADD;EACC;;AADD;EACC;;AADD;EACC;;AAIF;EACC;;;AAIF;EACC;EACA,W9BlBkB;E8BmBlB,a9B3Be;E8B4Bf,a9BXuB;E8BYvB;EACA;;;AAGD;EACC;EACA;EAGA;;AAEA;EACC","file":"style.css"} \ No newline at end of file diff --git a/wp-content/themes/twentynineteen/style.scss b/wp-content/themes/twentynineteen/style.scss new file mode 100644 index 000000000..cdb1b56a9 --- /dev/null +++ b/wp-content/themes/twentynineteen/style.scss @@ -0,0 +1,109 @@ +/* +Theme Name: Twenty Nineteen +Theme URI: https://wordpress.org/themes/twentynineteen/ +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: Our 2019 default theme is designed to show off the power of the block editor. It features custom styles for all the default blocks, and is built so that what you see in the editor looks like what you'll see on your website. Twenty Nineteen is designed to be adaptable to a wide range of websites, whether you’re running a photo blog, launching a new business, or supporting a non-profit. Featuring ample whitespace and modern sans-serif headlines paired with classic serif body text, it's built to be beautiful on all screen sizes. +Requires at least: WordPress 4.9.6 +Version: 1.4 +License: GNU General Public License v2 or later +License URI: LICENSE +Text Domain: twentynineteen +Tags: one-column, flexible-header, accessibility-ready, custom-colors, custom-menu, custom-logo, editor-style, featured-images, footer-widgets, rtl-language-support, sticky-post, threaded-comments, translation-ready + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. + +Twenty Nineteen is based on Underscores https://underscores.me/, (C) 2012-2018 Automattic, Inc. +Underscores is distributed under the terms of the GNU GPL v2 or later. + +Normalizing styles have been helped along thanks to the fine work of +Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Variables +# Normalize +# Typography + ## Headings + ## Copy +# Elements + ## Lists + ## Tables +# Forms + ## Buttons + ## Fields +# Navigation + ## Links + ## Menus + ## Next & Previous +# Accessibility +# Alignments +# Clearings +# Layout +# Widgets +# Content + ## Archives + ## Posts and pages + ## Comments +# Blocks +# Media + ## Captions + ## Galleries +--------------------------------------------------------------*/ +@import "sass/variables-site/variables-site"; +@import "sass/mixins/mixins-master"; + +/* Normalize */ + +@import "sass/normalize"; + +/* Typography */ + +@import "sass/typography/typography"; + +/* Elements */ + +@import "sass/elements/elements"; + +/* Forms */ + +@import "sass/forms/forms"; + +/* Navigation */ + +@import "sass/navigation/navigation"; + +/* Accessibility */ + +@import "sass/modules/accessibility"; + +/* Alignments */ + +@import "sass/modules/alignments"; + +/* Clearings */ + +@import "sass/modules/clearings"; + +/* Layout */ + +@import "sass/layout/layout"; + +/* Content */ + +@import "sass/site/site"; + +/* Widgets */ + +@import "sass/site/secondary/widgets"; + +/* Blocks */ + +@import "sass/blocks/blocks"; + +/* Media */ + +@import "sass/media/media"; diff --git a/wp-content/themes/twentynineteen/template-parts/content/content-excerpt.php b/wp-content/themes/twentynineteen/template-parts/content/content-excerpt.php new file mode 100644 index 000000000..a76edb02e --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/content/content-excerpt.php @@ -0,0 +1,33 @@ + + + diff --git a/wp-content/themes/twentynineteen/template-parts/content/content-none.php b/wp-content/themes/twentynineteen/template-parts/content/content-none.php new file mode 100644 index 000000000..332dd17bf --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/content/content-none.php @@ -0,0 +1,53 @@ + + +
        + + +
        + ' . wp_kses( + /* translators: 1: link to WP admin new post page. */ + __( 'Ready to publish your first post? Get started here.', 'twentynineteen' ), + array( + 'a' => array( + 'href' => array(), + ), + ) + ) . '

        ', + esc_url( admin_url( 'post-new.php' ) ) + ); + + elseif ( is_search() ) : + ?> + +

        + + +

        + +
        +
        diff --git a/wp-content/themes/twentynineteen/template-parts/content/content-page.php b/wp-content/themes/twentynineteen/template-parts/content/content-page.php new file mode 100644 index 000000000..b400a84ef --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/content/content-page.php @@ -0,0 +1,56 @@ + + +
        > + +
        + +
        + + +
        + '', + ) + ); + ?> +
        + + +
        + %s', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ), + '', + '' + ); + ?> +
        + +
        diff --git a/wp-content/themes/twentynineteen/template-parts/content/content-single.php b/wp-content/themes/twentynineteen/template-parts/content/content-single.php new file mode 100644 index 000000000..2e654dbcf --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/content/content-single.php @@ -0,0 +1,55 @@ + + +
        > + +
        + +
        + + +
        + "%s"', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + ) + ); + ?> +
        + +
        + +
        + + + + + +
        diff --git a/wp-content/themes/twentynineteen/template-parts/content/content.php b/wp-content/themes/twentynineteen/template-parts/content/content.php new file mode 100644 index 000000000..befcbda7f --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/content/content.php @@ -0,0 +1,59 @@ + + +
        > +
        + %s', _x( 'Featured', 'post', 'twentynineteen' ) ); + } + if ( is_singular() ) : + the_title( '

        ', '

        ' ); + else : + the_title( sprintf( '

        ', esc_url( get_permalink() ) ), '

        ' ); + endif; + ?> +
        + + + +
        + "%s"', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + ) + ); + ?> +
        + +
        + +
        +
        diff --git a/wp-content/themes/twentynineteen/template-parts/footer/footer-widgets.php b/wp-content/themes/twentynineteen/template-parts/footer/footer-widgets.php new file mode 100644 index 000000000..163cbd89d --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/footer/footer-widgets.php @@ -0,0 +1,24 @@ + + + + + diff --git a/wp-content/themes/twentynineteen/template-parts/header/entry-header.php b/wp-content/themes/twentynineteen/template-parts/header/entry-header.php new file mode 100644 index 000000000..b23ad31d7 --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/header/entry-header.php @@ -0,0 +1,46 @@ + + +', '' ); ?> + + + + diff --git a/wp-content/themes/twentynineteen/template-parts/header/site-branding.php b/wp-content/themes/twentynineteen/template-parts/header/site-branding.php new file mode 100644 index 000000000..03bc53b80 --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/header/site-branding.php @@ -0,0 +1,60 @@ + +
        + + + + + + + +

        + +

        + + + + +

        + +

        + + + + + + + +
        diff --git a/wp-content/themes/twentynineteen/template-parts/post/author-bio.php b/wp-content/themes/twentynineteen/template-parts/post/author-bio.php new file mode 100644 index 000000000..edda62c7b --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/post/author-bio.php @@ -0,0 +1,30 @@ + +
        +

        + + + +

        +

        + + +

        +
        + diff --git a/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php b/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php new file mode 100644 index 000000000..add281d3c --- /dev/null +++ b/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php @@ -0,0 +1,32 @@ +responses > 0; + +if ( $has_responses ) { + /* translators: %1(X comments)$s */ + $meta_label = sprintf( _n( '%d Comment', '%d Comments', $discussion->responses, 'twentynineteen' ), $discussion->responses ); +} else { + $meta_label = __( 'No comments', 'twentynineteen' ); +} +?> + +
        + authors ); + } + ?> +

        + + +

        +
        diff --git a/wp-content/themes/twentyseventeen/404.php b/wp-content/themes/twentyseventeen/404.php new file mode 100644 index 000000000..3eb2a30bb --- /dev/null +++ b/wp-content/themes/twentyseventeen/404.php @@ -0,0 +1,35 @@ + + +
        +
        +
        + +
        + +
        +

        + + + +
        +
        +
        +
        +
        + + Themes and click the 'Add New' button. +2. Type in Twenty Seventeen in the search form and press the 'Enter' key on your keyboard. +3. Click on the 'Activate' button to use your new theme right away. +4. Go to https://codex.wordpress.org/Twenty_Seventeen for a guide on how to customize this theme. +5. Navigate to Appearance > Customize in your admin panel and customize to taste. + +== Copyright == + +Twenty Seventeen WordPress Theme, Copyright 2016 WordPress.org +Twenty Seventeen is distributed under the terms of the GNU GPL + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Twenty Seventeen bundles the following third-party resources: + +HTML5 Shiv, Copyright 2014 Alexander Farkas +Licenses: MIT/GPL2 +Source: https://github.com/aFarkas/html5shiv + +jQuery scrollTo, Copyright 2007-2015 Ariel Flesler +License: MIT +Source: https://github.com/flesler/jquery.scrollTo + +normalize.css, Copyright 2012-2016 Nicolas Gallagher and Jonathan Neal +License: MIT +Source: https://necolas.github.io/normalize.css/ + +Font Awesome icons, Copyright Dave Gandy +License: SIL Open Font License, version 1.1. +Source: http://fontawesome.io/ + +Bundled header image, Copyright Alvin Engler +License: CC0 1.0 Universal (CC0 1.0) +Source: https://unsplash.com/@englr?photo=bIhpiQA009k + +== Changelog == + += 2.2 = +* Released: May 7, 2019 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_2.2 + += 2.1 = +* Released: February 21, 2019 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_2.1 + += 2.0 = +* Released: January 9, 2019 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_2.0 + += 1.9 = +* Released: December 19, 2018 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.9 + += 1.8 = +* Released: December 6, 2018 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.8 + += 1.7 = +* Released: August 2, 2018 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.7 + += 1.6 = +* Released: May 17, 2018 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.6 + += 1.5 = +* Released: April 4, 2018 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.5 + += 1.4 = +* Released: November 14, 2017 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.4 + += 1.3 = +* Released: June 8, 2017 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.3 + += 1.2 = +* Released: April 18, 2017 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.2 + += 1.1 = +* Released: January 6, 2017 + +https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.1 + += 1.0 = +* Released: December 6, 2016 + +Initial release diff --git a/wp-content/themes/twentyseventeen/archive.php b/wp-content/themes/twentyseventeen/archive.php new file mode 100644 index 000000000..3e58f1f81 --- /dev/null +++ b/wp-content/themes/twentyseventeen/archive.php @@ -0,0 +1,67 @@ + + +
        + + + + + +
        +
        + + + twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '' . __( 'Previous page', 'twentyseventeen' ) . '', + 'next_text' => '' . __( 'Next page', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ), + 'before_page_number' => '' . __( 'Page', 'twentyseventeen' ) . ' ', + ) + ); + + else : + + get_template_part( 'template-parts/post/content', 'none' ); + + endif; + ?> + +
        +
        + +
        + +>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + font-style: italic; + margin-bottom: 1.5em; + text-align: left; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { + text-align: right; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.075em; +} + +/* Image */ + +.wp-block-image { + margin-bottom: 1.5em; +} + +.wp-block-image figure { + margin-bottom: 0; + margin-top: 0; +} + +.wp-block-image figure.alignleft { + margin-right: 1.5em; +} + +.wp-block-image figure.alignright { + margin-left: 1.5em; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 1.5em; +} + +.wp-block-gallery figcaption { + font-style: italic; +} + +.wp-block-gallery.aligncenter { + display: flex; + margin: 0 -8px; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 0; +} + +.wp-block-quote.alignleft p:last-of-type, +.wp-block-quote.alignright p:last-of-type { + margin-bottom: 0; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover */ + +.wp-block-cover-image.alignright, +.wp-block-cover.alignright, +.wp-block-cover-image.alignleft, +.wp-block-cover.alignleft, +.wp-block-cover-image.aligncenter, +.wp-block-cover.aligncenter { + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background-color: #767676; + -webkit-box-shadow: none; + box-shadow: none; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; +} + +.wp-block-pullquote__citation, +.wp-block-pullquote cite { + font-size: inherit; + text-transform: none; +} + +/* Table */ + +.wp-block-table thead th { + border-bottom: 2px solid #bbb; + padding-bottom: 0.5em; +} + +.wp-block-table tr { + border-bottom: 1px solid #eee; +} + +.wp-block-table th, +.wp-block-table td { + border: 0; +} + +.rtl .wp-block-table th, +.rtl .wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + -webkit-box-shadow: none; + box-shadow: none; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + line-height: 1.66; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +.entry-content .wp-block-button__link { + background-color: #222; + color: #fff; +} + +.entry-content .is-style-outline .wp-block-button__link:not(.has-background) { + background-color: transparent; +} + +.entry-content .is-style-outline .wp-block-button__link:not(.has-text-color) { + color: #222; +} + +.colors-dark .wp-block-button__link { + background-color: #fff; + color: #000; +} + +.entry-content .wp-block-button__link:hover, +.entry-content .wp-block-button__link:focus, +.entry-content .is-style-outline .wp-block-button__link:not(.has-background):hover, +.entry-content .is-style-outline .wp-block-button__link:not(.has-background):focus { + background-color: #767676; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; +} + +.colors-dark .entry-content .wp-block-button__link:hover, +.colors-dark .entry-content .wp-block-button__link:focus, +.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-background):hover, +.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-background):focus { + background-color: #bbb; + color: #000; +} + +.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-text-color) { + color: #fff; +} + +.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-text-color):hover, +.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-text-color):focus { + color: #222; +} + +.colors-custom .entry-content .wp-block-button__link, +.colors-custom .entry-content .wp-block-button__link:hover, +.colors-custom .entry-content .wp-block-button__link:focus, +.colors-dark .entry-content .wp-block-button__link, +.colors-dark .entry-content .wp-block-button__link:hover, +.colors-dark .entry-content .wp-block-button__link:focus { + -webkit-box-shadow: none; + box-shadow: none; +} + +.colors-custom .entry-content .wp-block-button__link:hover, +.colors-custom .entry-content .wp-block-button__link:focus { + color: #fff; +} + +/* Separator */ + +.wp-block-separator { + border: 0; +} + +.wp-block-separator:not(.is-style-wide):not(.is-style-dots) { + max-width: 100px; +} + +/* Media & Text */ + +.wp-block-media-text { + margin-bottom: 1.5em; +} + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + list-style-position: inside; + text-align: center; +} + +/* Comments */ + +.wp-block-latest-comments article { + margin-bottom: 4em; +} + +.blog:not(.has-sidebar) #primary .wp-block-latest-comments article, +.archive:not(.page-one-column):not(.has-sidebar) #primary .wp-block-latest-comments article, +.search:not(.has-sidebar) #primary .wp-block-latest-comments article { + float: none; + width: 100%; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments a { + -webkit-box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 1); + box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 1); + +} + +.wp-block-latest-comments__comment-meta { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0.4em; +} + +.wp-block-latest-comments__comment-author, +.wp-block-latest-comments__comment-link { + font-weight: 700; + text-decoration: none; +} + +.wp-block-latest-comments__comment-date { + color: #767676; + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + margin-top: 0.4em; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-latest-comments__comment-excerpt p { + font-size: 14px; + font-size: 0.875rem; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.entry-content .has-pale-pink-color { + color: #f78da7; +} + +.entry-content .has-pale-pink-background-color, +.wp-block-button.is-style-outline .has-pale-pink-background-color:link { + background-color: #f78da7; +} + +.entry-content .has-vivid-red-color { + color: #cf2e2e; +} + +.entry-content .has-vivid-red-background-color, +.wp-block-button.is-style-outline .has-vivid-red-background-color:link { + background-color: #cf2e2e; +} + +.entry-content .has-luminous-vivid-orange-color { + color: #ff6900; +} + +.entry-content .has-luminous-vivid-orange-background-color, +.wp-block-button.is-style-outline .has-luminous-vivid-orange-background-color:link { + background-color: #ff6900; +} + +.entry-content .has-luminous-vivid-amber-color { + color: #fcb900; +} + +.entry-content .has-luminous-vivid-amber-background-color, +.wp-block-button.is-style-outline .has-luminous-vivid-amber-background-color:link { + background-color: #fcb900; +} + +.entry-content .has-light-green-cyan-color { + color: #7bdcb5; +} + +.entry-content .has-light-green-cyan-background-color, +.wp-block-button.is-style-outline .has-light-green-cyan-background-color:link { + background-color: #7bdcb5; +} + +.entry-content .has-vivid-green-cyan-color { + color: #00d084; +} + +.entry-content .has-vivid-green-cyan-background-color, +.wp-block-button.is-style-outline .has-vivid-green-cyan-background-color:link { + background-color: #00d084; +} + +.entry-content .has-pale-cyan-blue-color { + color: #8ed1fc; +} + +.entry-content .has-pale-cyan-blue-background-color, +.wp-block-button.is-style-outline .has-pale-cyan-blue-background-color:link { + background-color: #8ed1fc; +} + +.entry-content .has-vivid-cyan-blue-color { + color: #0693e3; +} + +.entry-content .has-vivid-cyan-blue-background-color, +.wp-block-button.is-style-outline .has-vivid-cyan-blue-background-color:link { + background-color: #0693e3; +} + +.entry-content .has-very-light-gray-color { + color: #eee; +} + +.entry-content .has-very-light-gray-background-color, +.wp-block-button.is-style-outline .has-very-light-gray-background-color:link { + background-color: #eee; +} + +.entry-content .has-cyan-bluish-gray-color { + color: #abb8c3; +} + +.entry-content .has-cyan-bluish-gray-background-color, +.wp-block-button.is-style-outline .has-cyan-bluish-gray-background-color:link { + background-color: #abb8c3; +} + +.entry-content .has-very-dark-gray-color { + color: #313131; +} + +.entry-content .has-very-dark-gray-background-color, +.wp-block-button.is-style-outline .has-very-dark-gray-background-color:link { + background-color: #313131; +} diff --git a/wp-content/themes/twentyseventeen/assets/css/colors-dark.css b/wp-content/themes/twentyseventeen/assets/css/colors-dark.css new file mode 100644 index 000000000..449f0623a --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/css/colors-dark.css @@ -0,0 +1,566 @@ +/** + * Twenty Seventeen: Dark Color Scheme + * + * See inc/color-patterns.php for dynamic color overrides for the theme. + * + * Colors are ordered from light to dark. + */ + +.colors-dark button, +.colors-dark input[type="button"], +.colors-dark input[type="submit"], +.colors-dark .entry-footer .edit-link a.post-edit-link { + background-color: #fff; +} + +.colors-dark a:hover, +.colors-dark a:active, +.colors-dark .entry-content a:focus, +.colors-dark .entry-content a:hover, +.colors-dark .entry-summary a:focus, +.colors-dark .entry-summary a:hover, +.colors-dark .comment-content a:focus, +.colors-dark .comment-content a:hover, +.colors-dark .widget a:focus, +.colors-dark .widget a:hover, +.colors-dark .site-footer .widget-area a:focus, +.colors-dark .site-footer .widget-area a:hover, +.colors-dark .posts-navigation a:focus, +.colors-dark .posts-navigation a:hover, +.colors-dark .comment-metadata a:focus, +.colors-dark .comment-metadata a:hover, +.colors-dark .comment-metadata a.comment-edit-link:focus, +.colors-dark .comment-metadata a.comment-edit-link:hover, +.colors-dark .comment-reply-link:focus, +.colors-dark .comment-reply-link:hover, +.colors-dark .widget_authors a:focus strong, +.colors-dark .widget_authors a:hover strong, +.colors-dark .entry-title a:focus, +.colors-dark .entry-title a:hover, +.colors-dark .entry-meta a:focus, +.colors-dark .entry-meta a:hover, +.colors-dark.blog .entry-meta a.post-edit-link:focus, +.colors-dark.blog .entry-meta a.post-edit-link:hover, +.colors-dark.archive .entry-meta a.post-edit-link:focus, +.colors-dark.archive .entry-meta a.post-edit-link:hover, +.colors-dark.search .entry-meta a.post-edit-link:focus, +.colors-dark.search .entry-meta a.post-edit-link:hover, +.colors-dark .page-links a:focus .page-number, +.colors-dark .page-links a:hover .page-number, +.colors-dark .entry-footer .cat-links a:focus, +.colors-dark .entry-footer .cat-links a:hover, +.colors-dark .entry-footer .tags-links a:focus, +.colors-dark .entry-footer .tags-links a:hover, +.colors-dark .post-navigation a:focus, +.colors-dark .post-navigation a:hover, +.colors-dark .pagination a:not(.prev):not(.next):focus, +.colors-dark .pagination a:not(.prev):not(.next):hover, +.colors-dark .comments-pagination a:not(.prev):not(.next):focus, +.colors-dark .comments-pagination a:not(.prev):not(.next):hover, +.colors-dark .logged-in-as a:focus, +.colors-dark .logged-in-as a:hover, +.colors-dark a:focus .nav-title, +.colors-dark a:hover .nav-title, +.colors-dark .edit-link a:focus, +.colors-dark .edit-link a:hover, +.colors-dark .site-info a:focus, +.colors-dark .site-info a:hover, +.colors-dark .widget .widget-title a:focus, +.colors-dark .widget .widget-title a:hover, +.colors-dark .widget ul li a:focus, +.colors-dark .widget ul li a:hover { + color: #fff; +} + +.colors-dark .entry-content a:focus, +.colors-dark .entry-content a:hover, +.colors-dark .entry-summary a:focus, +.colors-dark .entry-summary a:hover, +.colors-dark .comment-content a:focus, +.colors-dark .comment-content a:hover, +.colors-dark .widget a:focus, +.colors-dark .widget a:hover, +.colors-dark .site-footer .widget-area a:focus, +.colors-dark .site-footer .widget-area a:hover, +.colors-dark .posts-navigation a:focus, +.colors-dark .posts-navigation a:hover, +.colors-dark .comment-metadata a:focus, +.colors-dark .comment-metadata a:hover, +.colors-dark .comment-metadata a.comment-edit-link:focus, +.colors-dark .comment-metadata a.comment-edit-link:hover, +.colors-dark .comment-reply-link:focus, +.colors-dark .comment-reply-link:hover, +.colors-dark .widget_authors a:focus strong, +.colors-dark .widget_authors a:hover strong, +.colors-dark .entry-title a:focus, +.colors-dark .entry-title a:hover, +.colors-dark .entry-meta a:focus, +.colors-dark .entry-meta a:hover, +.colors-dark.blog .entry-meta a.post-edit-link:focus, +.colors-dark.blog .entry-meta a.post-edit-link:hover, +.colors-dark.archive .entry-meta a.post-edit-link:focus, +.colors-dark.archive .entry-meta a.post-edit-link:hover, +.colors-dark.search .entry-meta a.post-edit-link:focus, +.colors-dark.search .entry-meta a.post-edit-link:hover, +.colors-dark .page-links a:focus .page-number, +.colors-dark .page-links a:hover .page-number, +.colors-dark .entry-footer .cat-links a:focus, +.colors-dark .entry-footer .cat-links a:hover, +.colors-dark .entry-footer .tags-links a:focus, +.colors-dark .entry-footer .tags-links a:hover, +.colors-dark .post-navigation a:focus, +.colors-dark .post-navigation a:hover, +.colors-dark .pagination a:not(.prev):not(.next):focus, +.colors-dark .pagination a:not(.prev):not(.next):hover, +.colors-dark .comments-pagination a:not(.prev):not(.next):focus, +.colors-dark .comments-pagination a:not(.prev):not(.next):hover, +.colors-dark .logged-in-as a:focus, +.colors-dark .logged-in-as a:hover, +.colors-dark a:focus .nav-title, +.colors-dark a:hover .nav-title, +.colors-dark .edit-link a:focus, +.colors-dark .edit-link a:hover, +.colors-dark .site-info a:focus, +.colors-dark .site-info a:hover, +.colors-dark .widget .widget-title a:focus, +.colors-dark .widget .widget-title a:hover, +.colors-dark .widget ul li a:focus, +.colors-dark .widget ul li a:hover { + -webkit-box-shadow: inset 0 0 0 rgba(255, 255, 255, 0), 0 3px 0 rgba(255, 255, 255, 1); /* Equivalant to #fff */ + box-shadow: inset 0 0 0 rgba(255, 255, 255, 0), 0 3px 0 rgba(255, 255, 255, 1); /* Equivalant to #fff */ +} + +.colors-dark .entry-content a, +.colors-dark .entry-summary a, +.colors-dark .comment-content a, +.colors-dark .widget a, +.colors-dark .site-footer .widget-area a, +.colors-dark .posts-navigation a, +.colors-dark .widget_authors a strong { + -webkit-box-shadow: inset 0 -1px 0 rgba(240, 240, 240, 1); /* Equivalant to #f0f0f0 */ + box-shadow: inset 0 -1px 0 rgba(240, 240, 240, 1); /* Equivalant to #f0f0f0 */ +} + +body.colors-dark, +.colors-dark button, +.colors-dark input, +.colors-dark select, +.colors-dark textarea, +.colors-dark h3, +.colors-dark h4, +.colors-dark h6, +.colors-dark label, +.colors-dark .entry-title a, +.colors-dark.twentyseventeen-front-page .panel-content .recent-posts article, +.colors-dark .entry-footer .cat-links a, +.colors-dark .entry-footer .tags-links a, +.colors-dark .format-quote blockquote, +.colors-dark .nav-title, +.colors-dark .comment-body { + color: #eee; +} + +/* Placeholder text color -- selectors need to be separate to work. */ +.colors-dark ::-webkit-input-placeholder { + color: #ddd; +} + +.colors-dark :-moz-placeholder { + color: #ddd; +} + +.colors-dark ::-moz-placeholder { + color: #ddd; +} + +.colors-dark :-ms-input-placeholder { + color: #ddd; +} + +.colors-dark input[type="text"]:focus, +.colors-dark input[type="email"]:focus, +.colors-dark input[type="url"]:focus, +.colors-dark input[type="password"]:focus, +.colors-dark input[type="search"]:focus, +.colors-dark input[type="number"]:focus, +.colors-dark input[type="tel"]:focus, +.colors-dark input[type="range"]:focus, +.colors-dark input[type="date"]:focus, +.colors-dark input[type="month"]:focus, +.colors-dark input[type="week"]:focus, +.colors-dark input[type="time"]:focus, +.colors-dark input[type="datetime"]:focus, +.colors-dark input[type="datetime-local"]:focus, +.colors-dark input[type="color"]:focus, +.colors-dark textarea:focus, +.bypostauthor > .comment-body > .comment-meta > .comment-author .avatar { + border-color: #eee; +} + +.colors-dark input[type="text"]:focus, +.colors-dark input[type="email"]:focus, +.colors-dark input[type="url"]:focus, +.colors-dark input[type="password"]:focus, +.colors-dark input[type="search"]:focus, +.colors-dark input[type="number"]:focus, +.colors-dark input[type="tel"]:focus, +.colors-dark input[type="range"]:focus, +.colors-dark input[type="date"]:focus, +.colors-dark input[type="month"]:focus, +.colors-dark input[type="week"]:focus, +.colors-dark input[type="time"]:focus, +.colors-dark input[type="datetime"]:focus, +.colors-dark input[type="datetime-local"]:focus, +.colors-dark input[type="color"]:focus, +.colors-dark textarea:focus, +.colors-dark button.secondary, +.colors-dark input[type="reset"], +.colors-dark input[type="button"].secondary, +.colors-dark input[type="reset"].secondary, +.colors-dark input[type="submit"].secondary, +.colors-dark a, +.colors-dark .site-title, +.colors-dark .site-title a, +.colors-dark .navigation-top a, +.colors-dark .dropdown-toggle, +.colors-dark .menu-toggle, +.colors-dark .page .panel-content .entry-title, +.colors-dark .page-title, +.colors-dark.page:not(.twentyseventeen-front-page) .entry-title, +.colors-dark .page-links a .page-number, +.colors-dark .comment-metadata a.comment-edit-link, +.colors-dark .comment-reply-link .icon, +.colors-dark h2.widget-title, +.colors-dark mark, +.colors-dark .post-navigation a:focus .icon, +.colors-dark .post-navigation a:hover .icon, +.colors-dark.blog .entry-meta a.post-edit-link, +.colors-dark.archive .entry-meta a.post-edit-link, +.colors-dark.search .entry-meta a.post-edit-link, +.colors-custom .twentyseventeen-panel .recent-posts .entry-header .edit-link { + color: #ddd; +} + +.colors-dark h2, +.colors-dark blockquote, +.colors-dark input[type="text"], +.colors-dark input[type="email"], +.colors-dark input[type="url"], +.colors-dark input[type="password"], +.colors-dark input[type="search"], +.colors-dark input[type="number"], +.colors-dark input[type="tel"], +.colors-dark input[type="range"], +.colors-dark input[type="date"], +.colors-dark input[type="month"], +.colors-dark input[type="week"], +.colors-dark input[type="time"], +.colors-dark input[type="datetime"], +.colors-dark input[type="datetime-local"], +.colors-dark input[type="color"], +.colors-dark textarea, +.colors-dark .navigation-top .current-menu-item > a, +.colors-dark .navigation-top .current_page_item > a, +.colors-dark .entry-content blockquote.alignleft, +.colors-dark .entry-content blockquote.alignright, +.colors-dark .taxonomy-description, +.colors-dark .site-info a, +.colors-dark .wp-caption { + color: #ccc; +} + +.colors-dark abbr, +.colors-dark acronym { + border-bottom-color: #ccc; +} + +.colors-dark h5, +.main-navigation a:hover, +.colors-dark .entry-meta, +.colors-dark .entry-meta a, +.colors-dark .nav-subtitle, +.colors-dark .comment-metadata, +.colors-dark .comment-metadata a, +.colors-dark .no-comments, +.colors-dark .comment-awaiting-moderation, +.colors-dark .page-numbers.current, +.colors-dark .page-links .page-number, +.colors-dark .site-description { + color: #bbb; +} + +.colors-dark button:hover:not( .mejs-container > button ), +.colors-dark button:focus, +.colors-dark input[type="button"]:hover, +.colors-dark input[type="button"]:focus, +.colors-dark input[type="submit"]:hover, +.colors-dark input[type="submit"]:focus, +.colors-dark .prev.page-numbers:focus, +.colors-dark .prev.page-numbers:hover, +.colors-dark .next.page-numbers:focus, +.colors-dark .next.page-numbers:hover, +.colors-dark .entry-footer .edit-link a.post-edit-link:focus, +.colors-dark .entry-footer .edit-link a.post-edit-link:hover { + background: #bbb; +} + +.colors-dark .social-navigation a:hover, +.colors-dark .social-navigation a:focus { + background: #999; + color: #222; +} + +.colors-dark .entry-footer .cat-links .icon, +.colors-dark .entry-footer .tags-links .icon { + color: #666; +} + +.colors-dark button.secondary:hover, +.colors-dark button.secondary:focus, +.colors-dark input[type="reset"]:hover, +.colors-dark input[type="reset"]:focus, +.colors-dark input[type="button"].secondary:hover, +.colors-dark input[type="button"].secondary:focus, +.colors-dark input[type="reset"].secondary:hover, +.colors-dark input[type="reset"].secondary:focus, +.colors-dark input[type="submit"].secondary:hover, +.colors-dark input[type="submit"].secondary:focus, +.colors-dark .social-navigation a, +.colors-dark hr { + background: #555; +} + +.colors-dark input[type="text"], +.colors-dark input[type="email"], +.colors-dark input[type="url"], +.colors-dark input[type="password"], +.colors-dark input[type="search"], +.colors-dark input[type="number"], +.colors-dark input[type="tel"], +.colors-dark input[type="range"], +.colors-dark input[type="date"], +.colors-dark input[type="month"], +.colors-dark input[type="week"], +.colors-dark input[type="time"], +.colors-dark input[type="datetime"], +.colors-dark input[type="datetime-local"], +.colors-dark input[type="color"], +.colors-dark textarea, +.colors-dark select, +.colors-dark fieldset, +.colors-dark .widget .tagcloud a:hover, +.colors-dark .widget .tagcloud a:focus, +.colors-dark .widget.widget_tag_cloud a:hover, +.colors-dark .widget.widget_tag_cloud a:focus, +.colors-dark .wp_widget_tag_cloud a:hover, +.colors-dark .wp_widget_tag_cloud a:focus { + border-color: #555; +} + +.colors-dark button.secondary, +.colors-dark input[type="reset"], +.colors-dark input[type="button"].secondary, +.colors-dark input[type="reset"].secondary, +.colors-dark input[type="submit"].secondary, +.colors-dark .prev.page-numbers, +.colors-dark .next.page-numbers { + background-color: #444; +} + +.colors-dark .widget .tagcloud a, +.colors-dark .widget.widget_tag_cloud a, +.colors-dark .wp_widget_tag_cloud a { + border-color: #444; +} + +.colors-dark.twentyseventeen-front-page article:not(.has-post-thumbnail):not(:first-child), +.colors-dark .widget ul li { + border-top-color: #444; +} + +.colors-dark .widget ul li { + border-bottom-color: #444; +} + +.colors-dark pre, +.colors-dark mark, +.colors-dark ins, +.colors-dark input[type="text"], +.colors-dark input[type="email"], +.colors-dark input[type="url"], +.colors-dark input[type="password"], +.colors-dark input[type="search"], +.colors-dark input[type="number"], +.colors-dark input[type="tel"], +.colors-dark input[type="range"], +.colors-dark input[type="date"], +.colors-dark input[type="month"], +.colors-dark input[type="week"], +.colors-dark input[type="time"], +.colors-dark input[type="datetime"], +.colors-dark input[type="datetime-local"], +.colors-dark input[type="color"], +.colors-dark textarea, +.colors-dark select, +.colors-dark fieldset { + background: #333; +} + +.colors-dark tr, +.colors-dark thead th { + border-color: #333; +} + +.colors-dark .navigation-top, +.colors-dark .main-navigation > div > ul, +.colors-dark .pagination, +.colors-dark .comment-navigation, +.colors-dark .entry-footer, +.colors-dark .site-footer { + border-top-color: #333; +} + +.colors-dark .single-featured-image-header, +.colors-dark .navigation-top, +.colors-dark .main-navigation li, +.colors-dark .entry-footer, +.colors-dark #comments { + border-bottom-color: #333; +} + +.colors-dark .site-header, +.colors-dark .single-featured-image-header { + background-color: #262626; +} + +.colors-dark button, +.colors-dark input[type="button"], +.colors-dark input[type="submit"], +.colors-dark .prev.page-numbers:focus, +.colors-dark .prev.page-numbers:hover, +.colors-dark .next.page-numbers:focus, +.colors-dark .next.page-numbers:hover { + color: #222; +} + +body.colors-dark, +.colors-dark .site-content-contain, +.colors-dark .navigation-top, +.colors-dark .main-navigation ul { + background: #222; +} + +.colors-dark .entry-title a, +.colors-dark .entry-meta a, +.colors-dark.blog .entry-meta a.post-edit-link, +.colors-dark.archive .entry-meta a.post-edit-link, +.colors-dark.search .entry-meta a.post-edit-link, +.colors-dark .page-links a, +.colors-dark .page-links a .page-number, +.colors-dark .entry-footer a, +.colors-dark .entry-footer .cat-links a, +.colors-dark .entry-footer .tags-links a, +.colors-dark .edit-link a, +.colors-dark .post-navigation a, +.colors-dark .logged-in-as a, +.colors-dark .comment-navigation a, +.colors-dark .comment-metadata a, +.colors-dark .comment-metadata a.comment-edit-link, +.colors-dark .comment-reply-link, +.colors-dark a .nav-title, +.colors-dark .pagination a, +.colors-dark .comments-pagination a, +.colors-dark .widget .widget-title a, +.colors-dark .widget ul li a, +.colors-dark .site-footer .widget-area ul li a, +.colors-dark .site-info a { + -webkit-box-shadow: inset 0 -1px 0 rgba(34, 34, 34, 1); /* Equivalant to #222 */ + box-shadow: inset 0 -1px 0 rgba(34, 34, 34, 1); /* Equivalant to #222 */ +} + +/* Fixes linked images */ +.colors-dark .entry-content a img, +.colors-dark .comment-content a img, +.colors-dark .widget a img { + -webkit-box-shadow: 0 0 0 8px #222; + box-shadow: 0 0 0 8px #222; +} + +.colors-dark .entry-footer .edit-link a.post-edit-link { + color: #000; +} + +.colors-dark .menu-toggle, +.colors-dark .menu-toggle:hover, +.colors-dark .menu-toggle:focus, +.colors-dark .dropdown-toggle, +.colors-dark .dropdown-toggle:hover, +.colors-dark .dropdown-toggle:focus, +.colors-dark .menu-scroll-down, +.colors-dark .menu-scroll-down:hover, +.colors-dark .menu-scroll-down:focus { + background-color: transparent; +} + +.colors-dark .gallery-item a, +.colors-dark .gallery-item a:hover, +.colors-dark .gallery-item a:focus, +.colors-dark .widget .tagcloud a, +.colors-dark .widget .tagcloud a:focus, +.colors-dark .widget .tagcloud a:hover, +.colors-dark .widget.widget_tag_cloud a, +.colors-dark .widget.widget_tag_cloud a:focus, +.colors-dark .widget.widget_tag_cloud a:hover, +.colors-dark .wp_widget_tag_cloud a, +.colors-dark .wp_widget_tag_cloud a:focus, +.colors-dark .wp_widget_tag_cloud a:hover, +.colors-dark .entry-footer .edit-link a.post-edit-link:focus, +.colors-dark .entry-footer .edit-link a.post-edit-link:hover { + -webkit-box-shadow: none; + box-shadow: none; +} + +@media screen and (min-width: 48em) { + + .colors-dark .nav-links .nav-previous .nav-title .icon, + .colors-dark .nav-links .nav-next .nav-title .icon { + color: #eee; + } + + .colors-dark .main-navigation li li:hover, + .colors-dark .main-navigation li li.focus { + background: #999; + } + + .colors-dark .menu-scroll-down { + color: #999; + } + + .colors-dark .main-navigation ul ul { + border-color: #333; + background: #222; + } + + .colors-dark .main-navigation ul li.menu-item-has-children:before, + .colors-dark .main-navigation ul li.page_item_has_children:before { + border-bottom-color: #333; + } + + .main-navigation ul li.menu-item-has-children:after, + .main-navigation ul li.page_item_has_children:after { + border-bottom-color: #222; + } + + .colors-dark .main-navigation li li.focus > a, + .colors-dark .main-navigation li li:focus > a, + .colors-dark .main-navigation li li:hover > a, + .colors-dark .main-navigation li li a:hover, + .colors-dark .main-navigation li li a:focus, + .colors-dark .main-navigation li li.current_page_item a:hover, + .colors-dark .main-navigation li li.current-menu-item a:hover, + .colors-dark .main-navigation li li.current_page_item a:focus, + .colors-dark .main-navigation li li.current-menu-item a:focus { + color: #222; + } + +} diff --git a/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css b/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css new file mode 100644 index 000000000..6b6bd4722 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css @@ -0,0 +1,804 @@ +/* +Theme Name: Twenty Seventeen +Description: Used to style blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Settings +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets + +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-size: 15px; + font-size: 0.9375rem; +} + +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #333; +} + +.editor-post-title__block .editor-post-title__input { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; + font-size: 20px; + font-size: 1.25rem; + font-weight: 300; +} + +@media screen and (min-width: 30em) { + + .edit-post-visual-editor .editor-block-list__block { + font-size: 18px; + font-size: 1.125rem; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 26px; + font-size: 1.625rem; + } + + .edit-post-visual-editor .editor-block-list__block h1 { + font-size: 30px; + font-size: 1.875rem; + } + + .edit-post-visual-editor .editor-block-list__block h2 { + font-size: 26px; + font-size: 1.625rem; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 22px; + font-size: 1.375rem; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 18px; + font-size: 1.125rem; + } + + .edit-post-visual-editor .editor-block-list__block h5 { + font-size: 13px; + font-size: 0.8125rem; + } + + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 16px; + font-size: 1rem; + } +} + +@media screen and (min-width: 48em) { + + .edit-post-visual-editor .editor-block-list__block { + font-size: 16px; + font-size: 1rem; + } + + .editor-rich-text__tinymce.mce-content-body { + line-height: 1.5; + } +} + +/* Typography for Arabic Font */ + +html[lang="ar"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ary"] .edit-post-visual-editor .editor-block-list__block, +html[lang="azb"] .edit-post-visual-editor .editor-block-list__block, +html[lang="fa-IR"] .edit-post-visual-editor .editor-block-list__block, +html[lang="haz"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ps"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ur"] .edit-post-visual-editor .editor-block-list__block { + font-family: Tahoma, Arial, sans-serif; +} + +html[lang="ar"] .edit-post-visual-editor h1, +html[lang="ar"] .edit-post-visual-editor h2, +html[lang="ar"] .edit-post-visual-editor h3, +html[lang="ar"] .edit-post-visual-editor h4, +html[lang="ar"] .edit-post-visual-editor h5, +html[lang="ar"] .edit-post-visual-editor h6, +html[lang="ary"] .edit-post-visual-editor h1, +html[lang="ary"] .edit-post-visual-editor h2, +html[lang="ary"] .edit-post-visual-editor h3, +html[lang="ary"] .edit-post-visual-editor h4, +html[lang="ary"] .edit-post-visual-editor h5, +html[lang="ary"] .edit-post-visual-editor h6, +html[lang="azb"] .edit-post-visual-editor h1, +html[lang="azb"] .edit-post-visual-editor h2, +html[lang="azb"] .edit-post-visual-editor h3, +html[lang="azb"] .edit-post-visual-editor h4, +html[lang="azb"] .edit-post-visual-editor h5, +html[lang="azb"] .edit-post-visual-editor h6, +html[lang="fa-IR"] .edit-post-visual-editor h1, +html[lang="fa-IR"] .edit-post-visual-editor h2, +html[lang="fa-IR"] .edit-post-visual-editor h3, +html[lang="fa-IR"] .edit-post-visual-editor h4, +html[lang="fa-IR"] .edit-post-visual-editor h5, +html[lang="fa-IR"] .edit-post-visual-editor h6, +html[lang="haz"] .edit-post-visual-editor h1, +html[lang="haz"] .edit-post-visual-editor h2, +html[lang="haz"] .edit-post-visual-editor h3, +html[lang="haz"] .edit-post-visual-editor h4, +html[lang="haz"] .edit-post-visual-editor h5, +html[lang="haz"] .edit-post-visual-editor h6, +html[lang="ps"] .edit-post-visual-editor h1, +html[lang="ps"] .edit-post-visual-editor h2, +html[lang="ps"] .edit-post-visual-editor h3, +html[lang="ps"] .edit-post-visual-editor h4, +html[lang="ps"] .edit-post-visual-editor h5, +html[lang="ps"] .edit-post-visual-editor h6, +html[lang="ur"] .edit-post-visual-editor h1, +html[lang="ur"] .edit-post-visual-editor h2, +html[lang="ur"] .edit-post-visual-editor h3, +html[lang="ur"] .edit-post-visual-editor h4, +html[lang="ur"] .edit-post-visual-editor h5, +html[lang="ur"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Chinese Font */ + +html[lang^="zh-"] .edit-post-visual-editor .editor-block-list__block { + font-family: "PingFang TC", "Helvetica Neue", Helvetica, STHeitiTC-Light, Arial, sans-serif; +} + +html[lang="zh-CN"] .edit-post-visual-editor .editor-block-list__block { + font-family: "PingFang SC", "Helvetica Neue", Helvetica, STHeitiSC-Light, Arial, sans-serif; +} + +html[lang^="zh-"] .edit-post-visual-editor h1, +html[lang^="zh-"] .edit-post-visual-editor h2, +html[lang^="zh-"] .edit-post-visual-editor h3, +html[lang^="zh-"] .edit-post-visual-editor h4, +html[lang^="zh-"] .edit-post-visual-editor h5, +html[lang^="zh-"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Cyrillic Font */ + +html[lang="bg-BG"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ru-RU"] .edit-post-visual-editor .editor-block-list__block, +html[lang="uk"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +html[lang="bg-BG"] .edit-post-visual-editor h1, +html[lang="bg-BG"] .edit-post-visual-editor h2, +html[lang="bg-BG"] .edit-post-visual-editor h3, +html[lang="bg-BG"] .edit-post-visual-editor h4, +html[lang="bg-BG"] .edit-post-visual-editor h5, +html[lang="bg-BG"] .edit-post-visual-editor h6, +html[lang="ru-RU"] .edit-post-visual-editor h1, +html[lang="ru-RU"] .edit-post-visual-editor h2, +html[lang="ru-RU"] .edit-post-visual-editor h3, +html[lang="ru-RU"] .edit-post-visual-editor h4, +html[lang="ru-RU"] .edit-post-visual-editor h5, +html[lang="ru-RU"] .edit-post-visual-editor h6, +html[lang="uk"] .edit-post-visual-editor h1, +html[lang="uk"] .edit-post-visual-editor h2, +html[lang="uk"] .edit-post-visual-editor h3, +html[lang="uk"] .edit-post-visual-editor h4, +html[lang="uk"] .edit-post-visual-editor h5, +html[lang="uk"] .edit-post-visual-editor h6 { + font-weight: 700; + line-height: 1.2; +} + +/* Typography for Devanagari Font */ + +html[lang="bn-BD"] .edit-post-visual-editor .editor-block-list__block, +html[lang="hi-IN"] .edit-post-visual-editor .editor-block-list__block, +html[lang="mr-IN"] .edit-post-visual-editor .editor-block-list__block { + font-family: Arial, sans-serif; +} + +html[lang="bn-BD"] .edit-post-visual-editor h1, +html[lang="bn-BD"] .edit-post-visual-editor h2, +html[lang="bn-BD"] .edit-post-visual-editor h3, +html[lang="bn-BD"] .edit-post-visual-editor h4, +html[lang="bn-BD"] .edit-post-visual-editor h5, +html[lang="bn-BD"] .edit-post-visual-editor h6, +html[lang="hi-IN"] .edit-post-visual-editor h1, +html[lang="hi-IN"] .edit-post-visual-editor h2, +html[lang="hi-IN"] .edit-post-visual-editor h3, +html[lang="hi-IN"] .edit-post-visual-editor h4, +html[lang="hi-IN"] .edit-post-visual-editor h5, +html[lang="hi-IN"] .edit-post-visual-editor h6, +html[lang="mr-IN"] .edit-post-visual-editor h1, +html[lang="mr-IN"] .edit-post-visual-editor h2, +html[lang="mr-IN"] .edit-post-visual-editor h3, +html[lang="mr-IN"] .edit-post-visual-editor h4, +html[lang="mr-IN"] .edit-post-visual-editor h5, +html[lang="mr-IN"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Greek Font */ + +html[lang="el"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +html[lang="el"] .edit-post-visual-editor h1, +html[lang="el"] .edit-post-visual-editor h2, +html[lang="el"] .edit-post-visual-editor h3, +html[lang="el"] .edit-post-visual-editor h4, +html[lang="el"] .edit-post-visual-editor h5, +html[lang="el"] .edit-post-visual-editor h6 { + font-weight: 700; + line-height: 1.3; +} + +/* Typography for Gujarati Font */ + +html[lang="gu-IN"] .edit-post-visual-editor .editor-block-list__block { + font-family: Arial, sans-serif; +} + +html[lang="gu-IN"] .edit-post-visual-editor h1, +html[lang="gu-IN"] .edit-post-visual-editor h2, +html[lang="gu-IN"] .edit-post-visual-editor h3, +html[lang="gu-IN"] .edit-post-visual-editor h4, +html[lang="gu-IN"] .edit-post-visual-editor h5, +html[lang="gu-IN"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Hebrew Font */ + +html[lang="he-IL"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Arial Hebrew", Arial, sans-serif; +} + +html[lang="he-IL"] .edit-post-visual-editor h1, +html[lang="he-IL"] .edit-post-visual-editor h2, +html[lang="he-IL"] .edit-post-visual-editor h3, +html[lang="he-IL"] .edit-post-visual-editor h4, +html[lang="he-IL"] .edit-post-visual-editor h5, +html[lang="he-IL"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Japanese Font */ + +html[lang="ja"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Hiragino Kaku Gothic Pro", Meiryo, sans-serif; +} + +html[lang="ja"] .edit-post-visual-editor h1, +html[lang="ja"] .edit-post-visual-editor h2, +html[lang="ja"] .edit-post-visual-editor h3, +html[lang="ja"] .edit-post-visual-editor h4, +html[lang="ja"] .edit-post-visual-editor h5, +html[lang="ja"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Korean font */ + +html[lang="ko-KR"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; +} + +html[lang="ko-KR"] .edit-post-visual-editor h1, +html[lang="ko-KR"] .edit-post-visual-editor h2, +html[lang="ko-KR"] .edit-post-visual-editor h3, +html[lang="ko-KR"] .edit-post-visual-editor h4, +html[lang="ko-KR"] .edit-post-visual-editor h5, +html[lang="ko-KR"] .edit-post-visual-editor h6 { + font-weight: 600; +} + +/* Typography for Thai Font */ + +html[lang="th"] .edit-post-visual-editor .editor-block-list__block { + line-height: 1.8; + font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +html[lang="th"] .edit-post-visual-editor h1, +html[lang="th"] .edit-post-visual-editor h2, +html[lang="th"] .edit-post-visual-editor h3, +html[lang="th"] .edit-post-visual-editor h4, +html[lang="th"] .edit-post-visual-editor h5, +html[lang="th"] .edit-post-visual-editor h6 { + line-height: 1.65; + font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +/* Remove letter-spacing for all non-latin alphabets */ + +html[lang="ar"] .edit-post-visual-editor *, +html[lang="ary"] .edit-post-visual-editor *, +html[lang="azb"] .edit-post-visual-editor *, +html[lang="haz"] .edit-post-visual-editor *, +html[lang="ps"] .edit-post-visual-editor *, +html[lang^="zh-"] .edit-post-visual-editor *, +html[lang="bg-BG"] .edit-post-visual-editor *, +html[lang="ru-RU"] .edit-post-visual-editor *, +html[lang="uk"] .edit-post-visual-editor *, +html[lang="bn-BD"] .edit-post-visual-editor *, +html[lang="hi-IN"] .edit-post-visual-editor *, +html[lang="mr-IN"] .edit-post-visual-editor *, +html[lang="el"] .edit-post-visual-editor *, +html[lang="gu-IN"] .edit-post-visual-editor *, +html[lang="he-IL"] .edit-post-visual-editor *, +html[lang="ja"] .edit-post-visual-editor *, +html[lang="ko-KR"] .edit-post-visual-editor *, +html[lang="th"] .edit-post-visual-editor * { + letter-spacing: 0 !important; +} + +/*-------------------------------------------------------------- +2.0 General Block Settings +--------------------------------------------------------------*/ + +/* Main column width */ + +.editor-styles-wrapper { + max-width: 100% !important; /* Override where editor-style.css is affecting this. */ +} + +.wp-block { + max-width: 674px; /* Based on one-column post width; 644px + 30px to account for padding. */ +} + +/* Alignments */ + +.edit-post-visual-editor .alignleft { + margin-right: 1.5em; +} + +.edit-post-visual-editor .alignright { + margin-left: 1.5em; +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #222; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol, +.block-library-list .editor-rich-text__tinymce { + margin: 0 0 1.5em 1.5em; + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: disc; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor li > ul:not(.wp-block-gallery), +.editor-block-list__block li > ul:not(.wp-block-gallery), +.block-library-list li > ul:not(.wp-block-gallery), +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; + margin-left: 1.5em; +} + +.edit-post-visual-editor li, +.editor-block-list__block li, +.block-library-list li { + margin: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol, +.rtl .block-library-list .editor-rich-text__tinymce, +.rtl .edit-post-visual-editor li > ul:not(.wp-block-gallery), +.rtl .editor-block-list__block li > ul:not(.wp-block-gallery), +.rtl .block-library-list li > ul:not(.wp-block-gallery), +.rtl .edit-post-visual-editor li > ol, +.rtl .editor-block-list__block li > ol, +.rtl .block-library-list li > ol { + margin-left: 1.5em; + margin-right: 1.5em; +} + +/* Quote styles */ + +.editor-block-list__block blockquote p { + font-size: 18px; + font-size: 1.125rem; +} + +.editor-block-list__block blockquote.alignright p, +.editor-block-list__block blockquote.alignleft p { + font-size: 13px; + font-size: 0.8125rem; +} + +.editor-block-list__block blockquote cite { + display: block; + font-style: normal; + font-weight: 600; + margin-top: 0.5em; +} + +/* Caption styles*/ + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + font-style: italic; + margin-bottom: 1.5em; + text-align: left; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { + text-align: right; +} + +/* Code styles */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/* Table styles */ + +.rtl .editor-block-list__block th { + text-align: right; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +.wp-block-paragraph.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.075em; +} + +.wp-block-paragraph.has-background { + padding: 20px 30px; +} + +/* Gallery */ + +.wp-block-gallery figcaption { + font-style: italic; +} + +/* Quote */ + +.wp-block-quote { + color: #666; + font-size: 18px; + font-size: 1.125rem; + font-style: italic; + line-height: 1.7; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 0; +} + +.editor-block-list__block .wp-block-quote .wp-block-quote__citation { + color: inherit; + display: block; + font-size: inherit; + font-style: normal; + font-weight: 600; + margin-top: 0.5em; +} + +.wp-block-quote.alignleft, +.wp-block-quote.alignright { + color: #666; + width: 48%; +} + +.editor-block-list__block .wp-block-quote.alignleft p, +.editor-block-list__block .wp-block-quote.alignright p, +.editor-block-list__block .wp-block-quote.alignleft .wp-block-quote__citation, +.editor-block-list__block .wp-block-quote.alignright .wp-block-quote__citation { + font-size: 13px; + font-size: 0.8125rem; +} + +.editor-block-list__block .wp-block-quote.alignleft p:last-of-type, +.editor-block-list__block .wp-block-quote.alignright p:last-of-type { + margin-bottom: 0; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + text-align: right; +} + +.rtl .wp-block-quote.is-large .wp-block-quote__citation, +.rtl .wp-block-quote.is-style-large .wp-block-quote__citation { + text-align: left; +} + +@media screen and (min-width: 30em) { + .editor-block-list__block .wp-block-quote.alignleft p, + .editor-block-list__block .wp-block-quote.alignright p, + .editor-block-list__block .wp-block-quote.alignleft .wp-block-quote__citation, + .editor-block-list__block .wp-block-quote.alignright .wp-block-quote__citation, + .editor-block-list__block .wp-block-quote footer { + font-size: 14px; + font-size: 0.875rem; + } +} + +@media screen and (min-width: 48em) { + .editor-block-list__block .wp-block-quote.alignleft p, + .editor-block-list__block .wp-block-quote.alignright p, + .editor-block-list__block .wp-block-quote.alignleft .wp-block-quote__citation, + .editor-block-list__block .wp-block-quote.alignright .wp-block-quote__citation { + font-size: 13px; + font-size: 0.8125rem; + } + + .editor-block-list__block .wp-block-quote.alignleft { + margin-left: -17.5%; + width: 48%; + } + + .editor-block-list__block .wp-block-quote.alignright { + margin-right: -17.5%; + width: 48%; + } +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 1px 0 rgba(0, 0, 0, 1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 1px 0 rgba(0, 0, 0, 1); +} + +.wp-block-file .wp-block-file__button { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Classic */ + +.wp-block-freeform.block-library-rich-text__tinymce li, +.wp-block-freeform.block-library-rich-text__tinymce p { + line-height: 1.5; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; +} + +.wp-block-pullquote.alignleft blockquote > .editor-rich-text p, +.wp-block-pullquote.alignright blockquote > .editor-rich-text p { + font-size: 20px; +} + + +.wp-block-pullquote .wp-block-pullquote__citation { + font-size: inherit; + font-weight: 600; + text-transform: none; +} + +/* Table */ + +table.wp-block-table { + border-collapse: collapse; + margin: 0 0 1.5em; + width: 100%; +} + +table.wp-block-table thead th { + border: 0; + border-bottom: 2px solid #bbb; + padding-bottom: 0.5em; +} + +table.wp-block-table th { + padding: 0.4em; + text-align: left; +} + +table.wp-block-table tr { + border-bottom: 1px solid #eee; +} + +table.wp-block-table th, +table.wp-block-table td { + border: 0; + padding: 0.4em; +} + +table.wp-block-table th:first-child, +table.wp-block-table td:first-child { + padding-left: 0; +} + +table.wp-block-table th:last-child, +table.wp-block-table td:last-child { + padding-right: 0; +} + +.wp-block-table__cell-content { + padding: 0; +} + +.rtl table.wp-block-table th, +.rtl table.wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Separator */ + +.edit-post-visual-editor .wp-block-separator { + border: 0; +} + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + -webkit-box-shadow: none; + box-shadow: none; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + line-height: 1.66; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +.wp-block-button__link { + background-color: #222; + color: #fff; +} + +.is-style-outline .wp-block-button__link { + color: #222; +} + +/* Media & Text */ + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +[data-align="center"] .wp-block-archives ul, +[data-align="center"] .wp-block-categories ul, +[data-align="center"] .wp-block-latest-posts ul { + list-style-position: inside; +} + +/* Latest Comments */ + +.editor-block-list__block ol.wp-block-latest-comments > li:before { + content: ''; +} + +.wp-block-latest-comments article { + margin-bottom: 4em; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments__comment-meta { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0.4em; +} + +.editor-block-list__block .wp-block-latest-comments__comment-meta a { + -webkit-box-shadow: none; + box-shadow: none; + font-weight: 700; +} + +.wp-block-latest-comments__comment-date { + color: #767676; + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + margin-top: 0.4em; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-latest-comments__comment-excerpt p { + font-size: 14px; + font-size: 0.875rem; +} + +/* Latest Posts */ + +.edit-post-visual-editor .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} diff --git a/wp-content/themes/twentyseventeen/assets/css/editor-style.css b/wp-content/themes/twentyseventeen/assets/css/editor-style.css new file mode 100644 index 000000000..82dc7067d --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/css/editor-style.css @@ -0,0 +1,582 @@ +/* +Theme Name: Twenty Seventeen +Description: Used to style the TinyMCE editor. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Body + * 2.0 - Typography + * 3.0 - Elements + * 4.0 - Alignment + * 5.0 - Caption + * 6.0 - Galleries + * 7.0 - Media Elements + * 8.0 - RTL + */ + +/** + * 1.0 - Body + */ + +body { + background-color: #fff; + color: #333; + margin: 20px 40px; + max-width: 580px; +} + +/** + * 2.0 - Typography + */ + +body, +button, +input, +select, +textarea { + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; + font-size: 16px; + font-size: 1rem; + font-weight: 400; + line-height: 1.66; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + line-height: 1.4; + margin: 0 0 0.75em; + padding: 1.5em 0 0; +} + +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + padding-top: 0; +} + +h1 { + font-size: 24px; + font-size: 1.5rem; + font-weight: 300; +} + +h2 { + color: #666; + font-size: 20px; + font-size: 1.25rem; + font-weight: 300; +} + +h3 { + color: #333; + font-size: 18px; + font-size: 1.125rem; + font-weight: 300; +} + +h4 { + color: #333; + font-size: 16px; + font-size: 1rem; + font-weight: 800; +} + +h5 { + color: #767676; + font-size: 13px; + font-size: 0.8125rem; + font-weight: 800; + letter-spacing: 0.15em; + text-transform: uppercase; +} + +h6 { + color: #333; + font-size: 15px; + font-size: 0.9375rem; + font-weight: 800; +} + +p { + margin: 0 0 1.5em; + padding: 0; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + color: #666; + font-size: 18px; + font-size: 1.125rem; + font-style: italic; + line-height: 1.7; + margin: 0; + overflow: hidden; + padding: 0; +} + +blockquote.alignleft, +blockquote.alignright { + font-size: 14px; + font-size: 0.875rem; + width: 34%; +} + +address { + margin: 0 0 1.5em; +} + +pre { + background: #eee; + font-family: "Courier 10 Pitch", Courier, monospace; + font-size: 15px; + font-size: 0.9375rem; + line-height: 1.6; + margin-bottom: 1.6em; + max-width: 100%; + overflow: auto; + padding: 1.6em; +} + +code, +kbd, +tt, +var { + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; + font-size: 15px; + font-size: 0.9375rem; +} + +abbr, +acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, +ins { + background: #eee; + text-decoration: none; +} + +big { + font-size: 125%; +} + +blockquote, +q { + quotes: "" ""; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; +} + +/* Typography for Thai Font */ + +html[lang="th"] h1, +html[lang="th"] h2, +html[lang="th"] h3, +html[lang="th"] h4, +html[lang="th"] h5, +html[lang="th"] h6 { + letter-spacing: 0; + line-height: 1.65; +} + +html[lang="th"] body, +html[lang="th"] button, +html[lang="th"] input, +html[lang="th"] select, +html[lang="th"] textarea { + line-height: 1.8; +} + +/** + * 3.0 - Elements + */ + +hr { + background-color: #bbb; + border: 0; + height: 1px; + margin-bottom: 1.5em; +} + +ul, +ol { + margin: 0 0 1.5em; + padding: 0; +} + +ul { + list-style: disc; +} + +ol > li { + position: relative; +} + +li > ul, +li > ol { + margin-bottom: 0; + margin-left: 1.5em; +} + +dt { + font-weight: 700; +} + +dd { + margin: 0 1.5em 1.5em; +} + +table { + border-collapse: collapse; + margin: 0 0 1.5em; + width: 100%; +} + +thead th { + border-bottom: 2px solid #bbb; + padding-bottom: 0.5em; +} + +th { + padding: 0.4em; + text-align: left; +} + +tr { + border-bottom: 1px solid #eee; +} + +td { + padding: 0.4em; +} + +th:first-child, +td:first-child { + padding-left: 0; +} + +th:last-child, +td:last-child { + padding-right: 0; +} + +a { + -webkit-box-shadow: inset 0 -1px 0 rgba(15, 15, 15, 1); + box-shadow: inset 0 -1px 0 rgba(15, 15, 15, 1); + color: #222; + text-decoration: none; + -webkit-transition: color 80ms ease-in, -webkit-box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, -webkit-box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, box-shadow 130ms ease-in-out, -webkit-box-shadow 130ms ease-in-out; +} + +a:focus { + outline: thin dotted; +} + +a:hover, +a:focus { + color: #000; + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); +} + +/* Fixes linked images */ + +a img { + background: #fff; + -webkit-box-shadow: 0 0 0 6px #fff; + box-shadow: 0 0 0 6px #fff; +} + +/** + * 4.0 - Alignment + */ + +img { + height: auto; /* Make sure images are scaled correctly. */ + max-width: 100%; /* Adhere to container width. */ +} + +embed, +iframe, +object { + margin-bottom: 1.5em; + max-width: 100%; +} + +/** + * 5.0 - Caption + */ + +.wp-caption { + color: #666; + font-size: 13px; + font-size: 0.8125rem; + font-style: italic; + margin-bottom: 1.5em; + max-width: 100%; +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption .wp-caption-text { + margin: 0.8075em 0; +} + +/** + * 6.0 - Galleries + */ + +.gallery { + margin-bottom: 1.5em; +} + +.gallery-item { + display: inline-block; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-item a, +.gallery-item a:hover, +.gallery-item a:focus { + -webkit-box-shadow: none; + box-shadow: none; + background: none; + display: inline-block; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; +} + +.gallery-columns-3 .gallery-item { + max-width: 33.33%; +} + +.gallery-columns-4 .gallery-item { + max-width: 25%; +} + +.gallery-columns-5 .gallery-item { + max-width: 20%; +} + +.gallery-columns-6 .gallery-item { + max-width: 16.66%; +} + +.gallery-columns-7 .gallery-item { + max-width: 14.28%; +} + +.gallery-columns-8 .gallery-item { + max-width: 12.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 11.11%; +} + +.gallery-caption { + display: block; +} + +/** + * 7.0 - Media Elements + */ + +.mejs-container { + margin-bottom: 1.5em; +} + +/* Audio Player */ + +.mejs-controls a.mejs-horizontal-volume-slider, +.mejs-controls a.mejs-horizontal-volume-slider:focus, +.mejs-controls a.mejs-horizontal-volume-slider:hover { + background: transparent; + border: 0; +} + +/* Playlist Color Overrides: Light */ + +.wp-playlist-light { + border-color: #eee; + color: #222; +} + +.wp-playlist-light .wp-playlist-current-item .wp-playlist-item-album { + color: #333; +} + +.wp-playlist-light .wp-playlist-current-item .wp-playlist-item-artist { + color: #767676; +} + +.wp-playlist-light .wp-playlist-item { + border-bottom: 1px dotted #eee; + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; +} + +.wp-playlist-light .wp-playlist-item:hover, +.wp-playlist-light .wp-playlist-item:focus { + border-bottom-color: rgba(0, 0, 0, 0); + background-color: #767676; + color: #fff; +} + +.wp-playlist-light a.wp-playlist-caption:hover, +.wp-playlist-light .wp-playlist-item:hover a, +.wp-playlist-light .wp-playlist-item:focus a { + color: #fff; +} + +/* Playlist Color Overrides: Dark */ + +.wp-playlist-dark { + background: #222; + border-color: #333; +} + +.wp-playlist-dark .mejs-container .mejs-controls { + background-color: #333; +} + +.wp-playlist-dark .wp-playlist-caption { + color: #fff; +} + +.wp-playlist-dark .wp-playlist-current-item .wp-playlist-item-album { + color: #eee; +} + +.wp-playlist-dark .wp-playlist-current-item .wp-playlist-item-artist { + color: #aaa; +} + +.wp-playlist-dark .wp-playlist-playing { + background-color: #333; +} + +.wp-playlist-dark .wp-playlist-item { + border-bottom: 1px dotted #555; + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; +} + +.wp-playlist-dark .wp-playlist-item:hover, +.wp-playlist-dark .wp-playlist-item:focus { + border-bottom-color: rgba(0, 0, 0, 0); + background-color: #aaa; + color: #222; +} + +.wp-playlist-dark a.wp-playlist-caption:hover, +.wp-playlist-dark .wp-playlist-item:hover a, +.wp-playlist-dark .wp-playlist-item:focus a { + color: #222; +} + +/* Playlist Style Overrides */ + +.wp-playlist { + padding: 0.625em 0.625em 0.3125em; +} + +.wp-playlist-current-item .wp-playlist-item-title { + font-weight: 700; +} + +.wp-playlist-current-item .wp-playlist-item-album { + font-style: normal; +} + +.wp-playlist-current-item .wp-playlist-item-artist { + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + text-transform: uppercase; +} + +.wp-playlist-item { + padding: 0 0.3125em; + cursor: pointer; +} + +.wp-playlist-item:last-of-type { + border-bottom: none; +} + +.wp-playlist-item a { + padding: 0.3125em 0; + border-bottom: none; +} + +.wp-playlist-item a, +.wp-playlist-item a:focus, +.wp-playlist-item a:hover { + -webkit-box-shadow: none; + box-shadow: none; + background: transparent; +} + +.wp-playlist-item-length { + top: 5px; +} + +/** + * 8.0 - RTL + */ + +.rtl th { + text-align: right; +} + +.rtl ol > li:before { + left: auto; + right: -1.5em; +} + +.rtl li > ul, +.rtl li > ol { + margin-left: 0; + margin-right: 1.5em; +} + +.rtl .mejs-offscreen { + right: -10000px; +} diff --git a/wp-content/themes/twentyseventeen/assets/css/ie8.css b/wp-content/themes/twentyseventeen/assets/css/ie8.css new file mode 100644 index 000000000..bf45c26cb --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/css/ie8.css @@ -0,0 +1,225 @@ +/* +Theme Name: Twenty Seventeen +Description: IE8 specific style. +*/ + +body { + font-size: 16px; +} + +h1 { + font-size: 30px; + font-size: 1.875rem; +} + +h2, +.page .panel-content .recent-posts .entry-title { + font-size: 26px; + font-size: 1.625rem; +} + +h3 { + font-size: 22px; + font-size: 1.375rem; +} + +h4 { + font-size: 18px; + font-size: 1.125rem; +} + +h5 { + font-size: 13px; + font-size: 0.8125rem; +} + +h6 { + font-size: 16px; + font-size: 1rem; +} + +img { + width: inherit; /* Make images fill their parent's space. */ +} + +/* Fixes linked images */ +.entry-content a img, +.widget a img { + filter: progid:DXImageTransform.Microsoft.DropShadow(OffX=0, OffY=5, Color=#ffffff); +} + +/* Layout */ + +.site-content { + padding: 6.5em 0 0; +} + +/* Site Branding */ + +.custom-header { + overflow: hidden; +} + +.has-header-image.twentyseventeen-front-page .custom-header, +.has-header-image.home.blog .custom-header { + display: block; +} + +.custom-header-media { + background-position: bottom center; +} + +.site-branding { + padding: 45px 0; +} + +.has-header-image.twentyseventeen-front-page .site-branding, +.has-header-image.home.blog .site-branding { + bottom: 0; + display: block; + left: 0; + height: auto; + padding-top: 0; + position: absolute; + width: 100%; +} + +.has-header-image .custom-header-media img { + left: 0; + top: 0; +} + +.site-title { + font-size: 36px; + font-weight: 700; +} + +.site-description { + font-size: 16px; +} + +/* Main Navigation */ + +.navigation-top { + background: #fff; + position: relative; + z-index: 10; +} + +.menu-toggle { + width: 150px; +} + +.main-navigation ul#top-menu { + margin-bottom: -1px; + padding: 0; +} + +.no-svg .dropdown-toggle { + padding: 0.25em 0 0; +} + +.no-svg .dropdown-toggle.toggled-on { + padding: 0.75em 0 0; +} + +.dropdown-toggle .svg-fallback.icon-angle-down { + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=-1, M12=1.2246467991473532e-16, M21=-1.2246467991473532e-16, M22=-1, SizingMethod='auto expand')"; +} + +.dropdown-toggle.toggled-on .svg-fallback.icon-angle-down { + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, SizingMethod='auto expand')"; +} + +/* Front Page */ + +.twentyseventeen-front-page.has-header-image .custom-header, +.blog.home.has-header-image .custom-header, +.panel-image { + height: 800px; + max-height: 800px; + padding-top: 0; +} + +.twentyseventeen-front-page .custom-header-media, +.blog.home .custom-header-media { + background-position: center center; +} + +.twentyseventeen-front-page.has-header-image .site-branding, +.home.blog.has-header-image .site-branding { + bottom: 20px; + position: absolute; + width: 100%; +} + +.page .panel-content .entry-title, +.page-title, +.page .entry-title { + font-size: 14px; + font-size: 0.875rem; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +/* Posts */ + +.blog .site-main > article, +.archive .site-main > article, +.search .site-main > article { + padding-bottom: 4em; +} + +time.updated { + display: none; +} + +time.published { + display: inline-block; +} + +.blog .entry-title { + padding-top: 0; +} + +.single-post .entry-title, +.page .entry-title, +.entry-meta + .entry-title { + font-size: 26px; + font-weight: 400; + letter-spacing: normal; + padding-top: 0; + text-transform: none; +} + +.entry-footer .cat-links, +.entry-footer .tags-links { + padding-left: 0; +} + +.comment-author .avatar { + z-index: -1; +} + +ol.children .children { + padding-left: 2em; +} + +/* RTL Styles */ + +.rtl .has-header-image.twentyseventeen-front-page .site-branding, +.rtl .has-header-image.home.blog .site-branding { + left: auto; + right: 0; +} + +.rtl .entry-footer .cat-links, +.rtl .entry-footer .tags-links { + padding-right: 0; +} + +.rtl ol.children .children { + padding-left: 0; + padding-right: 2em; +} diff --git a/wp-content/themes/twentyseventeen/assets/css/ie9.css b/wp-content/themes/twentyseventeen/assets/css/ie9.css new file mode 100644 index 000000000..9f8f7664d --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/css/ie9.css @@ -0,0 +1,43 @@ +/* +Theme Name: Twenty Seventeen +Description: IE9 specific styles. +*/ + +.has-header-image.twentyseventeen-front-page .custom-header, +.has-header-video.twentyseventeen-front-page .custom-header, +.has-header-image.home.blog .custom-header, +.has-header-video.home.blog .custom-header { + height: 300px; +} + +.has-header-image .custom-header-media img, +.has-header-video .custom-header-media video, +.has-header-video .custom-header-media iframe { + min-width: 100%; +} + +@media screen and (min-width: 30em) { + + .has-header-image.twentyseventeen-front-page .custom-header, + .has-header-video.twentyseventeen-front-page .custom-header, + .has-header-image.home.blog .custom-header, + .has-header-video.home.blog .custom-header, + .twentyseventeen-front-page.has-header-image .custom-header-media, + .home.blog.has-header-image .custom-header-media, + .panel-image { + height: 700px; + } +} + +@media screen and (min-width: 48em) { + + .has-header-image.twentyseventeen-front-page .custom-header, + .has-header-video.twentyseventeen-front-page .custom-header, + .has-header-image.home.blog .custom-header, + .has-header-video.home.blog .custom-header, + .twentyseventeen-front-page.has-header-image .custom-header-media, + .home.blog.has-header-image .custom-header-media, + .panel-image { + height: 1000px; + } +} diff --git a/wp-content/themes/twentyseventeen/assets/images/coffee.jpg b/wp-content/themes/twentyseventeen/assets/images/coffee.jpg new file mode 100644 index 000000000..13847cde7 Binary files /dev/null and b/wp-content/themes/twentyseventeen/assets/images/coffee.jpg differ diff --git a/wp-content/themes/twentyseventeen/assets/images/espresso.jpg b/wp-content/themes/twentyseventeen/assets/images/espresso.jpg new file mode 100644 index 000000000..7514c96bd Binary files /dev/null and b/wp-content/themes/twentyseventeen/assets/images/espresso.jpg differ diff --git a/wp-content/themes/twentyseventeen/assets/images/header.jpg b/wp-content/themes/twentyseventeen/assets/images/header.jpg new file mode 100644 index 000000000..a3fd3e712 Binary files /dev/null and b/wp-content/themes/twentyseventeen/assets/images/header.jpg differ diff --git a/wp-content/themes/twentyseventeen/assets/images/sandwich.jpg b/wp-content/themes/twentyseventeen/assets/images/sandwich.jpg new file mode 100644 index 000000000..6baddbf05 Binary files /dev/null and b/wp-content/themes/twentyseventeen/assets/images/sandwich.jpg differ diff --git a/wp-content/themes/twentyseventeen/assets/images/svg-icons.svg b/wp-content/themes/twentyseventeen/assets/images/svg-icons.svg new file mode 100644 index 000000000..d5f9adee9 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/images/svg-icons.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/twentyseventeen/assets/js/customize-controls.js b/wp-content/themes/twentyseventeen/assets/js/customize-controls.js new file mode 100644 index 000000000..e6f6037a4 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/js/customize-controls.js @@ -0,0 +1,36 @@ +/** + * Scripts within the customizer controls window. + * + * Contextually shows the color hue control and informs the preview + * when users open or close the front page sections section. + */ + +(function() { + wp.customize.bind( 'ready', function() { + + // Only show the color hue control when there's a custom color scheme. + wp.customize( 'colorscheme', function( setting ) { + wp.customize.control( 'colorscheme_hue', function( control ) { + var visibility = function() { + if ( 'custom' === setting.get() ) { + control.container.slideDown( 180 ); + } else { + control.container.slideUp( 180 ); + } + }; + + visibility(); + setting.bind( visibility ); + }); + }); + + // Detect when the front page sections section is expanded (or closed) so we can adjust the preview accordingly. + wp.customize.section( 'theme_options', function( section ) { + section.expanded.bind( function( isExpanding ) { + + // Value of isExpanding will = true if you're entering the section, false if you're leaving it. + wp.customize.previewer.send( 'section-highlight', { expanded: isExpanding }); + } ); + } ); + }); +})( jQuery ); diff --git a/wp-content/themes/twentyseventeen/assets/js/customize-preview.js b/wp-content/themes/twentyseventeen/assets/js/customize-preview.js new file mode 100644 index 000000000..dba7b79b9 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/js/customize-preview.js @@ -0,0 +1,150 @@ +/** + * File customize-preview.js. + * + * Instantly live-update customizer settings in the preview for improved user experience. + */ + +(function( $ ) { + + // Collect information from customize-controls.js about which panels are opening. + wp.customize.bind( 'preview-ready', function() { + + // Initially hide the theme option placeholders on load + $( '.panel-placeholder' ).hide(); + + wp.customize.preview.bind( 'section-highlight', function( data ) { + + // Only on the front page. + if ( ! $( 'body' ).hasClass( 'twentyseventeen-front-page' ) ) { + return; + } + + // When the section is expanded, show and scroll to the content placeholders, exposing the edit links. + if ( true === data.expanded ) { + $( 'body' ).addClass( 'highlight-front-sections' ); + $( '.panel-placeholder' ).slideDown( 200, function() { + $.scrollTo( $( '#panel1' ), { + duration: 600, + offset: { 'top': -70 } // Account for sticky menu. + }); + }); + + // If we've left the panel, hide the placeholders and scroll back to the top. + } else { + $( 'body' ).removeClass( 'highlight-front-sections' ); + // Don't change scroll when leaving - it's likely to have unintended consequences. + $( '.panel-placeholder' ).slideUp( 200 ); + } + }); + }); + + // Site title and description. + wp.customize( 'blogname', function( value ) { + value.bind( function( to ) { + $( '.site-title a' ).text( to ); + }); + }); + wp.customize( 'blogdescription', function( value ) { + value.bind( function( to ) { + $( '.site-description' ).text( to ); + }); + }); + + // Header text color. + wp.customize( 'header_textcolor', function( value ) { + value.bind( function( to ) { + if ( 'blank' === to ) { + $( '.site-title, .site-description' ).css({ + clip: 'rect(1px, 1px, 1px, 1px)', + position: 'absolute' + }); + // Add class for different logo styles if title and description are hidden. + $( 'body' ).addClass( 'title-tagline-hidden' ); + } else { + + // Check if the text color has been removed and use default colors in theme stylesheet. + if ( ! to.length ) { + $( '#twentyseventeen-custom-header-styles' ).remove(); + } + $( '.site-title, .site-description' ).css({ + clip: 'auto', + position: 'relative' + }); + $( '.site-branding, .site-branding a, .site-description, .site-description a' ).css({ + color: to + }); + // Add class for different logo styles if title and description are visible. + $( 'body' ).removeClass( 'title-tagline-hidden' ); + } + }); + }); + + // Color scheme. + wp.customize( 'colorscheme', function( value ) { + value.bind( function( to ) { + + // Update color body class. + $( 'body' ) + .removeClass( 'colors-light colors-dark colors-custom' ) + .addClass( 'colors-' + to ); + }); + }); + + // Custom color hue. + wp.customize( 'colorscheme_hue', function( value ) { + value.bind( function( to ) { + + // Update custom color CSS. + var style = $( '#custom-theme-colors' ), + hue = style.data( 'hue' ), + css = style.html(); + + // Equivalent to css.replaceAll, with hue followed by comma to prevent values with units from being changed. + css = css.split( hue + ',' ).join( to + ',' ); + style.html( css ).data( 'hue', to ); + }); + }); + + // Page layouts. + wp.customize( 'page_layout', function( value ) { + value.bind( function( to ) { + if ( 'one-column' === to ) { + $( 'body' ).addClass( 'page-one-column' ).removeClass( 'page-two-column' ); + } else { + $( 'body' ).removeClass( 'page-one-column' ).addClass( 'page-two-column' ); + } + } ); + } ); + + // Whether a header image is available. + function hasHeaderImage() { + var image = wp.customize( 'header_image' )(); + return '' !== image && 'remove-header' !== image; + } + + // Whether a header video is available. + function hasHeaderVideo() { + var externalVideo = wp.customize( 'external_header_video' )(), + video = wp.customize( 'header_video' )(); + + return '' !== externalVideo || ( 0 !== video && '' !== video ); + } + + // Toggle a body class if a custom header exists. + $.each( [ 'external_header_video', 'header_image', 'header_video' ], function( index, settingId ) { + wp.customize( settingId, function( setting ) { + setting.bind(function() { + if ( hasHeaderImage() ) { + $( document.body ).addClass( 'has-header-image' ); + } else { + $( document.body ).removeClass( 'has-header-image' ); + } + + if ( ! hasHeaderVideo() ) { + $( document.body ).removeClass( 'has-header-video' ); + } + } ); + } ); + } ); + +} )( jQuery ); diff --git a/wp-content/themes/twentyseventeen/assets/js/global.js b/wp-content/themes/twentyseventeen/assets/js/global.js new file mode 100644 index 000000000..b6322de44 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/js/global.js @@ -0,0 +1,250 @@ +/* global twentyseventeenScreenReaderText */ +(function( $ ) { + + // Variables and DOM Caching. + var $body = $( 'body' ), + $customHeader = $body.find( '.custom-header' ), + $branding = $customHeader.find( '.site-branding' ), + $navigation = $body.find( '.navigation-top' ), + $navWrap = $navigation.find( '.wrap' ), + $navMenuItem = $navigation.find( '.menu-item' ), + $menuToggle = $navigation.find( '.menu-toggle' ), + $menuScrollDown = $body.find( '.menu-scroll-down' ), + $sidebar = $body.find( '#secondary' ), + $entryContent = $body.find( '.entry-content' ), + $formatQuote = $body.find( '.format-quote blockquote' ), + isFrontPage = $body.hasClass( 'twentyseventeen-front-page' ) || $body.hasClass( 'home blog' ), + navigationFixedClass = 'site-navigation-fixed', + navigationHeight, + navigationOuterHeight, + navPadding, + navMenuItemHeight, + idealNavHeight, + navIsNotTooTall, + headerOffset, + menuTop = 0, + resizeTimer; + + // Ensure the sticky navigation doesn't cover current focused links. + $( 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], [contenteditable]', '.site-content-contain' ).filter( ':visible' ).focus( function() { + if ( $navigation.hasClass( 'site-navigation-fixed' ) ) { + var windowScrollTop = $( window ).scrollTop(), + fixedNavHeight = $navigation.height(), + itemScrollTop = $( this ).offset().top, + offsetDiff = itemScrollTop - windowScrollTop; + + // Account for Admin bar. + if ( $( '#wpadminbar' ).length ) { + offsetDiff -= $( '#wpadminbar' ).height(); + } + + if ( offsetDiff < fixedNavHeight ) { + $( window ).scrollTo( itemScrollTop - ( fixedNavHeight + 50 ), 0 ); + } + } + }); + + // Set properties of navigation. + function setNavProps() { + navigationHeight = $navigation.height(); + navigationOuterHeight = $navigation.outerHeight(); + navPadding = parseFloat( $navWrap.css( 'padding-top' ) ) * 2; + navMenuItemHeight = $navMenuItem.outerHeight() * 2; + idealNavHeight = navPadding + navMenuItemHeight; + navIsNotTooTall = navigationHeight <= idealNavHeight; + } + + // Make navigation 'stick'. + function adjustScrollClass() { + + // Make sure we're not on a mobile screen. + if ( 'none' === $menuToggle.css( 'display' ) ) { + + // Make sure the nav isn't taller than two rows. + if ( navIsNotTooTall ) { + + // When there's a custom header image or video, the header offset includes the height of the navigation. + if ( isFrontPage && ( $body.hasClass( 'has-header-image' ) || $body.hasClass( 'has-header-video' ) ) ) { + headerOffset = $customHeader.innerHeight() - navigationOuterHeight; + } else { + headerOffset = $customHeader.innerHeight(); + } + + // If the scroll is more than the custom header, set the fixed class. + if ( $( window ).scrollTop() >= headerOffset ) { + $navigation.addClass( navigationFixedClass ); + } else { + $navigation.removeClass( navigationFixedClass ); + } + + } else { + + // Remove 'fixed' class if nav is taller than two rows. + $navigation.removeClass( navigationFixedClass ); + } + } + } + + // Set margins of branding in header. + function adjustHeaderHeight() { + if ( 'none' === $menuToggle.css( 'display' ) ) { + + // The margin should be applied to different elements on front-page or home vs interior pages. + if ( isFrontPage ) { + $branding.css( 'margin-bottom', navigationOuterHeight ); + } else { + $customHeader.css( 'margin-bottom', navigationOuterHeight ); + } + + } else { + $customHeader.css( 'margin-bottom', '0' ); + $branding.css( 'margin-bottom', '0' ); + } + } + + // Set icon for quotes. + function setQuotesIcon() { + $( twentyseventeenScreenReaderText.quote ).prependTo( $formatQuote ); + } + + // Add 'below-entry-meta' class to elements. + function belowEntryMetaClass( param ) { + var sidebarPos, sidebarPosBottom; + + if ( ! $body.hasClass( 'has-sidebar' ) || ( + $body.hasClass( 'search' ) || + $body.hasClass( 'single-attachment' ) || + $body.hasClass( 'error404' ) || + $body.hasClass( 'twentyseventeen-front-page' ) + ) ) { + return; + } + + sidebarPos = $sidebar.offset(); + sidebarPosBottom = sidebarPos.top + ( $sidebar.height() + 28 ); + + $entryContent.find( param ).each( function() { + var $element = $( this ), + elementPos = $element.offset(), + elementPosTop = elementPos.top; + + // Add 'below-entry-meta' to elements below the entry meta. + if ( elementPosTop > sidebarPosBottom ) { + $element.addClass( 'below-entry-meta' ); + } else { + $element.removeClass( 'below-entry-meta' ); + } + }); + } + + /* + * Test if inline SVGs are supported. + * @link https://github.com/Modernizr/Modernizr/ + */ + function supportsInlineSVG() { + var div = document.createElement( 'div' ); + div.innerHTML = ''; + return 'http://www.w3.org/2000/svg' === ( 'undefined' !== typeof SVGRect && div.firstChild && div.firstChild.namespaceURI ); + } + + /** + * Test if an iOS device. + */ + function checkiOS() { + return /iPad|iPhone|iPod/.test(navigator.userAgent) && ! window.MSStream; + } + + /* + * Test if background-attachment: fixed is supported. + * @link http://stackoverflow.com/questions/14115080/detect-support-for-background-attachment-fixed + */ + function supportsFixedBackground() { + var el = document.createElement('div'), + isSupported; + + try { + if ( ! ( 'backgroundAttachment' in el.style ) || checkiOS() ) { + return false; + } + el.style.backgroundAttachment = 'fixed'; + isSupported = ( 'fixed' === el.style.backgroundAttachment ); + return isSupported; + } + catch (e) { + return false; + } + } + + // Fire on document ready. + $( document ).ready( function() { + + // If navigation menu is present on page, setNavProps and adjustScrollClass. + if ( $navigation.length ) { + setNavProps(); + adjustScrollClass(); + } + + // If 'Scroll Down' arrow in present on page, calculate scroll offset and bind an event handler to the click event. + if ( $menuScrollDown.length ) { + + if ( $( 'body' ).hasClass( 'admin-bar' ) ) { + menuTop -= 32; + } + if ( $( 'body' ).hasClass( 'blog' ) ) { + menuTop -= 30; // The div for latest posts has no space above content, add some to account for this. + } + if ( ! $navigation.length ) { + navigationOuterHeight = 0; + } + + $menuScrollDown.click( function( e ) { + e.preventDefault(); + $( window ).scrollTo( '#primary', { + duration: 600, + offset: { top: menuTop - navigationOuterHeight } + }); + }); + } + + adjustHeaderHeight(); + setQuotesIcon(); + belowEntryMetaClass( 'blockquote.alignleft, blockquote.alignright' ); + if ( true === supportsInlineSVG() ) { + document.documentElement.className = document.documentElement.className.replace( /(\s*)no-svg(\s*)/, '$1svg$2' ); + } + + if ( true === supportsFixedBackground() ) { + document.documentElement.className += ' background-fixed'; + } + }); + + // If navigation menu is present on page, adjust it on scroll and screen resize. + if ( $navigation.length ) { + + // On scroll, we want to stick/unstick the navigation. + $( window ).on( 'scroll', function() { + adjustScrollClass(); + adjustHeaderHeight(); + }); + + // Also want to make sure the navigation is where it should be on resize. + $( window ).resize( function() { + setNavProps(); + setTimeout( adjustScrollClass, 500 ); + }); + } + + $( window ).resize( function() { + clearTimeout( resizeTimer ); + resizeTimer = setTimeout( function() { + belowEntryMetaClass( 'blockquote.alignleft, blockquote.alignright' ); + }, 300 ); + setTimeout( adjustHeaderHeight, 1000 ); + }); + + // Add header video class after the video is loaded. + $( document ).on( 'wp-custom-header-video-loaded', function() { + $body.addClass( 'has-header-video' ); + }); + +})( jQuery ); diff --git a/wp-content/themes/twentyseventeen/assets/js/html5.js b/wp-content/themes/twentyseventeen/assets/js/html5.js new file mode 100644 index 000000000..9c1f04955 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/js/html5.js @@ -0,0 +1,326 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +;(function(window, document) { +/*jshint evil:true */ + /** version */ + var version = '3.7.3'; + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; + + /** Not all elements can be cloned in IE **/ + var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Name of the expando, to work with multiple documents or to re-shiv one document */ + var expando = '_html5shiv'; + + /** The id for the the documents expando */ + var expanID = 0; + + /** Cached data for each document */ + var expandoData = {}; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + try { + var a = document.createElement('a'); + a.innerHTML = ''; + //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + (document.createElement)('a'); + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + } catch(e) { + // assign a false positive if detection fails => unable to shiv + supportsHtml5Styles = true; + supportsUnknownElements = true; + } + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Extends the built-in list of html5 elements + * @memberOf html5 + * @param {String|Array} newElements whitespace separated list or array of new element names to shiv + * @param {Document} ownerDocument The context document. + */ + function addElements(newElements, ownerDocument) { + var elements = html5.elements; + if(typeof elements != 'string'){ + elements = elements.join(' '); + } + if(typeof newElements != 'string'){ + newElements = newElements.join(' '); + } + html5.elements = elements +' '+ newElements; + shivDocument(ownerDocument); + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document|DocumentFragment} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;igmailcom | http://flesler.blogspot.com + * Licensed under MIT + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // AMD + define( ['jquery'], factory ); + } else if (typeof module !== 'undefined' && module.exports) { + // CommonJS + module.exports = factory( require( 'jquery' ) ); + } else { + // Global + factory( jQuery ); + } +})(function($) { + 'use strict'; + + var $scrollTo = $.scrollTo = function(target, duration, settings) { + return $( window ).scrollTo( target, duration, settings ); + }; + + $scrollTo.defaults = { + axis:'xy', + duration: 0, + limit:true + }; + + function isWin(elem) { + return ! elem.nodeName || + $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) !== -1; + } + + $.fn.scrollTo = function(target, duration, settings) { + if (typeof duration === 'object') { + settings = duration; + duration = 0; + } + if (typeof settings === 'function') { + settings = { onAfter:settings }; + } + if (target === 'max') { + target = 9e9; + } + + settings = $.extend( {}, $scrollTo.defaults, settings ); + // Speed is still recognized for backwards compatibility + duration = duration || settings.duration; + // Make sure the settings are given right + var queue = settings.queue && settings.axis.length > 1; + if (queue) { + // Let's keep the overall duration + duration /= 2; + } + settings.offset = both( settings.offset ); + settings.over = both( settings.over ); + + return this.each(function() { + // Null target yields nothing, just like jQuery does + if (target === null) { return; } + + var win = isWin( this ), + elem = win ? this.contentWindow || window : this, + $elem = $( elem ), + targ = target, + attr = {}, + toff; + + switch (typeof targ) { + // A number will pass the regex + case 'number': + case 'string': + if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test( targ )) { + targ = both( targ ); + // We are done + break; + } + // Relative/Absolute selector + targ = win ? $( targ ) : $( targ, elem ); + /* falls through */ + case 'object': + if (targ.length === 0) { return; } + // DOMElement / jQuery + if (targ.is || targ.style) { + // Get the real position of the target + toff = (targ = $( targ )).offset(); + } + } + + var offset = $.isFunction( settings.offset ) && settings.offset( elem, targ ) || settings.offset; + + $.each(settings.axis.split( '' ), function(i, axis) { + var Pos = axis === 'x' ? 'Left' : 'Top', + pos = Pos.toLowerCase(), + key = 'scroll' + Pos, + prev = $elem[key](), + max = $scrollTo.max( elem, axis ); + + if (toff) {// jQuery / DOMElement + attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]); + + // If it's a dom element, reduce the margin + if (settings.margin) { + attr[key] -= parseInt( targ.css( 'margin' + Pos ), 10 ) || 0; + attr[key] -= parseInt( targ.css( 'border' + Pos + 'Width' ), 10 ) || 0; + } + + attr[key] += offset[pos] || 0; + + if (settings.over[pos]) { + // Scroll to a fraction of its width/height + attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos]; + } + } else { + var val = targ[pos]; + // Handle percentage values + attr[key] = val.slice && val.slice( -1 ) === '%' ? + parseFloat( val ) / 100 * max + : val; + } + + // Number or 'number' + if (settings.limit && /^\d+$/.test( attr[key] )) { + // Check the limits + attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max ); + } + + // Don't waste time animating, if there's no need. + if ( ! i && settings.axis.length > 1) { + if (prev === attr[key]) { + // No animation needed + attr = {}; + } else if (queue) { + // Intermediate animation + animate( settings.onAfterFirst ); + // Don't animate this axis again in the next iteration. + attr = {}; + } + } + }); + + animate( settings.onAfter ); + + function animate(callback) { + var opts = $.extend({}, settings, { + // The queue setting conflicts with animate() + // Force it to always be true + queue: true, + duration: duration, + complete: callback && function() { + callback.call( elem, targ, settings ); + } + }); + $elem.animate( attr, opts ); + } + }); + }; + + // Max scrolling position, works on quirks mode + // It only fails (not too badly) on IE, quirks mode. + $scrollTo.max = function(elem, axis) { + var Dim = axis === 'x' ? 'Width' : 'Height', + scroll = 'scroll' + Dim; + + if ( ! isWin( elem )) { + return elem[scroll] - $( elem )[Dim.toLowerCase()](); } + + var size = 'client' + Dim, + doc = elem.ownerDocument || elem.document, + html = doc.documentElement, + body = doc.body; + + return Math.max( html[scroll], body[scroll] ) - Math.min( html[size], body[size] ); + }; + + function both(val) { + return $.isFunction( val ) || $.isPlainObject( val ) ? val : { top:val, left:val }; + } + + // Add special hooks so that window scroll properties can be animated + $.Tween.propHooks.scrollLeft = $.Tween.propHooks.scrollTop = { + get: function(t) { + return $( t.elem )[t.prop](); + }, + set: function(t) { + var curr = this.get( t ); + // If interrupt is true and user scrolled, stop animating + if (t.options.interrupt && t._last && t._last !== curr) { + return $( t.elem ).stop(); + } + var next = Math.round( t.now ); + // Don't waste CPU + // Browsers don't render floating point scroll + if (curr !== next) { + $( t.elem )[t.prop](next); + t._last = this.get( t ); + } + } + }; + + // AMD requirement + return $scrollTo; +}); diff --git a/wp-content/themes/twentyseventeen/assets/js/navigation.js b/wp-content/themes/twentyseventeen/assets/js/navigation.js new file mode 100644 index 000000000..f0fd65249 --- /dev/null +++ b/wp-content/themes/twentyseventeen/assets/js/navigation.js @@ -0,0 +1,109 @@ +/* global twentyseventeenScreenReaderText */ +/** + * Theme functions file. + * + * Contains handlers for navigation and widget area. + */ + +(function( $ ) { + var masthead, menuToggle, siteNavContain, siteNavigation; + + function initMainNavigation( container ) { + + // Add dropdown toggle that displays child menu items. + var dropdownToggle = $( '
        + +
        +
        + + + +
        +
        + + + + + + diff --git a/wp-content/themes/twentyseventeen/front-page.php b/wp-content/themes/twentyseventeen/front-page.php new file mode 100644 index 000000000..86078ad47 --- /dev/null +++ b/wp-content/themes/twentyseventeen/front-page.php @@ -0,0 +1,59 @@ + + +
        +
        + + + + + +
        +
        + + tag in the document head, and expect WordPress to + * provide it for us. + */ + add_theme_support( 'title-tag' ); + + /* + * Enable support for Post Thumbnails on posts and pages. + * + * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ + */ + add_theme_support( 'post-thumbnails' ); + + add_image_size( 'twentyseventeen-featured-image', 2000, 1200, true ); + + add_image_size( 'twentyseventeen-thumbnail-avatar', 100, 100, true ); + + // Set the default content width. + $GLOBALS['content_width'] = 525; + + // This theme uses wp_nav_menu() in two locations. + register_nav_menus( + array( + 'top' => __( 'Top Menu', 'twentyseventeen' ), + 'social' => __( 'Social Links Menu', 'twentyseventeen' ), + ) + ); + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( + 'html5', + array( + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); + + /* + * Enable support for Post Formats. + * + * See: https://codex.wordpress.org/Post_Formats + */ + add_theme_support( + 'post-formats', + array( + 'aside', + 'image', + 'video', + 'quote', + 'link', + 'gallery', + 'audio', + ) + ); + + // Add theme support for Custom Logo. + add_theme_support( + 'custom-logo', + array( + 'width' => 250, + 'height' => 250, + 'flex-width' => true, + ) + ); + + // Add theme support for selective refresh for widgets. + add_theme_support( 'customize-selective-refresh-widgets' ); + + /* + * This theme styles the visual editor to resemble the theme style, + * specifically font, colors, and column width. + */ + add_editor_style( array( 'assets/css/editor-style.css', twentyseventeen_fonts_url() ) ); + + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for responsive embeds. + add_theme_support( 'responsive-embeds' ); + + // Define and register starter content to showcase the theme on new sites. + $starter_content = array( + 'widgets' => array( + // Place three core-defined widgets in the sidebar area. + 'sidebar-1' => array( + 'text_business_info', + 'search', + 'text_about', + ), + + // Add the core-defined business info widget to the footer 1 area. + 'sidebar-2' => array( + 'text_business_info', + ), + + // Put two core-defined widgets in the footer 2 area. + 'sidebar-3' => array( + 'text_about', + 'search', + ), + ), + + // Specify the core-defined pages to create and add custom thumbnails to some of them. + 'posts' => array( + 'home', + 'about' => array( + 'thumbnail' => '{{image-sandwich}}', + ), + 'contact' => array( + 'thumbnail' => '{{image-espresso}}', + ), + 'blog' => array( + 'thumbnail' => '{{image-coffee}}', + ), + 'homepage-section' => array( + 'thumbnail' => '{{image-espresso}}', + ), + ), + + // Create the custom image attachments used as post thumbnails for pages. + 'attachments' => array( + 'image-espresso' => array( + 'post_title' => _x( 'Espresso', 'Theme starter content', 'twentyseventeen' ), + 'file' => 'assets/images/espresso.jpg', // URL relative to the template directory. + ), + 'image-sandwich' => array( + 'post_title' => _x( 'Sandwich', 'Theme starter content', 'twentyseventeen' ), + 'file' => 'assets/images/sandwich.jpg', + ), + 'image-coffee' => array( + 'post_title' => _x( 'Coffee', 'Theme starter content', 'twentyseventeen' ), + 'file' => 'assets/images/coffee.jpg', + ), + ), + + // Default to a static front page and assign the front and posts pages. + 'options' => array( + 'show_on_front' => 'page', + 'page_on_front' => '{{home}}', + 'page_for_posts' => '{{blog}}', + ), + + // Set the front page section theme mods to the IDs of the core-registered pages. + 'theme_mods' => array( + 'panel_1' => '{{homepage-section}}', + 'panel_2' => '{{about}}', + 'panel_3' => '{{blog}}', + 'panel_4' => '{{contact}}', + ), + + // Set up nav menus for each of the two areas registered in the theme. + 'nav_menus' => array( + // Assign a menu to the "top" location. + 'top' => array( + 'name' => __( 'Top Menu', 'twentyseventeen' ), + 'items' => array( + 'link_home', // Note that the core "home" page is actually a link in case a static front page is not used. + 'page_about', + 'page_blog', + 'page_contact', + ), + ), + + // Assign a menu to the "social" location. + 'social' => array( + 'name' => __( 'Social Links Menu', 'twentyseventeen' ), + 'items' => array( + 'link_yelp', + 'link_facebook', + 'link_twitter', + 'link_instagram', + 'link_email', + ), + ), + ), + ); + + /** + * Filters Twenty Seventeen array of starter content. + * + * @since Twenty Seventeen 1.1 + * + * @param array $starter_content Array of starter content. + */ + $starter_content = apply_filters( 'twentyseventeen_starter_content', $starter_content ); + + add_theme_support( 'starter-content', $starter_content ); +} +add_action( 'after_setup_theme', 'twentyseventeen_setup' ); + +/** + * Set the content width in pixels, based on the theme's design and stylesheet. + * + * Priority 0 to make it available to lower priority callbacks. + * + * @global int $content_width + */ +function twentyseventeen_content_width() { + + $content_width = $GLOBALS['content_width']; + + // Get layout. + $page_layout = get_theme_mod( 'page_layout' ); + + // Check if layout is one column. + if ( 'one-column' === $page_layout ) { + if ( twentyseventeen_is_frontpage() ) { + $content_width = 644; + } elseif ( is_page() ) { + $content_width = 740; + } + } + + // Check if is single post and there is no sidebar. + if ( is_single() && ! is_active_sidebar( 'sidebar-1' ) ) { + $content_width = 740; + } + + /** + * Filter Twenty Seventeen content width of the theme. + * + * @since Twenty Seventeen 1.0 + * + * @param int $content_width Content width in pixels. + */ + $GLOBALS['content_width'] = apply_filters( 'twentyseventeen_content_width', $content_width ); +} +add_action( 'template_redirect', 'twentyseventeen_content_width', 0 ); + +/** + * Register custom fonts. + */ +function twentyseventeen_fonts_url() { + $fonts_url = ''; + + /* + * Translators: If there are characters in your language that are not + * supported by Libre Franklin, translate this to 'off'. Do not translate + * into your own language. + */ + $libre_franklin = _x( 'on', 'Libre Franklin font: on or off', 'twentyseventeen' ); + + if ( 'off' !== $libre_franklin ) { + $font_families = array(); + + $font_families[] = 'Libre Franklin:300,300i,400,400i,600,600i,800,800i'; + + $query_args = array( + 'family' => urlencode( implode( '|', $font_families ) ), + 'subset' => urlencode( 'latin,latin-ext' ), + ); + + $fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ); + } + + return esc_url_raw( $fonts_url ); +} + +/** + * Add preconnect for Google Fonts. + * + * @since Twenty Seventeen 1.0 + * + * @param array $urls URLs to print for resource hints. + * @param string $relation_type The relation type the URLs are printed. + * @return array $urls URLs to print for resource hints. + */ +function twentyseventeen_resource_hints( $urls, $relation_type ) { + if ( wp_style_is( 'twentyseventeen-fonts', 'queue' ) && 'preconnect' === $relation_type ) { + $urls[] = array( + 'href' => 'https://fonts.gstatic.com', + 'crossorigin', + ); + } + + return $urls; +} +add_filter( 'wp_resource_hints', 'twentyseventeen_resource_hints', 10, 2 ); + +/** + * Register widget area. + * + * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar + */ +function twentyseventeen_widgets_init() { + register_sidebar( + array( + 'name' => __( 'Blog Sidebar', 'twentyseventeen' ), + 'id' => 'sidebar-1', + 'description' => __( 'Add widgets here to appear in your sidebar on blog posts and archive pages.', 'twentyseventeen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'Footer 1', 'twentyseventeen' ), + 'id' => 'sidebar-2', + 'description' => __( 'Add widgets here to appear in your footer.', 'twentyseventeen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'Footer 2', 'twentyseventeen' ), + 'id' => 'sidebar-3', + 'description' => __( 'Add widgets here to appear in your footer.', 'twentyseventeen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); +} +add_action( 'widgets_init', 'twentyseventeen_widgets_init' ); + +/** + * Replaces "[...]" (appended to automatically generated excerpts) with ... and + * a 'Continue reading' link. + * + * @since Twenty Seventeen 1.0 + * + * @param string $link Link to single post/page. + * @return string 'Continue reading' link prepended with an ellipsis. + */ +function twentyseventeen_excerpt_more( $link ) { + if ( is_admin() ) { + return $link; + } + + $link = sprintf( + '', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( __( 'Continue reading "%s"', 'twentyseventeen' ), get_the_title( get_the_ID() ) ) + ); + return ' … ' . $link; +} +add_filter( 'excerpt_more', 'twentyseventeen_excerpt_more' ); + +/** + * Handles JavaScript detection. + * + * Adds a `js` class to the root `` element when JavaScript is detected. + * + * @since Twenty Seventeen 1.0 + */ +function twentyseventeen_javascript_detection() { + echo "\n"; +} +add_action( 'wp_head', 'twentyseventeen_javascript_detection', 0 ); + +/** + * Add a pingback url auto-discovery header for singularly identifiable articles. + */ +function twentyseventeen_pingback_header() { + if ( is_singular() && pings_open() ) { + printf( '' . "\n", esc_url( get_bloginfo( 'pingback_url' ) ) ); + } +} +add_action( 'wp_head', 'twentyseventeen_pingback_header' ); + +/** + * Display custom color CSS. + */ +function twentyseventeen_colors_css_wrap() { + if ( 'custom' !== get_theme_mod( 'colorscheme' ) && ! is_customize_preview() ) { + return; + } + + require_once( get_parent_theme_file_path( '/inc/color-patterns.php' ) ); + $hue = absint( get_theme_mod( 'colorscheme_hue', 250 ) ); + + $customize_preview_data_hue = ''; + if ( is_customize_preview() ) { + $customize_preview_data_hue = 'data-hue="' . $hue . '"'; + } + ?> + + twentyseventeen_get_svg( array( 'icon' => 'quote-right' ) ), + ); + + if ( has_nav_menu( 'top' ) ) { + wp_enqueue_script( 'twentyseventeen-navigation', get_theme_file_uri( '/assets/js/navigation.js' ), array( 'jquery' ), '1.0', true ); + $twentyseventeen_l10n['expand'] = __( 'Expand child menu', 'twentyseventeen' ); + $twentyseventeen_l10n['collapse'] = __( 'Collapse child menu', 'twentyseventeen' ); + $twentyseventeen_l10n['icon'] = twentyseventeen_get_svg( + array( + 'icon' => 'angle-down', + 'fallback' => true, + ) + ); + } + + wp_enqueue_script( 'twentyseventeen-global', get_theme_file_uri( '/assets/js/global.js' ), array( 'jquery' ), '1.0', true ); + + wp_enqueue_script( 'jquery-scrollto', get_theme_file_uri( '/assets/js/jquery.scrollTo.js' ), array( 'jquery' ), '2.1.2', true ); + + wp_localize_script( 'twentyseventeen-skip-link-focus-fix', 'twentyseventeenScreenReaderText', $twentyseventeen_l10n ); + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } +} +add_action( 'wp_enqueue_scripts', 'twentyseventeen_scripts' ); + +/** + * Enqueues styles for the block-based editor. + * + * @since Twenty Seventeen 1.8 + */ +function twentyseventeen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyseventeen-block-editor-style', get_theme_file_uri( '/assets/css/editor-blocks.css' ), array(), '1.1' ); + // Add custom fonts. + wp_enqueue_style( 'twentyseventeen-fonts', twentyseventeen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentyseventeen_block_editor_styles' ); + +/** + * Add custom image sizes attribute to enhance responsive image functionality + * for content images. + * + * @since Twenty Seventeen 1.0 + * + * @param string $sizes A source size value for use in a 'sizes' attribute. + * @param array $size Image size. Accepts an array of width and height + * values in pixels (in that order). + * @return string A source size value for use in a content image 'sizes' attribute. + */ +function twentyseventeen_content_image_sizes_attr( $sizes, $size ) { + $width = $size[0]; + + if ( 740 <= $width ) { + $sizes = '(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px'; + } + + if ( is_active_sidebar( 'sidebar-1' ) || is_archive() || is_search() || is_home() || is_page() ) { + if ( ! ( is_page() && 'one-column' === get_theme_mod( 'page_options' ) ) && 767 <= $width ) { + $sizes = '(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px'; + } + } + + return $sizes; +} +add_filter( 'wp_calculate_image_sizes', 'twentyseventeen_content_image_sizes_attr', 10, 2 ); + +/** + * Filter the `sizes` value in the header image markup. + * + * @since Twenty Seventeen 1.0 + * + * @param string $html The HTML image tag markup being filtered. + * @param object $header The custom header object returned by 'get_custom_header()'. + * @param array $attr Array of the attributes for the image tag. + * @return string The filtered header image HTML. + */ +function twentyseventeen_header_image_tag( $html, $header, $attr ) { + if ( isset( $attr['sizes'] ) ) { + $html = str_replace( $attr['sizes'], '100vw', $html ); + } + return $html; +} +add_filter( 'get_header_image_tag', 'twentyseventeen_header_image_tag', 10, 3 ); + +/** + * Add custom image sizes attribute to enhance responsive image functionality + * for post thumbnails. + * + * @since Twenty Seventeen 1.0 + * + * @param array $attr Attributes for the image markup. + * @param int $attachment Image attachment ID. + * @param array $size Registered image size or flat array of height and width dimensions. + * @return array The filtered attributes for the image markup. + */ +function twentyseventeen_post_thumbnail_sizes_attr( $attr, $attachment, $size ) { + if ( is_archive() || is_search() || is_home() ) { + $attr['sizes'] = '(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px'; + } else { + $attr['sizes'] = '100vw'; + } + + return $attr; +} +add_filter( 'wp_get_attachment_image_attributes', 'twentyseventeen_post_thumbnail_sizes_attr', 10, 3 ); + +/** + * Use front-page.php when Front page displays is set to a static page. + * + * @since Twenty Seventeen 1.0 + * + * @param string $template front-page.php. + * + * @return string The template to be used: blank if is_home() is true (defaults to index.php), else $template. + */ +function twentyseventeen_front_page_template( $template ) { + return is_home() ? '' : $template; +} +add_filter( 'frontpage_template', 'twentyseventeen_front_page_template' ); + +/** + * Modifies tag cloud widget arguments to display all tags in the same font size + * and use list format for better accessibility. + * + * @since Twenty Seventeen 1.4 + * + * @param array $args Arguments for tag cloud widget. + * @return array The filtered arguments for tag cloud widget. + */ +function twentyseventeen_widget_tag_cloud_args( $args ) { + $args['largest'] = 1; + $args['smallest'] = 1; + $args['unit'] = 'em'; + $args['format'] = 'list'; + + return $args; +} +add_filter( 'widget_tag_cloud_args', 'twentyseventeen_widget_tag_cloud_args' ); + +/** + * Get unique ID. + * + * This is a PHP implementation of Underscore's uniqueId method. A static variable + * contains an integer that is incremented with each call. This number is returned + * with the optional prefix. As such the returned value is not universally unique, + * but it is unique across the life of the PHP process. + * + * @since Twenty Seventeen 2.0 + * @see wp_unique_id() Themes requiring WordPress 5.0.3 and greater should use this instead. + * + * @staticvar int $id_counter + * + * @param string $prefix Prefix for the returned ID. + * @return string Unique ID. + */ +function twentyseventeen_unique_id( $prefix = '' ) { + static $id_counter = 0; + if ( function_exists( 'wp_unique_id' ) ) { + return wp_unique_id( $prefix ); + } + return $prefix . (string) ++$id_counter; +} + +/** + * Implement the Custom Header feature. + */ +require get_parent_theme_file_path( '/inc/custom-header.php' ); + +/** + * Custom template tags for this theme. + */ +require get_parent_theme_file_path( '/inc/template-tags.php' ); + +/** + * Additional features to allow styling of the templates. + */ +require get_parent_theme_file_path( '/inc/template-functions.php' ); + +/** + * Customizer additions. + */ +require get_parent_theme_file_path( '/inc/customizer.php' ); + +/** + * SVG icons functions and filters. + */ +require get_parent_theme_file_path( '/inc/icon-functions.php' ); diff --git a/wp-content/themes/twentyseventeen/header.php b/wp-content/themes/twentyseventeen/header.php new file mode 100644 index 000000000..0ac11c30e --- /dev/null +++ b/wp-content/themes/twentyseventeen/header.php @@ -0,0 +1,58 @@ + section and everything up until
        + * + * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials + * + * @package WordPress + * @subpackage Twenty_Seventeen + * @since 1.0 + * @version 1.0 + */ + +?> + class="no-js no-svg"> + + + + + + + + +> + +
        + + + + + '; + echo get_the_post_thumbnail( get_queried_object_id(), 'twentyseventeen-featured-image' ); + echo '
        '; + endif; + ?> + +
        +
        diff --git a/wp-content/themes/twentyseventeen/inc/back-compat.php b/wp-content/themes/twentyseventeen/inc/back-compat.php new file mode 100644 index 000000000..3bb3ccf7e --- /dev/null +++ b/wp-content/themes/twentyseventeen/inc/back-compat.php @@ -0,0 +1,73 @@ +

        %s

        ', $message ); +} + +/** + * Prevents the Customizer from being loaded on WordPress versions prior to 4.7. + * + * @since Twenty Seventeen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentyseventeen_customize() { + wp_die( + sprintf( __( 'Twenty Seventeen requires at least WordPress version 4.7. You are running version %s. Please upgrade and try again.', 'twentyseventeen' ), $GLOBALS['wp_version'] ), + '', + array( + 'back_link' => true, + ) + ); +} +add_action( 'load-customize.php', 'twentyseventeen_customize' ); + +/** + * Prevents the Theme Preview from being loaded on WordPress versions prior to 4.7. + * + * @since Twenty Seventeen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentyseventeen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Seventeen requires at least WordPress version 4.7. You are running version %s. Please upgrade and try again.', 'twentyseventeen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentyseventeen_preview' ); diff --git a/wp-content/themes/twentyseventeen/inc/color-patterns.php b/wp-content/themes/twentyseventeen/inc/color-patterns.php new file mode 100644 index 000000000..cfd243f67 --- /dev/null +++ b/wp-content/themes/twentyseventeen/inc/color-patterns.php @@ -0,0 +1,580 @@ + .comment-body > .comment-meta > .comment-author .avatar { + border-color: hsl( ' . $hue . ', ' . $reduced_saturation . ', 20% ); /* base: #333; */ +} + +.colors-custom h2, +.colors-custom blockquote, +.colors-custom input[type="text"], +.colors-custom input[type="email"], +.colors-custom input[type="url"], +.colors-custom input[type="password"], +.colors-custom input[type="search"], +.colors-custom input[type="number"], +.colors-custom input[type="tel"], +.colors-custom input[type="range"], +.colors-custom input[type="date"], +.colors-custom input[type="month"], +.colors-custom input[type="week"], +.colors-custom input[type="time"], +.colors-custom input[type="datetime"], +.colors-custom input[type="datetime-local"], +.colors-custom input[type="color"], +.colors-custom textarea, +.colors-custom .site-description, +.colors-custom .entry-content blockquote.alignleft, +.colors-custom .entry-content blockquote.alignright, +.colors-custom .colors-custom .taxonomy-description, +.colors-custom .site-info a, +.colors-custom .wp-caption, +.colors-custom .gallery-caption { + color: hsl( ' . $hue . ', ' . $saturation . ', 40% ); /* base: #666; */ +} + +.colors-custom abbr, +.colors-custom acronym { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 40% ); /* base: #666; */ +} + +.colors-custom h5, +.colors-custom .entry-meta, +.colors-custom .entry-meta a, +.colors-custom.blog .entry-meta a.post-edit-link, +.colors-custom.archive .entry-meta a.post-edit-link, +.colors-custom.search .entry-meta a.post-edit-link, +.colors-custom .nav-subtitle, +.colors-custom .comment-metadata, +.colors-custom .comment-metadata a, +.colors-custom .no-comments, +.colors-custom .comment-awaiting-moderation, +.colors-custom .page-numbers.current, +.colors-custom .page-links .page-number, +.colors-custom .navigation-top .current-menu-item > a, +.colors-custom .navigation-top .current_page_item > a, +.colors-custom .main-navigation a:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-current-item .wp-playlist-item-artist { + color: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */ +} + +.colors-custom button:hover:not( .mejs-container > button ), +.colors-custom button:focus, +.colors-custom input[type="button"]:hover, +.colors-custom input[type="button"]:focus, +.colors-custom input[type="submit"]:hover, +.colors-custom input[type="submit"]:focus, +.colors-custom .entry-footer .edit-link a.post-edit-link:hover, +.colors-custom .entry-footer .edit-link a.post-edit-link:focus, +.colors-custom .social-navigation a, +.colors-custom .prev.page-numbers:focus, +.colors-custom .prev.page-numbers:hover, +.colors-custom .next.page-numbers:focus, +.colors-custom .next.page-numbers:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:focus { + background: hsl( ' . esc_attr( $hue ) . ', ' . esc_attr( $saturation ) . ', 46% ); /* base: #767676; */ +} + +.colors-custom button.secondary:hover, +.colors-custom button.secondary:focus, +.colors-custom input[type="reset"]:hover, +.colors-custom input[type="reset"]:focus, +.colors-custom input[type="button"].secondary:hover, +.colors-custom input[type="button"].secondary:focus, +.colors-custom input[type="reset"].secondary:hover, +.colors-custom input[type="reset"].secondary:focus, +.colors-custom input[type="submit"].secondary:hover, +.colors-custom input[type="submit"].secondary:focus, +.colors-custom hr { + background: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom input[type="text"], +.colors-custom input[type="email"], +.colors-custom input[type="url"], +.colors-custom input[type="password"], +.colors-custom input[type="search"], +.colors-custom input[type="number"], +.colors-custom input[type="tel"], +.colors-custom input[type="range"], +.colors-custom input[type="date"], +.colors-custom input[type="month"], +.colors-custom input[type="week"], +.colors-custom input[type="time"], +.colors-custom input[type="datetime"], +.colors-custom input[type="datetime-local"], +.colors-custom input[type="color"], +.colors-custom textarea, +.colors-custom select, +.colors-custom fieldset, +.colors-custom .widget .tagcloud a:hover, +.colors-custom .widget .tagcloud a:focus, +.colors-custom .widget.widget_tag_cloud a:hover, +.colors-custom .widget.widget_tag_cloud a:focus, +.colors-custom .wp_widget_tag_cloud a:hover, +.colors-custom .wp_widget_tag_cloud a:focus { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom thead th { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom .entry-footer .cat-links .icon, +.colors-custom .entry-footer .tags-links .icon { + color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom button.secondary, +.colors-custom input[type="reset"], +.colors-custom input[type="button"].secondary, +.colors-custom input[type="reset"].secondary, +.colors-custom input[type="submit"].secondary, +.colors-custom .prev.page-numbers, +.colors-custom .next.page-numbers { + background-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom .widget .tagcloud a, +.colors-custom .widget.widget_tag_cloud a, +.colors-custom .wp_widget_tag_cloud a { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom.twentyseventeen-front-page article:not(.has-post-thumbnail):not(:first-child), +.colors-custom .widget ul li { + border-top-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom .widget ul li { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom pre, +.colors-custom mark, +.colors-custom ins { + background: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .navigation-top, +.colors-custom .main-navigation > div > ul, +.colors-custom .pagination, +.colors-custom .comments-pagination, +.colors-custom .entry-footer, +.colors-custom .site-footer { + border-top-color: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .navigation-top, +.colors-custom .main-navigation li, +.colors-custom .entry-footer, +.colors-custom .single-featured-image-header, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item, +.colors-custom tr { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .site-content .wp-playlist-light { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .site-header, +.colors-custom .single-featured-image-header { + background-color: hsl( ' . $hue . ', ' . $saturation . ', 98% ); /* base: #fafafa; */ +} + +.colors-custom button, +.colors-custom input[type="button"], +.colors-custom input[type="submit"], +.colors-custom .entry-footer .edit-link a.post-edit-link, +.colors-custom .social-navigation a, +.colors-custom .site-content .wp-playlist-light a.wp-playlist-caption:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:hover a, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:focus a, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:focus, +.colors-custom .prev.page-numbers:focus, +.colors-custom .prev.page-numbers:hover, +.colors-custom .next.page-numbers:focus, +.colors-custom .next.page-numbers:hover, +.colors-custom.has-header-image .site-title, +.colors-custom.has-header-video .site-title, +.colors-custom.has-header-image .site-title a, +.colors-custom.has-header-video .site-title a, +.colors-custom.has-header-image .site-description, +.colors-custom.has-header-video .site-description { + color: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ +} + +body.colors-custom, +.colors-custom .navigation-top, +.colors-custom .main-navigation ul { + background: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ +} + +.colors-custom .widget ul li a, +.colors-custom .site-footer .widget-area ul li a { + -webkit-box-shadow: inset 0 -1px 0 hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: rgba(255, 255, 255, 1); */ + box-shadow: inset 0 -1px 0 hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: rgba(255, 255, 255, 1); */ +} + +.colors-custom .menu-toggle, +.colors-custom .menu-toggle:hover, +.colors-custom .menu-toggle:focus, +.colors-custom .menu .dropdown-toggle, +.colors-custom .menu-scroll-down, +.colors-custom .menu-scroll-down:hover, +.colors-custom .menu-scroll-down:focus { + background-color: transparent; +} + +.colors-custom .widget .tagcloud a, +.colors-custom .widget .tagcloud a:focus, +.colors-custom .widget .tagcloud a:hover, +.colors-custom .widget.widget_tag_cloud a, +.colors-custom .widget.widget_tag_cloud a:focus, +.colors-custom .widget.widget_tag_cloud a:hover, +.colors-custom .wp_widget_tag_cloud a, +.colors-custom .wp_widget_tag_cloud a:focus, +.colors-custom .wp_widget_tag_cloud a:hover, +.colors-custom .entry-footer .edit-link a.post-edit-link:focus, +.colors-custom .entry-footer .edit-link a.post-edit-link:hover { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +/* Reset non-customizable hover styling for links */ +.colors-custom .entry-content a:hover, +.colors-custom .entry-content a:focus, +.colors-custom .entry-summary a:hover, +.colors-custom .entry-summary a:focus, +.colors-custom .comment-content a:focus, +.colors-custom .comment-content a:hover, +.colors-custom .widget a:hover, +.colors-custom .widget a:focus, +.colors-custom .site-footer .widget-area a:hover, +.colors-custom .site-footer .widget-area a:focus, +.colors-custom .posts-navigation a:hover, +.colors-custom .posts-navigation a:focus, +.colors-custom .widget_authors a:hover strong, +.colors-custom .widget_authors a:focus strong { + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); +} + +.colors-custom .gallery-item a, +.colors-custom .gallery-item a:hover, +.colors-custom .gallery-item a:focus { + -webkit-box-shadow: none; + box-shadow: none; +} + +@media screen and (min-width: 48em) { + + .colors-custom .nav-links .nav-previous .nav-title .icon, + .colors-custom .nav-links .nav-next .nav-title .icon { + color: hsl( ' . $hue . ', ' . $saturation . ', 20% ); /* base: #222; */ + } + + .colors-custom .main-navigation li li:hover, + .colors-custom .main-navigation li li.focus { + background: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */ + } + + .colors-custom .navigation-top .menu-scroll-down { + color: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */; + } + + .colors-custom abbr[title] { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */; + } + + .colors-custom .main-navigation ul ul { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ + background: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ + } + + .colors-custom .main-navigation ul li.menu-item-has-children:before, + .colors-custom .main-navigation ul li.page_item_has_children:before { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ + } + + .colors-custom .main-navigation ul li.menu-item-has-children:after, + .colors-custom .main-navigation ul li.page_item_has_children:after { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ + } + + .colors-custom .main-navigation li li.focus > a, + .colors-custom .main-navigation li li:focus > a, + .colors-custom .main-navigation li li:hover > a, + .colors-custom .main-navigation li li a:hover, + .colors-custom .main-navigation li li a:focus, + .colors-custom .main-navigation li li.current_page_item a:hover, + .colors-custom .main-navigation li li.current-menu-item a:hover, + .colors-custom .main-navigation li li.current_page_item a:focus, + .colors-custom .main-navigation li li.current-menu-item a:focus { + color: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ + } +}'; + + /** + * Filters Twenty Seventeen custom colors CSS. + * + * @since Twenty Seventeen 1.0 + * + * @param string $css Base theme colors CSS. + * @param int $hue The user's selected color hue. + * @param string $saturation Filtered theme color saturation level. + */ + return apply_filters( 'twentyseventeen_custom_colors_css', $css, $hue, $saturation ); +} diff --git a/wp-content/themes/twentyseventeen/inc/custom-header.php b/wp-content/themes/twentyseventeen/inc/custom-header.php new file mode 100644 index 000000000..9e4f5e6a4 --- /dev/null +++ b/wp-content/themes/twentyseventeen/inc/custom-header.php @@ -0,0 +1,131 @@ + get_parent_theme_file_uri( '/assets/images/header.jpg' ), + 'width' => 2000, + 'height' => 1200, + 'flex-height' => true, + 'video' => true, + 'wp-head-callback' => 'twentyseventeen_header_style', + ) + ) + ); + + register_default_headers( + array( + 'default-image' => array( + 'url' => '%s/assets/images/header.jpg', + 'thumbnail_url' => '%s/assets/images/header.jpg', + 'description' => __( 'Default Header Image', 'twentyseventeen' ), + ), + ) + ); +} +add_action( 'after_setup_theme', 'twentyseventeen_custom_header_setup' ); + +if ( ! function_exists( 'twentyseventeen_header_style' ) ) : + /** + * Styles the header image and text displayed on the blog. + * + * @see twentyseventeen_custom_header_setup(). + */ + function twentyseventeen_header_style() { + $header_text_color = get_header_textcolor(); + + // If no custom options for text are set, let's bail. + // get_header_textcolor() options: add_theme_support( 'custom-header' ) is default, hide text (returns 'blank') or any hex value. + if ( get_theme_support( 'custom-header', 'default-text-color' ) === $header_text_color ) { + return; + } + + // If we get this far, we have custom styles. Let's do this. + ?> + + ' . __( 'Play background video', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'play' ) ); + $settings['l10n']['pause'] = '' . __( 'Pause background video', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'pause' ) ); + return $settings; +} +add_filter( 'header_video_settings', 'twentyseventeen_video_controls' ); diff --git a/wp-content/themes/twentyseventeen/inc/customizer.php b/wp-content/themes/twentyseventeen/inc/customizer.php new file mode 100644 index 000000000..1dbfb95b7 --- /dev/null +++ b/wp-content/themes/twentyseventeen/inc/customizer.php @@ -0,0 +1,249 @@ +get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title a', + 'render_callback' => 'twentyseventeen_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'render_callback' => 'twentyseventeen_customize_partial_blogdescription', + ) + ); + + /** + * Custom colors. + */ + $wp_customize->add_setting( + 'colorscheme', + array( + 'default' => 'light', + 'transport' => 'postMessage', + 'sanitize_callback' => 'twentyseventeen_sanitize_colorscheme', + ) + ); + + $wp_customize->add_setting( + 'colorscheme_hue', + array( + 'default' => 250, + 'transport' => 'postMessage', + 'sanitize_callback' => 'absint', // The hue is stored as a positive integer. + ) + ); + + $wp_customize->add_control( + 'colorscheme', + array( + 'type' => 'radio', + 'label' => __( 'Color Scheme', 'twentyseventeen' ), + 'choices' => array( + 'light' => __( 'Light', 'twentyseventeen' ), + 'dark' => __( 'Dark', 'twentyseventeen' ), + 'custom' => __( 'Custom', 'twentyseventeen' ), + ), + 'section' => 'colors', + 'priority' => 5, + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'colorscheme_hue', + array( + 'mode' => 'hue', + 'section' => 'colors', + 'priority' => 6, + ) + ) + ); + + /** + * Theme options. + */ + $wp_customize->add_section( + 'theme_options', + array( + 'title' => __( 'Theme Options', 'twentyseventeen' ), + 'priority' => 130, // Before Additional CSS. + ) + ); + + $wp_customize->add_setting( + 'page_layout', + array( + 'default' => 'two-column', + 'sanitize_callback' => 'twentyseventeen_sanitize_page_layout', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + 'page_layout', + array( + 'label' => __( 'Page Layout', 'twentyseventeen' ), + 'section' => 'theme_options', + 'type' => 'radio', + 'description' => __( 'When the two-column layout is assigned, the page title is in one column and content is in the other.', 'twentyseventeen' ), + 'choices' => array( + 'one-column' => __( 'One Column', 'twentyseventeen' ), + 'two-column' => __( 'Two Column', 'twentyseventeen' ), + ), + 'active_callback' => 'twentyseventeen_is_view_with_layout_option', + ) + ); + + /** + * Filter number of front page sections in Twenty Seventeen. + * + * @since Twenty Seventeen 1.0 + * + * @param int $num_sections Number of front page sections. + */ + $num_sections = apply_filters( 'twentyseventeen_front_page_sections', 4 ); + + // Create a setting and control for each of the sections available in the theme. + for ( $i = 1; $i < ( 1 + $num_sections ); $i++ ) { + $wp_customize->add_setting( + 'panel_' . $i, + array( + 'default' => false, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + 'panel_' . $i, + array( + /* translators: %d is the front page section number */ + 'label' => sprintf( __( 'Front Page Section %d Content', 'twentyseventeen' ), $i ), + 'description' => ( 1 !== $i ? '' : __( 'Select pages to feature in each area from the dropdowns. Add an image to a section by setting a featured image in the page editor. Empty sections will not be displayed.', 'twentyseventeen' ) ), + 'section' => 'theme_options', + 'type' => 'dropdown-pages', + 'allow_addition' => true, + 'active_callback' => 'twentyseventeen_is_static_front_page', + ) + ); + + $wp_customize->selective_refresh->add_partial( + 'panel_' . $i, + array( + 'selector' => '#panel' . $i, + 'render_callback' => 'twentyseventeen_front_page_section', + 'container_inclusive' => true, + ) + ); + } +} +add_action( 'customize_register', 'twentyseventeen_customize_register' ); + +/** + * Sanitize the page layout options. + * + * @param string $input Page layout. + */ +function twentyseventeen_sanitize_page_layout( $input ) { + $valid = array( + 'one-column' => __( 'One Column', 'twentyseventeen' ), + 'two-column' => __( 'Two Column', 'twentyseventeen' ), + ); + + if ( array_key_exists( $input, $valid ) ) { + return $input; + } + + return ''; +} + +/** + * Sanitize the colorscheme. + * + * @param string $input Color scheme. + */ +function twentyseventeen_sanitize_colorscheme( $input ) { + $valid = array( 'light', 'dark', 'custom' ); + + if ( in_array( $input, $valid, true ) ) { + return $input; + } + + return 'light'; +} + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Seventeen 1.0 + * @see twentyseventeen_customize_register() + * + * @return void + */ +function twentyseventeen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Seventeen 1.0 + * @see twentyseventeen_customize_register() + * + * @return void + */ +function twentyseventeen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Return whether we're previewing the front page and it's a static page. + */ +function twentyseventeen_is_static_front_page() { + return ( is_front_page() && ! is_home() ); +} + +/** + * Return whether we're on a view that supports a one or two column layout. + */ +function twentyseventeen_is_view_with_layout_option() { + // This option is available on all pages. It's also available on archives when there isn't a sidebar. + return ( is_page() || ( is_archive() && ! is_active_sidebar( 'sidebar-1' ) ) ); +} + +/** + * Bind JS handlers to instantly live-preview changes. + */ +function twentyseventeen_customize_preview_js() { + wp_enqueue_script( 'twentyseventeen-customize-preview', get_theme_file_uri( '/assets/js/customize-preview.js' ), array( 'customize-preview' ), '1.0', true ); +} +add_action( 'customize_preview_init', 'twentyseventeen_customize_preview_js' ); + +/** + * Load dynamic logic for the customizer controls area. + */ +function twentyseventeen_panels_js() { + wp_enqueue_script( 'twentyseventeen-customize-controls', get_theme_file_uri( '/assets/js/customize-controls.js' ), array(), '1.0', true ); +} +add_action( 'customize_controls_enqueue_scripts', 'twentyseventeen_panels_js' ); diff --git a/wp-content/themes/twentyseventeen/inc/icon-functions.php b/wp-content/themes/twentyseventeen/inc/icon-functions.php new file mode 100644 index 000000000..2dee5f47f --- /dev/null +++ b/wp-content/themes/twentyseventeen/inc/icon-functions.php @@ -0,0 +1,220 @@ + '', + 'title' => '', + 'desc' => '', + 'fallback' => false, + ); + + // Parse args. + $args = wp_parse_args( $args, $defaults ); + + // Set aria hidden. + $aria_hidden = ' aria-hidden="true"'; + + // Set ARIA. + $aria_labelledby = ''; + + /* + * Twenty Seventeen doesn't use the SVG title or description attributes; non-decorative icons are described with .screen-reader-text. + * + * However, child themes can use the title and description to add information to non-decorative SVG icons to improve accessibility. + * + * Example 1 with title: 'arrow-right', 'title' => __( 'This is the title', 'textdomain' ) ) ); ?> + * + * Example 2 with title and description: 'arrow-right', 'title' => __( 'This is the title', 'textdomain' ), 'desc' => __( 'This is the description', 'textdomain' ) ) ); ?> + * + * See https://www.paciellogroup.com/blog/2013/12/using-aria-enhance-svg-accessibility/. + */ + if ( $args['title'] ) { + $aria_hidden = ''; + $unique_id = twentyseventeen_unique_id(); + $aria_labelledby = ' aria-labelledby="title-' . $unique_id . '"'; + + if ( $args['desc'] ) { + $aria_labelledby = ' aria-labelledby="title-' . $unique_id . ' desc-' . $unique_id . '"'; + } + } + + // Begin SVG markup. + $svg = ''; + + // Display the title. + if ( $args['title'] ) { + $svg .= '' . esc_html( $args['title'] ) . ''; + + // Display the desc only if the title is already set. + if ( $args['desc'] ) { + $svg .= '' . esc_html( $args['desc'] ) . ''; + } + } + + /* + * Display the icon. + * + * The whitespace around `` is intentional - it is a work around to a keyboard navigation bug in Safari 10. + * + * See https://core.trac.wordpress.org/ticket/38387. + */ + $svg .= ' '; + + // Add some markup to use as a fallback for browsers that do not support SVGs. + if ( $args['fallback'] ) { + $svg .= ''; + } + + $svg .= ''; + + return $svg; +} + +/** + * Display SVG icons in social links menu. + * + * @param string $item_output The menu item output. + * @param WP_Post $item Menu item object. + * @param int $depth Depth of the menu. + * @param array $args wp_nav_menu() arguments. + * @return string $item_output The menu item output with social icon. + */ +function twentyseventeen_nav_menu_social_icons( $item_output, $item, $depth, $args ) { + // Get supported social icons. + $social_icons = twentyseventeen_social_links_icons(); + + // Change SVG icon inside social links menu if there is supported URL. + if ( 'social' === $args->theme_location ) { + foreach ( $social_icons as $attr => $value ) { + if ( false !== strpos( $item_output, $attr ) ) { + $item_output = str_replace( $args->link_after, '' . twentyseventeen_get_svg( array( 'icon' => esc_attr( $value ) ) ), $item_output ); + } + } + } + + return $item_output; +} +add_filter( 'walker_nav_menu_start_el', 'twentyseventeen_nav_menu_social_icons', 10, 4 ); + +/** + * Add dropdown icon if menu item has children. + * + * @param string $title The menu item's title. + * @param WP_Post $item The current menu item. + * @param array $args An array of wp_nav_menu() arguments. + * @param int $depth Depth of menu item. Used for padding. + * @return string $title The menu item's title with dropdown icon. + */ +function twentyseventeen_dropdown_icon_to_menu_link( $title, $item, $args, $depth ) { + if ( 'top' === $args->theme_location ) { + foreach ( $item->classes as $value ) { + if ( 'menu-item-has-children' === $value || 'page_item_has_children' === $value ) { + $title = $title . twentyseventeen_get_svg( array( 'icon' => 'angle-down' ) ); + } + } + } + + return $title; +} +add_filter( 'nav_menu_item_title', 'twentyseventeen_dropdown_icon_to_menu_link', 10, 4 ); + +/** + * Returns an array of supported social links (URL and icon name). + * + * @return array $social_links_icons + */ +function twentyseventeen_social_links_icons() { + // Supported social links icons. + $social_links_icons = array( + 'behance.net' => 'behance', + 'codepen.io' => 'codepen', + 'deviantart.com' => 'deviantart', + 'digg.com' => 'digg', + 'docker.com' => 'dockerhub', + 'dribbble.com' => 'dribbble', + 'dropbox.com' => 'dropbox', + 'facebook.com' => 'facebook', + 'flickr.com' => 'flickr', + 'foursquare.com' => 'foursquare', + 'plus.google.com' => 'google-plus', + 'github.com' => 'github', + 'instagram.com' => 'instagram', + 'linkedin.com' => 'linkedin', + 'mailto:' => 'envelope-o', + 'medium.com' => 'medium', + 'pinterest.com' => 'pinterest-p', + 'pscp.tv' => 'periscope', + 'getpocket.com' => 'get-pocket', + 'reddit.com' => 'reddit-alien', + 'skype.com' => 'skype', + 'skype:' => 'skype', + 'slideshare.net' => 'slideshare', + 'snapchat.com' => 'snapchat-ghost', + 'soundcloud.com' => 'soundcloud', + 'spotify.com' => 'spotify', + 'stumbleupon.com' => 'stumbleupon', + 'tumblr.com' => 'tumblr', + 'twitch.tv' => 'twitch', + 'twitter.com' => 'twitter', + 'vimeo.com' => 'vimeo', + 'vine.co' => 'vine', + 'vk.com' => 'vk', + 'wordpress.org' => 'wordpress', + 'wordpress.com' => 'wordpress', + 'yelp.com' => 'yelp', + 'youtube.com' => 'youtube', + ); + + /** + * Filter Twenty Seventeen social links icons. + * + * @since Twenty Seventeen 1.0 + * + * @param array $social_links_icons Array of social links icons. + */ + return apply_filters( 'twentyseventeen_social_links_icons', $social_links_icons ); +} diff --git a/wp-content/themes/twentyseventeen/inc/template-functions.php b/wp-content/themes/twentyseventeen/inc/template-functions.php new file mode 100644 index 000000000..b9e0d8828 --- /dev/null +++ b/wp-content/themes/twentyseventeen/inc/template-functions.php @@ -0,0 +1,102 @@ +' . get_the_author() . '' + ); + + // Finally, let's write all of this to the page. + echo '' . twentyseventeen_time_link() . ''; + } +endif; + + +if ( ! function_exists( 'twentyseventeen_time_link' ) ) : + /** + * Gets a nicely formatted string for the published date. + */ + function twentyseventeen_time_link() { + $time_string = ''; + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( + $time_string, + get_the_date( DATE_W3C ), + get_the_date(), + get_the_modified_date( DATE_W3C ), + get_the_modified_date() + ); + + // Wrap the time string in a link, and preface it with 'Posted on'. + return sprintf( + /* translators: %s: post date */ + __( 'Posted on %s', 'twentyseventeen' ), + '' . $time_string . '' + ); + } +endif; + + +if ( ! function_exists( 'twentyseventeen_entry_footer' ) ) : + /** + * Prints HTML with meta information for the categories, tags and comments. + */ + function twentyseventeen_entry_footer() { + + /* translators: used between list items, there is a space after the comma */ + $separate_meta = __( ', ', 'twentyseventeen' ); + + // Get Categories for posts. + $categories_list = get_the_category_list( $separate_meta ); + + // Get Tags for posts. + $tags_list = get_the_tag_list( '', $separate_meta ); + + // We don't want to output .entry-footer if it will be empty, so make sure its not. + if ( ( ( twentyseventeen_categorized_blog() && $categories_list ) || $tags_list ) || get_edit_post_link() ) { + + echo '
        '; + + if ( 'post' === get_post_type() ) { + if ( ( $categories_list && twentyseventeen_categorized_blog() ) || $tags_list ) { + echo ''; + + // Make sure there's more than one category before displaying. + if ( $categories_list && twentyseventeen_categorized_blog() ) { + echo '' . twentyseventeen_get_svg( array( 'icon' => 'folder-open' ) ) . '' . __( 'Categories', 'twentyseventeen' ) . '' . $categories_list . ''; + } + + if ( $tags_list && ! is_wp_error( $tags_list ) ) { + echo '' . twentyseventeen_get_svg( array( 'icon' => 'hashtag' ) ) . '' . __( 'Tags', 'twentyseventeen' ) . '' . $tags_list . ''; + } + + echo ''; + } + } + + twentyseventeen_edit_link(); + + echo '
        '; + } + } +endif; + + +if ( ! function_exists( 'twentyseventeen_edit_link' ) ) : + /** + * Returns an accessibility-friendly link to edit a post or page. + * + * This also gives us a little context about what exactly we're editing + * (post or page?) so that users understand a bit more where they are in terms + * of the template hierarchy and their content. Helpful when/if the single-page + * layout with multiple posts/pages shown gets confusing. + */ + function twentyseventeen_edit_link() { + edit_post_link( + sprintf( + /* translators: %s: Name of current post */ + __( 'Edit "%s"', 'twentyseventeen' ), + get_the_title() + ), + '', + '' + ); + } +endif; + +/** + * Display a front page section. + * + * @param WP_Customize_Partial $partial Partial associated with a selective refresh request. + * @param integer $id Front page section to display. + */ +function twentyseventeen_front_page_section( $partial = null, $id = 0 ) { + if ( is_a( $partial, 'WP_Customize_Partial' ) ) { + // Find out the id and set it up during a selective refresh. + global $twentyseventeencounter; + $id = str_replace( 'panel_', '', $partial->id ); + $twentyseventeencounter = $id; + } + + global $post; // Modify the global post object before setting up post data. + if ( get_theme_mod( 'panel_' . $id ) ) { + $post = get_post( get_theme_mod( 'panel_' . $id ) ); + setup_postdata( $post ); + set_query_var( 'panel', $id ); + + get_template_part( 'template-parts/page/content', 'front-page-panels' ); + + wp_reset_postdata(); + } elseif ( is_customize_preview() ) { + // The output placeholder anchor. + echo '
        ' . sprintf( __( 'Front Page Section %1$s Placeholder', 'twentyseventeen' ), $id ) . '
        '; + } +} + +/** + * Returns true if a blog has more than 1 category. + * + * @return bool + */ +function twentyseventeen_categorized_blog() { + $category_count = get_transient( 'twentyseventeen_categories' ); + + if ( false === $category_count ) { + // Create an array of all the categories that are attached to posts. + $categories = get_categories( + array( + 'fields' => 'ids', + 'hide_empty' => 1, + // We only need to know if there is more than one category. + 'number' => 2, + ) + ); + + // Count the number of categories that are attached to the posts. + $category_count = count( $categories ); + + set_transient( 'twentyseventeen_categories', $category_count ); + } + + // Allow viewing case of 0 or 1 categories in post preview. + if ( is_preview() ) { + return true; + } + + return $category_count > 1; +} + + +/** + * Flush out the transients used in twentyseventeen_categorized_blog. + */ +function twentyseventeen_category_transient_flusher() { + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + // Like, beat it. Dig? + delete_transient( 'twentyseventeen_categories' ); +} +add_action( 'edit_category', 'twentyseventeen_category_transient_flusher' ); +add_action( 'save_post', 'twentyseventeen_category_transient_flusher' ); + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Seventeen 2.2 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Seventeen 2.2 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentyseventeen/index.php b/wp-content/themes/twentyseventeen/index.php new file mode 100644 index 000000000..36788a687 --- /dev/null +++ b/wp-content/themes/twentyseventeen/index.php @@ -0,0 +1,71 @@ + + +
        + + + + + + +
        +
        + + twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '' . __( 'Previous page', 'twentyseventeen' ) . '', + 'next_text' => '' . __( 'Next page', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ), + 'before_page_number' => '' . __( 'Page', 'twentyseventeen' ) . ' ', + ) + ); + + else : + + get_template_part( 'template-parts/post/content', 'none' ); + + endif; + ?> + +
        +
        + +
        + + + +
        +
        +
        + + + +
        +
        +
        + + ul, +li > ol { + margin-left: 0; + margin-right: 1.5em; +} + +th:first-child, +td:first-child { + padding-left: 0.4em; + padding-right: 0; +} + +th:last-child, +td:last-child { + padding-left: 0; + padding-right: 0.4em; +} + +/* Forms */ + +input[type="radio"], +input[type="checkbox"] { + margin-left: 0.5em; + margin-right: 0; +} + +/* Media */ + +.mejs-offscreen { + right: -10000px; +} + +/* Site Branding */ + +.custom-logo-link { + padding-left: 1em; + padding-right: 0; +} + +/* Main Navigation */ + +.main-navigation ul { + text-align: right; +} + +.main-navigation ul ul { + padding-left: 0; + padding-right: 1.5em; +} + +.menu-toggle .icon { + margin-left: 0.5em; + margin-right: 0; +} + +.dropdown-toggle { + left: -0.5em; + right: auto; +} + +/* Front Page */ + +.wp-custom-header-video-button { + left: 30px; + right: auto; +} + +.twentyseventeen-panel .recent-posts .entry-header .edit-link { + margin-left: 0; + margin-right: 1em; +} + +/* Blog, Archive, Search */ + +.blog .entry-meta a.post-edit-link, +.archive .entry-meta a.post-edit-link, +.search .entry-meta a.post-edit-link { + margin-left: 0; + margin-right: 1em; +} + +.search .page .entry-meta a.post-edit-link { + margin-right: 0; +} + +.sticky .icon-thumb-tack { + left: auto; + right: -1.5em; +} + +.prev.page-numbers .icon, +.next.page-numbers .icon { + display: inline-block; + -ms-transform: rotate(180deg); /* IE 9 */ + -webkit-transform: rotate(180deg); /* Chrome, Safari, Opera */ + transform: rotate(180deg); +} + +.prev.page-numbers { + float: right; +} + +.next.page-numbers { + float: left; +} + +.nav-links .nav-previous .nav-title .nav-title-icon-wrapper { + margin-left: 0.5em; + margin-right: 0; +} + +.nav-links .nav-next .nav-title .nav-title-icon-wrapper { + margin-left: 0; + margin-right: 0.5em; +} + +/* Blog Entries */ + +.entry-footer .cat-links, +.entry-footer .tags-links { + padding-left: 0; + padding-right: 2.5em; +} + +.entry-footer .cat-links .icon, +.entry-footer .tags-links .icon { + left: auto; + margin-left: 0.5em; + margin-right: 0; + right: 0; +} + +/* Comments */ + +.comment-body { + margin-left: 0; + margin-right: 65px; +} + +.comment-reply-link .icon { + left: auto; + right: -2em; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.comment-author .avatar { + left: auto; + right: -65px; +} + +.comment-reply-link:before { + left: auto; + right: -2em; +} + +.children .comment-author .avatar { + left: auto; + right: -45px; +} + +.form-submit { + text-align: left; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 0 0 10px; +} + +/* Post Formats */ + +.format-quote blockquote .icon { + left: auto; + right: -1.25em; + -webkit-transform: none; + -ms-transform: none; + transform: none; +} + +/* Post Navigation */ + +.nav-links .nav-previous .nav-title .nav-title-icon-wrapper, +.nav-links .nav-next .nav-title .nav-title-icon-wrapper { + display: inline-block; + -ms-transform: rotate(180deg); /* IE 9 */ + -webkit-transform: rotate(180deg); /* Chrome, Safari, Opera */ + transform: rotate(180deg); +} + +/* Widgets */ + +.widget ul { + margin: 0; +} + +.search-form .search-submit { + left: 3px; + right: auto; +} + +.tagcloud ul li { + float: right; + margin: 4px 0 0 4px; +} + +.widget ul li li { + padding-left: 0; + padding-right: 1.5rem; +} + +.widget_text ul { + margin: 0 1.5em 1.5em 0; +} + +.widget_text ul li ul { + margin: 0 1.5em 0 0; +} + +/* Footer */ + +.social-navigation a { + margin-left: 1em; + margin-right: 0; +} + +/* Customizer styles */ + +.twentyseventeen-customizer.twentyseventeen-front-page .twentyseventeen-panel .twentyseventeen-panel-title { + left: 3.2em; + right: auto; +} + +/* Gallery Styles */ + +.gallery-item, +.gallery-caption { + text-align: right; +} + +/* SVG Fallback */ + +.no-svg .dropdown-toggle { + left: 0; + right: auto; +} + +/* Media queries */ + +@media screen and (min-width: 48em) { + + body.page-template-full-width-page #primary { + float: none; + } + + .has-sidebar:not(.error404) #primary { + float: right; + } + + .has-sidebar #secondary { + float: left; + } + + .error404 #primary { + float: none; + } + + /* Site Branding */ + + .custom-logo-link { + padding-left: 2em; + padding-right: 0; + } + + /* Navigation */ + + .main-navigation ul ul { + padding-right: 0; + } + + .main-navigation ul ul:before, + .main-navigation ul ul:after { + left: 0.5em; + right: auto; + } + + .main-navigation ul ul, + .main-navigation ul ul ul { + left: auto; + right: -999em; + } + + .main-navigation ul ul li:hover > ul, + .main-navigation ul ul li.focus > ul { + left: auto; + right: 100%; + } + + .main-navigation ul li:hover > ul, + .main-navigation ul li.focus > ul { + left: auto; + right: 0.5em; + } + + .main-navigation ul li.menu-item-has-children:before, + .main-navigation ul li.menu-item-has-children:after, + .main-navigation ul li.page_item_has_children:before, + .main-navigation ul li.page_item_has_children:after { + left: 1em; + right: auto; + } + + .main-navigation .menu-item-has-children > a > .icon, + .main-navigation .page_item_has_children > a > .icon { + left: auto; + right: 5px; + } + + .main-navigation ul ul .menu-item-has-children > a > .icon, + .main-navigation ul ul .page_item_has_children > a > .icon { + left: 1em; + right: auto; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + + /* Scroll down arrow */ + + .navigation-top .menu-scroll-down { + left: 0; + right: auto; + } + + .site-header .menu-scroll-down { + left: 0; + right: auto; + } + + .entry-title a { + margin-left: auto; + margin-right: -2px; + } + + /* Front Page */ + + .page-two-column .panel-content .entry-header { + float: right; + } + + .page-two-column .panel-content .entry-content { + float: left; + } + + /* Front Page - Recent Posts */ + + .page-two-column .panel-content .recent-posts { + clear: left; + float: left; + } + + /* Blog, Archive, Search */ + + .sticky .icon-thumb-tack { + left: auto; + right: -2.5em; + } + + body:not(.has-sidebar):not(.page-one-column) .page-header, + body.has-sidebar.error404 #primary .page-header, + body.page-two-column:not(.archive) #primary .entry-header, + body.page-two-column.archive:not(.has-sidebar) #primary .page-header { + float: right; + } + + .blog:not(.has-sidebar) #primary article, + .archive:not(.has-sidebar):not(.page-one-column) #primary article, + .search:not(.has-sidebar) #primary article, + .has-sidebar.error404 #primary .page-content, + .error404.has-sidebar #primary .page-content, + body.page-two-column:not(.archive) #primary .entry-content, + body.page-two-column #comments { + float: left; + } + + .entry-footer .edit-link a.post-edit-link { + margin-left: 0; + margin-right: 1em; + } + + /* Entry content */ + + /* with sidebar */ + + .has-sidebar .entry-content blockquote.alignleft { + margin-left: 0; + width: 34%; + } + + .has-sidebar #primary .entry-content blockquote.alignright, + .has-sidebar #primary .entry-content blockquote.alignright.below-entry-meta { + margin-right: 0; + width: 34%; + } + + .has-sidebar #primary .entry-content blockquote.alignleft.below-entry-meta { + margin-left: -72.5%; + width: 62%; + } + + /* blog index and archive */ + + .blog:not(.has-sidebar) .entry-content blockquote.alignleft, + .twentyseventeen-front-page.page-two-column .entry-content blockquote.alignleft, + .archive:not(.has-sidebar) .entry-content blockquote.alignleft, + .page-two-column .entry-content blockquote.alignleft { + margin-left: 0; + width: 34%; + } + + .blog:not(.has-sidebar) .entry-content blockquote.alignright, + .twentyseventeen-front-page.page-two-column #primary .entry-content blockquote.alignright, + .archive:not(.has-sidebar) .entry-content blockquote.alignright, + .page-two-column #primary .entry-content blockquote.alignright { + margin-right: -72.5%; + width: 62%; + } + + /* Post formats */ + + .format-quote blockquote .icon { + left: auto; + right: -1.5em; + } + + .navigation.pagination { + float: left; + } + + .has-sidebar .navigation.pagination, + .archive.page-one-column:not(.has-sidebar) .navigation.pagination { + float: none; + } + + .post-navigation .nav-previous { + float: right; + } + + .post-navigation .nav-next { + float: left; + text-align: left; + } + + /* Comments */ + + ol.children .children { + padding-left: 0; + padding-right: 2em; + } + + /* Post Navigation */ + + .nav-links .nav-previous .nav-title .nav-title-icon-wrapper { + left: auto; + right: -2em; + } + + .nav-links .nav-next .nav-title .nav-title-icon-wrapper { + left: -2em; + right: auto; + } + + /* Footer */ + + .site-footer .widget-column.footer-widget-1 { + float: right; + } + + .site-footer .widget-column.footer-widget-2 { + float: left; + } + + .social-navigation { + clear: right; + float: right; + } + + .site-info { + float: right; + } + + .social-navigation + .site-info { + margin-left: 0; + margin-right: 6%; + } +} + +@media screen and (min-width: 67em) { + + /* Sticky posts */ + + .sticky .icon-thumb-tack { + left: auto; + right: -1.25em; + } +} + +@media screen and (min-width: 79em) { + + .has-sidebar #primary .entry-content blockquote.alignright, + .has-sidebar #primary .entry-content blockquote.alignright.below-entry-meta { + margin-right: -20%; + } + + .blog:not(.has-sidebar) .entry-content blockquote.alignleft, + .archive:not(.has-sidebar) .entry-content blockquote.alignleft, + .page-two-column .entry-content blockquote.alignleft, + .twentyseventeen-front-page .entry-content blockquote.alignleft { + margin-left: -20%; + } +} diff --git a/wp-content/themes/twentyseventeen/screenshot.png b/wp-content/themes/twentyseventeen/screenshot.png new file mode 100644 index 000000000..088b7413e Binary files /dev/null and b/wp-content/themes/twentyseventeen/screenshot.png differ diff --git a/wp-content/themes/twentyseventeen/search.php b/wp-content/themes/twentyseventeen/search.php new file mode 100644 index 000000000..e05f85d30 --- /dev/null +++ b/wp-content/themes/twentyseventeen/search.php @@ -0,0 +1,67 @@ + + +
        + + + +
        +
        + + twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '' . __( 'Previous page', 'twentyseventeen' ) . '', + 'next_text' => '' . __( 'Next page', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ), + 'before_page_number' => '' . __( 'Page', 'twentyseventeen' ) . ' ', + ) + ); + + else : + ?> + +

        + + +
        +
        + +
        + + + + + + diff --git a/wp-content/themes/twentyseventeen/sidebar.php b/wp-content/themes/twentyseventeen/sidebar.php new file mode 100644 index 000000000..1fc3a1720 --- /dev/null +++ b/wp-content/themes/twentyseventeen/sidebar.php @@ -0,0 +1,20 @@ + + + diff --git a/wp-content/themes/twentyseventeen/single.php b/wp-content/themes/twentyseventeen/single.php new file mode 100644 index 000000000..b5136a213 --- /dev/null +++ b/wp-content/themes/twentyseventeen/single.php @@ -0,0 +1,47 @@ + + +
        +
        +
        + + '' . __( 'Previous Post', 'twentyseventeen' ) . ' ' . twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '%title', + 'next_text' => '' . __( 'Next Post', 'twentyseventeen' ) . ' %title' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ) . '', + ) + ); + + endwhile; // End of the loop. + ?> + +
        +
        + +
        + +>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 Normalize +2.0 Accessibility +3.0 Alignments +4.0 Clearings +5.0 Typography +6.0 Forms +7.0 Formatting +8.0 Lists +9.0 Tables +10.0 Links +11.0 Featured Image Hover +12.0 Navigation +13.0 Layout + 13.1 Header + 13.2 Front Page + 13.3 Regular Content + 13.4 Posts + 13.5 Pages + 13.6 Footer +14.0 Comments +15.0 Widgets +16.0 Media + 16.1 Galleries +17.0 Customizer +18.0 SVGs Fallbacks +19.0 Media Queries +20.0 Print +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 Normalize +Styles based on Normalize v5.0.0 @link https://github.com/necolas/normalize.css +--------------------------------------------------------------*/ + +html { + font-family: sans-serif; + line-height: 1.15; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +figcaption, +figure, +main { + display: block; +} + +figure { + margin: 1em 0; +} + +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; +} + +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:active, +a:hover { + outline-width: 0; +} + +abbr[title] { + border-bottom: 1px #767676 dotted; + text-decoration: none; +} + +b, +strong { + font-weight: inherit; +} + +b, +strong { + font-weight: 700; +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +dfn { + font-style: italic; +} + +mark { + background-color: #eee; + color: #222; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +audio, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +img { + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + border: 1px solid #bbb; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +progress { + display: inline-block; + vertical-align: baseline; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +details, +menu { + display: block; +} + +summary { + display: list-item; +} + +canvas { + display: inline-block; +} + +template { + display: none; +} + +[hidden] { + display: none; +} + +/*-------------------------------------------------------------- +2.0 Accessibility +--------------------------------------------------------------*/ + +/* Text meant only for screen readers. */ + +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + overflow: hidden; + position: absolute !important; + width: 1px; + word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 700; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; /* Above WP toolbar. */ +} + +/*-------------------------------------------------------------- +3.0 Alignments +--------------------------------------------------------------*/ + +.alignleft { + display: inline; + float: left; + margin-right: 1.5em; +} + +.alignright { + display: inline; + float: right; + margin-left: 1.5em; +} + +.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} + +/*-------------------------------------------------------------- +4.0 Clearings +--------------------------------------------------------------*/ + +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.entry-footer:before, +.entry-footer:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after, +.nav-links:before, +.nav-links:after, +.pagination:before, +.pagination:after, +.comment-author:before, +.comment-author:after, +.widget-area:before, +.widget-area:after, +.widget:before, +.widget:after, +.comment-meta:before, +.comment-meta:after { + content: ""; + display: table; + table-layout: fixed; +} + +.clear:after, +.entry-content:after, +.entry-footer:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after, +.nav-links:after, +.pagination:after, +.comment-author:after, +.widget-area:after, +.widget:after, +.comment-meta:after { + clear: both; +} + +/*-------------------------------------------------------------- +5.0 Typography +--------------------------------------------------------------*/ + +body, +button, +input, +select, +textarea { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; + font-size: 15px; + font-size: 0.9375rem; + font-weight: 400; + line-height: 1.66; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + line-height: 1.4; + margin: 0 0 0.75em; + padding: 1.5em 0 0; +} + +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + padding-top: 0; +} + +h1 { + font-size: 24px; + font-size: 1.5rem; + font-weight: 300; +} + +h2, +.home.blog .entry-title { + color: #666; + font-size: 20px; + font-size: 1.25rem; + font-weight: 300; +} + +h3 { + color: #333; + font-size: 18px; + font-size: 1.125rem; + font-weight: 300; +} + +h4 { + color: #333; + font-size: 16px; + font-size: 1rem; + font-weight: 800; +} + +h5 { + color: #767676; + font-size: 13px; + font-size: 0.8125rem; + font-weight: 800; + letter-spacing: 0.15em; + text-transform: uppercase; +} + +h6 { + color: #333; + font-size: 15px; + font-size: 0.9375rem; + font-weight: 800; +} + +p { + margin: 0 0 1.5em; + padding: 0; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + color: #666; + font-size: 18px; + font-size: 1.125rem; + font-style: italic; + line-height: 1.7; + margin: 0; + overflow: hidden; + padding: 0; +} + +blockquote cite { + display: block; + font-style: normal; + font-weight: 600; + margin-top: 0.5em; +} + +address { + margin: 0 0 1.5em; +} + +pre { + background: #eee; + font-family: "Courier 10 Pitch", Courier, monospace; + font-size: 15px; + font-size: 0.9375rem; + line-height: 1.6; + margin-bottom: 1.6em; + max-width: 100%; + overflow: auto; + padding: 1.6em; +} + +code, +kbd, +tt, +var { + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; + font-size: 15px; + font-size: 0.9375rem; +} + +abbr, +acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, +ins { + background: #eee; + text-decoration: none; +} + +big { + font-size: 125%; +} + +blockquote { + quotes: "" ""; +} + +q { + quotes: "“" "”" "‘" "’"; +} + +blockquote:before, +blockquote:after { + content: ""; +} + +:focus { + outline: none; +} + +/* Typography for Arabic Font */ + +html[lang="ar"] body, +html[lang="ar"] button, +html[lang="ar"] input, +html[lang="ar"] select, +html[lang="ar"] textarea, +html[lang="ary"] body, +html[lang="ary"] button, +html[lang="ary"] input, +html[lang="ary"] select, +html[lang="ary"] textarea, +html[lang="azb"] body, +html[lang="azb"] button, +html[lang="azb"] input, +html[lang="azb"] select, +html[lang="azb"] textarea, +html[lang="fa-IR"] body, +html[lang="fa-IR"] button, +html[lang="fa-IR"] input, +html[lang="fa-IR"] select, +html[lang="fa-IR"] textarea, +html[lang="haz"] body, +html[lang="haz"] button, +html[lang="haz"] input, +html[lang="haz"] select, +html[lang="haz"] textarea, +html[lang="ps"] body, +html[lang="ps"] button, +html[lang="ps"] input, +html[lang="ps"] select, +html[lang="ps"] textarea, +html[lang="ur"] body, +html[lang="ur"] button, +html[lang="ur"] input, +html[lang="ur"] select, +html[lang="ur"] textarea { + font-family: Tahoma, Arial, sans-serif; +} + +html[lang="ar"] h1, +html[lang="ar"] h2, +html[lang="ar"] h3, +html[lang="ar"] h4, +html[lang="ar"] h5, +html[lang="ar"] h6, +html[lang="ary"] h1, +html[lang="ary"] h2, +html[lang="ary"] h3, +html[lang="ary"] h4, +html[lang="ary"] h5, +html[lang="ary"] h6, +html[lang="azb"] h1, +html[lang="azb"] h2, +html[lang="azb"] h3, +html[lang="azb"] h4, +html[lang="azb"] h5, +html[lang="azb"] h6, +html[lang="fa-IR"] h1, +html[lang="fa-IR"] h2, +html[lang="fa-IR"] h3, +html[lang="fa-IR"] h4, +html[lang="fa-IR"] h5, +html[lang="fa-IR"] h6, +html[lang="haz"] h1, +html[lang="haz"] h2, +html[lang="haz"] h3, +html[lang="haz"] h4, +html[lang="haz"] h5, +html[lang="haz"] h6, +html[lang="ps"] h1, +html[lang="ps"] h2, +html[lang="ps"] h3, +html[lang="ps"] h4, +html[lang="ps"] h5, +html[lang="ps"] h6, +html[lang="ur"] h1, +html[lang="ur"] h2, +html[lang="ur"] h3, +html[lang="ur"] h4, +html[lang="ur"] h5, +html[lang="ur"] h6 { + font-weight: 700; +} + +/* Typography for Chinese Font */ + +html[lang^="zh-"] body, +html[lang^="zh-"] button, +html[lang^="zh-"] input, +html[lang^="zh-"] select, +html[lang^="zh-"] textarea { + font-family: "PingFang TC", "Helvetica Neue", Helvetica, STHeitiTC-Light, Arial, sans-serif; +} + +html[lang="zh-CN"] body, +html[lang="zh-CN"] button, +html[lang="zh-CN"] input, +html[lang="zh-CN"] select, +html[lang="zh-CN"] textarea { + font-family: "PingFang SC", "Helvetica Neue", Helvetica, STHeitiSC-Light, Arial, sans-serif; +} + +html[lang^="zh-"] h1, +html[lang^="zh-"] h2, +html[lang^="zh-"] h3, +html[lang^="zh-"] h4, +html[lang^="zh-"] h5, +html[lang^="zh-"] h6 { + font-weight: 700; +} + +/* Typography for Cyrillic Font */ + +html[lang="bg-BG"] body, +html[lang="bg-BG"] button, +html[lang="bg-BG"] input, +html[lang="bg-BG"] select, +html[lang="bg-BG"] textarea, +html[lang="ru-RU"] body, +html[lang="ru-RU"] button, +html[lang="ru-RU"] input, +html[lang="ru-RU"] select, +html[lang="ru-RU"] textarea, +html[lang="uk"] body, +html[lang="uk"] button, +html[lang="uk"] input, +html[lang="uk"] select, +html[lang="uk"] textarea { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +html[lang="bg-BG"] h1, +html[lang="bg-BG"] h2, +html[lang="bg-BG"] h3, +html[lang="bg-BG"] h4, +html[lang="bg-BG"] h5, +html[lang="bg-BG"] h6, +html[lang="ru-RU"] h1, +html[lang="ru-RU"] h2, +html[lang="ru-RU"] h3, +html[lang="ru-RU"] h4, +html[lang="ru-RU"] h5, +html[lang="ru-RU"] h6, +html[lang="uk"] h1, +html[lang="uk"] h2, +html[lang="uk"] h3, +html[lang="uk"] h4, +html[lang="uk"] h5, +html[lang="uk"] h6 { + font-weight: 700; + line-height: 1.2; +} + +/* Typography for Devanagari Font */ + +html[lang="bn-BD"] body, +html[lang="bn-BD"] button, +html[lang="bn-BD"] input, +html[lang="bn-BD"] select, +html[lang="bn-BD"] textarea, +html[lang="hi-IN"] body, +html[lang="hi-IN"] button, +html[lang="hi-IN"] input, +html[lang="hi-IN"] select, +html[lang="hi-IN"] textarea, +html[lang="mr-IN"] body, +html[lang="mr-IN"] button, +html[lang="mr-IN"] input, +html[lang="mr-IN"] select, +html[lang="mr-IN"] textarea { + font-family: Arial, sans-serif; +} + +html[lang="bn-BD"] h1, +html[lang="bn-BD"] h2, +html[lang="bn-BD"] h3, +html[lang="bn-BD"] h4, +html[lang="bn-BD"] h5, +html[lang="bn-BD"] h6, +html[lang="hi-IN"] h1, +html[lang="hi-IN"] h2, +html[lang="hi-IN"] h3, +html[lang="hi-IN"] h4, +html[lang="hi-IN"] h5, +html[lang="hi-IN"] h6, +html[lang="mr-IN"] h1, +html[lang="mr-IN"] h2, +html[lang="mr-IN"] h3, +html[lang="mr-IN"] h4, +html[lang="mr-IN"] h5, +html[lang="mr-IN"] h6 { + font-weight: 700; +} + +/* Typography for Greek Font */ + +html[lang="el"] body, +html[lang="el"] button, +html[lang="el"] input, +html[lang="el"] select, +html[lang="el"] textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +html[lang="el"] h1, +html[lang="el"] h2, +html[lang="el"] h3, +html[lang="el"] h4, +html[lang="el"] h5, +html[lang="el"] h6 { + font-weight: 700; + line-height: 1.3; +} + +/* Typography for Gujarati Font */ + +html[lang="gu-IN"] body, +html[lang="gu-IN"] button, +html[lang="gu-IN"] input, +html[lang="gu-IN"] select, +html[lang="gu-IN"] textarea { + font-family: Arial, sans-serif; +} + +html[lang="gu-IN"] h1, +html[lang="gu-IN"] h2, +html[lang="gu-IN"] h3, +html[lang="gu-IN"] h4, +html[lang="gu-IN"] h5, +html[lang="gu-IN"] h6 { + font-weight: 700; +} + +/* Typography for Hebrew Font */ + +html[lang="he-IL"] body, +html[lang="he-IL"] button, +html[lang="he-IL"] input, +html[lang="he-IL"] select, +html[lang="he-IL"] textarea { + font-family: "Arial Hebrew", Arial, sans-serif; +} + +html[lang="he-IL"] h1, +html[lang="he-IL"] h2, +html[lang="he-IL"] h3, +html[lang="he-IL"] h4, +html[lang="he-IL"] h5, +html[lang="he-IL"] h6 { + font-weight: 700; +} + +/* Typography for Japanese Font */ + +html[lang="ja"] body, +html[lang="ja"] button, +html[lang="ja"] input, +html[lang="ja"] select, +html[lang="ja"] textarea { + font-family: "Hiragino Kaku Gothic Pro", Meiryo, sans-serif; +} + +html[lang="ja"] h1, +html[lang="ja"] h2, +html[lang="ja"] h3, +html[lang="ja"] h4, +html[lang="ja"] h5, +html[lang="ja"] h6 { + font-weight: 700; +} + +/* Typography for Korean font */ + +html[lang="ko-KR"] body, +html[lang="ko-KR"] button, +html[lang="ko-KR"] input, +html[lang="ko-KR"] select, +html[lang="ko-KR"] textarea { + font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; +} + +html[lang="ko-KR"] h1, +html[lang="ko-KR"] h2, +html[lang="ko-KR"] h3, +html[lang="ko-KR"] h4, +html[lang="ko-KR"] h5, +html[lang="ko-KR"] h6 { + font-weight: 600; +} + +/* Typography for Thai Font */ + +html[lang="th"] h1, +html[lang="th"] h2, +html[lang="th"] h3, +html[lang="th"] h4, +html[lang="th"] h5, +html[lang="th"] h6 { + line-height: 1.65; + font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +html[lang="th"] body, +html[lang="th"] button, +html[lang="th"] input, +html[lang="th"] select, +html[lang="th"] textarea { + line-height: 1.8; + font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +/* Remove letter-spacing for all non-latin alphabets */ + +html[lang="ar"] *, +html[lang="ary"] *, +html[lang="azb"] *, +html[lang="haz"] *, +html[lang="ps"] *, +html[lang^="zh-"] *, +html[lang="bg-BG"] *, +html[lang="ru-RU"] *, +html[lang="uk"] *, +html[lang="bn-BD"] *, +html[lang="hi-IN"] *, +html[lang="mr-IN"] *, +html[lang="el"] *, +html[lang="gu-IN"] *, +html[lang="he-IL"] *, +html[lang="ja"] *, +html[lang="ko-KR"] *, +html[lang="th"] * { + letter-spacing: 0 !important; +} + +/*-------------------------------------------------------------- +6.0 Forms +--------------------------------------------------------------*/ + +label { + color: #333; + display: block; + font-weight: 800; + margin-bottom: 0.5em; +} + +fieldset { + margin-bottom: 1em; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + color: #666; + background: #fff; + background-image: -webkit-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0)); + border: 1px solid #bbb; + -webkit-border-radius: 3px; + border-radius: 3px; + display: block; + padding: 0.7em; + width: 100%; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="number"]:focus, +input[type="tel"]:focus, +input[type="range"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="time"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="color"]:focus, +textarea:focus { + color: #222; + border-color: #333; +} + +select { + border: 1px solid #bbb; + -webkit-border-radius: 3px; + border-radius: 3px; + height: 3em; + max-width: 100%; +} + +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; +} + +input[type="radio"], +input[type="checkbox"] { + margin-right: 0.5em; +} + +input[type="radio"] + label, +input[type="checkbox"] + label { + font-weight: 400; +} + +button, +input[type="button"], +input[type="submit"] { + background-color: #222; + border: 0; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + cursor: pointer; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + line-height: 1; + padding: 1em 2em; + text-shadow: none; + -webkit-transition: background 0.2s; + transition: background 0.2s; +} + +input + button, +input + input[type="button"], +input + input[type="submit"] { + padding: 0.75em 2em; +} + +button.secondary, +input[type="reset"], +input[type="button"].secondary, +input[type="reset"].secondary, +input[type="submit"].secondary { + background-color: #ddd; + color: #222; +} + +button:hover:not( .mejs-container > button ), +button:focus, +input[type="button"]:hover, +input[type="button"]:focus, +input[type="submit"]:hover, +input[type="submit"]:focus { + background: #767676; +} + +button.secondary:hover, +button.secondary:focus, +input[type="reset"]:hover, +input[type="reset"]:focus, +input[type="button"].secondary:hover, +input[type="button"].secondary:focus, +input[type="reset"].secondary:hover, +input[type="reset"].secondary:focus, +input[type="submit"].secondary:hover, +input[type="submit"].secondary:focus { + background: #bbb; +} + +/* Placeholder text color -- selectors need to be separate to work. */ +::-webkit-input-placeholder { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; +} + +:-moz-placeholder { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; +} + +::-moz-placeholder { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; + opacity: 1; + /* Since FF19 lowers the opacity of the placeholder by default */ +} + +:-ms-input-placeholder { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; +} + +/*-------------------------------------------------------------- +7.0 Formatting +--------------------------------------------------------------*/ + +hr { + background-color: #bbb; + border: 0; + height: 1px; + margin-bottom: 1.5em; +} + +/*-------------------------------------------------------------- +8.0 Lists +--------------------------------------------------------------*/ + +ul, +ol { + margin: 0 0 1.5em; + padding: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li > ul, +li > ol { + margin-bottom: 0; + margin-left: 1.5em; +} + +dt { + font-weight: 700; +} + +dd { + margin: 0 1.5em 1.5em; +} + +/*-------------------------------------------------------------- +9.0 Tables +--------------------------------------------------------------*/ + +table { + border-collapse: collapse; + margin: 0 0 1.5em; + width: 100%; +} + +thead th { + border-bottom: 2px solid #bbb; + padding-bottom: 0.5em; +} + +th { + padding: 0.4em; + text-align: left; +} + +tr { + border-bottom: 1px solid #eee; +} + +td { + padding: 0.4em; +} + +th:first-child, +td:first-child { + padding-left: 0; +} + +th:last-child, +td:last-child { + padding-right: 0; +} + +/*-------------------------------------------------------------- +10.0 Links +--------------------------------------------------------------*/ + +a { + color: #222; + text-decoration: none; +} + +a:focus { + outline: thin dotted; +} + +a:hover, +a:active { + color: #000; + outline: 0; +} + +/* Hover effects */ + +.entry-content a, +.entry-summary a, +.comment-content a, +.widget a, +.site-footer .widget-area a, +.posts-navigation a, +.widget_authors a strong { + -webkit-box-shadow: inset 0 -1px 0 rgba(15, 15, 15, 1); + box-shadow: inset 0 -1px 0 rgba(15, 15, 15, 1); + -webkit-transition: color 80ms ease-in, -webkit-box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, -webkit-box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, box-shadow 130ms ease-in-out, -webkit-box-shadow 130ms ease-in-out; +} + +.entry-title a, +.entry-meta a, +.page-links a, +.page-links a .page-number, +.entry-footer a, +.entry-footer .cat-links a, +.entry-footer .tags-links a, +.edit-link a, +.post-navigation a, +.logged-in-as a, +.comment-navigation a, +.comment-metadata a, +.comment-metadata a.comment-edit-link, +.comment-reply-link, +a .nav-title, +.pagination a, +.comments-pagination a, +.site-info a, +.widget .widget-title a, +.widget ul li a, +.site-footer .widget-area ul li a, +.site-footer .widget-area ul li a { + -webkit-box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 1); + box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 1); + text-decoration: none; + -webkit-transition: color 80ms ease-in, -webkit-box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, -webkit-box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, box-shadow 130ms ease-in-out; + transition: color 80ms ease-in, box-shadow 130ms ease-in-out, -webkit-box-shadow 130ms ease-in-out; +} + +.entry-content a:focus, +.entry-content a:hover, +.entry-summary a:focus, +.entry-summary a:hover, +.comment-content a:focus, +.comment-content a:hover, +.widget a:focus, +.widget a:hover, +.site-footer .widget-area a:focus, +.site-footer .widget-area a:hover, +.posts-navigation a:focus, +.posts-navigation a:hover, +.comment-metadata a:focus, +.comment-metadata a:hover, +.comment-metadata a.comment-edit-link:focus, +.comment-metadata a.comment-edit-link:hover, +.comment-reply-link:focus, +.comment-reply-link:hover, +.widget_authors a:focus strong, +.widget_authors a:hover strong, +.entry-title a:focus, +.entry-title a:hover, +.entry-meta a:focus, +.entry-meta a:hover, +.page-links a:focus .page-number, +.page-links a:hover .page-number, +.entry-footer a:focus, +.entry-footer a:hover, +.entry-footer .cat-links a:focus, +.entry-footer .cat-links a:hover, +.entry-footer .tags-links a:focus, +.entry-footer .tags-links a:hover, +.post-navigation a:focus, +.post-navigation a:hover, +.pagination a:not(.prev):not(.next):focus, +.pagination a:not(.prev):not(.next):hover, +.comments-pagination a:not(.prev):not(.next):focus, +.comments-pagination a:not(.prev):not(.next):hover, +.logged-in-as a:focus, +.logged-in-as a:hover, +a:focus .nav-title, +a:hover .nav-title, +.edit-link a:focus, +.edit-link a:hover, +.site-info a:focus, +.site-info a:hover, +.widget .widget-title a:focus, +.widget .widget-title a:hover, +.widget ul li a:focus, +.widget ul li a:hover { + color: #000; + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); +} + +/* Fixes linked images */ +.entry-content a img, +.comment-content a img, +.widget a img { + -webkit-box-shadow: 0 0 0 8px #fff; + box-shadow: 0 0 0 8px #fff; +} + +.post-navigation a:focus .icon, +.post-navigation a:hover .icon { + color: #222; +} + +/*-------------------------------------------------------------- +11.0 Featured Image Hover +--------------------------------------------------------------*/ + +.post-thumbnail { + margin-bottom: 1em; +} + +.post-thumbnail a img { + -webkit-backface-visibility: hidden; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.post-thumbnail a:hover img, +.post-thumbnail a:focus img { + opacity: 0.7; +} + +/*-------------------------------------------------------------- +12.0 Navigation +--------------------------------------------------------------*/ + +.navigation-top { + background: #fff; + border-bottom: 1px solid #eee; + border-top: 1px solid #eee; + font-size: 16px; + font-size: 1rem; + position: relative; +} + +.navigation-top .wrap { + max-width: 1000px; + padding: 0; +} + +.navigation-top a { + color: #222; + font-weight: 600; + -webkit-transition: color 0.2s; + transition: color 0.2s; +} + +.navigation-top .current-menu-item > a, +.navigation-top .current_page_item > a { + color: #767676; +} + +.main-navigation { + clear: both; + display: block; +} + +.main-navigation ul { + background: #fff; + list-style: none; + margin: 0; + padding: 0 1.5em; + text-align: left; +} + +/* Hide the menu on small screens when JavaScript is available. + * It only works with JavaScript. + */ + +.js .main-navigation ul, +.main-navigation .menu-item-has-children > a > .icon, +.main-navigation .page_item_has_children > a > .icon, +.main-navigation ul a > .icon { + display: none; +} + +.main-navigation > div > ul { + border-top: 1px solid #eee; + padding: 0.75em 1.695em; +} + +.js .main-navigation.toggled-on > div > ul { + display: block; +} + +.main-navigation ul ul { + padding: 0 0 0 1.5em; +} + +.main-navigation ul ul.toggled-on { + display: block; +} + +.main-navigation ul ul a { + letter-spacing: 0; + padding: 0.4em 0; + position: relative; + text-transform: none; +} + +.main-navigation li { + border-bottom: 1px solid #eee; + position: relative; +} + +.main-navigation li li, +.main-navigation li:last-child { + border: 0; +} + +.main-navigation a { + display: block; + padding: 0.5em 0; + text-decoration: none; +} + +.main-navigation a:hover { + color: #767676; +} + +/* Menu toggle */ + +.menu-toggle { + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + color: #222; + display: none; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + line-height: 1.5; + margin: 1px auto 2px; + padding: 1em; + text-shadow: none; +} + +/* Display the menu toggle when JavaScript is available. */ + +.js .menu-toggle { + display: block; +} + +.main-navigation.toggled-on ul.nav-menu { + display: block; +} + +.menu-toggle:hover, +.menu-toggle:focus { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.menu-toggle:focus { + outline: thin solid; +} + +.menu-toggle .icon { + margin-right: 0.5em; + top: -2px; +} + +.toggled-on .menu-toggle .icon-bars, +.menu-toggle .icon-close { + display: none; +} + +.toggled-on .menu-toggle .icon-close { + display: inline-block; +} + +/* Dropdown Toggle */ + +.dropdown-toggle { + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + color: #222; + display: block; + font-size: 16px; + right: -0.5em; + line-height: 1.5; + margin: 0 auto; + padding: 0.5em; + position: absolute; + text-shadow: none; + top: 0; +} + +.dropdown-toggle:hover, +.dropdown-toggle:focus { + background: transparent; +} + +.dropdown-toggle:focus { + outline: thin dotted; +} + +.dropdown-toggle.toggled-on .icon { + -ms-transform: rotate(-180deg); /* IE 9 */ + -webkit-transform: rotate(-180deg); /* Chrome, Safari, Opera */ + transform: rotate(-180deg); +} + +/* Scroll down arrow */ + +.site-header .menu-scroll-down { + display: none; +} + +/*-------------------------------------------------------------- +13.0 Layout +--------------------------------------------------------------*/ + +html { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*:before, +*:after { + /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ + -webkit-box-sizing: inherit; + -moz-box-sizing: inherit; + box-sizing: inherit; +} + +body { + background: #fff; + /* Fallback for when there is no custom background color defined. */ +} + +#page { + position: relative; + word-wrap: break-word; +} + +.wrap { + margin-left: auto; + margin-right: auto; + max-width: 700px; + padding-left: 2em; + padding-right: 2em; +} + +.wrap:after { + clear: both; + content: ""; + display: block; +} + +/*-------------------------------------------------------------- +13.1 Header +--------------------------------------------------------------*/ + +#masthead .wrap { + position: relative; +} + +.site-header { + background-color: #fafafa; + position: relative; +} + +/* Site branding */ + +.site-branding { + padding: 1em 0; + position: relative; + -webkit-transition: margin-bottom 0.2s; + transition: margin-bottom 0.2s; + z-index: 3; +} + +.site-branding a { + text-decoration: none; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.site-branding a:hover, +.site-branding a:focus { + opacity: 0.7; +} + +.site-title { + clear: none; + font-size: 24px; + font-size: 1.5rem; + font-weight: 800; + line-height: 1.25; + letter-spacing: 0.08em; + margin: 0; + padding: 0; + text-transform: uppercase; +} + +.site-title, +.site-title a { + color: #222; + opacity: 1; /* Prevent opacity from changing during selective refreshes in the customize preview */ +} + +body.has-header-image .site-title, +body.has-header-video .site-title, +body.has-header-image .site-title a, +body.has-header-video .site-title a { + color: #fff; +} + +.site-description { + color: #666; + font-size: 13px; + font-size: 0.8125rem; + margin-bottom: 0; +} + +body.has-header-image .site-description, +body.has-header-video .site-description { + color: #fff; + opacity: 0.8; +} + +.custom-logo-link { + display: inline-block; + padding-right: 1em; + vertical-align: middle; + width: auto; +} + +.custom-logo-link img { + display: inline-block; + max-height: 80px; + width: auto; +} + +body.home.title-tagline-hidden.has-header-image .custom-logo-link img, +body.home.title-tagline-hidden.has-header-video .custom-logo-link img { + max-height: 200px; + max-width: 100%; +} + +.custom-logo-link a:hover, +.custom-logo-link a:focus { + opacity: 0.9; +} + +body:not(.title-tagline-hidden) .site-branding-text { + display: inline-block; + max-width: 100%; + vertical-align: middle; +} + +.custom-header { + position: relative; +} + +.has-header-image.twentyseventeen-front-page .custom-header, +.has-header-video.twentyseventeen-front-page .custom-header, +.has-header-image.home.blog .custom-header, +.has-header-video.home.blog .custom-header { + display: table; + height: 300px; + height: 75vh; + width: 100%; +} + +.custom-header-media { + bottom: 0; + left: 0; + overflow: hidden; + position: absolute; + right: 0; + top: 0; + width: 100%; +} + +.custom-header-media:before { + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,000000+100&0+0,0.3+75 */ + background: -moz-linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 75%, rgba(0, 0, 0, 0.3) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 75%, rgba(0, 0, 0, 0.3) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 75%, rgba(0, 0, 0, 0.3) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#4d000000", GradientType=0); /* IE6-9 */ + bottom: 0; + content: ""; + display: block; + height: 100%; + left: 0; + position: absolute; + right: 0; + z-index: 2; +} + +.has-header-image .custom-header-media img, +.has-header-video .custom-header-media video, +.has-header-video .custom-header-media iframe { + position: fixed; + height: auto; + left: 50%; + max-width: 1000%; + min-height: 100%; + min-width: 100%; + min-width: 100vw; /* vw prevents 1px gap on left that 100% has */ + width: auto; + top: 50%; + padding-bottom: 1px; /* Prevent header from extending beyond the footer */ + -ms-transform: translateX(-50%) translateY(-50%); + -moz-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); +} + +.wp-custom-header .wp-custom-header-video-button { /* Specificity prevents .color-dark button overrides */ + background-color: rgba(34, 34, 34, 0.5); + border: 1px solid rgba(255, 255, 255, 0.6); + color: rgba(255, 255, 255, 0.6); + height: 45px; + overflow: hidden; + padding: 0; + position: fixed; + right: 30px; + top: 30px; + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + width: 45px; +} + +.wp-custom-header .wp-custom-header-video-button:hover, +.wp-custom-header .wp-custom-header-video-button:focus { /* Specificity prevents .color-dark button overrides */ + border-color: rgba(255, 255, 255, 0.8); + background-color: rgba(34, 34, 34, 0.8); + color: #fff; +} + +.admin-bar .wp-custom-header-video-button { + top: 62px; +} + +.has-header-image:not(.twentyseventeen-front-page):not(.home) .custom-header-media img { + bottom: 0; + position: absolute; + top: auto; + -ms-transform: translateX(-50%) translateY(0); + -moz-transform: translateX(-50%) translateY(0); + -webkit-transform: translateX(-50%) translateY(0); + transform: translateX(-50%) translateY(0); +} + +/* For browsers that support 'object-fit' */ +@supports ( object-fit: cover ) { + .has-header-image .custom-header-media img, + .has-header-video .custom-header-media video, + .has-header-image:not(.twentyseventeen-front-page):not(.home) .custom-header-media img { + height: 100%; + left: 0; + -o-object-fit: cover; + object-fit: cover; + top: 0; + -ms-transform: none; + -moz-transform: none; + -webkit-transform: none; + transform: none; + width: 100%; + } +} + +/* Hides div in Customizer preview when header images or videos change. */ + +body:not(.has-header-image):not(.has-header-video) .custom-header-media { + display: none; +} + +.has-header-image.twentyseventeen-front-page .site-branding, +.has-header-video.twentyseventeen-front-page .site-branding, +.has-header-image.home.blog .site-branding, +.has-header-video.home.blog .site-branding { + display: table-cell; + height: 100%; + vertical-align: bottom; +} + +/*-------------------------------------------------------------- +13.2 Front Page +--------------------------------------------------------------*/ + +.twentyseventeen-front-page .site-content { + padding: 0; +} + +.twentyseventeen-panel { + overflow: hidden; + position: relative; +} + +.panel-image { + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size: cover; + background-size: cover; + position: relative; +} + +.panel-image:before { + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,000000+100&0+0,0.3+100 */ /* FF3.6-15 */ + background: -webkit-linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 100%); /* Chrome10-25,Safari5.1-6 */ + background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.3))); + background: -webkit-linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 100%); + background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#4d000000", GradientType=0); /* IE6-9 */ + bottom: 0; + content: ""; + left: 0; + right: 0; + position: absolute; + top: 100px; +} + +.twentyseventeen-front-page article:not(.has-post-thumbnail):not(:first-child) { + border-top: 1px solid #ddd; +} + +.panel-content { + position: relative; +} + +.panel-content .wrap { + padding-bottom: 0.5em; + padding-top: 1.75em; +} + +/* Panel edit link */ + +.twentyseventeen-panel .edit-link { + display: block; + margin: 0.3em 0 0; +} + +.twentyseventeen-panel .entry-header .edit-link { + font-size: 14px; + font-size: 0.875rem; +} + +/* Front Page - Recent Posts */ + +.twentyseventeen-front-page .panel-content .recent-posts article { + border: 0; + color: #333; + margin-bottom: 3em; +} + +.recent-posts .entry-header { + margin-bottom: 1.2em; +} + +.page .panel-content .recent-posts .entry-title { + font-size: 20px; + font-size: 1.25rem; + font-weight: 300; + letter-spacing: 0; + text-transform: none; +} + +.twentyseventeen-panel .recent-posts .entry-header .edit-link { + color: #222; + display: inline-block; + font-size: 11px; + font-size: 0.6875rem; + margin-left: 1em; +} + +/*-------------------------------------------------------------- +13.3 Regular Content +--------------------------------------------------------------*/ + +.site-content-contain { + background-color: #fff; + position: relative; +} + +.site-content { + padding: 2.5em 0 0; +} + +/*-------------------------------------------------------------- +13.4 Posts +--------------------------------------------------------------*/ + +/* Post Landing Page */ + +.sticky { + position: relative; +} + +.post:not(.sticky) .icon-thumb-tack { + display: none; +} + +.sticky .icon-thumb-tack { + display: block; + height: 18px; + left: -1.5em; + position: absolute; + top: 1.65em; + width: 20px; +} + +.page .panel-content .entry-title, +.page-title, +body.page:not(.twentyseventeen-front-page) .entry-title { + color: #222; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +.entry-header .entry-title { + margin-bottom: 0.25em; +} + +.entry-title a { + color: #333; + text-decoration: none; + margin-left: -2px; +} + +.entry-title:not(:first-child) { + padding-top: 0; +} + +.entry-meta { + color: #767676; + font-size: 11px; + font-size: 0.6875rem; + font-weight: 800; + letter-spacing: 0.1818em; + padding-bottom: 0.25em; + text-transform: uppercase; +} + +.entry-meta a { + color: #767676; +} + +.byline, +.updated:not(.published) { + display: none; +} + +.single .byline, +.group-blog .byline { + display: inline; +} + +.pagination, +.comments-pagination { + border-top: 1px solid #eee; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + padding: 2em 0 3em; + text-align: center; +} + +.pagination .icon, +.comments-pagination .icon { + width: 0.666666666em; + height: 0.666666666em; +} + +.comments-pagination { + border: 0; +} + +.page-numbers { + display: none; + padding: 0.5em 0.75em; +} + +.page-numbers.current { + color: #767676; + display: inline-block; +} + +.page-numbers.current .screen-reader-text { + clip: auto; + height: auto; + overflow: auto; + position: relative !important; + width: auto; +} + +.prev.page-numbers, +.next.page-numbers { + background-color: #ddd; + -webkit-border-radius: 2px; + border-radius: 2px; + display: inline-block; + font-size: 24px; + font-size: 1.5rem; + line-height: 1; + padding: 0.25em 0.5em 0.4em; +} + +.prev.page-numbers, +.next.page-numbers { + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; +} + +.prev.page-numbers:focus, +.prev.page-numbers:hover, +.next.page-numbers:focus, +.next.page-numbers:hover { + background-color: #767676; + color: #fff; +} + +.prev.page-numbers { + float: left; +} + +.next.page-numbers { + float: right; +} + +/* Aligned blockquotes */ + +.entry-content blockquote.alignleft, +.entry-content blockquote.alignright { + color: #666; + font-size: 13px; + font-size: 0.8125rem; + width: 48%; +} + +/* Blog landing, search, archives */ + +.blog .site-main > article, +.archive .site-main > article, +.search .site-main > article { + padding-bottom: 2em; +} + +body:not(.twentyseventeen-front-page) .entry-header { + padding: 1em 0; +} + +body:not(.twentyseventeen-front-page) .entry-header, +body:not(.twentyseventeen-front-page) .entry-content, +body:not(.twentyseventeen-front-page) #comments { + margin-left: auto; + margin-right: auto; +} + +body:not(.twentyseventeen-front-page) .entry-header { + padding-top: 0; +} + +.blog .entry-meta a.post-edit-link, +.archive .entry-meta a.post-edit-link, +.search .entry-meta a.post-edit-link { + color: #222; + display: inline-block; + margin-left: 1em; + white-space: nowrap; +} + +.search .page .entry-meta a.post-edit-link { + margin-left: 0; + white-space: nowrap; +} + +.taxonomy-description { + color: #666; + font-size: 13px; + font-size: 0.8125rem; +} + +/* More tag */ + +.entry-content .more-link:before { + content: ""; + display: block; + margin-top: 1.5em; +} + +/* Single Post */ + +.single-post:not(.has-sidebar) #primary, +.page.page-one-column:not(.twentyseventeen-front-page) #primary, +.archive.page-one-column:not(.has-sidebar) .page-header, +.archive.page-one-column:not(.has-sidebar) #primary { + margin-left: auto; + margin-right: auto; + max-width: 740px; +} + +.single-featured-image-header { + background-color: #fafafa; + border-bottom: 1px solid #eee; +} + +.single-featured-image-header img { + display: block; + margin: auto; +} + +.page-links { + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + padding: 2em 0 3em; +} + +.page-links .page-number { + color: #767676; + display: inline-block; + padding: 0.5em 1em; +} + +.page-links a { + display: inline-block; +} + +.page-links a .page-number { + color: #222; +} + +/* Entry footer */ + +.entry-footer { + border-bottom: 1px solid #eee; + border-top: 1px solid #eee; + margin-top: 2em; + padding: 2em 0; +} + +.entry-footer .cat-links, +.entry-footer .tags-links { + display: block; + font-size: 11px; + font-size: 0.6875rem; + font-weight: 800; + letter-spacing: 0.1818em; + padding-left: 2.5em; + position: relative; + text-transform: uppercase; +} + +.entry-footer .cat-links + .tags-links { + margin-top: 1em; +} + +.entry-footer .cat-links a, +.entry-footer .tags-links a { + color: #333; +} + +.entry-footer .cat-links .icon, +.entry-footer .tags-links .icon { + color: #767676; + left: 0; + margin-right: 0.5em; + position: absolute; + top: 2px; +} + +.entry-footer .edit-link { + display: inline-block; +} + +.entry-footer .edit-link a.post-edit-link { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +.entry-footer .edit-link a.post-edit-link:hover, +.entry-footer .edit-link a.post-edit-link:focus { + background-color: #767676; +} + +/* Post Formats */ + +.blog .format-status .entry-title, +.archive .format-status .entry-title, +.blog .format-aside .entry-title, +.archive .format-aside .entry-title { + display: none; +} + +.format-quote blockquote { + color: #333; + font-size: 20px; + font-size: 1.25rem; + font-weight: 300; + overflow: visible; + position: relative; +} + +.format-quote blockquote .icon { + display: block; + height: 20px; + left: -1.25em; + position: absolute; + top: 0.4em; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); + width: 20px; +} + +/* Post Navigation */ + +.post-navigation { + font-weight: 800; + margin: 3em 0; +} + +.post-navigation .nav-links { + padding: 1em 0; +} + +.nav-subtitle { + background: transparent; + color: #767676; + display: block; + font-size: 11px; + font-size: 0.6875rem; + letter-spacing: 0.1818em; + margin-bottom: 1em; + text-transform: uppercase; +} + +.nav-title { + color: #333; + font-size: 15px; + font-size: 0.9375rem; +} + +.post-navigation .nav-next { + margin-top: 1.5em; +} + +.nav-links .nav-previous .nav-title .nav-title-icon-wrapper { + margin-right: 0.5em; +} + +.nav-links .nav-next .nav-title .nav-title-icon-wrapper { + margin-left: 0.5em; +} + +/*-------------------------------------------------------------- +13.5 Pages +--------------------------------------------------------------*/ + +.page-header { + padding-bottom: 2em; +} + +.page .entry-header .edit-link { + font-size: 14px; + font-size: 0.875rem; +} + +.search .page .entry-header .edit-link { + font-size: 11px; + font-size: 0.6875rem; +} + +.page-links { + clear: both; + margin: 0 0 1.5em; +} + +.page:not(.home) #content { + padding-bottom: 1.5em; +} + +/* 404 page */ + +.error404 .page-content { + padding-bottom: 4em; +} + +.error404 .page-content .search-form, +.search .page-content .search-form { + margin-bottom: 3em; +} + +/*-------------------------------------------------------------- +13.6 Footer +--------------------------------------------------------------*/ + +.site-footer { + border-top: 1px solid #eee; +} + +.site-footer .wrap { + padding-bottom: 1.5em; + padding-top: 2em; +} + +/* Footer widgets */ + +.site-footer .widget-area { + padding-bottom: 2em; + padding-top: 2em; +} + +/* Social nav */ + +.social-navigation { + font-size: 16px; + font-size: 1rem; + margin-bottom: 1em; +} + +.social-navigation ul { + list-style: none; + margin-bottom: 0; + margin-left: 0; +} + +.social-navigation li { + display: inline; +} + +.social-navigation a { + background-color: #767676; + -webkit-border-radius: 40px; + border-radius: 40px; + color: #fff; + display: inline-block; + height: 40px; + margin: 0 1em 0.5em 0; + text-align: center; + width: 40px; +} + +.social-navigation a:hover, +.social-navigation a:focus { + background-color: #333; +} + +.social-navigation .icon { + height: 16px; + top: 12px; + width: 16px; + vertical-align: top; +} + +/* Site info */ + +.site-info { + font-size: 14px; + font-size: 0.875rem; + margin-bottom: 1em; +} + +.site-info a { + color: #666; +} + +.site-info .sep { + margin: 0; + display: block; + visibility: hidden; + height: 0; + width: 100%; +} + +.site-info span[role=separator] { + padding: 0 0.2em 0 0.4em; +} + +.site-info span[role=separator]::before { + content: '\002f'; +} + +/*-------------------------------------------------------------- +14.0 Comments +--------------------------------------------------------------*/ + +#comments { + clear: both; + padding: 2em 0 0.5em; +} + +.comments-title { + font-size: 20px; + font-size: 1.25rem; + margin-bottom: 1.5em; +} + +.comment-list, +.comment-list .children { + list-style: none; + margin: 0; + padding: 0; +} + +.comment-list li:before { + display: none; +} + +.comment-body { + margin-left: 65px; +} + +.comment-author { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0.4em; + position: relative; + z-index: 2; +} + +.comment-author .avatar { + height: 50px; + left: -65px; + position: absolute; + width: 50px; +} + +.comment-author .says { + display: none; +} + +.comment-meta { + margin-bottom: 1.5em; +} + +.comment-metadata { + color: #767676; + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + text-transform: uppercase; +} + +.comment-metadata a { + color: #767676; +} + +.comment-metadata a.comment-edit-link { + color: #222; + margin-left: 1em; +} + +.comment-body { + color: #333; + font-size: 14px; + font-size: 0.875rem; + margin-bottom: 4em; +} + +.comment-reply-link { + font-weight: 800; + position: relative; +} + +.comment-reply-link .icon { + color: #222; + left: -2em; + height: 1em; + position: absolute; + top: 0; + width: 1em; +} + +.children .comment-author .avatar { + height: 30px; + left: -45px; + width: 30px; +} + +.bypostauthor > .comment-body > .comment-meta > .comment-author .avatar { + border: 1px solid #333; + padding: 2px; +} + +.no-comments, +.comment-awaiting-moderation { + color: #767676; + font-size: 14px; + font-size: 0.875rem; + font-style: italic; +} + +.comments-pagination { + margin: 2em 0 3em; +} + +.form-submit { + text-align: right; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 10px 0 0; +} + +.comment-form .comment-form-cookies-consent label { + display: inline; +} + +/*-------------------------------------------------------------- +15.0 Widgets +--------------------------------------------------------------*/ + +#secondary { + padding: 1em 0 2em; +} + +.widget { + padding-bottom: 3em; +} + +h2.widget-title { + color: #222; + font-size: 13px; + font-size: 0.8125rem; + font-weight: 800; + letter-spacing: 0.1818em; + margin-bottom: 1.5em; + text-transform: uppercase; +} + +.widget-title a { + color: inherit; +} + +/* widget forms */ + +.widget select { + width: 100%; +} + + +/* widget lists */ + +.widget ul { + list-style: none; + margin: 0; +} + +.widget ul li, +.widget ol li { + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + padding: 0.5em 0; +} + +.widget:not(.widget_tag_cloud) ul li + li { + margin-top: -1px; +} + +.widget ul li ul { + margin: 0 0 -1px; + padding: 0; + position: relative; +} + +.widget ul li li { + border: 0; + padding-left: 24px; + padding-left: 1.5rem; +} + +/* Widget lists of links */ + +.widget_top-posts ul li ul, +.widget_rss_links ul li ul, +.widget-grofile ul.grofile-links li ul, +.widget_pages ul li ul, +.widget_meta ul li ul { + bottom: 0; +} + +.widget_nav_menu ul li li, +.widget_top-posts ul li, +.widget_top-posts ul li li, +.widget_rss_links ul li, +.widget_rss_links ul li li, +.widget-grofile ul.grofile-links li, +.widget-grofile ul.grofile-links li li { + padding-bottom: 0.25em; + padding-top: 0.25em; +} + +.widget_rss ul li { + padding-bottom: 1em; + padding-top: 1em; +} + +/* Widget markup */ + +.widget .post-date, +.widget .rss-date { + font-size: 0.81em; +} + +/* Text widget */ + +.widget_text { + word-wrap: break-word; +} + +.widget_text ul { + list-style: disc; + margin: 0 0 1.5em 1.5em; +} + +.widget_text ol { + list-style: decimal; +} + +.widget_text ul li, +.widget_text ol li { + border: none; +} + +.widget_text ul li:last-child, +.widget_text ol li:last-child { + padding-bottom: 0; +} + +.widget_text ul li ul { + margin: 0 0 0 1.5em; +} + +.widget_text ul li li { + padding-left: 0; + padding-right: 0; +} + +.widget_text ol li { + list-style-position: inside; +} + +.widget_text ol li + li { + margin-top: -1px; +} + +/* RSS Widget */ + +.widget_rss .widget-title .rsswidget:first-child { + float: right; +} + +.widget_rss .widget-title .rsswidget:first-child:hover { + background-color: transparent; +} + +.widget_rss .widget-title .rsswidget:first-child img { + display: block; +} + +.widget_rss ul li { + padding: 2.125em 0; +} + +.widget_rss ul li:first-child { + border-top: none; + padding-top: 0; +} + +.widget_rss li .rsswidget { + font-size: 22px; + font-size: 1.375rem; + font-weight: 300; + line-height: 1.4; +} + +.widget_rss .rss-date, +.widget_rss li cite { + color: #767676; + display: block; + font-size: 10px; + font-size: 0.625rem; + font-style: normal; + font-weight: 800; + letter-spacing: 0.18em; + line-height: 1.5; + text-transform: uppercase; +} + +.widget_rss .rss-date { + margin: 0.5em 0 1.5em; + padding: 0; +} + +.widget_rss .rssSummary { + margin-bottom: 0.5em; +} + +/* Contact Info Widget */ + +.widget_contact_info .contact-map { + margin-bottom: 0.5em; +} + +/* Gravatar */ + +.widget-grofile h4 { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0; +} + +/* Recent Comments */ + +.widget_recent_comments table, +.widget_recent_comments th, +.widget_recent_comments td { + border: 0; +} + +/* Recent Posts widget */ + +.widget_recent_entries .post-date { + display: block; +} + +/* Search */ + +.search-form { + position: relative; +} + +.search-form .search-submit { + bottom: 3px; + padding: 0.5em 1em; + position: absolute; + right: 3px; + top: 3px; +} + +.search-form .search-submit .icon { + height: 24px; + top: -2px; + width: 24px; +} + +/* Tag cloud widget */ + +.tagcloud ul li { + float: left; + border-top: 0; + border-bottom: 0; + padding: 0; + margin: 4px 4px 0 0; +} + +.tagcloud, +.widget_tag_cloud, +.wp_widget_tag_cloud { + line-height: 1.5; +} + +.widget .tagcloud a, +.widget.widget_tag_cloud a, +.wp_widget_tag_cloud a { + border: 1px solid #ddd; + -webkit-box-shadow: none; + box-shadow: none; + display: block; + padding: 4px 10px 5px; + position: relative; + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + width: auto; + word-wrap: break-word; + z-index: 0; +} + +.widget .tagcloud a:hover, +.widget .tagcloud a:focus, +.widget.widget_tag_cloud a:hover, +.widget.widget_tag_cloud a:focus, +.wp_widget_tag_cloud a:hover, +.wp_widget_tag_cloud a:focus { + border-color: #bbb; + -webkit-box-shadow: none; + box-shadow: none; + text-decoration: none; +} + +/* Calendar widget */ + +.widget_calendar th, +.widget_calendar td { + text-align: center; +} + +.widget_calendar tfoot td { + border: 0; +} + +/* Gallery widget */ + +.gallery-columns-5 .gallery-caption, +.gallery-columns-6 .gallery-caption, +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + +/*-------------------------------------------------------------- +16.0 Media +--------------------------------------------------------------*/ + +img, +video { + height: auto; /* Make sure images are scaled correctly. */ + max-width: 100%; /* Adhere to container width. */ +} + +img.alignleft, +img.alignright { + float: none; + margin: 0; +} + +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +/* Make sure embeds and iframes fit their containers. */ + +embed, +iframe, +object { + margin-bottom: 1.5em; + max-width: 100%; +} + +/* Remove bottom on embeds that wrapped in paragraphs via wpautop. */ + +p > embed:only-child, +p > iframe:only-child, +p > object:only-child { + margin-bottom: 0; +} + +.wp-caption, +.gallery-caption { + color: #666; + font-size: 13px; + font-size: 0.8125rem; + font-style: italic; + margin-bottom: 1.5em; + max-width: 100%; +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption .wp-caption-text { + margin: 0.8075em 0; +} + +/* Media Elements */ + +.mejs-container { + margin-bottom: 1.5em; +} + +/* Audio Player */ + +.mejs-controls a.mejs-horizontal-volume-slider, +.mejs-controls a.mejs-horizontal-volume-slider:focus, +.mejs-controls a.mejs-horizontal-volume-slider:hover { + background: transparent; + border: 0; +} + +/* Playlist Color Overrides: Light */ + +.site-content .wp-playlist-light { + border-color: #eee; + color: #222; +} + +.site-content .wp-playlist-light .wp-playlist-current-item .wp-playlist-item-album { + color: #333; +} + +.site-content .wp-playlist-light .wp-playlist-current-item .wp-playlist-item-artist { + color: #767676; +} + +.site-content .wp-playlist-light .wp-playlist-item { + border-bottom: 1px dotted #eee; + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; +} + +.site-content .wp-playlist-light .wp-playlist-item:hover, +.site-content .wp-playlist-light .wp-playlist-item:focus { + border-bottom-color: rgba(0, 0, 0, 0); + background-color: #767676; + color: #fff; +} + +.site-content .wp-playlist-light a.wp-playlist-caption:hover, +.site-content .wp-playlist-light .wp-playlist-item:hover a, +.site-content .wp-playlist-light .wp-playlist-item:focus a { + color: #fff; +} + +/* Playlist Color Overrides: Dark */ + +.site-content .wp-playlist-dark { + background: #222; + border-color: #333; +} + +.site-content .wp-playlist-dark .mejs-container .mejs-controls { + background-color: #333; +} + +.site-content .wp-playlist-dark .wp-playlist-caption { + color: #fff; +} + +.site-content .wp-playlist-dark .wp-playlist-current-item .wp-playlist-item-album { + color: #eee; +} + +.site-content .wp-playlist-dark .wp-playlist-current-item .wp-playlist-item-artist { + color: #aaa; +} + +.site-content .wp-playlist-dark .wp-playlist-playing { + background-color: #333; +} + +.site-content .wp-playlist-dark .wp-playlist-item { + border-bottom: 1px dotted #555; + -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.3s ease-in-out; +} + +.site-content .wp-playlist-dark .wp-playlist-item:hover, +.site-content .wp-playlist-dark .wp-playlist-item:focus { + border-bottom-color: rgba(0, 0, 0, 0); + background-color: #aaa; + color: #222; +} + +.site-content .wp-playlist-dark a.wp-playlist-caption:hover, +.site-content .wp-playlist-dark .wp-playlist-item:hover a, +.site-content .wp-playlist-dark .wp-playlist-item:focus a { + color: #222; +} + +/* Playlist Style Overrides */ + +.site-content .wp-playlist { + padding: 0.625em 0.625em 0.3125em; +} + +.site-content .wp-playlist-current-item .wp-playlist-item-title { + font-weight: 700; +} + +.site-content .wp-playlist-current-item .wp-playlist-item-album { + font-style: normal; +} + +.site-content .wp-playlist-current-item .wp-playlist-item-artist { + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + text-transform: uppercase; +} + +.site-content .wp-playlist-item { + padding: 0 0.3125em; + cursor: pointer; +} + +.site-content .wp-playlist-item:last-of-type { + border-bottom: none; +} + +.site-content .wp-playlist-item a { + padding: 0.3125em 0; + border-bottom: none; +} + +.site-content .wp-playlist-item a, +.site-content .wp-playlist-item a:focus, +.site-content .wp-playlist-item a:hover { + -webkit-box-shadow: none; + box-shadow: none; + background: transparent; +} + +.site-content .wp-playlist-item-length { + top: 5px; +} + +/* SVG Icons base styles */ + +.icon { + display: inline-block; + fill: currentColor; + height: 1em; + position: relative; /* Align more nicely with capital letters */ + top: -0.0625em; + vertical-align: middle; + width: 1em; +} + +/*-------------------------------------------------------------- +16.1 Galleries +--------------------------------------------------------------*/ + +.gallery-item { + display: inline-block; + text-align: left; + vertical-align: top; + margin: 0 0 1.5em; + padding: 0 1em 0 0; + width: 50%; +} + +.gallery-columns-1 .gallery-item { + width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; +} + +.gallery-item a, +.gallery-item a:hover, +.gallery-item a:focus, +.widget-area .gallery-item a, +.widget-area .gallery-item a:hover, +.widget-area .gallery-item a:focus { + -webkit-box-shadow: none; + box-shadow: none; + background: none; + display: inline-block; + max-width: 100%; +} + +.gallery-item a img { + display: block; + -webkit-transition: -webkit-filter 0.2s ease-in; + transition: -webkit-filter 0.2s ease-in; + transition: filter 0.2s ease-in; + transition: filter 0.2s ease-in, -webkit-filter 0.2s ease-in; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.gallery-item a:hover img, +.gallery-item a:focus img { + -webkit-filter: opacity(60%); + filter: opacity(60%); +} + +.gallery-caption { + display: block; + text-align: left; + padding: 0 10px 0 0; + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +17.0 Customizer +--------------------------------------------------------------*/ + +.highlight-front-sections.twentyseventeen-customizer.twentyseventeen-front-page .twentyseventeen-panel:after { + border: 2px dashed #0085ba; /* Matches visible edit shortcuts. */ + bottom: 1em; + content: ""; + display: block; + left: 1em; + position: absolute; + right: 1em; + top: 1em; + z-index: 1; +} + +.highlight-front-sections.twentyseventeen-customizer.twentyseventeen-front-page .twentyseventeen-panel .panel-content { + z-index: 2; /* Prevent :after from preventing interactions within the section */ +} + +/* Used for placeholder text */ +.twentyseventeen-customizer.twentyseventeen-front-page .twentyseventeen-panel .twentyseventeen-panel-title { + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 700; + letter-spacing: 1px; + padding: 3em; + text-transform: uppercase; + text-align: center; +} + +/* Show borders on the custom page panels only when the front page sections are being edited */ +.highlight-front-sections.twentyseventeen-customizer.twentyseventeen-front-page .twentyseventeen-panel:nth-of-type(1):after { + border: none; +} + +.twentyseventeen-front-page.twentyseventeen-customizer #primary article.panel-placeholder { + border: 0; +} + +/* Add some space around the visual edit shortcut buttons. */ +.twentyseventeen-panel > .customize-partial-edit-shortcut > button { + top: 30px; + left: 30px; +} + +/* Ensure that placeholder icons are visible. */ +.twentyseventeen-panel .customize-partial-edit-shortcut-hidden:before { + visibility: visible; +} + +/*-------------------------------------------------------------- +18.0 SVGs Fallbacks +--------------------------------------------------------------*/ + +.svg-fallback { + display: none; +} + +.no-svg .svg-fallback { + display: inline-block; +} + +.no-svg .dropdown-toggle { + padding: 0.5em 0 0; + right: 0; + text-align: center; + width: 2em; +} + +.no-svg .dropdown-toggle .svg-fallback.icon-angle-down { + font-size: 20px; + font-size: 1.25rem; + font-weight: 400; + line-height: 1; + -webkit-transform: rotate(180deg); /* Chrome, Safari, Opera */ + -ms-transform: rotate(180deg); /* IE 9 */ + transform: rotate(180deg); +} + +.no-svg .dropdown-toggle.toggled-on .svg-fallback.icon-angle-down { + -webkit-transform: rotate(0); /* Chrome, Safari, Opera */ + -ms-transform: rotate(0); /* IE 9 */ + transform: rotate(0); +} + +.no-svg .dropdown-toggle .svg-fallback.icon-angle-down:before { + content: "\005E"; +} + +/* Social Menu fallbacks */ + +.no-svg .social-navigation a { + background: transparent; + color: #222; + height: auto; + width: auto; +} + +/* Show screen reader text in some cases */ + +.no-svg .next.page-numbers .screen-reader-text, +.no-svg .prev.page-numbers .screen-reader-text, +.no-svg .social-navigation li a .screen-reader-text, +.no-svg .search-submit .screen-reader-text { + clip: auto; + font-size: 16px; + font-size: 1rem; + font-weight: 400; + height: auto; + position: relative !important; /* overrides previous !important styles */ + width: auto; +} + +/*-------------------------------------------------------------- +19.0 Media Queries +--------------------------------------------------------------*/ + +/* Adjust positioning of edit shortcuts, override style in customize-preview.css */ +@media screen and (min-width: 20em) { + + body.customize-partial-edit-shortcuts-shown .site-header .site-title { + padding-left: 0; + } +} + +@media screen and (min-width: 30em) { + + /* Typography */ + + body, + button, + input, + select, + textarea { + font-size: 18px; + font-size: 1.125rem; + } + + h1 { + font-size: 30px; + font-size: 1.875rem; + } + + h2, + .home.blog .entry-title, + .page .panel-content .recent-posts .entry-title { + font-size: 26px; + font-size: 1.625rem; + } + + h3 { + font-size: 22px; + font-size: 1.375rem; + } + + h4 { + font-size: 18px; + font-size: 1.125rem; + } + + h5 { + font-size: 13px; + font-size: 0.8125rem; + } + + h6 { + font-size: 16px; + font-size: 1rem; + } + + .entry-content blockquote.alignleft, + .entry-content blockquote.alignright { + font-size: 14px; + font-size: 0.875rem; + } + + /* Fix image alignment */ + img.alignleft { + float: left; + margin-right: 1.5em; + } + + img.alignright { + float: right; + margin-left: 1.5em; + } + + /* Site Branding */ + + .site-branding { + padding: 3em 0; + } + + /* Front Page */ + + .panel-content .wrap { + padding-bottom: 2em; + padding-top: 3.5em; + } + + .page-one-column .panel-content .wrap { + max-width: 740px; + } + + .panel-content .entry-header { + margin-bottom: 4.5em; + } + + .panel-content .recent-posts .entry-header { + margin-bottom: 0; + } + + /* Blog Index, Archive, Search */ + + .taxonomy-description { + font-size: 14px; + font-size: 0.875rem; + } + + .page-numbers.current { + font-size: 16px; + font-size: 1rem; + } + + /* Site Footer */ + + .site-footer { + font-size: 16px; + font-size: 1rem; + } + + /* Gallery Columns */ + + .gallery-item { + max-width: 25%; + } + + .gallery-columns-1 .gallery-item { + max-width: 100%; + } + + .gallery-columns-2 .gallery-item { + max-width: 50%; + } + + .gallery-columns-3 .gallery-item { + max-width: 33.33%; + } + + .gallery-columns-4 .gallery-item { + max-width: 25%; + } +} + +@media screen and (min-width: 48em) { + + /* Typography */ + + body, + button, + input, + select, + textarea { + font-size: 16px; + font-size: 1rem; + line-height: 1.5; + } + + .entry-content blockquote.alignleft, + .entry-content blockquote.alignright { + font-size: 13px; + font-size: 0.8125rem; + } + + /* Layout */ + + .wrap { + max-width: 1000px; + padding-left: 3em; + padding-right: 3em; + } + + .has-sidebar:not(.error404) #primary { + float: left; + width: 58%; + } + + .has-sidebar #secondary { + float: right; + padding-top: 0; + width: 36%; + } + + .error404 #primary { + float: none; + } + + /* Site Branding */ + + .site-branding { + margin-bottom: 0; + } + + .has-header-image.twentyseventeen-front-page .site-branding, + .has-header-video.twentyseventeen-front-page .site-branding, + .has-header-image.home.blog .site-branding, + .has-header-video.home.blog .site-branding { + bottom: 0; + display: block; + left: 0; + height: auto; + padding-top: 0; + position: absolute; + width: 100%; + } + + .has-header-image.twentyseventeen-front-page .custom-header, + .has-header-video.twentyseventeen-front-page .custom-header, + .has-header-image.home.blog .custom-header, + .has-header-video.home.blog .custom-header { + display: block; + height: auto; + } + + .custom-header-media { + height: 165px; + position: relative; + } + + .twentyseventeen-front-page.has-header-image .custom-header-media, + .twentyseventeen-front-page.has-header-video .custom-header-media, + .home.blog.has-header-image .custom-header-media, + .home.blog.has-header-video .custom-header-media { + height: 0; + position: relative; + } + + .has-header-image:not(.twentyseventeen-front-page):not(.home) .custom-header-media, + .has-header-video:not(.twentyseventeen-front-page):not(.home) .custom-header-media { + bottom: 0; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + } + + .custom-logo-link { + padding-right: 2em; + } + + .custom-logo-link img, + body.home.title-tagline-hidden.has-header-image .custom-logo-link img, + body.home.title-tagline-hidden.has-header-video .custom-logo-link img { + max-width: 350px; + } + + .title-tagline-hidden.home.has-header-image .custom-logo-link img, + .title-tagline-hidden.home.has-header-video .custom-logo-link img { + max-height: 200px; + } + + .site-title { + font-size: 36px; + font-size: 2.25rem; + } + + .site-description { + font-size: 16px; + font-size: 1rem; + } + + /* Navigation */ + + .navigation-top { + bottom: 0; + font-size: 14px; + font-size: 0.875rem; + left: 0; + position: absolute; + right: 0; + width: 100%; + z-index: 3; + } + + .navigation-top .wrap { + max-width: 1000px; + /* The font size is 14px here and we need 50px padding in ems */ + padding: 0.75em 3.4166666666667em; + } + + .navigation-top nav { + margin-left: -1.25em; + } + + .site-navigation-fixed.navigation-top { + bottom: auto; + position: fixed; + left: 0; + right: 0; + top: 0; + width: 100%; + z-index: 7; + } + + .admin-bar .site-navigation-fixed.navigation-top { + top: 32px; + } + + /* Main Navigation */ + + .js .menu-toggle, + .js .dropdown-toggle { + display: none; + } + + .main-navigation { + width: auto; + } + + .js .main-navigation ul, + .js .main-navigation ul ul, + .js .main-navigation > div > ul { + display: block; + } + + .main-navigation ul { + background: transparent; + padding: 0; + } + + .main-navigation > div > ul { + border: 0; + margin-bottom: 0; + padding: 0; + } + + .main-navigation li { + border: 0; + display: inline-block; + } + + .main-navigation li li { + display: block; + } + + .main-navigation a { + padding: 1em 1.25em; + } + + .main-navigation ul ul { + background: #fff; + border: 1px solid #bbb; + left: -999em; + padding: 0; + position: absolute; + top: 100%; + z-index: 99999; + } + + .main-navigation ul li.menu-item-has-children:before, + .main-navigation ul li.menu-item-has-children:after, + .main-navigation ul li.page_item_has_children:before, + .main-navigation ul li.page_item_has_children:after { + border-style: solid; + border-width: 0 6px 6px; + content: ""; + display: none; + height: 0; + position: absolute; + right: 1em; + bottom: -1px; + width: 0; + z-index: 100000; + } + + .main-navigation ul li.menu-item-has-children.focus:before, + .main-navigation ul li.menu-item-has-children:hover:before, + .main-navigation ul li.menu-item-has-children.focus:after, + .main-navigation ul li.menu-item-has-children:hover:after, + .main-navigation ul li.page_item_has_children.focus:before, + .main-navigation ul li.page_item_has_children:hover:before, + .main-navigation ul li.page_item_has_children.focus:after, + .main-navigation ul li.page_item_has_children:hover:after { + display: block; + } + + .main-navigation ul li.menu-item-has-children:before, + .main-navigation ul li.page_item_has_children:before { + border-color: transparent transparent #bbb; + bottom: 0; + } + + .main-navigation ul li.menu-item-has-children:after, + .main-navigation ul li.page_item_has_children:after { + border-color: transparent transparent #fff; + } + + .main-navigation ul ul li:hover > ul, + .main-navigation ul ul li.focus > ul { + left: 100%; + right: auto; + } + + .main-navigation ul ul a { + padding: 0.75em 1.25em; + width: 16em; + } + + .main-navigation li li { + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + } + + .main-navigation li li:hover, + .main-navigation li li.focus { + background: #767676; + } + + .main-navigation li li a { + -webkit-transition: color 0.3s ease-in-out; + transition: color 0.3s ease-in-out; + } + + .main-navigation li li.focus > a, + .main-navigation li li:focus > a, + .main-navigation li li:hover > a, + .main-navigation li li a:hover, + .main-navigation li li a:focus, + .main-navigation li li.current_page_item a:hover, + .main-navigation li li.current-menu-item a:hover, + .main-navigation li li.current_page_item a:focus, + .main-navigation li li.current-menu-item a:focus { + color: #fff; + } + + .main-navigation ul li:hover > ul, + .main-navigation ul li.focus > ul { + left: 0.5em; + right: auto; + } + + .main-navigation .menu-item-has-children > a > .icon, + .main-navigation .page_item_has_children > a > .icon { + display: inline; + left: 5px; + position: relative; + top: -1px; + } + + .main-navigation ul ul .menu-item-has-children > a > .icon, + .main-navigation ul ul .page_item_has_children > a > .icon { + margin-top: -9px; + left: auto; + position: absolute; + right: 1em; + top: 50%; + -webkit-transform: rotate(-90deg); /* Chrome, Safari, Opera */ + -ms-transform: rotate(-90deg); /* IE 9 */ + transform: rotate(-90deg); + } + + .main-navigation ul ul ul { + left: -999em; + margin-top: -1px; + top: 0; + } + + .main-navigation ul ul li.menu-item-has-children.focus:before, + .main-navigation ul ul li.menu-item-has-children:hover:before, + .main-navigation ul ul li.menu-item-has-children.focus:after, + .main-navigation ul ul li.menu-item-has-children:hover:after, + .main-navigation ul ul li.page_item_has_children.focus:before, + .main-navigation ul ul li.page_item_has_children:hover:before, + .main-navigation ul ul li.page_item_has_children.focus:after, + .main-navigation ul ul li.page_item_has_children:hover:after { + display: none; + } + + .site-header .site-navigation-fixed .menu-scroll-down { + display: none; + } + + /* Scroll down arrow */ + + .site-header .menu-scroll-down { + display: block; + padding: 1em; + position: absolute; + right: 0; + } + + .site-header .menu-scroll-down .icon { + -webkit-transform: rotate(90deg); /* Chrome, Safari, Opera */ + -ms-transform: rotate(90deg); /* IE 9 */ + transform: rotate(90deg); + } + + .site-header .menu-scroll-down { + color: #fff; + top: 2em; + } + + .site-header .navigation-top .menu-scroll-down { + color: #767676; + top: 0.7em; + } + + .menu-scroll-down:focus { + outline: thin dotted; + } + + .menu-scroll-down .icon { + height: 18px; + width: 18px; + } + + /* Front Page */ + + .twentyseventeen-front-page.has-header-image .site-branding, + .twentyseventeen-front-page.has-header-video .site-branding, + .home.blog.has-header-image .site-branding, + .home.blog.has-header-video .site-branding { + margin-bottom: 70px; + } + + .twentyseventeen-front-page.has-header-image .custom-header-media, + .twentyseventeen-front-page.has-header-video .custom-header-media, + .home.blog.has-header-image .custom-header-media, + .home.blog.has-header-video .custom-header-media { + height: 1200px; + height: 100vh; + max-height: 100%; + overflow: hidden; + } + + .twentyseventeen-front-page.has-header-image .custom-header-media:before, + .twentyseventeen-front-page.has-header-video .custom-header-media:before, + .home.blog.has-header-image .custom-header-media:before, + .home.blog.has-header-video .custom-header-media:before { + height: 33%; + } + + .admin-bar.twentyseventeen-front-page.has-header-image .custom-header-media, + .admin-bar.twentyseventeen-front-page.has-header-video .custom-header-media, + .admin-bar.home.blog.has-header-image .custom-header-media, + .admin-bar.home.blog.has-header-video .custom-header-media { + height: calc(100vh - 32px); + } + + .panel-content .wrap { + padding-bottom: 4.5em; + padding-top: 6em; + } + + .panel-image { + height: 100vh; + max-height: 1200px; + } + + /* With panel images 100% of the screen height, we're going to fix the background image where supported to create a parallax-like effect. */ + .background-fixed .panel-image { + background-attachment: fixed; + } + + .page-two-column .panel-content .entry-header { + float: left; + width: 36%; + } + + .page-two-column .panel-content .entry-content { + float: right; + width: 58%; + } + + /* Front Page - Recent Posts */ + + .page-two-column .panel-content .recent-posts { + clear: right; + float: right; + width: 58%; + } + + .panel-content .recent-posts article { + margin-bottom: 4em; + } + + .panel-content .recent-posts .entry-header, + .page-two-column #primary .panel-content .recent-posts .entry-header, + .panel-content .recent-posts .entry-content, + .page-two-column #primary .panel-content .recent-posts .entry-content { + float: none; + width: 100%; + } + + .panel-content .recent-posts .entry-header { + margin-bottom: 1.5em; + } + + .page .panel-content .recent-posts .entry-title { + font-size: 26px; + font-size: 1.625rem; + } + + /* Posts */ + + .site-content { + padding: 5.5em 0 0; + } + + .single-post .entry-title, + .page .entry-title { + font-size: 26px; + font-size: 1.625rem; + } + + .comments-pagination, + .post-navigation { + clear: both; + } + + .post-navigation .nav-previous { + float: left; + width: 50%; + } + + .post-navigation .nav-next { + float: right; + text-align: right; + width: 50%; + } + + .nav-next, + .post-navigation .nav-next { + margin-top: 0; + } + + /* Blog, archive, search */ + + .sticky .icon-thumb-tack { + height: 23px; + left: -2.5em; + top: 1.5em; + width: 32px; + } + + body:not(.has-sidebar):not(.page-one-column) .page-header, + body.has-sidebar.error404 #primary .page-header, + body.page-two-column:not(.archive) #primary .entry-header, + body.page-two-column.archive:not(.has-sidebar) #primary .page-header { + float: left; + width: 36%; + } + + .blog:not(.has-sidebar) #primary article, + .archive:not(.page-one-column):not(.has-sidebar) #primary article, + .search:not(.has-sidebar) #primary article, + .error404:not(.has-sidebar) #primary .page-content, + .error404.has-sidebar #primary .page-content, + body.page-two-column:not(.archive) #primary .entry-content, + body.page-two-column #comments { + float: right; + width: 58%; + } + + .blog .site-main > article, + .archive .site-main > article, + .search .site-main > article { + padding-bottom: 4em; + } + + .navigation.pagination { + clear: both; + float: right; + width: 58%; + } + + .has-sidebar .navigation.pagination, + .archive.page-one-column:not(.has-sidebar) .navigation.pagination { + float: none; + width: 100%; + } + + .entry-footer { + display: table; + width: 100%; + } + + .entry-footer .cat-tags-links { + display: table-cell; + vertical-align: middle; + width: 100%; + } + + .entry-footer .edit-link { + display: table-cell; + text-align: right; + vertical-align: middle; + } + + .entry-footer .edit-link a.post-edit-link { + margin-top: 0; + margin-left: 1em; + } + + /* Entry content */ + + /* without sidebar */ + + :not(.has-sidebar) .entry-content blockquote.alignleft { + margin-left: -17.5%; + width: 48%; + } + + :not(.has-sidebar) .entry-content blockquote.alignright { + margin-right: -17.5%; + width: 48%; + } + + /* with sidebar */ + + .has-sidebar .entry-content blockquote.alignleft { + margin-left: 0; + width: 34%; + } + + .has-sidebar .entry-content blockquote.alignright { + margin-right: 0; + width: 34%; + } + + .has-sidebar #primary .entry-content blockquote.alignright.below-entry-meta { + margin-right: -72.5%; + width: 62%; + } + + /* blog and archive */ + + .blog:not(.has-sidebar) .entry-content blockquote.alignleft, + .twentyseventeen-front-page.page-two-column .entry-content blockquote.alignleft, + .archive:not(.has-sidebar) .entry-content blockquote.alignleft, + .page-two-column .entry-content blockquote.alignleft { + margin-left: -72.5%; + width: 62%; + } + + .blog:not(.has-sidebar) .entry-content blockquote.alignright, + .twentyseventeen-front-page.page-two-column .entry-content blockquote.alignright, + .archive:not(.has-sidebar) .entry-content blockquote.alignright, + .page-two-column .entry-content blockquote.alignright { + margin-right: 0; + width: 36%; + } + + /* Post formats */ + + .format-quote blockquote .icon { + left: -1.5em; + } + + /* Pages */ + + .page.page-one-column .entry-header, + .twentyseventeen-front-page.page-one-column .entry-header, + .archive.page-one-column:not(.has-sidebar) .page-header { + margin-bottom: 4em; + } + + .page:not(.home) #content { + padding-bottom: 3.25em; + } + + /* 404 page */ + + .error404 .page-content { + padding-bottom: 9em; + } + + /* Comments */ + + #comments { + padding-top: 5em; + } + + .comments-title { + margin-bottom: 2.5em; + } + + ol.children .children { + padding-left: 2em; + } + + /* Posts pagination */ + + .nav-links .nav-title { + position: relative; + } + + .nav-title-icon-wrapper { + position: absolute; + text-align: center; + width: 2em; + } + + .nav-links .nav-previous .nav-title .nav-title-icon-wrapper { + left: -2em; + } + + .nav-links .nav-next .nav-title .nav-title-icon-wrapper { + right: -2em; + } + + /* Secondary */ + + #secondary { + font-size: 14px; + font-size: 0.875rem; + line-height: 1.6; + } + + /* Widgets */ + + h2.widget-title { + font-size: 11px; + font-size: 0.6875rem; + margin-bottom: 2em; + } + + /* Footer */ + + .site-footer { + font-size: 14px; + font-size: 0.875rem; + line-height: 1.6; + margin-top: 3em; + } + + .site-footer .widget-column.footer-widget-1 { + float: left; + width: 36%; + } + + .site-footer .widget-column.footer-widget-2 { + float: right; + width: 58%; + } + + .social-navigation { + clear: left; + float: left; + margin-bottom: 0; + width: 36%; + } + + .site-info { + float: left; + padding: 0.7em 0 0; + width: 58%; + } + + .social-navigation + .site-info { + margin-left: 6%; + } + + .site-info .sep { + margin: 0 0.5em; + display: inline; + visibility: visible; + height: auto; + width: auto; + } + + /* Gallery Columns */ + + .gallery-columns-5 .gallery-item { + max-width: 20%; + } + + .gallery-columns-6 .gallery-item { + max-width: 16.66%; + } + + .gallery-columns-7 .gallery-item { + max-width: 14.28%; + } + + .gallery-columns-8 .gallery-item { + max-width: 12.5%; + } + + .gallery-columns-9 .gallery-item { + max-width: 11.11%; + } +} + +@media screen and ( min-width: 67em ) { + + /* Layout */ + + /* Navigation */ + .navigation-top .wrap { + padding: 0.75em 2em; + } + + .navigation-top nav { + margin-left: 0; + } + + /* Sticky posts */ + + .sticky .icon-thumb-tack { + font-size: 32px; + font-size: 2rem; + height: 22px; + left: -1.25em; + top: 0.75em; + width: 32px; + } + + /* Pagination */ + + .page-numbers { + display: inline-block; + } + + .page-numbers.current { + font-size: 15px; + font-size: 0.9375rem; + } + + .page-numbers.current .screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + overflow: hidden; + position: absolute !important; + width: 1px; + } + + /* Comments */ + + .comment-body { + margin-left: 0; + } +} + +@media screen and ( min-width: 79em ) { + + .has-sidebar .entry-content blockquote.alignleft { + margin-left: -20%; + } + + .blog:not(.has-sidebar) .entry-content blockquote.alignright, + .archive:not(.has-sidebar) .entry-content blockquote.alignright, + .page-two-column .entry-content blockquote.alignright, + .twentyseventeen-front-page .entry-content blockquote.alignright { + margin-right: -20%; + } +} + +@media screen and ( max-width: 48.875em ) and ( min-width: 48em ) { + + .admin-bar .site-navigation-fixed.navigation-top, + .admin-bar .site-navigation-hidden.navigation-top { + top: 46px; + } +} + +/*-------------------------------------------------------------- +20.0 Print +--------------------------------------------------------------*/ + +@media print { + + /* Hide elements */ + + form, + button, + input, + select, + textarea, + .navigation-top, + .social-navigation, + #secondary, + .content-bottom-widgets, + .header-image, + .panel-image-prop, + .icon-thumb-tack, + .page-links, + .edit-link, + .post-navigation, + .pagination.navigation, + .comments-pagination, + .comment-respond, + .comment-edit-link, + .comment-reply-link, + .comment-metadata .edit-link, + .pingback .edit-link, + .site-footer aside.widget-area, + .site-info { + display: none !important; + } + + .entry-footer, + #comments, + .site-footer, + .single-featured-image-header { + border: 0; + } + + /* Font sizes */ + + body { + font-size: 12pt; + } + + h1 { + font-size: 24pt; + } + + h2 { + font-size: 22pt; + } + + h3 { + font-size: 17pt; + } + + h4 { + font-size: 12pt; + } + + h5 { + font-size: 11pt; + } + + h6 { + font-size: 12pt; + } + + .page .panel-content .entry-title, + .page-title, + body.page:not(.twentyseventeen-front-page) .entry-title { + font-size: 10pt; + } + + /* Layout */ + + .wrap { + padding-left: 5% !important; + padding-right: 5% !important; + max-width: none; + } + + /* Site Branding */ + + .site-header { + background: transparent; + padding: 0; + } + + .custom-header-media { + padding: 0; + } + + .twentyseventeen-front-page.has-header-image .site-branding, + .twentyseventeen-front-page.has-header-video .site-branding, + .home.blog.has-header-image .site-branding, + .home.blog.has-header-video .site-branding { + position: relative; + } + + .site-branding { + margin-top: 0; + margin-bottom: 1.75em !important; /* override styles added by JavaScript */ + } + + .site-title { + font-size: 25pt; + } + + .site-description { + font-size: 12pt; + opacity: 1; + } + + /* Posts */ + + .single-featured-image-header { + background: transparent; + } + + .entry-meta { + font-size: 9pt; + } + + /* Colors */ + + body, + .site { + background: none !important; /* Brute force since user agents all print differently. */ + } + + body, + a, + .site-title a, + .twentyseventeen-front-page.has-header-image .site-title, + .twentyseventeen-front-page.has-header-video .site-title, + .twentyseventeen-front-page.has-header-image .site-title a, + .twentyseventeen-front-page.has-header-video .site-title a { + color: #222 !important; /* Make sure color schemes don't affect to print */ + } + + h2, + h5, + blockquote, + .site-description, + .twentyseventeen-front-page.has-header-image .site-description, + .twentyseventeen-front-page.has-header-video .site-description, + .entry-meta, + .entry-meta a { + color: #777 !important; /* Make sure color schemes don't affect to print */ + } + + .entry-content blockquote.alignleft, + .entry-content blockquote.alignright { + font-size: 11pt; + width: 34%; + } + + .site-footer { + padding: 0; + } +} diff --git a/wp-content/themes/twentyseventeen/template-parts/footer/footer-widgets.php b/wp-content/themes/twentyseventeen/template-parts/footer/footer-widgets.php new file mode 100644 index 000000000..ea309d8e3 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/footer/footer-widgets.php @@ -0,0 +1,35 @@ + + + + + + + diff --git a/wp-content/themes/twentyseventeen/template-parts/footer/site-info.php b/wp-content/themes/twentyseventeen/template-parts/footer/site-info.php new file mode 100644 index 000000000..2f528efb1 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/footer/site-info.php @@ -0,0 +1,21 @@ + +
        + ' ); + } + ?> + + + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/header/header-image.php b/wp-content/themes/twentyseventeen/template-parts/header/header-image.php new file mode 100644 index 000000000..390debcd0 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/header/header-image.php @@ -0,0 +1,20 @@ + +
        + +
        + +
        + + + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/header/site-branding.php b/wp-content/themes/twentyseventeen/template-parts/header/site-branding.php new file mode 100644 index 000000000..02017d5f3 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/header/site-branding.php @@ -0,0 +1,38 @@ + +
        +
        + + + +
        + +

        + +

        + + + +

        + +
        + + + 'arrow-right' ) ); ?> + + +
        +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/navigation/navigation-top.php b/wp-content/themes/twentyseventeen/template-parts/navigation/navigation-top.php new file mode 100644 index 000000000..5cfc99876 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/navigation/navigation-top.php @@ -0,0 +1,33 @@ + + diff --git a/wp-content/themes/twentyseventeen/template-parts/page/content-front-page-panels.php b/wp-content/themes/twentyseventeen/template-parts/page/content-front-page-panels.php new file mode 100644 index 000000000..98b129d31 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/page/content-front-page-panels.php @@ -0,0 +1,87 @@ + + +
        > + + ID ), 'twentyseventeen-featured-image' ); + + // Calculate aspect ratio: h / w * 100%. + $ratio = $thumbnail[2] / $thumbnail[1] * 100; + ?> + +
        +
        +
        + + + +
        +
        +
        + ', '' ); ?> + + + +
        + +
        + "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + ?> +
        + + + + 3, + 'post_status' => 'publish', + 'ignore_sticky_posts' => true, + 'no_found_rows' => true, + ) + ); + ?> + + have_posts() ) : ?> + +
        + + have_posts() ) : + $recent_posts->the_post(); + get_template_part( 'template-parts/post/content', 'excerpt' ); + endwhile; + wp_reset_postdata(); + ?> +
        + + + +
        +
        + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/page/content-front-page.php b/wp-content/themes/twentyseventeen/template-parts/page/content-front-page.php new file mode 100644 index 000000000..aa6e2846b --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/page/content-front-page.php @@ -0,0 +1,52 @@ + +
        > + + ID ), 'twentyseventeen-featured-image' ); + + // Calculate aspect ratio: h / w * 100%. + $ratio = $thumbnail[2] / $thumbnail[1] * 100; + ?> + +
        +
        +
        + + + +
        +
        +
        + ', '' ); ?> + + + +
        + +
        + "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + ?> +
        + +
        +
        + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/page/content-page.php b/wp-content/themes/twentyseventeen/template-parts/page/content-page.php new file mode 100644 index 000000000..f85ebc8c6 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/page/content-page.php @@ -0,0 +1,32 @@ + + +
        > +
        + ', '' ); ?> + +
        +
        + '', + ) + ); + ?> +
        +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content-audio.php b/wp-content/themes/twentyseventeen/template-parts/post/content-audio.php new file mode 100644 index 000000000..bfa3e19c7 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content-audio.php @@ -0,0 +1,109 @@ + + +
        > + 'thumb-tack' ) ); + } + ?> +
        + '; + if ( is_single() ) { + twentyseventeen_posted_on(); + } else { + echo twentyseventeen_time_link(); + twentyseventeen_edit_link(); + }; + echo '
        '; + }; + + if ( is_single() ) { + the_title( '

        ', '

        ' ); + } elseif ( is_front_page() && is_home() ) { + the_title( '

        ', '

        ' ); + } else { + the_title( '

        ', '

        ' ); + } + ?> + + + + + +
        + + + +
        + + +
        + + '; + echo $audio_html; + echo '
        '; + } + }; + + }; + + if ( is_single() || empty( $audio ) ) { + + /* translators: %s: Name of current post */ + the_content( + sprintf( + __( 'Continue reading "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + + }; + ?> + +
        + + + + diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content-excerpt.php b/wp-content/themes/twentyseventeen/template-parts/post/content-excerpt.php new file mode 100644 index 000000000..54a493392 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content-excerpt.php @@ -0,0 +1,48 @@ + + + diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content-gallery.php b/wp-content/themes/twentyseventeen/template-parts/post/content-gallery.php new file mode 100644 index 000000000..b171ecdcc --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content-gallery.php @@ -0,0 +1,96 @@ + + +
        > + 'thumb-tack' ) ); + } + ?> +
        + '; + if ( is_single() ) { + twentyseventeen_posted_on(); + } else { + echo twentyseventeen_time_link(); + twentyseventeen_edit_link(); + }; + echo ''; + }; + + if ( is_single() ) { + the_title( '

        ', '

        ' ); + } elseif ( is_front_page() && is_home() ) { + the_title( '

        ', '

        ' ); + } else { + the_title( '

        ', '

        ' ); + } + ?> +
        + + +
        + + + +
        + + +
        + + '; + echo get_post_gallery(); + echo '
        '; + }; + + }; + + if ( is_single() || ! get_post_gallery() ) { + + /* translators: %s: Name of current post */ + the_content( + sprintf( + __( 'Continue reading "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + + }; + ?> + + + + + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content-image.php b/wp-content/themes/twentyseventeen/template-parts/post/content-image.php new file mode 100644 index 000000000..12cd4e272 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content-image.php @@ -0,0 +1,86 @@ + + +
        > + 'thumb-tack' ) ); + } + ?> +
        + '; + if ( is_single() ) { + twentyseventeen_posted_on(); + } else { + echo twentyseventeen_time_link(); + twentyseventeen_edit_link(); + }; + echo ''; + }; + + if ( is_single() ) { + the_title( '

        ', '

        ' ); + } elseif ( is_front_page() && is_home() ) { + the_title( '

        ', '

        ' ); + } else { + the_title( '

        ', '

        ' ); + } + ?> +
        + + +
        + + + +
        + + +
        + + "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + + }; + ?> + +
        + + + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content-none.php b/wp-content/themes/twentyseventeen/template-parts/post/content-none.php new file mode 100644 index 000000000..f4b1977be --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content-none.php @@ -0,0 +1,35 @@ + + +
        + +
        + + +

        Get started here.', 'twentyseventeen' ), esc_url( admin_url( 'post-new.php' ) ) ); ?>

        + + + +

        + +
        +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content-video.php b/wp-content/themes/twentyseventeen/template-parts/post/content-video.php new file mode 100644 index 000000000..9f80aeae2 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content-video.php @@ -0,0 +1,107 @@ + + +
        > + 'thumb-tack' ) ); + } + ?> +
        + '; + if ( is_single() ) { + twentyseventeen_posted_on(); + } else { + echo twentyseventeen_time_link(); + twentyseventeen_edit_link(); + } + echo ''; + }; + + if ( is_single() ) { + the_title( '

        ', '

        ' ); + } elseif ( is_front_page() && is_home() ) { + the_title( '

        ', '

        ' ); + } else { + the_title( '

        ', '

        ' ); + } + ?> +
        + + + + +
        + + + +
        + + +
        + + '; + echo $video_html; + echo '
        '; + } + }; + + }; + + if ( is_single() || empty( $video ) ) { + + /* translators: %s: Name of current post */ + the_content( + sprintf( + __( 'Continue reading "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + }; + ?> + + + + + +
        diff --git a/wp-content/themes/twentyseventeen/template-parts/post/content.php b/wp-content/themes/twentyseventeen/template-parts/post/content.php new file mode 100644 index 000000000..3c55aa164 --- /dev/null +++ b/wp-content/themes/twentyseventeen/template-parts/post/content.php @@ -0,0 +1,79 @@ + + +
        > + 'thumb-tack' ) ); + endif; + ?> +
        + '; + if ( is_single() ) { + twentyseventeen_posted_on(); + } else { + echo twentyseventeen_time_link(); + twentyseventeen_edit_link(); + }; + echo ''; + }; + + if ( is_single() ) { + the_title( '

        ', '

        ' ); + } elseif ( is_front_page() && is_home() ) { + the_title( '

        ', '

        ' ); + } else { + the_title( '

        ', '

        ' ); + } + ?> +
        + + +
        + + + +
        + + +
        + "%s"', 'twentyseventeen' ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + + + +
        diff --git a/wp-content/themes/twentysixteen/404.php b/wp-content/themes/twentysixteen/404.php new file mode 100644 index 000000000..59907be91 --- /dev/null +++ b/wp-content/themes/twentysixteen/404.php @@ -0,0 +1,34 @@ + + +
        +
        + +
        + + +
        +

        + + +
        +
        + +
        + + + +
        + + + diff --git a/wp-content/themes/twentysixteen/archive.php b/wp-content/themes/twentysixteen/archive.php new file mode 100644 index 000000000..079730f31 --- /dev/null +++ b/wp-content/themes/twentysixteen/archive.php @@ -0,0 +1,68 @@ + + +
        +
        + + + + + + __( 'Previous page', 'twentysixteen' ), + 'next_text' => __( 'Next page', 'twentysixteen' ), + 'before_page_number' => '' . __( 'Page', 'twentysixteen' ) . ' ', + ) + ); + + // If no content, include the "No posts found" template. + else : + get_template_part( 'template-parts/content', 'none' ); + + endif; + ?> + +
        +
        + + + diff --git a/wp-content/themes/twentysixteen/comments.php b/wp-content/themes/twentysixteen/comments.php new file mode 100644 index 000000000..a0a29d577 --- /dev/null +++ b/wp-content/themes/twentysixteen/comments.php @@ -0,0 +1,83 @@ + + +
        + + +

        + +

        + + + +
          + 'ol', + 'short_ping' => true, + 'avatar_size' => 42, + ) + ); + ?> +
        + + + + + + +

        + + + '

        ', + 'title_reply_after' => '

        ', + ) + ); + ?> + +
        diff --git a/wp-content/themes/twentysixteen/css/blocks.css b/wp-content/themes/twentysixteen/css/blocks.css new file mode 100644 index 000000000..9ddea8073 --- /dev/null +++ b/wp-content/themes/twentysixteen/css/blocks.css @@ -0,0 +1,434 @@ +/* +Theme Name: Twenty Sixteen +Description: Used to style blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #686868; + font-style: italic; + line-height: 1.6153846154; + padding-top: 0.5384615385em; + text-align: left; +} + +.rtl [class^="wp-block-"] figcaption { + text-align: right; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Image */ + +@media screen and (min-width: 61.5625em) { + body:not(.search-results) article:not(.type-page) .wp-block-image figcaption.below-entry-meta { + clear: both; + display: block; + float: none; + margin-right: 0; + margin-left: -40%; + max-width: 140%; + } + + body.rtl:not(.search-results) article:not(.type-page) .wp-block-image figcaption.below-entry-meta { + margin-left: 0; + margin-right: -40%; + } +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 1.75em; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-left: none; + padding-left: 0; +} + +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-right: none; + padding-right: 0; +} + +.wp-block-quote cite { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +.wp-block-quote cite:before { + content: "\2014\00a0"; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover */ + +.wp-block-cover-image.aligncenter, +.wp-block-cover.aligncenter { + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background: #007acc; +} + +.wp-block-file .wp-block-file__button:focus { + outline: thin dotted; + outline-offset: -4px; +} + +.rtl .wp-block-file * + .wp-block-file__button { + margin-left: 0.75em; + margin-right: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting Blocks +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + font-family: Inconsolata, monospace; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border-width: 4px; +} + +.wp-block-pullquote blockquote { + border-left: 0; + margin: 0; + padding: 0; +} + +.rtl .wp-block-pullquote blockquote { + border-right: 0; +} + +.wp-block-pullquote p { + color: #686868; + font-size: 19px; + font-size: 1.1875rem; +} + +.wp-block-pullquote cite { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + font-style: none; + line-height: 1.75; + text-transform: none; +} + +.wp-block-pullquote cite:before { + content: "\2014\00a0"; +} + +/* Table */ + +.wp-block-table, +.wp-block-table th, +.wp-block-table td { + border: 1px solid #d1d1d1; +} + +.wp-block-table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin: 0 0 1.75em; + table-layout: fixed; + width: 100%; +} + +.wp-block-table th, +.wp-block-table td { + font-weight: normal; + padding: 0.4375em; + text-align: left; +} + +.wp-block-table th { + border-width: 0 1px 1px 0; + font-weight: 700; +} + +.wp-block-table td { + border-width: 0 1px 1px 0; +} + +.rtl .wp-block-table th, +.rtl .wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + box-shadow: none; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 1.3125em 0.78125em; + text-transform: uppercase; +} + +.entry-content .wp-block-button__link { + background: #1a1a1a; + color: #fff; +} + +.entry-content .is-style-outline .wp-block-button__link:not(.has-background) { + background: transparent; +} + +.entry-content .is-style-outline .wp-block-button__link:not(.has-text-color) { + color: #1a1a1a; +} + +.entry-content .wp-block-button__link:hover, +.entry-content .wp-block-button__link:focus, +.entry-content .is-style-outline .wp-block-button__link:not(.has-background):hover, +.entry-content .is-style-outline .wp-block-button__link:not(.has-background):focus, +.entry-content .is-style-outline .wp-block-button__link:not(.has-text-color):hover, +.entry-content .is-style-outline .wp-block-button__link:not(.has-text-color):focus { + background: #007acc; + color: #fff; +} + +.wp-block-button .wp-block-button__link:focus { + outline: thin dotted; + outline-offset: -4px; +} + +/* Seperator */ + +hr.wp-block-separator { + border: 0; +} + +.wp-block-separator { + margin-left: auto; + margin-right: auto; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/* Media & Text */ + +.wp-block-media-text { + margin-bottom: 1.75em; +} + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widget Blocks +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + list-style-position: inside; + text-align: center; +} + +/* Latest Comments */ + +.wp-block-latest-comments__comment-meta a { + box-shadow: none; + font-weight: 700; +} + +.wp-block-latest-comments__comment-date { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid #d1d1d1; + margin-bottom: 0; + padding: 1.75em 0; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.entry-content .has-dark-gray-color { + color: #1a1a1a; +} + +.entry-content .has-dark-gray-background-color { + background-color: #1a1a1a; +} + +.entry-content .has-medium-gray-color { + color: #686868; +} + +.entry-content .has-medium-gray-background-color { + background-color: #686868; +} + +.entry-content .has-light-gray-color { + color: #e5e5e5; +} + +.entry-content .has-light-gray-background-color { + background-color: #e5e5e5; +} + +.entry-content .has-white-color { + color: #fff; +} + +.entry-content .has-white-background-color { + background-color: #fff; +} + +.entry-content .has-blue-gray-color { + color: #4d545c; +} + +.entry-content .has-blue-gray-background-color { + background-color: #4d545c; +} + +.entry-content .has-bright-blue-color { + color: #007acc; +} + +.entry-content .has-bright-blue-background-color { + background-color: #007acc; +} + +.entry-content .has-light-blue-color { + color: #9adffd; +} + +.entry-content .has-light-blue-background-color { + background-color: #9adffd; +} + +.entry-content .has-dark-brown-color { + color: #402b30; +} + +.entry-content .has-dark-brown-background-color { + background-color: #402b30; +} + +.entry-content .has-medium-brown-color { + color: #774e24; +} + +.entry-content .has-medium-brown-background-color { + background-color: #774e24; +} + +.entry-content .has-dark-red-color { + color: #640c1f; +} + +.entry-content .has-dark-red-background-color { + background-color: #640c1f; +} + +.entry-content .has-bright-red-color { + color: #ff675f; +} + +.entry-content .has-bright-red-background-color { + background-color: #ff675f; +} + +.entry-content .has-yellow-color { + color: #ffef8e; +} + +.entry-content .has-yellow-background-color { + background-color: #ffef8e; +} diff --git a/wp-content/themes/twentysixteen/css/editor-blocks.css b/wp-content/themes/twentysixteen/css/editor-blocks.css new file mode 100644 index 000000000..4bf8cbf54 --- /dev/null +++ b/wp-content/themes/twentysixteen/css/editor-blocks.css @@ -0,0 +1,617 @@ +/* +Theme Name: Twenty Sixteen +Description: Used to style blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-family: Merriweather, Georgia, serif; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #1a1a1a; +} + +.editor-post-title__block .editor-post-title__input { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 28px; + font-size: 1.75rem; + font-weight: 700; + line-height: 1.25; + margin-bottom: 1em; +} + +.edit-post-visual-editor h1 { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; +} + +.edit-post-visual-editor h2 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-top: 2.4347826087em; + margin-bottom: 1.2173913043em; +} + +.edit-post-visual-editor h3 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-top: 2.9473684211em; + margin-bottom: 1.4736842105em; +} + +.edit-post-visual-editor h4, +.edit-post-visual-editor h5, +.edit-post-visual-editor h6 { + font-size: 16px; + font-size: 1rem; + line-height: 1.3125; + margin-top: 3.5em; + margin-bottom: 1.75em; +} + +.edit-post-visual-editor h4 { + letter-spacing: 0.140625em; + text-transform: uppercase; +} + +.edit-post-visual-editor h6 { + font-style: italic; +} + +.edit-post-visual-editor h1, +.edit-post-visual-editor h2, +.edit-post-visual-editor h3, +.edit-post-visual-editor h4, +.edit-post-visual-editor h5, +.edit-post-visual-editor h6 { + font-weight: 900; +} + +@media screen and (min-width: 61.5625em) { + .edit-post-visual-editor h1 { + font-size: 33px; + font-size: 2.0625rem; + line-height: 1.2727272727; + margin-top: 1.696969697em; + margin-bottom: 0.8484848485em; + } + + .edit-post-visual-editor h2 { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; + } + + .edit-post-visual-editor h3 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-top: 2.4347826087em; + margin-bottom: 1.2173913043em; + } + + .edit-post-visual-editor h4 { + letter-spacing: 0.131578947em; + } + + .edit-post-visual-editor h4, + .edit-post-visual-editor h5, + .edit-post-visual-editor h6 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-top: 2.9473684211em; + margin-bottom: 1.473684211em; + } +} + +.edit-post-visual-editor h1:first-child, +.edit-post-visual-editor h2:first-child, +.edit-post-visual-editor h3:first-child, +.edit-post-visual-editor h4:first-child, +.edit-post-visual-editor h5:first-child, +.edit-post-visual-editor h6:first-child { + margin-top: 0; +} + +.edit-post-visual-editor p { + margin: 0 0 1.75em; +} + +.edit-post-visual-editor blockquote p { + margin-bottom: 1.4736842105em; +} + +@media screen and (min-width: 44.375em) { + .editor-post-title__block .editor-post-title__input { + font-size: 33px; + font-size: 2.0625rem; + line-height: 1.2727272727; + margin-bottom: 0.8484848485em; + } +} + +@media screen and (min-width: 61.5625em) { + .editor-post-title__block .editor-post-title__input { + font-size: 40px; + font-size: 2.5rem; + line-height: 1.225; + margin-bottom: 1.05em; + } +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +.editor-styles-wrapper { + max-width: 100% !important; /* Override where editor-style.css is affecting this */ +} + +.wp-block { + max-width: 630px; /* 600px + 30px to account for padding. */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #007acc; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + margin: 0 0 1.75em 1.25em; + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: disc; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; + margin-left: 1.5em; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li, +.editor-block-list__block ul:not(.wp-block-gallery) li, +.edit-post-visual-editor ol li, +.editor-block-list__block ol li, +.block-library-list li { + margin-bottom: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.25em; + padding: 0; +} + +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 1.5em; + margin-right: 1.5em; +} + +/* Quotes */ + +.rtl .editor-block-list__block blockquote { + border-left: 0; + padding-left: 0; +} + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #686868; + font-style: italic; + line-height: 1.6153846154; + padding-top: 0.5384615385em; + text-align: left; +} + +.rtl [class^="wp-block-"] figcaption { + text-align: right; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +.wp-block-paragraph.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + line-height: 0.68; + margin: 0.05em 0.1em 0 0; + text-transform: uppercase; + font-style: normal; +} + +.rtl .wp-block-paragraph.has-drop-cap:not(:focus)::first-letter { + margin: 0.05em 0 0 0.1em; +} + +/* Quote */ + +.wp-block-quote { + border: 0 solid #1a1a1a; + border-left-width: 4px; + color: #686868; + font-style: italic; + line-height: 1.4736842105; + margin: 0 0 1.4736842105em; + overflow: hidden; + padding: 0 0 0 1.263157895em; +} + +.wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-left: 0; + padding-left: 0; +} + +.editor-block-list__block .wp-block-quote p { + font-size: 19px; + font-size: 1.1875rem; + margin-bottom: 1.4736842105em; +} + +.wp-block-quote__citation { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +.wp-block-quote__citation:before { + content: "\2014\00a0"; +} + +.wp-block-quote em, +.wp-block-quote i, +.wp-block-quote__citation:before { + font-style: normal; +} + +.wp-block-quote strong, +.wp-block-quote b { + font-weight: 400; +} + +.wp-block-quote > :last-child { + margin-bottom: 0; +} + +.wp-block-quote.alignleft { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +.wp-block-quote.alignright { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +.wp-block-quote.aligncenter { + margin-bottom: 1.473684211em; +} + +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-right: 0; + padding-right: 0; +} + +@media screen and (min-width: 44.375em) { + .wp-block-quote.alignleft, + .wp-block-quote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em); + } + + .wp-block-quote:not(.alignleft):not(.alignright) { + margin-left: -1.473684211em; + } + + .rtl .wp-block-quote:not(.alignleft):not(.alignright) { + margin-left: 0; + margin-right: -1.473684211em; + } +} + +@media screen and (min-width: 80em) { + .editor-block-list__block .wp-block-quote.alignleft { + margin-left: -40%; + width: -webkit-calc(60% - 1.4736842105em); + width: calc(60% - 1.4736842105em); + } +} + +/* File */ + +.wp-block-file__textlink { + box-shadow: 0 1px 0 0 currentColor; + color: #007acc; +} + +.wp-block-file .wp-block-file__button { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0.125em 0.25em; +} + +/* Classic */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0 solid #1a1a1a; + border-left-width: 4px; + color: #686868; + font-style: italic; + line-height: 1.4736842105; + margin: 0 0 1.4736842105em; + overflow: hidden; + padding: 0 0 0 1.263157895em; +} + +.editor-block-list__block .wp-block-freeform.block-library-rich-text__tinymce blockquote:not(.alignleft):not(.alignright) { + margin-left: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote p { + font-size: 19px; + font-size: 1.1875rem; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote cite { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + font-style: normal; + line-height: 1.75; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote cite:before { + content: "\2014\00a0"; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote.alignleft { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote.alignright { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote.aligncenter { + margin-bottom: 1.473684211em; +} + +@media screen and (min-width: 44.375em) { + .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignleft, + .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em); + } +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce blockquote { + border-left-width: 0; + border-right-width: 4px; + overflow: hidden; + padding-left: 0; + padding-right: 1.263157895em; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce .alignleft { + float: left; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce .alignright { + float: right; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignleft { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignright { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +/* Pullquote */ + +.editor-block-list__block .wp-block-pullquote blockquote { + border: 0; + margin: 0; + padding: 0; +} + +.wp-block-pullquote blockquote > .editor-rich-text p { + color: #686868; + font-size: 19px; + font-size: 1.1875rem; +} + +.wp-block-pullquote .wp-block-pullquote__citation { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + font-style: italic; + line-height: 1.75; + text-transform: none; +} + +.wp-block-pullquote .wp-block-pullquote__citation:before { + content: "\2014\00a0"; +} + +/* Table */ + +.editor-block-list__block table.wp-block-table th, +.editor-block-list__block table.wp-block-table td { + padding: 0; +} + +.rtl .wp-block-table th, +.rtl .wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 1.3125em 0.78125em; + text-transform: uppercase; +} + +.wp-block-button__link { + background: #1a1a1a; + color: #fff; +} + +.is-style-outline .wp-block-button__link { + color: #1a1a1a; +} + +/* Media & Text */ + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +[data-align="center"] .wp-block-archives ul, +[data-align="center"] .wp-block-categories ul, +[data-align="center"] .wp-block-latest-posts ul { + list-style-position: inside; +} + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments__comment-meta a { + box-shadow: none; + font-weight: 700; + text-decoration: none; +} + +.wp-block-latest-comments__comment-date { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid #d1d1d1; + margin-bottom: 0; + padding: 1.75em 0; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 16px; +} diff --git a/wp-content/themes/twentysixteen/css/editor-style.css b/wp-content/themes/twentysixteen/css/editor-style.css new file mode 100644 index 000000000..ed48ce7f4 --- /dev/null +++ b/wp-content/themes/twentysixteen/css/editor-style.css @@ -0,0 +1,547 @@ +/* +Theme Name: Twenty Sixteen +Description: Used to style the TinyMCE editor. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Body + * 2.0 - Typography + * 3.0 - Elements + * 4.0 - Alignment + * 5.0 - Caption + * 6.0 - Galleries + * 7.0 - Audio / Video + * 8.0 - RTL + */ + + +/** + * 1.0 - Body + */ + +body { + color: #1a1a1a; + font-family: Merriweather, Georgia, serif; + font-size: 16px; + font-weight: 400; + line-height: 1.75; + margin: 20px 40px; + max-width: 600px; + vertical-align: baseline; +} + +body.post-type-page { + max-width: 840px; +} + + +/** + * 2.0 - Typography + */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-weight: 900; + margin: 56px 0 28px; +} + +h1 { + font-size: 33px; + line-height: 1.2727272727; +} + +h2 { + font-size: 28px; + line-height: 1.25; +} + +h3 { + font-size: 23px; + line-height: 1.2173913043; +} + +h4, +h5, +h6 { + font-size: 19px; + line-height: 1.1052631579; +} + +h4 { + letter-spacing: 0.13333em; + text-transform: uppercase; +} + +h6 { + font-style: italic; +} + +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + margin-top: 0; +} + +p { + margin: 0 0 28px; +} + +b, +strong { + font-weight: 700; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + border-left: 4px solid #1a1a1a; + color: #686868; + font-size: 19px; + font-style: italic; + line-height: 1.4736842105; + margin-bottom: 28px; + overflow: hidden; + padding: 0 0 0 24px; +} + +blockquote:not(.alignleft):not(.alignright) { + margin-left: -28px; +} + +blockquote blockquote:not(.alignleft):not(.alignright) { + margin-left: 0; +} + +blockquote:before, +blockquote:after { + content: ""; + display: table; +} + +blockquote:after { + clear: both; +} + +blockquote > :last-child { + margin-bottom: 0; +} + +blockquote cite, +blockquote small { + color: #1a1a1a; + font-size: 16px; + line-height: 1.75; +} + +blockquote em, +blockquote i, +blockquote cite { + font-style: normal; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +blockquote.alignleft, +blockquote.alignright { + border: 0 solid #1a1a1a; + border-top-width: 4px; + padding: 18px 0 0; + width: -webkit-calc(50% - 14px); + width: calc(50% - 14px); +} + +address { + font-style: italic; + margin: 0 0 28px; +} + +code, +kbd, +tt, +var, +samp, +pre { + font-family: Inconsolata, monospace; +} + +pre { + border: 1px solid #d1d1d1; + font-size: 16px; + line-height: 1.3125; + margin: 0 0 28px; + max-width: 100%; + overflow: auto; + padding: 14px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +code { + background-color: #d1d1d1; + padding: 2px 4px; +} + +abbr[title] { + border-bottom: 1px dotted #d1d1d1; + cursor: help; +} + +mark, +ins { + background: #007acc; + color: #fff; + padding: 2px 4px; + text-decoration: none; +} + +sup, +sub { + font-size: 75%; + height: 0; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -6px; +} + +sub { + bottom: -3px; +} + +small { + font-size: 80%; +} + +big { + font-size: 125%; +} + + +/** + * 3.0 - Elements + */ + +hr { + background-color: #d1d1d1; + border: 0; + height: 1px; + margin-bottom: 28px; +} + +ul, +ol { + margin: 0 0 28px 0; + padding: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li > ul, +li > ol { + margin-bottom: 0; +} + +li > ul, +blockquote > ul { + margin-left: 20px; +} + +li > ol, +blockquote > ol { + margin-left: 24px; +} + +dl { + margin: 0 0 28px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 28px; +} + +table, +th, +td, +.mce-item-table, +.mce-item-table th, +.mce-item-table td { + border: 1px solid #d1d1d1; +} + +table a { + color: #007acc; +} + +table, +.mce-item-table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin: 0 0 28px; + width: 100%; +} + +table th, +.mce-item-table th, +table caption { + border-width: 0 1px 1px 0; + font-size: 16px; + font-weight: 700; + padding: 7px; + text-align: left; + vertical-align: baseline; +} + +table td, +.mce-item-table td { + border-width: 0 1px 1px 0; + font-size: 16px; + padding: 7px; + vertical-align: baseline; +} + +img { + border: 0; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +a img { + display: block; +} + +figure { + margin: 0; +} + +del { + opacity: 0.8; +} + +a { + box-shadow: 0 1px 0 0 currentColor; + color: #007acc; + text-decoration: none; +} + +fieldset { + border: 1px solid #d1d1d1; + margin: 0 0 28px; + padding: 14px; +} + + +/** + * 4.0 - Alignment + */ + +.alignleft { + float: left; + margin: 6px 28px 28px 0; +} + +.alignright { + float: right; + margin: 6px 0 28px 28px; +} + +.aligncenter { + clear: both; + display: block; + margin: 0 auto 28px; +} + + +/** + * 5.0 - Caption + */ + +.wp-caption { + background: transparent; + border: none; + margin-bottom: 28px; + max-width: 100%; + padding: 0; + text-align: inherit; +} + +.wp-caption-text, +.wp-caption-dd { + color: #686868; + font-size: 13px; + font-style: italic; + line-height: 1.6153846154; + padding-top: 7px; +} + + +/** + * 6.0 - Galleries + */ + +.mce-content-body .wpview-wrap { + margin-bottom: 28px; +} + +.gallery { + margin: 0 -1.1666667%; + padding: 0; +} + +.gallery .gallery-item { + display: inline-block; + max-width: 33.33%; + padding: 0 1.1400652% 2.2801304%; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; +} + +.gallery-columns-4 .gallery-item { + max-width: 25%; +} + +.gallery-columns-5 .gallery-item { + max-width: 20%; +} + +.gallery-columns-6 .gallery-item { + max-width: 16.66%; +} + +.gallery-columns-7 .gallery-item { + max-width: 14.28%; +} + +.gallery-columns-8 .gallery-item { + max-width: 12.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 11.11%; +} + +.gallery .gallery-caption { + font-size: 13px; + margin: 0; +} + +.gallery-columns-6 .gallery-caption, +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 7.0 - Audio / Video + */ + +.wp-audio-shortcode a, +.wp-playlist a { + box-shadow: none; +} + +.mce-content-body .wp-audio-playlist { + margin: 0; + padding-bottom: 0; +} + +.mce-content-body .wp-playlist-tracks { + margin-top: 0; +} + +.mce-content-body .wp-playlist-item { + padding: 10px 0; +} + +.mce-content-body .wp-playlist-item-length { + top: 10px; +} + + +/** + * 8.0 - RTL + */ + +.rtl blockquote { + border: 0 solid #1a1a1a; + border-right-width: 4px; +} + +.rtl blockquote.alignleft, +.rtl blockquote.alignright { + border: 0 solid #1a1a1a; + border-top-width: 4px; +} + +.rtl blockquote:not(.alignleft):not(.alignright) { + margin-right: -28px; + padding: 0 24px 0 0; +} + +.rtl blockquote blockquote:not(.alignleft):not(.alignright) { + margin-right: 0; + margin-left: auto; +} + +.rtl li > ul, +.rtl blockquote > ul { + margin-right: 20px; + margin-left: auto; +} + +.rtl li > ol, +.rtl blockquote > ol { + margin-right: 24px; + margin-left: auto; +} + +.rtl table th, +.rtl .mce-item-table th, +.rtl table caption { + text-align: right; +} diff --git a/wp-content/themes/twentysixteen/css/ie.css b/wp-content/themes/twentysixteen/css/ie.css new file mode 100644 index 000000000..6aa093a2c --- /dev/null +++ b/wp-content/themes/twentysixteen/css/ie.css @@ -0,0 +1,48 @@ +/* +Theme Name: Twenty Sixteen +Description: Global Styles for older IE versions (previous to IE10). +*/ + +.site-header-main:before, +.site-header-main:after, +.site-footer:before, +.site-footer:after { + content: ""; + display: table; +} + +.site-header-main:after, +.site-footer:after { + clear: both; +} + +@media screen and (min-width: 56.875em) { + .site-branding, + .site-info { + float: left; + } + + .site-header-menu, + .site-footer .social-navigation { + float: right; + } + + .site-footer .social-navigation { + margin-left: 7px; + } + + .rtl .site-branding, + .rtl .site-info { + float: right; + } + + .rtl .site-header-menu, + .rtl .site-footer .social-navigation { + float: left; + } + + .rtl .site-footer .social-navigation { + margin-right: 7px; + margin-left: 0; + } +} diff --git a/wp-content/themes/twentysixteen/css/ie7.css b/wp-content/themes/twentysixteen/css/ie7.css new file mode 100644 index 000000000..6f9ec28aa --- /dev/null +++ b/wp-content/themes/twentysixteen/css/ie7.css @@ -0,0 +1,176 @@ +/* +Theme Name: Twenty Sixteen +Description: IE7 specific style. +*/ + +.site-inner { + max-width: 656px; +} + +.post-navigation, +.pagination, +.image-navigation, +.entry-header, +.entry-summary, +.entry-content, +.entry-footer, +.page-header, +.page-content, +.post-thumbnail, +.content-bottom-widgets, +.comments-area { + margin-right: 28px; + margin-left: 28px; + max-width: 100%; +} + +.site-header, +.sidebar, +.site-footer, +.widecolumn { + padding-right: 28px; + padding-left: 28px; +} + +.search-submit { + height: auto; + margin-top: 28px; + padding: 15px 0 8px; + position: relative; + width: auto; +} + +.search-submit .screen-reader-text { + height: auto; + position: relative !important; + width: auto; +} + +.image-navigation .nav-previous, +.image-navigation .nav-next, +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + *display: inline; + zoom: 1; +} + +.image-navigation .nav-previous + .nav-next, +.comment-navigation .nav-previous + .nav-next { + margin-left: 14px; +} + +.pagination .nav-links { + padding: 0; +} + +.pagination .page-numbers { + line-height: 1; + margin: -4px 14px 0; + padding: 18px 0; +} + +.pagination .prev, +.pagination .next { + display: inline-block; + font-size: 16px; + font-weight: 700; + height: auto; + left: 0; + line-height: 1; + margin: 0; + padding: 18px 14px; + position: relative; + right: 0; + text-transform: none; + width: auto; +} + +.dropdown-toggle { + display: none; +} + +.main-navigation ul ul { + display: block; +} + +.social-navigation { + margin-top: 1.75em; +} + +.social-navigation a { + height: auto; + padding: 3px 7px; + width: auto; +} + +.social-navigation .screen-reader-text { + height: auto; + position: relative !important; + width: auto; +} + +.site-header-main { + overflow : hidden; + zoom : 1; +} + +.entry-footer > span { + margin-right: 14px; +} + +.site-info .site-title { + font-size: 13px; + margin-right: 14px; +} + +.gallery-item { + max-width: 30%; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 46%; +} + +.gallery-columns-4 .gallery-item { + max-width: 22%; +} + +.gallery-columns-5 .gallery-item { + max-width: 17%; +} + +.gallery-columns-6 .gallery-item { + max-width: 13.5%; +} + +.gallery-columns-7 .gallery-item { + max-width: 11%; +} + +.gallery-columns-8 .gallery-item { + max-width: 9.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 8%; +} + +.rtl .image-navigation .nav-previous + .nav-next, +.rtl .comment-navigation .nav-previous + .nav-next { + margin-right: 14px; + margin-left: 0; +} + +.rtl .entry-footer > span { + margin-right: 14px; + margin-left: 0; +} + +.rtl .site-info .site-title { + margin-right: 0; + margin-left: 14px; +} diff --git a/wp-content/themes/twentysixteen/css/ie8.css b/wp-content/themes/twentysixteen/css/ie8.css new file mode 100644 index 000000000..1b07fe893 --- /dev/null +++ b/wp-content/themes/twentysixteen/css/ie8.css @@ -0,0 +1,222 @@ +/* +Theme Name: Twenty Sixteen +Description: IE8 specific style. +*/ + +code { + background-color: transparent; + padding: 0; +} + +.entry-content a, +.entry-summary a, +.taxonomy-description a, +.logged-in-as a, +.comment-content a, +.pingback .comment-body > a, +.textwidget a, +.entry-footer a:hover, +.site-info a:hover { + text-decoration: underline; +} + +.entry-content a:hover, +.entry-content a:focus, +.entry-summary a:hover, +.entry-summary a:focus, +.taxonomy-description a:hover, +.taxonomy-description a:focus, +.logged-in-as a:hover, +.logged-in-as a:focus, +.comment-content a:hover, +.comment-content a:focus, +.pingback .comment-body > a:hover, +.pingback .comment-body > a:focus, +.textwidget a:hover, +.textwidget a:focus, +.entry-content .wp-audio-shortcode a, +.entry-content .wp-playlist a, +.page-links a { + text-decoration: none; +} + +.site { + margin: 21px; +} + +.site-inner { + max-width: 710px; +} + +.site-header { + padding-top: 3.9375em; + padding-bottom: 3.9375em; +} + +.site-branding { + float: left; + margin-top: 1.3125em; + margin-bottom: 1.3125em; +} + +.site-title { + font-size: 28px; + line-height: 1.25; +} + +.site-description { + display: block; +} + +.menu-toggle { + float: right; + font-size: 16px; + margin: 1.3125em 0; + padding: 0.8125em 0.875em 0.6875em; +} + +.site-header-menu { + clear: both; + margin: 0; + padding: 1.3125em 0; +} + +.site-header .main-navigation + .social-navigation { + margin-top: 2.625em; +} + +.header-image { + margin: 1.3125em 0; +} + +.site-main { + margin-bottom: 5.25em; +} + +.post-navigation { + margin-bottom: 5.25em; +} + +.post-navigation .post-title { + font-size: 28px; + line-height: 1.25; +} + +.pagination { + margin: 0 7.6923% 4.421052632em; +} + +.pagination .nav-links:before, +.pagination .nav-links:after { + display: none; +} + +/* restore screen-reader-text */ +.pagination .current .screen-reader-text { + position: absolute !important; +} + +.pagination .page-numbers { + display: inline-block; + font-weight: 400; +} + +.image-navigation .nav-previous, +.image-navigation .nav-next, +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + display: inline-block; +} + +.image-navigation .nav-previous + .nav-next:before, +.comment-navigation .nav-previous + .nav-next:before { + content: "\002f"; + display: inline-block; + filter: alpha(opacity=70); + padding: 0 0.538461538em; +} + +.site-main > article { + margin-bottom: 5.25em; +} + +.entry-title { + font-size: 33px; + line-height: 1.2727272727; + margin-bottom: 0.8484848485em; +} + +.entry-content blockquote.alignleft, +.entry-content blockquote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: 50%; +} + +.entry-footer > span:after { + content: "\002f"; + display: inline-block; + filter: alpha(opacity=70); + padding: 0 0.538461538em; +} + +.updated { + display: none; +} + +.updated.published { + display: inline; +} + +.comment-author { + margin-bottom: 0; +} + +.comment-author .avatar { + height: 42px; + position: relative; + top: 0.25em; + width: 42px; +} + +.comment-list .children > li { + padding-left: 1.75em; +} + +.comment-list + .comment-respond, +.comment-navigation + .comment-respond { + padding-top: 3.5em; +} + +.comment-reply-link { + margin-top: 0; +} + +.comments-area, +.widget, +.content-bottom-widgets .widget-area { + margin-bottom: 5.25em; +} + +.sidebar, +.widecolumn { + margin-bottom: 5.25em; +} + +.site-footer .main-navigation, +.site-footer .social-navigation { + display: none; +} + +.rtl .site-branding { + float: right; +} + +.rtl .menu-toggle { + float: left; +} + +.rtl .comment-list .children > li { + padding-right: 1.75em; + padding-left: 0; +} diff --git a/wp-content/themes/twentysixteen/footer.php b/wp-content/themes/twentysixteen/footer.php new file mode 100644 index 000000000..5fff3bd91 --- /dev/null +++ b/wp-content/themes/twentysixteen/footer.php @@ -0,0 +1,70 @@ + + + + +
        + + + + + + + + +
        + + + ' ); + } + ?> + + + +
        +
        + + + + + + diff --git a/wp-content/themes/twentysixteen/functions.php b/wp-content/themes/twentysixteen/functions.php new file mode 100644 index 000000000..68e4a5ef0 --- /dev/null +++ b/wp-content/themes/twentysixteen/functions.php @@ -0,0 +1,575 @@ + tag in the document head, and expect WordPress to + * provide it for us. + */ + add_theme_support( 'title-tag' ); + + /* + * Enable support for custom logo. + * + * @since Twenty Sixteen 1.2 + */ + add_theme_support( + 'custom-logo', + array( + 'height' => 240, + 'width' => 240, + 'flex-height' => true, + ) + ); + + /* + * Enable support for Post Thumbnails on posts and pages. + * + * @link https://developer.wordpress.org/reference/functions/add_theme_support/#post-thumbnails + */ + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 1200, 9999 ); + + // This theme uses wp_nav_menu() in two locations. + register_nav_menus( + array( + 'primary' => __( 'Primary Menu', 'twentysixteen' ), + 'social' => __( 'Social Links Menu', 'twentysixteen' ), + ) + ); + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( + 'html5', + array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); + + /* + * Enable support for Post Formats. + * + * See: https://codex.wordpress.org/Post_Formats + */ + add_theme_support( + 'post-formats', + array( + 'aside', + 'image', + 'video', + 'quote', + 'link', + 'gallery', + 'status', + 'audio', + 'chat', + ) + ); + + /* + * This theme styles the visual editor to resemble the theme style, + * specifically font, colors, icons, and column width. + */ + add_editor_style( array( 'css/editor-style.css', twentysixteen_fonts_url() ) ); + + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for responsive embeds. + add_theme_support( 'responsive-embeds' ); + + // Add support for custom color scheme. + add_theme_support( + 'editor-color-palette', + array( + array( + 'name' => __( 'Dark Gray', 'twentysixteen' ), + 'slug' => 'dark-gray', + 'color' => '#1a1a1a', + ), + array( + 'name' => __( 'Medium Gray', 'twentysixteen' ), + 'slug' => 'medium-gray', + 'color' => '#686868', + ), + array( + 'name' => __( 'Light Gray', 'twentysixteen' ), + 'slug' => 'light-gray', + 'color' => '#e5e5e5', + ), + array( + 'name' => __( 'White', 'twentysixteen' ), + 'slug' => 'white', + 'color' => '#fff', + ), + array( + 'name' => __( 'Blue Gray', 'twentysixteen' ), + 'slug' => 'blue-gray', + 'color' => '#4d545c', + ), + array( + 'name' => __( 'Bright Blue', 'twentysixteen' ), + 'slug' => 'bright-blue', + 'color' => '#007acc', + ), + array( + 'name' => __( 'Light Blue', 'twentysixteen' ), + 'slug' => 'light-blue', + 'color' => '#9adffd', + ), + array( + 'name' => __( 'Dark Brown', 'twentysixteen' ), + 'slug' => 'dark-brown', + 'color' => '#402b30', + ), + array( + 'name' => __( 'Medium Brown', 'twentysixteen' ), + 'slug' => 'medium-brown', + 'color' => '#774e24', + ), + array( + 'name' => __( 'Dark Red', 'twentysixteen' ), + 'slug' => 'dark-red', + 'color' => '#640c1f', + ), + array( + 'name' => __( 'Bright Red', 'twentysixteen' ), + 'slug' => 'bright-red', + 'color' => '#ff675f', + ), + array( + 'name' => __( 'Yellow', 'twentysixteen' ), + 'slug' => 'yellow', + 'color' => '#ffef8e', + ), + ) + ); + + // Indicate widget sidebars can use selective refresh in the Customizer. + add_theme_support( 'customize-selective-refresh-widgets' ); + } +endif; // twentysixteen_setup +add_action( 'after_setup_theme', 'twentysixteen_setup' ); + +/** + * Sets the content width in pixels, based on the theme's design and stylesheet. + * + * Priority 0 to make it available to lower priority callbacks. + * + * @global int $content_width + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_content_width() { + $GLOBALS['content_width'] = apply_filters( 'twentysixteen_content_width', 840 ); +} +add_action( 'after_setup_theme', 'twentysixteen_content_width', 0 ); + +/** + * Add preconnect for Google Fonts. + * + * @since Twenty Sixteen 1.6 + * + * @param array $urls URLs to print for resource hints. + * @param string $relation_type The relation type the URLs are printed. + * @return array $urls URLs to print for resource hints. + */ +function twentysixteen_resource_hints( $urls, $relation_type ) { + if ( wp_style_is( 'twentysixteen-fonts', 'queue' ) && 'preconnect' === $relation_type ) { + $urls[] = array( + 'href' => 'https://fonts.gstatic.com', + 'crossorigin', + ); + } + + return $urls; +} +add_filter( 'wp_resource_hints', 'twentysixteen_resource_hints', 10, 2 ); + +/** + * Registers a widget area. + * + * @link https://developer.wordpress.org/reference/functions/register_sidebar/ + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_widgets_init() { + register_sidebar( + array( + 'name' => __( 'Sidebar', 'twentysixteen' ), + 'id' => 'sidebar-1', + 'description' => __( 'Add widgets here to appear in your sidebar.', 'twentysixteen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'Content Bottom 1', 'twentysixteen' ), + 'id' => 'sidebar-2', + 'description' => __( 'Appears at the bottom of the content on posts and pages.', 'twentysixteen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'Content Bottom 2', 'twentysixteen' ), + 'id' => 'sidebar-3', + 'description' => __( 'Appears at the bottom of the content on posts and pages.', 'twentysixteen' ), + 'before_widget' => '
        ', + 'after_widget' => '
        ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); +} +add_action( 'widgets_init', 'twentysixteen_widgets_init' ); + +if ( ! function_exists( 'twentysixteen_fonts_url' ) ) : + /** + * Register Google fonts for Twenty Sixteen. + * + * Create your own twentysixteen_fonts_url() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return string Google fonts URL for the theme. + */ + function twentysixteen_fonts_url() { + $fonts_url = ''; + $fonts = array(); + $subsets = 'latin,latin-ext'; + + /* translators: If there are characters in your language that are not supported by Merriweather, translate this to 'off'. Do not translate into your own language. */ + if ( 'off' !== _x( 'on', 'Merriweather font: on or off', 'twentysixteen' ) ) { + $fonts[] = 'Merriweather:400,700,900,400italic,700italic,900italic'; + } + + /* translators: If there are characters in your language that are not supported by Montserrat, translate this to 'off'. Do not translate into your own language. */ + if ( 'off' !== _x( 'on', 'Montserrat font: on or off', 'twentysixteen' ) ) { + $fonts[] = 'Montserrat:400,700'; + } + + /* translators: If there are characters in your language that are not supported by Inconsolata, translate this to 'off'. Do not translate into your own language. */ + if ( 'off' !== _x( 'on', 'Inconsolata font: on or off', 'twentysixteen' ) ) { + $fonts[] = 'Inconsolata:400'; + } + + if ( $fonts ) { + $fonts_url = add_query_arg( + array( + 'family' => urlencode( implode( '|', $fonts ) ), + 'subset' => urlencode( $subsets ), + ), + 'https://fonts.googleapis.com/css' + ); + } + + return $fonts_url; + } +endif; + +/** + * Handles JavaScript detection. + * + * Adds a `js` class to the root `` element when JavaScript is detected. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_javascript_detection() { + echo "\n"; +} +add_action( 'wp_head', 'twentysixteen_javascript_detection', 0 ); + +/** + * Enqueues scripts and styles. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_scripts() { + // Add custom fonts, used in the main stylesheet. + wp_enqueue_style( 'twentysixteen-fonts', twentysixteen_fonts_url(), array(), null ); + + // Add Genericons, used in the main stylesheet. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.4.1' ); + + // Theme stylesheet. + wp_enqueue_style( 'twentysixteen-style', get_stylesheet_uri() ); + + // Theme block stylesheet. + wp_enqueue_style( 'twentysixteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentysixteen-style' ), '20181230' ); + + // Load the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentysixteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentysixteen-style' ), '20160816' ); + wp_style_add_data( 'twentysixteen-ie', 'conditional', 'lt IE 10' ); + + // Load the Internet Explorer 8 specific stylesheet. + wp_enqueue_style( 'twentysixteen-ie8', get_template_directory_uri() . '/css/ie8.css', array( 'twentysixteen-style' ), '20160816' ); + wp_style_add_data( 'twentysixteen-ie8', 'conditional', 'lt IE 9' ); + + // Load the Internet Explorer 7 specific stylesheet. + wp_enqueue_style( 'twentysixteen-ie7', get_template_directory_uri() . '/css/ie7.css', array( 'twentysixteen-style' ), '20160816' ); + wp_style_add_data( 'twentysixteen-ie7', 'conditional', 'lt IE 8' ); + + // Load the html5 shiv. + wp_enqueue_script( 'twentysixteen-html5', get_template_directory_uri() . '/js/html5.js', array(), '3.7.3' ); + wp_script_add_data( 'twentysixteen-html5', 'conditional', 'lt IE 9' ); + + wp_enqueue_script( 'twentysixteen-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20160816', true ); + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + if ( is_singular() && wp_attachment_is_image() ) { + wp_enqueue_script( 'twentysixteen-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20160816' ); + } + + wp_enqueue_script( 'twentysixteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20181230', true ); + + wp_localize_script( + 'twentysixteen-script', + 'screenReaderText', + array( + 'expand' => __( 'expand child menu', 'twentysixteen' ), + 'collapse' => __( 'collapse child menu', 'twentysixteen' ), + ) + ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_scripts' ); + +/** + * Enqueue styles for the block-based editor. + * + * @since Twenty Sixteen 1.6 + */ +function twentysixteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentysixteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css', array(), '20181230' ); + // Add custom fonts. + wp_enqueue_style( 'twentysixteen-fonts', twentysixteen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentysixteen_block_editor_styles' ); + +/** + * Adds custom classes to the array of body classes. + * + * @since Twenty Sixteen 1.0 + * + * @param array $classes Classes for the body element. + * @return array (Maybe) filtered body classes. + */ +function twentysixteen_body_classes( $classes ) { + // Adds a class of custom-background-image to sites with a custom background image. + if ( get_background_image() ) { + $classes[] = 'custom-background-image'; + } + + // Adds a class of group-blog to sites with more than 1 published author. + if ( is_multi_author() ) { + $classes[] = 'group-blog'; + } + + // Adds a class of no-sidebar to sites without active sidebar. + if ( ! is_active_sidebar( 'sidebar-1' ) ) { + $classes[] = 'no-sidebar'; + } + + // Adds a class of hfeed to non-singular pages. + if ( ! is_singular() ) { + $classes[] = 'hfeed'; + } + + return $classes; +} +add_filter( 'body_class', 'twentysixteen_body_classes' ); + +/** + * Converts a HEX value to RGB. + * + * @since Twenty Sixteen 1.0 + * + * @param string $color The original color, in 3- or 6-digit hexadecimal form. + * @return array Array containing RGB (red, green, and blue) values for the given + * HEX code, empty array otherwise. + */ +function twentysixteen_hex2rgb( $color ) { + $color = trim( $color, '#' ); + + if ( strlen( $color ) === 3 ) { + $r = hexdec( substr( $color, 0, 1 ) . substr( $color, 0, 1 ) ); + $g = hexdec( substr( $color, 1, 1 ) . substr( $color, 1, 1 ) ); + $b = hexdec( substr( $color, 2, 1 ) . substr( $color, 2, 1 ) ); + } elseif ( strlen( $color ) === 6 ) { + $r = hexdec( substr( $color, 0, 2 ) ); + $g = hexdec( substr( $color, 2, 2 ) ); + $b = hexdec( substr( $color, 4, 2 ) ); + } else { + return array(); + } + + return array( + 'red' => $r, + 'green' => $g, + 'blue' => $b, + ); +} + +/** + * Custom template tags for this theme. + */ +require get_template_directory() . '/inc/template-tags.php'; + +/** + * Customizer additions. + */ +require get_template_directory() . '/inc/customizer.php'; + +/** + * Add custom image sizes attribute to enhance responsive image functionality + * for content images + * + * @since Twenty Sixteen 1.0 + * + * @param string $sizes A source size value for use in a 'sizes' attribute. + * @param array $size Image size. Accepts an array of width and height + * values in pixels (in that order). + * @return string A source size value for use in a content image 'sizes' attribute. + */ +function twentysixteen_content_image_sizes_attr( $sizes, $size ) { + $width = $size[0]; + + if ( 840 <= $width ) { + $sizes = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px'; + } + + if ( 'page' === get_post_type() ) { + if ( 840 > $width ) { + $sizes = '(max-width: ' . $width . 'px) 85vw, ' . $width . 'px'; + } + } else { + if ( 840 > $width && 600 <= $width ) { + $sizes = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px'; + } elseif ( 600 > $width ) { + $sizes = '(max-width: ' . $width . 'px) 85vw, ' . $width . 'px'; + } + } + + return $sizes; +} +add_filter( 'wp_calculate_image_sizes', 'twentysixteen_content_image_sizes_attr', 10, 2 ); + +/** + * Add custom image sizes attribute to enhance responsive image functionality + * for post thumbnails + * + * @since Twenty Sixteen 1.0 + * + * @param array $attr Attributes for the image markup. + * @param int $attachment Image attachment ID. + * @param array $size Registered image size or flat array of height and width dimensions. + * @return array The filtered attributes for the image markup. + */ +function twentysixteen_post_thumbnail_sizes_attr( $attr, $attachment, $size ) { + if ( 'post-thumbnail' === $size ) { + if ( is_active_sidebar( 'sidebar-1' ) ) { + $attr['sizes'] = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 60vw, (max-width: 1362px) 62vw, 840px'; + } else { + $attr['sizes'] = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 88vw, 1200px'; + } + } + return $attr; +} +add_filter( 'wp_get_attachment_image_attributes', 'twentysixteen_post_thumbnail_sizes_attr', 10, 3 ); + +/** + * Modifies tag cloud widget arguments to display all tags in the same font size + * and use list format for better accessibility. + * + * @since Twenty Sixteen 1.1 + * + * @param array $args Arguments for tag cloud widget. + * @return array The filtered arguments for tag cloud widget. + */ +function twentysixteen_widget_tag_cloud_args( $args ) { + $args['largest'] = 1; + $args['smallest'] = 1; + $args['unit'] = 'em'; + $args['format'] = 'list'; + + return $args; +} +add_filter( 'widget_tag_cloud_args', 'twentysixteen_widget_tag_cloud_args' ); diff --git a/wp-content/themes/twentysixteen/genericons/COPYING.txt b/wp-content/themes/twentysixteen/genericons/COPYING.txt new file mode 100644 index 000000000..aece214b7 --- /dev/null +++ b/wp-content/themes/twentysixteen/genericons/COPYING.txt @@ -0,0 +1,9 @@ +Genericons is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +The fonts are distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + +This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file diff --git a/wp-content/themes/twentysixteen/genericons/Genericons.eot b/wp-content/themes/twentysixteen/genericons/Genericons.eot new file mode 100644 index 000000000..7322565a0 Binary files /dev/null and b/wp-content/themes/twentysixteen/genericons/Genericons.eot differ diff --git a/wp-content/themes/twentysixteen/genericons/Genericons.svg b/wp-content/themes/twentysixteen/genericons/Genericons.svg new file mode 100644 index 000000000..47406858f --- /dev/null +++ b/wp-content/themes/twentysixteen/genericons/Genericons.svg @@ -0,0 +1,537 @@ + + + + + +Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015 + By Joen Asmussen +Copyright (c) 2015, Joen Asmussen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/twentysixteen/genericons/Genericons.ttf b/wp-content/themes/twentysixteen/genericons/Genericons.ttf new file mode 100644 index 000000000..017443851 Binary files /dev/null and b/wp-content/themes/twentysixteen/genericons/Genericons.ttf differ diff --git a/wp-content/themes/twentysixteen/genericons/Genericons.woff b/wp-content/themes/twentysixteen/genericons/Genericons.woff new file mode 100644 index 000000000..0e7212af7 Binary files /dev/null and b/wp-content/themes/twentysixteen/genericons/Genericons.woff differ diff --git a/wp-content/themes/twentysixteen/genericons/LICENSE.txt b/wp-content/themes/twentysixteen/genericons/LICENSE.txt new file mode 100644 index 000000000..d159169d1 --- /dev/null +++ b/wp-content/themes/twentysixteen/genericons/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/wp-content/themes/twentysixteen/genericons/README.md b/wp-content/themes/twentysixteen/genericons/README.md new file mode 100644 index 000000000..4aa8cc0dd --- /dev/null +++ b/wp-content/themes/twentysixteen/genericons/README.md @@ -0,0 +1,218 @@ +# Genericons + +Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. + +Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients! + + +## Usage + +To use it, place the `genericons` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this: + +``` +.my-icon:before { + content: '\f101'; + font: normal 16px/1 'Genericons'; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +``` + +This will output a comment icon before every element with the class "my-icon". The `content: '\f101';` part of this CSS is easily copied from the helper tool at http://genericons.com/, or `example.html` in the `font` directory. + +You can also use the bundled example.css if you'd rather insert the icons using HTML tags. + + +## Building your own Genericons + +In the `source` directory, you'll find all Genericons source icons in SVG format. This will allow you to bake your own flavor of Genericons using a tool such as FontCustom (http://fontcustom.com) or Fontello (http://fontello.com). Perhaps you need more logos than are available in the base Genericons package? Just add those logos and bake your own expanded set. Maybe you need just a few of the icons Genericons provides, but would like to trim the fat? Remove the ones you won't need! + + +### FontCustom instructions + +FontCustom is a powerful commandline tool which which bakes icon fonts from the SVG source files. It's the tool Genericons is built on, and it provides highly accurate and perfectly crisp icons, *provided all SVGs have the same pixel height*. + +It's not that hard to use, and once it's installed you'll never think of icon-fonts the same way again. Seriously, you should try it. Icon fonts for everyone! + +1. Install FontCustom. Follow the instructions on the website: http://fontcustom.com/ +2. In the `source` directory from the Genericons download, open the file called `fontcustom.yml` in a text editor. Customize the `font_name` and `css_selector`. +3. Open a terminal. Browse to the `source` directory. Type `fontcustom compile`. + +You'll now receive a brand new subdirectory called `fontcustom-webfont`. Inside here you'll find your very own flavor of Genericons, with only the icons you want, including a handy example page that'll help you copy/paste the necessary glyphs or CSS values. + +*Please note*: In the source directory, there's a hidden file called `.fontcustom-manifest.json`. This file is auto-generated by the FontCustom tool, and holds codepoints (unicode addresses) for every glyph, so its address doesn't change when you add or remove icons. If you feel the need to "start fresh" with the unicode addresses, you should delete this file. + + +### Fontello instructions + +Fontello is very easy to use. Just drop the SVG files of the icons you want onto their website and download the font. The downside is that Fontello seems to ignore the 16px pixelgrid, so you'll end up with fuzzy icons. Buyer beware. + + +## Notes + +**Photoshop mockups** + +The `Genericons.ttf` file can be placed in your system fonts folder and used Photoshop or other graphics apps if you like. + +If you're using Genericons in your Photoshop mockups, please remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system. + +**Pixel grid** + +Genericons has been designed for a 16x16px grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible blurry. + +**Antialiasing** + +If you keep intact the `-webkit-font-smoothing: antialiased;` and `-moz-osx-font-smoothing: grayscale;` CSS properties. That'll make the icons look their best possible, in Firefox and WebKit based browsers. + +**optimizeLegibility** + +Note: On Android browsers with version 4.2, 4.3, and probably later, Genericons will simply not show up if you're using the CSS property "text-rendering" set to "optimizeLegibility. + +**Updates** + +We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended. + +**Base64 encoding** + +By default, Genericons ships with a stylesheet that includes a base64 encoded version of the font. This is to sidestep issues with cross-origin requests for fonts, that happen when a stylesheet loads a font that's stored on a different domain or subdomain. This is very common when using caching plugins. + +Base64 encoding comes with a 25% filesize overhead compared to just loading the WOFF file directly. If you know that you won't be loading fonts across domains, or have the ability to edit your server config files to allow it, you can get slightly faster performance by loading Genericons without the base64 encoding. Simply edit `genericons.css` and edit the `@font-face` declaration to match this: + +``` +@font-face { + font-family: 'Genericons'; + src: url('Genericons.woff') format('woff'), + url('Genericons.ttf') format('truetype'), + url('Genericons.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; +} +``` + + + +## Changelog + +**3.4.1** + +* IE8 support restored. + +**3.4** + +* Updated: Update Google Plus icon to new geometric version. This also *retires* the "alt" version, so *please be mindful if you choose to update, make sure you use the `f206` glyph, not the `f218` glyph, as it no longer exists! +* New: Added helper rotation classes to the base CSS, thanks to geminorum. Apply `genericon-rotate-90` to rotate 90 degrees, -180, -270. Or `genericon-flip-horizontal` or -vertical. + +*Again, it is important if you choose to update to this version, make sure you're not using `genericon-googleplus-alt` or unicode character `f218`, as that has been retired! Use `genericon-googleplus` and glyph `f206` instead!* + +**3.3.1** + +Security Hardening: Remove Genericons example.html file. Please visit genericons.com instead. + +**3.3** + +The Open Source release. + +You can now build your own flavors of Genericons with all the SVGs provided. + + +**3.2** + +A number of new icons and a couple of quick updates. + +* New: Activity +* New: HTML anchor +* New: Bug +* New: Download +* New: Handset +* New: Microphone +* New: Minus +* New: Plus +* New: Move +* New: Rating stars, empty, half, full +* New: Shuffle +* New: video camera +* New: Spotify +* New: Twitch +* Update: Fixed geometry in Edit icon +* Update: Updated Foursquare icon +* IE8 bugfix, slipstreamed into this. + +Twitch and Spotify mark the last social icons that will be added to Genericons. +Future social icons will have to happen in a separate font. + +**3.1** + +Genericons is now generated using a commandline tool called FontCustom. This makes it far easier to add new icons to the font, but the switch means the download zip now has a different layout, fonts have different filenames, there's now no .otf font included (but the .ttf should suffice), and the font now has slightly different metrics. I've taken great care to ensure this new version should work as a drop-in replacement, but please be mindful and test carefully if you choose to upgrade. + +* Per feedback, the baked-in 16px width and height has been removed from the helper CSS. It wasn't really necessary (the glyph itself has these dimensions naturally), and it caused some headaches. +* Base64 encoding is now included by default in the helper CSS. This makes it drop-in easy to get Genericons working in Firefox even when using a CDN. +* Title attribute on website tool. +* New: Website. +* New: Ellipsis. +* New: Foursquare. +* New: X-post. +* New: Sitemap. +* New: Hierarchy. +* New: Paintbrush. +* Updated: Show and Hide icons were updated for clarity. + +**3.0.3** + +Bunch of updates mostly. + +* Two new icons, Dropbox and Fullscreen. +* Updates to all icons containing an exclamation mark. +* Updates to Image and Quote. +* Nicer "Share" icon. +* Bigger default Linkedin icon. + +**3.0.2** + +A slew of new stuff and updates. + +* Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket. +* New generic icons: heart, lock and print. +* New editing icons: code, bold, italic, image +* New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag. +* The hyperlink icon has been updated to be clearer, chunkier. +* The "home" icon has been updated for style, size and clarity. +* The email icon has been updated for style and clarity, and to fit with the new subscribe icons. +* The document icon has been updated for style. +* The "pin" icon has been updated for style and clarity. +* The Twitter icon has been scaled down to fit with the other social icons. + +**3.0.1** + +Mostly maintenance. + +* Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon. +* Added inverse Google+ and Path. +* Replaced tabs with spaces in the helper CSS. +* Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway. + +**3.0** + +Mainly maintenance and a few new icons. + +* Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio +* Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big. +* So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu. +* Genericons.com now has a mini release blog. +* The CSS has prettier formatting, props Konstantin Obenland. + +**2.09** + +Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet. + +**2.06** + +Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox. + +**2.05** + +Added a bunch of new icons, including upload to cloud, download to cloud, many more. + +**2.0** + +Initial public release diff --git a/wp-content/themes/twentysixteen/genericons/genericons.css b/wp-content/themes/twentysixteen/genericons/genericons.css new file mode 100644 index 000000000..87cf754e1 --- /dev/null +++ b/wp-content/themes/twentysixteen/genericons/genericons.css @@ -0,0 +1,263 @@ +/** + + Genericons + +*/ + + +/* IE8 and below use EOT and allow cross-site embedding. + IE9 uses WOFF which is base64 encoded to allow cross-site embedding. + So unfortunately, IE9 will throw a console error, but it'll still work. + When the font is base64 encoded, cross-site embedding works in Firefox */ +@font-face { + font-family: "Genericons"; + src: url("./Genericons.eot"); + src: url("./Genericons.eot?") format("embedded-opentype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Genericons"; + src: url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADakAA0AAAAAVqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAA2iAAAABoAAAAcdeu6KE9TLzIAAAGgAAAARQAAAGBkLHXFY21hcAAAAogAAACWAAABsqlys6FjdnQgAAADIAAAAAQAAAAEAEQFEWdhc3AAADaAAAAACAAAAAj//wADZ2x5ZgAABFQAAC7AAABIkKrsSc5oZWFkAAABMAAAAC8AAAA2C2BCV2hoZWEAAAFgAAAAHQAAACQQuAgGaG10eAAAAegAAACfAAABOFjwU3Jsb2NhAAADJAAAATAAAAEwy4vdrm1heHAAAAGAAAAAIAAAACAA6QEZbmFtZQAAMxQAAAE5AAACN1KGf59wb3N0AAA0UAAAAjAAAAXo9iKXv3jaY2BkYGAAYqUtWvLx/DZfGbg5GEDgkmLVWhj9/ycDAwcbWJyDgQlEAQABJgkgAHjaY2BkYOBgAIIdHAz/fwLZbAyMDKiAFQBE7gLWAAAAAAEAAACXAOgAEAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNgYf/MOIGBlYGB1Zh1JgMDoxyEZr7OkMYkxMDAxMDKzAADjAIMCBCQ5prC0MCg8FWcA8TdwQFVg6REgYERAPvTCMQAAAB42i1PsRXCUAg8SAprl7FN4QZqb2WZGRjAIVLrHj4be4ews7OJHAd54cMBd+Af7JHmt3RPYAOHAYFweFhmYE4jlj+uVb8nshCzd/qVeNUCLysG8lgwrojfSW/pcTK6o7rWX82En6HJwIEv+wbi28IwpndxRu/JaJGStHRDq5EB+OKCNumZLlSVl2TnOFVtl9nR5t7woR0QzVT+D7cKLeIAeNpjYGBgZoBgGQZGBhBYA+QxgvksDBOAtAIQsoDoj5yfOD9JflL7zPGF84vkF80vll88v0R+yfxS9lX8/3+wCoZPDJ8EPil8ZvjC8EXgi8IXgy8OXwK+JHwp+Mrw////x/wsfHx8HHxMvJo8Rjw6PGo8CjxSPCI8fDwc3PVQ2/ECRjYGuDJGJiDBhK4A4pXhDABtHClYAAAARAURAAAALAAsACwALABaAIQAzADyAQABHAFGAZQBzgIIArIDTAOkA+AEEgTCBRYFYgW+BjAGwgbkByQHSAeCB+AI2Ao4CowLGgvQDBwM6g08DX4Nug4kDkYOYg6ADsoO7A8yD4gP8hAwEGYQpBDuEUgRshHUEfYSQBJeEnoSlhLEEtwTIBNYE6oT6hQaFC4UShSQFJ4UtBTyFSAVjBW4FegV+hYUFiwWQBZWFmQWchaIFuYXFhdUF4gXyhgEGCwYThh8GNYZEhlCGVgZZhl8GZIZoBnQGhIaShp8GtIa6Br+GzAbVBt+G8Ib/Bw6HGgciBy8HOwdHh1WHXAdmB3eHvYfIB8uHzofSB9WH6of4CA4IMghACFCIcQh4CIGIjoiSCJ8IpYiyCLmIxAjWiPwJCQkSHja1Xx5YFTVvf/53nUm++zJJJnMkpkJJJkss5GFMIQ9w04IS0BZRSJLMIIo1l4XFETQFkVFBKwVrbuWpRaXPOtalZaCPKu1D2yf28NX21qfQubk9z3nzoSAS//+Mbn3nnvuuWc/n+/n+z3fCxHIaEKEJfJMIhKVhJ4GUtP8jCqRz+ufVuQ/NT8jChgkT4ssWmbRz6gK9DU/Ayw+bPKY/B6TZ7TgpuVwN71Unnnm0dHS24QQRSACUYis8XyzST6xEAch4LF5ZJsnKkc9NsDDj2ETXgUikT4iaClNJEBSGoZIP74qa+l//YRfKB5EAEyj4g/ztWBZbslcIEjucqHATOpjkYBXsYo18DNYeOQI3UMvonuOHIHXj+/YcXyHSs7FLGQp+o7sYA8IFq+BpmqKhtk6SDEZinWVWfMsHlLfIkRCgjdPsLpAtMlRUu8CmzVP8HlDEInJmkC+wcbihT54cN/6cePW79Mv/f1E+MUT2zvCM68cOWt7Rwc2pk8TNQ3IWW0gEbuI3yxI7KW9HdtnjbxyZrhj+xPbWX0EYhjcf9h3Jg9gldjBfhLm1af1ERF7BTAEmoxngQDeU35mB/YPsDiFtU0gxChgX2tn8S6FP3zG38O+zMWEVkU1yaYQRCMxt13WblvTT9bcdgpaTsnahlcqUp9owt0Vr2zYc+oUHwN8S2FjwMYV62PNA5+pPhaFc0EP4JhuPr2la4eQCVCsNRvnLac3A9nRNShIBFZPXpciEmHjareZsEbRWNTEBhVvHDasmyniwP7HJ+4AhlsgbmOP7PUsWVA8DFmHuzoSa3avSXR09XZ0HaZfHa7raOARKjm8kWoLdwfuamwHbcqaNVOo1t54V2D3QtA2nsQL1TYePrwRtMTaWUWYhvI0gGlYz5FeldWtgPiwvfW8bpVgAk/cwxqtR/hwhHxeVq9YWNG6duzo0miCHtBgy55TlN/jbYIHFGwyi6IJ6NVO7RG0c7c7ugBDRITMuMlYqovNAFYeuNg4BWPRSBCDBRhsEaKRQJCl5mOvSfmxpqbY3GQSCmYvXjy7s6bVP2WcjI/P4iEUxG7ddWt0brKrC5/P+Yz2fTans2bNjWMvPTwOi8B2Vhtw5pEr+cpyCWabVVAkVQngpGDFtChYcIsQCIYgT1ADQUUNifmQB7g4HIrN6pIdiponhCAYkoJDMd7ucEkOlxK32q02qxIMlAewtuYWQVwLdsg6+fyNbcufpfRunw+CruicxZMm1JYsV4zGfIuUV9+8OH7VzTdfFV80IpSVVZBvMErLS2rHT140JxrJtYfGjRjrFIyl3liplFNkNDlFY6nTmwuKwx0fu6gZfL67aOrZ5W03Pn/SQNiZfrXlIfr62RfrVXeh9JvpoxY4FUt5/eRFm2bsvTy/YvzFdSDK5jq/F8DrrzMpglAxtSFekt2zZ/rmRZPr/WYl1JmVJxdEq6VcX3GhoGY7zaAUuoZ5pNwhrqF5WabyKXVZhW4l/MJZaHhoC28cdiIDKkJ4nxqIiZQittSTBJlKiL8+LogKUe3+mDleLrvAjLhidsRIPBDMAda9LsERkxwCsETlccHiVXx2S4sUD1SBWyIIewRxjzDgk8iBw54n/0w3db0rjt/1ViE9TY/nNXaeue+KFT+Cxz4uSNCP6Bp5+biD/9dsLw0qj8DEq51nG1+if695Cb68Zevjbs19yW+VvZO2LB9yLT1Er4JdsAEsP/85/ZxupEvw+PznPweLNhWq4MY2evS13r0roL03FCq+m/5W2Jx4iP5u/dsQm1SrddTDuw0Xd7lKw+05HqUYSuGfM+nhE/bxIXBCrGAf3Sc0ultay6/9qXZB5lggL5R1FyAeVyEef0Aa8EZR7Qi4kuRz++3helzyOL0wgJfhOL8YXsXtkgNnaIsQrrc7YvE8UGOqllwpVM/Vnvo9pdvoEdpfVTXzgZ+MuPJ5n99dV/vjhyfPTs6uvwVu+TCrcfGm5OQt4R+tsLY3rFJquycX25Yff/vwfT0jH5QDY+vEbavV3KI3b5QrxfqfXbS445E3s4dUtm1a3Dg8XpRILPfm6vUlKD9UjQQH0MGHKG3xDEcZEXbEAz4UIKUIiyg0zwMI+hHk5dCPKlv3yZOWX/TT2VWUpqrYAxUR4SxB6HwNpN6c5jj8Iyt28drRp2lfqmFHl4xPOLZjufLHWK6b4YPIBAMrI9IiYU+Ugejl5YrSbpiQT1+lvX/+s6N6/EXXtsW7nE51/pKKiNMofU2P9h0SJ0ANCJEFs8bHShVRpB+Z/NVeUTASRJ9M2yyIzB6yhKzi2GA3s0HxeXFFF5hjgDMXFKjHuZsNdgtYYvEWMRphQGBA6AjXOwLlPq+kqPXh+tgIiNkVVVHBIiKOxBz2c3F+HGpVjJmjEbENVsDEL7aN7Nn38idXH6T7v9i27Qv6pzNv0x+PFQO3XC8JX/+j+y/gmypIBXkW1VFoBYdslvMkVZjcCMZV9NN7b6H9R8YXF/lX+Lw2S561qhb8T13bbs23WjdOCVzm82GkrVLwycO/OvSeqmHu+w9e/cnL+3pGbvsCJvLSU3mn6YYlUul9fTUhWREeSo30SHv7dkOOklNXNzZcGJoT9Qp+gzu7JL/Qlt3QAUu6Ox9YJQsilHlFWei7SzDBbFXwuiErE6lWVN68M9XQBT3vH2FzXSC3wj9Rlm4ldWQ4G0W73q8hITOh1ZARh5FBLM5+Me7xh20+my/qi4ajYeE9IZAbGLPkmh3T1723++JF9797+do3WncKVqO9oMjucpWblz66ZMmjS0d2j48VSXS/uE9nVJIWDE/fcc2SMYGLd7+3bu37uy+ePPEeyFVzDdmqURIXP/rbRxeXx8Y0Fb3Nk2M9RZ13Kc8jJzFjXTkjCTJxx4YX4R/FPkZF2FQHFYWyxxz02FoUfCbYhPn0ILQ9KExbumxGvL0KqjrkAnpoWkfluKG52fSQJMGEbJvbUxNuLZ++eVkDEPG/bl40oW1h9aS62kmhszsF8/Ir/WF3cSz1n+L187eaSnzFxZbs+GWPr2ZcKT0/Gct0k+ZBKzC91Bg/saCYDoEPiYTVjhG8moIa9dgLbCrWOs672mbSVyVbeCiGHfSbG0ZPg6mto6ZPGyk1PbSpftowbwH9GgAMhixvg3fMyMwy1ZfkGSIW9X0sbpzS2DxpclPjlL4N8NqTB4sqg4XdHtpz4CAcrrQ5h5Re3E5nY2c+isJhGsqFqazGLkkf9kBQwJURDMQtbALEWKWsrD/ZGsFVEULemYdJkQSpeewvyOeJLNWt++MT2xZEqmdctePgksVPeicUeOffqZb+TMqzb71kxuxAc57j6iVrn1005obXfzT/0ZtXTQjOMKuqaBVUn33munj5xBV3/fIvBhJftGnvgfkbPnxx18rm+Qn6wbAN22MPXy08ZfQsj9x6+LLp4e3/0bD49l9B3cFLn76uLTSt+6a7p965yOYszJmSVWgy+u54rnvS7nu3rp9Vr+N4RvYtzvCJAiFPwGYGY3ELn8/AGiXqjbI77AgbEI8Fgmk0x6nD2CRS7TinOWxuYboywE5yBMiFXCIt5+/YliwZX7J12lW/u31a0+W73u5Zd3T3tVOGdC0zl8iCSZDlvNHjtN41Sx/oGjZ1x0XRdn9Odp1r3KjY3GiBwbjG4pAP0NO7BjMH+hn9iuU/dP1icEaTlx0G8c7Ox+9YnYhfdM3td7bdcmyoIc9iSGRZbaYpVy185uZpzctvm7n96zujndGaXVcObZ01+upk5TSLhfpnLNo8BRyw7sgAQRDIXmGBukDei4srn/PeAuS2BeXpq2yF2V9+SR/+MnVFOiDvZecv03d41eUlUW9Xc4gXbyQR+bkP0TuIkwWpYhx/FrPDjCITQxhlVjaAtSAHlaGfpu5bsco7bZ71qvaN1z0152hdxNo8YdiabkPBpsSYG1VioA/SFB1Oh0AZ3HYtlLWvuKLnboOV/p7+agr9+1NPzbu7FB5nbcjoT/mIDd9af0ZBIag27OnjZ+CanoKsl/J7Ac99nL0SgHeJplTgWvbqWgUqEw47kw9xEwoHnDaMeEZNvihvVFwaBb+gs0wF1c0TN93cM3/+ig0XXzSqNfJqVzIZqjapGm2iH9PIrqoqZ/ls+lHMbi8ra2i8boOwNuVLJObO2cKm52D8cJBqjsEX1J+4lQK7O1aANeKr0c05B9bNHkb2b8J5WQlepRSs9iaojw2GELGMvnSKqVBIzf/XvPk0/ez0ZjP932RUJtFkMqqlT+ejCCWn9Lf6TolkbCMqSKg7NY1JsVekA5l3knxp9QOooPSTbeSnZAe5h9xH7icPkoeZNodNsNUq7M+q1KHOoNQpqpWdFBsDFOxOJR9A8QahtgYCwdpANKB3byAYCfIVGIhiZAS7IFobi8bqIqzPo/VxftV/I6A2DrF6B9Ta62rtYbtj4GdjRy37szqsdXYwyXEjOPyyLQ4mv+qPB1UjBGV/VFVx1Pk/Af+E9BkvqVZThSnVCiLgdBZZrADn/RNgIDGKVuEFTC68AAIM5JHOCDArcH2cujJ19mNwpV59EO6kH34sjPv000+hUpA/ph8KjQ9K/5AlWi2oAkjsHVaowIpM54D5A63OzoFjLPt0TUX+HC+AL+GLEhyTZAFkEPCWHew1ngE7H8vOptXpFop6jqwMlgzfgCn07Rd3wmz68M4X9/5pVeoFiLx47+Rdu3ZhaPbOF+//06rz56oF5dwL5GM2V5GJFaCO5uaqVQsSYVTXBJQPDrsUV9I8AjEVgXUEMEzFFKiHWTgDUxiRRmStjdQhVQuUsyj+aoyBcAgUPUI4B8whIRjggocnY1Qcc2MP2T0TSiIqi0GO1w6XiLfsjfStAPXlOINQiAVZlojhEpYZDJjjMYyPK5KCcG+2SxI5yJgfI2T0Dkb8OAc8tpueWLlyidW075r14N4wIbn6rTtmlSdC2KNGEUb+/OVlD4Brodt/KX3/dnHo0I4tV6xrn7vgyWuT2V3tl9AvV14xvCXLsHPlqv9qanEkQxs3RTsstnBBVbS0am4gEDEYzEUFlfXFzki1udghK5VlFTWh8bmohxlt9jGBwFirTTYbi70V9spOj9cvCh0bW8Mza3Js5qmXrBtWPjJsKjaaHRsebp91+0y64TRsuqRp1o43eibdsNAZG9/TTQ899BD9dFxb7qzZUP2MyXwv/fSNdde9DyGdd+rNZLQzzUDvMqxdfRn945139E8Yn9dgm739re6xm9bWY1uzBEiuaLp1Q7j62jtTWaNuGtYz1FfiTV775ALhshdbJlmbWpZfds3637g80+d3fpgMV1uDwxcsnFlcWaZm5zkc44YMbfc4PBZByHGai9v8/haTXYFhlQKUTSh1eQSo9Pnag1aP0yIZi8rcc2pHXhYy5Yy5aHU00l5tsOfVDC+Pb2ieclU0P2flA303f/3WTTeuPXrvZVb3yq3T7qJPrN/QXer8rz27YOU99/7BJQk5t7xL/7x7H/3D+9f//8R1mT73Y3W4ej25BG9cuAjy5BAqSKY8A858HnIJsTiKJ5eI+ngspPiC3kAeJgOXWAZqSMLF0iK6RIe8Wy2aMGb26CZnXlnlitVXdl86K2E2I+waTFa3P1IaWdU+xmzxjB41rACGKdbEiNmTpo+oyxLKW6Z3zpsx0mKRCsKR5NgZ48aXFBeJJmeR0XhKdTQOKc0eP2rMww899bO7N8xzqkPEnKH1M+ffsO3QojmbZ8Qtcm6uqtD/EVS7w+3yuUqzzUKRKycXCr2VeeXV4jOpjwQ5W5It1aMuGzPx+s62Km++ASFJyS+sCCerqxdMm9hYlZP9htG9fNWD9786b/LlTW4hr6QoKz2GiEFXIAYNIddh79hVbgwNMqiRUCwy5iaivseUAtlmBWapCgz+YRqmD9rTgn3gORITJpusg2SINS3zB57bMnQgpo4Mw6QbDiy5auWUiZe//yukq6ZRdZ3r75y69cq2sYteeHB7z4wqekmT1ze8qX368g6Xu9xtKYjEOxdVDvWUOIpqIj5vkXPYsBkzu7ctXzGsIR7tnL1xXsswr6el9dLJ1aFCp8NWUlYV8/pikVlXHrxnVbfYuuzyJQdumNSYN3zFrmff62mfefnGqXeu76xL5lTN6Nn+4AuL5tPftl86e3hzRbDY6bAYjeZ8zCPkLXe7W0I2e3l5dai+FqmIMzhkQtuCS0a3BgMlVrPJ46ofMbTKbvN4orWFRagDJSdNrBkRCnH+jKyIKMzuGGESHXFX1wbwrFQiS+EcJSRUgomjOO94Zp1Gwe6ptyuaPVhkZ0cymmCsgSZGXjFu7lCtt27VwgSoiACeOWMLDAbYG01KpLiu3OAJ6mdM3ZWsqK0QtIvu/3qzbKr2lLTvnD5zrz+Q1Cn927BVDas93KIVJLVkBBmPesxmrGUMq6UPWwSJAY4VYC3TWqK9nKkzCrvzxzidV+0oE1iQWwesdgmsjhgzlyjEqzCzbsRi1e0/gBKO866MXoTpLCimHHILYgXrCtQSgn7R7mD3LpBezx/qyu949nBHvmto/rDbfkL/1hoKjRwZCrXC6HmtrfNaBU9lw5DqshmpLY+C75FH6AePPkY/eOQR8KU+rKiZWVo1pFGuxoEYUb1vWCjvilfoF/QE/eKVtQWllUXrZtTNKDn03/Nks9kGDYXT69qWL2+rmVIn0jOT/vxkycz62LyYaMh3VeZ3dORXuvKHgRJqxeJbW/VzKDS8rHZIQ3B4alnXgctWHOzqOnjiYJdwb03JxOHlDUJ7qCVUnUg9Fe8srq9b+uzGKVM2/mop6n/hkb4Z66oDC43whj07Rx4/pG75HcurJ4Wa6bU5CypCsXlsfSK/Znq6RnwkjuPBjDBM7RX5loUwHDw23VzOu81hU2VPRscKRh1x/aE0ze63e2sA5t03f4w2LwZqzega+bUtW16X7kMaoc7bPX/+7nmw/D6Mlo7Os/ttIS8tm3vPnGjnj0YfPeKpqfHAx5uef3HTZdU/Ptq5a+6cnZ1/qA0dZ/FEryPbP8B5nU/KM3ybb+Lo+jrbxkF+yPZyHBB3IamOOxRkxpn9GyTW7wWSXX76Hn3P35UMwHLZ1DC6wSSr3Kx+VN/iOcrs6Kl9LAF9H/z8hR1Sqc9XKhHdrvUCcqnWgT0WByFG0WTMiduMEHUIt8Ga1Od0O6wULBTDggVWpv4u5NPtqc9hDb0dLt+d+iL1xW61lb5FD0F56lnw0V/RtyAC4+kH9CFxL/0TTIDI2W/o28t66EvQ0rOMt10ghCpzsO0uMoa3XRUFNU9iKoQKeaBrOEwcMr6F65vtb8TNyLCYcqGzMKaZcMuiBxVo+dXZjdbIHFlWrEU1rjMGWaVX5g11Z1vL8suaK4RTXtlpSa2ylcr/dFpLyz6wFouCS5RcFvr3Yp+vGEZk2wtUsmgRpbTFarVV2MyCgTYU5IqyWlkh2xxVVSV09S/tZW5zn0GRcZ4U5jnzDLtyrT5vcbDYk2PhOMX2R9h+0GDtb9BmCPnezY/0bgfHOgFnLd9TYnsdqPw5PDaPGBZ6xd5+wjRETJ7i8jylIRPW+klmLmHJCmPHOdwqZYTMRqCESyFFKBHf7GKApmAwRdg+U5Ldk8weC5+HZcSftmtm2DQza+q7f4hNeCdZTKhsmcQ6cIH8XHf3c/Qs/ZCefX716ufhjrXv3NvZee87a3fRr3buhKw/wdBO+rRKVj+vJ2LJkefji8+fXd2588RnJ3Z27qRf0dcxuUToXPqfnTAV3tPnB9aJ8L1IE957GY7arSLrVQ/rTKmL72ZqTGs+tUfS+B4m/ezUnn7siD2nCBncrmxSTKp0W53JEw3b8LAw45c+rbj+mh4vNlQ+VlhYRqFzBg9NwM5ORvu4xiniOdXrRKYcSODZqWhn2RLStLOYjCVIsbNwIOCkhD2HXkx5fl1cZChpxLrUoqasioxHxS16iZ4mqK0PowJRAnU/VFUJy1JC4RJ1xRO8DMK0KYebmya/s8bSb0AwqFij4pxQETyNVRLcDtTnDn9X5QnJGajr4H3rYpwblaQJZdwohqdhm5g+MmFPOowc1Wb6oZ7OvHtuO5vVmF+/pwGU6GnYM37Q9DVzFsh3NQWi+qY5Xx8zYaZ6tXo1tseNCAcOQB2tRYA4qAFvPt+jUyFurx+BsAt/Fsrmpk6VNzUGvTnWYcLX+4WyA/6uwIFCs7lwf+rkgQCG/cIwnspfU5pnDIWnS88dSJ3c7/cfKGptLTwglGHwoL9rYG1ynC8gJdh3KqCUZjv15W7JjOyOIM9HBEMJhdhHNGq6+9n0+oFhkLVzdd/q9Ue+PLKenQAb/LfVmSe4dHY9eze8mX64fv2AfTpdFm/pBcWRdFGoXtgtUY9NNsHfvlVmauxAngZBE1dT07fKpd+cq5VhsG2cr7cSUsFtVza2FeOJMjj6gXqIOIw4UGzpCv+mOkomIb6S+jf14vKNQKWBKO+QXKxTKaJbNdv/Z9AWNEIMqyIagXe8EZi2FUNVI8aNjgLnXYifMpyl8hL6JfKeL5dSBc4shRwYCjl+WEu3Tnrl3Zcn0lvh8kmvrFjxypQUYWauU/SlhRxbZXyTypf09CyDM3BmWU9PXyVcAT2TZ0yfTG+lW/EKL+3RXzglRDk6n1dn5ofh46uOgDcIjDWyuiOtjDNLeByCFgcE46whqEtk8N7PmSM2KK7zTYkUeWC/ckoAWMBbcucvdm2/qH3FK0lY+8fQdWfJdRpt5M268//eSG3h1YC3u257eAVvWsuaEaf2rEDIgf2eoj2nhJN0L2vTlO3e6ZPhinfhQ54DvMoauDf1Fm/4V13LeRNfWrNgJQdjEBho6b4S2P/M7IX1MwIKo15IaLSX9mqQ4CdIyBfcayxNen+R29HPz8NA+nrFhNbX29eriQl+EhPqBfcaS8PmqJaWKxbEsyjzcLFVGqJ+ziLsKutBhlWIVHJ4wPgZPveTiQ44mo49ySgg0DCB4OxPA76mg4+eQuGJEYoOIOjiX2+KqyACXjMH5w1QirxhBzGy9WrBP5CLQSW0/BD1U/8hWi5M3L9f+jE9mPoUJtL9ggPaQHCkPmXYovMFDbs2i692BN4gMxqj1Ne0PqKJuGAUBpiUGahTvdBLE+f4MeMLRu6TZAT8M3kYi0jhT8TfGQxzF5pedmJVJRLvv16lF98zkDzGdIwCW90OHIoaQfXjfMQ+6u3TaELUUo8vEGak9moLEgs0mIThBQqW3qdBL7acPetbwJ/lskdp/oS5syE2Ztx8VOQ5jPYgDCVS/E1WFegdjDc5uLY5g+a+Gp6IUO4z1aMYcwLeZEGgCnxmphyhmAWi7zm09ZMjdPfvj8I2mAYlr67qJ/Me/Jx+TA880b23G//kjLvE72HREZGsepX+lT5JLz/6BCSh6PMH5/VpPB2X7f3fADEo6ovYG07uo+JCecJ1UlyiLcgsBpZmMXgs6luVeZErZnxzunVZs8PhE76u7L68u5L+H193f4zQj8LC3LHa/LgvMbNrmPTO2AkTxp45ylcVRNmeAQ5MZp/BhtgQ1nkNQwXUXeJc3+RIhqCG6Oth0GB3sMYH1ZAgcBqleJnHFv1tkv7mpVkPbm0E1AoC0S2TmIMOHqi+JmH4S9d/MofFg2/G4i95YyWcSo8dD7U3AWoT/tjwU0IZ28h47PiSOSwCyutLaS3vPd3fivsxVWa8mPLAyzg9Liu7m7sz+bwDTkt8rXGazJ2XOIJrLLRmytRuXDcauzLXpZR2NcP2qxk2MD8lQZuypntqmmy9TJvZnUA2snUBP1HY3Mgjhbp/HIKnyrA+GjGjClHAii+wi+VccsyZSpfT5VPn7IR9Nz733I2Ys0qYNFl7DB/AXVOPrd0FWSnnc2B4jjlTMTxbwPBMPsmWEJIJH8QdMucl9KR2Uj65IEVgr9aLY4Vz1EAGuBQpwsFi48WuBvI10Q82k3GZ4pHionAQZ7CQIZhHEFd1HrMLO0w4iKwJzALi8JjKcIJxDwMTTn34y18E7ZOa0f4/PnTz6UcXrZc3DVs69i8pzfLO+KlLnljF4pRSvP8k1L1xzNP0b1X0jH3zqyDeugvsdPKlrz48Dt+3vDP215euPbKtFBR8SFNMJxGxrZLGW8OWpcb87tL1ZPjDOoG1j89EfzrFWVRP+vC9PsKd3RjSzBASBtZnKtczy9gq5/wgfQGHlN7vM6fXizCM/gu2a9QCa6UH04HuvlE4Mdgw/H33mjW718j30zLEJyLsSZ3Sry0L2VOcPvTwGpbkPG6icj7L8IW7kg1emTL3HUNVCa+QPLceEYnTsSJ3IBu8GAnLisuUdN4ZphzXmTJJ4475gqs/7f2pM2Vd/Mhc8Hi4EEK1Ecmzz8TSCPu48Bj8B2nnRuZHmRFDNKGrA/ycwMqx5zgI/A3QX6T6ZZ9OjCVOm5lE0nM9yzVK5oTKCB0j4kRlumgJ12d1cRiJNUHajsVtTNw+OWizT1UPb2xdVxV67vI9pwolwvWyHWWejYfD1Us3nNrT0srXpqaCKqf9Ye1Wxr+DbGEEA5ERbCdNRFquHEwmP207mqQN9CS8Bm1tnyaPt83e20/2yruSx/ARjKcN4GaPjuNdW2rHXiAMkIHJLpnRKPVc/4t6RWS9Qtym+Af5f+UnuKwRsPCoByQCn1PLLJjFXFTpL+THqYVaOmCWBrO4HRIX2B8UTX8H1zySWyS1EplFf8G8UGHWLGqRH++gv8B3O+BzrssnFFYPxuiYgASEiFRvCllNr8xksYDUJsHTMSxJsHRYFyMm41YCIYE/jQlsDKZ6B3wJRKwe88bEGSxyd9o+Pg8BVyhWTX+Gc5st0syzNE+QNe6STIwiq7zGSBmbAWeJoDsecx5fwG5kTfm2/ucjQZzZNShz4lwTJBl9jx3xsM03+D48SB/8vnthgEylMqE+7cLAgAN0xgP6e0K8awRuB+G2DFbnb+1iZ5CF4ZisG2T4WbeNMEMJs5718TiJObNo6dUu4qM0jvD8GX4FLsg/zASuzRcdVI4YZYownCtKYxlpmQI5K2NWwEyZqOExxfhcwQeYituv2xAydnCGM8U6FjN5Lqev4LEKCiOAIRBEfIc3iF/6cJBv+vQn/eQnn96kcODglnD9mnrzbvqvX5bSf0Ju6S8hm9FEoq97Ja3FMXxOAwBDq8Eg4IIBFJCwesz1FnDe8NZi43SHX0U5vLGqfVypDgoCVk3HLmBmGyZH8OJ2bzzsqHSlMeIc9pQPYI9ej+8rPe1JSDJ10If1/JI5HOnQ+R1lCtxfn/EqI7fgmdjWlkfl8hqBGDECFy3zLmf6JzNHpN6bKwToXIGNEMV1xy1yKMD38Qfn2bDymZgo5c4cePJFue86MKjFNP2MZbNhuUpNsdXI8gaUm/q6TY+5iY84kxBNyGrTs5nVLRCJc41F4apFIjN1+4hYX1/fd4TZo9hU0vT5fBZLi/80zjRNAdFyj7pAXUCq+M6K6ldUixpkRDFoCQTlINMf48G4HIuLcQeictwh2h1+h2rHseaT216vLmikv6tptm95Y4Sz5Y0ttqZa+rvGTwyGTxqhrrbJtuWNkdaRb9xqb6qFOhZNN3H4FU7fam+uOZdSzyA3O4E5NNfoST/RM771dcy4jGM3ucDGYEV9/rwvH4Ab+VWI+fnOaRyUC7+BkOo3n96yaYNweHwf4aHUmPHf+iAidWTL6c3jU2M2bGJX4fCGb/GH4nNypTyjVyCgstXPlrusc4eUfmEsCGGYsEkj4ezRY/XF/SaTwWx1n5srOo8y6SyRxWZEvUx0qGbceoBz8ZTsyxH965GBbxIyOK+7D4n48AwrnmTwftD+QyYtkiELm576dyB6iSkuIAa+nyCDvp/A0tLfT4jAHbwN34u5ZBDm6kbwNNalQRc7x4AAeEZfsXj+OgO6vKoixyOWv4LaFcNcjqnG84rxpH+DihPS4CoMFAm82rj0M0XzL1Gw/0UtUzy+hO1mrR+oxoXzznLhvJMym3TI1zy2MDK3C+edsExH+720V9v7rQlXz4vpSzJooWk5dl55ju/+wodx1m995ZMazFsvKOjskfP0yPPKCH93GfrONa4qB9+uZkDLfqUQjnIPqO8pH170t7ffsf/n825aUlHkLCyKjC52vmUyj5n+fXUSGhqndSdGXrR/XEFBia+k2Du0umpkg7fUaquOpH3hdZ1Xn9Xsp+K8YYYKjrknqRuHzQ0nL0jLEhpZ2hSOvESYwZ6lZcyHupk9I2MHYUzHTOz4RhgVg7AFj6DPb0HNLlzMggqjGimWeQe00/85UamlPuvgtkitYwTeybwu3I7JE6bDvO7/xPrkKtvYTgbTQFsEexnEW8CF0horv35CU/DGZ1+YcP/9E1741caK5gk4ZZeO+c1r97YMHXP33WOGttz7+ktj2Jwgl8BJdafixhWsfw3F7F8iqBbRwQzaQeGyE/Qo1Jw4Kh09cfToCag52/U1kK/lhm3IoRu2QQO8to2+Rl/bBq/RshaJtDCdjOunaTtQEdv9MQpRFLSoxX3LgTjKtTREubBJNxIpiCqsnX0oqges7lEm33UTrcxhhFnz8IRU9lwKbtMfMPp+ux6lP1wP2w+Xn/p3JWvkO8os+4EyLSj+g+oPldoHL8+lOw50/lDJOH1e7mSJGIqm56iMcgzLNRkF5rRgCqIIY/Y0k8CtngyARYJyaEfbc0v6OR7LCWYdpb18CrMPyujxHW0Tqabfp/0ldFzP4z7Vg3OVL8iLfMf752wPIuuTjCzycgdl0Weq5w4WHD0kPsnHrk4mV48dt6Il3ODzNYRbVozjMcB7SsaVxzRSdogDoUEYx/lRNrPSQBrEeYnMv9kT5Fv1wC0jDLgljS2shmHdKdLtDxcxNS/FxaPE51EfSW6Nr1lTPvfiem0wd+K2hguHlDkEurFzZE+Uf1qncEW4j583nwb76c1slxR5h3TeGGq6J6rG6SbTNwQiz8I2FBAn99f1cJRUVBt3QfF5mCmOQWglFOlBH8qkZV+uXr1w6sqFf/0NnQbk+iVz6uouXbt96YK3FG3smHuW3ZinFt20+r6nhV8NH9daWkpb6PFJU28jaTs6kTP7wz4xrHriYYsv7pFna19oFTRRwS6oXnKFikvOtM1b49wim2EQ6+eMYwmYgswRk7MLOJCWxzhxe/s5Vko6Xel7U0j0phaAm00QI/ezZv3KeIOR5HB/ZxuOIMp+i8ljYR8asNk2BEC3DKt+I6BKr+nKDWjf8DHTzS2gm5i1bzROhPFeThNjiqVnDC9shEHjLErjagYztmnny0kz+Y/zZZgjqKgjuLtlMF4j5EONMEJ1jIAyCNRAvhQcAY54cIQQCKoO/MsXWSK8RVkXR3jmCeP5QhnGYaAM8iGuloEazzcEK/HGEccMJYdaIyvMXdNRI48QkDiPEPBtScWkIuboyMdZd6GIzBPFLNnkEsjLkGhT8n1FhcMiFUEAWXbkWnL9geJRzsJch5xX6nCGC8XcGkOhrSJ/Yo9k9Ug2Q/OkZqUgJ2R3j3FdtuidJwO1bl+NSynJrk2Wx3ODxV6Lx2MszbYmY0PlvOxQgbMsz+fMcjsNhaFgnVLamD8kWIUKowEMcpYMTtc1726SsrJHubPUPIMh35rbHBTyLaPrvEaDx1BTWyY4Suoryk2CRxr6LcH9L0mxIMPum/zHp7LCRQaLTSyNueOq2ZdndfogS/VnNcdkVbD7so0VTtHuNNqz1ycFk5wlGLN8pc0em9VkMIH/ZsgxGBTVLDrkItvQfHOJN+AwmbPiVos9x1SgWixyvsliLXQ2O2srKt2uSqfRPKW2oNWUZcpxlIcWz/gJ7X+mPOeWEa3DSgqiLXK2Uc01Fxepdq9FrjMWZEuWxpGjyzplh8mpcBm6V3SrC6SMDfJbPH6Az/t+fcMNv75BFAdfpJM38Ougv7SfJLO79DJUxzlvIF9rYq84YK/BGwNbKyRqArEXUb8vwd6REnwvC+ORa/BYA+lLcDtOIr3PJXD+wqL1PAfbACpILRmmf6+sey4hJ/Po3y2nv5YxIWOLDYd0VHl6wUtpYodI08i/Ru4njWOZLtwYuPqmrh083KfvRQrJtMPI2LXeB5jc6NIkn3fdGIZ8oY5WB7WP29H1gHftWIyw87QHMoRZGdAtzv/2PS1LMps7me+4gejSpI8wBV5EAU55jMhAgmlOeFCSCQHnYXqY41ucY4BGcvX9EKOIOjEEWyS+Y+rzBiEaDCj5oDBfLodubiyDcyYaAp9igf/0+8EP3MtP/G0M2xGjBxPOTv9Ef5c/X9Dy/RjKdya0p6KBQNSvatSBtDPX3xWAclG2jZu+8QyNTkx2xaBNSzjzMbH+VheGOp2J1L/wJX+UkMHfEo4mE0k7mUeW8D2jtE9gC8SZU6DHNBDDfGzZ8A6KiHLlf2C0mdUHrxlQH/D8ueCqDgx1Mpoe9rGN/Sjx0kG2m5MOMiealD4N+tJq2vmX+fq484nwAJKqD9L3Y9Z5wZeMPpCeJ3j7wJ5TkJk2OJPoB6f2pMXKmeQgZTiZmTsC9skpNaH08v00ou/Lh42CiGzXwbZHM2tWfsS3plXMFmh3v84k6fH/Hsc9A/Cnb0TJPdEWoe+kwGcPqoOzerYxkxi7F36W3sETYBWuqZ/imvLwvRYH9w6Iu8BhYh7XgzrZFrb5TC2Q6WaZ3rGMPkCX0AeW3TH2lR5NS/edpvW8Qn+kd9OROY/+9s1H5rRdYoF/aQ+c64UHNJptWSqm0o0W0nOCkMk4H3SLVyX75tdcCqytwyESZFt85UFlIMIcDwR9ujUsEg+YeC3xoUtwtwjML47dFah2m98bCOreoI48QeWbBG/neucuCkQC18+lX+28h/5rzg14s3iOJ+9t9rS39D68XfrY5yB9/thSDO4qSWk7U8Pn/mNT5+M/aarY8mu+qTCybRnt38rzS5x49MpbNl/52HH9bivAsgmtmGTqgiMg6HHXY1aY5fX6He0/0tmh/WLzwpXhzsTcWyZnbF3aoL1swZNGC1nTTXps3TOeInHGwMaQMgSAAQ7AuI09bPJWAclCLcHqUO3EIb9+371H6eX0SfrXV1cJpOv5S6D+sBgOU7LqVSiBabDt6Ocnnn+a/m06r8OrOBca+f8FUcr9zjhX5CTaGg8rAjOvBoRg2AXumDR1z5o1UyJzws/2Wr98up88/aW11/EOFB8XtTVTBDJlTXhOhJKpBYfoF0PoF1AwBAoObT50KO3TLGJLB++pySS9p3buO2pHxoLDDZ+mwWE13SeDzpxAZc6MOn1XPKTfy+gJvL+zM9+Z6T/mLsDwltnSGbHWQ6y/+TduhNfNyHbRQPTIoh//PCIKMe654JHIOroVqtahHh25Eqro1nXHhMdT77yTOpE68U7qHeFx+WN6zx/onvffh4V/EFENodekboRb6DrhGrgx8917poyMP4SnGFCFH5TJsWOo7g96Mb0ZN7h++YPfFnklL8zjWKaK386MVrD6wbK07x7X1ezI8CuZ/cmIs4vtZnOc9nBvczbv1EAQYZk9hfq43cFs1gof036udnWxweCBueOHzLphj77r20f0O8q4MQcyLpaBpP/TkKZrF3Xq8ZSH4cLv9arJBLLoO7029Z3hgId9i8x2j+3hWJhv3NnjulJSnv5M2Wp31PNHkqPebhl4xp+EM0/s4njohol/27r1b3Q/vZ3uZyGxy+LKN+bn/Z3+NXb1xNEmk6nI6cz95SU//uKiXK2kPLiJPvPIuFunjA6HyhSn0vPLn0OgK8epuWrCd9Dr3+l7JBEO5Lvlx359GGZfXaRqg7OGiby4s8vykRcX5qlbTWaTIbvYbHPlOpsacj6qcTVYJ8/GEk3NJZGs3GDbqFxwRvxh57xZYduYQDg3MCWZc15fidybtIjNdh//TwL4ZrzoyzARWxxn7y6hZFffxcpwWk3v/+yvlChLzpyFiz+Fx+THaDUcYwccP/s8HcUIiPR6apQ45+yOY8c4DqVtSen95cHaJhPPusJznmcmV3XYyuQx/Pz/AAfdhq542o2QsWrDMBCGfyVOSjOUDn4AdSlJiY1sMCTZ0hQHQqcM6RyMahsSKVj2EChd+wgd+wZ9s7xDz4pKl0IrkO7T3a+73wZwhU8wnNcNHhwzDPDiuIMLvDvu4hYnxx4G7M5xD9fsyXGf8q+kZN4l3e7tq5YZfDw77tDcN8ddPOLDsQef+Y574Cxx3Kd8gQU0DjiiQokcBWpwDJFhRDGGQIQEY+IV6SQU0RwGezR0GpvBQh+OVZkXNR9mIx6LKBnzlZaKz82+MUaSZGmV0k7JqJOit1hKJasy04p4TcWcmu6wJRHWMm92W4LUimsbK1JIayskYxwz2r81PlciTBBgSvv7M5BqVae6yiWPQ8Fn/McAXaJJMA1a8/9wu7FFQ2Vtf4mwE0IbW2fYyMqUWnEholAIwf/u+QXtVlqxAAAAeNpt0meTFVUUheH7DhkJEgQJgpIFhdvn7NM9gxKGCZKzKGZyUHJGySAgSq7i5wrFfYdPdFXX+tRP9V61Wl2tt8//rdbh1vueV29eWl2tYXQxjOGMYCSjGM0YxvIB4xjPBCbyIZOYzBSm8hHTmM7HzGAms5jNJ8xhLp/yGfOYzwIWsojFLOFzlrKML/iS5aygTUUiExRqGrrpYSVf8TWrWM0a1tLLOvroZ4BBvmE9G9jIJjazha1sYzs72MkudvMte/iO79nLD/zIT/zML/zKb+xjPwc4yCEOc4SjHOM4v/MHJzjJKU5zhrOc4zwXuMglLnOFq/zJX1zjOje4yS1uc4e73ONv7vOAh/zDI/7lPx7zhKc84zkveDnqwsljg1W7bVZmMrMZZjFrszG7zZ63mfSSXtJLekkv6SW9pJf00pBX6VV6lV6lV+lVepVepVfpVXpJL+klvaSX9JJe6njZu7J3Ze/K3pW9K3tXbg9915id/wid0Amd0Amd0Amd0Il3TueesJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn0h6SS/pZb2sl/WyXtbLelkv62W9rBd6oRd6oRd6oRd6oRd6oVf0il7RK3pFr+gVvaJX9IperVfr1Xq1Xq1X69V6tV6tV+s1eo1eo9foNXqNXtPxijsr7qy4s+LOijsr7qy0h75rzG6zx+w115l9Zr85YA520l0Wd1ncZXGXxV0Wd1ncZama1x+EcTsAAAAB//8AAnjaY2BgYGQAgosrjpwF0ZcUq9bCaABTzgdAAAA=") format("woff"), + url("./Genericons.ttf") format("truetype"), + url("./Genericons.svg#Genericons") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Genericons"; + src: url("./Genericons.svg#Genericons") format("svg"); + } +} + + +/** + * All Genericons + */ + +.genericon { + font-size: 16px; + vertical-align: top; + text-align: center; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + display: inline-block; + font-family: "Genericons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + speak: none; +} + + +/** + * Helper classes + */ + +.genericon-rotate-90 { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +.genericon-rotate-180 { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); +} + +.genericon-rotate-270 { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +.genericon-flip-horizontal { + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.genericon-flip-vertical { + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} + + +/** + * Individual icons + */ + +.genericon-404:before { content: "\f423"; } +.genericon-activity:before { content: "\f508"; } +.genericon-anchor:before { content: "\f509"; } +.genericon-aside:before { content: "\f101"; } +.genericon-attachment:before { content: "\f416"; } +.genericon-audio:before { content: "\f109"; } +.genericon-bold:before { content: "\f471"; } +.genericon-book:before { content: "\f444"; } +.genericon-bug:before { content: "\f50a"; } +.genericon-cart:before { content: "\f447"; } +.genericon-category:before { content: "\f301"; } +.genericon-chat:before { content: "\f108"; } +.genericon-checkmark:before { content: "\f418"; } +.genericon-close:before { content: "\f405"; } +.genericon-close-alt:before { content: "\f406"; } +.genericon-cloud:before { content: "\f426"; } +.genericon-cloud-download:before { content: "\f440"; } +.genericon-cloud-upload:before { content: "\f441"; } +.genericon-code:before { content: "\f462"; } +.genericon-codepen:before { content: "\f216"; } +.genericon-cog:before { content: "\f445"; } +.genericon-collapse:before { content: "\f432"; } +.genericon-comment:before { content: "\f300"; } +.genericon-day:before { content: "\f305"; } +.genericon-digg:before { content: "\f221"; } +.genericon-document:before { content: "\f443"; } +.genericon-dot:before { content: "\f428"; } +.genericon-downarrow:before { content: "\f502"; } +.genericon-download:before { content: "\f50b"; } +.genericon-draggable:before { content: "\f436"; } +.genericon-dribbble:before { content: "\f201"; } +.genericon-dropbox:before { content: "\f225"; } +.genericon-dropdown:before { content: "\f433"; } +.genericon-dropdown-left:before { content: "\f434"; } +.genericon-edit:before { content: "\f411"; } +.genericon-ellipsis:before { content: "\f476"; } +.genericon-expand:before { content: "\f431"; } +.genericon-external:before { content: "\f442"; } +.genericon-facebook:before { content: "\f203"; } +.genericon-facebook-alt:before { content: "\f204"; } +.genericon-fastforward:before { content: "\f458"; } +.genericon-feed:before { content: "\f413"; } +.genericon-flag:before { content: "\f468"; } +.genericon-flickr:before { content: "\f211"; } +.genericon-foursquare:before { content: "\f226"; } +.genericon-fullscreen:before { content: "\f474"; } +.genericon-gallery:before { content: "\f103"; } +.genericon-github:before { content: "\f200"; } +.genericon-googleplus:before { content: "\f206"; } +.genericon-googleplus-alt:before { content: "\f218"; } +.genericon-handset:before { content: "\f50c"; } +.genericon-heart:before { content: "\f461"; } +.genericon-help:before { content: "\f457"; } +.genericon-hide:before { content: "\f404"; } +.genericon-hierarchy:before { content: "\f505"; } +.genericon-home:before { content: "\f409"; } +.genericon-image:before { content: "\f102"; } +.genericon-info:before { content: "\f455"; } +.genericon-instagram:before { content: "\f215"; } +.genericon-italic:before { content: "\f472"; } +.genericon-key:before { content: "\f427"; } +.genericon-leftarrow:before { content: "\f503"; } +.genericon-link:before { content: "\f107"; } +.genericon-linkedin:before { content: "\f207"; } +.genericon-linkedin-alt:before { content: "\f208"; } +.genericon-location:before { content: "\f417"; } +.genericon-lock:before { content: "\f470"; } +.genericon-mail:before { content: "\f410"; } +.genericon-maximize:before { content: "\f422"; } +.genericon-menu:before { content: "\f419"; } +.genericon-microphone:before { content: "\f50d"; } +.genericon-minimize:before { content: "\f421"; } +.genericon-minus:before { content: "\f50e"; } +.genericon-month:before { content: "\f307"; } +.genericon-move:before { content: "\f50f"; } +.genericon-next:before { content: "\f429"; } +.genericon-notice:before { content: "\f456"; } +.genericon-paintbrush:before { content: "\f506"; } +.genericon-path:before { content: "\f219"; } +.genericon-pause:before { content: "\f448"; } +.genericon-phone:before { content: "\f437"; } +.genericon-picture:before { content: "\f473"; } +.genericon-pinned:before { content: "\f308"; } +.genericon-pinterest:before { content: "\f209"; } +.genericon-pinterest-alt:before { content: "\f210"; } +.genericon-play:before { content: "\f452"; } +.genericon-plugin:before { content: "\f439"; } +.genericon-plus:before { content: "\f510"; } +.genericon-pocket:before { content: "\f224"; } +.genericon-polldaddy:before { content: "\f217"; } +.genericon-portfolio:before { content: "\f460"; } +.genericon-previous:before { content: "\f430"; } +.genericon-print:before { content: "\f469"; } +.genericon-quote:before { content: "\f106"; } +.genericon-rating-empty:before { content: "\f511"; } +.genericon-rating-full:before { content: "\f512"; } +.genericon-rating-half:before { content: "\f513"; } +.genericon-reddit:before { content: "\f222"; } +.genericon-refresh:before { content: "\f420"; } +.genericon-reply:before { content: "\f412"; } +.genericon-reply-alt:before { content: "\f466"; } +.genericon-reply-single:before { content: "\f467"; } +.genericon-rewind:before { content: "\f459"; } +.genericon-rightarrow:before { content: "\f501"; } +.genericon-search:before { content: "\f400"; } +.genericon-send-to-phone:before { content: "\f438"; } +.genericon-send-to-tablet:before { content: "\f454"; } +.genericon-share:before { content: "\f415"; } +.genericon-show:before { content: "\f403"; } +.genericon-shuffle:before { content: "\f514"; } +.genericon-sitemap:before { content: "\f507"; } +.genericon-skip-ahead:before { content: "\f451"; } +.genericon-skip-back:before { content: "\f450"; } +.genericon-skype:before { content: "\f220"; } +.genericon-spam:before { content: "\f424"; } +.genericon-spotify:before { content: "\f515"; } +.genericon-standard:before { content: "\f100"; } +.genericon-star:before { content: "\f408"; } +.genericon-status:before { content: "\f105"; } +.genericon-stop:before { content: "\f449"; } +.genericon-stumbleupon:before { content: "\f223"; } +.genericon-subscribe:before { content: "\f463"; } +.genericon-subscribed:before { content: "\f465"; } +.genericon-summary:before { content: "\f425"; } +.genericon-tablet:before { content: "\f453"; } +.genericon-tag:before { content: "\f302"; } +.genericon-time:before { content: "\f303"; } +.genericon-top:before { content: "\f435"; } +.genericon-trash:before { content: "\f407"; } +.genericon-tumblr:before { content: "\f214"; } +.genericon-twitch:before { content: "\f516"; } +.genericon-twitter:before { content: "\f202"; } +.genericon-unapprove:before { content: "\f446"; } +.genericon-unsubscribe:before { content: "\f464"; } +.genericon-unzoom:before { content: "\f401"; } +.genericon-uparrow:before { content: "\f500"; } +.genericon-user:before { content: "\f304"; } +.genericon-video:before { content: "\f104"; } +.genericon-videocamera:before { content: "\f517"; } +.genericon-vimeo:before { content: "\f212"; } +.genericon-warning:before { content: "\f414"; } +.genericon-website:before { content: "\f475"; } +.genericon-week:before { content: "\f306"; } +.genericon-wordpress:before { content: "\f205"; } +.genericon-xpost:before { content: "\f504"; } +.genericon-youtube:before { content: "\f213"; } +.genericon-zoom:before { content: "\f402"; } + + + + diff --git a/wp-content/themes/twentysixteen/header.php b/wp-content/themes/twentysixteen/header.php new file mode 100644 index 000000000..a5cfee6a4 --- /dev/null +++ b/wp-content/themes/twentysixteen/header.php @@ -0,0 +1,106 @@ + + class="no-js"> + + + + + + + + + + +> + +
        +
        + + + + +
        diff --git a/wp-content/themes/twentysixteen/image.php b/wp-content/themes/twentysixteen/image.php new file mode 100644 index 000000000..ea64a1460 --- /dev/null +++ b/wp-content/themes/twentysixteen/image.php @@ -0,0 +1,118 @@ + + +
        +
        + + + +
        > + + + +
        + ', '' ); ?> +
        + +
        + +
        + + + + +
        + + '', + 'link_before' => '', + 'link_after' => '', + 'pagelink' => '' . __( 'Page', 'twentysixteen' ) . ' %', + 'separator' => ', ', + ) + ); + ?> +
        + +
        + + %1$s %3$s × %4$s', + esc_html_x( 'Full size', 'Used before full size attachment link.', 'twentysixteen' ), + esc_url( wp_get_attachment_url() ), + absint( $metadata['width'] ), + absint( $metadata['height'] ) + ); + } + ?> + "%s"', 'twentysixteen' ), + get_the_title() + ), + '', + '' + ); + ?> +
        +
        + + _x( 'Published in%title', 'Parent post link', 'twentysixteen' ), + ) + ); + // End the loop. + endwhile; + ?> + +
        +
        + + + diff --git a/wp-content/themes/twentysixteen/inc/back-compat.php b/wp-content/themes/twentysixteen/inc/back-compat.php new file mode 100644 index 000000000..c97940e00 --- /dev/null +++ b/wp-content/themes/twentysixteen/inc/back-compat.php @@ -0,0 +1,75 @@ +

        %s

        ', $message ); +} + +/** + * Prevents the Customizer from being loaded on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_customize() { + wp_die( + sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ), + '', + array( + 'back_link' => true, + ) + ); +} +add_action( 'load-customize.php', 'twentysixteen_customize' ); + +/** + * Prevents the Theme Preview from being loaded on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentysixteen_preview' ); diff --git a/wp-content/themes/twentysixteen/inc/customizer.php b/wp-content/themes/twentysixteen/inc/customizer.php new file mode 100644 index 000000000..9867d3d99 --- /dev/null +++ b/wp-content/themes/twentysixteen/inc/customizer.php @@ -0,0 +1,1259 @@ + $default_background_color, + ) + ) + ); + + /** + * Filter the arguments used when adding 'custom-header' support in Twenty Sixteen. + * + * @since Twenty Sixteen 1.0 + * + * @param array $args { + * An array of custom-header support arguments. + * + * @type string $default-text-color Default color of the header text. + * @type int $width Width in pixels of the custom header image. Default 1200. + * @type int $height Height in pixels of the custom header image. Default 280. + * @type bool $flex-height Whether to allow flexible-height header images. Default true. + * @type callable $wp-head-callback Callback function used to style the header image and text + * displayed on the blog. + * } + */ + add_theme_support( + 'custom-header', + apply_filters( + 'twentysixteen_custom_header_args', + array( + 'default-text-color' => $default_text_color, + 'width' => 1200, + 'height' => 280, + 'flex-height' => true, + 'wp-head-callback' => 'twentysixteen_header_style', + ) + ) + ); +} +add_action( 'after_setup_theme', 'twentysixteen_custom_header_and_background' ); + +if ( ! function_exists( 'twentysixteen_header_style' ) ) : + /** + * Styles the header text displayed on the site. + * + * Create your own twentysixteen_header_style() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @see twentysixteen_custom_header_and_background(). + */ + function twentysixteen_header_style() { + // If the header text option is untouched, let's bail. + if ( display_header_text() ) { + return; + } + + // If the header text has been hidden. + ?> + + get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title a', + 'container_inclusive' => false, + 'render_callback' => 'twentysixteen_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'container_inclusive' => false, + 'render_callback' => 'twentysixteen_customize_partial_blogdescription', + ) + ); + } + + // Add color scheme setting and control. + $wp_customize->add_setting( + 'color_scheme', + array( + 'default' => 'default', + 'sanitize_callback' => 'twentysixteen_sanitize_color_scheme', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + 'color_scheme', + array( + 'label' => __( 'Base Color Scheme', 'twentysixteen' ), + 'section' => 'colors', + 'type' => 'select', + 'choices' => twentysixteen_get_color_scheme_choices(), + 'priority' => 1, + ) + ); + + // Add page background color setting and control. + $wp_customize->add_setting( + 'page_background_color', + array( + 'default' => $color_scheme[1], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'page_background_color', + array( + 'label' => __( 'Page Background Color', 'twentysixteen' ), + 'section' => 'colors', + ) + ) + ); + + // Remove the core header textcolor control, as it shares the main text color. + $wp_customize->remove_control( 'header_textcolor' ); + + // Add link color setting and control. + $wp_customize->add_setting( + 'link_color', + array( + 'default' => $color_scheme[2], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'link_color', + array( + 'label' => __( 'Link Color', 'twentysixteen' ), + 'section' => 'colors', + ) + ) + ); + + // Add main text color setting and control. + $wp_customize->add_setting( + 'main_text_color', + array( + 'default' => $color_scheme[3], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'main_text_color', + array( + 'label' => __( 'Main Text Color', 'twentysixteen' ), + 'section' => 'colors', + ) + ) + ); + + // Add secondary text color setting and control. + $wp_customize->add_setting( + 'secondary_text_color', + array( + 'default' => $color_scheme[4], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) + ); + + $wp_customize->add_control( + new WP_Customize_Color_Control( + $wp_customize, + 'secondary_text_color', + array( + 'label' => __( 'Secondary Text Color', 'twentysixteen' ), + 'section' => 'colors', + ) + ) + ); +} +add_action( 'customize_register', 'twentysixteen_customize_register', 11 ); + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Sixteen 1.2 + * @see twentysixteen_customize_register() + * + * @return void + */ +function twentysixteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Sixteen 1.2 + * @see twentysixteen_customize_register() + * + * @return void + */ +function twentysixteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Registers color schemes for Twenty Sixteen. + * + * Can be filtered with {@see 'twentysixteen_color_schemes'}. + * + * The order of colors in a colors array: + * 1. Main Background Color. + * 2. Page Background Color. + * 3. Link Color. + * 4. Main Text Color. + * 5. Secondary Text Color. + * + * @since Twenty Sixteen 1.0 + * + * @return array An associative array of color scheme options. + */ +function twentysixteen_get_color_schemes() { + /** + * Filter the color schemes registered for use with Twenty Sixteen. + * + * The default schemes include 'default', 'dark', 'gray', 'red', and 'yellow'. + * + * @since Twenty Sixteen 1.0 + * + * @param array $schemes { + * Associative array of color schemes data. + * + * @type array $slug { + * Associative array of information for setting up the color scheme. + * + * @type string $label Color scheme label. + * @type array $colors HEX codes for default colors prepended with a hash symbol ('#'). + * Colors are defined in the following order: Main background, page + * background, link, main text, secondary text. + * } + * } + */ + return apply_filters( + 'twentysixteen_color_schemes', + array( + 'default' => array( + 'label' => __( 'Default', 'twentysixteen' ), + 'colors' => array( + '#1a1a1a', + '#ffffff', + '#007acc', + '#1a1a1a', + '#686868', + ), + ), + 'dark' => array( + 'label' => __( 'Dark', 'twentysixteen' ), + 'colors' => array( + '#262626', + '#1a1a1a', + '#9adffd', + '#e5e5e5', + '#c1c1c1', + ), + ), + 'gray' => array( + 'label' => __( 'Gray', 'twentysixteen' ), + 'colors' => array( + '#616a73', + '#4d545c', + '#c7c7c7', + '#f2f2f2', + '#f2f2f2', + ), + ), + 'red' => array( + 'label' => __( 'Red', 'twentysixteen' ), + 'colors' => array( + '#ffffff', + '#ff675f', + '#640c1f', + '#402b30', + '#402b30', + ), + ), + 'yellow' => array( + 'label' => __( 'Yellow', 'twentysixteen' ), + 'colors' => array( + '#3b3721', + '#ffef8e', + '#774e24', + '#3b3721', + '#5b4d3e', + ), + ), + ) + ); +} + +if ( ! function_exists( 'twentysixteen_get_color_scheme' ) ) : + /** + * Retrieves the current Twenty Sixteen color scheme. + * + * Create your own twentysixteen_get_color_scheme() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return array An associative array of either the current or default color scheme HEX values. + */ + function twentysixteen_get_color_scheme() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + $color_schemes = twentysixteen_get_color_schemes(); + + if ( array_key_exists( $color_scheme_option, $color_schemes ) ) { + return $color_schemes[ $color_scheme_option ]['colors']; + } + + return $color_schemes['default']['colors']; + } +endif; // twentysixteen_get_color_scheme + +if ( ! function_exists( 'twentysixteen_get_color_scheme_choices' ) ) : + /** + * Retrieves an array of color scheme choices registered for Twenty Sixteen. + * + * Create your own twentysixteen_get_color_scheme_choices() function to override + * in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return array Array of color schemes. + */ + function twentysixteen_get_color_scheme_choices() { + $color_schemes = twentysixteen_get_color_schemes(); + $color_scheme_control_options = array(); + + foreach ( $color_schemes as $color_scheme => $value ) { + $color_scheme_control_options[ $color_scheme ] = $value['label']; + } + + return $color_scheme_control_options; + } +endif; // twentysixteen_get_color_scheme_choices + + +if ( ! function_exists( 'twentysixteen_sanitize_color_scheme' ) ) : + /** + * Handles sanitization for Twenty Sixteen color schemes. + * + * Create your own twentysixteen_sanitize_color_scheme() function to override + * in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @param string $value Color scheme name value. + * @return string Color scheme name. + */ + function twentysixteen_sanitize_color_scheme( $value ) { + $color_schemes = twentysixteen_get_color_scheme_choices(); + + if ( ! array_key_exists( $value, $color_schemes ) ) { + return 'default'; + } + + return $value; + } +endif; // twentysixteen_sanitize_color_scheme + +/** + * Enqueues front-end CSS for color scheme. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_color_scheme_css() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + + // Don't do anything if the default color scheme is selected. + if ( 'default' === $color_scheme_option ) { + return; + } + + $color_scheme = twentysixteen_get_color_scheme(); + + // Convert main text hex color to rgba. + $color_textcolor_rgb = twentysixteen_hex2rgb( $color_scheme[3] ); + + // If the rgba values are empty return early. + if ( empty( $color_textcolor_rgb ) ) { + return; + } + + // If we get this far, we have a custom color scheme. + $colors = array( + 'background_color' => $color_scheme[0], + 'page_background_color' => $color_scheme[1], + 'link_color' => $color_scheme[2], + 'main_text_color' => $color_scheme[3], + 'secondary_text_color' => $color_scheme[4], + 'border_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $color_textcolor_rgb ), + + ); + + $color_scheme_css = twentysixteen_get_color_scheme_css( $colors ); + + wp_add_inline_style( 'twentysixteen-style', $color_scheme_css ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_color_scheme_css' ); + +/** + * Binds the JS listener to make Customizer color_scheme control. + * + * Passes color scheme data as colorScheme global. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_customize_control_js() { + wp_enqueue_script( 'color-scheme-control', get_template_directory_uri() . '/js/color-scheme-control.js', array( 'customize-controls', 'iris', 'underscore', 'wp-util' ), '20160816', true ); + wp_localize_script( 'color-scheme-control', 'colorScheme', twentysixteen_get_color_schemes() ); +} +add_action( 'customize_controls_enqueue_scripts', 'twentysixteen_customize_control_js' ); + +/** + * Binds JS handlers to make the Customizer preview reload changes asynchronously. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_customize_preview_js() { + wp_enqueue_script( 'twentysixteen-customize-preview', get_template_directory_uri() . '/js/customize-preview.js', array( 'customize-preview' ), '20160816', true ); +} +add_action( 'customize_preview_init', 'twentysixteen_customize_preview_js' ); + +/** + * Returns CSS for the color schemes. + * + * @since Twenty Sixteen 1.0 + * + * @param array $colors Color scheme colors. + * @return string Color scheme CSS. + */ +function twentysixteen_get_color_scheme_css( $colors ) { + $colors = wp_parse_args( + $colors, + array( + 'background_color' => '', + 'page_background_color' => '', + 'link_color' => '', + 'main_text_color' => '', + 'secondary_text_color' => '', + 'border_color' => '', + ) + ); + + return << .page-links-title, + .comment-author, + .comment-reply-title small a:hover, + .comment-reply-title small a:focus { + color: {$colors['main_text_color']}; + } + + blockquote, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .post-navigation, + .post-navigation div + div, + .pagination, + .widget, + .page-header, + .page-links a, + .comments-title, + .comment-reply-title { + border-color: {$colors['main_text_color']}; + } + + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination:before, + .pagination:after, + .pagination .prev, + .pagination .next, + .page-links a { + background-color: {$colors['main_text_color']}; + } + + /* Secondary Text Color */ + + /** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ + body:not(.search-results) .entry-summary { + color: {$colors['secondary_text_color']}; + } + + blockquote, + .post-password-form label, + a:hover, + a:focus, + a:active, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .widget_recent_entries .post-date, + .widget_rss .rss-date, + .widget_rss cite, + .site-description, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .pingback .edit-link, + .comment-metadata a, + .pingback .comment-edit-link, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption, + .widecolumn label, + .widecolumn .mu_register label { + color: {$colors['secondary_text_color']}; + } + + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: {$colors['secondary_text_color']}; + } + + /* Border Color */ + fieldset, + pre, + abbr, + acronym, + table, + th, + td, + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="week"], + input[type="month"], + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="tel"], + input[type="number"], + textarea, + .main-navigation li, + .main-navigation .primary-menu, + .menu-toggle, + .dropdown-toggle:after, + .social-navigation a, + .image-navigation, + .comment-navigation, + .tagcloud a, + .entry-content, + .entry-summary, + .page-links a, + .page-links > span, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-reply-link, + .no-comments, + .widecolumn .mu_register .mu_alert { + border-color: {$colors['main_text_color']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['border_color']}; + } + + hr, + code { + background-color: {$colors['main_text_color']}; /* Fallback for IE7 and IE8 */ + background-color: {$colors['border_color']}; + } + + @media screen and (min-width: 56.875em) { + .main-navigation li:hover > a, + .main-navigation li.focus > a { + color: {$colors['link_color']}; + } + + .main-navigation ul ul, + .main-navigation ul ul li { + border-color: {$colors['border_color']}; + } + + .main-navigation ul ul:before { + border-top-color: {$colors['border_color']}; + border-bottom-color: {$colors['border_color']}; + } + + .main-navigation ul ul li { + background-color: {$colors['page_background_color']}; + } + + .main-navigation ul ul:after { + border-top-color: {$colors['page_background_color']}; + border-bottom-color: {$colors['page_background_color']}; + } + } + +CSS; +} + + +/** + * Outputs an Underscore template for generating CSS for the color scheme. + * + * The template generates the css dynamically for instant display in the + * Customizer preview. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_color_scheme_css_template() { + $colors = array( + 'background_color' => '{{ data.background_color }}', + 'page_background_color' => '{{ data.page_background_color }}', + 'link_color' => '{{ data.link_color }}', + 'main_text_color' => '{{ data.main_text_color }}', + 'secondary_text_color' => '{{ data.secondary_text_color }}', + 'border_color' => '{{ data.border_color }}', + ); + ?> + + a, + .main-navigation li.focus > a { + color: %1$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $link_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_link_color_css', 11 ); + +/** + * Enqueues front-end CSS for the main text color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_main_text_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[3]; + $main_text_color = get_theme_mod( 'main_text_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $main_text_color === $default_color ) { + return; + } + + // Convert main text hex color to rgba. + $main_text_color_rgb = twentysixteen_hex2rgb( $main_text_color ); + + // If the rgba values are empty return early. + if ( empty( $main_text_color_rgb ) ) { + return; + } + + // If we get this far, we have a custom color scheme. + $border_color = vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $main_text_color_rgb ); + + $css = ' + /* Custom Main Text Color */ + body, + blockquote cite, + blockquote small, + .main-navigation a, + .menu-toggle, + .dropdown-toggle, + .social-navigation a, + .post-navigation a, + .pagination a:hover, + .pagination a:focus, + .widget-title a, + .site-branding .site-title a, + .entry-title a, + .page-links > .page-links-title, + .comment-author, + .comment-reply-title small a:hover, + .comment-reply-title small a:focus { + color: %1$s + } + + blockquote, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .post-navigation, + .post-navigation div + div, + .pagination, + .widget, + .page-header, + .page-links a, + .comments-title, + .comment-reply-title { + border-color: %1$s; + } + + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination:before, + .pagination:after, + .pagination .prev, + .pagination .next, + .page-links a { + background-color: %1$s; + } + + /* Border Color */ + fieldset, + pre, + abbr, + acronym, + table, + th, + td, + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="week"], + input[type="month"], + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="tel"], + input[type="number"], + textarea, + .main-navigation li, + .main-navigation .primary-menu, + .menu-toggle, + .dropdown-toggle:after, + .social-navigation a, + .image-navigation, + .comment-navigation, + .tagcloud a, + .entry-content, + .entry-summary, + .page-links a, + .page-links > span, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-reply-link, + .no-comments, + .widecolumn .mu_register .mu_alert { + border-color: %1$s; /* Fallback for IE7 and IE8 */ + border-color: %2$s; + } + + hr, + code { + background-color: %1$s; /* Fallback for IE7 and IE8 */ + background-color: %2$s; + } + + @media screen and (min-width: 56.875em) { + .main-navigation ul ul, + .main-navigation ul ul li { + border-color: %2$s; + } + + .main-navigation ul ul:before { + border-top-color: %2$s; + border-bottom-color: %2$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $main_text_color, $border_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_main_text_color_css', 11 ); + +/** + * Enqueues front-end CSS for the secondary text color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_secondary_text_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[4]; + $secondary_text_color = get_theme_mod( 'secondary_text_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $secondary_text_color === $default_color ) { + return; + } + + $css = ' + /* Custom Secondary Text Color */ + + /** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ + body:not(.search-results) .entry-summary { + color: %1$s; + } + + blockquote, + .post-password-form label, + a:hover, + a:focus, + a:active, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .widget_recent_entries .post-date, + .widget_rss .rss-date, + .widget_rss cite, + .site-description, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .pingback .edit-link, + .comment-metadata a, + .pingback .comment-edit-link, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption, + .widecolumn label, + .widecolumn .mu_register label { + color: %1$s; + } + + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: %1$s; + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $secondary_text_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_secondary_text_color_css', 11 ); diff --git a/wp-content/themes/twentysixteen/inc/template-tags.php b/wp-content/themes/twentysixteen/inc/template-tags.php new file mode 100644 index 000000000..55578bead --- /dev/null +++ b/wp-content/themes/twentysixteen/inc/template-tags.php @@ -0,0 +1,284 @@ +%1$s%2$s %4$s', + get_avatar( get_the_author_meta( 'user_email' ), $author_avatar_size ), + _x( 'Author', 'Used before post author name.', 'twentysixteen' ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + get_the_author() + ); + } + + if ( in_array( get_post_type(), array( 'post', 'attachment' ) ) ) { + twentysixteen_entry_date(); + } + + $format = get_post_format(); + if ( current_theme_supports( 'post-formats', $format ) ) { + printf( + '%1$s%3$s', + sprintf( '%s ', _x( 'Format', 'Used before post format.', 'twentysixteen' ) ), + esc_url( get_post_format_link( $format ) ), + get_post_format_string( $format ) + ); + } + + if ( 'post' === get_post_type() ) { + twentysixteen_entry_taxonomies(); + } + + if ( ! is_singular() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) { + echo ''; + comments_popup_link( sprintf( __( 'Leave a comment on %s', 'twentysixteen' ), get_the_title() ) ); + echo ''; + } + } +endif; + +if ( ! function_exists( 'twentysixteen_entry_date' ) ) : + /** + * Prints HTML with date information for current post. + * + * Create your own twentysixteen_entry_date() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ + function twentysixteen_entry_date() { + $time_string = ''; + + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( + $time_string, + esc_attr( get_the_date( 'c' ) ), + get_the_date(), + esc_attr( get_the_modified_date( 'c' ) ), + get_the_modified_date() + ); + + printf( + '%1$s %3$s', + _x( 'Posted on', 'Used before publish date.', 'twentysixteen' ), + esc_url( get_permalink() ), + $time_string + ); + } +endif; + +if ( ! function_exists( 'twentysixteen_entry_taxonomies' ) ) : + /** + * Prints HTML with category and tags for current post. + * + * Create your own twentysixteen_entry_taxonomies() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ + function twentysixteen_entry_taxonomies() { + $categories_list = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentysixteen' ) ); + if ( $categories_list && twentysixteen_categorized_blog() ) { + printf( + '%1$s %2$s', + _x( 'Categories', 'Used before category names.', 'twentysixteen' ), + $categories_list + ); + } + + $tags_list = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'twentysixteen' ) ); + if ( $tags_list && ! is_wp_error( $tags_list ) ) { + printf( + '%1$s %2$s', + _x( 'Tags', 'Used before tag names.', 'twentysixteen' ), + $tags_list + ); + } + } +endif; + +if ( ! function_exists( 'twentysixteen_post_thumbnail' ) ) : + /** + * Displays an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index views, or a div + * element when on single views. + * + * Create your own twentysixteen_post_thumbnail() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ + function twentysixteen_post_thumbnail() { + if ( post_password_required() || is_attachment() || ! has_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + +
        + +
        + + + + + + +
        + +
        + %2$s', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( __( 'Continue reading "%s"', 'twentysixteen' ), get_the_title( get_the_ID() ) ) + ); + return ' … ' . $link; + } + add_filter( 'excerpt_more', 'twentysixteen_excerpt_more' ); +endif; + +if ( ! function_exists( 'twentysixteen_categorized_blog' ) ) : + /** + * Determines whether blog/site has more than one category. + * + * Create your own twentysixteen_categorized_blog() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return bool True if there is more than one category, false otherwise. + */ + function twentysixteen_categorized_blog() { + if ( false === ( $all_the_cool_cats = get_transient( 'twentysixteen_categories' ) ) ) { + // Create an array of all the categories that are attached to posts. + $all_the_cool_cats = get_categories( + array( + 'fields' => 'ids', + // We only need to know if there is more than one category. + 'number' => 2, + ) + ); + + // Count the number of categories that are attached to the posts. + $all_the_cool_cats = count( $all_the_cool_cats ); + + set_transient( 'twentysixteen_categories', $all_the_cool_cats ); + } + + if ( $all_the_cool_cats > 1 || is_preview() ) { + // This blog has more than 1 category so twentysixteen_categorized_blog should return true. + return true; + } else { + // This blog has only 1 category so twentysixteen_categorized_blog should return false. + return false; + } + } +endif; + +/** + * Flushes out the transients used in twentysixteen_categorized_blog(). + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_category_transient_flusher() { + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + // Like, beat it. Dig? + delete_transient( 'twentysixteen_categories' ); +} +add_action( 'edit_category', 'twentysixteen_category_transient_flusher' ); +add_action( 'save_post', 'twentysixteen_category_transient_flusher' ); + +if ( ! function_exists( 'twentysixteen_the_custom_logo' ) ) : + /** + * Displays the optional custom logo. + * + * Does nothing if the custom logo is not available. + * + * @since Twenty Sixteen 1.2 + */ + function twentysixteen_the_custom_logo() { + if ( function_exists( 'the_custom_logo' ) ) { + the_custom_logo(); + } + } +endif; + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Sixteen 2.0 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Sixteen 2.0 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentysixteen/index.php b/wp-content/themes/twentysixteen/index.php new file mode 100644 index 000000000..f6ec56c1d --- /dev/null +++ b/wp-content/themes/twentysixteen/index.php @@ -0,0 +1,65 @@ + + +
        +
        + + + + +
        +

        +
        + + + __( 'Previous page', 'twentysixteen' ), + 'next_text' => __( 'Next page', 'twentysixteen' ), + 'before_page_number' => '' . __( 'Page', 'twentysixteen' ) . ' ', + ) + ); + + // If no content, include the "No posts found" template. + else : + get_template_part( 'template-parts/content', 'none' ); + + endif; + ?> + +
        +
        + + + diff --git a/wp-content/themes/twentysixteen/js/color-scheme-control.js b/wp-content/themes/twentysixteen/js/color-scheme-control.js new file mode 100644 index 000000000..e65b5bdea --- /dev/null +++ b/wp-content/themes/twentysixteen/js/color-scheme-control.js @@ -0,0 +1,96 @@ +/* global colorScheme, Color */ +/** + * Add a listener to the Color Scheme control to update other color controls to new values/defaults. + * Also trigger an update of the Color Scheme CSS when a color is changed. + */ + +( function( api ) { + var cssTemplate = wp.template( 'twentysixteen-color-scheme' ), + colorSchemeKeys = [ + 'background_color', + 'page_background_color', + 'link_color', + 'main_text_color', + 'secondary_text_color' + ], + colorSettings = [ + 'background_color', + 'page_background_color', + 'link_color', + 'main_text_color', + 'secondary_text_color' + ]; + + api.controlConstructor.select = api.Control.extend( { + ready: function() { + if ( 'color_scheme' === this.id ) { + this.setting.bind( 'change', function( value ) { + var colors = colorScheme[value].colors; + + // Update Background Color. + var color = colors[0]; + api( 'background_color' ).set( color ); + api.control( 'background_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Page Background Color. + color = colors[1]; + api( 'page_background_color' ).set( color ); + api.control( 'page_background_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Link Color. + color = colors[2]; + api( 'link_color' ).set( color ); + api.control( 'link_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Main Text Color. + color = colors[3]; + api( 'main_text_color' ).set( color ); + api.control( 'main_text_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Secondary Text Color. + color = colors[4]; + api( 'secondary_text_color' ).set( color ); + api.control( 'secondary_text_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + } ); + } + } + } ); + + // Generate the CSS for the current Color Scheme. + function updateCSS() { + var scheme = api( 'color_scheme' )(), + css, + colors = _.object( colorSchemeKeys, colorScheme[ scheme ].colors ); + + // Merge in color scheme overrides. + _.each( colorSettings, function( setting ) { + colors[ setting ] = api( setting )(); + } ); + + // Add additional color. + // jscs:disable + colors.border_color = Color( colors.main_text_color ).toCSS( 'rgba', 0.2 ); + // jscs:enable + + css = cssTemplate( colors ); + + api.previewer.send( 'update-color-scheme-css', css ); + } + + // Update the CSS whenever a color setting is changed. + _.each( colorSettings, function( setting ) { + api( setting, function( setting ) { + setting.bind( updateCSS ); + } ); + } ); +} )( wp.customize ); diff --git a/wp-content/themes/twentysixteen/js/customize-preview.js b/wp-content/themes/twentysixteen/js/customize-preview.js new file mode 100644 index 000000000..fc99333c2 --- /dev/null +++ b/wp-content/themes/twentysixteen/js/customize-preview.js @@ -0,0 +1,41 @@ +/** + * Live-update changed settings in real time in the Customizer preview. + */ + +( function( $ ) { + var style = $( '#twentysixteen-color-scheme-css' ), + api = wp.customize; + + if ( ! style.length ) { + style = $( 'head' ).append( ''; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Extends the built-in list of html5 elements + * @memberOf html5 + * @param {String|Array} newElements whitespace separated list or array of new element names to shiv + * @param {Document} ownerDocument The context document. + */ + function addElements(newElements, ownerDocument) { + var elements = html5.elements; + if(typeof elements != 'string'){ + elements = elements.join(' '); + } + if(typeof newElements != 'string'){ + newElements = newElements.join(' '); + } + html5.elements = elements +' '+ newElements; + shivDocument(ownerDocument); + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document|DocumentFragment} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;i -1, + isOpera = navigator.userAgent.toLowerCase().indexOf( 'opera' ) > -1, + isIE = navigator.userAgent.toLowerCase().indexOf( 'msie' ) > -1; + + if ( ( isWebkit || isOpera || isIE ) && document.getElementById && window.addEventListener ) { + window.addEventListener( 'hashchange', function() { + var id = location.hash.substring( 1 ), + element; + + if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { + return; + } + + element = document.getElementById( id ); + + if ( element ) { + if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { + element.tabIndex = -1; + } + + element.focus(); + + // Repositions the window on jump-to-anchor to account for admin bar and border height. + window.scrollBy( 0, -53 ); + } + }, false ); + } +} )(); diff --git a/wp-content/themes/twentysixteen/page.php b/wp-content/themes/twentysixteen/page.php new file mode 100644 index 000000000..a232c9fce --- /dev/null +++ b/wp-content/themes/twentysixteen/page.php @@ -0,0 +1,42 @@ + + +
        +
        + + +
        + + + +
        + + + diff --git a/wp-content/themes/twentysixteen/readme.txt b/wp-content/themes/twentysixteen/readme.txt new file mode 100644 index 000000000..24b3428c5 --- /dev/null +++ b/wp-content/themes/twentysixteen/readme.txt @@ -0,0 +1,117 @@ +=== Twenty Sixteen === +Contributors: wordpressdotorg +Requires at least: WordPress 4.4 +Tested up to: WordPress 5.0 +Requires PHP: 5.2.4 +Version: 2.0 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: one-column, two-columns, right-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-images, flexible-header, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready, blog + +== Description == +Twenty Sixteen is a modernized take on an ever-popular WordPress layout — the horizontal masthead with an optional right sidebar that works perfectly for blogs and websites. It has custom color options with beautiful default color schemes, a harmonious fluid grid using a mobile-first approach, and impeccable polish in every detail. Twenty Sixteen will make your WordPress look beautiful everywhere. + +* Mobile-first, Responsive Layout +* Custom Colors +* Custom Header +* Social Links +* Post Formats +* The GPL v2.0 or later license. :) Use it to make something cool. + +For more information about Twenty Sixteen please go to https://codex.wordpress.org/Twenty_Sixteen. + +== Installation == + +1. In your admin panel, go to Appearance -> Themes and click the 'Add New' button. +2. Type in Twenty Sixteen in the search form and press the 'Enter' key on your keyboard. +3. Click on the 'Activate' button to use your new theme right away. +4. Go to https://codex.wordpress.org/Twenty_Sixteen for a guide on how to customize this theme. +5. Navigate to Appearance > Customize in your admin panel and customize to taste. + +== Copyright == + +Twenty Sixteen WordPress Theme, Copyright 2014-2018 WordPress.org +Twenty Sixteen is distributed under the terms of the GNU GPL + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Twenty Sixteen Theme bundles the following third-party resources: + +HTML5 Shiv v3.7.0, Copyright 2014 Alexander Farkas +Licenses: MIT/GPL2 +Source: https://github.com/aFarkas/html5shiv + +Genericons icon font, Copyright 2013-2017 Automattic.com +License: GNU GPL, Version 2 (or later) +Source: http://www.genericons.com + +Image used in screenshot.png: A photo by Austin Schmid (https://unsplash.com/schmidy/), licensed under Creative Commons Zero(http://creativecommons.org/publicdomain/zero/1.0/) + +== Changelog == + += 2.0 = +* Released: May 7, 2019 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_2.0 + += 1.9 = +* Released: February 21, 2019 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.9 + += 1.8 = +* Released: January 9, 2019 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.8 + += 1.7 = +* Released: December 19, 2018 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.7 + += 1.6 = +* Released: December 6, 2018 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.6 + += 1.5 = +* Released: May 17, 2018 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.5 + += 1.4 = +* Released: November 14, 2017 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.4 + += 1.3 = +* Released: August 16, 2016 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.3 + += 1.2 = +* Released: April 12, 2016 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.2 + += 1.1 = +* Released: January 6, 2016 + +https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.1 + += 1.0 = +* Released: December 8, 2015 + +Initial release + +== Notes == + +Only the default and dark color schemes are accessibility ready. diff --git a/wp-content/themes/twentysixteen/rtl.css b/wp-content/themes/twentysixteen/rtl.css new file mode 100644 index 000000000..48ece280a --- /dev/null +++ b/wp-content/themes/twentysixteen/rtl.css @@ -0,0 +1,756 @@ +/* +Theme Name: Twenty Sixteen +Description: Adds support for languages written in a Right To Left (RTL) direction. +It's easy, just a matter of overwriting all the horizontal positioning attributes +of your CSS stylesheet in a separate stylesheet file named rtl.css. + +See: https://codex.wordpress.org/Right_to_Left_Language_Support +*/ + +/** + * Table of Contents: + * + * 1.0 - Normalize + * 2.0 - Typography + * 3.0 - Elements + * 4.0 - Forms + * 5.0 - Navigations + * 6.0 - Accessibility + * 7.0 - Widgets + * 8.0 - Content + * 8.1 - Header + * 8.2 - Posts and pages + * 8.3 - Comments + * 8.4 - Footer + * 9.0 - Multisites + * 10.0 - Media Queries + * 10.1 - >= 710px + * 10.2 - >= 910px + * 10.3 - >= 985px + * 10.4 - >= 1200px + */ + + +/** + * 1.0 - Normalize + */ + +body { + direction: rtl; + unicode-bidi: embed; +} + +input[type="checkbox"], +input[type="radio"] { + margin-right: auto; + margin-left: 0.4375em; +} + + +/** + * 2.0 - Typography + */ + +body, +button, +button[disabled]:hover, +button[disabled]:focus, +input[type="button"], +input[type="button"][disabled]:hover, +input[type="button"][disabled]:focus, +input[type="reset"], +input[type="reset"][disabled]:hover, +input[type="reset"][disabled]:focus, +input[type="submit"], +input[type="submit"][disabled]:hover, +input[type="submit"][disabled]:focus, +input, +select, +textarea, +.post-password-form label, +.main-navigation, +.post-navigation, +.post-navigation .post-title, +.pagination, +.image-navigation, +.comment-navigation, +.site .skip-link, +.logged-in .site .skip-link, +.widget .widget-title, +.widget_recent_entries .post-date, +.widget_rss .rss-date, +.widget_rss cite, +.tagcloud a, +.site-title, +.entry-title, +.entry-footer, +.sticky-post, +.page-title, +.page-links, +.comments-title, +.comment-reply-title, +.comment-metadata, +.pingback .edit-link, +.comment-reply-link, +.comment-form label, +.no-comments, +.required, +.site-footer .site-title, +.site-footer .site-title:after, +.widecolumn label, +.widecolumn .mu_register label, +.site-footer span[role=separator] { + font-family: Arial, Tahoma, sans-serif; +} + +::-webkit-input-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +:-moz-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +::-moz-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +:-ms-input-placeholder { + font-family: Arial, Tahoma, sans-serif; +} + +blockquote { + border-right-width: 4px; + border-left-width: 0; + padding-right: 1.263157895em; + padding-left: 0; +} + +.entry-content h1, +.entry-content h2, +.entry-content h3, +.entry-content h4, +.entry-content h5, +.entry-content h6, +.entry-summary h1, +.entry-summary h2, +.entry-summary h3, +.entry-summary h4, +.entry-summary h5, +.entry-summary h6, +.comment-content h1, +.comment-content h2, +.comment-content h3, +.comment-content h4, +.comment-content h5, +.comment-content h6, +.textwidget h1, +.textwidget h2, +.textwidget h3, +.textwidget h4, +.textwidget h5, +.textwidget h6, +.entry-content .author-title, +.widget_calendar caption, +.widecolumn h2 { + font-weight: 700; +} + + +/** + * 3.0 - Elements + */ + +ul, +ol { + margin: 0 1.25em 1.75em 0; +} + +ol { + margin-right: 1.5em; + margin-left: 0; +} + +caption, +th, +td { + text-align: right; +} + + +/** + * 4.0 - Forms + */ + +input[type="search"].search-field { + border-radius: 0 2px 2px 0; +} + +.search-submit:before { + left: 1px; +} + +.search-submit { + border-radius: 2px 0 0 2px; + left: 0; + right: auto; +} + + +/** + * 5.0 - Navigation + */ + +.main-navigation ul ul { + margin-right: 0.875em; + margin-left: auto; +} + +.main-navigation .menu-item-has-children > a { + margin-right: auto; + margin-left: 56px; +} + +.dropdown-toggle { + left: 0; + right: auto; +} + +.dropdown-toggle:after { + border-right-width: 1px; + border-left-width: 0; + left: auto; + right: 1px; +} + +.social-navigation li { + float: right; + margin: 0 0 0.4375em 0.4375em; +} + +.pagination:before { + left: 0; + right: auto; +} + +.pagination:after { + left: 54px; + right: auto; +} + +.pagination .nav-links { + padding-right: 0; + padding-left: 106px; +} + +.pagination .nav-links:before { + content: "\f430"; + left: -1px; + right: auto; +} + +.pagination .nav-links:after { + content: "\f429"; + left: 55px; + right: auto; +} + +.pagination .page-numbers { + margin: 0 -0.7368421053em 0 0.7368421053em; +} + +.pagination .prev, +.pagination .next { + margin: 0; +} + +.pagination .prev { + left: 54px; + right: auto; +} + +.pagination .prev:before { + content: "\f429"; + left: auto; + right: -1px; +} + +.pagination .next { + left: 0; + right: auto; +} + +.pagination .next:before { + content: "\f430"; + left: -1px; + right: auto; +} + +.comment-navigation { + margin-right: 0; + margin-left: 0; +} + + +/** + * 6.0 - Accessibility + */ + +.site .skip-link { + left: auto; + right: -9999em; +} + +.site .skip-link:focus { + left: auto; + right: 6px; +} + + +/** + * 7.0 - Widgets + */ + +.tagcloud a { + margin-right: 0; + margin-left: 0.1875em; +} + +.tagcloud ul { + margin-right: 0; +} + + +/** + * 8.0 - Content + */ + + +/** + * 8.1 - Header + */ + +.site-branding { + margin-right: 0; + margin-left: auto; +} + + +/** + * 8.2 - Posts and pages + */ + +.author-avatar .avatar { + float: right; + margin-right: 0; + margin-left: 1.75em; +} + +.entry-footer .avatar { + margin-right: 0; + margin-left: 0.5384615385em; +} + +.page-links a, +.page-links > span { + margin-right: auto; + margin-left: 0.3076923077em; +} + +.page-links > .page-links-title { + padding-right: 0; + padding-left: 0.6153846154em; +} + +body:not(.search-results) .entry-summary .alignright { + margin: 0.2631578947em 0 1.4736842105em 1.4736842105em; +} + +body:not(.search-results) .entry-summary .alignleft { + margin: 0.2631578947em 1.4736842105em 1.4736842105em 0; +} + + +/** + * 8.3 - Comments + */ + +.comment-list .children > li { + padding-right: 0.875em; + padding-left: 0; +} + +.comment-author .avatar { + float: right; + margin-right: auto; + margin-left: 0.875em; +} + +.bypostauthor > article .fn:after { + left: auto; + right: 3px; +} + +.comment-content ul, +.comment-content ol { + margin: 0 1.25em 1.5em 0; +} + +.comment-reply-title small a { + float: left; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 0 0 10px; +} + +.comment-form .comment-form-cookies-consent label { + font-family: Arial, Tahoma, sans-serif; +} + +/** + * 9.0 - Multisites + */ + +.widecolumn .mu_register label { + margin-right: 0; + margin-left: 0.7692307692em; +} + + +/** + * 10.0 - Media Queries + */ + + +/** + * 10.1 - >= 710px + */ + +@media screen and (min-width: 44.375em) { + .pagination { + margin: 0 7.6923% 4.421052632em 23.0769%; + } + + .entry-header, + .post-thumbnail, + .entry-content, + .entry-summary, + .entry-footer, + .comments-area, + .image-navigation, + .post-navigation, + .page-header, + .page-content, + .content-bottom-widgets { + margin-right: 7.6923%; + margin-left: 23.0769%; + } + + .entry-content blockquote:not(.alignright):not(.alignleft), + .entry-summary blockquote, + .comment-content blockquote { + margin-right: -1.473684211em; + margin-left: auto; + } + + .entry-content blockquote blockquote:not(.alignright):not(.alignleft), + .entry-summary blockquote blockquote, + .comment-content blockquote blockquote { + margin-right: 0; + margin-left: auto; + } + + .entry-content ul, + .entry-summary ul, + .comment-content ul, + .entry-content ol, + .entry-summary ol, + .comment-content ol { + margin-right: 0; + margin-left: auto; + } + + .entry-content li > ul, + .entry-summary li > ul, + .comment-content li > ul, + .entry-content blockquote > ul, + .entry-summary blockquote > ul, + .comment-content blockquote > ul { + margin-right: 1.25em; + margin-left: auto; + } + + .entry-content li > ol, + .entry-summary li > ol, + .comment-content li > ol, + .entry-content blockquote > ol, + .entry-summary blockquote > ol, + .comment-content blockquote > ol { + margin-right: 1.5em; + margin-left: auto; + } + + .comment-list .children > li { + padding-right: 1.75em; + padding-left: 0; + } + + .sidebar, + .widecolumn { + padding-right: 7.6923%; + padding-left: 23.0769%; + } + + body:not(.search-results) .entry-summary li > ul, + body:not(.search-results) .entry-summary blockquote > ul { + margin-right: 1.157894737em; + margin-left: auto; + } + + body:not(.search-results) .entry-summary li > ol, + body:not(.search-results) .entry-summary blockquote > ol { + margin-right: 1.473684211em; + margin-left: auto; + } +} + + +/** + * 10.2 - >= 910px + */ + +@media screen and (min-width: 56.875em) { + .main-navigation .primary-menu > li { + float: right; + } + + .main-navigation ul ul { + left: auto; + margin: 0; + right: -999em; + } + + .main-navigation ul ul:before { + left: 9px; + right: auto; + } + + .main-navigation ul ul:after { + left: 11px; + right: auto; + } + + .main-navigation li:hover > ul, + .main-navigation li.focus > ul { + left: 0; + right: auto; + } + + .main-navigation ul ul li:hover > ul, + .main-navigation ul ul li.focus > ul { + left: 100%; + right: auto; + } + + .main-navigation .menu-item-has-children > a { + margin: 0; + padding-right: 0.875em; + padding-left: 2.25em; + } + + .main-navigation .menu-item-has-children > a:after { + left: 0.625em; + right: auto; + } + + .main-navigation ul ul .menu-item-has-children > a { + padding-right: 0.875em; + padding-left: 2.0625em; + } + + .main-navigation ul ul .menu-item-has-children > a:after { + left: 0.5625em; + right: auto; + top: 0.8125em; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + } + + .content-area { + float: right; + margin-right: auto; + margin-left: -100%; + } + + .entry-header, + .post-thumbnail, + .entry-content, + .entry-summary, + .entry-footer, + .comments-area, + .image-navigation, + .post-navigation, + .pagination, + .page-header, + .page-content, + .content-bottom-widgets { + margin-right: 0; + margin-left: 0; + } + + .sidebar { + float: right; + margin-right: 75%; + margin-left: auto; + padding: 0; + } + + .widget blockquote { + padding-right: 1.0625em; + padding-left: 0; + } + + .widget .alignright { + margin: 0.2307692308em 0 1.6153846154em 1.6153846154em; + } + + .widget .alignleft { + margin: 0.2307692308em 1.6153846154em 1.6153846154em 0; + } + + .tagcloud a { + margin: 0 0 0.5384615385em 0.2307692308em; + } + + .content-bottom-widgets .widget-area:nth-child(1):nth-last-child(2), + .content-bottom-widgets .widget-area:nth-child(2):nth-last-child(1) { + float: right; + margin-right: auto; + margin-left: 7.1428571%; + } + + .content-bottom-widgets .widget-area:nth-child(2):nth-last-child(1):last-of-type { + margin-right: auto; + margin-left: 0; + } + + .site-info { + margin: 0.538461538em 0 0.538461538em auto; + } + + .no-sidebar .entry-header, + .no-sidebar .entry-content, + .no-sidebar .entry-summary, + .no-sidebar .entry-footer, + .no-sidebar .comments-area, + .no-sidebar .image-navigation, + .no-sidebar .post-navigation, + .no-sidebar .pagination, + .no-sidebar .page-header, + .no-sidebar .page-content, + .no-sidebar .content-bottom-widgets { + margin-right: 15%; + margin-left: 15%; + } + + .no-sidebar .post-thumbnail { + margin-right: 0; + margin-left: 0; + } + + .widecolumn { + padding-right: 15%; + padding-left: 15%; + } +} + + +/** + * 10.3 - >= 985px + */ + +@media screen and (min-width: 61.5625em) { + body:not(.search-results) article:not(.type-page) .entry-content { + float: left; + } + + body:not(.search-results) article:not(.type-page) .entry-content > blockquote.alignleft.below-entry-meta { + margin-right: 1.473684211em; + margin-left: 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em);; + } + + body:not(.search-results) article:not(.type-page) .entry-content > blockquote.alignright.below-entry-meta { + margin-right: -40%; + margin-left: 1.473684211em; + width: -webkit-calc(60% - 1.4736842105em); + width: calc(60% - 1.4736842105em); + } + + body:not(.search-results) article:not(.type-page) img.below-entry-meta, + body:not(.search-results) article:not(.type-page) figure.below-entry-meta { + margin-right: -40%; + margin-left: 0; + } + + body:not(.search-results) article:not(.type-page) .entry-footer { + float: right; + } + + body.no-sidebar:not(.search-results) article:not(.type-page) .entry-content { + float: right; + margin-right: 34.99999999%; + margin-left: -100%; + } + + body.no-sidebar:not(.search-results) article:not(.type-page) .entry-footer { + margin-right: 15%; + margin-left: -100%; + } +} + + +/** + * 10.4 - >= 1200px + */ + +@media screen and (min-width: 75em) { + body:not(.search-results) .entry-summary li > ul, + body:not(.search-results) .entry-summary blockquote > ul { + margin-right: 0.956521739em; + margin-left: auto; + } + + body:not(.search-results) .entry-summary li > ol, + body:not(.search-results) .entry-summary blockquote > ol { + margin-right: 1.52173913em; + margin-left: auto; + } + + body:not(.search-results) .entry-summary blockquote { + padding-right: 1.347826087em; + padding-left: 0; + } + + body:not(.search-results) .entry-summary blockquote:not(.alignright):not(.alignleft) { + margin-right: -1.52173913em; + margin-left: auto; + } + + body:not(.search-results) .entry-summary blockquote blockquote:not(.alignright):not(.alignleft) { + margin-right: 0; + margin-left: auto; + } + + body:not(.search-results) .entry-summary .alignright { + margin: 0.2608695652em 0 1.5217391304em 1.5217391304em; + } + + body:not(.search-results) .entry-summary .alignleft { + margin: 0.2608695652em 1.5217391304em 1.5217391304em 0; + } +} diff --git a/wp-content/themes/twentysixteen/screenshot.png b/wp-content/themes/twentysixteen/screenshot.png new file mode 100644 index 000000000..e4f2b25df Binary files /dev/null and b/wp-content/themes/twentysixteen/screenshot.png differ diff --git a/wp-content/themes/twentysixteen/search.php b/wp-content/themes/twentysixteen/search.php new file mode 100644 index 000000000..0f893636f --- /dev/null +++ b/wp-content/themes/twentysixteen/search.php @@ -0,0 +1,56 @@ + + +
        +
        + + + + + + __( 'Previous page', 'twentysixteen' ), + 'next_text' => __( 'Next page', 'twentysixteen' ), + 'before_page_number' => '' . __( 'Page', 'twentysixteen' ) . ' ', + ) + ); + + // If no content, include the "No posts found" template. + else : + get_template_part( 'template-parts/content', 'none' ); + + endif; + ?> + +
        +
        + + + diff --git a/wp-content/themes/twentysixteen/searchform.php b/wp-content/themes/twentysixteen/searchform.php new file mode 100644 index 000000000..c2f83af84 --- /dev/null +++ b/wp-content/themes/twentysixteen/searchform.php @@ -0,0 +1,17 @@ + + + diff --git a/wp-content/themes/twentysixteen/sidebar-content-bottom.php b/wp-content/themes/twentysixteen/sidebar-content-bottom.php new file mode 100644 index 000000000..d561eb7d1 --- /dev/null +++ b/wp-content/themes/twentysixteen/sidebar-content-bottom.php @@ -0,0 +1,28 @@ + + diff --git a/wp-content/themes/twentysixteen/sidebar.php b/wp-content/themes/twentysixteen/sidebar.php new file mode 100644 index 000000000..45aff971a --- /dev/null +++ b/wp-content/themes/twentysixteen/sidebar.php @@ -0,0 +1,15 @@ + + + + + diff --git a/wp-content/themes/twentysixteen/single.php b/wp-content/themes/twentysixteen/single.php new file mode 100644 index 000000000..345417033 --- /dev/null +++ b/wp-content/themes/twentysixteen/single.php @@ -0,0 +1,59 @@ + + +
        +
        + _x( 'Published in%title', 'Parent post link', 'twentysixteen' ), + ) + ); + } elseif ( is_singular( 'post' ) ) { + // Previous/next post navigation. + the_post_navigation( + array( + 'next_text' => ' ' . + '' . __( 'Next post:', 'twentysixteen' ) . ' ' . + '%title', + 'prev_text' => ' ' . + '' . __( 'Previous post:', 'twentysixteen' ) . ' ' . + '%title', + ) + ); + } + + // End of the loop. + endwhile; + ?> + +
        + + + +
        + + + diff --git a/wp-content/themes/twentysixteen/style.css b/wp-content/themes/twentysixteen/style.css new file mode 100644 index 000000000..ab7e95da2 --- /dev/null +++ b/wp-content/themes/twentysixteen/style.css @@ -0,0 +1,4008 @@ +/* +Theme Name: Twenty Sixteen +Theme URI: https://wordpress.org/themes/twentysixteen/ +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: Twenty Sixteen is a modernized take on an ever-popular WordPress layout — the horizontal masthead with an optional right sidebar that works perfectly for blogs and websites. It has custom color options with beautiful default color schemes, a harmonious fluid grid using a mobile-first approach, and impeccable polish in every detail. Twenty Sixteen will make your WordPress look beautiful everywhere. +Version: 2.0 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: one-column, two-columns, right-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-images, flexible-header, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready, blog +Text Domain: twentysixteen + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. +*/ + + +/** + * Table of Contents + * + * 1.0 - Normalize + * 2.0 - Genericons + * 3.0 - Typography + * 4.0 - Elements + * 5.0 - Forms + * 6.0 - Navigation + * 6.1 - Links + * 6.2 - Menus + * 7.0 - Accessibility + * 8.0 - Alignments + * 9.0 - Clearings + * 10.0 - Widgets + * 11.0 - Content + * 11.1 - Header + * 11.2 - Posts and pages + * 11.3 - Post Formats + * 11.4 - Comments + * 11.5 - Sidebar + * 11.6 - Footer + * 12.0 - Media + * 12.1 - Captions + * 12.2 - Galleries + * 13.0 - Multisite + * 14.0 - Media Queries + * 14.1 - >= 710px + * 14.2 - >= 783px + * 14.3 - >= 910px + * 14.4 - >= 985px + * 14.5 - >= 1200px + * 15.0 - Print + */ + + +/** + * 1.0 - Normalize + * + * Normalizing styles have been helped along thanks to the fine work of + * Nicolas Gallagher and Jonathan Neal http://necolas.github.com/normalize.css/ + */ + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: 700; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +code, +kbd, +pre, +samp { + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +select { + text-transform: none; +} + +button { + overflow: visible; +} + +button, +input, +select, +textarea { + max-width: 100%; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; + opacity: .5; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-right: 0.4375em; + padding: 0; +} + +input[type="date"]::-webkit-inner-spin-button, +input[type="date"]::-webkit-outer-spin-button, +input[type="time"]::-webkit-inner-spin-button, +input[type="time"]::-webkit-outer-spin-button, +input[type="datetime-local"]::-webkit-inner-spin-button, +input[type="datetime-local"]::-webkit-outer-spin-button, +input[type="week"]::-webkit-inner-spin-button, +input[type="week"]::-webkit-outer-spin-button, +input[type="month"]::-webkit-inner-spin-button, +input[type="month"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + border: 1px solid #d1d1d1; + margin: 0 0 1.75em; + min-width: inherit; + padding: 0.875em; +} + +fieldset > :last-child { + margin-bottom: 0; +} + +legend { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +optgroup { + font-weight: bold; +} + + +/** + * 2.0 - Genericons + */ + +.menu-item-has-children a:after, +.social-navigation a:before, +.dropdown-toggle:after, +.bypostauthor > article .fn:after, +.comment-reply-title small a:before, +.pagination .prev:before, +.pagination .next:before, +.pagination .nav-links:before, +.pagination .nav-links:after, +.search-submit:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-family: "Genericons"; + font-size: 16px; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: 1; + speak: none; + text-align: center; + text-decoration: inherit; + text-transform: none; + vertical-align: top; +} + + +/** + * 3.0 - Typography + */ + +body, +button, +input, +select, +textarea { + color: #1a1a1a; + font-family: Merriweather, Georgia, serif; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-weight: 700; + margin: 0; + text-rendering: optimizeLegibility; +} + +p { + margin: 0 0 1.75em; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + border: 0 solid #1a1a1a; + border-left-width: 4px; + color: #686868; + font-size: 19px; + font-size: 1.1875rem; + font-style: italic; + line-height: 1.4736842105; + margin: 0 0 1.4736842105em; + overflow: hidden; + padding: 0 0 0 1.263157895em; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; +} + +blockquote p { + margin-bottom: 1.4736842105em; +} + +blockquote cite, +blockquote small { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +blockquote cite:before, +blockquote small:before { + content: "\2014\00a0"; +} + +blockquote em, +blockquote i, +blockquote cite { + font-style: normal; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +blockquote > :last-child { + margin-bottom: 0; +} + +address { + font-style: italic; + margin: 0 0 1.75em; +} + +code, +kbd, +tt, +var, +samp, +pre { + font-family: Inconsolata, monospace; +} + +pre { + border: 1px solid #d1d1d1; + font-size: 16px; + font-size: 1rem; + line-height: 1.3125; + margin: 0 0 1.75em; + max-width: 100%; + overflow: auto; + padding: 1.75em; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +code { + background-color: #d1d1d1; + padding: 0.125em 0.25em; +} + +abbr, +acronym { + border-bottom: 1px dotted #d1d1d1; + cursor: help; +} + +mark, +ins { + background: #007acc; + color: #fff; + padding: 0.125em 0.25em; + text-decoration: none; +} + +big { + font-size: 125%; +} + + +/** + * 4.0 - Elements + */ + +html { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*:before, +*:after { + /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ + -webkit-box-sizing: inherit; + -moz-box-sizing: inherit; + box-sizing: inherit; +} + +body { + background: #1a1a1a; + /* Fallback for when there is no custom background color defined. */ +} + +hr { + background-color: #d1d1d1; + border: 0; + height: 1px; + margin: 0 0 1.75em; +} + +ul, +ol { + margin: 0 0 1.75em 1.25em; + padding: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; + margin-left: 1.5em; +} + +li > ul, +li > ol { + margin-bottom: 0; +} + +dl { + margin: 0 0 1.75em; +} + +dt { + font-weight: 700; +} + +dd { + margin: 0 0 1.75em; +} + +img { + height: auto; + /* Make sure images are scaled correctly. */ + max-width: 100%; + /* Adhere to container width. */ + vertical-align: middle; +} + +del { + opacity: 0.8; +} + +table, +th, +td { + border: 1px solid #d1d1d1; +} + +table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin: 0 0 1.75em; + table-layout: fixed; + /* Prevents HTML tables from becoming too wide */ + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +th { + border-width: 0 1px 1px 0; + font-weight: 700; +} + +td { + border-width: 0 1px 1px 0; +} + +th, +td { + padding: 0.4375em; +} + +/* Placeholder text color -- selectors need to be separate to work. */ +::-webkit-input-placeholder { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; +} + +:-moz-placeholder { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; +} + +::-moz-placeholder { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + opacity: 1; + /* Since FF19 lowers the opacity of the placeholder by default */ +} + +:-ms-input-placeholder { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; +} + + +/** + * 5.0 - Forms + */ + +input { + line-height: normal; +} + +button, +button[disabled]:hover, +button[disabled]:focus, +input[type="button"], +input[type="button"][disabled]:hover, +input[type="button"][disabled]:focus, +input[type="reset"], +input[type="reset"][disabled]:hover, +input[type="reset"][disabled]:focus, +input[type="submit"], +input[type="submit"][disabled]:hover, +input[type="submit"][disabled]:focus { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +button:hover, +button:focus, +input[type="button"]:hover, +input[type="button"]:focus, +input[type="reset"]:hover, +input[type="reset"]:focus, +input[type="submit"]:hover, +input[type="submit"]:focus { + background: #007acc; +} + +button:focus, +input[type="button"]:focus, +input[type="reset"]:focus, +input[type="submit"]:focus { + outline: thin dotted; + outline-offset: -4px; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="week"], +input[type="month"], +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="tel"], +input[type="number"], +textarea { + background: #f7f7f7; + background-image: -webkit-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0)); + border: 1px solid #d1d1d1; + border-radius: 2px; + color: #686868; + padding: 0.625em 0.4375em; + width: 100%; +} + +input[type="date"]:focus, +input[type="time"]:focus, +input[type="datetime-local"]:focus, +input[type="week"]:focus, +input[type="month"]:focus, +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="number"]:focus, +textarea:focus { + background-color: #fff; + border-color: #007acc; + color: #1a1a1a; + outline: 0; +} + +.post-password-form { + margin-bottom: 1.75em; +} + +.post-password-form label { + color: #686868; + display: block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + letter-spacing: 0.076923077em; + line-height: 1.6153846154; + margin-bottom: 1.75em; + text-transform: uppercase; +} + +.post-password-form input[type="password"] { + margin-top: 0.4375em; +} + +.post-password-form > :last-child { + margin-bottom: 0; +} + +.search-form { + position: relative; +} + +input[type="search"].search-field { + border-radius: 2px 0 0 2px; + width: -webkit-calc(100% - 42px); + width: calc(100% - 42px); +} + +.search-submit:before { + content: "\f400"; + font-size: 24px; + left: 2px; + line-height: 42px; + position: relative; + width: 40px; +} + +.search-submit { + border-radius: 0 2px 2px 0; + bottom: 0; + overflow: hidden; + padding: 0; + position: absolute; + right: 0; + top: 0; + width: 42px; +} + + +/** + * 6.0 - Navigation + */ + +/** + * 6.1 - Links + */ + +a { + color: #007acc; + text-decoration: none; +} + +a:hover, +a:focus, +a:active { + color: #686868; +} + +a:focus { + outline: thin dotted; +} + +a:hover, +a:active { + outline: 0; +} + +.entry-content a, +.entry-summary a, +.taxonomy-description a, +.logged-in-as a, +.comment-content a, +.pingback .comment-body > a, +.textwidget a, +.entry-footer a:hover, +.site-info a:hover { + box-shadow: 0 1px 0 0 currentColor; +} + +.entry-content a:hover, +.entry-content a:focus, +.entry-summary a:hover, +.entry-summary a:focus, +.taxonomy-description a:hover, +.taxonomy-description a:focus, +.logged-in-as a:hover, +.logged-in-as a:focus, +.comment-content a:hover, +.comment-content a:focus, +.pingback .comment-body > a:hover, +.pingback .comment-body > a:focus, +.textwidget a:hover, +.textwidget a:focus { + box-shadow: none; +} + + +/** + * 6.2 - Menus + */ + +.site-header-menu { + display: none; + -webkit-flex: 0 1 100%; + -ms-flex: 0 1 100%; + flex: 0 1 100%; + margin: 0.875em 0; +} + +.site-header-menu.toggled-on, +.no-js .site-header-menu { + display: block; +} + +.main-navigation { + font-family: Montserrat, "Helvetica Neue", sans-serif; +} + +.site-footer .main-navigation { + margin-bottom: 1.75em; +} + +.main-navigation ul { + list-style: none; + margin: 0; +} + +.main-navigation li { + border-top: 1px solid #d1d1d1; + position: relative; +} + +.main-navigation a { + color: #1a1a1a; + display: block; + line-height: 1.3125; + outline-offset: -1px; + padding: 0.84375em 0; +} + +.main-navigation a:hover, +.main-navigation a:focus { + color: #007acc; +} + +.main-navigation .current-menu-item > a, +.main-navigation .current-menu-ancestor > a { + font-weight: 700; +} + +.main-navigation ul ul { + display: none; + margin-left: 0.875em; +} + +.no-js .main-navigation ul ul { + display: block; +} + +.main-navigation ul .toggled-on { + display: block; +} + +.main-navigation .primary-menu { + border-bottom: 1px solid #d1d1d1; +} + +.main-navigation .menu-item-has-children > a { + margin-right: 56px; +} + +.dropdown-toggle { + background-color: transparent; + border: 0; + border-radius: 0; + color: #1a1a1a; + content: ""; + height: 48px; + padding: 0; + position: absolute; + right: 0; + text-transform: none; + top: 0; + width: 48px; +} + +.dropdown-toggle:after { + border: 0 solid #d1d1d1; + border-left-width: 1px; + content: "\f431"; + font-size: 24px; + left: 1px; + position: relative; + width: 48px; +} + +.dropdown-toggle:hover, +.dropdown-toggle:focus { + background-color: transparent; + color: #007acc; +} + +.dropdown-toggle:focus { + outline: thin dotted; + outline-offset: -1px; +} + +.dropdown-toggle:focus:after { + border-color: transparent; +} + +.dropdown-toggle.toggled-on:after { + content: "\f432"; +} + +.site-header .main-navigation + .social-navigation { + margin-top: 1.75em; +} + +.site-footer .social-navigation { + margin-bottom: 1.75em; +} + +.social-navigation ul { + list-style: none; + margin: 0 0 -0.4375em; +} + +.social-navigation li { + float: left; + margin: 0 0.4375em 0.4375em 0; +} + +.social-navigation a { + border: 1px solid #d1d1d1; + border-radius: 50%; + color: #1a1a1a; + display: block; + height: 35px; + position: relative; + width: 35px; +} + +.social-navigation a:before { + content: "\f415"; + height: 33px; + line-height: 33px; + text-align: center; + width: 33px; +} + +.social-navigation a:hover:before, +.social-navigation a:focus:before { + color: #007acc; +} + +.social-navigation a[href*="codepen.io"]:before { + content: "\f216"; +} + +.social-navigation a[href*="digg.com"]:before { + content: "\f221"; +} + +.social-navigation a[href*="dribbble.com"]:before { + content: "\f201"; +} + +.social-navigation a[href*="dropbox.com"]:before { + content: "\f225"; +} + +.social-navigation a[href*="facebook.com"]:before { + content: "\f203"; +} + +.social-navigation a[href*="flickr.com"]:before { + content: "\f211"; +} + +.social-navigation a[href*="foursquare.com"]:before { + content: "\f226"; +} + +.social-navigation a[href*="plus.google.com"]:before { + content: "\f206"; +} + +.social-navigation a[href*="github.com"]:before { + content: "\f200"; +} + +.social-navigation a[href*="instagram.com"]:before { + content: "\f215"; +} + +.social-navigation a[href*="linkedin.com"]:before { + content: "\f208"; +} + +.social-navigation a[href*="path.com"]:before { + content: "\f219"; +} + +.social-navigation a[href*="pinterest.com"]:before { + content: "\f210"; +} + +.social-navigation a[href*="getpocket.com"]:before { + content: "\f224"; +} + +.social-navigation a[href*="polldaddy.com"]:before { + content: "\f217"; +} + +.social-navigation a[href*="reddit.com"]:before { + content: "\f222"; +} + +.social-navigation a[href*="skype.com"]:before { + content: "\f220"; +} + +.social-navigation a[href*="stumbleupon.com"]:before { + content: "\f223"; +} + +.social-navigation a[href*="tumblr.com"]:before { + content: "\f214"; +} + +.social-navigation a[href*="twitter.com"]:before { + content: "\f202"; +} + +.social-navigation a[href*="vimeo.com"]:before { + content: "\f212"; +} + +.social-navigation a[href*="wordpress.com"]:before, +.social-navigation a[href*="wordpress.org"]:before { + content: "\f205"; +} + +.social-navigation a[href*="youtube.com"]:before { + content: "\f213"; +} + +.social-navigation a[href^="mailto:"]:before { + content: "\f410"; +} + +.social-navigation a[href*="spotify.com"]:before { + content: "\f515"; +} + +.social-navigation a[href*="twitch.tv"]:before { + content: "\f516"; +} + +.social-navigation a[href$="/feed/"]:before { + content: "\f413"; +} + +.post-navigation { + border-top: 4px solid #1a1a1a; + border-bottom: 4px solid #1a1a1a; + clear: both; + font-family: Montserrat, "Helvetica Neue", sans-serif; + margin: 0 7.6923% 3.5em; +} + +.post-navigation a { + color: #1a1a1a; + display: block; + padding: 1.75em 0; +} + +.post-navigation span { + display: block; +} + +.post-navigation .meta-nav { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + letter-spacing: 0.076923077em; + line-height: 1.6153846154; + margin-bottom: 0.5384615385em; + text-transform: uppercase; +} + +.post-navigation .post-title { + display: inline; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 23px; + font-size: 1.4375rem; + font-weight: 700; + line-height: 1.2173913043; + text-rendering: optimizeLegibility; +} + +.post-navigation a:hover .post-title, +.post-navigation a:focus .post-title { + color: #007acc; +} + +.post-navigation div + div { + border-top: 4px solid #1a1a1a; +} + +.pagination { + border-top: 4px solid #1a1a1a; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 19px; + font-size: 1.1875rem; + margin: 0 7.6923% 2.947368421em; + min-height: 56px; + position: relative; +} + +.pagination:before, +.pagination:after { + background-color: #1a1a1a; + content: ""; + height: 52px; + position: absolute; + top:0; + width: 52px; + z-index: 0; +} + +.pagination:before { + right: 0; +} + +.pagination:after { + right: 54px; +} + +.pagination a:hover, +.pagination a:focus { + color: #1a1a1a; +} + +.pagination .nav-links { + padding-right: 106px; + position: relative; +} + +.pagination .nav-links:before, +.pagination .nav-links:after { + color: #fff; + font-size: 32px; + line-height: 51px; + opacity: 0.3; + position: absolute; + width: 52px; + z-index: 1; +} + +.pagination .nav-links:before { + content: "\f429"; + right: -1px; +} + +.pagination .nav-links:after { + content: "\f430"; + right: 55px; +} + +/* reset screen-reader-text */ +.pagination .current .screen-reader-text { + position: static !important; +} + +.pagination .page-numbers { + display: none; + letter-spacing: 0.013157895em; + line-height: 1; + margin: 0 0.7368421053em 0 -0.7368421053em; + padding: 0.8157894737em 0.7368421053em 0.3947368421em; + text-transform: uppercase; +} + +.pagination .current { + display: inline-block; + font-weight: 700; +} + +.pagination .prev, +.pagination .next { + background-color: #1a1a1a; + color: #fff; + display: inline-block; + height: 52px; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + top: 0; + width: 52px; + z-index: 2; +} + +.pagination .prev:before, +.pagination .next:before { + font-size: 32px; + height: 53px; + line-height: 52px; + position: relative; + width: 53px; +} + +.pagination .prev:hover, +.pagination .prev:focus, +.pagination .next:hover, +.pagination .next:focus { + background-color: #007acc; + color: #fff; +} + +.pagination .prev:focus, +.pagination .next:focus { + outline: 0; +} + +.pagination .prev { + right: 54px; +} + +.pagination .prev:before { + content: "\f430"; + left: -1px; + top: -1px; +} + +.pagination .next { + right: 0; +} + +.pagination .next:before { + content: "\f429"; + right: -1px; + top: -1px; +} + +.image-navigation, +.comment-navigation { + border-top: 1px solid #d1d1d1; + border-bottom: 1px solid #d1d1d1; + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin: 0 7.6923% 2.1538461538em; + padding: 1.0769230769em 0; +} + +.comment-navigation { + margin-right: 0; + margin-left: 0; +} + +.comments-title + .comment-navigation { + border-bottom: 0; + margin-bottom: 0; +} + +.image-navigation .nav-previous:not(:empty), +.image-navigation .nav-next:not(:empty), +.comment-navigation .nav-previous:not(:empty), +.comment-navigation .nav-next:not(:empty) { + display: inline-block; +} + +.image-navigation .nav-previous:not(:empty) + .nav-next:not(:empty):before, +.comment-navigation .nav-previous:not(:empty) + .nav-next:not(:empty):before { + content: "\002f"; + display: inline-block; + opacity: 0.7; + padding: 0 0.538461538em; +} + + +/** + * 7.0 - Accessibility + */ + +/* Text meant only for screen readers */ +.says, +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + overflow: hidden; + position: absolute !important; + width: 1px; + /* many screen reader and browser combinations announce broken words as they would appear visually */ + word-wrap: normal !important; +} + +/* must have higher specificity than alternative color schemes inline styles */ +.site .skip-link { + background-color: #f1f1f1; + box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.2); + color: #21759b; + display: block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 14px; + font-weight: 700; + left: -9999em; + outline: none; + padding: 15px 23px 14px; + text-decoration: none; + text-transform: none; + top: -9999em; +} + +.logged-in .site .skip-link { + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2); + font-family: "Open Sans", sans-serif; +} + +.site .skip-link:focus { + clip: auto; + height: auto; + left: 6px; + top: 7px; + width: auto; + z-index: 100000; +} + + +/** + * 8.0 - Alignments + */ + +.alignleft { + float: left; + margin: 0.375em 1.75em 1.75em 0; +} + +.alignright { + float: right; + margin: 0.375em 0 1.75em 1.75em; +} + +.aligncenter { + clear: both; + display: block; + margin: 0 auto 1.75em; +} + +blockquote.alignleft { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +blockquote.alignright { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +blockquote.aligncenter { + margin-bottom: 1.473684211em; +} + + +/** + * 9.0 - Clearings + */ + +.clear:before, +.clear:after, +blockquote:before, +blockquote:after, +.entry-content:before, +.entry-content:after, +.entry-summary:before, +.entry-summary:after, +.comment-content:before, +.comment-content:after, +.site-content:before, +.site-content:after, +.site-main > article:before, +.site-main > article:after, +.primary-menu:before, +.primary-menu:after, +.social-links-menu:before, +.social-links-menu:after, +.textwidget:before, +.textwidget:after, +.content-bottom-widgets:before, +.content-bottom-widgets:after { + content: ""; + display: table; +} + +.clear:after, +blockquote:after, +.entry-content:after, +.entry-summary:after, +.comment-content:after, +.site-content:after, +.site-main > article:after, +.primary-menu:after, +.social-links-menu:after, +.textwidget:after, +.content-bottom-widgets:after { + clear: both; +} + + +/** + * 10.0 - Widgets + */ + +.widget { + border-top: 4px solid #1a1a1a; + margin-bottom: 3.5em; + padding-top: 1.75em; +} + +.widget-area > :last-child, +.widget > :last-child { + margin-bottom: 0; +} + +.widget .widget-title { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 16px; + font-size: 1rem; + letter-spacing: 0.046875em; + line-height: 1.3125; + margin: 0 0 1.75em; + text-transform: uppercase; +} + +.widget .widget-title:empty { + margin-bottom: 0; +} + +.widget-title a { + color: #1a1a1a; +} + +/* Calendar widget */ +.widget.widget_calendar table { + margin: 0; +} + +.widget_calendar td, +.widget_calendar th { + line-height: 2.5625; + padding: 0; + text-align: center; +} + +.widget_calendar caption { + font-weight: 900; + margin-bottom: 1.75em; +} + +.widget_calendar tbody a { + background-color: #007acc; + color: #fff; + display: block; + font-weight: 700; +} + +.widget_calendar tbody a:hover, +.widget_calendar tbody a:focus { + background-color: #686868; + color: #fff; +} + +/* Recent Posts widget */ +.widget_recent_entries .post-date { + color: #686868; + display: block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.615384615; + margin-bottom: 0.538461538em; +} + +.widget_recent_entries li:last-child .post-date { + margin-bottom: 0; +} + +/* RSS widget */ +.widget_rss .rsswidget img { + margin-top: -0.375em; +} + +.widget_rss .rss-date, +.widget_rss cite { + color: #686868; + display: block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + font-style: normal; + line-height: 1.615384615; + margin-bottom: 0.538461538em; +} + +.widget_rss .rssSummary:last-child { + margin-bottom: 2.1538461538em; +} + +.widget_rss li:last-child :last-child { + margin-bottom: 0; +} + +/* Tag Cloud widget */ +.tagcloud a { + border: 1px solid #d1d1d1; + border-radius: 2px; + display: inline-block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + line-height: 1; + margin: 0 0.1875em 0.4375em 0; + padding: 0.5625em 0.4375em 0.5em; +} + +.tagcloud ul { + list-style-type: none; + margin-left: 0; +} + +.tagcloud ul li { + display: inline-block; +} + +.tagcloud a:hover, +.tagcloud a:focus { + border-color: #007acc; + color: #007acc; + outline: 0; +} + + +/** + * 11.0 - Content + */ + +.site { + background-color: #fff; +} + +.site-inner { + margin: 0 auto; + max-width: 1320px; + position: relative; +} + +.site-content { + word-wrap: break-word; +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} + +.site-main { + margin-bottom: 3.5em; +} + +.site-main > :last-child { + margin-bottom: 0; +} + + +/** + * 11.1 - Header + */ + +.site-header { + padding: 2.625em 7.6923%; +} + +.site-header-main { + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.site-branding { + margin: 0.875em auto 0.875em 0; + /* Avoid overflowing wide custom logo in small screens in Firefox and IEs */ + max-width: 100%; + min-width: 0; + overflow: hidden; +} + +.custom-logo-link { + display: block; +} + +.custom-logo { + max-width: 180px; +} + +.site-title { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 23px; + font-size: 1.4375rem; + font-weight: 700; + line-height: 1.2173913043; + margin: 0; +} + +.site-branding .site-title a { + color: #1a1a1a; +} + +.site-branding .site-title a:hover, +.site-branding .site-title a:focus { + color: #007acc; +} + +.wp-custom-logo .site-title { + margin-top: 0.608695652em; +} + +.site-description { + color: #686868; + display: none; + font-size: 13px; + font-size: 0.8125rem; + font-weight: 400; + line-height: 1.0769230769; + margin: 0.538461538em 0 0; +} + +.menu-toggle { + background-color: transparent; + border: 1px solid #d1d1d1; + color: #1a1a1a; + font-size: 13px; + font-size: 0.8125rem; + margin: 1.076923077em 0; + padding: 0.769230769em; +} + +.no-js .menu-toggle { + display: none; +} + +.menu-toggle:hover, +.menu-toggle:focus { + background-color: transparent; + border-color: #007acc; + color: #007acc; +} + +.menu-toggle.toggled-on, +.menu-toggle.toggled-on:hover, +.menu-toggle.toggled-on:focus { + background-color: #1a1a1a; + border-color: #1a1a1a; + color: #fff; +} + +.menu-toggle:focus { + outline: 0; +} + +.menu-toggle.toggled-on:focus { + outline: thin dotted; +} + +.header-image { + clear: both; + margin: 0.875em 0; +} + +.header-image a { + display: block; +} + +.header-image a:hover img, +.header-image a:focus img { + opacity: 0.85; +} + +/** + * 11.2 - Posts and pages + */ + +.site-main > article { + margin-bottom: 3.5em; + position: relative; +} + +.entry-header, +.entry-summary, +.entry-content, +.entry-footer, +.page-content { + margin-right: 7.6923%; + margin-left: 7.6923%; +} + +.entry-title { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 28px; + font-size: 1.75rem; + font-weight: 700; + line-height: 1.25; + margin-bottom: 1em; +} + +.entry-title a { + color: #1a1a1a; +} + +.entry-title a:hover, +.entry-title a:focus { + color: #007acc; +} + +.post-thumbnail { + display: block; + margin: 0 7.6923% 1.75em; +} + +.post-thumbnail img { + display: block; +} + +.no-sidebar .post-thumbnail img { + margin: 0 auto; +} + +a.post-thumbnail:hover, +a.post-thumbnail:focus { + opacity: 0.85; +} + +.entry-content, +.entry-summary { + border-color: #d1d1d1; +} + +.entry-content h1, +.entry-summary h1, +.comment-content h1, +.textwidget h1 { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; +} + +.entry-content h2, +.entry-summary h2, +.comment-content h2, +.textwidget h2 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-top: 2.4347826087em; + margin-bottom: 1.2173913043em; +} + +.entry-content h3, +.entry-summary h3, +.comment-content h3, +.textwidget h3 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-top: 2.9473684211em; + margin-bottom: 1.4736842105em; +} + +.entry-content h4, +.entry-content h5, +.entry-content h6, +.entry-summary h4, +.entry-summary h5, +.entry-summary h6, +.comment-content h4, +.comment-content h5, +.comment-content h6, +.textwidget h4, +.textwidget h5, +.textwidget h6 { + font-size: 16px; + font-size: 1rem; + line-height: 1.3125; + margin-top: 3.5em; + margin-bottom: 1.75em; +} + +.entry-content h4, +.entry-summary h4, +.comment-content h4, +.textwidget h4 { + letter-spacing: 0.140625em; + text-transform: uppercase; +} + +.entry-content h6, +.entry-summary h6, +.comment-content h6, +.textwidget h6 { + font-style: italic; +} + +.entry-content h1, +.entry-content h2, +.entry-content h3, +.entry-content h4, +.entry-content h5, +.entry-content h6, +.entry-summary h1, +.entry-summary h2, +.entry-summary h3, +.entry-summary h4, +.entry-summary h5, +.entry-summary h6, +.comment-content h1, +.comment-content h2, +.comment-content h3, +.comment-content h4, +.comment-content h5, +.comment-content h6, +.textwidget h1, +.textwidget h2, +.textwidget h3, +.textwidget h4, +.textwidget h5, +.textwidget h6 { + font-weight: 900; +} + +.entry-content h1:first-child, +.entry-content h2:first-child, +.entry-content h3:first-child, +.entry-content h4:first-child, +.entry-content h5:first-child, +.entry-content h6:first-child, +.entry-summary h1:first-child, +.entry-summary h2:first-child, +.entry-summary h3:first-child, +.entry-summary h4:first-child, +.entry-summary h5:first-child, +.entry-summary h6:first-child, +.comment-content h1:first-child, +.comment-content h2:first-child, +.comment-content h3:first-child, +.comment-content h4:first-child, +.comment-content h5:first-child, +.comment-content h6:first-child, +.textwidget h1:first-child, +.textwidget h2:first-child, +.textwidget h3:first-child, +.textwidget h4:first-child, +.textwidget h5:first-child, +.textwidget h6:first-child { + margin-top: 0; +} + +.post-navigation .post-title, +.entry-title, +.comments-title { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; +} + +body:not(.search-results) .entry-summary { + color: #686868; + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.4736842105; + margin-bottom: 1.4736842105em; +} + +body:not(.search-results) .entry-header + .entry-summary { + margin-top: -0.736842105em; +} + +body:not(.search-results) .entry-summary p, +body:not(.search-results) .entry-summary address, +body:not(.search-results) .entry-summary hr, +body:not(.search-results) .entry-summary ul, +body:not(.search-results) .entry-summary ol, +body:not(.search-results) .entry-summary dl, +body:not(.search-results) .entry-summary dd, +body:not(.search-results) .entry-summary table { + margin-bottom: 1.4736842105em; +} + +body:not(.search-results) .entry-summary li > ul, +body:not(.search-results) .entry-summary li > ol { + margin-bottom: 0; +} + +body:not(.search-results) .entry-summary th, +body:not(.search-results) .entry-summary td { + padding: 0.3684210526em; +} + +body:not(.search-results) .entry-summary fieldset { + margin-bottom: 1.4736842105em; + padding: 0.3684210526em; +} + +body:not(.search-results) .entry-summary blockquote { + border-color: currentColor; +} + +body:not(.search-results) .entry-summary blockquote > :last-child { + margin-bottom: 0; +} + +body:not(.search-results) .entry-summary .alignleft { + margin: 0.2631578947em 1.4736842105em 1.4736842105em 0; +} + +body:not(.search-results) .entry-summary .alignright { + margin: 0.2631578947em 0 1.4736842105em 1.4736842105em; +} + +body:not(.search-results) .entry-summary .aligncenter { + margin-bottom: 1.4736842105em; +} + +.entry-content > :last-child, +.entry-summary > :last-child, +body:not(.search-results) .entry-summary > :last-child, +.page-content > :last-child, +.comment-content > :last-child, +.textwidget > :last-child { + margin-bottom: 0; +} + +.more-link { + white-space: nowrap; +} + +.author-info { + border-color: inherit; + border-style: solid; + border-width: 1px 0 1px 0; + clear: both; + padding-top: 1.75em; + padding-bottom: 1.75em; +} + +.author-avatar .avatar { + float: left; + height: 42px; + margin: 0 1.75em 1.75em 0; + width: 42px; +} + +.author-description > :last-child { + margin-bottom: 0; +} + +.entry-content .author-title { + clear: none; + font-size: 16px; + font-size: 1rem; + font-weight: 900; + line-height: 1.75; + margin: 0; +} + +.author-bio { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin-bottom: 1.6153846154em; + overflow: hidden; +} + +.author-link { + white-space: nowrap; +} + +.entry-footer { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin-top: 2.1538461538em; +} + +.entry-footer:empty { + margin: 0; +} + +.entry-footer a { + color: #686868; +} + +.entry-footer a:hover, +.entry-footer a:focus { + color: #007acc; +} + +.entry-footer > span:not(:last-child):after { + content: "\002f"; + display: inline-block; + opacity: 0.7; + padding: 0 0.538461538em; +} + +.entry-footer .avatar { + height: 21px; + margin: -0.1538461538em 0.5384615385em 0 0; + width: 21px; +} + +.sticky-post { + color: #686868; + display: block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + letter-spacing: 0.076923077em; + line-height: 1.6153846154; + margin-bottom: 0.5384615385em; + text-transform: uppercase; +} + +/** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ +.updated:not(.published) { + display: none; +} + +.sticky .posted-on, +.byline { + display: none; +} + +.single .byline, +.group-blog .byline { + display: inline; +} + +.page-header { + border-top: 4px solid #1a1a1a; + margin: 0 7.6923% 3.5em; + padding-top: 1.75em; +} + +body.error404 .page-header, +body.search-no-results .page-header { + border-top: 0; + padding-top: 0; +} + +.page-title { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; +} + +.taxonomy-description { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.taxonomy-description p { + margin: 0.5384615385em 0 1.6153846154em; +} + +.taxonomy-description > :last-child { + margin-bottom: 0; +} + +.page-links { + clear: both; + font-family: Montserrat, "Helvetica Neue", sans-serif; + margin: 0 0 1.75em; +} + +.page-links a, +.page-links > span { + border: 1px solid #d1d1d1; + border-radius: 2px; + display: inline-block; + font-size: 13px; + font-size: 0.8125rem; + height: 1.8461538462em; + line-height: 1.6923076923em; + margin-right: 0.3076923077em; + text-align: center; + width: 1.8461538462em; +} + +.page-links a { + background-color: #1a1a1a; + border-color: #1a1a1a; + color: #fff; +} + +.page-links a:hover, +.page-links a:focus { + background-color: #007acc; + border-color: transparent; + color: #fff; +} + +.page-links > .page-links-title { + border: 0; + color: #1a1a1a; + height: auto; + margin: 0; + padding-right: 0.6153846154em; + width: auto; +} + +.entry-attachment { + margin-bottom: 1.75em; +} + +.entry-caption { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + font-style: italic; + line-height: 1.6153846154; + padding-top: 1.0769230769em; +} + +.entry-caption > :last-child { + margin-bottom: 0; +} + +.content-bottom-widgets { + margin: 0 7.6923%; +} + +.content-bottom-widgets .widget-area { + margin-bottom: 3.5em; +} + + +/** + * 11.3 - Post Formats + */ + +.format-aside .entry-title, +.format-image .entry-title, +.format-video .entry-title, +.format-quote .entry-title, +.format-gallery .entry-title, +.format-status .entry-title, +.format-link .entry-title, +.format-audio .entry-title, +.format-chat .entry-title { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.473684211; + margin-bottom: 1.473684211em; +} + +.blog .format-status .entry-title, +.archive .format-status .entry-title { + display: none; +} + + +/** + * 11.4 - Comments + */ + +.comments-area { + margin: 0 7.6923% 3.5em; +} + +.comment-list + .comment-respond, +.comment-navigation + .comment-respond { + padding-top: 1.75em; +} + +.comments-title, +.comment-reply-title { + border-top: 4px solid #1a1a1a; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 23px; + font-size: 1.4375rem; + font-weight: 700; + line-height: 1.3125; + padding-top: 1.217391304em; +} + +.comments-title { + margin-bottom: 1.217391304em; +} + +.comment-list { + list-style: none; + margin: 0; +} + +.comment-list article, +.comment-list .pingback, +.comment-list .trackback { + border-top: 1px solid #d1d1d1; + padding: 1.75em 0; +} + +.comment-list .children { + list-style: none; + margin: 0; +} + +.comment-list .children > li { + padding-left: 0.875em; +} + +.comment-author { + color: #1a1a1a; + margin-bottom: 0.4375em; +} + +.comment-author .avatar { + float: left; + height: 28px; + margin-right: 0.875em; + position: relative; + width: 28px; +} + +.bypostauthor > article .fn:after { + content: "\f304"; + left: 3px; + position: relative; + top: 5px; +} + +.comment-metadata, +.pingback .edit-link { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.comment-metadata { + margin-bottom: 2.1538461538em; +} + +.comment-metadata a, +.pingback .comment-edit-link { + color: #686868; +} + +.comment-metadata a:hover, +.comment-metadata a:focus, +.pingback .comment-edit-link:hover, +.pingback .comment-edit-link:focus { + color: #007acc; +} + +.comment-metadata .edit-link, +.pingback .edit-link { + display: inline-block; +} + +.comment-metadata .edit-link:before, +.pingback .edit-link:before { + content: "\002f"; + display: inline-block; + opacity: 0.7; + padding: 0 0.538461538em; +} + +.comment-content ul, +.comment-content ol { + margin: 0 0 1.5em 1.25em; +} + +.comment-content li > ul, +.comment-content li > ol { + margin-bottom: 0; +} + +.comment-reply-link { + border: 1px solid #d1d1d1; + border-radius: 2px; + color: #007acc; + display: inline-block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1; + margin-top: 2.1538461538em; + padding: 0.5384615385em 0.5384615385em 0.4615384615em; +} + +.comment-reply-link:hover, +.comment-reply-link:focus { + border-color: currentColor; + color: #007acc; + outline: 0; +} + +.comment-form { + padding-top: 1.75em; +} + +.comment-form label { + color: #686868; + display: block; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + letter-spacing: 0.076923077em; + line-height: 1.6153846154; + margin-bottom: 0.5384615385em; + text-transform: uppercase; +} + +.comment-list .comment-form { + padding-bottom: 1.75em; +} + +.comment-notes, +.comment-awaiting-moderation, +.logged-in-as, +.form-allowed-tags { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin-bottom: 2.1538461538em; +} + +.no-comments { + border-top: 1px solid #d1d1d1; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + margin: 0; + padding-top: 1.75em; +} + +.comment-navigation + .no-comments { + border-top: 0; + padding-top: 0; +} + +.form-allowed-tags code { + font-family: Inconsolata, monospace; +} + +.form-submit { + margin-bottom: 0; +} + +.required { + color: #007acc; + font-family: Merriweather, Georgia, serif; +} + +.comment-reply-title small { + font-size: 100%; +} + +.comment-reply-title small a { + border: 0; + float: right; + height: 32px; + overflow: hidden; + width: 26px; +} + +.comment-reply-title small a:hover, +.comment-reply-title small a:focus { + color: #1a1a1a; +} + +.comment-reply-title small a:before { + content: "\f405"; + font-size: 32px; + position: relative; + top: -5px; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 10px 0 0; +} + +.comment-form .comment-form-cookies-consent label { + display: inline; + font-family: Merriweather, Georgia, serif; + letter-spacing: 0; + text-transform: none; +} + +/** + * 11.5 - Sidebar + */ + +.sidebar { + margin-bottom: 3.5em; + padding: 0 7.6923%; +} + + +/** + * 11.6 - Footer + */ + +.site-footer { + padding: 0 7.6923% 1.75em; +} + +.site-info { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.site-info a { + color: #686868; +} + +.site-info a:hover, +.site-info a:focus { + color: #007acc; +} + +.site-footer .site-title { + font-family: inherit; + font-size: inherit; + font-weight: 400; +} + +.site-footer .site-title:after { + content: "\002f"; + display: inline-block; + font-family: Montserrat, sans-serif; + opacity: 0.7; + padding: 0 0.307692308em 0 0.538461538em; +} + +.site-footer span[role=separator] { + font-family: Montserrat, sans-serif; + opacity: 0.7; + padding: 0 0.307692308em 0 0.538461538em; +} + +.site-footer span[role=separator]::before { + content: '\002f'; +} + + +/** + * 12.0 - Media + */ + +.site .avatar { + border-radius: 50%; +} + +.entry-content .wp-smiley, +.entry-summary .wp-smiley, +.comment-content .wp-smiley, +.textwidget .wp-smiley { + border: none; + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +.entry-content a img, +.entry-summary a img, +.comment-content a img, +.textwidget a img { + display: block; +} + +/* Make sure embeds and iframes fit their containers. */ +embed, +iframe, +object, +video { + margin-bottom: 1.75em; + max-width: 100%; + vertical-align: middle; +} + +p > embed, +p > iframe, +p > object, +p > video { + margin-bottom: 0; +} + +.entry-content .wp-audio-shortcode a, +.entry-content .wp-playlist a { + box-shadow: none; +} + +.wp-audio-shortcode, +.wp-video, +.wp-playlist.wp-audio-playlist { + margin-top: 0; + margin-bottom: 1.75em; +} + +.wp-playlist.wp-audio-playlist { + padding-bottom: 0; +} + +.wp-playlist .wp-playlist-tracks { + margin-top: 0; +} + +.wp-playlist-item .wp-playlist-caption { + border-bottom: 0; + padding: 0.7142857143em 0; +} + +.wp-playlist-item .wp-playlist-item-length { + top: 0.7142857143em; +} + + +/** + * 12.1 - Captions + */ + +.wp-caption { + margin-bottom: 1.75em; + max-width: 100%; +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin: 0; +} + +.wp-caption .wp-caption-text { + color: #686868; + font-size: 13px; + font-size: 0.8125rem; + font-style: italic; + line-height: 1.6153846154; + padding-top: 0.5384615385em; +} + + +/** + * 12.2 - Galleries + */ + +.gallery { + margin: 0 -1.1666667% 1.75em; +} + +.gallery-item { + display: inline-block; + max-width: 33.33%; + padding: 0 1.1400652% 2.2801304%; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; +} + +.gallery-columns-4 .gallery-item { + max-width: 25%; +} + +.gallery-columns-5 .gallery-item { + max-width: 20%; +} + +.gallery-columns-6 .gallery-item { + max-width: 16.66%; +} + +.gallery-columns-7 .gallery-item { + max-width: 14.28%; +} + +.gallery-columns-8 .gallery-item { + max-width: 12.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 11.11%; +} + +.gallery-icon img { + margin: 0 auto; +} + +.gallery-caption { + color: #686868; + display: block; + font-size: 13px; + font-size: 0.8125rem; + font-style: italic; + line-height: 1.6153846154; + padding-top: 0.5384615385em; +} + +.gallery-columns-6 .gallery-caption, +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 13.0 - Multisites + */ + +.widecolumn { + margin-bottom: 3.5em; + padding: 0 7.6923%; +} + +.widecolumn .mu_register { + width: auto; +} + +.widecolumn .mu_register .mu_alert { + background: transparent; + border-color: #d1d1d1; + color: inherit; + margin-bottom: 3.5em; + padding: 1.75em; +} + +.widecolumn form, +.widecolumn .mu_register form { + margin-top: 0; +} + +.widecolumn h2 { + font-size: 23px; + font-size: 1.4375rem; + font-weight: 900; + line-height: 1.2173913043; + margin-bottom: 1.2173913043em; +} + +.widecolumn p { + margin: 1.75em 0; +} + +.widecolumn p + h2 { + margin-top: 2.4347826087em; +} + +.widecolumn label, +.widecolumn .mu_register label { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: 0.076923077em; + line-height: 1.6153846154; + text-transform: uppercase; +} + +.widecolumn .mu_register label { + margin: 2.1538461538em 0.7692307692em 0.5384615385em 0; +} + +.widecolumn .mu_register label strong { + font-weight: 400; +} + +.widecolumn #key, +.widecolumn .mu_register #blog_title, +.widecolumn .mu_register #user_email, +.widecolumn .mu_register #blogname, +.widecolumn .mu_register #user_name { + font-size: 16px; + font-size: 1rem; + width: 100%; +} + +.widecolumn .mu_register #blogname { + margin: 0; +} + +.widecolumn .mu_register #blog_title, +.widecolumn .mu_register #user_email, +.widecolumn .mu_register #user_name { + margin: 0 0 0.375em; +} + +.widecolumn #submit, +.widecolumn .mu_register input[type="submit"] { + font-size: 16px; + font-size: 1rem; + margin: 0; + width: auto; +} + +.widecolumn .mu_register .prefix_address, +.widecolumn .mu_register .suffix_address { + font-size: inherit; +} + +.widecolumn .mu_register > :last-child, +.widecolumn form > :last-child { + margin-bottom: 0; +} + + +/** + * 14.0 - Media Queries + */ + +/** + * Does the same thing as , + * but in the future W3C standard way. -ms- prefix is required for IE10+ to + * render responsive styling in Windows 8 "snapped" views; IE10+ does not honor + * the meta tag. See https://core.trac.wordpress.org/ticket/25888. + */ +@-ms-viewport { + width: device-width; +} + +@viewport { + width: device-width; +} + + +/** + * 14.1 - >= 710px + */ + +@media screen and (min-width: 44.375em) { + body:not(.custom-background-image):before, + body:not(.custom-background-image):after { + background: inherit; + content: ""; + display: block; + height: 21px; + left: 0; + position: fixed; + width: 100%; + z-index: 99; + } + + body:not(.custom-background-image):before { + top: 0; + } + + body:not(.custom-background-image).admin-bar:before { + top: 46px; + } + + body:not(.custom-background-image):after { + bottom: 0; + } + + .site { + margin: 21px; + } + + .site-main { + margin-bottom: 5.25em; + } + + .site-header { + padding: 3.9375em 7.6923%; + } + + .site-branding { + margin-top: 1.3125em; + margin-bottom: 1.3125em; + } + + .custom-logo { + max-width: 210px; + } + + .site-title { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + } + + .wp-custom-logo .site-title { + margin-top: 0.5em; + } + + .site-description { + display: block; + } + + .menu-toggle { + font-size: 16px; + font-size: 1.0rem; + margin: 1.3125em 0; + padding: 0.8125em 0.875em 0.6875em; + } + + .site-header-menu { + margin: 1.3125em 0; + } + + .site-header .main-navigation + .social-navigation { + margin-top: 2.625em; + } + + .header-image { + margin: 1.3125em 0; + } + + .pagination { + margin: 0 23.0769% 4.421052632em 7.6923% + } + + .post-navigation { + margin-bottom: 5.25em; + } + + .post-navigation .post-title { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + } + + /* restore screen-reader-text */ + .pagination .current .screen-reader-text { + position: absolute !important; + } + + .pagination .page-numbers { + display: inline-block; + } + + .site-main > article { + margin-bottom: 5.25em; + } + + .entry-header, + .post-thumbnail, + .entry-content, + .entry-summary, + .entry-footer, + .comments-area, + .image-navigation, + .post-navigation, + .page-header, + .page-content, + .content-bottom-widgets { + margin-right: 23.0769%; + } + + .entry-title { + font-size: 33px; + font-size: 2.0625rem; + line-height: 1.2727272727; + margin-bottom: 0.8484848485em; + } + + .entry-content blockquote.alignleft, + .entry-content blockquote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em); + } + + .entry-content blockquote:not(.alignleft):not(.alignright), + .entry-summary blockquote, + .comment-content blockquote { + margin-left: -1.473684211em; + } + + .entry-content blockquote blockquote:not(.alignleft):not(.alignright), + .entry-summary blockquote blockquote, + .comment-content blockquote blockquote { + margin-left: 0; + } + + .entry-content ul, + .entry-summary ul, + .comment-content ul, + .entry-content ol, + .entry-summary ol, + .comment-content ol { + margin-left: 0; + } + + .entry-content li > ul, + .entry-summary li > ul, + .comment-content li > ul, + .entry-content blockquote > ul, + .entry-summary blockquote > ul, + .comment-content blockquote > ul { + margin-left: 1.25em; + } + + .entry-content li > ol, + .entry-summary li > ol, + .comment-content li > ol, + .entry-content blockquote > ol, + .entry-summary blockquote > ol, + .comment-content blockquote > ol { + margin-left: 1.5em; + } + + .comment-author { + margin-bottom: 0; + } + + .comment-author .avatar { + height: 42px; + position: relative; + top: 0.25em; + width: 42px; + } + + .comment-list .children > li { + padding-left: 1.75em; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 3.5em; + } + + .comments-area, + .widget, + .content-bottom-widgets .widget-area { + margin-bottom: 5.25em; + } + + .sidebar, + .widecolumn { + margin-bottom: 5.25em; + padding-right: 23.0769%; + } + + body:not(.search-results) .entry-summary li > ul, + body:not(.search-results) .entry-summary blockquote > ul { + margin-left: 1.157894737em; + } + + body:not(.search-results) .entry-summary li > ol, + body:not(.search-results) .entry-summary blockquote > ol { + margin-left: 1.473684211em; + } +} + + +/** + * 14.2 - >= 783px + */ + +@media screen and (min-width: 48.9375em) { + body:not(.custom-background-image).admin-bar:before { + top: 32px; + } +} + + +/** + * 14.3 - >= 910px + */ + +@media screen and (min-width: 56.875em) { + .site-header { + padding-right: 4.5455%; + padding-left: 4.5455%; + } + + .site-header-main { + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + } + + .wp-custom-logo .site-header-main { + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .site-header-menu { + display: block; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + } + + .main-navigation { + margin: 0 -0.875em; + } + + .main-navigation .primary-menu, + .main-navigation .primary-menu > li { + border: 0; + } + + .main-navigation .primary-menu > li { + float: left; + } + + .main-navigation a { + outline-offset: -8px; + padding: 0.65625em 0.875em; + white-space: nowrap; + } + + .main-navigation li:hover > a, + .main-navigation li.focus > a { + color: #007acc; + } + + .main-navigation ul ul { + border-bottom: 1px solid #d1d1d1; + display: block; + left: -999em; + margin: 0; + position: absolute; + z-index: 99999; + } + + .main-navigation ul ul ul { + top: -1px; + } + + .main-navigation ul ul ul:before, + .main-navigation ul ul ul:after { + border: 0; + } + + .main-navigation ul ul li { + background-color: #fff; + border: 1px solid #d1d1d1; + border-bottom-width: 0; + } + + .main-navigation ul ul a { + white-space: normal; + width: 12.6875em; + } + + .main-navigation ul ul:before, + .main-navigation ul ul:after { + border-style: solid; + content: ""; + position: absolute; + } + + .main-navigation ul ul:before { + border-color: #d1d1d1 transparent; + border-width: 0 10px 10px; + right: 9px; + top: -9px; + } + + .main-navigation ul ul:after { + border-color: #fff transparent; + border-width: 0 8px 8px; + right: 11px; + top: -7px; + } + + .main-navigation li:hover > ul, + .main-navigation li.focus > ul { + left: auto; + right: 0; + } + + .main-navigation ul ul li:hover > ul, + .main-navigation ul ul li.focus > ul { + left: auto; + right: 100%; + } + + .main-navigation .menu-item-has-children > a { + margin: 0; + padding-right: 2.25em; + } + + .main-navigation .menu-item-has-children > a:after { + content: "\f431"; + position: absolute; + right: 0.625em; + top: 0.8125em; + } + + .main-navigation ul ul .menu-item-has-children > a { + padding-right: 2.0625em; + } + + .main-navigation ul ul .menu-item-has-children > a:after { + right: 0.5625em; + top: 0.875em; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + + .dropdown-toggle, + .main-navigation ul .dropdown-toggle.toggled-on, + .menu-toggle, + .site-header .social-navigation, + .site-footer .main-navigation { + display: none; + } + + .site-content { + padding: 0 4.5455%; + } + + .content-area { + float: left; + margin-right: -100%; + width: 70%; + } + + .entry-header, + .post-thumbnail, + .entry-content, + .entry-summary, + .entry-footer, + .comments-area, + .image-navigation, + .post-navigation, + .pagination, + .page-header, + .page-content, + .content-bottom-widgets { + margin-right: 0; + margin-left: 0; + } + + .sidebar { + float: left; + margin-left: 75%; + padding: 0; + width: 25%; + } + + .widget { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin-bottom: 3.230769231em; + padding-top: 1.615384615em; + } + + .widget .widget-title { + margin-bottom: 1.3125em; + } + + .widget p, + .widget address, + .widget hr, + .widget ul, + .widget ol, + .widget dl, + .widget dd, + .widget table { + margin-bottom: 1.6153846154em; + } + + .widget li > ul, + .widget li > ol { + margin-bottom: 0; + } + + .widget blockquote { + font-size: 16px; + font-size: 1rem; + line-height: 1.3125; + margin-bottom: 1.3125em; + padding-left: 1.0625em; + } + + .widget blockquote cite, + .widget blockquote small { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + } + + .widget th, + .widget td { + padding: 0.5384615385em; + } + + .widget pre { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin-bottom: 1.6153846154em; + padding: 0.5384615385em; + } + + .widget fieldset { + margin-bottom: 1.6153846154em; + padding: 0.5384615385em; + } + + .widget button, + .widget input, + .widget select, + .widget textarea { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + } + + .widget button, + .widget input[type="button"], + .widget input[type="reset"], + .widget input[type="submit"] { + line-height: 1; + padding: 0.846153846em; + } + + .widget input[type="date"], + .widget input[type="time"], + .widget input[type="datetime-local"], + .widget input[type="week"], + .widget input[type="month"], + .widget input[type="text"], + .widget input[type="email"], + .widget input[type="url"], + .widget input[type="password"], + .widget input[type="search"], + .widget input[type="tel"], + .widget input[type="number"], + .widget textarea { + padding: 0.4615384615em 0.5384615385em; + } + + .widget h1 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-bottom: 0.9130434783em; + } + + .widget h2 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-bottom: 1.1052631579em; + } + + .widget h3 { + font-size: 16px; + font-size: 1rem; + line-height: 1.3125; + margin-bottom: 1.3125em; + } + + .widget h4, + .widget h5, + .widget h6 { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; + margin-bottom: 0.9130434783em; + } + + .widget .alignleft { + margin: 0.2307692308em 1.6153846154em 1.6153846154em 0; + } + + .widget .alignright { + margin: 0.2307692308em 0 1.6153846154em 1.6153846154em; + } + + .widget .aligncenter { + margin-bottom: 1.6153846154em; + } + + .widget_calendar td, + .widget_calendar th { + line-height: 2.6923076923; + padding: 0; + } + + .widget_rss .rssSummary:last-child { + margin-bottom: 1.615384615em; + } + + .widget input[type="search"].search-field { + width: -webkit-calc(100% - 35px); + width: calc(100% - 35px); + } + + .widget .search-submit:before { + font-size: 16px; + left: 1px; + line-height: 35px; + width: 34px; + } + + .widget button.search-submit { + padding: 0; + width: 35px; + } + + .tagcloud a { + margin: 0 0.2307692308em 0.5384615385em 0; + padding: 0.5384615385em 0.4615384615em 0.4615384615em; + } + + .textwidget h1 { + margin-top: 1.8260869565em; + } + + .textwidget h2 { + margin-top: 2.2105263158em; + } + + .textwidget h3 { + margin-top: 2.625em; + } + + .textwidget h4 { + letter-spacing: 0.153846154em; + } + + .textwidget h4, + .textwidget h5, + .textwidget h6 { + margin-top: 3.2307692308em; + } + + .content-bottom-widgets .widget-area:nth-child(1):nth-last-child(2), + .content-bottom-widgets .widget-area:nth-child(2):nth-last-child(1) { + float: left; + margin-right: 7.1428571%; + width: 46.42857145%; + } + + .content-bottom-widgets .widget-area:nth-child(2):nth-last-child(1):last-of-type { + margin-right: 0; + } + + .site-footer { + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0 4.5455% 3.5em; + } + + .site-footer .social-navigation { + margin: 0; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + } + + .site-info { + margin: 0.538461538em auto 0.538461538em 0; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + + .no-sidebar .content-area { + float: none; + margin: 0; + width: 100%; + } + + .no-sidebar .entry-header, + .no-sidebar .entry-content, + .no-sidebar .entry-summary, + .no-sidebar .entry-footer, + .no-sidebar .comments-area, + .no-sidebar .image-navigation, + .no-sidebar .post-navigation, + .no-sidebar .pagination, + .no-sidebar .page-header, + .no-sidebar .page-content, + .no-sidebar .content-bottom-widgets { + margin-right: 15%; + margin-left: 15%; + } + + .widecolumn { + padding-right: 15%; + padding-left: 15%; + } +} + + +/** + * 14.4 - >= 985px + */ + +@media screen and (min-width: 61.5625em) { + .site-main { + margin-bottom: 7.0em; + } + + .site-header { + padding: 5.25em 4.5455%; + } + + .site-branding, + .site-header-menu, + .header-image { + margin-top: 1.75em; + margin-bottom: 1.75em; + } + + .custom-logo { + max-width: 240px; + } + + .image-navigation { + margin-bottom: 3.230769231em; + } + + .post-navigation { + margin-bottom: 7.0em; + } + + .pagination { + margin-bottom: 5.894736842em; + } + + .widget { + margin-bottom: 4.307692308em; + } + + .site-main > article { + margin-bottom: 7.0em; + } + + .entry-title { + font-size: 40px; + font-size: 2.5rem; + line-height: 1.225; + margin-bottom: 1.05em; + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 23px; + font-size: 1.4375em; + line-height: 1.304347826; + margin-bottom: 1.826086957em; + } + + .post-thumbnail { + margin-bottom: 2.625em; + } + + .entry-content h1, + .entry-summary h1, + .comment-content h1 { + font-size: 33px; + font-size: 2.0625rem; + line-height: 1.2727272727; + margin-top: 1.696969697em; + margin-bottom: 0.8484848485em; + } + + .entry-content h2, + .entry-summary h2, + .comment-content h2 { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; + } + + .entry-content h3, + .entry-summary h3, + .comment-content h3 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-top: 2.4347826087em; + margin-bottom: 1.2173913043em; + } + + .entry-content h4, + .entry-summary h4, + .entry-intro h4, + .comment-content h4 { + letter-spacing: 0.131578947em; + } + + .entry-content h4, + .entry-content h5, + .entry-content h6, + .entry-summary h4, + .entry-summary h5, + .entry-summary h6, + .comment-content h4, + .comment-content h5, + .comment-content h6 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-top: 2.9473684211em; + margin-bottom: 1.473684211em; + } + + .author-info { + border-bottom-width: 0; + padding-bottom: 0; + } + + .comment-list + .comment-respond, + .comment-navigation + .comment-respond { + padding-top: 5.25em; + } + + .comments-area, + .sidebar, + .content-bottom-widgets .widget-area, + .widecolumn { + margin-bottom: 7.0em; + } + + body:not(.search-results) .entry-summary { + margin-bottom: 2.210526316em; + } + + body:not(.search-results) .entry-header + .entry-summary { + margin-top: -1.105263158em; + } + + body:not(.search-results) article:not(.type-page) .entry-content { + float: right; + width: 71.42857144%; + } + + body:not(.search-results) article:not(.type-page) .entry-content > blockquote.alignleft.below-entry-meta { + margin-left: -40%; + width: -webkit-calc(60% - 1.4736842105em); + width: calc(60% - 1.4736842105em); + } + + body:not(.search-results) article:not(.type-page) img.below-entry-meta, + body:not(.search-results) article:not(.type-page) figure.below-entry-meta { + clear: both; + display: block; + float: none; + margin-right: 0; + margin-left: -40%; + max-width: 140%; + } + + body:not(.search-results) article:not(.type-page) figure.below-entry-meta img.below-entry-meta, + body:not(.search-results) article:not(.type-page) table figure.below-entry-meta, + body:not(.search-results) article:not(.type-page) table img.below-entry-meta { + margin: 0; + max-width: 100%; + } + + body:not(.search-results) article:not(.type-page) .entry-footer { + float: left; + margin-top: 0.1538461538em; + width: 21.42857143%; + } + + body:not(.search-results) article:not(.type-page) .entry-footer > span:not(:last-child):after { + display: none; + } + + .single .byline, + .full-size-link, + body:not(.search-results).group-blog .byline, + body:not(.search-results) .entry-format, + body:not(.search-results) .cat-links, + body:not(.search-results) .tags-links, + body:not(.search-results) article:not(.sticky) .posted-on, + body:not(.search-results) article:not(.type-page) .comments-link, + body:not(.search-results) article:not(.type-page) .entry-footer .edit-link { + display: block; + margin-bottom: 0.5384615385em; + } + + body:not(.search-results) article:not(.type-page) .entry-footer > span:last-child { + margin-bottom: 0; + } + + body:not(.search-results) article:not(.type-page) .entry-footer .avatar { + display: block; + height: auto; + margin: 0 0 0.5384615385em; + width: 49px; + } + + body.no-sidebar:not(.search-results) article:not(.type-page) .entry-content { + float: left; + margin-right: -100%; + margin-left: 34.99999999%; + width: 50.00000001%; + } + + body.no-sidebar:not(.search-results) article:not(.type-page) .entry-footer { + margin-right: -100%; + margin-left: 15%; + width: 15%; + } +} + + +/** + * 14.5 - >= 1200px + */ + +@media screen and (min-width: 75em) { + body:not(.search-results) .entry-summary { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.5217391304; + margin-bottom: 1.826086957em; + } + + body:not(.search-results) .entry-header + .entry-summary { + margin-top: -0.913043478em; + } + + body:not(.search-results) .entry-summary p, + body:not(.search-results) .entry-summary address, + body:not(.search-results) .entry-summary hr, + body:not(.search-results) .entry-summary ul, + body:not(.search-results) .entry-summary ol, + body:not(.search-results) .entry-summary dl, + body:not(.search-results) .entry-summary dd, + body:not(.search-results) .entry-summary table { + margin-bottom: 1.5217391304em; + } + + body:not(.search-results) .entry-summary li > ul, + body:not(.search-results) .entry-summary blockquote > ul { + margin-left: 0.956521739em; + } + + body:not(.search-results) .entry-summary li > ol, + body:not(.search-results) .entry-summary blockquote > ol { + margin-left: 1.52173913em; + } + + body:not(.search-results) .entry-summary blockquote { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.5217391304; + margin: 0 0 1.5217391304em; + padding-left: 1.347826087em; + } + + body:not(.search-results) .entry-summary blockquote:not(.alignleft):not(.alignright) { + margin-left: -1.52173913em; + } + + body:not(.search-results) .entry-summary blockquote blockquote:not(.alignleft):not(.alignright) { + margin-left: 0; + } + + body:not(.search-results) .entry-summary blockquote cite, + body:not(.search-results) .entry-summary blockquote small { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.8421052632; + } + + body:not(.search-results) .entry-summary th, + body:not(.search-results) .entry-summary td { + padding: 0.3043478261em; + } + + body:not(.search-results) .entry-summary pre { + font-size: 16px; + font-size: 1rem; + line-height: 1.75; + margin-bottom: 1.75em; + padding: 1.75em; + } + + body:not(.search-results) .entry-summary fieldset { + margin-bottom: 1.5217391304em; + padding: 0.3043478261em; + } + + body:not(.search-results) .entry-summary h1 { + margin-top: 2.121212121em; + margin-bottom: 1.060606061em; + } + + body:not(.search-results) .entry-summary h2 { + margin-top: 2.5em; + margin-bottom: 1.25em; + } + + body:not(.search-results) .entry-summary h3 { + margin-top: 3.043478261em; + margin-bottom: 1.52173913em; + } + + body:not(.search-results) .entry-summary h4, + body:not(.search-results) .entry-summary h5, + body:not(.search-results) .entry-summary h6 { + margin-top: 3.684210526em; + margin-bottom: 1.842105263em; + } + + body:not(.search-results) .entry-summary h1:first-child, + body:not(.search-results) .entry-summary h2:first-child, + body:not(.search-results) .entry-summary h3:first-child, + body:not(.search-results) .entry-summary h4:first-child, + body:not(.search-results) .entry-summary h5:first-child, + body:not(.search-results) .entry-summary h6:first-child { + margin-top: 0; + } + + body:not(.search-results) .entry-summary .alignleft { + margin: 0.2608695652em 1.5217391304em 1.5217391304em 0; + } + + body:not(.search-results) .entry-summary .alignright { + margin: 0.2608695652em 0 1.5217391304em 1.5217391304em; + } + + body:not(.search-results) .entry-summary .aligncenter { + margin-bottom: 1.5217391304em; + } +} + + +/** + * 15.0 - Print + */ + +@media print { + form, + button, + input, + select, + textarea, + .navigation, + .main-navigation, + .social-navigation, + .sidebar, + .content-bottom-widgets, + .header-image, + .page-links, + .edit-link, + .comment-respond, + .comment-edit-link, + .comment-reply-link, + .comment-metadata .edit-link, + .pingback .edit-link { + display: none; + } + + body, + blockquote cite, + blockquote small, + pre, + .entry-content h4, + .entry-content h5, + .entry-content h6, + .entry-summary h4, + .entry-summary h5, + .entry-summary h6, + .comment-content h4, + .comment-content h5, + .comment-content h6, + .entry-content .author-title { + font-size: 12pt; + } + + blockquote { + font-size: 14.25pt; + } + + .site-title, + .page-title, + .comments-title, + .entry-content h2, + .entry-summary h2, + .comment-content h2, + .widecolumn h2 { + font-size: 17.25pt; + } + + .site-description { + display: block; + } + + .entry-title { + font-size: 24.75pt; + line-height: 1.2727272727; + margin-bottom: 1.696969697em; + } + + .format-aside .entry-title, + .format-image .entry-title, + .format-video .entry-title, + .format-quote .entry-title, + .format-gallery .entry-title, + .format-status .entry-title, + .format-link .entry-title, + .format-audio .entry-title, + .format-chat .entry-title { + font-size: 17.25pt; + line-height: 1.304347826; + margin-bottom: 1.826086957em; + } + + .entry-content h1, + .entry-summary h1, + .comment-content h1 { + font-size: 21pt; + } + + .entry-content h3, + .entry-summary h3, + .comment-content h3, + body:not(.search-results) .entry-summary { + font-size: 14.25pt; + } + + .site-description, + .author-bio, + .entry-footer, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .comment-notes, + .comment-awaiting-moderation, + .site-info, + .wp-caption .wp-caption-text, + .gallery-caption { + font-size: 9.75pt; + } + + body, + .site { + background: none !important; /* Brute force since user agents all print differently. */ + } + + body, + blockquote cite, + blockquote small, + .site-branding .site-title a, + .entry-title a, + .comment-author { + color: #1a1a1a !important; /* Make sure color schemes don't affect to print */ + } + + blockquote, + .page-header, + .comments-title { + border-color: #1a1a1a !important; /* Make sure color schemes don't affect to print */ + } + + blockquote, + .site-description, + body:not(.search-results) .entry-summary, + body:not(.search-results) .entry-summary blockquote, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-author, + .comment-metadata a, + .comment-notes, + .comment-awaiting-moderation, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption { + color: #686868 !important; /* Make sure color schemes don't affect to print */ + } + + code, + hr { + background-color: #d1d1d1 !important; /* Make sure color schemes don't affect to print */ + } + + pre, + abbr, + acronym, + table, + th, + td, + .author-info, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .no-comments { + border-color: #d1d1d1 !important; /* Make sure color schemes don't affect to print */ + } + + a { + color: #007acc !important; /* Make sure color schemes don't affect to print */ + } + + .entry-content a, + .entry-summary a, + .taxonomy-description a, + .comment-content a, + .pingback .comment-body > a { + box-shadow: none; + border-bottom: 1px solid #007acc !important; /* Make sure color schemes don't affect to print */ + } + + .site { + margin: 5%; + } + + .site-inner { + max-width: none; + } + + .site-header { + padding: 0 0 1.75em; + } + + .site-branding { + margin-top: 0; + margin-bottom: 1.75em; + } + + .site-main { + margin-bottom: 3.5em; + } + + .entry-header, + .entry-footer, + .page-header, + .page-content, + .entry-content, + .entry-summary, + .post-thumbnail, + .comments-area { + margin-right: 0; + margin-left: 0; + } + + .post-thumbnail, + .site-main > article { + margin-bottom: 3.5em; + } + + .entry-content blockquote.alignleft, + .entry-content blockquote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em); + } + + body:not(.search-results) .entry-header + .entry-summary { + margin-top: -1.473684211em; + } + + .site-footer, + .widecolumn { + padding: 0; + } +} diff --git a/wp-content/themes/twentysixteen/template-parts/biography.php b/wp-content/themes/twentysixteen/template-parts/biography.php new file mode 100644 index 000000000..9e2e5b87f --- /dev/null +++ b/wp-content/themes/twentysixteen/template-parts/biography.php @@ -0,0 +1,37 @@ + + +
        +
        + +
        + +
        +

        + +

        + + +

        +
        +
        diff --git a/wp-content/themes/twentysixteen/template-parts/content-none.php b/wp-content/themes/twentysixteen/template-parts/content-none.php new file mode 100644 index 000000000..b6b7e7c0b --- /dev/null +++ b/wp-content/themes/twentysixteen/template-parts/content-none.php @@ -0,0 +1,33 @@ + + +
        + + +
        + + +

        Get started here.', 'twentysixteen' ), esc_url( admin_url( 'post-new.php' ) ) ); ?>

        + + + +

        + + + + +

        + + + +
        +
        diff --git a/wp-content/themes/twentysixteen/template-parts/content-page.php b/wp-content/themes/twentysixteen/template-parts/content-page.php new file mode 100644 index 000000000..689972c0c --- /dev/null +++ b/wp-content/themes/twentysixteen/template-parts/content-page.php @@ -0,0 +1,47 @@ + + +
        > +
        + ', '' ); ?> +
        + + + +
        + '', + 'link_before' => '', + 'link_after' => '', + 'pagelink' => '' . __( 'Page', 'twentysixteen' ) . ' %', + 'separator' => ', ', + ) + ); + ?> +
        + + "%s"', 'twentysixteen' ), + get_the_title() + ), + '
        ', + '
        ' + ); + ?> + +
        diff --git a/wp-content/themes/twentysixteen/template-parts/content-search.php b/wp-content/themes/twentysixteen/template-parts/content-search.php new file mode 100644 index 000000000..7d587f65a --- /dev/null +++ b/wp-content/themes/twentysixteen/template-parts/content-search.php @@ -0,0 +1,53 @@ + + +
        > +
        + ', esc_url( get_permalink() ) ), '' ); ?> +
        + + + + + + + +
        + + "%s"', 'twentysixteen' ), + get_the_title() + ), + '', + '' + ); + ?> +
        + + + + "%s"', 'twentysixteen' ), + get_the_title() + ), + '
        ', + '
        ' + ); + ?> + + +
        + diff --git a/wp-content/themes/twentysixteen/template-parts/content-single.php b/wp-content/themes/twentysixteen/template-parts/content-single.php new file mode 100644 index 000000000..23e18373d --- /dev/null +++ b/wp-content/themes/twentysixteen/template-parts/content-single.php @@ -0,0 +1,55 @@ + + +
        > +
        + ', '' ); ?> +
        + + + + + +
        + '', + 'link_before' => '', + 'link_after' => '', + 'pagelink' => '' . __( 'Page', 'twentysixteen' ) . ' %', + 'separator' => ', ', + ) + ); + + if ( '' !== get_the_author_meta( 'description' ) ) { + get_template_part( 'template-parts/biography' ); + } + ?> +
        + +
        + + "%s"', 'twentysixteen' ), + get_the_title() + ), + '', + '' + ); + ?> +
        +
        diff --git a/wp-content/themes/twentysixteen/template-parts/content.php b/wp-content/themes/twentysixteen/template-parts/content.php new file mode 100644 index 000000000..03b4cfb6c --- /dev/null +++ b/wp-content/themes/twentysixteen/template-parts/content.php @@ -0,0 +1,61 @@ + + +
        > +
        + + + + + ', esc_url( get_permalink() ) ), '' ); ?> +
        + + + + + +
        + "%s"', 'twentysixteen' ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + 'pagelink' => '' . __( 'Page', 'twentysixteen' ) . ' %', + 'separator' => ', ', + ) + ); + ?> +
        + +
        + + "%s"', 'twentysixteen' ), + get_the_title() + ), + '', + '' + ); + ?> +
        +
        diff --git a/wp-content/themes/twentyten/404.php b/wp-content/themes/twentyten/404.php new file mode 100644 index 000000000..914ef0108 --- /dev/null +++ b/wp-content/themes/twentyten/404.php @@ -0,0 +1,30 @@ + + +
        +
        + +
        +

        +
        +

        + +
        +
        + +
        +
        + + + diff --git a/wp-content/themes/twentyten/archive.php b/wp-content/themes/twentyten/archive.php new file mode 100644 index 000000000..bf0a0c4ac --- /dev/null +++ b/wp-content/themes/twentyten/archive.php @@ -0,0 +1,65 @@ + + +
        +
        + + + +

        + + %s', 'twentyten' ), get_the_date() ); ?> + + %s', 'twentyten' ), get_the_date( _x( 'F Y', 'monthly archives date format', 'twentyten' ) ) ); ?> + + %s', 'twentyten' ), get_the_date( _x( 'Y', 'yearly archives date format', 'twentyten' ) ) ); ?> + + + +

        + + + +
        +
        + + + diff --git a/wp-content/themes/twentyten/attachment.php b/wp-content/themes/twentyten/attachment.php new file mode 100644 index 000000000..45c337824 --- /dev/null +++ b/wp-content/themes/twentyten/attachment.php @@ -0,0 +1,27 @@ + + +
        +
        + + + +
        +
        + + diff --git a/wp-content/themes/twentyten/author.php b/wp-content/themes/twentyten/author.php new file mode 100644 index 000000000..afb8240f8 --- /dev/null +++ b/wp-content/themes/twentyten/author.php @@ -0,0 +1,74 @@ + + +
        +
        + + + +

        ' . get_the_author() . '' ); ?>

        + + +
        +
        + +
        +
        +

        + +
        +
        + + + +
        +
        + + + diff --git a/wp-content/themes/twentyten/blocks.css b/wp-content/themes/twentyten/blocks.css new file mode 100644 index 000000000..6bcc3e8ad --- /dev/null +++ b/wp-content/themes/twentyten/blocks.css @@ -0,0 +1,255 @@ +/* +Theme Name: Twenty Ten +Description: Used to style blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + color: #777; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +/* Alignments */ + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 24px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 24px; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image figure { + margin-bottom: 24px; +} + +.wp-block-image figcaption { + margin: -7px 0 20px;; + padding: 9px 9px 1.0em; + text-align: center; +} + +.wp-block-image.alignfull, +.wp-block-image.alignfull img { + margin: 0; +} + +/* Gallery */ + +.wp-block-gallery { + margin: 0 0 24px; +} + +.wp-block-gallery .blocks-gallery-image figcaption, +.wp-block-gallery .blocks-gallery-item figcaption { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; + left: 0; + right: 0; + width: auto; +} + +/* Quotes */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: none; + padding: 0 3em; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; + font-weight: 600; +} + +/* Audio */ + +.wp-block-audio { + margin-left: 0; + margin-right: 0; +} + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* File */ + +.rtl .wp-block-file * + .wp-block-file__button { + margin: 0 0 0 0.75em; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background-color: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote p { + font-size: 1.5em; +} + +.wp-block-pullquote__citation, +.wp-block-pullquote cite { + color: inherit; + font-size: inherit; + font-weight: 600; + text-transform: none; +} + +/* Table */ + +.wp-block-table td, +.wp-block-table th { + border: none; +} + +.wp-block-table td { + border-top: 1px solid #e7e7e7; +} + +.wp-block-table tr:nth-child(odd) td { + background: #f2f7fc; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Separator */ + +.wp-block-separator { + border: 0; +} + +/* Media & Text */ + +.wp-block-media-text { + margin-bottom: 24px; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + margin-left: 20px; + text-align: center; +} + +.rtl .wp-block-archives.aligncenter, +.rtl .wp-block-categories.aligncenter, +.rtl .wp-block-latest-posts.aligncenter { + margin-left: 0; + margin-right: 20px; +} + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0 0 24px; +} + +/* Latest Posts */ + +.wp-block-latest-posts.is-grid { + margin-left: 0; + margin-right: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-blue-color, +.has-blue-color:visited { + color: #0066cc; +} + +.has-blue-background-color, +.has-blue-background-color:visited { + background-color: #0066cc; +} + +.has-black-color, +.has-black-color:visited { + color: #000; +} + +.has-black-background-color, +.has-black-background-color:visited { + background-color: #000; +} + +.has-medium-gray-color, +.has-medium-gray-color:visited { + color: #666; +} + +.has-medium-gray-background-color, +.has-medium-gray-background-color:visited { + background-color: #666; +} + +.has-light-gray-color, +.has-light-gray-color:visited { + color: #f1f1f1; +} + +.has-light-gray-background-color, +.has-light-gray-background-color:visited { + background-color: #f1f1f1; +} + +.has-white-color, +.has-white-color:visited { + color: #fff; +} + +.has-white-background-color, +.has-white-background-color:visited { + background-color: #fff; +} diff --git a/wp-content/themes/twentyten/category.php b/wp-content/themes/twentyten/category.php new file mode 100644 index 000000000..00714e85d --- /dev/null +++ b/wp-content/themes/twentyten/category.php @@ -0,0 +1,38 @@ + + +
        +
        + +

        + ' . single_cat_title( '', false ) . '' ); + ?> +

        + ' . $category_description . '
        '; + } + + /* + * Run the loop for the category page to output the posts. + * If you want to overload this in a child theme then include a file + * called loop-category.php and that will be used instead. + */ + get_template_part( 'loop', 'category' ); + ?> + +
        +
        + + + diff --git a/wp-content/themes/twentyten/comments.php b/wp-content/themes/twentyten/comments.php new file mode 100644 index 000000000..900685632 --- /dev/null +++ b/wp-content/themes/twentyten/comments.php @@ -0,0 +1,95 @@ + + +
        + +

        +
        + + + + + +

        + ' . get_the_title() . '' + ); + } else { + /* translators: %1$s: The number of comments. %2$s: The post title. */ + printf( + _n( '%1$s Response to %2$s', '%1$s Responses to %2$s', get_comments_number(), 'twentyten' ), + number_format_i18n( get_comments_number() ), + '' . get_the_title() . '' + ); + } + ?> +

        + + 1 && get_option( 'page_comments' ) ) : // Are there comments to navigate through? ?> + + + +
          + 'twentyten_comment' ) ); + ?> +
        + + 1 && get_option( 'page_comments' ) ) : // Are there comments to navigate through? ?> + + + + +

        + + + + + + +
        diff --git a/wp-content/themes/twentyten/editor-blocks.css b/wp-content/themes/twentyten/editor-blocks.css new file mode 100644 index 000000000..f4d8e328e --- /dev/null +++ b/wp-content/themes/twentyten/editor-blocks.css @@ -0,0 +1,308 @@ +/* +Theme Name: Twenty Ten +Description: Used to style blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-size: 16px; +} + +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-family: Georgia, "Bitstream Charter", serif; +} + +.edit-post-visual-editor .editor-block-list__block .mce-content-body, +.wp-block-freeform.block-library-rich-text__tinymce p, +.wp-block-freeform.block-library-rich-text__tinymce li { + line-height: 1.5; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #1a1a1a; +} + +.editor-post-title__block .editor-post-title__input { + color: #000; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; + font-size: 21px; + font-weight: bold; + line-height: 1.3em; +} + +.edit-post-visual-editor .editor-block-list__block h1 { + font-size: 32px; +} + +.edit-post-visual-editor .editor-block-list__block h2 { + font-size: 24px; +} + +.edit-post-visual-editor .editor-block-list__block h3 { + font-size: 19px; +} + +.edit-post-visual-editor .editor-block-list__block h4 { + font-size: 16px; +} + +.edit-post-visual-editor .editor-block-list__block h5 { + font-size: 13px; +} + +.edit-post-visual-editor .editor-block-list__block h6 { + font-size: 11px; +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +.wp-block { + max-width: 670px; /* 640px + 30px to account for padding */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #0066cc; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol.editor-rich-text__tinymce { + margin: 0 0 18px 1.5em; + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: square; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; + margin-left: 1.5em; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li, +.editor-block-list__block ul:not(.wp-block-gallery) li, +.edit-post-visual-editor ol li, +.editor-block-list__block ol li, +.block-library-list li { + margin-bottom: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.25em; + padding: 0; +} + +/* Caption styles */ + +[class^="wp-block-"] figcaption { + color: #777; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +/* Code styles */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/* Quote styles */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + padding: 0 3em; +} + +/* Table styles */ + +.editor-block-list__block tr th, +.editor-block-list__block tr th a { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +/* Definition List styles */ + +.editor-block-list__block dd { + margin-left: 0; + margin-right: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image { + margin-bottom: 20px; +} + +.wp-block-image figcaption { + display: block; + margin: -7px 0 0; + padding: 9px 9px 1.0em; + text-align: center; +} + +/* Gallery */ + +.editor-block-list__block .wp-block-gallery { + margin: 0 0 24px; +} + +/* Quote */ + +.wp-block-quote { + border: 0; + padding: 0 3em; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 0 3em; +} + +.wp-block-quote .wp-block-quote__citation { + font-size: 16px; + font-weight: 600; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + font-size: 18px; +} + +/* Cover */ + +.wp-block-cover-image-text, +.wp-block-cover-text { + font-size: 32px; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink .editor-rich-text__tinymce { + color: #0066cc; + font-size: 16px; + text-decoration: underline; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote blockquote > .editor-rich-text p { + font-size: 1.5em; +} + +.wp-block-pullquote .wp-block-pullquote__citation { + color: inherit; + font-size: inherit; + font-weight: 600; + text-transform: none; +} + +/* Table */ + +.wp-block-table tr:nth-child(odd) td { + background: #f2f7fc; +} + +.wp-block-table th .wp-block-table__cell-content { + color: #777; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +.editor-block-list__block .wp-block-table tr td { + padding-bottom: 0; + padding-top: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments { + margin: 0 0 24px; +} + +.rtl .edit-post-visual-editor .wp-block-latest-comments { + margin-right: 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 1em; +} diff --git a/wp-content/themes/twentyten/editor-style-rtl.css b/wp-content/themes/twentyten/editor-style-rtl.css new file mode 100644 index 000000000..5868d3c18 --- /dev/null +++ b/wp-content/themes/twentyten/editor-style-rtl.css @@ -0,0 +1,29 @@ +/* +Theme Name: Twenty Ten +*/ +/* +Used to style the TinyMCE editor. +*/ +html .mceContentBody{ + direction: rtl; + unicode-bidi: embed; + float: right; + width: 640px; +} +* { + font-family: Arial, Tahoma, sans-serif; +} +/* Text elements */ +ul, ol { + margin: 0 -18px 18px 0; +} +dd { + margin-right: 0; +} +blockquote { + font-style: normal; +} +table { + text-align: right; + margin: 0 0 24px -1px; +} diff --git a/wp-content/themes/twentyten/editor-style.css b/wp-content/themes/twentyten/editor-style.css new file mode 100644 index 000000000..c397b116c --- /dev/null +++ b/wp-content/themes/twentyten/editor-style.css @@ -0,0 +1,297 @@ +/* +Theme Name: Twenty Ten +Description: Used to style the TinyMCE editor. +*/ +html .mceContentBody { + max-width: 640px; +} +* { + color: #444; + font-family: Georgia, "Bitstream Charter", serif; + line-height: 1.5; +} +p, +dl, +td, +th, +ul, +ol, +blockquote { + font-size: 16px; +} +tr th, +thead th, +label, +tr th, +thead th { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} +pre { + font-family: "Courier 10 Pitch", Courier, monospace; +} +code, code var { + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +} +body, input, textarea { + font-size: 12px; + line-height: 18px; +} +hr { + background-color: #e7e7e7; + border: 0; + clear: both; + height: 1px; + margin-bottom: 18px; +} +/* Text elements */ +p { + margin-bottom: 18px; +} + +ul, +ol { + margin: 0 0 18px 1.5em; + padding: 0; +} + +ul { + list-style: square; +} +ol { + list-style: decimal; +} +ol ol { + list-style: upper-alpha; +} +ol ol ol { + list-style: lower-roman; +} +ol ol ol ol { + list-style: lower-alpha; +} +ul ul, +ol ol, +ul ol, +ol ul { + margin-bottom: 0; +} +dl { + margin: 0 0 24px 0; +} +dt { + font-weight: bold; +} +dd { + margin-bottom: 18px; +} +strong { + color: #000; + font-weight: bold; +} +cite, +em, +i { + border: none; + font-style: italic; +} +big { + font-size: 131.25%; +} +ins { + background: #ffc; + border: none; + color: #333; +} +del { + text-decoration: line-through; + color: #555; +} +blockquote { + font-style: italic; + padding: 0 3em; +} +blockquote cite, +blockquote em, +blockquote i { + font-style: normal; +} +pre { + background: #f7f7f7; + color: #222; + line-height: 18px; + margin-bottom: 18px; + padding: 1.5em; +} +abbr, +acronym { + border-bottom: 1px dotted #666; + cursor: help; +} +ins { + text-decoration: none; +} +sup, +sub { + font-size: 10px; + height: 0; + line-height: 1; + position: relative; + vertical-align: baseline; +} +sup { + bottom: 1ex; +} +sub { + top: .5ex; +} +a:link { + color: #06c; +} +a:visited { + color: #743399; +} +a:active, +a:hover { + color: #ff4b33; +} +p, +ul, +ol, +dd, +pre, +hr { + margin-bottom: 24px; +} +ul ul, +ol ol, +ul ol, +ol ul { + margin-bottom: 0; +} +pre, +kbd, +tt, +var { + font-size: 15px; + line-height: 21px; +} +code { + font-size: 13px; +} +strong, +b, +dt, +th { + color: #000; +} +h1, +h2, +h3, +h4, +h5, +h6 { + color: #000; + font-weight: normal; + line-height: 1.5em; + margin: 0 0 20px 0; +} +h1 { + font-size: 2.4em; +} +h2 { + font-size: 1.8em; +} +h3 { + font-size: 1.4em; +} +h4 { + font-size: 1.2em; +} +h5 { + font-size: 1em; +} +h6 { + font-size: 0.9em; +} +table { + border: 1px solid #e7e7e7 !important; + border-collapse: collapse; + border-spacing: 0; + margin: 0 -1px 24px 0; + text-align: left; + width: 100%; +} +tr th, +thead th { + border: none !important; + color: #888; + font-size: 12px; + font-weight: bold; + line-height: 18px; + padding: 9px 24px; +} +tr td { + border: none !important; + border-top: 1px solid #e7e7e7 !important; + padding: 6px 24px; +} +img { + margin: 0; +} +img.size-auto, +img.size-large, +img.size-full, +img.size-medium { + max-width: 100%; + height: auto; +} +.alignleft, +img.alignleft { + display: inline; + float: left; + margin-right: 24px; + margin-top: 4px; +} +.alignright, +img.alignright { + display: inline; + float: right; + margin-left: 24px; + margin-top: 4px; +} +.aligncenter, +img.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} +img.alignleft, +img.alignright, +img.aligncenter { + margin-bottom: 12px; +} +.wp-caption { + background: #f1f1f1; + border: none; + -khtml-border-radius: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + color: #888; + font-size: 12px; + line-height: 18px; + margin-bottom: 20px; + max-width: 632px !important; /* prevent too-wide images from breaking layout */ + padding: 4px; + text-align: center; +} +.wp-caption img { + margin: 5px; +} +.wp-caption p.wp-caption-text { + margin: 0 0 4px; +} +.wp-smiley { + margin: 0; +} diff --git a/wp-content/themes/twentyten/footer.php b/wp-content/themes/twentyten/footer.php new file mode 100644 index 000000000..4763e99ab --- /dev/null +++ b/wp-content/themes/twentyten/footer.php @@ -0,0 +1,66 @@ + + + + + + + + + * tag of your theme, or you will break many plugins, which + * generally use this hook to reference JavaScript files. + */ + + wp_footer(); +?> + + diff --git a/wp-content/themes/twentyten/functions.php b/wp-content/themes/twentyten/functions.php new file mode 100644 index 000000000..2de25d382 --- /dev/null +++ b/wp-content/themes/twentyten/functions.php @@ -0,0 +1,737 @@ + + * add_action( 'after_setup_theme', 'my_child_theme_setup' ); + * function my_child_theme_setup() { + * // We are providing our own filter for excerpt_length (or using the unfiltered value) + * remove_filter( 'excerpt_length', 'twentyten_excerpt_length' ); + * ... + * } + * + * + * For more information on hooks, actions, and filters, see https://codex.wordpress.org/Plugin_API. + * + * @package WordPress + * @subpackage Twenty_Ten + * @since Twenty Ten 1.0 + */ + +/* + * Set the content width based on the theme's design and stylesheet. + * + * Used to set the width of images and content. Should be equal to the width the theme + * is designed for, generally via the style.css stylesheet. + */ +if ( ! isset( $content_width ) ) { + $content_width = 640; +} + +/* Tell WordPress to run twentyten_setup() when the 'after_setup_theme' hook is run. */ +add_action( 'after_setup_theme', 'twentyten_setup' ); + +if ( ! function_exists( 'twentyten_setup' ) ) : + /** + * Set up theme defaults and registers support for various WordPress features. + * + * Note that this function is hooked into the after_setup_theme hook, which runs + * before the init hook. The init hook is too late for some features, such as indicating + * support post thumbnails. + * + * To override twentyten_setup() in a child theme, add your own twentyten_setup to your child theme's + * functions.php file. + * + * @uses add_theme_support() To add support for post thumbnails, custom headers and backgrounds, and automatic feed links. + * @uses register_nav_menus() To add support for navigation menus. + * @uses add_editor_style() To style the visual editor. + * @uses load_theme_textdomain() For translation/localization support. + * @uses register_default_headers() To register the default custom header images provided with the theme. + * @uses set_post_thumbnail_size() To set a custom post thumbnail size. + * + * @since Twenty Ten 1.0 + */ + function twentyten_setup() { + + // This theme styles the visual editor with editor-style.css to match the theme style. + add_editor_style(); + + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( + 'editor-color-palette', + array( + array( + 'name' => __( 'Blue', 'twentyten' ), + 'slug' => 'blue', + 'color' => '#0066cc', + ), + array( + 'name' => __( 'Black', 'twentyten' ), + 'slug' => 'black', + 'color' => '#000', + ), + array( + 'name' => __( 'Medium Gray', 'twentyten' ), + 'slug' => 'medium-gray', + 'color' => '#666', + ), + array( + 'name' => __( 'Light Gray', 'twentyten' ), + 'slug' => 'light-gray', + 'color' => '#f1f1f1', + ), + array( + 'name' => __( 'White', 'twentyten' ), + 'slug' => 'white', + 'color' => '#fff', + ), + ) + ); + + // Post Format support. You can also use the legacy "gallery" or "asides" (note the plural) categories. + add_theme_support( 'post-formats', array( 'aside', 'gallery' ) ); + + // This theme uses post thumbnails + add_theme_support( 'post-thumbnails' ); + + // Add default posts and comments RSS feed links to head + add_theme_support( 'automatic-feed-links' ); + + /* + * Make theme available for translation. + * Translations can be filed in the /languages/ directory + */ + load_theme_textdomain( 'twentyten', get_template_directory() . '/languages' ); + + // This theme uses wp_nav_menu() in one location. + register_nav_menus( + array( + 'primary' => __( 'Primary Navigation', 'twentyten' ), + ) + ); + + // This theme allows users to set a custom background. + add_theme_support( + 'custom-background', + array( + // Let WordPress know what our default background color is. + 'default-color' => 'f1f1f1', + ) + ); + + // The custom header business starts here. + + $custom_header_support = array( + /* + * The default image to use. + * The %s is a placeholder for the theme template directory URI. + */ + 'default-image' => '%s/images/headers/path.jpg', + // The height and width of our custom header. + /** + * Filter the Twenty Ten default header image width. + * + * @since Twenty Ten 1.0 + * + * @param int The default header image width in pixels. Default 940. + */ + 'width' => apply_filters( 'twentyten_header_image_width', 940 ), + /** + * Filter the Twenty Ten defaul header image height. + * + * @since Twenty Ten 1.0 + * + * @param int The default header image height in pixels. Default 198. + */ + 'height' => apply_filters( 'twentyten_header_image_height', 198 ), + // Support flexible heights. + 'flex-height' => true, + // Don't support text inside the header image. + 'header-text' => false, + // Callback for styling the header preview in the admin. + 'admin-head-callback' => 'twentyten_admin_header_style', + ); + + add_theme_support( 'custom-header', $custom_header_support ); + + if ( ! function_exists( 'get_custom_header' ) ) { + // This is all for compatibility with versions of WordPress prior to 3.4. + define( 'HEADER_TEXTCOLOR', '' ); + define( 'NO_HEADER_TEXT', true ); + define( 'HEADER_IMAGE', $custom_header_support['default-image'] ); + define( 'HEADER_IMAGE_WIDTH', $custom_header_support['width'] ); + define( 'HEADER_IMAGE_HEIGHT', $custom_header_support['height'] ); + add_custom_image_header( '', $custom_header_support['admin-head-callback'] ); + add_custom_background(); + } + + /* + * We'll be using post thumbnails for custom header images on posts and pages. + * We want them to be 940 pixels wide by 198 pixels tall. + * Larger images will be auto-cropped to fit, smaller ones will be ignored. See header.php. + */ + set_post_thumbnail_size( $custom_header_support['width'], $custom_header_support['height'], true ); + + // ... and thus ends the custom header business. + + // Default custom headers packaged with the theme. %s is a placeholder for the theme template directory URI. + register_default_headers( + array( + 'berries' => array( + 'url' => '%s/images/headers/berries.jpg', + 'thumbnail_url' => '%s/images/headers/berries-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Berries', 'twentyten' ), + ), + 'cherryblossom' => array( + 'url' => '%s/images/headers/cherryblossoms.jpg', + 'thumbnail_url' => '%s/images/headers/cherryblossoms-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Cherry Blossoms', 'twentyten' ), + ), + 'concave' => array( + 'url' => '%s/images/headers/concave.jpg', + 'thumbnail_url' => '%s/images/headers/concave-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Concave', 'twentyten' ), + ), + 'fern' => array( + 'url' => '%s/images/headers/fern.jpg', + 'thumbnail_url' => '%s/images/headers/fern-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Fern', 'twentyten' ), + ), + 'forestfloor' => array( + 'url' => '%s/images/headers/forestfloor.jpg', + 'thumbnail_url' => '%s/images/headers/forestfloor-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Forest Floor', 'twentyten' ), + ), + 'inkwell' => array( + 'url' => '%s/images/headers/inkwell.jpg', + 'thumbnail_url' => '%s/images/headers/inkwell-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Inkwell', 'twentyten' ), + ), + 'path' => array( + 'url' => '%s/images/headers/path.jpg', + 'thumbnail_url' => '%s/images/headers/path-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Path', 'twentyten' ), + ), + 'sunset' => array( + 'url' => '%s/images/headers/sunset.jpg', + 'thumbnail_url' => '%s/images/headers/sunset-thumbnail.jpg', + /* translators: header image description */ + 'description' => __( 'Sunset', 'twentyten' ), + ), + ) + ); + } +endif; + +if ( ! function_exists( 'twentyten_admin_header_style' ) ) : + /** + * Style the header image displayed on the Appearance > Header admin panel. + * + * Referenced via add_custom_image_header() in twentyten_setup(). + * + * @since Twenty Ten 1.0 + */ + function twentyten_admin_header_style() { + ?> + + ' . __( 'Continue reading ', 'twentyten' ) . ''; + } +endif; + +/** + * Replace "[...]" with an ellipsis and twentyten_continue_reading_link(). + * + * "[...]" is appended to automatically generated excerpts. + * + * To override this in a child theme, remove the filter and add your own + * function tied to the excerpt_more filter hook. + * + * @since Twenty Ten 1.0 + * + * @param string $more The Read More text. + * @return string An ellipsis. + */ +function twentyten_auto_excerpt_more( $more ) { + if ( ! is_admin() ) { + return ' …' . twentyten_continue_reading_link(); + } + return $more; +} +add_filter( 'excerpt_more', 'twentyten_auto_excerpt_more' ); + +/** + * Add a pretty "Continue Reading" link to custom post excerpts. + * + * To override this link in a child theme, remove the filter and add your own + * function tied to the get_the_excerpt filter hook. + * + * @since Twenty Ten 1.0 + * + * @param string $output The "Coninue Reading" link. + * @return string Excerpt with a pretty "Continue Reading" link. + */ +function twentyten_custom_excerpt_more( $output ) { + if ( has_excerpt() && ! is_attachment() && ! is_admin() ) { + $output .= twentyten_continue_reading_link(); + } + return $output; +} +add_filter( 'get_the_excerpt', 'twentyten_custom_excerpt_more' ); + +/** + * Remove inline styles printed when the gallery shortcode is used. + * + * Galleries are styled by the theme in Twenty Ten's style.css. This is just + * a simple filter call that tells WordPress to not use the default styles. + * + * @since Twenty Ten 1.2 + */ +add_filter( 'use_default_gallery_style', '__return_false' ); + +/** + * Deprecated way to remove inline styles printed when the gallery shortcode is used. + * + * This function is no longer needed or used. Use the use_default_gallery_style + * filter instead, as seen above. + * + * @since Twenty Ten 1.0 + * @deprecated Deprecated in Twenty Ten 1.2 for WordPress 3.1 + * + * @return string The gallery style filter, with the styles themselves removed. + */ +function twentyten_remove_gallery_css( $css ) { + return preg_replace( "##s", '', $css ); +} +// Backwards compatibility with WordPress 3.0. +if ( version_compare( $GLOBALS['wp_version'], '3.1', '<' ) ) { + add_filter( 'gallery_style', 'twentyten_remove_gallery_css' ); +} + +if ( ! function_exists( 'twentyten_comment' ) ) : + /** + * Template for comments and pingbacks. + * + * To override this walker in a child theme without modifying the comments template + * simply create your own twentyten_comment(), and that function will be used instead. + * + * Used as a callback by wp_list_comments() for displaying the comments. + * + * @since Twenty Ten 1.0 + * + * @param object $comment The comment object. + * @param array $args An array of arguments. @see get_comment_reply_link() + * @param int $depth The depth of the comment. + */ + function twentyten_comment( $comment, $args, $depth ) { + $GLOBALS['comment'] = $comment; + switch ( $comment->comment_type ) : + case '': + ?> +
      • id="li-comment-"> +
        +
        + + says:', 'twentyten' ), sprintf( '%s', get_comment_author_link() ) ); ?> +
        + comment_approved == '0' ) : ?> + +
        + + + + +
        + +
        + $depth, + 'max_depth' => $args['max_depth'], + ) + ) + ); + ?> +
        +
        + + +
      • +

        + __( 'Primary Widget Area', 'twentyten' ), + 'id' => 'primary-widget-area', + 'description' => __( 'Add widgets here to appear in your sidebar.', 'twentyten' ), + 'before_widget' => '
      • ', + 'after_widget' => '
      • ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + // Area 2, located below the Primary Widget Area in the sidebar. Empty by default. + register_sidebar( + array( + 'name' => __( 'Secondary Widget Area', 'twentyten' ), + 'id' => 'secondary-widget-area', + 'description' => __( 'An optional secondary widget area, displays below the primary widget area in your sidebar.', 'twentyten' ), + 'before_widget' => '
      • ', + 'after_widget' => '
      • ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + // Area 3, located in the footer. Empty by default. + register_sidebar( + array( + 'name' => __( 'First Footer Widget Area', 'twentyten' ), + 'id' => 'first-footer-widget-area', + 'description' => __( 'An optional widget area for your site footer.', 'twentyten' ), + 'before_widget' => '
      • ', + 'after_widget' => '
      • ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + // Area 4, located in the footer. Empty by default. + register_sidebar( + array( + 'name' => __( 'Second Footer Widget Area', 'twentyten' ), + 'id' => 'second-footer-widget-area', + 'description' => __( 'An optional widget area for your site footer.', 'twentyten' ), + 'before_widget' => '
      • ', + 'after_widget' => '
      • ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + // Area 5, located in the footer. Empty by default. + register_sidebar( + array( + 'name' => __( 'Third Footer Widget Area', 'twentyten' ), + 'id' => 'third-footer-widget-area', + 'description' => __( 'An optional widget area for your site footer.', 'twentyten' ), + 'before_widget' => '
      • ', + 'after_widget' => '
      • ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + // Area 6, located in the footer. Empty by default. + register_sidebar( + array( + 'name' => __( 'Fourth Footer Widget Area', 'twentyten' ), + 'id' => 'fourth-footer-widget-area', + 'description' => __( 'An optional widget area for your site footer.', 'twentyten' ), + 'before_widget' => '
      • ', + 'after_widget' => '
      • ', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); +} +/** Register sidebars by running twentyten_widgets_init() on the widgets_init hook. */ +add_action( 'widgets_init', 'twentyten_widgets_init' ); + +/** + * Remove the default styles that are packaged with the Recent Comments widget. + * + * To override this in a child theme, remove the filter and optionally add your own + * function tied to the widgets_init action hook. + * + * This function uses a filter (show_recent_comments_widget_style) new in WordPress 3.1 + * to remove the default style. Using Twenty Ten 1.2 in WordPress 3.0 will show the styles, + * but they won't have any effect on the widget in default Twenty Ten styling. + * + * @since Twenty Ten 1.0 + */ +function twentyten_remove_recent_comments_style() { + add_filter( 'show_recent_comments_widget_style', '__return_false' ); +} +add_action( 'widgets_init', 'twentyten_remove_recent_comments_style' ); + +if ( ! function_exists( 'twentyten_posted_on' ) ) : + /** + * Print HTML with meta information for the current post-date/time and author. + * + * @since Twenty Ten 1.0 + */ + function twentyten_posted_on() { + printf( + __( 'Posted on %2$s by %3$s', 'twentyten' ), + 'meta-prep meta-prep-author', + sprintf( + '', + get_permalink(), + esc_attr( get_the_time() ), + get_the_date() + ), + sprintf( + '%3$s', + get_author_posts_url( get_the_author_meta( 'ID' ) ), + esc_attr( sprintf( __( 'View all posts by %s', 'twentyten' ), get_the_author() ) ), + get_the_author() + ) + ); + } +endif; + +if ( ! function_exists( 'twentyten_posted_in' ) ) : + /** + * Print HTML with meta information for the current post (category, tags and permalink). + * + * @since Twenty Ten 1.0 + */ + function twentyten_posted_in() { + // Retrieves tag list of current post, separated by commas. + $tag_list = get_the_tag_list( '', ', ' ); + if ( $tag_list && ! is_wp_error( $tag_list ) ) { + $posted_in = __( 'This entry was posted in %1$s and tagged %2$s. Bookmark the permalink.', 'twentyten' ); + } elseif ( is_object_in_taxonomy( get_post_type(), 'category' ) ) { + $posted_in = __( 'This entry was posted in %1$s. Bookmark the permalink.', 'twentyten' ); + } else { + $posted_in = __( 'Bookmark the permalink.', 'twentyten' ); + } + // Prints the string, replacing the placeholders. + printf( + $posted_in, + get_the_category_list( ', ' ), + $tag_list, + get_permalink(), + the_title_attribute( 'echo=0' ) + ); + } +endif; + +/** + * Retrieve the IDs for images in a gallery. + * + * @uses get_post_galleries() First, if available. Falls back to shortcode parsing, + * then as last option uses a get_posts() call. + * + * @since Twenty Ten 1.6. + * + * @return array List of image IDs from the post gallery. + */ +function twentyten_get_gallery_images() { + $images = array(); + + if ( function_exists( 'get_post_galleries' ) ) { + $galleries = get_post_galleries( get_the_ID(), false ); + if ( isset( $galleries[0]['ids'] ) ) { + $images = explode( ',', $galleries[0]['ids'] ); + } + } else { + $pattern = get_shortcode_regex(); + preg_match( "/$pattern/s", get_the_content(), $match ); + $atts = shortcode_parse_atts( $match[3] ); + if ( isset( $atts['ids'] ) ) { + $images = explode( ',', $atts['ids'] ); + } + } + + if ( ! $images ) { + $images = get_posts( + array( + 'fields' => 'ids', + 'numberposts' => 999, + 'order' => 'ASC', + 'orderby' => 'menu_order', + 'post_mime_type' => 'image', + 'post_parent' => get_the_ID(), + 'post_type' => 'attachment', + ) + ); + } + + return $images; +} + +/** + * Modifies tag cloud widget arguments to display all tags in the same font size + * and use list format for better accessibility. + * + * @since Twenty Ten 2.4 + * + * @param array $args Arguments for tag cloud widget. + * @return array The filtered arguments for tag cloud widget. + */ +function twentyten_widget_tag_cloud_args( $args ) { + $args['largest'] = 22; + $args['smallest'] = 8; + $args['unit'] = 'pt'; + $args['format'] = 'list'; + + return $args; +} +add_filter( 'widget_tag_cloud_args', 'twentyten_widget_tag_cloud_args' ); + +/** + * Enqueue scripts and styles for front end. + * + * @since Twenty Ten 2.6 + */ +function twentyten_scripts_styles() { + // Theme block stylesheet. + wp_enqueue_style( 'twentyten-block-style', get_template_directory_uri() . '/blocks.css', array(), '20181018' ); +} +add_action( 'wp_enqueue_scripts', 'twentyten_scripts_styles' ); + +/** + * Enqueue styles for the block-based editor. + * + * @since Twenty Ten 2.6 + */ +function twentyten_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyten-block-editor-style', get_template_directory_uri() . '/editor-blocks.css' ); +} +add_action( 'enqueue_block_editor_assets', 'twentyten_block_editor_styles' ); + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Ten 2.9 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Ten 2.9 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentyten/header.php b/wp-content/themes/twentyten/header.php new file mode 100644 index 000000000..23a186340 --- /dev/null +++ b/wp-content/themes/twentyten/header.php @@ -0,0 +1,125 @@ + section and everything up till
        . + * + * @package WordPress + * @subpackage Twenty_Ten + * @since Twenty Ten 1.0 + */ +?> +> + + + +<?php + /* + * Print the <title> tag based on what is being viewed. + */ + global $page, $paged; + + wp_title( '|', true, 'right' ); + + // Add the blog name. + bloginfo( 'name' ); + + // Add the blog description for the home/front page. + $site_description = get_bloginfo( 'description', 'display' ); +if ( $site_description && ( is_home() || is_front_page() ) ) { + echo " | $site_description"; +} + + // Add a page number if necessary: +if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) { + echo esc_html( ' | ' . sprintf( __( 'Page %s', 'twentyten' ), max( $paged, $page ) ) ); +} + +?> + + + + + + * tag of your theme, or you will break many plugins, which + * generally use this hook to add elements to such + * as styles, scripts, and meta tags. + */ + wp_head(); +?> + + +> + +
        + + +
        diff --git a/wp-content/themes/twentyten/images/headers/berries-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/berries-thumbnail.jpg new file mode 100644 index 000000000..9588d31b7 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/berries-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/berries.jpg b/wp-content/themes/twentyten/images/headers/berries.jpg new file mode 100644 index 000000000..b221abc4f Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/berries.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/cherryblossoms-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/cherryblossoms-thumbnail.jpg new file mode 100644 index 000000000..c74744a86 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/cherryblossoms-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/cherryblossoms.jpg b/wp-content/themes/twentyten/images/headers/cherryblossoms.jpg new file mode 100644 index 000000000..c9fffea3e Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/cherryblossoms.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/concave-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/concave-thumbnail.jpg new file mode 100644 index 000000000..ed24a365c Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/concave-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/concave.jpg b/wp-content/themes/twentyten/images/headers/concave.jpg new file mode 100644 index 000000000..0f29e4c55 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/concave.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/fern-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/fern-thumbnail.jpg new file mode 100644 index 000000000..1f78bd8a9 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/fern-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/fern.jpg b/wp-content/themes/twentyten/images/headers/fern.jpg new file mode 100644 index 000000000..bbefc6516 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/fern.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/forestfloor-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/forestfloor-thumbnail.jpg new file mode 100644 index 000000000..2c9eb7e01 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/forestfloor-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/forestfloor.jpg b/wp-content/themes/twentyten/images/headers/forestfloor.jpg new file mode 100644 index 000000000..9cf3e60b9 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/forestfloor.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/inkwell-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/inkwell-thumbnail.jpg new file mode 100644 index 000000000..3693f0a00 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/inkwell-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/inkwell.jpg b/wp-content/themes/twentyten/images/headers/inkwell.jpg new file mode 100644 index 000000000..8bd914712 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/inkwell.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/path-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/path-thumbnail.jpg new file mode 100644 index 000000000..c19bba873 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/path-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/path.jpg b/wp-content/themes/twentyten/images/headers/path.jpg new file mode 100644 index 000000000..5ebc76a92 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/path.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/sunset-thumbnail.jpg b/wp-content/themes/twentyten/images/headers/sunset-thumbnail.jpg new file mode 100644 index 000000000..34e0730c5 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/sunset-thumbnail.jpg differ diff --git a/wp-content/themes/twentyten/images/headers/sunset.jpg b/wp-content/themes/twentyten/images/headers/sunset.jpg new file mode 100644 index 000000000..98cb24544 Binary files /dev/null and b/wp-content/themes/twentyten/images/headers/sunset.jpg differ diff --git a/wp-content/themes/twentyten/images/wordpress.png b/wp-content/themes/twentyten/images/wordpress.png new file mode 100644 index 000000000..ac9d22780 Binary files /dev/null and b/wp-content/themes/twentyten/images/wordpress.png differ diff --git a/wp-content/themes/twentyten/index.php b/wp-content/themes/twentyten/index.php new file mode 100644 index 000000000..feaf44799 --- /dev/null +++ b/wp-content/themes/twentyten/index.php @@ -0,0 +1,33 @@ + + +
        +
        + + +
        +
        + + + diff --git a/wp-content/themes/twentyten/languages/twentyten.pot b/wp-content/themes/twentyten/languages/twentyten.pot new file mode 100644 index 000000000..e9fd3b8b5 --- /dev/null +++ b/wp-content/themes/twentyten/languages/twentyten.pot @@ -0,0 +1,423 @@ +# Copyright (C) 2019 the WordPress team +# This file is distributed under the GNU General Public License v2 or later. +msgid "" +msgstr "" +"Project-Id-Version: Twenty Ten 2.9\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentyten\n" +"POT-Creation-Date: 2019-05-07 18:20:08+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" + +#: 404.php:16 loop.php:33 +msgid "Not Found" +msgstr "" + +#: 404.php:18 +msgid "Apologies, but the page you requested could not be found. Perhaps searching will help." +msgstr "" + +#: archive.php:35 +msgid "Daily Archives: %s" +msgstr "" + +#: archive.php:37 +msgid "Monthly Archives: %s" +msgstr "" + +#: archive.php:37 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "" + +#: archive.php:39 +msgid "Yearly Archives: %s" +msgstr "" + +#: archive.php:39 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "" + +#: archive.php:41 +msgid "Blog Archives" +msgstr "" + +#: author.php:29 +msgid "Author Archives: %s" +msgstr "" + +#: author.php:49 loop-single.php:57 +msgid "About %s" +msgstr "" + +#: category.php:17 +msgid "Category Archives: %s" +msgstr "" + +#: comments.php:18 +msgid "This post is password protected. Enter the password to view any comments." +msgstr "" + +#. translators: %s: The post title. + +#: comments.php:40 +msgid "One Response to %s" +msgstr "" + +#. translators: %1$s: The number of comments. %2$s: The post title. + +#: comments.php:46 +msgid "%1$s Response to %2$s" +msgid_plural "%1$s Responses to %2$s" +msgstr[0] "" +msgstr[1] "" + +#: comments.php:56 comments.php:76 +msgid " Older Comments" +msgstr "" + +#: comments.php:57 comments.php:77 +msgid "Newer Comments " +msgstr "" + +#: comments.php:88 +msgid "Comments are closed." +msgstr "" + +#: footer.php:46 +msgid "https://wordpress.org/" +msgstr "" + +#: footer.php:46 +msgid "Semantic Personal Publishing Platform" +msgstr "" + +#: footer.php:47 +msgid "Proudly powered by %s." +msgstr "" + +#: functions.php:92 +msgid "Blue" +msgstr "" + +#: functions.php:97 +msgid "Black" +msgstr "" + +#: functions.php:102 +msgid "Medium Gray" +msgstr "" + +#: functions.php:107 +msgid "Light Gray" +msgstr "" + +#: functions.php:112 +msgid "White" +msgstr "" + +#: functions.php:137 +msgid "Primary Navigation" +msgstr "" + +#. translators: header image description + +#: functions.php:212 +msgid "Berries" +msgstr "" + +#. translators: header image description + +#: functions.php:218 +msgid "Cherry Blossoms" +msgstr "" + +#. translators: header image description + +#: functions.php:224 +msgid "Concave" +msgstr "" + +#. translators: header image description + +#: functions.php:230 +msgid "Fern" +msgstr "" + +#. translators: header image description + +#: functions.php:236 +msgid "Forest Floor" +msgstr "" + +#. translators: header image description + +#: functions.php:242 +msgid "Inkwell" +msgstr "" + +#. translators: header image description + +#: functions.php:248 +msgid "Path" +msgstr "" + +#. translators: header image description + +#: functions.php:254 +msgid "Sunset" +msgstr "" + +#: functions.php:329 loop-attachment.php:151 loop.php:124 loop.php:152 +msgid "Continue reading " +msgstr "" + +#: functions.php:426 +msgid "%s says:" +msgstr "" + +#: functions.php:429 +msgid "Your comment is awaiting moderation." +msgstr "" + +#. translators: 1: date, 2: time + +#: functions.php:436 +msgid "%1$s at %2$s" +msgstr "" + +#: functions.php:440 functions.php:467 +msgid "(Edit)" +msgstr "" + +#: functions.php:467 +msgid "Pingback:" +msgstr "" + +#: functions.php:488 +msgid "Primary Widget Area" +msgstr "" + +#: functions.php:490 +msgid "Add widgets here to appear in your sidebar." +msgstr "" + +#: functions.php:501 +msgid "Secondary Widget Area" +msgstr "" + +#: functions.php:503 +msgid "An optional secondary widget area, displays below the primary widget area in your sidebar." +msgstr "" + +#: functions.php:514 +msgid "First Footer Widget Area" +msgstr "" + +#: functions.php:516 functions.php:529 functions.php:542 functions.php:555 +msgid "An optional widget area for your site footer." +msgstr "" + +#: functions.php:527 +msgid "Second Footer Widget Area" +msgstr "" + +#: functions.php:540 +msgid "Third Footer Widget Area" +msgstr "" + +#: functions.php:553 +msgid "Fourth Footer Widget Area" +msgstr "" + +#: functions.php:591 +msgid "Posted on %2$s by %3$s" +msgstr "" + +#: functions.php:602 loop-attachment.php:44 +msgid "View all posts by %s" +msgstr "" + +#: functions.php:619 +msgid "This entry was posted in %1$s and tagged %2$s. Bookmark the permalink." +msgstr "" + +#: functions.php:621 +msgid "This entry was posted in %1$s. Bookmark the permalink." +msgstr "" + +#: functions.php:623 +msgid "Bookmark the permalink." +msgstr "" + +#: header.php:35 +msgid "Page %s" +msgstr "" + +#: header.php:111 +msgid "Skip to content" +msgstr "" + +#: loop-attachment.php:25 +msgid "Return to %s" +msgstr "" + +#. translators: %s - title of parent post + +#: loop-attachment.php:28 +msgid " %s" +msgstr "" + +#: loop-attachment.php:39 +msgid "By %2$s" +msgstr "" + +#: loop-attachment.php:52 +msgid "Published %2$s" +msgstr "" + +#: loop-attachment.php:64 +msgid "Full size is %s pixels" +msgstr "" + +#: loop-attachment.php:68 +msgid "Link to full-size image" +msgstr "" + +#: loop-attachment.php:75 loop-attachment.php:165 loop-page.php:41 +#: loop-single.php:70 loop.php:109 loop.php:132 loop.php:181 +msgid "Edit" +msgstr "" + +#: loop-attachment.php:155 loop-page.php:36 loop-single.php:41 loop.php:156 +msgid "Pages:" +msgstr "" + +#: loop-single.php:25 loop-single.php:75 +msgctxt "Previous post link" +msgid "←" +msgstr "" + +#: loop-single.php:26 loop-single.php:76 +msgctxt "Next post link" +msgid "→" +msgstr "" + +#: loop-single.php:61 +msgid "View all posts by %s " +msgstr "" + +#: loop.php:25 loop.php:194 +msgid " Older posts" +msgstr "" + +#: loop.php:26 loop.php:195 +msgid "Newer posts " +msgstr "" + +#: loop.php:35 +msgid "Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post." +msgstr "" + +#: loop.php:65 loop.php:104 +msgctxt "gallery category slug" +msgid "gallery" +msgstr "" + +#: loop.php:89 +msgid "This gallery contains %2$s photo." +msgid_plural "This gallery contains %2$s photos." +msgstr[0] "" +msgstr[1] "" + +#: loop.php:90 +msgid "Permalink to %s" +msgstr "" + +#: loop.php:102 +msgid "View Galleries" +msgstr "" + +#: loop.php:102 loop.php:105 +msgid "More Galleries" +msgstr "" + +#: loop.php:105 +msgid "View posts in the Gallery category" +msgstr "" + +#: loop.php:108 loop.php:131 loop.php:180 +msgid "Leave a comment" +msgstr "" + +#: loop.php:108 loop.php:131 loop.php:180 +msgid "1 Comment" +msgstr "" + +#: loop.php:108 loop.php:131 loop.php:180 +msgid "% Comments" +msgstr "" + +#: loop.php:115 +msgctxt "asides category slug" +msgid "asides" +msgstr "" + +#: loop.php:167 +msgid "Posted in %2$s" +msgstr "" + +#: loop.php:176 +msgid "Tagged %2$s" +msgstr "" + +#: search.php:16 +msgid "Search Results for: %s" +msgstr "" + +#: search.php:27 +msgid "Nothing Found" +msgstr "" + +#: search.php:29 +msgid "Sorry, but nothing matched your search criteria. Please try again with some different keywords." +msgstr "" + +#: sidebar.php:29 +msgid "Archives" +msgstr "" + +#: sidebar.php:36 +msgid "Meta" +msgstr "" + +#: tag.php:17 +msgid "Tag Archives: %s" +msgstr "" +#. Theme Name of the plugin/theme +msgid "Twenty Ten" +msgstr "" + +#. Theme URI of the plugin/theme +msgid "https://wordpress.org/themes/twentyten/" +msgstr "" + +#. Description of the plugin/theme +msgid "The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the \"Asides\" and \"Gallery\" categories, and has an optional one-column page template that removes the sidebar." +msgstr "" + +#. Author of the plugin/theme +msgid "the WordPress team" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://wordpress.org/" +msgstr "" + +#. Template Name of the plugin/theme +msgid "One column, no sidebar" +msgstr "" diff --git a/wp-content/themes/twentyten/license.txt b/wp-content/themes/twentyten/license.txt new file mode 100644 index 000000000..5fbe4a70a --- /dev/null +++ b/wp-content/themes/twentyten/license.txt @@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + diff --git a/wp-content/themes/twentyten/loop-attachment.php b/wp-content/themes/twentyten/loop-attachment.php new file mode 100644 index 000000000..72ae51107 --- /dev/null +++ b/wp-content/themes/twentyten/loop-attachment.php @@ -0,0 +1,172 @@ + + + + + post_parent ) ) : ?> +

        + ← %s', 'twentyten' ), get_the_title( $post->post_parent ) ); + ?> +

        + + +
        > +

        + + + +
        +
        + $post->post_parent, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'order' => 'ASC', + 'orderby' => 'menu_order ID', + ) + ) + ); + foreach ( $attachments as $k => $attachment ) { + if ( $attachment->ID == $post->ID ) { + break; + } + } + + // If there is more than 1 image attachment in a gallery + if ( count( $attachments ) > 1 ) { + $k++; + if ( isset( $attachments[ $k ] ) ) { + // get the URL of the next image attachment + $next_attachment_url = get_attachment_link( $attachments[ $k ]->ID ); + } else { // or get the URL of the first image attachment + $next_attachment_url = get_attachment_link( $attachments[0]->ID ); + } + } else { + // or, if there's only 1 image attachment, get the URL of the image + $next_attachment_url = wp_get_attachment_url(); + } + ?> +

        + ID, array( $attachment_width, $attachment_height ) ); // filterable image width with, essentially, no limit for image height. + ?> +

        + + + + + +
        +
        + post_excerpt ) ) { + the_excerpt();} + ?> +
        + + →', 'twentyten' ) ); ?> + '', + ) + ); + ?> + +
        + +
        + + ', '' ); ?> +
        +
        + + + + diff --git a/wp-content/themes/twentyten/loop-page.php b/wp-content/themes/twentyten/loop-page.php new file mode 100644 index 000000000..988512baa --- /dev/null +++ b/wp-content/themes/twentyten/loop-page.php @@ -0,0 +1,48 @@ + + + + +
        > + +

        + +

        + + +
        + + '', + ) + ); + ?> + ', '' ); ?> +
        +
        + + + + diff --git a/wp-content/themes/twentyten/loop-single.php b/wp-content/themes/twentyten/loop-single.php new file mode 100644 index 000000000..cff6a0bd6 --- /dev/null +++ b/wp-content/themes/twentyten/loop-single.php @@ -0,0 +1,82 @@ + + + + + + +
        > +

        + + + +
        + + '', + ) + ); + ?> +
        + + +
        +
        + +
        + +
        + + +
        + + ', '' ); ?> +
        +
        + + + + + + diff --git a/wp-content/themes/twentyten/loop.php b/wp-content/themes/twentyten/loop.php new file mode 100644 index 000000000..8b205a804 --- /dev/null +++ b/wp-content/themes/twentyten/loop.php @@ -0,0 +1,197 @@ +get_template_part( 'loop', 'index' ); + * + * @package WordPress + * @subpackage Twenty_Ten + * @since Twenty Ten 1.0 + */ +?> + + +max_num_pages > 1 ) : ?> + + + + + +
        +

        +
        +

        + +
        +
        + + + + + + + + ID ) ) || in_category( _x( 'gallery', 'gallery category slug', 'twentyten' ) ) ) : ?> +
        > +

        + + + +
        + + + + + +

        + %2$s photo.', 'This gallery contains %2$s photos.', $total_images, 'twentyten' ), + 'href="' . esc_url( get_permalink() ) . '" title="' . esc_attr( sprintf( __( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ) ) . '" rel="bookmark"', + number_format_i18n( $total_images ) + ); + ?> +

        + + + +
        + +
        + ID ) ) : ?> + + | + term_id ) ) : ?> + + | + + + | ', '' ); ?> +
        +
        + + + + ID ) ) || in_category( _x( 'asides', 'asides category slug', 'twentyten' ) ) ) : ?> +
        > + + +
        + +
        + +
        + →', 'twentyten' ) ); ?> +
        + + +
        + + | + + | ', '' ); ?> +
        +
        + + + + +
        > +

        + + + + +
        + +
        + +
        + →', 'twentyten' ) ); ?> + '', + ) + ); + ?> +
        + + +
        + + + Posted in %2$s', 'twentyten' ), 'entry-utility-prep entry-utility-prep-cat-links', get_the_category_list( ', ' ) ); ?> + + | + + + + Tagged %2$s', 'twentyten' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list ); ?> + + | + + + | ', '' ); ?> +
        +
        + + + + + + + + +max_num_pages > 1 ) : ?> + + diff --git a/wp-content/themes/twentyten/onecolumn-page.php b/wp-content/themes/twentyten/onecolumn-page.php new file mode 100644 index 000000000..457e04bbd --- /dev/null +++ b/wp-content/themes/twentyten/onecolumn-page.php @@ -0,0 +1,32 @@ + + +
        +
        + + + +
        +
        + + diff --git a/wp-content/themes/twentyten/page.php b/wp-content/themes/twentyten/page.php new file mode 100644 index 000000000..70029db04 --- /dev/null +++ b/wp-content/themes/twentyten/page.php @@ -0,0 +1,33 @@ + + +
        +
        + + + +
        +
        + + + diff --git a/wp-content/themes/twentyten/readme.txt b/wp-content/themes/twentyten/readme.txt new file mode 100644 index 000000000..75dfde80c --- /dev/null +++ b/wp-content/themes/twentyten/readme.txt @@ -0,0 +1,139 @@ +=== Twenty Ten === +Contributors: wordpressdotorg +Requires at least: WordPress 3.0 +Tested up to: WordPress 5.0 +Requires PHP: 5.2.4 +Stable tag: 2.9 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: blog, two-columns, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu, flexible-header, featured-images, footer-widgets, featured-image-header + +== Description == +The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar. + +For more information about Twenty Ten theme please go to https://codex.wordpress.org/Twenty_Ten. + +== Installation == + +1. In your admin panel, go to Appearance -> Themes and click the 'Add New' button. +2. Type in Twenty Ten in the search form and press the 'Enter' key in your keyboard. +3. Click on the 'Activate' button to use your new theme right away. +4. Go to https://codex.wordpress.org/Twenty_Ten for a guide to customize this theme. +5. Navigate to Appearance > Customize in your admin panel. + +== Copyright == + +Twenty Ten WordPress Theme, Copyright 2010-2018 WordPress.org & Automattic.com +Twenty Ten is Distributed under the terms of the GNU GPL + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +== Changelog == + += 2.9 = +* Released: May 7, 2019 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.9 + += 2.8 = +* Released: February 21, 2019 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.8 + += 2.7 = +* Released: December 19, 2018 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.7 + += 2.6 = +* Released: December 6, 2018 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.6 + += 2.5 = +* Released: May 17, 2018 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.5 + += 2.4 = +* Released: November 14, 2017 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.4 + += 2.3 = +* Released: June 8, 2017 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.3 + += 2.2 = +* Released: August 15, 2016 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.2 + += 2.1 = +* Released: December 8, 2015 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.1 + += 2.0 = +* Released: August 18, 2015 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.0 + += 1.9 = +* Released: April 23, 2015 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.9 + += 1.8 = +* Released: December 18, 2014 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.8 + += 1.7 = +* Released: September 4, 2014 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.7 + += 1.6 = +* Released: August 1, 2013 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.6 + += 1.5 = +* Released: December 11, 2012 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.5 + += 1.4 = +* Released: June 13, 2012 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.4 + += 1.3 = +* Released: December 12, 2011 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.3 + += 1.2 = +* Released: February 23, 2011 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.2 + += 1.1 = +* Released: July 29, 2010 + +https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_1.1 + += 1.0 = +* Released: June 17, 2010 + +Initial release. diff --git a/wp-content/themes/twentyten/rtl.css b/wp-content/themes/twentyten/rtl.css new file mode 100644 index 000000000..f74839921 --- /dev/null +++ b/wp-content/themes/twentyten/rtl.css @@ -0,0 +1,290 @@ +/* +Theme Name: Twenty Ten +*/ + + +/* +RTL Basics +*/ + + +body { + direction:rtl; + unicode-bidi:embed; +} + + +/* +LAYOUT: Two-Column (Right) +DESCRIPTION: Two-column fixed layout with one sidebar right of content +*/ + +#container { + float: right; + margin: 0 0 0 -240px; +} +#content { + margin: 0 20px 36px 280px; +} +#primary, +#secondary { + float: left; +} +#secondary { + clear: left; +} + + +/* =Fonts +-------------------------------------------------------------- */ +body, +input, +textarea, +.page-title span, +.pingback a.url, +h3#comments-title, +h3#reply-title, +#access .menu, +#access div.menu ul, +#cancel-comment-reply-link, +.form-allowed-tags, +#site-info, +#site-title, +#wp-calendar, +.comment-meta, +.comment-body tr th, +.comment-body thead th, +.entry-content label, +.entry-content tr th, +.entry-content thead th, +.entry-meta, +.entry-title, +.entry-utility, +#respond label, +.navigation, +.page-title, +.pingback p, +.reply, +.widget-title, +input[type="submit"] { + font-family: Arial, Tahoma, sans-serif; +} + +/* =Structure +-------------------------------------------------------------- */ + +/* The main theme structure */ +#footer-widget-area .widget-area { + float: right; + margin-left: 20px; + margin-right: 0; +} +#footer-widget-area #fourth { + margin-left: 0; +} +#site-info { + float: right; +} +#site-generator { + float: left; +} + + +/* =Global Elements +-------------------------------------------------------------- */ + +/* Text elements */ +ul, ol { + margin: 0 1.5em 18px 0; +} +blockquote { + font-style: normal; +} + + +/* =Header +-------------------------------------------------------------- */ + +#site-title { + float: right; +} +#site-description { + clear: left; + float: left; + font-style: normal; +} +#branding img { + float: right; +} + +/* =Menu +-------------------------------------------------------------- */ + +#access { + float:right; +} + +#access .menu-header, +div.menu { + margin-right: 12px; + margin-left: 0; +} + +#access .menu-header li, +div.menu li{ + float:right; +} + +#access ul ul { + left:auto; + right:0; + float:right; +} +#access ul ul ul { + left:auto; + right:100%; +} + +/* =Content +-------------------------------------------------------------- */ + +#content table { + text-align: right; + margin: 0 0 24px -1px; +} +.page-title span { + font-style:normal; +} +.entry-title, +.entry-meta { + clear: right; + float: right; + margin-left: 68px; + margin-right: 0; +} + +.entry-content input.file, +.entry-content input.button { + margin-left: 24px; + margin-right:0; +} +.entry-content blockquote.left { + float: right; + margin-right: 0; + margin-left: 24px; + text-align: left; +} +.entry-content blockquote.right { + float: left; + margin-right: 24px; + margin-left: 0; + text-align: right; +} +#entry-author-info #author-avatar { + float: right; + margin: 0 0 0 -104px; +} +#entry-author-info #author-description { + float: right; + margin: 0 104px 0 0; +} + +/* Gallery listing +-------------------------------------------------------------- */ + +.category-gallery .gallery-thumb { + float: right; + margin-left:20px; + margin-right:0; +} + + +/* Images +-------------------------------------------------------------- */ + +#content .gallery .gallery-caption { + margin-right: 0; +} + +#content .gallery .gallery-item { + float: right; +} + +/* =Navigation +-------------------------------------------------------------- */ +.nav-previous { + float: right; +} +.nav-next { + float: left; + text-align:left; +} + +/* =Comments +-------------------------------------------------------------- */ + +.commentlist li.comment { + padding: 0 56px 0 0; +} +.commentlist .avatar { + right: 0; + left: auto; +} +.comment-author .says, #comments .pingback .url { + font-style: normal; +} + +/* Comments form */ +.children #respond { + margin: 0 0 0 48px; +} +#respond #wp-comment-cookies-consent { + margin: 0 0 0 10px; +} + +/* =Widget Areas +-------------------------------------------------------------- */ + +.widget-area ul { + margin-right: 0; +} +.widget-area ul ul { + margin-right: 1.3em; + margin-left: 0; +} +#wp-calendar caption { + text-align: right; +} +#wp-calendar tfoot #next { + text-align: left; +} + +/* Main sidebars */ +#main .widget-area ul { + margin-right: 0; + padding: 0 0 0 20px; +} +#main .widget-area ul ul { + margin-right: 1.3em; + margin-left: 0; +} +.widget_text ol { + margin-left: auto; + margin-right: 1.3em; +} + +#main .widget-area .tagcloud ul, +.widget-area .tagcloud ul { + margin-right: 0; +} + +/* =Footer +-------------------------------------------------------------- */ +#site-generator { + font-style:normal; +} +#site-generator a { + background-position: right center; + padding-right: 20px; + padding-left: 0; +} \ No newline at end of file diff --git a/wp-content/themes/twentyten/screenshot.png b/wp-content/themes/twentyten/screenshot.png new file mode 100644 index 000000000..fac2b97f4 Binary files /dev/null and b/wp-content/themes/twentyten/screenshot.png differ diff --git a/wp-content/themes/twentyten/search.php b/wp-content/themes/twentyten/search.php new file mode 100644 index 000000000..a3fa97bd6 --- /dev/null +++ b/wp-content/themes/twentyten/search.php @@ -0,0 +1,38 @@ + + +
        +
        + + +

        ' . get_search_query() . '' ); ?>

        + + +
        +

        +
        +

        + +
        +
        + +
        +
        + + + diff --git a/wp-content/themes/twentyten/sidebar-footer.php b/wp-content/themes/twentyten/sidebar-footer.php new file mode 100644 index 000000000..b4480ee51 --- /dev/null +++ b/wp-content/themes/twentyten/sidebar-footer.php @@ -0,0 +1,62 @@ + + + + + diff --git a/wp-content/themes/twentyten/sidebar.php b/wp-content/themes/twentyten/sidebar.php new file mode 100644 index 000000000..40018d2f4 --- /dev/null +++ b/wp-content/themes/twentyten/sidebar.php @@ -0,0 +1,59 @@ + + + + + + + + + diff --git a/wp-content/themes/twentyten/single.php b/wp-content/themes/twentyten/single.php new file mode 100644 index 000000000..4e64ec779 --- /dev/null +++ b/wp-content/themes/twentyten/single.php @@ -0,0 +1,28 @@ + + +
        +
        + + + +
        +
        + + + diff --git a/wp-content/themes/twentyten/style.css b/wp-content/themes/twentyten/style.css new file mode 100644 index 000000000..454ec741b --- /dev/null +++ b/wp-content/themes/twentyten/style.css @@ -0,0 +1,1439 @@ +/* +Theme Name: Twenty Ten +Theme URI: https://wordpress.org/themes/twentyten/ +Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar. +Author: the WordPress team +Author URI: https://wordpress.org/ +Version: 2.9 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: blog, two-columns, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu, flexible-header, featured-images, footer-widgets, featured-image-header +Text Domain: twentyten +*/ + + +/* =Reset default browser CSS. Based on work by Eric Meyer. +-------------------------------------------------------------- */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + background: transparent; + border: 0; + margin: 0; + padding: 0; + vertical-align: baseline; +} +body { + line-height: 1; +} +h1, h2, h3, h4, h5, h6 { + clear: both; + font-weight: normal; +} +ol, ul { + list-style: none; +} +blockquote { + quotes: none; +} +blockquote:before, blockquote:after { + content: ''; + content: none; +} +del { + text-decoration: line-through; +} +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} +a img { + border: none; +} + +/* =Layout +-------------------------------------------------------------- */ + +/* +LAYOUT: Two columns +DESCRIPTION: Two-column fixed layout with one sidebar right of content +*/ + +#container { + float: left; + margin: 0 -240px 0 0; + width: 100%; +} +#content { + margin: 0 280px 0 20px; +} +#primary, +#secondary { + float: right; + overflow: hidden; + width: 220px; +} +#secondary { + clear: right; +} +#footer { + clear: both; + width: 100%; +} + +/* +LAYOUT: One column, no sidebar +DESCRIPTION: One centered column with no sidebar +*/ + +.one-column #content { + margin: 0 auto; + width: 640px; +} + +/* +LAYOUT: Full width, no sidebar +DESCRIPTION: Full width content with no sidebar; used for attachment pages +*/ + +.single-attachment #content { + margin: 0 auto; + width: 900px; +} + + +/* =Fonts +-------------------------------------------------------------- */ +body, +input, +textarea, +.page-title span, +.pingback a.url { + font-family: Georgia, "Bitstream Charter", serif; +} +h3#comments-title, +h3#reply-title, +#access .menu, +#access div.menu ul, +#cancel-comment-reply-link, +.form-allowed-tags, +#site-info, +#site-title, +#wp-calendar, +.comment-meta, +.comment-body tr th, +.comment-body thead th, +.entry-content label, +.entry-content tr th, +.entry-content thead th, +.entry-meta, +.entry-title, +.entry-utility, +#respond label, +.navigation, +.page-title, +.pingback p, +.reply, +.widget-title, +.wp-caption-text { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} +input[type="submit"] { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} +pre { + font-family: "Courier 10 Pitch", Courier, monospace; +} +code { + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +} + + +/* =Structure +-------------------------------------------------------------- */ + +/* The main theme structure */ +#access .menu-header, +div.menu, +#colophon, +#branding, +#main, +#wrapper { + margin: 0 auto; + width: 940px; +} +#wrapper { + background: #fff; + margin-top: 20px; + padding: 0 20px; +} + +/* Structure the footer area */ +#footer-widget-area { + overflow: hidden; +} +#footer-widget-area .widget-area { + float: left; + margin-right: 20px; + width: 220px; +} +#footer-widget-area #fourth { + margin-right: 0; +} +#site-info { + float: left; + font-size: 14px; + font-weight: bold; + width: 700px; +} +#site-generator { + float: right; + width: 220px; +} + + +/* =Global Elements +-------------------------------------------------------------- */ + +/* Main global 'theme' and typographic styles */ +body { + background: #f1f1f1; +} +body, +input, +textarea { + color: #666; + font-size: 12px; + line-height: 18px; +} +hr { + background-color: #e7e7e7; + border: 0; + clear: both; + height: 1px; + margin-bottom: 18px; +} + +/* Text elements */ +p { + margin-bottom: 18px; +} +ul { + list-style: square; + margin: 0 0 18px 1.5em; +} +ol { + list-style: decimal; + margin: 0 0 18px 1.5em; +} +ol ol { + list-style: upper-alpha; +} +ol ol ol { + list-style: lower-roman; +} +ol ol ol ol { + list-style: lower-alpha; +} +ul ul, +ol ol, +ul ol, +ol ul { + margin-bottom: 0; +} +dl { + margin: 0 0 24px 0; +} +dt { + font-weight: bold; +} +dd { + margin-bottom: 18px; +} +strong { + font-weight: bold; +} +cite, +em, +i { + font-style: italic; +} +big { + font-size: 131.25%; +} +ins { + background: #ffc; + text-decoration: none; +} +blockquote { + font-style: italic; + padding: 0 3em; +} +blockquote cite, +blockquote em, +blockquote i { + font-style: normal; +} +pre { + background: #f7f7f7; + color: #222; + line-height: 18px; + margin-bottom: 18px; + overflow: auto; + padding: 1.5em; +} +abbr, +acronym { + border-bottom: 1px dotted #666; + cursor: help; +} +sup, +sub { + height: 0; + line-height: 1; + position: relative; + vertical-align: baseline; +} +sup { + bottom: 1ex; +} +sub { + top: .5ex; +} +small { + font-size: smaller; +} +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="number"], +textarea { + background: #f9f9f9; + border: 1px solid #ccc; + box-shadow: inset 1px 1px 1px rgba(0,0,0,0.1); + -moz-box-shadow: inset 1px 1px 1px rgba(0,0,0,0.1); + -webkit-box-shadow: inset 1px 1px 1px rgba(0,0,0,0.1); + padding: 2px; +} +a:link { + color: #0066cc; +} +a:visited { + color: #743399; +} +a:active, +a:hover { + color: #ff4b33; +} + +/* Text meant only for screen readers */ +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + overflow: hidden; + position: absolute !important; + height: 1px; + width: 1px; +} + + +/* =Header +-------------------------------------------------------------- */ + +#header { + padding: 30px 0 0 0; +} +#site-title { + float: left; + font-size: 30px; + line-height: 36px; + margin: 0 0 18px 0; + width: 700px; +} +#site-title a { + color: #000; + font-weight: bold; + text-decoration: none; +} +#site-description { + clear: right; + float: right; + font-style: italic; + margin: 15px 0 18px 0; + width: 220px; +} + +/* This is the custom header image */ +#branding img { + border-top: 4px solid #000; + border-bottom: 1px solid #000; + display: block; + float: left; +} + + +/* =Menu +-------------------------------------------------------------- */ + +#access { + background: #000; + display: block; + float: left; + margin: 0 auto; + width: 940px; +} +#access .menu-header, +div.menu { + font-size: 13px; + margin-left: 12px; + width: 928px; +} +#access .menu-header ul, +div.menu ul { + list-style: none; + margin: 0; +} +#access .menu-header li, +div.menu li { + float: left; + position: relative; +} +#access a { + color: #aaa; + display: block; + line-height: 38px; + padding: 0 10px; + text-decoration: none; +} +#access ul ul { + box-shadow: 0px 3px 3px rgba(0,0,0,0.2); + -moz-box-shadow: 0px 3px 3px rgba(0,0,0,0.2); + -webkit-box-shadow: 0px 3px 3px rgba(0,0,0,0.2); + display: none; + position: absolute; + top: 38px; + left: 0; + float: left; + width: 180px; + z-index: 99999; +} +#access ul ul li { + min-width: 180px; +} +#access ul ul ul { + left: 100%; + top: 0; +} +#access ul ul a { + background: #333; + line-height: 1em; + padding: 10px; + width: 160px; + height: auto; +} +#access li:hover > a, +#access ul ul :hover > a { + background: #333; + color: #fff; +} +#access ul li:hover > ul { + display: block; +} +#access ul li.current_page_item > a, +#access ul li.current_page_ancestor > a, +#access ul li.current-menu-ancestor > a, +#access ul li.current-menu-item > a, +#access ul li.current-menu-parent > a { + color: #fff; +} +* html #access ul li.current_page_item a, +* html #access ul li.current_page_ancestor a, +* html #access ul li.current-menu-ancestor a, +* html #access ul li.current-menu-item a, +* html #access ul li.current-menu-parent a, +* html #access ul li a:hover { + color: #fff; +} + + +/* =Content +-------------------------------------------------------------- */ + +#main { + clear: both; + overflow: hidden; + padding: 40px 0 0 0; +} +#content { + margin-bottom: 36px; +} +#content, +#content input, +#content textarea { + color: #333; + font-size: 16px; + line-height: 24px; +} +#content p, +#content ul, +#content ol, +#content dd, +#content pre, +#content hr { + margin-bottom: 24px; +} +#content ul ul, +#content ol ol, +#content ul ol, +#content ol ul { + margin-bottom: 0; +} +#content pre, +#content kbd, +#content tt, +#content var { + font-size: 15px; + line-height: 21px; +} +#content code { + font-size: 13px; +} +#content dt, +#content th { + color: #000; +} +#content h1, +#content h2, +#content h3, +#content h4, +#content h5, +#content h6 { + color: #000; + line-height: 1.5em; + margin: 0 0 20px 0; +} +#content table { + border: 1px solid #e7e7e7; + margin: 0 -1px 24px 0; + text-align: left; + width: 100%; +} +#content tr th, +#content thead th { + color: #777; + font-size: 12px; + font-weight: bold; + line-height: 18px; + padding: 9px 24px; +} +#content tr td { + border-top: 1px solid #e7e7e7; + padding: 6px 24px; +} +#content tr.odd td { + background: #f2f7fc; +} +.hentry { + margin: 0 0 48px 0; +} +.home .sticky { + background: #f2f7fc; + border-top: 4px solid #000; + margin-left: -20px; + margin-right: -20px; + padding: 18px 20px; +} +.single .hentry { + margin: 0 0 36px 0; +} +.page-title { + color: #000; + font-size: 14px; + font-weight: bold; + margin: 0 0 36px 0; +} +.page-title span { + color: #333; + font-size: 16px; + font-style: italic; + font-weight: normal; +} +.page-title a:link, +.page-title a:visited { + color: #777; + text-decoration: none; +} +.page-title a:active, +.page-title a:hover { + color: #ff4b33; +} +#content .entry-title { + color: #000; + font-size: 21px; + font-weight: bold; + line-height: 1.3em; + margin-bottom: 0; +} +.entry-title a:link, +.entry-title a:visited { + color: #000; + text-decoration: none; +} +.entry-title a:active, +.entry-title a:hover { + color: #ff4b33; +} +.entry-meta { + color: #777; + font-size: 12px; +} +.entry-meta abbr, +.entry-utility abbr { + border: none; +} +.entry-meta abbr:hover, +.entry-utility abbr:hover { + border-bottom: 1px dotted #666; +} +.entry-content, +.entry-summary { + clear: both; + padding: 12px 0 0 0; +} +.entry-content .more-link { + white-space: nowrap; +} +#content .entry-summary p:last-child { + margin-bottom: 12px; +} +.entry-content fieldset { + border: 1px solid #e7e7e7; + margin: 0 0 24px 0; + padding: 24px; +} +.entry-content fieldset legend { + background: #fff; + color: #000; + font-weight: bold; + padding: 0 24px; +} +.entry-content input { + margin: 0 0 24px 0; +} +.entry-content input.file, +.entry-content input.button { + margin-right: 24px; +} +.entry-content label { + color: #777; + font-size: 12px; +} +.entry-content select { + margin: 0 0 24px 0; +} +.entry-content sup, +.entry-content sub { + font-size: 10px; +} +.entry-content blockquote.left { + float: left; + margin-left: 0; + margin-right: 24px; + text-align: right; + width: 33%; +} +.entry-content blockquote.right { + float: right; + margin-left: 24px; + margin-right: 0; + text-align: left; + width: 33%; +} +.page-link { + clear: both; + color: #000; + font-weight: bold; + line-height: 48px; + word-spacing: 0.5em; +} +.page-link a:link, +.page-link a:visited { + background: #f1f1f1; + color: #333; + font-weight: normal; + padding: 0.5em 0.75em; + text-decoration: none; +} +.home .sticky .page-link a { + background: #d9e8f7; +} +.page-link a:active, +.page-link a:hover { + color: #ff4b33; +} +body.page .edit-link { + clear: both; + display: block; +} +#entry-author-info { + background: #f2f7fc; + border-top: 4px solid #000; + clear: both; + font-size: 14px; + line-height: 20px; + margin: 24px 0; + overflow: hidden; + padding: 18px 20px; +} +#entry-author-info #author-avatar { + background: #fff; + border: 1px solid #e7e7e7; + float: left; + height: 60px; + margin: 0 -104px 0 0; + padding: 11px; +} +#entry-author-info #author-description { + float: left; + margin: 0 0 0 104px; +} +#entry-author-info h2 { + color: #000; + font-size: 100%; + font-weight: bold; + margin-bottom: 0; +} +.entry-utility { + clear: both; + color: #777; + font-size: 12px; + line-height: 18px; +} +.entry-meta a, +.entry-utility a { + color: #777; +} +.entry-meta a:hover, +.entry-utility a:hover { + color: #ff4b33; +} +#content .video-player { + padding: 0; +} +.format-standard .wp-video, +.format-standard .wp-audio-shortcode, +.format-audio .wp-audio-shortcode, +.format-standard .video-player { + margin-bottom: 24px; +} + +/* =Asides +-------------------------------------------------------------- */ + +.home #content .format-aside p, +.home #content .category-asides p { + font-size: 14px; + line-height: 20px; + margin-bottom: 10px; + margin-top: 0; +} +.home .hentry.format-aside, +.home .hentry.category-asides { + padding: 0; +} +.home #content .format-aside .entry-content, +.home #content .category-asides .entry-content { + padding-top: 0; +} + + +/* =Gallery listing +-------------------------------------------------------------- */ + +.format-gallery .size-thumbnail img, +.category-gallery .size-thumbnail img { + border: 10px solid #f1f1f1; + margin-bottom: 0; +} +.format-gallery .gallery-thumb, +.category-gallery .gallery-thumb { + float: left; + margin-right: 20px; + margin-top: -4px; +} +.home #content .format-gallery .entry-utility, +.home #content .category-gallery .entry-utility { + padding-top: 4px; +} + + +/* =Attachment pages +-------------------------------------------------------------- */ + +.attachment .entry-content .entry-caption { + font-size: 140%; + margin-top: 24px; +} +.attachment .entry-content .nav-previous a:before { + content: '\2190\00a0'; +} +.attachment .entry-content .nav-next a:after { + content: '\00a0\2192'; +} + + +/* =Images +-------------------------------------------------------------- */ + +/* +Resize images to fit the main content area. +- Applies only to images uploaded via WordPress by targeting size-* classes. +- Other images will be left alone. Use "size-auto" class to apply to other images. +*/ +img.size-auto, +img.size-full, +img.size-large, +img.size-medium, +.attachment img, +.widget-container img { + max-width: 100%; /* When images are too wide for containing element, force them to fit. */ + height: auto; /* Override height to match resized width for correct aspect ratio. */ +} +.alignleft, +img.alignleft { + display: inline; + float: left; + margin-right: 24px; + margin-top: 4px; +} +.alignright, +img.alignright { + display: inline; + float: right; + margin-left: 24px; + margin-top: 4px; +} +.aligncenter, +img.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} +img.alignleft, +img.alignright, +img.aligncenter { + margin-bottom: 12px; +} +.wp-caption { + background: #f1f1f1; + line-height: 18px; + margin-bottom: 20px; + max-width: 632px !important; /* prevent too-wide images from breaking layout */ + padding: 4px; + text-align: center; +} +.widget-container .wp-caption { + max-width: 100% !important; +} +.wp-caption img { + margin: 5px 5px 0; + max-width: 622px; /* caption width - 10px */ +} +.wp-caption p.wp-caption-text { + color: #777; + font-size: 12px; + margin: 5px; +} +.wp-smiley { + margin: 0; +} +.gallery { + margin: 0 auto 18px; +} +.gallery .gallery-item { + float: left; + margin-top: 0; + text-align: center; + width: 33%; +} +.gallery-columns-2 .gallery-item { + width: 50%; +} +.gallery-columns-4 .gallery-item { + width: 25%; +} +.gallery img { + border: 2px solid #cfcfcf; +} +.gallery-columns-2 .attachment-medium { + max-width: 92%; + height: auto; +} +.gallery-columns-4 .attachment-thumbnail { + max-width: 84%; + height: auto; +} +.gallery .gallery-caption { + color: #777; + font-size: 12px; + margin: 0 0 12px; +} +.gallery dl { + margin: 0; +} +.gallery img { + border: 10px solid #f1f1f1; +} +.gallery br+br { + display: none; +} +#content .attachment img {/* single attachment images should be centered */ + display: block; + margin: 0 auto; +} + + +/* =Navigation +-------------------------------------------------------------- */ + +.navigation { + color: #777; + font-size: 12px; + line-height: 18px; + overflow: hidden; +} +.navigation a:link, +.navigation a:visited { + color: #777; + text-decoration: none; +} +.navigation a:active, +.navigation a:hover { + color: #ff4b33; +} +.nav-previous { + float: left; + width: 50%; +} +.nav-next { + float: right; + text-align: right; + width: 50%; +} +#nav-above { + margin: 0 0 18px 0; +} +#nav-above { + display: none; +} +.paged #nav-above, +.single #nav-above { + display: block; +} +#nav-below { + margin: -18px 0 0 0; +} + + +/* =Comments +-------------------------------------------------------------- */ +#comments { + clear: both; +} +#comments .navigation { + padding: 0 0 18px 0; +} +h3#comments-title, +h3#reply-title { + color: #000; + font-size: 20px; + font-weight: bold; + margin-bottom: 0; +} +h3#comments-title { + padding: 24px 0; +} +.commentlist { + list-style: none; + margin: 0; +} +.commentlist li.comment { + border-bottom: 1px solid #e7e7e7; + line-height: 24px; + margin: 0 0 24px 0; + padding: 0 0 0 56px; + position: relative; +} +.commentlist li:last-child { + border-bottom: none; + margin-bottom: 0; +} +#comments .comment-body ul, +#comments .comment-body ol { + margin-bottom: 18px; +} +#comments .comment-body p:last-child { + margin-bottom: 6px; +} +#comments .comment-body blockquote p:last-child { + margin-bottom: 24px; +} +.commentlist ol { + list-style: decimal; +} +.commentlist .avatar { + position: absolute; + top: 4px; + left: 0; +} +.comment-author { +} +.comment-author cite { + color: #000; + font-style: normal; + font-weight: bold; +} +.comment-author .says { + font-style: italic; +} +.comment-meta { + font-size: 12px; + margin: 0 0 18px 0; +} +.comment-meta a:link, +.comment-meta a:visited { + color: #777; + text-decoration: none; +} +.comment-meta a:active, +.comment-meta a:hover { + color: #ff4b33; +} +.commentlist .even { +} +.commentlist .bypostauthor { +} +.reply { + font-size: 12px; + padding: 0 0 24px 0; +} +.reply a, +a.comment-edit-link { + color: #777; +} +.reply a:hover, +a.comment-edit-link:hover { + color: #ff4b33; +} +.commentlist .children { + list-style: none; + margin: 0; +} +.commentlist .children li { + border: none; + margin: 0; +} +.nopassword, +.nocomments { + display: none; +} +#comments .pingback { + border-bottom: 1px solid #e7e7e7; + margin-bottom: 18px; + padding-bottom: 18px; +} +.commentlist li.comment+li.pingback { + margin-top: -6px; +} +#comments .pingback p { + color: #777; + display: block; + font-size: 12px; + line-height: 18px; + margin: 0; +} +#comments .pingback .url { + font-size: 13px; + font-style: italic; +} + +/* Comments form */ +input[type="submit"] { + color: #333; +} +#respond { + border-top: 1px solid #e7e7e7; + margin: 24px 0; + overflow: hidden; + position: relative; +} +#respond p { + margin: 0; +} +#respond .comment-notes { + margin-bottom: 1em; +} +.form-allowed-tags { + line-height: 1em; +} +.children #respond { + margin: 0 48px 0 0; +} +h3#reply-title { + margin: 18px 0; +} +#comments-list #respond { + margin: 0 0 18px 0; +} +#comments-list ul #respond { + margin: 0; +} +#cancel-comment-reply-link { + font-size: 12px; + font-weight: normal; + line-height: 18px; +} +#respond .required { + color: #ff4b33; + font-weight: bold; +} +#respond label { + color: #777; + font-size: 12px; +} +#respond input { + margin: 0 0 9px; + width: 98%; +} +#respond textarea { + width: 98%; +} +#respond .form-allowed-tags { + color: #777; + font-size: 12px; + line-height: 18px; +} +#respond .form-allowed-tags code { + font-size: 11px; +} +#respond .form-submit { + margin: 12px 0; +} +#respond .form-submit input { + font-size: 14px; + width: auto; +} +#respond #wp-comment-cookies-consent { + width: auto; + margin: 0 10px 0 0; +} + + +/* =Widget Areas +-------------------------------------------------------------- */ + +.widget-area ul { + list-style: none; + margin-left: 0; +} +.widget-area ul ul { + list-style: square; + margin-left: 1.3em; +} +.widget-area select { + max-width: 100%; +} +.widget_search #s {/* This keeps the search inputs in line */ + width: 60%; +} +.widget_search label { + display: none; +} +.widget-container { + word-wrap: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + margin: 0 0 18px 0; +} +.widget-container .wp-caption img { + margin: auto; +} +.widget-title { + color: #222; + font-weight: bold; +} +.widget-area a:link, +.widget-area a:visited { + text-decoration: none; +} +.widget-area a:active, +.widget-area a:hover { + text-decoration: underline; +} +.widget-area .entry-meta { + font-size: 11px; +} +#wp_tag_cloud div { + line-height: 1.6em; +} +#wp-calendar { + width: 100%; +} +#wp-calendar caption { + color: #222; + font-size: 14px; + font-weight: bold; + padding-bottom: 4px; + text-align: left; +} +#wp-calendar thead { + font-size: 11px; +} +#wp-calendar thead th { +} +#wp-calendar tbody { + color: #aaa; +} +#wp-calendar tbody td { + background: #f5f5f5; + border: 1px solid #fff; + padding: 3px 0 2px; + text-align: center; +} +#wp-calendar tbody .pad { + background: none; +} +#wp-calendar tfoot #next { + text-align: right; +} +.widget_rss a.rsswidget { + color: #000; +} +.widget_rss a.rsswidget:hover { + color: #ff4b33; +} +.widget_rss .widget-title img { + width: 11px; + height: 11px; +} +.widget_text ul, +.widget_text ol { + margin-bottom: 1.5em; +} +.widget_text ol { + margin-left: 1.3em; +} +.widget_text ul ul, +.widget_text ol ol, +.widget_text ul ol, +.widget_text ol ul { + margin-bottom: 0; +} +.widget_media_video video { + max-width: 100%; +} +.tagcloud ul { + list-style-type: none; + margin-left: 0 !important; +} +.tagcloud ul li { + display: inline-block; +} + +/* Helps galleries in widget areas look presentable in most cases. */ +.widget-area .gallery-columns-2 img, +.widget-area .gallery-columns-3 img, +.widget-area .gallery-columns-4 img, +.widget-area .gallery-columns-5 img, +.widget-area .gallery-columns-6 img, +.widget-area .gallery-columns-7 img, +.widget-area .gallery-columns-8 img, +.widget-area .gallery-columns-9 img { + border: none; + max-width: 90%; + width: auto; +} + +/* Main sidebars */ +#main .widget-area ul { + margin-left: 0; + padding: 0 20px 0 0; +} +#main .widget-area ul ul { + border: none; + margin-left: 1.3em; + padding: 0; +} +#primary { +} +#secondary { +} + +/* Footer widget areas */ +#footer-widget-area { +} + + +/* =Footer +-------------------------------------------------------------- */ + +#footer { + margin-bottom: 20px; +} +#colophon { + border-top: 4px solid #000; + margin-top: -4px; + overflow: hidden; + padding: 18px 0; +} +#site-info { + font-weight: bold; +} +#site-info a { + color: #000; + text-decoration: none; +} +#site-generator { + font-style: italic; + position: relative; +} +#site-generator a { + background: url(images/wordpress.png) center left no-repeat; + color: #666; + display: inline-block; + line-height: 16px; + padding-left: 20px; + text-decoration: none; +} +#site-generator a:hover { + text-decoration: underline; +} +img#wpstats { + display: block; + margin: 0 auto 10px; +} +#site-info span[role=separator] { + padding: 0 0.6em 0 0.3em; +} +#site-info span[role=separator]::before { + content: '\007c'; +} + + +/* =Mobile Safari ( iPad, iPhone and iPod Touch ) +-------------------------------------------------------------- */ + +pre { + -webkit-text-size-adjust: 140%; +} +code { + -webkit-text-size-adjust: 160%; +} +#access, +.entry-meta, +.entry-utility, +.navigation, +.widget-area { + -webkit-text-size-adjust: 120%; +} +#site-description { + -webkit-text-size-adjust: none; +} + + +/* =Print Style +-------------------------------------------------------------- */ + +@media print { + body { + background: none !important; + } + #wrapper { + clear: both !important; + display: block !important; + float: none !important; + position: relative !important; + } + #header { + border-bottom: 2pt solid #000; + padding-bottom: 18pt; + } + #colophon { + border-top: 2pt solid #000; + } + #site-title, + #site-description { + float: none; + line-height: 1.4em; + margin: 0; + padding: 0; + } + #site-title { + font-size: 13pt; + } + .entry-content { + font-size: 14pt; + line-height: 1.6em; + } + .entry-title { + font-size: 21pt; + } + #access, + #branding img, + #respond, + .comment-edit-link, + .edit-link, + .navigation, + .page-link, + .widget-area { + display: none !important; + } + #container, + #header, + #footer { + margin: 0; + width: 100%; + } + #content, + .one-column #content { + margin: 24pt 0 0; + width: 100%; + } + .wp-caption p { + font-size: 11pt; + } + #site-info, + #site-generator { + float: none; + width: auto; + } + #colophon { + width: auto; + } + img#wpstats { + display: none; + } + #site-generator a { + margin: 0; + padding: 0; + } + #entry-author-info { + border: 1px solid #e7e7e7; + } + #main { + display: inline; + } + .home .sticky { + border: none; + } +} diff --git a/wp-content/themes/twentyten/tag.php b/wp-content/themes/twentyten/tag.php new file mode 100644 index 000000000..e6fed3014 --- /dev/null +++ b/wp-content/themes/twentyten/tag.php @@ -0,0 +1,33 @@ + + +
        +
        + +

        + ' . single_tag_title( '', false ) . '' ); + ?> +

        + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/404.php b/wp-content/themes/twentythirteen/404.php new file mode 100644 index 000000000..528f82d37 --- /dev/null +++ b/wp-content/themes/twentythirteen/404.php @@ -0,0 +1,31 @@ + + +
        +
        + + + +
        +
        +

        +

        + + +
        +
        + +
        +
        + + diff --git a/wp-content/themes/twentythirteen/archive.php b/wp-content/themes/twentythirteen/archive.php new file mode 100644 index 000000000..4fc29f5b2 --- /dev/null +++ b/wp-content/themes/twentythirteen/archive.php @@ -0,0 +1,60 @@ + + +
        +
        + + +
        +

        + +

        +
        + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/author-bio.php b/wp-content/themes/twentythirteen/author-bio.php new file mode 100644 index 000000000..690cfc0cb --- /dev/null +++ b/wp-content/themes/twentythirteen/author-bio.php @@ -0,0 +1,34 @@ + + + diff --git a/wp-content/themes/twentythirteen/author.php b/wp-content/themes/twentythirteen/author.php new file mode 100644 index 000000000..d9bbf2e3d --- /dev/null +++ b/wp-content/themes/twentythirteen/author.php @@ -0,0 +1,65 @@ + + +
        +
        + + + + + +
        +

        ' . get_the_author() . '' ); ?>

        +
        + + + + + + + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/category.php b/wp-content/themes/twentythirteen/category.php new file mode 100644 index 000000000..ba71dd714 --- /dev/null +++ b/wp-content/themes/twentythirteen/category.php @@ -0,0 +1,44 @@ + + +
        +
        + + +
        +

        + + +
        + +
        + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/comments.php b/wp-content/themes/twentythirteen/comments.php new file mode 100644 index 000000000..634814578 --- /dev/null +++ b/wp-content/themes/twentythirteen/comments.php @@ -0,0 +1,74 @@ + + +
        + + +

        + ' . get_the_title() . '' + ); + } else { + printf( + /* translators: %1$s: The number of comments. %2$s: The post title. */ + _nx( '%1$s thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'comments title', 'twentythirteen' ), + number_format_i18n( get_comments_number() ), + '' . get_the_title() . '' + ); + } + ?> +

        + +
          + 'ol', + 'short_ping' => true, + 'avatar_size' => 74, + ) + ); + ?> +
        + + 1 && get_option( 'page_comments' ) ) : + ?> + + + + +

        + + + + + + +
        diff --git a/wp-content/themes/twentythirteen/content-aside.php b/wp-content/themes/twentythirteen/content-aside.php new file mode 100644 index 000000000..25235a5c8 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-aside.php @@ -0,0 +1,47 @@ + + +
        > +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + + + ', '' ); ?> + + + + + + + + ', '' ); ?> + +
        +
        diff --git a/wp-content/themes/twentythirteen/content-audio.php b/wp-content/themes/twentythirteen/content-audio.php new file mode 100644 index 000000000..83a2545b1 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-audio.php @@ -0,0 +1,53 @@ + + +
        > +
        + +

        + +

        + +

        + +
        + +
        +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        +
        + +
        + + ', '' ); ?> + + + + +
        +
        diff --git a/wp-content/themes/twentythirteen/content-chat.php b/wp-content/themes/twentythirteen/content-chat.php new file mode 100644 index 000000000..390e005ab --- /dev/null +++ b/wp-content/themes/twentythirteen/content-chat.php @@ -0,0 +1,47 @@ + + +
        > +
        + +

        + +

        + +

        + +
        + +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentythirteen/content-gallery.php b/wp-content/themes/twentythirteen/content-gallery.php new file mode 100644 index 000000000..27777e1e2 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-gallery.php @@ -0,0 +1,61 @@ + + +
        > +
        + +

        + +

        + +

        + +
        + +
        + + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> + + + +
        + +
        + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> + + + + +
        +
        diff --git a/wp-content/themes/twentythirteen/content-image.php b/wp-content/themes/twentythirteen/content-image.php new file mode 100644 index 000000000..ed737c3cf --- /dev/null +++ b/wp-content/themes/twentythirteen/content-image.php @@ -0,0 +1,57 @@ + + +
        > +
        + +

        + +

        + +

        + +
        + +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> + + + + +
        +
        diff --git a/wp-content/themes/twentythirteen/content-link.php b/wp-content/themes/twentythirteen/content-link.php new file mode 100644 index 000000000..ff2999951 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-link.php @@ -0,0 +1,52 @@ + + +
        > +
        +

        + +

        + + +
        + +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + + +
        + + + + +
        + +
        diff --git a/wp-content/themes/twentythirteen/content-none.php b/wp-content/themes/twentythirteen/content-none.php new file mode 100644 index 000000000..dba04c06d --- /dev/null +++ b/wp-content/themes/twentythirteen/content-none.php @@ -0,0 +1,31 @@ + + + + +
        + + +

        Get started here.', 'twentythirteen' ), admin_url( 'post-new.php' ) ); ?>

        + + + +

        + + + + +

        + + + +
        diff --git a/wp-content/themes/twentythirteen/content-quote.php b/wp-content/themes/twentythirteen/content-quote.php new file mode 100644 index 000000000..1a5368766 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-quote.php @@ -0,0 +1,43 @@ + + +
        > +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentythirteen/content-status.php b/wp-content/themes/twentythirteen/content-status.php new file mode 100644 index 000000000..62c6a36b3 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-status.php @@ -0,0 +1,41 @@ + + +
        > +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + + ', '' ); ?> + + + + +
        +
        diff --git a/wp-content/themes/twentythirteen/content-video.php b/wp-content/themes/twentythirteen/content-video.php new file mode 100644 index 000000000..d3c806a8b --- /dev/null +++ b/wp-content/themes/twentythirteen/content-video.php @@ -0,0 +1,57 @@ + + +
        > +
        + +

        + +

        + +

        + +
        + +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> + + + + +
        +
        diff --git a/wp-content/themes/twentythirteen/content.php b/wp-content/themes/twentythirteen/content.php new file mode 100644 index 000000000..aace9cdab --- /dev/null +++ b/wp-content/themes/twentythirteen/content.php @@ -0,0 +1,73 @@ + + +
        > +
        + +
        + +
        + + + +

        + +

        + +

        + + + +
        + + +
        + +
        + +
        + →', 'twentythirteen' ), + the_title( '', '', false ) + ) + ); + + wp_link_pages( + array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + + +
        + + + + + + + +
        +
        diff --git a/wp-content/themes/twentythirteen/css/blocks.css b/wp-content/themes/twentythirteen/css/blocks.css new file mode 100644 index 000000000..e6c07e2ee --- /dev/null +++ b/wp-content/themes/twentythirteen/css/blocks.css @@ -0,0 +1,552 @@ +/* +Theme Name: Twenty Thirteen +Description: Used to style blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 Block Alignments +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +7.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 Block Alignments +--------------------------------------------------------------*/ + +.content-area { + overflow-x: hidden; /* prevents side-scrolling caused by use of vw */ +} + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 20px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 20px; +} + +.alignfull, +.alignwide { + clear: both; +} + +body:not(.sidebar) .alignwide { + margin-left: calc(25% - 25vw); + margin-right: calc(25% - 25vw); + width: auto; + max-width: 1600px; +} + +body:not(.sidebar) .alignfull { + margin-left: calc(50% - 50vw); + margin-right: calc(50% - 50vw); + width: auto; + max-width: 1600px; +} + +/* Make non image-based blocks a bit narrower, so they don't get cut off. */ +body:not(.sidebar) .wp-block-columns.alignfull, +body:not(.sidebar) .wp-block-audio.alignfull, +body:not(.sidebar) .wp-block-table.alignfull, +body:not(.sidebar) .wp-block-latest-comments.alignfull { + margin-left: calc(50% - 48vw); + margin-right: calc(50% - 48vw); +} + +@media (max-width: 999px) { + body.sidebar .alignwide { + margin-left: calc(25% - 25vw); + margin-right: calc(25% - 25vw); + width: auto; + max-width: 1600px; + } + + body.sidebar .alignfull { + margin-left: calc(50% - 50vw); + margin-right: calc(50% - 50vw); + width: auto; + max-width: 1600px; + } + + /* Make non image-based blocks a bit narrower, so they don't get cut off. */ + body.sidebar .wp-block-columns.alignfull, + body.sidebar .wp-block-audio.alignfull, + body.sidebar .wp-block-table.alignfull, + body.sidebar .wp-block-latest-comments.alignfull { + margin-left: calc(50% - 48vw); + margin-right: calc(50% - 48vw); + } +} + +@media (min-width: 1600px) { + + /* Make sure the full and wide blocks still stay in Twenty Thirteen's wide container */ + body:not(.sidebar) .alignfull { + margin-left: calc(50% - 800px); + margin-right: calc(50% - 800px); + width: auto; + max-width: 1000%; + } + + body:not(.sidebar) .wp-block-columns.alignfull, + body:not(.sidebar) .wp-block-audio.alignfull, + body:not(.sidebar) .wp-block-table.alignfull, + body:not(.sidebar) .wp-block-latest-comments.alignfull { + margin-left: calc(50% - 780px); + margin-right: calc(50% - 780px); + } + + body:not(.sidebar) .wp-block-gallery.alignfull { + margin-left: calc(50% - 808px); /* Adjust for gallery margins */ + margin-right: calc(50% - 808px); + width: auto; + max-width: 1000%; + } + + /* Make sure the 'wide' alignment doesn't get too wide. */ + body:not(.sidebar) .alignwide { + margin-left: -230px; + margin-right: -230px; + } +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + margin: 0 0 24px; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 24px; +} + +.wp-block-gallery figcaption { + margin-bottom: 0; +} + +/* Quote */ + +.wp-block-quote { + margin: 24px 40px; + padding: 0; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 28px; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; + font-style: italic; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover */ + +.wp-block-cover-image.aligncenter, +.wp-block-cover.aligncenter { + clear: both; + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-radius: 2px; + border-bottom: 3px solid #b93207; + color: #fff; + display: inline-block; + font-size: 16px; + padding: 11px 24px 10px; + text-decoration: none; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background: #ed6a31; /* Old browsers */ + background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */ + color: #fff; + outline: none; +} + +.wp-block-file .wp-block-file__button:active { + background: #d94412; /* Old browsers */ + background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */ + border: none; + border-top: 3px solid #b93207; + padding: 10px 24px 11px; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background-color: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; + color: inherit; + padding: 0.5em 0; +} + +.wp-block-pullquote__citation, +.wp-block-pullquote cite, +.wp-block-pullquote footer { + color: inherit; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + text-transform: uppercase; +} + +.wp-block-table td { + border: 0; + border-top: 1px solid #ededed; +} + +body:not(.sidebar) .wp-block-table.alignwide, +body:not(.sidebar) .wp-block-table.alignfull { + width: 100%; +} + +/* Some acrobatics to make sure the table blocks always fill the available space. */ + +@media (max-width: 1599px) { + body:not(.sidebar) .wp-block-table.alignwide { + width: calc(302px + 50vw); /* Half the content area width plus half the screen width. */ + } + + body:not(.sidebar) .wp-block-table.alignfull { + width: 96vw; + } +} + +@media (max-width: 999px) { + body.sidebar .wp-block-table.alignwide { + width: calc(302px + 50vw); /* Half the content area width plus half the screen width. */ + } + + body.sidebar .wp-block-table.alignfull { + width: 96vw; + } +} + +@media (max-width: 654px) { + body:not(.sidebar) .wp-block-table.alignwide, + body.sidebar .wp-block-table.alignwide { + width: 96vw; + } +} + +@media (min-width: 1600px) { + body:not(.sidebar) .wp-block-table.alignwide { + width: 1064px; + } + + body:not(.sidebar) .wp-block-table.alignfull { + width: 1560px; + } +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button.alignleft { + margin-right: 20px; +} + +.wp-block-button.alignright { + margin-left: 20px; +} + +.wp-block-button .wp-block-button__link { + border-bottom: 3px solid #b93207; + display: inline-block; + font-size: 16px; + padding: 11px 24px 10px; + text-decoration: none; +} + +.entry-content .wp-block-button__link { + background-color: #e05d22; + color: #fff; +} + +.entry-content .wp-block-button:not(.is-style-outline) .wp-block-button__link:not(.has-background) { + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ +} + +.entry-content .wp-block-button__link:hover, +.entry-content .wp-block-button__link:focus, +.wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color):hover, +.wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color):focus { + background: #ed6a31; + color: #fff; +} + +.wp-block-button.is-style-outline .wp-block-button__link { + background-color: inherit; + border-color: inherit; + border-width: 2px; +} + +.wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color) { + color: #ed6a31; +} + +.entry-content .wp-block-button__link:not(.has-background):hover, +.entry-content .wp-block-button__link:not(.has-background):hover, +.entry-content .wp-block-button:not(.is-style-outline) .wp-block-button__link:not(.has-background):hover { + background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */ +} + +.entry-content .wp-block-button__link:active { + background: #d94412; +} + +.entry-content .wp-block-button__link:not(.has-background):active { + background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */ +} + +.entry-content .wp-block-button .wp-block-button__link:active { + border: none; + border-top: 3px solid #b93207; + padding: 10px 24px 11px; +} + +/* Separator */ + +.wp-block-separator { + border: 0; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/* Media & Text */ + +.wp-block-media-text { + margin-bottom: 24px; +} + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + list-style-position: inside; + text-align: center; +} + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 16px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + font-size: 16px; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + background: url(../images/dotted-line.png) repeat-x left top; + margin-bottom: 0; + padding: 24px 0; +} + +/*-------------------------------------------------------------- +7.0 Blocks - Colors +--------------------------------------------------------------*/ + +.entry-content .has-dark-gray-color { + color: #141412; +} + +.entry-content .has-dark-gray-background-color { + background-color: #141412; +} + +.entry-content .has-red-color { + color: #bc360a; +} + +.entry-content .has-red-background-color { + background-color: #bc360a; +} + +.entry-content .has-medium-orange-color { + color: #db572f; +} + +.entry-content .has-medium-orange-background-color { + background-color: #db572f; +} + +.entry-content .has-light-orange-color { + color: #ea9629; +} + +.entry-content .has-light-orange-background-color { + background-color: #ea9629; +} + +.entry-content .has-yellow-color { + color: #fbca3c; +} + +.entry-content .has-yellow-background-color { + background-color: #fbca3c; +} + +.entry-content .has-white-color { + color: #fff; +} + +.entry-content .has-white-background-color { + background-color: #fff; +} + +.entry-content .has-dark-brown-color { + color: #220e10; +} + +.entry-content .has-dark-brown-background-color { + background-color: #220e10; +} + +.entry-content .has-medium-brown-color { + color: #722d19; +} + +.entry-content .has-medium-brown-background-color { + background-color: #722d19; +} + +.entry-content .has-light-brown-color { + color: #eadaa6; +} + +.entry-content .has-light-brown-background-color { + background-color: #eadaa6; +} + +.entry-content .has-beige-color { + color: #e8e5ce; +} + +.entry-content .has-beige-background-color { + background-color: #e8e5ce; +} + +.entry-content .has-off-white-color { + color: #f7f5e7; +} + +.entry-content .has-off-white-background-color { + background-color: #f7f5e7; +} diff --git a/wp-content/themes/twentythirteen/css/editor-blocks.css b/wp-content/themes/twentythirteen/css/editor-blocks.css new file mode 100644 index 000000000..c88cb4dba --- /dev/null +++ b/wp-content/themes/twentythirteen/css/editor-blocks.css @@ -0,0 +1,419 @@ +/* +Theme Name: Twenty Thirteen +Description: Used to style blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 Block Alignments +--------------------------------------------------------------*/ + +.editor-block-list__layout .editor-block-list__block[data-align="full"] > .editor-block-list__block-edit figure { + width: auto; +} + +/*-------------------------------------------------------------- +2.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 1.5; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #141412; +} + +.editor-post-title__block .editor-post-title__input { + font-family: Bitter, Georgia, serif; + font-size: 48px; + font-weight: 300; + line-height: 1.0909090909; + margin-bottom: 12px; + margin: 0 0 12px 0; +} + +/*-------------------------------------------------------------- +3.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main content width */ + +.wp-block { + max-width: 634px; /* 604px + 30px to account for padding */ +} + +.wp-block.alignwide, +.wp-block.alignfull { + max-width: inherit; +} + +[class^="wp-block-"] .wp-block { + max-width: 100%; +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #bc360a; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + margin: 16px 0; + padding: 0 0 0 40px; +} + +.block-library-list .editor-rich-text__tinymce { + padding: 0 0 0 40px; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.edit-post-visual-editor .editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style-type: square; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li, +.editor-block-list__block ul:not(.wp-block-gallery) li, +.edit-post-visual-editor ol li, +.editor-block-list__block ol li, +.block-library-list li { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + padding-left: 0; + padding-right: 40px; +} + +.rtl .block-library-list .editor-rich-text__tinymce { + padding-left: 0; + padding-right: 40px; +} + +/* Quote */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border-left: 0; + border-right: 0; + font-style: italic; + margin: 24px 40px; + padding-left: 0; + padding-right: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote p { + font-size: 24px; + font-weight: 300; +} + +/* Table */ + +.rtl .editor-block-list__block table th, +.rtl .editor-block-list__block table td { + text-align: right; +} + +/* Code */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + margin: 0 0 24px; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Gallery */ + +.edit-post-visual-editor .wp-block-gallery { + margin-bottom: 24px; + padding: 0; +} + +.wp-block-gallery figcaption, +.wp-block-gallery figcaption.editor-rich-text__tinymce.mce-content-body { + color: #fff; + font-size: 13px; + margin-bottom: 0; +} + +/* Quote */ + +.wp-block-quote { + font-style: italic; + margin: 24px 40px; + padding: 0; +} + +.editor-block-list__block .wp-block-quote p { + font-size: 24px; + font-weight: 300; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body { + color: inherit; + font-size: 16px; + font-style: italic; + text-transform: uppercase; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 28px; +} + +.wp-block-quote.is-large .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body, +.wp-block-quote.is-style-large .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body { + font-size: 18px; +} + +/* Cover */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-cover-image p.wp-block-cover-image-text, +.edit-post-visual-editor .editor-block-list__block .wp-block-cover p.wp-block-cover-text { + font-size: 32px; + line-height: 1.25; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + color: #bc360a; +} + +.wp-block-file .wp-block-file__button { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + color: #fff; + display: inline-block; + font-size: 16px; + line-height: 24px; + padding: 11px 24px 10px; + text-decoration: none; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.edit-post-visual-editor .wp-block-pullquote { + border: 0; + padding: 0.5em 0; +} + +.edit-post-visual-editor .editor-block-list__block .wp-block-pullquote p { + font-weight: 300; +} + +.edit-post-visual-editor .wp-block-pullquote__citation, +.edit-post-visual-editor .wp-block-pullquote cite, +.edit-post-visual-editor .wp-block-pullquote footer { + color: #141412; + font-size: 16px; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-table td { + border: 0; + border-top: 1px solid #ededed; + padding: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + display: inline-block; + font-size: 16px; + line-height: 24px; + padding: 11px 24px 10px; + text-decoration: none; +} + +.wp-block-button__link { + background: #e05d22; + border-bottom: 3px solid #b93207; + color: #fff; +} + +.is-style-outline .wp-block-button__link { + border-width: 2px; + color: #e05d22; +} + +.wp-block-button:not(.is-style-outline) .wp-block-button__link:not(.has-background) { + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ +} + +/* Separator */ + +.editor-block-list__block hr.wp-block-separator { + margin-left: auto; + margin-right: auto; +} + +/* Media & Text */ + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +7.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +[data-align="center"] .wp-block-archives ul, +[data-align="center"] .wp-block-categories ul, +[data-align="center"] .wp-block-latest-posts ul { + list-style-position: inside; + text-align: center; +} + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 16px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + font-size: 16px; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + background: url(../images/dotted-line.png) repeat-x left top; + margin-bottom: 0; + padding: 24px 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-latest-posts.is-grid { + list-style-type: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 1em; +} diff --git a/wp-content/themes/twentythirteen/css/editor-style.css b/wp-content/themes/twentythirteen/css/editor-style.css new file mode 100644 index 000000000..568418992 --- /dev/null +++ b/wp-content/themes/twentythirteen/css/editor-style.css @@ -0,0 +1,771 @@ +/* +Theme Name: Twenty Thirteen +Description: Used to style the TinyMCE editor. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Body + * 2.0 - Headings + * 3.0 - Text Elements + * 4.0 - Links + * 5.0 - Alignment + * 6.0 - Tables + * 7.0 - Images + * 8.0 - Galleries + * 9.0 - Audio/Video + * 10.0 - Post Formats + * 11.0 - RTL + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Body + * ---------------------------------------------------------------------------- + */ + +html .mceContentBody { + font-size: 100%; + max-width: 604px; +} + +body { + color: #141412; + font-family: "Source Sans Pro", Helvetica, sans-serif; + line-height: 1.5; + text-rendering: optimizeLegibility; + vertical-align: baseline; +} + + +/** + * 2.0 Headings + * ---------------------------------------------------------------------------- + */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-family: Bitter, Georgia, serif; + line-height: 1.3; +} + +h1 { + font-size: 48px; + margin: 33px 0; +} + +h2 { + font-size: 30px; + margin: 25px 0; +} + +h3 { + font-size: 22px; + margin: 22px 0; +} + +h4 { + font-size: 20px; + margin: 25px 0; +} + +h5 { + font-size: 18px; + margin: 30px 0; +} + +h6 { + font-size: 16px; + margin: 36px 0; +} + +hr { + background: url(../images/dotted-line.png) repeat center top; + background-size: 4px 4px; + border: 0; + height: 1px; + margin: 0 0 24px; +} + + +/** + * 3.0 Text Elements + * ---------------------------------------------------------------------------- + */ + +p { + margin: 0 0 24px; +} + +ol, +ul { + margin: 16px 0; + padding: 0 0 0 40px; +} + +ul { + list-style-type: square; +} + +ol { + list-style: decimal outside; +} + +li > ul, +li > ol { + margin: 0; +} + +dl { + margin: 0 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 20px; +} + +strong { + font-weight: bold; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 14px; +} + +pre { + background: #f5f5f5; + color: #666; + font-family: monospace; + font-size: 14px; + margin: 20px 0; + overflow: auto; + padding: 20px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; +} + +blockquote { + font-size: 24px; + font-style: italic; + font-weight: 300; + margin: 24px 40px; +} + +blockquote blockquote { + margin-right: 0; +} + +blockquote cite, +blockquote small { + font-size: 14px; + font-weight: normal; + text-transform: uppercase; +} + +cite { + border-bottom: 0; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +address { + font-style: italic; + margin: 0 0 24px; +} + +del { + color: #333; +} + +ins { + background: #fff9c0; + border: none; + color: #333; + text-decoration: none; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + + +/** + * 4.0 Links + * ---------------------------------------------------------------------------- + */ + +a { + color: #ca3c08; + text-decoration: none; +} + +a:visited { + color: #ac0404; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + color: #ea9629; + outline: 0; +} + +a:hover { + text-decoration: underline; +} + + +/** + * 5.0 Alignment + * ---------------------------------------------------------------------------- + */ + +.alignleft { + float: left; + margin: 5px 20px 5px 0; +} + +.alignright { + float: right; + margin: 5px 0 5px 20px; +} + +.aligncenter { + display: block; + margin: 5px auto; +} + +img.alignnone { + margin: 5px 0; +} + + +/** + * 6.0 Tables + * ---------------------------------------------------------------------------- + */ + +table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +caption { + font-size: 16px; + margin: 20px 0; +} + +th { + font-weight: bold; + text-transform: uppercase; +} + +td { + border-top: 1px solid #ededed; + padding: 6px 10px 6px 0; +} + + +/** + * 7.0 Images + * ---------------------------------------------------------------------------- + */ + +img { + height: auto; + max-width: 100%; + vertical-align: middle; +} + +.wp-caption { + background: transparent; + border: none; + margin: 0; + padding: 0; + text-align: left; +} + +.html5-captions .wp-caption { + padding: 0; +} + +.wp-caption.alignleft { + margin: 5px 10px 5px 0; +} + +.html5-captions .wp-caption.alignleft { + margin-right: 20px; +} + +.wp-caption.alignright { + margin: 5px 0 5px 10px; +} + +.wp-caption.alignright img, +.wp-caption.alignright .wp-caption-dd { + padding-left: 10px; +} + +.html5-captions .wp-caption.alignright { + margin-left: 20px; +} + +.html5-captions .wp-caption.alignright img, +.html5-captions .wp-caption.alignright .wp-caption-dd { + padding: 0; +} + +.wp-caption-dt { + margin: 0; +} + +.wp-caption .wp-caption-text, +.wp-caption-dd { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + margin-bottom: 24px; + padding: 0; +} + +.mceTemp + ul, +.mceTemp + ol { + list-style-position: inside; +} + + +/** + * 8.0 Galleries + * ---------------------------------------------------------------------------- + */ + +.gallery .gallery-item { + float: left; + margin: 0 4px 4px 0; + overflow: hidden; + padding: 0; + position: relative; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; + width: auto; +} + +.gallery-columns-2 .gallery-item { + max-width: 48%; + max-width: -webkit-calc(50% - 14px); + max-width: calc(50% - 14px); + width: auto; +} + +.gallery-columns-3 .gallery-item { + max-width: 32%; + max-width: -webkit-calc(33.3% - 11px); + max-width: calc(33.3% - 11px); + width: auto; +} + +.gallery-columns-4 .gallery-item { + max-width: 23%; + max-width: -webkit-calc(25% - 9px); + max-width: calc(25% - 9px); + width: auto; +} + +.gallery-columns-5 .gallery-item { + max-width: 19%; + max-width: -webkit-calc(20% - 8px); + max-width: calc(20% - 8px); + width: auto; +} + +.gallery-columns-6 .gallery-item { + max-width: 15%; + max-width: -webkit-calc(16.7% - 7px); + max-width: calc(16.7% - 7px); + width: auto; +} + +.gallery-columns-7 .gallery-item { + max-width: 13%; + max-width: -webkit-calc(14.28% - 7px); + max-width: calc(14.28% - 7px); + width: auto; +} + +.gallery-columns-8 .gallery-item { + max-width: 11%; + max-width: -webkit-calc(12.5% - 6px); + max-width: calc(12.5% - 6px); + width: auto; +} + +.gallery-columns-9 .gallery-item { + max-width: 9%; + max-width: -webkit-calc(11.1% - 6px); + max-width: calc(11.1% - 6px); + width: auto; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 0; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n - 1), +.gallery-columns-3 .gallery-item:nth-of-type(3n - 2), +.gallery-columns-4 .gallery-item:nth-of-type(4n - 3), +.gallery-columns-5 .gallery-item:nth-of-type(5n - 4), +.gallery-columns-6 .gallery-item:nth-of-type(6n - 5), +.gallery-columns-7 .gallery-item:nth-of-type(7n - 6), +.gallery-columns-8 .gallery-item:nth-of-type(8n - 7), +.gallery-columns-9 .gallery-item:nth-of-type(9n - 8) { + margin-left: 12px; /* Compensate for the default negative margin on .gallery, which can't be changed. */ +} + +.gallery .gallery-caption { + background-color: rgba(0, 0, 0, 0.7); + box-sizing: border-box; + color: #fff; + font-size: 14px; + line-height: 1.3; + margin: 0; + max-height: 50%; + opacity: 0; + padding: 2px 8px; + position: absolute; + bottom: 0; + left: 0; + text-align: left; + -webkit-transition: opacity 400ms ease; + transition: opacity 400ms ease; + width: 100%; +} + +.gallery .gallery-caption:before { + box-shadow: 0 -10px 15px #000 inset; + content: ""; + height: 100%; + min-height: 49px; + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.gallery-item:hover .gallery-caption { + opacity: 1; +} + +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 9.0 Audio/Video + * ---------------------------------------------------------------------------- + */ +.mejs-mediaelement, +.mejs-container .mejs-controls { + background: #220e10; +} + +.mejs-controls .mejs-time-rail .mejs-time-loaded, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + background: #fff; +} + +.mejs-controls .mejs-time-rail .mejs-time-current { + background: #ea9629; +} + +.mejs-controls .mejs-time-rail .mejs-time-total, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + background: #595959; +} + +.mejs-controls .mejs-time-rail span, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + border-radius: 0; +} + + +/** + * 10.0 Post Formats + * ---------------------------------------------------------------------------- + */ + +/* Aside */ +.post-format-aside { + background-color: #f7f5e7; +} + +.post-format-aside blockquote { + font-size: 100%; + font-weight: normal; +} + +.post-format-aside cite { + font-size: 100%; + text-transform: none; +} + +.post-format-aside cite:before { + content: "\2014"; + margin-right: 5px; +} + +/* Audio */ +.post-format-audio { + background-color: #db572f; +} + +.post-format-audio a { + color: #fbfaf3; +} + +.post-format-audio:before { + background: url(../images/dotted-line.png) repeat-y 85px 0; + background-size: 4px 4px; + content: "\f109"; + display: block; + float: left; + font-family: Genericons; + font-size: 64px; + -webkit-font-smoothing: antialiased; + height: 100%; + line-height: 1; + width: 120px; +} + +/* Chat */ +.post-format-chat { + background-color: #eadaa6; +} + +.post-format-chat a { + color: #722d19; +} + +/* Gallery */ +.post-format-gallery { + background-color: #fbca3c; +} + +.post-format-gallery a { + color: #722d19; +} + +/* Image: same as Standard/Defaults */ + +/* Link */ +.post-format-link { + background-color: #f7f5e7; +} + +/* Quote */ +.post-format-quote { + background-color: #210d10; + color: #f7f5e7; +} + +.post-format-quote a { + color: #e63f2a; +} + +.post-format-quote blockquote { + font-size: 28px; + font-style: italic; + font-weight: 300; + margin: 0; + padding-left: 75px; + position: relative; +} + +.post-format-quote blockquote:before { + content: '\201C'; + font-size: 140px; + font-weight: 400; + line-height: .8; + padding-right: 25px; + position: absolute; + left: -15px; + top: -3px; +} + +.post-format-quote blockquote small, +.post-format-quote blockquote cite { + display: block; + font-size: 16px; +} + +.format-quote .entry-content cite a { + border-bottom: 1px dotted #fff; + color: #fff; +} + +.format-quote .entry-content cite a:hover { + text-decoration: none; +} + + +/* Status */ +.post-format-status { + background-color: #722d19; + color: #f7f5e7; + font-style: italic; + font-weight: 300; + padding: 0; + padding-left: 35px; +} + +.post-format-status.mceContentBody { + font-size: 24px; +} + +.post-format-status:before { + background: url(../images/dotted-line.png) repeat-y left bottom; + background-size: 4px 4px; + content: ""; + display: block; + float: left; + height: 100%; + position: relative; + left: -30px; + width: 1px; +} + +.post-format-status > p:first-child:before { + background-color: rgba(0, 0, 0, 0.65); + content: ""; + height: 3px; + width: 13px; + margin-top: 13px; + position: absolute; + left: 9px; +} + +.post-format-status a { + color: #eadaa6; +} + +/* Video */ +.post-format-video { + background-color: #db572f; +} + +.post-format-video a { + color: #fbfaf3; +} + + +/** + * 11.0 RTL + * ---------------------------------------------------------------------------- + */ + +html .mceContentBody.rtl { + direction: rtl; + unicode-bidi: embed; +} + +.rtl ol, +.rtl ul { + padding: 0 40px 0 0; +} + +.rtl .wp-caption, +.rtl tr th { + text-align: right; +} + +.rtl td { + padding: 6px 0 6px 10px; + text-align: right; +} + +.rtl blockquote blockquote { + margin-left: 0; + margin-right: 24px; +} + +.rtl.post-format-audio:before, +.rtl.post-format-status:before, +.rtl.post-format-status > p:first-child:before { + background: none; + content: none; +} diff --git a/wp-content/themes/twentythirteen/css/ie.css b/wp-content/themes/twentythirteen/css/ie.css new file mode 100644 index 000000000..da48acd3c --- /dev/null +++ b/wp-content/themes/twentythirteen/css/ie.css @@ -0,0 +1,288 @@ +/* +Styles for older IE versions (previous to IE9). +*/ + + + +.genericon:before:hover, +.menu-toggle:after:hover, +.date a:before:hover, +.entry-meta .author a:before:hover, +.format-audio .entry-content:before:hover, +.comments-link a:before:hover, +.tags-links a:first-child:before:hover, +.categories-links a:first-child:before:hover, +.edit-link > a:before:hover, +.attachment-meta:before:hover, +.attachment-meta a:before:hover, +.comment-awaiting-moderation:before:hover, +.comment-reply-link:before:hover, +.comment-reply-title small a:before:hover, +.bypostauthor > .comment-body .fn:before:hover { + text-decoration: none; +} + +.nav-menu .sub-menu ul, +.nav-menu .children ul { + left: 100%; +} + +.site-header .home-link { + max-width: 1040px; +} + +.site-header .search-form [type="search"], +.site-header .search-form [type="text"] { + padding-top: 6px; +} + +img.alignright { + margin-right: 0; +} + +img.alignleft { + margin-left: 0; +} + +.site-main .sidebar-inner { + width: 1040px; +} + +.site-main .widget-area { + margin-right: 60px; +} + +.format-image .entry-content .size-full { + margin: 0; + max-width: 604px; +} + +.gallery-columns-1 .gallery-item, +.gallery-columns-2 .gallery-item, +.gallery-columns-3 .gallery-item { + max-width: none; +} + +.gallery img { + width: auto; +} + +.gallery-caption { + background: #000; + filter: alpha(opacity=0); +} + +.gallery-item:hover .gallery-caption { + filter: alpha(opacity=70); +} + +.comment { + clear: both; +} + +.comment-meta, +.comment-content, +.comment-list .reply { + width: 480px; +} + +.depth-2 .comment-meta, +.depth-2 .comment-content, +.comment-list .depth-2 .reply { + width: 460px; +} + +.depth-3 .comment-meta, +.depth-3 .comment-content, +.comment-list .depth-3 .reply { + width: 440px; +} + +.depth-4 .comment-meta, +.depth-4 .comment-content, +.comment-list .depth-4 .reply { + width: 420px; +} + +.depth-5 .comment-meta, +.depth-5 .comment-content, +.comment-list .depth-5 .reply { + width: 400px; +} + +.comment-meta { + margin-bottom: 0; +} + +.widget { + background: #f7f5e7; +} + +.site-footer .widget { + background: none; +} + +/* Internet Explorer 8 */ +.ie8 .site { + border: 0; +} + +.ie8 img.size-full, +.ie8 img.size-large { + height: auto; + width: auto; +} + +.ie8 .sidebar .entry-header, +.ie8 .sidebar .entry-content, +.ie8 .sidebar .entry-summary, +.ie8 .sidebar .entry-meta { + max-width: 724px; +} + +.ie8 .author-info { + margin-left: 0; +} + +.ie8 .paging-navigation .nav-previous .meta-nav { + padding: 5px 0 8px; + width: 40px; +} + +.ie8 .paging-navigation .nav-next { + line-height: 1; +} + +.ie8 .format-status .entry-content:before, +.ie8 .format-status .entry-meta:before { + content: none; +} + +.ie8 .site-main .widget-area { + margin-right: 0; +} + +/* Internet Explorer 7 */ +.ie7 audio, +.ie7 canvas, +.ie7 video { + display: inline; + zoom: 1; +} + +.ie7 legend { + margin-left: -7px; +} + +.ie7 button, +.ie7 input, +.ie7 select, +.ie7 textarea { + vertical-align: middle; +} + +.ie7 button, +.ie7 input[type="button"], +.ie7 input[type="reset"], +.ie7 input[type="submit"] { + overflow: visible; +} + +.ie7 input[type="checkbox"], +.ie7 input[type="radio"] { + height: 13px; + width: 13px; +} + +.ie7 .screen-reader-text { + clip: rect(1px 1px 1px 1px); +} + +.ie7 .site-header { + position: relative; + z-index: 1; +} + +.ie7 .main-navigation { + max-width: 930px; + padding-right: 150px; +} + +.ie7 .nav-menu li a, +.ie7 .nav-menu li { + display: block; + float: left; +} + +.ie7 .nav-menu ul { + top: 40px; +} + +.ie7 .nav-menu .sub-menu, +.ie7 .nav-menu .children { + display: none; + overflow: visible; +} + +.ie7 ul.nav-menu li:hover > ul, +.ie7 .nav-menu ul li:hover > ul { + display: block; +} + +.ie7 .site-header .search-form [type="search"], +.ie7 .site-header .search-form [type="text"] { + background-color: #fff; + border: 2px solid #c3c0ab; + cursor: text; + height: 28px; + outline: 0; + width: 150px; +} + +.ie7 .entry-header, +.ie7 .entry-content, +.ie7 .entry-summary, +.ie7 .entry-meta { + width: 604px; +} + +.ie7 .format-status .entry-content, +.ie7 .format-status .entry-meta { + padding-left: 60px; +} + +.ie7 .sidebar .format-status .entry-content, +.ie7 .sidebar .format-status .entry-meta { + padding-left: 60px; +} + +.ie7 .sidebar .post-navigation .nav-links, +.ie7 .sidebar .paging-navigation .nav-links { + width: 604px; +} + +.ie7 .paging-navigation .meta-nav { + padding: 0 0 10px; + vertical-align: middle; + width: 40px; +} + +.ie7 .comments-title, +.ie7 .comment-list, +.ie7 .comment-reply-title, +.ie7 .comment-respond .comment-form { + width: 604px; +} + +.ie7 .site-footer .widget-area { + max-width: none; + left: auto; +} + +/* RTL for Internet Explorer 7 & 8 */ +.rtl .format-audio .entry-content:before, +.rtl .comment-reply-link:before, +.rtl .comment-reply-login:before { + -ms-filter: "FlipH"; + filter: FlipH; +} diff --git a/wp-content/themes/twentythirteen/footer.php b/wp-content/themes/twentythirteen/footer.php new file mode 100644 index 000000000..858f110b5 --- /dev/null +++ b/wp-content/themes/twentythirteen/footer.php @@ -0,0 +1,33 @@ + + +
        +
        + + +
        + + ' ); + } + ?> + + + +
        +
        +
        + + + + diff --git a/wp-content/themes/twentythirteen/functions.php b/wp-content/themes/twentythirteen/functions.php new file mode 100644 index 000000000..5c021fbe3 --- /dev/null +++ b/wp-content/themes/twentythirteen/functions.php @@ -0,0 +1,798 @@ + __( 'Dark Gray', 'twentythirteen' ), + 'slug' => 'dark-gray', + 'color' => '#141412', + ), + array( + 'name' => __( 'Red', 'twentythirteen' ), + 'slug' => 'red', + 'color' => '#bc360a', + ), + array( + 'name' => __( 'Medium Orange', 'twentythirteen' ), + 'slug' => 'medium-orange', + 'color' => '#db572f', + ), + array( + 'name' => __( 'Light Orange', 'twentythirteen' ), + 'slug' => 'light-orange', + 'color' => '#ea9629', + ), + array( + 'name' => __( 'Yellow', 'twentythirteen' ), + 'slug' => 'yellow', + 'color' => '#fbca3c', + ), + array( + 'name' => __( 'White', 'twentythirteen' ), + 'slug' => 'white', + 'color' => '#fff', + ), + array( + 'name' => __( 'Dark Brown', 'twentythirteen' ), + 'slug' => 'dark-brown', + 'color' => '#220e10', + ), + array( + 'name' => __( 'Medium Brown', 'twentythirteen' ), + 'slug' => 'medium-brown', + 'color' => '#722d19', + ), + array( + 'name' => __( 'Light Brown', 'twentythirteen' ), + 'slug' => 'light-brown', + 'color' => '#eadaa6', + ), + array( + 'name' => __( 'Beige', 'twentythirteen' ), + 'slug' => 'beige', + 'color' => '#e8e5ce', + ), + array( + 'name' => __( 'Off-white', 'twentythirteen' ), + 'slug' => 'off-white', + 'color' => '#f7f5e7', + ), + ) + ); + + // Adds RSS feed links to for posts and comments. + add_theme_support( 'automatic-feed-links' ); + + /* + * Switches default core markup for search form, comment form, + * and comments to output valid HTML5. + */ + add_theme_support( + 'html5', + array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); + + /* + * This theme supports all available post formats by default. + * See https://codex.wordpress.org/Post_Formats + */ + add_theme_support( + 'post-formats', + array( + 'aside', + 'audio', + 'chat', + 'gallery', + 'image', + 'link', + 'quote', + 'status', + 'video', + ) + ); + + // This theme uses wp_nav_menu() in one location. + register_nav_menu( 'primary', __( 'Navigation Menu', 'twentythirteen' ) ); + + /* + * This theme uses a custom image size for featured images, displayed on + * "standard" posts and pages. + */ + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 604, 270, true ); + + // This theme uses its own gallery styles. + add_filter( 'use_default_gallery_style', '__return_false' ); + + // Indicate widget sidebars can use selective refresh in the Customizer. + add_theme_support( 'customize-selective-refresh-widgets' ); +} +add_action( 'after_setup_theme', 'twentythirteen_setup' ); + +/** + * Return the Google font stylesheet URL, if available. + * + * The use of Source Sans Pro and Bitter by default is localized. For languages + * that use characters not supported by the font, the font can be disabled. + * + * @since Twenty Thirteen 1.0 + * + * @return string Font stylesheet or empty string if disabled. + */ +function twentythirteen_fonts_url() { + $fonts_url = ''; + + /* Translators: If there are characters in your language that are not + * supported by Source Sans Pro, translate this to 'off'. Do not translate + * into your own language. + */ + $source_sans_pro = _x( 'on', 'Source Sans Pro font: on or off', 'twentythirteen' ); + + /* Translators: If there are characters in your language that are not + * supported by Bitter, translate this to 'off'. Do not translate into your + * own language. + */ + $bitter = _x( 'on', 'Bitter font: on or off', 'twentythirteen' ); + + if ( 'off' !== $source_sans_pro || 'off' !== $bitter ) { + $font_families = array(); + + if ( 'off' !== $source_sans_pro ) { + $font_families[] = 'Source Sans Pro:300,400,700,300italic,400italic,700italic'; + } + + if ( 'off' !== $bitter ) { + $font_families[] = 'Bitter:400,700'; + } + + $query_args = array( + 'family' => urlencode( implode( '|', $font_families ) ), + 'subset' => urlencode( 'latin,latin-ext' ), + ); + $fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ); + } + + return $fonts_url; +} + +/** + * Enqueue scripts and styles for the front end. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_scripts_styles() { + /* + * Adds JavaScript to pages with the comment form to support + * sites with threaded comments (when in use). + */ + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + // Adds Masonry to handle vertical alignment of footer widgets. + if ( is_active_sidebar( 'sidebar-1' ) ) { + wp_enqueue_script( 'jquery-masonry' ); + } + + // Loads JavaScript file with functionality specific to Twenty Thirteen. + wp_enqueue_script( 'twentythirteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20160717', true ); + + // Add Source Sans Pro and Bitter fonts, used in the main stylesheet. + wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null ); + + // Add Genericons font, used in the main stylesheet. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.0.3' ); + + // Loads our main stylesheet. + wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' ); + + // Theme block stylesheet. + wp_enqueue_style( 'twentythirteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentythirteen-style' ), '2018-12-30' ); + + // Loads the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' ); + wp_style_add_data( 'twentythirteen-ie', 'conditional', 'lt IE 9' ); +} +add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' ); + +/** + * Add preconnect for Google Fonts. + * + * @since Twenty Thirteen 2.1 + * + * @param array $urls URLs to print for resource hints. + * @param string $relation_type The relation type the URLs are printed. + * @return array URLs to print for resource hints. + */ +function twentythirteen_resource_hints( $urls, $relation_type ) { + if ( wp_style_is( 'twentythirteen-fonts', 'queue' ) && 'preconnect' === $relation_type ) { + if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '>=' ) ) { + $urls[] = array( + 'href' => 'https://fonts.gstatic.com', + 'crossorigin', + ); + } else { + $urls[] = 'https://fonts.gstatic.com'; + } + } + + return $urls; +} +add_filter( 'wp_resource_hints', 'twentythirteen_resource_hints', 10, 2 ); + +/** + * Enqueue styles for the block-based editor. + * + * @since Twenty Thirteen 2.5 + */ +function twentythirteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentythirteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css', array(), '2018-12-30' ); + // Add custom fonts. + wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentythirteen_block_editor_styles' ); + +/** + * Filter the page title. + * + * Creates a nicely formatted and more specific title element text for output + * in head of document, based on current view. + * + * @since Twenty Thirteen 1.0 + * + * @param string $title Default title text for current view. + * @param string $sep Optional separator. + * @return string The filtered title. + */ +function twentythirteen_wp_title( $title, $sep ) { + global $paged, $page; + + if ( is_feed() ) { + return $title; + } + + // Add the site name. + $title .= get_bloginfo( 'name', 'display' ); + + // Add the site description for the home/front page. + $site_description = get_bloginfo( 'description', 'display' ); + if ( $site_description && ( is_home() || is_front_page() ) ) { + $title = "$title $sep $site_description"; + } + + // Add a page number if necessary. + if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) { + $title = "$title $sep " . sprintf( __( 'Page %s', 'twentythirteen' ), max( $paged, $page ) ); + } + + return $title; +} +add_filter( 'wp_title', 'twentythirteen_wp_title', 10, 2 ); + +/** + * Register two widget areas. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_widgets_init() { + register_sidebar( + array( + 'name' => __( 'Main Widget Area', 'twentythirteen' ), + 'id' => 'sidebar-1', + 'description' => __( 'Appears in the footer section of the site.', 'twentythirteen' ), + 'before_widget' => '', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'Secondary Widget Area', 'twentythirteen' ), + 'id' => 'sidebar-2', + 'description' => __( 'Appears on posts and pages in the sidebar.', 'twentythirteen' ), + 'before_widget' => '', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); +} +add_action( 'widgets_init', 'twentythirteen_widgets_init' ); + +if ( ! function_exists( 'twentythirteen_paging_nav' ) ) : + /** + * Display navigation to next/previous set of posts when applicable. + * + * @since Twenty Thirteen 1.0 + */ + function twentythirteen_paging_nav() { + global $wp_query; + + // Don't print empty markup if there's only one page. + if ( $wp_query->max_num_pages < 2 ) { + return; + } + ?> + + post_parent ) : get_adjacent_post( false, '', true ); + $next = get_adjacent_post( false, '', false ); + + if ( ! $next && ! $previous ) { + return; + } + ?> + + ' . esc_html__( 'Sticky', 'twentythirteen' ) . ''; + } + + if ( ! has_post_format( 'link' ) && 'post' == get_post_type() ) { + twentythirteen_entry_date(); + } + + // Translators: used between list items, there is a space after the comma. + $categories_list = get_the_category_list( __( ', ', 'twentythirteen' ) ); + if ( $categories_list ) { + echo '' . $categories_list . ''; + } + + // Translators: used between list items, there is a space after the comma. + $tag_list = get_the_tag_list( '', __( ', ', 'twentythirteen' ) ); + if ( $tag_list ) { + echo '' . $tag_list . ''; + } + + // Post author + if ( 'post' == get_post_type() ) { + printf( + '', + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + esc_attr( sprintf( __( 'View all posts by %s', 'twentythirteen' ), get_the_author() ) ), + get_the_author() + ); + } + } +endif; + +if ( ! function_exists( 'twentythirteen_entry_date' ) ) : + /** + * Print HTML with date information for current post. + * + * Create your own twentythirteen_entry_date() to override in a child theme. + * + * @since Twenty Thirteen 1.0 + * + * @param boolean $echo (optional) Whether to echo the date. Default true. + * @return string The HTML-formatted post date. + */ + function twentythirteen_entry_date( $echo = true ) { + if ( has_post_format( array( 'chat', 'status' ) ) ) { + $format_prefix = _x( '%1$s on %2$s', '1: post format name. 2: date', 'twentythirteen' ); + } else { + $format_prefix = '%2$s'; + } + + $date = sprintf( + '', + esc_url( get_permalink() ), + esc_attr( sprintf( __( 'Permalink to %s', 'twentythirteen' ), the_title_attribute( 'echo=0' ) ) ), + esc_attr( get_the_date( 'c' ) ), + esc_html( sprintf( $format_prefix, get_post_format_string( get_post_format() ), get_the_date() ) ) + ); + + if ( $echo ) { + echo $date; + } + + return $date; + } +endif; + +if ( ! function_exists( 'twentythirteen_the_attached_image' ) ) : + /** + * Print the attached image with a link to the next attached image. + * + * @since Twenty Thirteen 1.0 + */ + function twentythirteen_the_attached_image() { + /** + * Filter the image attachment size to use. + * + * @since Twenty thirteen 1.0 + * + * @param array $size { + * @type int The attachment height in pixels. + * @type int The attachment width in pixels. + * } + */ + $attachment_size = apply_filters( 'twentythirteen_attachment_size', array( 724, 724 ) ); + $next_attachment_url = wp_get_attachment_url(); + $post = get_post(); + + /* + * Grab the IDs of all the image attachments in a gallery so we can get the URL + * of the next adjacent image in a gallery, or the first image (if we're + * looking at the last image in a gallery), or, in a gallery of one, just the + * link to that image file. + */ + $attachment_ids = get_posts( + array( + 'post_parent' => $post->post_parent, + 'fields' => 'ids', + 'numberposts' => -1, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'order' => 'ASC', + 'orderby' => 'menu_order ID', + ) + ); + + // If there is more than 1 attachment in a gallery... + if ( count( $attachment_ids ) > 1 ) { + foreach ( $attachment_ids as $idx => $attachment_id ) { + if ( $attachment_id == $post->ID ) { + $next_id = $attachment_ids[ ( $idx + 1 ) % count( $attachment_ids ) ]; + break; + } + } + + // get the URL of the next image attachment... + if ( $next_id ) { + $next_attachment_url = get_attachment_link( $next_id ); + } else { + // or get the URL of the first image attachment. + $next_attachment_url = get_attachment_link( reset( $attachment_ids ) ); + } + } + + printf( + '%3$s', + esc_url( $next_attachment_url ), + the_title_attribute( array( 'echo' => false ) ), + wp_get_attachment_image( $post->ID, $attachment_size ) + ); + } +endif; + +/** + * Return the post URL. + * + * @uses get_url_in_content() to get the URL in the post meta (if it exists) or + * the first link found in the post content. + * + * Falls back to the post permalink if no URL is found in the post. + * + * @since Twenty Thirteen 1.0 + * + * @return string The Link format URL. + */ +function twentythirteen_get_link_url() { + $content = get_the_content(); + $has_url = get_url_in_content( $content ); + + return ( $has_url ) ? $has_url : apply_filters( 'the_permalink', get_permalink() ); +} + +if ( ! function_exists( 'twentythirteen_excerpt_more' ) && ! is_admin() ) : + /** + * Replaces "[...]" (appended to automatically generated excerpts) with ... + * and a Continue reading link. + * + * @since Twenty Thirteen 1.4 + * + * @param string $more Default Read More excerpt link. + * @return string Filtered Read More excerpt link. + */ + function twentythirteen_excerpt_more( $more ) { + $link = sprintf( + '%2$s', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( __( 'Continue reading %s ', 'twentythirteen' ), '' . get_the_title( get_the_ID() ) . '' ) + ); + return ' … ' . $link; + } + add_filter( 'excerpt_more', 'twentythirteen_excerpt_more' ); +endif; + +/** + * Extend the default WordPress body classes. + * + * Adds body classes to denote: + * 1. Single or multiple authors. + * 2. Active widgets in the sidebar to change the layout and spacing. + * 3. When avatars are disabled in discussion settings. + * + * @since Twenty Thirteen 1.0 + * + * @param array $classes A list of existing body class values. + * @return array The filtered body class list. + */ +function twentythirteen_body_class( $classes ) { + if ( ! is_multi_author() ) { + $classes[] = 'single-author'; + } + + if ( is_active_sidebar( 'sidebar-2' ) && ! is_attachment() && ! is_404() ) { + $classes[] = 'sidebar'; + } + + if ( ! get_option( 'show_avatars' ) ) { + $classes[] = 'no-avatars'; + } + + return $classes; +} +add_filter( 'body_class', 'twentythirteen_body_class' ); + +/** + * Adjust content_width value for video post formats and attachment templates. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_content_width() { + global $content_width; + + if ( is_attachment() ) { + $content_width = 724; + } elseif ( has_post_format( 'audio' ) ) { + $content_width = 484; + } +} +add_action( 'template_redirect', 'twentythirteen_content_width' ); + +/** + * Add postMessage support for site title and description for the Customizer. + * + * @since Twenty Thirteen 1.0 + * + * @param WP_Customize_Manager $wp_customize Customizer object. + */ +function twentythirteen_customize_register( $wp_customize ) { + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title', + 'container_inclusive' => false, + 'render_callback' => 'twentythirteen_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'container_inclusive' => false, + 'render_callback' => 'twentythirteen_customize_partial_blogdescription', + ) + ); + } +} +add_action( 'customize_register', 'twentythirteen_customize_register' ); + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Thirteen 1.9 + * @see twentythirteen_customize_register() + * + * @return void + */ +function twentythirteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Thirteen 1.9 + * @see twentythirteen_customize_register() + * + * @return void + */ +function twentythirteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Enqueue Javascript postMessage handlers for the Customizer. + * + * Binds JavaScript handlers to make the Customizer preview + * reload changes asynchronously. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_customize_preview_js() { + wp_enqueue_script( 'twentythirteen-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20141120', true ); +} +add_action( 'customize_preview_init', 'twentythirteen_customize_preview_js' ); + +/** + * Modifies tag cloud widget arguments to display all tags in the same font size + * and use list format for better accessibility. + * + * @since Twenty Thirteen 2.3 + * + * @param array $args Arguments for tag cloud widget. + * @return array The filtered arguments for tag cloud widget. + */ +function twentythirteen_widget_tag_cloud_args( $args ) { + $args['largest'] = 22; + $args['smallest'] = 8; + $args['unit'] = 'pt'; + $args['format'] = 'list'; + + return $args; +} +add_filter( 'widget_tag_cloud_args', 'twentythirteen_widget_tag_cloud_args' ); + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Thirteen 2.8 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Thirteen 2.8 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentythirteen/genericons/COPYING.txt b/wp-content/themes/twentythirteen/genericons/COPYING.txt new file mode 100644 index 000000000..aece214b7 --- /dev/null +++ b/wp-content/themes/twentythirteen/genericons/COPYING.txt @@ -0,0 +1,9 @@ +Genericons is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +The fonts are distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + +This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/genericons/Genericons-Regular.otf b/wp-content/themes/twentythirteen/genericons/Genericons-Regular.otf new file mode 100644 index 000000000..5cd41e8b8 Binary files /dev/null and b/wp-content/themes/twentythirteen/genericons/Genericons-Regular.otf differ diff --git a/wp-content/themes/twentythirteen/genericons/LICENSE.txt b/wp-content/themes/twentythirteen/genericons/LICENSE.txt new file mode 100644 index 000000000..d159169d1 --- /dev/null +++ b/wp-content/themes/twentythirteen/genericons/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/wp-content/themes/twentythirteen/genericons/README.txt b/wp-content/themes/twentythirteen/genericons/README.txt new file mode 100644 index 000000000..7a0a92e5f --- /dev/null +++ b/wp-content/themes/twentythirteen/genericons/README.txt @@ -0,0 +1,123 @@ + ___ ____ __ _ ____ ____ __ ___ __ __ _ ____ + / __)( __)( ( \( __)( _ \( )/ __)/ \ ( ( \/ ___) +( (_ \ ) _) / / ) _) ) / )(( (__( O )/ /\___ \ + \___/(____)\_)__)(____)(__\_)(__)\___)\__/ \_)__)(____/ + + +Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. + +Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients! + + +_ _ ____ ____ ____ ____ +| | [__ |__| | __ |___ +|__| ___] | | |__] |___ + + +To use it, place the font folder in your stylesheet directory and paste this in your CSS file: + +/* =Genericons, thanks to FontSquirrel.com for conversion! +-------------------------------------------------------------- */ +@font-face { + font-family: 'Genericons'; + src: url('font/genericons-regular-webfont.eot'); + src: url('font/genericons-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('font/genericons-regular-webfont.woff') format('woff'), + url('font/genericons-regular-webfont.ttf') format('truetype'), + url('font/genericons-regular-webfont.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; + +} + +Note: the above only works if you don't use a CDN. If you do, or don't know what that is, you should use the syntax that's embedded in genericons.css. + +From then on, you can create an icon like this: + +.my-icon:before { + content: '\f101'; + display: inline-block; + -webkit-font-smoothing: antialiased; + font: normal 16px/1 'Genericons'; + vertical-align: top; +} + +This will output a comment icon before every element with the class "my-icon". The "content: '\f101';" part of this CSS is easily copied from the helper tool at http://genericons.com/ + +You can also use the bundled example.css if you'd rather insert the icons using HTML tags. + + +_ _ ____ ___ ____ ____ +|\ | | | | |___ [__ +| \| |__| | |___ ___] + + +Photoshop mockups: + +Genericons-Regular.otf found in the root directory of this zip has not been web-font-ified. So you can drop it in your system fonts folder and use the font in Photoshop if you like. + +For those of you using Genericons in your Photoshop mockup, remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system. + +Pixel grid: + +Note that Genericons has been designed for a 16x16 pixel grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll also look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible. + +Also note the CSS property "-webkit-font-smoothing: antialiased". That makes the icons look great in WebKit browsers. Please see http://noscope.com/2012/font-smoothing for more info. + +Updates: + +We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended. + + + +____ _ _ ____ _ _ ____ ____ _ ____ ____ +| |__| |__| |\ | | __ |___ | | | | __ +|___ | | | | | \| |__] |___ |___ |__| |__] + +V3.0.3: +Bunch of updates mostly. +- Two new icons, Dropbox and Fullscreen. +- Updates to all icons containing an exclamation mark. +- Updates to Image and Quote. +- Nicer "Share" icon. +- Bigger default Linkedin icon. + +V3.0.2: +A slew of new stuff and updates. +- Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket. +- New generic icons: heart, lock and print. +- New editing icons: code, bold, italic, image +- New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag. +- The hyperlink icon has been updated to be clearer, chunkier. +- The "home" icon has been updated for style, size and clarity. +- The email icon has been updated for style and clarity, and to fit with the new subscribe icons. +- The document icon has been updated for style. +- The "pin" icon has been updated for style and clarity. +- The Twitter icon has been scaled down to fit with the other social icons. + +V3.0.1: +Mostly maintenance. +- Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon. +- Added inverse Google+ and Path. +- Replaced tabs with spaces in the helper CSS. +- Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway. + +V3.0: +Mainly maintenance and a few new icons. +- Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio +- Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big. +- So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu. +- Genericons.com now has a mini release blog. +- The CSS has prettier formatting, props Konstantin Obenland. + +V2.09: +Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet. + +V2.06: +Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox. + +V2.05: +Added a bunch of new icons, including upload to cloud, download to cloud, many more. + +V2: +Initial public release \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.eot b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.eot new file mode 100644 index 000000000..46574695e Binary files /dev/null and b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.eot differ diff --git a/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.svg b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.svg new file mode 100644 index 000000000..ef236c102 --- /dev/null +++ b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.ttf b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.ttf new file mode 100644 index 000000000..b6f125e7e Binary files /dev/null and b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.ttf differ diff --git a/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.woff b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.woff new file mode 100644 index 000000000..da8be383d Binary files /dev/null and b/wp-content/themes/twentythirteen/genericons/font/genericons-regular-webfont.woff differ diff --git a/wp-content/themes/twentythirteen/genericons/genericons.css b/wp-content/themes/twentythirteen/genericons/genericons.css new file mode 100644 index 000000000..b10b86fcf --- /dev/null +++ b/wp-content/themes/twentythirteen/genericons/genericons.css @@ -0,0 +1,197 @@ +/** + + Genericons Helper CSS + +*/ + + +/** + * The font was graciously generated by Font Squirrel (http://www.fontsquirrel.com). We love those guys. + */ + +@font-face { + font-family: 'Genericons'; + src: url('font/genericons-regular-webfont.eot'); +} + +@font-face { + font-family: 'Genericons'; + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAENIABEAAAAAatQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABgAAAABwAAAAcaii0EkdERUYAAAGcAAAAHQAAACAArQAET1MvMgAAAbwAAABCAAAAYJdbaIVjbWFwAAACAAAAAJgAAAGyqWnWY2N2dCAAAAKYAAAADgAAAA4BYgHJZnBnbQAAAqgAAAGxAAACZVO0L6dnYXNwAAAEXAAAAAgAAAAIAAAAEGdseWYAAARkAAA5fgAAWkD4H3YjaGVhZAAAPeQAAAArAAAANgUfUT9oaGVhAAA+EAAAABwAAAAkEAMH3WhtdHgAAD4sAAAAiAAAAQpVkUB7bG9jYQAAPrQAAAECAAABAoDMauhtYXhwAAA/uAAAACAAAAAgAagCQm5hbWUAAD/YAAABYgAAAthC114IcG9zdAAAQTwAAAHUAAAFCuMEJONwcmVwAABDEAAAAC4AAAAusPIrFHdlYmYAAENAAAAABgAAAAbRQFLPAAAAAQAAAADMPaLPAAAAAM71j4QAAAAAzvWBvnjaY2BkYGDgA2IJBhBgYmAEwnogZgHzGAAJvwCyAAAAeNpjYGb/zDiBgZWBhdWY5QwDA8NMCM10hsEIzAdKYQeh3uF+DA6qf74ys6X9S2Ng4GBg0AAKMyIpUWBgBACOigvWAAB42mNgYGBmgGAZBkYGEFgD5DGC+SwME4C0AhCyMDCo/vnI+Ynzk+Qn1c8cXzi/SH7R/GL5xfNL5JfMLyVfmf//B6tg+MTwSeCTwmeGLwxfBL4ofDH44vAl4EvCl4KvDP//32LnZ+Hj4+PgY+LV4DHk0eZR5ZHnkeQR5uHlYeeugdqOFzCyMcCVMTIBCSZ0BQzDHgAA5FwqMwAAAQkARQBBAGYAfwC3AAB42l1Ru05bQRDdDQ8DgcTYIDnaFLOZkMZ7oQUJxNWNYmQ7heUIaTdykYtxAR9AgUQN2q8ZoKGkSJsGIRdIfEI+IRIza4iiNDs7s3POmTNLypGqd+lrz1PnJJDC3QbNNv1OSLWzAPek6+uNjLSDB1psZvTKdfv+Cwab0ZQ7agDlPW8pDxlNO4FatKf+0fwKhvv8H/M7GLQ00/TUOgnpIQTmm3FLg+8ZzbrLD/qC1eFiMDCkmKbiLj+mUv63NOdqy7C1kdG8gzMR+ck0QFNrbQSa/tQh1fNxFEuQy6axNpiYsv4kE8GFyXRVU7XM+NrBXbKz6GCDKs2BB9jDVnkMHg4PJhTStyTKLA0R9mKrxAgRkxwKOeXcyf6kQPlIEsa8SUo744a1BsaR18CgNk+z/zybTW1vHcL4WRzBd78ZSzr4yIbaGBFiO2IpgAlEQkZV+YYaz70sBuRS+89AlIDl8Y9/nQi07thEPJe1dQ4xVgh6ftvc8suKu1a5zotCd2+qaqjSKc37Xs6+xwOeHgvDQWPBm8/7/kqB+jwsrjRoDgRDejd6/6K16oirvBc+sifTv7FaAAAAAAEAAf//AA942q18C3xU1bnvWnvveSaZmT3PZJKZzHtCJpkJ88hkIIQhCAECCAQCCCooggTkjS9q3Vqpioo9tqJVK2hbsdpj90xA2mJrjtVaW0fLFbmt1h6xp1ptPcfe9rSKmc39vrVnQhBsz/39bmBm7732npm1vvU9/t9jLaIh8Ef/yj1DeKIlBlJLzIRMFP1i2Mbb/DXUZeNdIv2r0vPEE166+An4u/MJ7pnyBZeS0+R0+XVymi6HE+X4aaoQSsb9TSREyxEOvlQjwXfrSA18s424yJVEJgmZlmQhIVtSsqYki0lZn5DtKdlQkh1JuTYh15WoXJ+QhRNFoq9NJpOyrlTUCcbYcF7HG/C9xhCTdZaCncZkV6lgsiaTRbsL79sthlihgcZIx0Sa8TvO9+KgO2Xo7GnCSWVJIGWJk07DNUckiY57KZUj4Sjc1cE/GION9BLZmJDNJdkGHYR+2mEwJ6DHcp2lIEJ/dKWCg8YKYp1oHRYMRj7kypGCzQxXVKsjcNUxkVisIZ9gtXCCL0TszmRnOhKg5BW6mj5KV7/yirJfuUTZT5P7ju/bd5xPjG985RXuIWzdhyQWiEQlnaSVGHVdxE+uZ7SFvvkSciMQMyHzpWEj79DH5JqSrIfeBlhva0tyraVQD731lGSPpWCFM22pEIR+11LRWtAbczm5XpS5nOyBUfAOM/RbtoqyBsbS6IOxaKm1FtscYoHT5GBMNuAYv00jIoVtdpJKkkyaBAPEle70OR12rS8iAYHZ/0+ArHmq+8EPqVY59cMfKJ9IR6nx6FHlb0epxCPNTxNpVBJ8B1aV34a7Y0/uPnp09y3PPIPj5oh+PF9Nx3EX9LWpFDKWIYm8BYxVl6SyJSGTE7KQBErIvKWgp4wU2qRcY4GxxoBYOGsEB+AXaeWVghfQVoHuKHCEA0fwUn1XiHprVALRwSYtzgEHFyJcCvABDTAV3sNTCfimjqQJlU2sK9AvTWnYoCEwKcYS8pKhVDAD5Y1EtALFCxoDHPkccnCFdjpRI8bh207SnpN3bz1Ntt6tkfafPLn/C8+3lP8gcfe3PM94FH5JS4iROMhKImsTspgCZpStSeSJGkaZWiCIk/WCUUP9/aKRR8kxakGmgEI1QBRTSTZZZAdyUNFhwrsOEeTKpcoVEMdOgmKyM+M/cwryIynHjw/t46onQDSQr+PKcUr2DY07JRzSjNGlgaTIPoKiDnMSS8he4NA065++VNQT/GG9AN3SWwpu6Fa8VIy7sTE+ERrjlkIdNDpKxToHNtZBF2WHpRCFRn+pGPVjYzQE/c4Add164GtjfS5XqIsD/9a4PDHg30LUAc3e1hzwdawGJVYMTWQySsV0Z9ahdYgonxkxHc14KVwAH+MdmBY412XwTiSAT7kcMENkaDC/5cCW/OAQ42aCfD3WxI1QafX+8H25JYq0YMuWBVRakrsvvH+1IgFjcxqKh91K5RHKHlHUR0DWgbvIiA5pZiVB0kZkf0K2pXCKgMFrU0wThRJy/QmQ6EIY5qkgWICNGmAkDcBGKX+S9Tjop2IwEKFZPw5KbYsB2x5YJZBVBw6sUvJKXlp1gEfN8vivsEVS8sjR7Ca8K3k6ckBZJf3qcSqdaSGEp1U50EAPfWRmRctT7Kj+BOoks6XghKlpKhUCMB9mmI9ho9VWj1rEKRYafDgHFGTgsNZgdjibKrMAHabhznQ06+VRElw9NB2BC+qwm6gOf5TJZaa/f4V7gscyOXNR34UX9q1Ydnl8YBJPkNE+hVd///H+FY1TZsyNzr+z86K+o7882rdi+Qc3L33srslo/uCV1oNGIevIBiJfkZAvKcmtqEGofCXjxs6S3GkpNFKU2MJ66H0n9LPYP29BDvRko/i0xuLovmDJZUzVX3IFcJTlMrjRKuZrjDYPaWlL52cPXooD1VgPBULhjiQbnJi2klAqKRCrw0I02kgm3ZlJR3sEfOMi0Tg1cbpIVKuL82aqdWkddi/v0upMNE6jcSHaSk3U6fIKLq+uM2tHNRENkUepje765TG6i1ofVa5TfhEK0BnzrpMGs+u1Rr3ZJtSlui/PXr1nz9XZy3oSRuOkjvXZQem6uZnapqnLlvo4gyfQ6RFqGwyimzd43IE6ytdZm0OdUxbFaSCk/EK5TiC/pF+AL39U+U9l9zGlUP7jOl1zg/D8wpsnG5pnDT217ZGt5pZZl06knGCdGPZznD88UdRy3D03bN+/7amhWT594qI6E+3KCnXBxnpOV+O2wtiau/y83t3Q3OAEXZS8Vqj3addxTrRxOnxjc2MmjYzzJ5E+soDsIMU6QmJypITao7kkd6nztZDZNwuIhaVwIcxXbxLV6yKYsgtBHvJ1mto6wdnUHGppz0yexearPgLtRgOxtfZMzfcumIvT1Cwe0tMmz2Q877IW/YkLcmjj6ilMmA/mywJqHkw3b7e6Okk2Eq2l0awzlOWiWkKd/mSW47XE5rT1CNlIKBjQUi/n6hRcXNTE2bwUPmPNhr6FM0UfgpftW99SPlR2K2vg9WFox8Yb6Hffs+SVd5Wtf/c9R/+6567h55Q/U/FXdNbho/7v/Va57W9rf649MO+O9RO+qBz5gU+iC5yeqPYJOvd695f7nv77YtOkFZ6HXq5X/sQnz/3+b8HvcrMPKq9eW6Kd8zqkwWT9V5yz4tT9tyXK0U8fGFlA2+gtc5RjmvWPKY9xk3w9vaEv3mMpb/GkFtf6tY3UM5y7dEh5tPF+5ef3baSLR+JMfiTaBjjkN6DNYdgpXxY41JlKwmEKsGicZtJZp+BC/k4lXZ1ZrQ5fyLImXgj6pI4WSn52zTOhqDeRvPHxBUvnLkvuoXveMf7q/gMbpfWt11y1dvYm2rPz6XeUX39LeZUe03yDu3uzrs7981s0MT756CVXLH7iFzXR9vv/9w731Fv66to3L9D59Nd//MEv7l+KfSOAkXQSiZILCKpIUJYBMG9JWUzIvpTsLMlulXVaAHeeQDAKMNRgAVwpuwBLpQoTgHlcgOZkd47BhPHaVPTb/FNQv7qykWDAxHloEMFDICLtG9KQoX37hpR3qalWeTfW+5h2/vpL7lnWpijltqF9iBHw9qfwzr1IhZHa7iz9P8bsJTsv+JMyWs4hwAOLTyTNe9D3BjKf6VMHs+K2ZJFQNG7EBRYPUIVetexupv+5JHZdTBZd9fiMy2GIFesZNq4nYAsbKzY8JaZ7uFTS2Ux54FAP5+fRmHPSb9Nrn7wqO+R26/5tborONikvKCP8SzRBufl7NuW1PK+8m59helU5NnqEn01A21fpawbcsRiQx1qyl8h1CXlpSW5OFMJpwGSNpcKEOKD4RSqh142T0W6Q0QuT8ppSsXsN9rG7H4a0xlJYBe0guFcC7btRcA0ouDbnkuUXM6FtXorCTPUGYrcFsn0rL161BmW1UTzkjM3qR0UsL7IWWjpQaq0WaydIrROkVgtSG0GppVpbKtk5lXY6tTqtjtp40LadLqfa5qVqYw+XSaOuNSDjulCSBYpsHYnytNMKWho4WCft/YjOpRvp3I/27v1IOaR8TTn0UfpUSblx5u50eGMw4LCZ7G0TaUS+YYndbLfvvjCyIRi02KjZEptIgwvrATnU2zmbxqKt1eh5fv4k4ybl/QdfVR6iF27ZsedmgfuY3nrkjcs1U/g5n/kVOOO4Pym71gieh6hJw/G0OcBruNH7OJEu03EBHzVio63ByUHrw7T2wtxKf3x5JiB4jY019SanaDfmBukVm58/9XV/XKvhDpb3DtHtb7463NJ66wOqfzE2tzPIcnIFeYjISxNyS0qeXUK+AxA5HRyNlGwvFafbcfqme2H6GoAX16pzjJ4bOmpg8WV3Ug6Btk4WAyF8NNAF3LgO5lcHHscwb5q5AmctIOaNmhrvhFhv/+LB1WyuZ8NcF0lsJqjgAm+Cc128C+3udPEItfiDockrL2Pm1Cbi5KCZpK6ANhjgM6qkeqhfDIp+hwrrUWrBzIJ51cP9LDtNZf0BLd9DXWBPNS6cVZBgW6TTBd/k1AJrSDeUvB6fu9lrnW07cp8q2uCknGaqDyCtotFcfDcfNIdsHlHUx+ceumjgwK3lR278/YzcG9LiObbBULfHo9PR8qElt01z3L3ruh85HdKuG16i79Lf38hPyfm7wx4qaKehRlD9H/zqUfiVJufdT23g3LVNYqO93mFMz5x815GtRzr2Xnbqm0vWU9pQN7lhYmBigyds0V8hdD7ya0H4/TcPjAjCL4mKycCAap8Br94CunkWQ9owB3wCcEwVaasT5IEJ8pYYUtYBtinUmYDCHrEghhCWhepF6yGLua09rqIyu3MyBQAZp6A6bKA3gMLpbA9NJREjw3mcA2Wo0WX8XmrhAKVdsZBbvJauGRhYZ6NzlKcBls2usQ9OnTTXT2fn1t2+KNSbSvh9jhrlCIU/rTj7sstm969aferb/L+P+rkJnY3JmZNWzyj/J9e15bsbsjW2xsZgk3iX+23lPeU/Lz6LT5sAe2bJDUwDARL2x0DtdDBn0Oc7IcqdKdkG/pdFdsP4u9j4wQO2MCfYy/wG2a9yawwcEkuhTVVDOSCL18NMgOwXC/UuIE7AKmdyckwsdHQiiXxwu9CSUV3h8SYC0PbnkosRixkOoNWYyUCbQMnCaXT6ALegd/oiC9WBF/x1qtdbZqR2U/3B25MLuwIW5ePxRmSfcO2kCy+c1D1v/qdH+IbR9+jRdltL17CyjL74vafr2yINW4AZngRAtQCw1DTyXVJ0In4yJ+QJJaSQFgjSywiSKckZS6EJRg52MmAptDOXuTAdDp3uH/bUfDSHOGJGk9wAVBwp2OkncmRk2GqP2GJFePft8e0JakFMc+SQ1d7gjsTxj447l/NuWmjKgCC7clNQkANiUevswLN2a8E8AanZMQF9NNLco0o2mCoEyk6rw84J4L9EOVDQ0UjWpmIKJ3MGtKi+rSzqYOIcdhBeHaLlaIR7su/eYzT2lEwTL+94QvnZi5d/LzDbErj4Xp3n0Za71g4sC08xua67YucPLlc++PiOD7+xbMCq01kMuqDzxi8Jf7rqN688fOl1Lymf3vk35eqTF+eV3+Z2fbXz4C5OXnjNHUc3LErd81zu8q98n058+gQ1XX7wzWu/usbhrp/SUm8xpKgaXhvDsINkNymakO4AO2Yn5C60kcwmLmWkD5fksKWQAkrPLclzLYWZcDa5JE9W3V/wPZYBI85NAW1iiYHFqC9nikdMGltz1zTLArycbC04pyIBnSb0QhYDTWeDF2IwEps7PCE1eeqCz3geiGSDgWhnFoCpSj4mu+BrOV3OTmDSbGckClRmWAHJDNTPomEErgVVC/ABpsJ1tuOh+gZfvXuOZ1bT3gWPlvdc8tjf9971f75zfW5ondUjcBZeozFd0CeNbH3p5IJ9lyy63FYz0ds3fdF2i96w1VavBbT61Fl+hnIJvP7z0dYd66g703+ETv3ZtuPfvGzeTY8NL9/zWqveZDPkDTanOP/61cVbF7751Nf+fu/OBfGHr27tXXr/1thCm00JD6zecy0dZX70AW6VbpXmAChGM2khTBeyOIlJDRZRNUJjKRiA4nXV4JDV4vR1WiI+oXI88Fe67K9/VR7n7qycCN9VHv9r5ZwdK7iY6G4EF8ZPMgRjnPUl2ZqQTSwOh9E28D7ADZa1GFsrEo0FZcBkHa5r8vhUxncBdzdSaypJic0aDvFwCUyNxi3CowxopcXX2Vcu/MrGb5TpJrq61qL8Sbnjlhn52yz6LVu7Znfb0xOPLZdv1Fy+cbFysvwX5ST93/QnlKcr9LXKgOf+lbJMzRfSWTRh09+/lTD6VGOKZvDjrYRimJMgWsNgKzlXuYUNVDq5XyAYjxqFd45FfdD1xhYF35vRSUd60F8RSdsCejoAnpxsSMC3UjmYkJtOYLTSmSyEkCQWjH/VoZlJiXZmgsGsd2ZFGHUUeVFEoBpEiAYg7Vc/dbtvufTiGzatWHbtl2+f290mivQJZfC02N4xe84G4dHyHdf1Ttvma3bau6h7WaihPf4AfZk20BfuWH7xlHzwLNsRJDEymdzMbAdYCW9CjpbkhoQcSMkJFp4SSrJgAaGlcneFKAhhfcAoquCCp4ADabRgpExOMddzCkhs2AcjCuTkCeKw19PGvMpGjM2QQkMUZLnRF27BtoRYCE04nwEB9z7FAjZ+EEEwcOBP+UMVTgyrxgWckEiMgkieZUWk/oyGZPqVjyzKcWWZctyifERZFPGk8hzX3J+RMv3s7SxDMoSNPOntwXhd2/Ge3mbluZP4oerT/RlQZ4AtKGALhdiJCzzzZqBeFOgXB9+cyglGHowfWjAYL3sZ9GuB9zFz0gF0aXDA6J31Tcjsckg8pNUgnnOhHRgOhFvbEP6xSFyWdiZdFOmho8gGNDKVRm1UDPOusMi7snAe1YiarIG6MpR4uB+LLSL3Y4+n3CvarbZyr+eWb387w2mUd957j3oPvv/BB72c5j3lHep9r/wpvffbvJO+1lxPX6upUdrrm5V2n1Npq6mhx50PbdqkPK48TtPP0q4HnqWp8rMPPfRQOUCXPfgs1/TsA3RZ+dlNvzmLhzJkKXmGPMZ4yF6SexLy90rynETV9fnRONcHsYUaWLoHzq4pydeoxAKm+TGGmNqAaZbm5HvEQ88sX9d7AOlyjbVYJ1yNWqJBzNtqNXZvoCPZ3TNn3qVbbv/6Y/9aHGaAuccOtjUyaTIC5jnguD5N9RZv97zvY7xTswjudSRTuc/xjIRUMoSgOM5FUfJAxwjRSCgasWY7Q1lA1wLHJFLIwjSgYz+V70RD4oqwpwSdltPg/U40G3E0wFoA1U5mR1B44RJvZ+PgUEbQvOCVDo033AS74vJyzGTjBWWP4ldgMIFMwbhXJMSU3nl8rp436bVv/Ynetnby0n0vbd8hRztnb9usPH3wceWDvjl1S5fR9iLn/6Vy8Gf3iY994Vrq2zV31r3lr93Dm+hl1PrQN6n3slDgSuU3+7+hvH7VVWuoqH/gqk3/PnmKs3/mmxcusTtSyZUrF0TSejGVXjwwOVerjTW3JOKz6jiTweGcMbfPFo9Y+2KxFf45Wm5wd+8FV3jqw+9s3taVjQQ/uOlL3+e1Swfv2HbtwIqfUIdxw+K1yl+v2jHlc1y6t5Tb3vz7y7fdvPPYQ0P2jueuu0956tpdWzyNv93/EL3q6w/+L6/W8rZy74dfOz27z5xzfE2598R+GMU26c5duegX79Xqdm7eoPz6+mue9/oHLl7xzpx59u6eSy9bvLjeNdHVN2FZ3yyNtjs7EJ5qcWhoV4z3zvF4/UIsMHdRNKs3NDRfcMW0DQmr5ao752xYF4tt33nddXe6bG/cvnf79tZgU4A6fsJteLZnnn1yz/oNpOoj6gnw/nxyJbmR3EFvIrImIa8tyVJCvjUl31SSdyeL0k3o8kl7DLHiTRKe3vQlcBRvssjXIyoHxBlNyJtSciuIyJ0JOXFCXl8avnB9Qh+TSQkDHxeW5PWWQp6l+2SXRc6W5GwCTgo7oMlXGr7ct0PNcfkshT3QdHNSvr0k35Is3r4Hf+32W+GH99yOp3skcDvvUrGsYevIsIplZ1nkmSOFQe4TednID4UdIy1qc59FnjFSWMp/Ii8fKcyaqYeG4Zl9M2yxQt8MPXxouG/WTFtMHrQMLx1cBq2Dy/TyUsvwsqXLbTFyZMbMvlmDS5ctj1f+6DktDArn14NIZjSbUKxdYnHl2utRcH07QDeK7ihahsKeGtAFE0C0pbXQSgDRoTa4SSw6XUzKo9dDszuxfoeKGuxeQGs94P/GhQSNc2mQPowqxwX0dH0gYBhKBqNqN6G3zLlMvM7EZ9M9fLYHmsEHdoDdAQ+44tMBGNSZABXGeZphTrQDHWopf90LX9j5i39Zl6zzeTpD/iU2m6ve5gq3dfvqLc3eeL39nvuURuXjb8ye55u+8ouzbV16quUESo2NJtuUOXfuSiVnt1hfDcSmheqDA7Paa4O2VM+0UHPt0986+rurU00r4l2XX5B0TbampzRNWjO9w8EfZYAKnGP6y95rLu1KDm6VprfMmNKebfb0mm2xjoTT6Yn09ixPxuZPhQvLkpvyBxd3bbikr1XDiYJZZ6ox69xtcVuDoHPGfJ7++X2WxMKOVrOhRtTxfCiebU2mvFvvOiAc2pQPtuZWbt+R3jrZ5rHmLtq6qXzqjF+uYvovg87vAr6/CP3qvgTLrq5A9V5IA3cBgzYni+ksslw6AbyetSAUAJtQWAnKPU1hzi9cMohznhULgb4cWjorThTv5ZupVwMk16CWFE1qyB/OvBygIL/YAfoT9GtcGw12MBBkovgRXZy/qaZv+syDBwuP3L9rpbuhtuWqi6/ItsQ2br5285VLp4lWytWIvpap4fSmxTNsVv8F07sstGvaK7vWu7jg1EUrVg7k7bbeX+/NtTQ28GJjvcFwUueaNEH45iM/XTl/22QfZ2pqMBo0tllLvvLo725YfvtA1qapq9NplT/ytYFAe7SlzsY1eGvraH0gZgq188Xyu3W+lfO/PffmFXPa/WY95Sw3JKe1r1owb1JbTe1LBt/6TYg37wI6bgc6+sm14JUi3mopFRtakHANDiDchoR8eUlekmApwSXVlCCVr0vI3hPyCnBRS8WAl0WU1oGUewN46iXwyRWWQpyB+GK8jmUNe0D0rwfqB7wgTr5cIb4CjKPgaGjRz9uJAlUnymYQspYGuA1Sd/kGkCpzPMDuLRGH67ykE0/1iNiZV0oxnl1xTHVOHXOPoiA6oQh4SFlw/NH4MfSKmZ3I+H9wH6PhzuoTldvBAE6pw67ewH/wzRXkW71/15dO7r7rmhn9T9Kud3bbUvRLJ2/ZtfHCuU8qP3tntzid3tmZXnrNkX1bN3dPDgSnTFoyb9PyxqDfLwKoXLm6LebzOhoSmUCgoX5SbtHg5js2bsjlsumVl37x4ik5v79n2vr57QlXo9PR5IulgyHNfbtPfqm/dvc7ys+eXLVkaDNcTTJ9+R3a9eTgwI7yX/rnz01MjccXL1m3bEpPJNrYUG/XG6xml90TD4R8vp4OmzMUXJlMtLc3uFuic2avXnvBtJYWN4CyZm8yP6HN6fQF0hNdbr+f+QcgY1rMcSbJCiK3If4uRttYGrcOpzyVkHUnZLFUFHXYKLZiLYjYwN697D0IHKATWaEIBrvTWIihg9l0wLRGEVARllQE7QgThMoOE4laM0Wwbdfqxt5iNOlk2Bu8YSqNTNy0Ok91tW6rf/lMi15PD2T6OyJO+N+fySMeVvLTdvRd1ErB97nkkY9v14jt/qbFDyxaciAc6c9M6K3zR9kbPDrU39LRwsIBJbpXl9JtJxPJJDKbLCJryEayg9xAryaYe5xaki9LyMtLxeWXwWjI8kHg55Usgr4hJc8rFdPrrsG6mK6E/IUUxmEBYTsS8paSvEP1qr6YkNtPyN2l4WR3+5gVTZbkbkuhH2RiQUleYCmshbOhkjxkYcGdSEnehtbYVhq+LjJdj8Gwwo2VoM9P/rJLtYg6i6wfKbiFT+SGkR/++eC/PYLNBXeDHsNB9SOFWrhTN0Ke1ulr6+ob3FXL95lrZve620VrIZEGDdgvDvOaLiZbC6zF1oGlqBbXisNT+5azUP6QdXjCiktYAnW6mDdYHE3eq7Zs3/kFbIhYC6FrMOKxaDlMb3dOnicejrQnQpOnq8m7w+A4kZ3X4QUvFjVNffjdDmtB2wh2c8cW6ILNynyuSnLKBrLq0qBkO5kRjIZ5p0uNMamsgUAZhDdOs3Z4HMMgTrsTYTOGkjFH4GQhKbs2YE+D18KEGy6ZEIfSnexOtegHv5qFUkpXD6zpPvL7lRqr1UFz9QMdc9avn9O3VqOcmvfb73WvG9jZFTe9oDylbFP+9QVLW2ZtS2KJp23CpIVP0OB3n6TBJ55Q3nryu8pb26bFE9N6V3pbzV13/0uXudVrHvzB0UH6L9MugVba0Z5vb8/TgY5YbkK78JWBqwdWG+hLzppazawJE9d/bf3qvm7li7WrBq8eyK5oTE689d3du39/a7KzcXkm0dTfE8q9cuLpoaHDGzbC+ycre3tX9t4f85q7uszemHlw8H3Wwl+PP9Fe/vGUec0dLZMI1qVwGIOWiAd8wzuI3JiQ21KytlTUNqKYaikwdgtj3tpS1XE8U6pTX5Lr1cismKyk7QJqhUer6kLqeZj1RlasVJNjir1Q247soG0EC9sQCrPpFp82mC31zT4/skGtVTbm1PIwtbajh/qcLocummGlHDyLcYUzriy7PYX6WfUS+Lu6xAUJzYvU+aLmG+vhlNKX7tr7Er9w/TfwQveS8h8/4xcee8WfSPjpe7f96NnbNrR3rAzE4wGlec9zP73tf3XEj+O9Xx2746c/qdbr6DCvHSJTmL/oLMkeFm1ATzHMKCGWZFEtPACvMALjbRQxOF+LI/Q4mRVTS1Uq4QKsKOOI3UWzzmTWRTuRt3QGGgnoME0hgHtfLSSjJEKHhPDesIYOhed0ZsLKG8qb4Y0hLPZgeUvpGJab0dX01qGIsk/I5wU6FBmaA8/RSDiMGAhzf8+C39vL6rDU6j5iM2htGZeBZh2UN2glehVnU+4u/5kz063lD4WH6Ta67eHyR5Sz043lPyt3062cWfka/ygNKt9XXuYP0OXKy8qRcnb7OppSSuu2Kz/hfkxnKW8pB/kXaFo5qPwG7QTWwmCtk5U4yLgCGFuiEqSi4rklL5Xxw8iwxgXLk6oDHdqHNSz70P5wwKlarPMLsnyroYR1VMCOHHx7bQLrjUjBgHVaOrU4xQVYmAdQjaZLgi8pS5KU50dOA9ODZwRoUSpX6ge12F+B1JJ6ghWOWBkDU25EZi+YWKcN1C/SM+WAGEIrY+3KEFgNHi4VuBQyeNU/Vm/D+KeZhMnFjIMcjIOQfSIs0KCyDwaogiU5OBZeAPkp+ICRhusEuwf9i4agaD1c69A0hcIsguBxwDVmV/3hasHiWYECK3gNYELTcS5gophLxlKczT+iGvDnNT/avPlHyqfKO8qnPxJXPPj6B68/uEI90G9LtPUivvCZh+CMM5x5Cg7KQ/QNZYVyYgVRa8W0qD+A7MTLZkUoYe4ea0StCbkGa4sKts9MO6koWo6c3E/J/pNlwoopEWBgWPI04fepZZRn6FhDGkkbuapaQRnDqpJirBmVVCwKSqo+AVxQ0BiSrJRQl6RyOxNRtZaSA8qqcWMMAoZKxQmY5CQTPPDJkKWgZYSXDRbsKYa/4tVSukzKwV4irQb5QGb9oIeEdOdkqrJwIJIBFkYuAoABQ/iU9Gd4FogbZcG7iFtyRyLpCFhVCYQS/j6FZ/E+x566KB2JuBUCz7jH1WpVxtxJ7quOOZOQ0ykspjl3rNnzjvWcYXVV8ELDR19CYCCn4yY5NVJo03wit4+QYlt7CtHAMBzTYzhAqwFma4pEWya0MubLmEG+Erl/Sp2UfzLnpS4Pb9eBzo6CQbb9YyKBKaK8089zkrbd7W7SbXzq8+nF+VwcRzmNEcjWpIPnaYHUnkW3asQzQVIkSyaTqWQ6OVKlZFOiEOpIpVgx3kSgoi9RbEl3p6DFD6yRmYLYrS1R6MpDS3upkJsG1+cS/YJxRG8CmeV8cK+5VBACeLRguLzQ0gbn0VKhFQssohZmFNNdcJ4qFTon4ZEVWRS0eTifWiroe/E4NmEz/ikf2qCVh1f1+Hnnn0d56Tx/5yc7Kk+qas1zirDHtzP/mw7SQd31uusBVxDaw2WxAis5lWKlINVFAmaqtbt0UQrqabDW3tVB7/jd4fCGyOFI5DDXfDg8FDkcDh/+nbLzghV0sD29UL0fPhwZCh8un8Sn8JF34H6SjKv/tsGvzWcWx4VzzDStl2laNdbtVvVrM9abYmxbI5gsCDkMiE5IwYUlmaac3CQOU1JjUFVruodLejnw8iiLbcep1YLV0xaCzFxRiZvpf0mK+PXv73z9wfCZwmmhv6I1d37/64oo0f/avOJBjlf2Ysk02FlWOsef1Xc/WVvtvZdVzVXGEDh3DMHKGA7jGLy+84zCKw4TR00Dq5ezygYcVpG67Syy/I9GxWMd/j8e2a2c9M8Gp6iMcPb4JpDhceMLM10WTBa9TIt7W8A5bGaRgmY/qOXK2FvHjb0Fo4koTnIgWYyyGEQ0DJ9qieJpCxa3RMcoFEPpAwrJQk6OikVXE0vfua0FDdZO/P8j1ljE7Z8RrRoe+x+Q7qxYlgAS1KYn2uOkjtVYxpBLahKytYTJuWjFFrIFGUAvcMs9J8YlvMBLbMcclwd4pUbk670sgzNBPGQUrM0BptGjCC90JkeTH9c/YM2Ex4cDFymiCgCLCCqiPOCCZGcW0Cr4VDrO0ulzWrQ+axUQnbqC1tA2WrOGfqpor1D+Wzmu/PeaP9Jt81741fNz6U7lroff3vhCv1DJbu1nsEkg9NS67dvXKhpFs24bYMpTyl3zBwbm0R10+yOL5pc/VB8+yVVhFWDaKi0QzzYCLVIkzzxyoIBBpUA6gXUypNDcCi6GpUnMsenOG4nO7HJ7wpF2LO+VBWtRa7XlquME51LHBkZdZuqiUcr8TRqxZbFsAdUXkiEYsFEni76y8e77t2/fvW4LDEu586PbwhdpyEWj7Sf3t3UqbSY33sCB//k2ei0jyL5/u5QeN8FtddSX3h1fNB8/9yZ+rjyw/6RJaessH7k7juP/863KbUgTehk93tm2/yRR6w05ieHUGkIMHGbTDBS8B06ieWUE3mheUkbYmzLCk7Ov2TNErbdktQ416AvQsS+R+PzoCLzxeWl0hL2NjgDIPeuaPYMyLVUwXw1orHZyC8EqCUR5rmSyaGbCbDaBWIqOBjSkrNC8YAwzm8pkOg4uQbXm3AI8aivJtupqIcwa1LNEbSEBfGsBtFHkAkEMo7vsWMMzQV37YgDGbcPFMJwhx9zFcAVcahyIeMf/U7O0RDWczGwi0OzPUAQeZJRUrB5aOGxAJIJY7DRxoxlkWVWpTLiRcn78C9oFcxpxHbN3hHrB57kXcDAxgGtFeaqpwdbfHKFv0jeP0N+UDx8+JNyoPF1+n85VDnEuOodyrvL7aL9Uv0aCqTWSVpaf0QGVQMQ11fovdLaFEq6IKegxYEYxHm3gdLggBiuWJOQNaRTr7UF1CPCFoEUUcFHU8v8xPx+1iQFXwhgoWwpE0ZHhySm4AyOEMeJ6mnKeB3IoqL8FNtcj2hH4nJ7VqeFnhSzNoozgSwJHbWQUGQ01VvsqbmCVMg/f4ZMjvKTkR+EbMCmg3ivX4XvFR4Rvhm/1MVTGw4gNTNeDx2VE+eWJqEZyKVv0gz0m6kBxSRgu1ygzl64ssSGOszU6tsahF6tHCqbGFKsf0TN30YZpX7bogZ4o6G3AkipSNldX1bDCqka2BgIoPBYIEtkyAH+aC8EpAE03dfgtHAlRsuXAFvivVtacJuC+HztG99KFtOmnm06TXyjfUSKchT2CU6OW3hyjq18Bv4ls+qnyH8r3lG3HqEDfoEt/gWMgYHt1f9Q9xWhdX/FG7Uy7m6HjDQk0b5iLiGRpD3W6qBM9aFvKVu3q/G3LuI9zDz44ifv7sm0HP/kjd0NqOK38helbSl7eK7x+8fTpF38a2/uyhi2tGz1c1a38WG2JlURInFxKEHg0lIoNGLMnDU4wryDoTSU5jnHI1lJloaAZhbpo1uBD5loMBCcScssJuU0NAbW1YJi+IaBhtqapGUQ22qaWUfhR7zpd6AlGWcESVwnJsaVLWlZKlq36ihLt7KdTnrv5/WXhOUORHQ/sP3nl3KHw1of2nwQu/3m/8pPnbv7Dcko5NiGgY8l3j69ZHh6aG9l2cr+yZmhOeDs6lthI6TY2I6SyPoytdYpiVWIEC+2wUNtaKlrZUiYr5jhgCnxqBfpY9KuJrU1DBXZGbemZI88K0s1NoLY07gjaHrtYqG3G5CFYnAYW8NKLhRq2nqbWigqM5tSot2h3+s6sWGKxr1TFvawsaQKu5ghbjgfdB80jwQGvlE8QPvB5VPK4TIlTlyepLuXzSjdecQTvlCW2ZI/VEgFH3qNFeTERJ8w3Lj1D7ewaVwRhV7EUKOSC3YJDEmpzLBdWAUV2LYavquVXVKogoOULlPXK+gUHKwsHxxDPB68tUIbovgW0pPztKN5U7doqtGuat1E9oWJx0SC3SnqbjqB7IfikEY6sKiN/wqTqsb/qukLvuJWqmoqAj4WBcF3VmQWDevIxUV+0srL0zPs4/0EkIfAfqsE9ISkbS0UjW+ZmBHsma6BBNU6+khxKFut9rGy/CW5Zkyz8x9YI8rmCrx6OQXWNoDUb9YtRTOpaXWIkxFGxGSQ3k+aiolPAikmdi5JrN/yOk/4wa8GvDx5SfvM4L9le71sI5zT0ONwRyIPUteF3ZekPfT+4UlY+jCmnvCfojPJRDp/74TqZ2mJU1/y68sOjDyrvb/idmqvhgaYCrsF0VOmEQS0hUdCMLROkkoDqG4lAqnYIJwHp21KN5ejUaJhepQmWWOE3oJY2jH1RmNkgAQwQLrvE4NooOptobQa4vJ5o/h2+0cbQ680Ew0IupjyaWG6kOYlrHUHu/EkMP9eqS+W04wv9zpQqqTIXUIFtuFqkVCtaMeVeCCBaaPI2I48WeBfc0Zsd9erSg2GDyd6gJuCBwxCwd6Z7aNJL7SYaiFRxrKFyb4Du3KL8N/2qNDL41ae+OohvrVsf3rr1Yfpo9Q6f5/b3KM1gMcn6yiODgzSHD21VpLF7Z9klXKGcJEhTdYWykfEtx9Yp47pkdSlyQUMA7uiNcCZUlAPFhXb+RnpG0aMx5NlS1zL5yxkdz401KtLZGt6g4rbKOmnVk6hGRu5ns13L1mm5U3IOy/2wii6Qkqew7FU+Ibem5GklOcJW5iRY700p6Dqu5+1UNcf4gAgMZpgTm0IhVxJtiA8DIXBmwRhUoRujHZNLwwZzTy8+MFldK6oGPAqTu2DgWAOlclcF1zEuCzr8maC1Gj38zNE6DuHZxq8qPwvtAbbBSEaEQbdx/y8ah/suomxhMb4wFoIQ8FNQRYAGRx9jj9PIWYc32GF0XDBErS8FzIXx6kaSIGhVeLY4iGeGhTdgRpQ3ob1sYhoXjUgJK/3RvGN0sbIiiyW7wPtMVXKe0r4hne7o7i9fkji6bf9Jl6tSGcjtO77PE9x9dNUVu07u7+lVF6Gjjsc8hqBG/4GHopH0VLVcz26mJhoFRwKj4y/SOXPe7z8+h3rhOOdYv5KjByg5cBoRpQ/vHu9/f84c5Z3+1/rfn83NUnL8L0+TA8xBpYggNeia6VAn69g4eVVlVMp1q7qiast5Nd5bjfKqueXXNB9q/hVUtHtsbaohoSJBXHYqa9SkELosUabelO8spR8qtqV0Ka5KXzqo2BTbIF0K9sRGX9NK7LuA6bPUD5+KQuOHS5XvoH6iS5fyI+xZ/BjLK+S12H/0LtEjghbAlGB/yiMCAOE8O2PPoZ3K43OAvQ3sgxz4V3klzxMuXwYva0TJj9WU89BJsNciKcIFTDOgUYGRATxOXl2gTkFDQzc/5zmQeVTQ6lL2qp+gkdi2DVZWG43+ri6ByAP9ARa6YQj5U+gjR9RSX2RGC15oJC05a6+H80VJv4/UL1p8HSm2Wr8o+iei4AqJoj2UxjbAeo5wBtv0iWJ9Sxe2GQAkTshhW22i2NTGIql1paKnHSOpFJUHOVEU1L0i+FJRazSxM+b9Fe31TXhlKxWdbi87YzmRYkhVGcFSMYLR0yRmSABQFtNd3UkWQC12TuqBs8K0yn4SZ4Kenw2C/k+uOSL94z9OOnsDijL5f7tmLMGxXBPLC6EOnsryQiD5jVgXUN2zomlc+bJYjeGDFkX470Gbh1Ere+6cTFoggstXqgaCw3X9akoNa43VXTVUG0HUVBuuYNpHh3gyOj5vpfZPC7IcIV8i2JlACZExgqEIA0N6QDwqpGCl2MU6G1vgb0ZdFlXXkyN2kuuSiJSM6qYFLFeMdcahBAbyCj4jrivTaDm1ulgWwGQTIxN0meKlXIdYSo1+G2gGADLYAL8jmDl7yKExe6hu/wC+Jg5VGj/4SpoOvQK4f5qwPSKYaIyRYX/VDWLxDbXOBXNaDVg/ZgSPIIUOokNdx2ms5u60NZhrKWq0SAANNcSKWg3Lm2OBE4AXK9xvKFVXdfrtBD32CMFpwxH4K0c0Mspbb50mbylvsTlib4L0nvJIu/IXWtdOL6XrKAtFoE1Sj5X1AES1Mc0wW4tJMYKrV7zgtqWq1sb7WWsDM+Q/ARPBZiHkB1tbE0G85I0AePL5Q+ih8GKxkQVd/qEpwlL/gIYdKNBbq/2MVcK9OBRpiA5RhrsBFIG29/nG2yi1YBDe1PGcsZkBXA/sYwPxgngki16Gtr1sIF6E4z6LOkRco6AuTfD6YDAuwvpfoM5/2ntM6TJ7em7PWXcRvimqZf1sr1VOw/xnJXZjAI18NbNcGuaR4HYemAUt1rLitloLkt42tsXI+OScheHaosWMD1rAg0a3i+XdipzRipEvtuYC49UCNurVRtwKRhZVAdHhJGRFA9o6DEVjtyT0cDAIFFEugpPyG5yKfShj/ze5MJ4/Vn6D8dFYHlcgRtJVHYdRtcM1n+l2JRKFPZQ56JVRI46JKmXOgOhHg0PBcPEqHZHB4Uri1LUm3JiMiaAFZxIMIjhwmTRKlzY1TguCX6BlmsRWGjZqcVeWehYNMTKoVDCCp1VwNuTOKEMxGNDiogsH6IZORISRdBYjflhfwKrB8qPq0gsebMfoKxlVGX6KGkJCLZC9J8vWIZEDulW6VeAXd+K8Rlh5VqcahckCxDkhd5TkDgurJnWzzGqhg8e0vEZfO6EddVpaHLaE6tjSEbf1sOiob2oOshhIEgTtsIf4Qy24x4ncKQ5TTT1uqCGbrYe1xjqLzaX6KVmsZIpmNZ1ZPusCzJZ18U5X2IV1TjqXLqzV2XRYzhjVRW2RqKaq9w/8Qa//wyQ6MdHtuOOl6ZbpL93p7ErRiZNYs/Jq21QnNBv001+6w9GVUl7lIgyFcX+sNnYnzvcwfony6qTKd0M7Z6yAN/6s/ZfYbKo7MLnHrNnYnkYudQcmnDkXOG2HcQcm0c6o4jYj9bQ6YnWcswsT27EoS7U22skWEJ6zG1OSth2/9QvlGbPK3NFZyvHjt52zL1PyuHJ8Fnf0izRVnrHrtuO07Zx+byIon+D9mJn3Y8QobKW+pIJHm5jmr2Wrprlk0cjKHI2o6o0WNAg65vagodYn2Rh16MKZbKCQRLFgBqll7ipu08SwLC41dWDyyFLBxdUCNNQvAsjvKGK/is0+zA5azLOi/yKQU79gJqu/arjOyDBivCZS9dnVgJWgUv6Mz872E2ABY9XJQcj4qRqPIWNxAO/ZsYPq15XGBRFQflSPX40zs32OJLZfGa5P01U+VMGo+AmbGsmFIai/qwLWcZ/lznyWRw0w9lnKdoFSd9ZSt3Eqs2+o7PNExu/zRKr7PPGUbVSir2KuaZW9Sf7/oS46DnWdKWQaZeuEkTAV+IHICm+cUmGXhpzKjIu9Vvqo4q4bSLEJ+/j/iLx045DX58CuELDkIU6jFZqZ1J0XcdmqiMtf+Xd+xFXdb0tSR3n6rJFzn4VcZdx4ipkBtbDr1HjUdbYsukgH0yF2dY+PsRmqT7C949REkA7tvFkEg5T7nD3b+JQYPHfftiLrV2xk5LMqgn+PdWYU+nlWf8xj/bGx/piYZR/fH5Or2p/a8/VnfHj+3P58+0zs5rM9EpLj4zfj+4R5zytZnxIlrLv2sB2R1OwnatumUrGJ7UHSZMNUugWjkyj+uIFAE+CGw7yxtq6NmamI+LRBMLfGO1JqbVmqOpbW847Fxcriseod/3loCivlqxX0wYD1c8fJrfzymkiju74+c0Gj+2XROmMgHF685KuHas87dP74oT6L2Bhsagy0trdNywU8dkd7ZtKkhZunTTuTsmBreNWcBagrm8jyWgA5VKEDXvPRt1mC6O1znsWkEjwrsN0GcZdB+rbiUz/B8l7VfBnm5KzECTKJ1HawiJcJdD83tilbTRJj5hgXRtWQsvltNGhLRYM2dp6iPJzDbw/SxYMgBo4TMWmkcgmC8Ue41LCYdBmVAOKlsYtKXlHViaCy3Jir7bRGQmYajQgfW7Zwt3G3bbH8XHltyyOPbFFe09yhPD9UfpC7Yoh2/0kc+vrXh0Tmz5C19KTuAW0zKHgD7h9po1nepmbvMPlrW0s7Xj927HW66WNKPqb3vE4TyrHXfykQJbeX5mhu7+iyHoH0jD6+l75IX9yrvFipSQBtVcknNpAw2U5QNtwsWNhUwhC6L1XZqC6IMUJW82hEzizogkkgYBMjoAYVGior/GiTutGFP6lmhDGn35zAckhAB00YDMWwaDAMZzyXY1un0TBLYxrO4wenRBUL+3m2V4dWrdYcq2XK9Et0rNBCzXxKSiXxiVJXfaqfZir7iJw+z7g96B2q4/aoK8e9bJRw7VYLg21qvVGjG/dt1KGf5XZVh2LyIMQ38Ll/NpjM5w+CZUP/Yfel8/S7mZB/8HsYYYt+3i9upBb6/EXKvsP/8FdnKB/RF/AptjdeRe40oNu9LP6vHxfx1luBCryWVGoxUIR5MD1J4hCjcRrEXY9YGQOmawC37ZvzzJrTiDlYXQP+Q/yg4KaGyvF9c+YqUiWeWJUbN8uhYozdlMBELylwtZWlJoazfoee5yfO/tpxuSIeaJgmiIlslV1SixqhGgVgOsFXRT5+/E2NwPYnqSAgMclWt/ApdEDjPG7pwAr0grlUz8a+mZv7+zfPRI5Tz/o29qRyiB5OEQzvY5AaX+Wxs7G9ZHCvUZE4SD/zqNT6aFoqaulYUIIf22NSrSwQ1FwOAPOCoAPDoDfWmK02dT2GbMqNA4tZrMhvpv5ohDn80J3TmObhydYtZbJlK88qCFiUCcgGfw9vhT/+YUrO8vccIDPziGrRCzXOJMv56FXBEU7IzlJRcGJnBeysU/UYakrFGrZFVg0AHSZOLmdVnCpoDNwCH/HQ8ZhMXS+AzEvb6OO0jVU8Eqw15TD8TBm/SjDdMMWV4o9+PsOwCcbpOMLipXWsx0sYDjaxPVvVdQCc2mWgo4m5CyZ1m1bAXm7MjmtUsddYWTE6KThMIq5rkJ0iXMqeSjhbZAubdGyVUzCcQssZo5nKEbswtC83sPbobmVkBFO4I2oxCoLbfUNLZ0UfumT3UUwBS8waYn2Q2ucapHANm38OQ7cFXp9Sly2o2VGsAZ7i/NP7rAaYi8v6uMxZCgbtJ7iTJ6/9hB/meL2hUgGMFM6mbMGsXxfkUzpOapE+klroCDtwhEXRykSq1gVJDPtj5Kx3XDU4VavBAZnUlHBr10oG0QYkqqFqjZ5GLBhMqB9FARFIbS43lluMUp6r4grE+5iJUfIjFVTNPACJy4+UV1EfPYMNNGx/D+Q5DUNxDsD+VlLdv7gpUUm12ERXVufCGIorymQzG3VlRcqyttID7z7wAALWBx54l66FkcIRrh94AFrQMuMlrsiAw+i7WHOjEPUTgsSeY/VWGN8fOW98P4V1VyP4bzSv5gzgUs80JuBvbGW3Vewi5FndFsfqtli7nozm4S4V8pWaLg7zHaIAjfj6WCL/F8P1u2sAAHjaY2BkYGBgZjjy6Mpmh3h+m68M8hwMIHDua+N+ZJqDgQNCMYEoAHf+C1gAeNpjYGRg4GD4fwNEMjD8/w8kgSIogBUAY/wD9XjaNU+7FcJADJNNCvq87MMOvEdNxRyq0mWH1GEWegZhACz54nvnj+yTzvGDLQ8gKr8iEQDBRDKqgmqZMMq7/y5kd/UdCLFiC+ITZiivaz6fR0er6d054SksUgzmU3qFEXdFzV2Ez8Ywlc/m5Pilsr2VWitP/bGJ4wvDWi96P3Not+n2B3lgIYIAAAAmACYAJgAuAJIA3gFaAaABrgHkAjoC1AMkA4IEUAUiBXAFzgYgBw4H7ghiCPYJsgp4Cq4LCAs2C4AMHAyiDiAPnBBAEUYRvBMwE7wUHhRaFIYUshTcFVAVgBX6FpYXXBeSF/AYYBkCGYgaBhooGkoa1BryGyQbQBtsG5Yb+Bw2HLAdLh1yHYYdsh4cHjYeYB7iHyYf3iAgIFIgdCCaILIgxiDcIPAhBiEkIegiOCK6IxAjeCPQJDQkbCS8JVIlriYWJjomWCZ2JpQmoib0J3QnvCgGKJAopii8KQApIilMKcgqJCpiKpwqyCsUK2QrvCwWLFYsnizgLPYtBC0SLSAAAAABAAAAgAC9ABAAAAAAAAIAAQACABYAAAEAAYEAAAAAeNqNkr1OAkEUhc8CmmBhRSysNtFCTfiXqFBZiIkaQzRqZ7KaBYz8CStg4/PpC1j6EJZWfjMMwSCFmczOuWfOPffOzEpa0avi8hJJSZ/MCfaUIprgmFb15XBcZW+qSWjTKzu8pLF36/Ay/IfDSa173w6/aS2WcvhdudiOjlXTmXwNFaqvgR7UVYe4wOzC+AqIX1hboMiq/qpHoEhNUN0yESjUWPd8e0RT3RaaiNFTWVnGyI6MGuw+s5qKDfgWGSa3Q42QmYXtwabxD/SE0vi0YTZUdRWP/tTb5nTGw/Rq/LrW74K4QTVznr6KeOUYRVV0pVPd6By0KC89l7lI489prufu6Xe1mi5hJtGMbaKMnN+Q/bzdy2iPb4UTB3rE02jqsOae7nirjEp27uNR0MG/+j+BD21Xh+y24Qf2tjvcQYjr7CUnPVStm09eYLPycKb/Em9Zoq755u2fk2Pd/QGe+3ARAAB42m3S1XIUURRG4VmDBHd3d5k+Z5/uBIdAcHd3CRI0OBRPyCshmRWu6Kqp/6brm9qrutVujTy/frZS63/Pjz8/Wm3ajGEs4xhPDxOYyCQmM4WpTGM6M5jJLGYzh7nMYz4LWMgiFrOEpSxjOStYySpWs4a1rGM9G9jIJjazha1sYzsdKhKZoFDT0EsfO9jJLnazh73sYz8H6OcghxjgMEc4yjGOc4KTnOI0ZzjLOc5zgYtc4jJXuMo1rnODm9ziNne4yz3u84CHPOIxTxjkKc94zguGeMkrXvOGt7xjmPd84COf+MwXvvKN7z3DQ4OpDPT/3YGq03ErN7nZDbe4tdu4vW7fyCa9pJf0kl7SS3pJL+klvTTqVXqVXqVX6VV6lV6lV+lVepVe0kt6SS/pJb3U9bL3ZO/J3pO9J3tP7oy+X7uN2/3/0Amd0Amd0Amd0Amd+Od07wi7hF3CLmGXsEvYJewSdgm7hF3CLmGXsEvYJewSdomkl/SSXtLLelkv62W9rJf1sl7Wy3pZL/RCL/RCL/RCL/RCL/RCr+gVvaJX9Ipe0St6Ra/oFb1ar9ar9Wq9Wq/Wq/VqvVqv1mv0Gr1Gr9Frul7xuyp+V8XvqnTyb1UoNRm4Af+FsAGNAEuwCFBYsQEBjlmxRgYrWCGwEFlLsBRSWCGwgFkdsAYrXFhZsBQrAAAAAVLP0T8AAA==) format('woff'), + url('font/genericons-regular-webfont.ttf') format('truetype'), + url('font/genericons-regular-webfont.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; +} + + +/** + * All Genericons + */ + +.genericon { + display: inline-block; + width: 16px; + height: 16px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 16px; + line-height: 1; + font-family: 'Genericons'; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; +} + +/** + * IE7 and IE6 hacks + */ + +.genericon { + *overflow: auto; + *zoom: 1; + *display: inline; +} + +/** + * Individual icons + */ + +/* Post formats */ +.genericon-standard:before { content: '\f100'; } +.genericon-aside:before { content: '\f101'; } +.genericon-image:before { content: '\f102'; } +.genericon-gallery:before { content: '\f103'; } +.genericon-video:before { content: '\f104'; } +.genericon-status:before { content: '\f105'; } +.genericon-quote:before { content: '\f106'; } +.genericon-link:before { content: '\f107'; } +.genericon-chat:before { content: '\f108'; } +.genericon-audio:before { content: '\f109'; } + +/* Social icons */ +.genericon-github:before { content: '\f200'; } +.genericon-dribbble:before { content: '\f201'; } +.genericon-twitter:before { content: '\f202'; } +.genericon-facebook:before { content: '\f203'; } +.genericon-facebook-alt:before { content: '\f204'; } +.genericon-wordpress:before { content: '\f205'; } +.genericon-googleplus:before { content: '\f206'; } +.genericon-linkedin:before { content: '\f207'; } +.genericon-linkedin-alt:before { content: '\f208'; } +.genericon-pinterest:before { content: '\f209'; } +.genericon-pinterest-alt:before { content: '\f210'; } +.genericon-flickr:before { content: '\f211'; } +.genericon-vimeo:before { content: '\f212'; } +.genericon-youtube:before { content: '\f213'; } +.genericon-tumblr:before { content: '\f214'; } +.genericon-instagram:before { content: '\f215'; } +.genericon-codepen:before { content: '\f216'; } +.genericon-polldaddy:before { content: '\f217'; } +.genericon-googleplus-alt:before { content: '\f218'; } +.genericon-path:before { content: '\f219'; } +.genericon-skype:before { content: '\f220'; } +.genericon-digg:before { content: '\f221'; } +.genericon-reddit:before { content: '\f222'; } +.genericon-stumbleupon:before { content: '\f223'; } +.genericon-pocket:before { content: '\f224'; } +.genericon-dropbox:before { content: '\f225'; } + +/* Meta icons */ +.genericon-comment:before { content: '\f300'; } +.genericon-category:before { content: '\f301'; } +.genericon-tag:before { content: '\f302'; } +.genericon-time:before { content: '\f303'; } +.genericon-user:before { content: '\f304'; } +.genericon-day:before { content: '\f305'; } +.genericon-week:before { content: '\f306'; } +.genericon-month:before { content: '\f307'; } +.genericon-pinned:before { content: '\f308'; } + +/* Other icons */ +.genericon-search:before { content: '\f400'; } +.genericon-unzoom:before { content: '\f401'; } +.genericon-zoom:before { content: '\f402'; } +.genericon-show:before { content: '\f403'; } +.genericon-hide:before { content: '\f404'; } +.genericon-close:before { content: '\f405'; } +.genericon-close-alt:before { content: '\f406'; } +.genericon-trash:before { content: '\f407'; } +.genericon-star:before { content: '\f408'; } +.genericon-home:before { content: '\f409'; } +.genericon-mail:before { content: '\f410'; } +.genericon-edit:before { content: '\f411'; } +.genericon-reply:before { content: '\f412'; } +.genericon-feed:before { content: '\f413'; } +.genericon-warning:before { content: '\f414'; } +.genericon-share:before { content: '\f415'; } +.genericon-attachment:before { content: '\f416'; } +.genericon-location:before { content: '\f417'; } +.genericon-checkmark:before { content: '\f418'; } +.genericon-menu:before { content: '\f419'; } +.genericon-refresh:before { content: '\f420'; } +.genericon-minimize:before { content: '\f421'; } +.genericon-maximize:before { content: '\f422'; } +.genericon-404:before { content: '\f423'; } +.genericon-spam:before { content: '\f424'; } +.genericon-summary:before { content: '\f425'; } +.genericon-cloud:before { content: '\f426'; } +.genericon-key:before { content: '\f427'; } +.genericon-dot:before { content: '\f428'; } +.genericon-next:before { content: '\f429'; } +.genericon-previous:before { content: '\f430'; } +.genericon-expand:before { content: '\f431'; } +.genericon-collapse:before { content: '\f432'; } +.genericon-dropdown:before { content: '\f433'; } +.genericon-dropdown-left:before { content: '\f434'; } +.genericon-top:before { content: '\f435'; } +.genericon-draggable:before { content: '\f436'; } +.genericon-phone:before { content: '\f437'; } +.genericon-send-to-phone:before { content: '\f438'; } +.genericon-plugin:before { content: '\f439'; } +.genericon-cloud-download:before { content: '\f440'; } +.genericon-cloud-upload:before { content: '\f441'; } +.genericon-external:before { content: '\f442'; } +.genericon-document:before { content: '\f443'; } +.genericon-book:before { content: '\f444'; } +.genericon-cog:before { content: '\f445'; } +.genericon-unapprove:before { content: '\f446'; } +.genericon-cart:before { content: '\f447'; } +.genericon-pause:before { content: '\f448'; } +.genericon-stop:before { content: '\f449'; } +.genericon-skip-back:before { content: '\f450'; } +.genericon-skip-ahead:before { content: '\f451'; } +.genericon-play:before { content: '\f452'; } +.genericon-tablet:before { content: '\f453'; } +.genericon-send-to-tablet:before { content: '\f454'; } +.genericon-info:before { content: '\f455'; } +.genericon-notice:before { content: '\f456'; } +.genericon-help:before { content: '\f457'; } +.genericon-fastforward:before { content: '\f458'; } +.genericon-rewind:before { content: '\f459'; } +.genericon-portfolio:before { content: '\f460'; } +.genericon-heart:before { content: '\f461'; } +.genericon-code:before { content: '\f462'; } +.genericon-subscribe:before { content: '\f463'; } +.genericon-unsubscribe:before { content: '\f464'; } +.genericon-subscribed:before { content: '\f465'; } +.genericon-reply-alt:before { content: '\f466'; } +.genericon-reply-single:before { content: '\f467'; } +.genericon-flag:before { content: '\f468'; } +.genericon-print:before { content: '\f469'; } +.genericon-lock:before { content: '\f470'; } +.genericon-bold:before { content: '\f471'; } +.genericon-italic:before { content: '\f472'; } +.genericon-picture:before { content: '\f473'; } +.genericon-fullscreen:before { content: '\f474'; } + +/* Generic shapes */ +.genericon-uparrow:before { content: '\f500'; } +.genericon-rightarrow:before { content: '\f501'; } +.genericon-downarrow:before { content: '\f502'; } +.genericon-leftarrow:before { content: '\f503'; } + + + + + diff --git a/wp-content/themes/twentythirteen/header.php b/wp-content/themes/twentythirteen/header.php new file mode 100644 index 000000000..dee665689 --- /dev/null +++ b/wp-content/themes/twentythirteen/header.php @@ -0,0 +1,60 @@ + section and everything up till
        + * + * @package WordPress + * @subpackage Twenty_Thirteen + * @since Twenty Thirteen 1.0 + */ +?> + + + +> + + + + + <?php wp_title( '|', true, 'right' ); ?> + + + + + + +> + +
        + + +
        diff --git a/wp-content/themes/twentythirteen/image.php b/wp-content/themes/twentythirteen/image.php new file mode 100644 index 000000000..89708f37c --- /dev/null +++ b/wp-content/themes/twentythirteen/image.php @@ -0,0 +1,101 @@ + + +
        +
        + + + +
        > +
        +

        + + +
        + +
        + + +
        +
        + + + +
        + +
        + +
        +
        + + post_content ) ) : ?> +
        + + '', + ) + ); + ?> +
        + + +
        +
        + + + + + +
        +
        + + diff --git a/wp-content/themes/twentythirteen/images/dotted-line-2x.png b/wp-content/themes/twentythirteen/images/dotted-line-2x.png new file mode 100644 index 000000000..07f6c93f2 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/dotted-line-2x.png differ diff --git a/wp-content/themes/twentythirteen/images/dotted-line-light-2x.png b/wp-content/themes/twentythirteen/images/dotted-line-light-2x.png new file mode 100644 index 000000000..059d4ec05 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/dotted-line-light-2x.png differ diff --git a/wp-content/themes/twentythirteen/images/dotted-line-light.png b/wp-content/themes/twentythirteen/images/dotted-line-light.png new file mode 100644 index 000000000..b7f82cdbf Binary files /dev/null and b/wp-content/themes/twentythirteen/images/dotted-line-light.png differ diff --git a/wp-content/themes/twentythirteen/images/dotted-line.png b/wp-content/themes/twentythirteen/images/dotted-line.png new file mode 100644 index 000000000..115b583f7 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/dotted-line.png differ diff --git a/wp-content/themes/twentythirteen/images/headers/circle-thumbnail.png b/wp-content/themes/twentythirteen/images/headers/circle-thumbnail.png new file mode 100644 index 000000000..2f9344c51 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/headers/circle-thumbnail.png differ diff --git a/wp-content/themes/twentythirteen/images/headers/circle.png b/wp-content/themes/twentythirteen/images/headers/circle.png new file mode 100644 index 000000000..0bd940197 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/headers/circle.png differ diff --git a/wp-content/themes/twentythirteen/images/headers/diamond-thumbnail.png b/wp-content/themes/twentythirteen/images/headers/diamond-thumbnail.png new file mode 100644 index 000000000..82777a04c Binary files /dev/null and b/wp-content/themes/twentythirteen/images/headers/diamond-thumbnail.png differ diff --git a/wp-content/themes/twentythirteen/images/headers/diamond.png b/wp-content/themes/twentythirteen/images/headers/diamond.png new file mode 100644 index 000000000..a14de6146 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/headers/diamond.png differ diff --git a/wp-content/themes/twentythirteen/images/headers/star-thumbnail.png b/wp-content/themes/twentythirteen/images/headers/star-thumbnail.png new file mode 100644 index 000000000..693bb7618 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/headers/star-thumbnail.png differ diff --git a/wp-content/themes/twentythirteen/images/headers/star.png b/wp-content/themes/twentythirteen/images/headers/star.png new file mode 100644 index 000000000..24ca62686 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/headers/star.png differ diff --git a/wp-content/themes/twentythirteen/images/search-icon-2x.png b/wp-content/themes/twentythirteen/images/search-icon-2x.png new file mode 100644 index 000000000..02b63b802 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/search-icon-2x.png differ diff --git a/wp-content/themes/twentythirteen/images/search-icon.png b/wp-content/themes/twentythirteen/images/search-icon.png new file mode 100644 index 000000000..11d8dc8e5 Binary files /dev/null and b/wp-content/themes/twentythirteen/images/search-icon.png differ diff --git a/wp-content/themes/twentythirteen/inc/back-compat.php b/wp-content/themes/twentythirteen/inc/back-compat.php new file mode 100644 index 000000000..80940887f --- /dev/null +++ b/wp-content/themes/twentythirteen/inc/back-compat.php @@ -0,0 +1,67 @@ +

        %s

        ', $message ); +} + +/** + * Prevent the Customizer from being loaded on WordPress versions prior to 3.6. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_customize() { + wp_die( + sprintf( __( 'Twenty Thirteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again.', 'twentythirteen' ), $GLOBALS['wp_version'] ), + '', + array( + 'back_link' => true, + ) + ); +} +add_action( 'load-customize.php', 'twentythirteen_customize' ); + +/** + * Prevent the Theme Preview from being loaded on WordPress versions prior to 3.4. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Thirteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again.', 'twentythirteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentythirteen_preview' ); diff --git a/wp-content/themes/twentythirteen/inc/custom-header.php b/wp-content/themes/twentythirteen/inc/custom-header.php new file mode 100644 index 000000000..29a98f3f5 --- /dev/null +++ b/wp-content/themes/twentythirteen/inc/custom-header.php @@ -0,0 +1,236 @@ + '220e10', + 'default-image' => '%s/images/headers/circle.png', + + // Set height and width, with a maximum value for the width. + 'height' => 230, + 'width' => 1600, + + // Callbacks for styling the header and the admin preview. + 'wp-head-callback' => 'twentythirteen_header_style', + 'admin-head-callback' => 'twentythirteen_admin_header_style', + 'admin-preview-callback' => 'twentythirteen_admin_header_image', + ); + + add_theme_support( 'custom-header', $args ); + + /* + * Default custom headers packaged with the theme. + * %s is a placeholder for the theme template directory URI. + */ + register_default_headers( + array( + 'circle' => array( + 'url' => '%s/images/headers/circle.png', + 'thumbnail_url' => '%s/images/headers/circle-thumbnail.png', + 'description' => _x( 'Circle', 'header image description', 'twentythirteen' ), + ), + 'diamond' => array( + 'url' => '%s/images/headers/diamond.png', + 'thumbnail_url' => '%s/images/headers/diamond-thumbnail.png', + 'description' => _x( 'Diamond', 'header image description', 'twentythirteen' ), + ), + 'star' => array( + 'url' => '%s/images/headers/star.png', + 'thumbnail_url' => '%s/images/headers/star-thumbnail.png', + 'description' => _x( 'Star', 'header image description', 'twentythirteen' ), + ), + ) + ); +} +add_action( 'after_setup_theme', 'twentythirteen_custom_header_setup', 11 ); + +/** + * Load our special font CSS files. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_custom_header_fonts() { + // Add Source Sans Pro and Bitter fonts. + wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null ); + + // Add Genericons font. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.0.3' ); +} +add_action( 'admin_print_styles-appearance_page_custom-header', 'twentythirteen_custom_header_fonts' ); + +/** + * Style the header text displayed on the blog. + * + * get_header_textcolor() options: Hide text (returns 'blank'), or any hex value. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_header_style() { + $header_image = get_header_image(); + $text_color = get_header_textcolor(); + + // If no custom options for text are set, let's bail. + if ( empty( $header_image ) && $text_color == get_theme_support( 'custom-header', 'default-text-color' ) ) { + return; + } + + // If we get this far, we have custom styles. + ?> + + Header admin panel. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_admin_header_style() { + $header_image = get_header_image(); + ?> + + Header admin panel. + * + * This callback overrides the default markup displayed there. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_admin_header_image() { + $style = 'color: #' . get_header_textcolor() . ';'; + if ( ! display_header_text() ) { + $style = 'display: none;'; + } + ?> +
        + +
        + + +
        +
        + + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/js/functions.js b/wp-content/themes/twentythirteen/js/functions.js new file mode 100644 index 000000000..1b18180c2 --- /dev/null +++ b/wp-content/themes/twentythirteen/js/functions.js @@ -0,0 +1,167 @@ +/** + * Functionality specific to Twenty Thirteen. + * + * Provides helper functions to enhance the theme experience. + */ + +( function( $ ) { + var body = $( 'body' ), + _window = $( window ), + nav, button, menu; + + nav = $( '#site-navigation' ); + button = nav.find( '.menu-toggle' ); + menu = nav.find( '.nav-menu' ); + + /** + * Adds a top margin to the footer if the sidebar widget area is higher + * than the rest of the page, to help the footer always visually clear + * the sidebar. + */ + $( function() { + if ( body.is( '.sidebar' ) ) { + var sidebar = $( '#secondary .widget-area' ), + secondary = ( 0 === sidebar.length ) ? -40 : sidebar.height(), + margin = $( '#tertiary .widget-area' ).height() - $( '#content' ).height() - secondary; + + if ( margin > 0 && _window.innerWidth() > 999 ) { + $( '#colophon' ).css( 'margin-top', margin + 'px' ); + } + } + } ); + + /** + * Enables menu toggle for small screens. + */ + ( function() { + if ( ! nav.length || ! button.length ) { + return; + } + + // Hide button if menu is missing or empty. + if ( ! menu.length || ! menu.children().length ) { + button.hide(); + return; + } + + button.on( 'click.twentythirteen', function() { + nav.toggleClass( 'toggled-on' ); + if ( nav.hasClass( 'toggled-on' ) ) { + $( this ).attr( 'aria-expanded', 'true' ); + menu.attr( 'aria-expanded', 'true' ); + } else { + $( this ).attr( 'aria-expanded', 'false' ); + menu.attr( 'aria-expanded', 'false' ); + } + } ); + + // Fix sub-menus for touch devices. + if ( 'ontouchstart' in window ) { + menu.find( '.menu-item-has-children > a, .page_item_has_children > a' ).on( 'touchstart.twentythirteen', function( e ) { + var el = $( this ).parent( 'li' ); + + if ( ! el.hasClass( 'focus' ) ) { + e.preventDefault(); + el.toggleClass( 'focus' ); + el.siblings( '.focus' ).removeClass( 'focus' ); + } + } ); + } + + // Better focus for hidden submenu items for accessibility. + menu.find( 'a' ).on( 'focus.twentythirteen blur.twentythirteen', function() { + $( this ).parents( '.menu-item, .page_item' ).toggleClass( 'focus' ); + } ); + } )(); + + /** + * Add or remove ARIA attributes. + * + * Uses jQuery's width() function to determine the size of the window and add + * the default ARIA attributes for the menu toggle if it's visible. + * + * @since Twenty Thirteen 1.5 + */ + function onResizeARIA() { + if ( 643 > _window.width() ) { + button.attr( 'aria-expanded', 'false' ); + menu.attr( 'aria-expanded', 'false' ); + button.attr( 'aria-controls', 'primary-menu' ); + } else { + button.removeAttr( 'aria-expanded' ); + menu.removeAttr( 'aria-expanded' ); + button.removeAttr( 'aria-controls' ); + } + } + + _window + .on( 'load.twentythirteen', onResizeARIA ) + .on( 'resize.twentythirteen', function() { + onResizeARIA(); + } ); + + /** + * Makes "skip to content" link work correctly in IE9 and Chrome for better + * accessibility. + * + * @link http://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/ + */ + _window.on( 'hashchange.twentythirteen', function() { + var element = document.getElementById( location.hash.substring( 1 ) ); + + if ( element ) { + if ( ! /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) { + element.tabIndex = -1; + } + + element.focus(); + } + } ); + + /** + * Arranges footer widgets vertically. + */ + $( function() { + var columnWidth, widgetArea; + if ( ! $.isFunction( $.fn.masonry ) ) { + return; + } + columnWidth = body.is( '.sidebar' ) ? 228 : 245; + widgetArea = $( '#secondary .widget-area' ); + + widgetArea.masonry( { + itemSelector: '.widget', + columnWidth: columnWidth, + gutterWidth: 20, + isRTL: body.is( '.rtl' ) + } ); + + if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) { + + // Retain previous masonry-brick initial position. + wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) { + var copyPosition = ( + placement.partial.extended( wp.customize.widgetsPreview.WidgetPartial ) && + placement.removedNodes instanceof jQuery && + placement.removedNodes.is( '.masonry-brick' ) && + placement.container instanceof jQuery + ); + if ( copyPosition ) { + placement.container.css( { + position: placement.removedNodes.css( 'position' ), + top: placement.removedNodes.css( 'top' ), + left: placement.removedNodes.css( 'left' ) + } ); + } + } ); + + // Re-arrange footer widgets when sidebar is updated via selective refresh in the Customizer. + wp.customize.selectiveRefresh.bind( 'sidebar-updated', function( sidebarPartial ) { + if ( 'sidebar-1' === sidebarPartial.sidebarId ) { + widgetArea.masonry( 'reloadItems' ); + widgetArea.masonry( 'layout' ); + } + } ); + } + } ); +} )( jQuery ); \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/js/html5.js b/wp-content/themes/twentythirteen/js/html5.js new file mode 100644 index 000000000..6168aacd5 --- /dev/null +++ b/wp-content/themes/twentythirteen/js/html5.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d + +
        +
        + + + + +
        > +
        + +
        + +
        + + +

        +
        + +
        + + '', + 'link_before' => '', + 'link_after' => '', + ) + ); + ?> +
        + +
        + ', '' ); ?> +
        +
        + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/readme.txt b/wp-content/themes/twentythirteen/readme.txt new file mode 100644 index 000000000..49a64f63f --- /dev/null +++ b/wp-content/themes/twentythirteen/readme.txt @@ -0,0 +1,149 @@ +=== Twenty Thirteen === +Contributors: wordpressdotorg +Requires at least: WordPress 3.6 +Tested up to: WordPress 5.0 +Requires PHP: 5.2.4 +Stable tag: 2.9 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: blog, one-column, two-columns, right-sidebar, custom-header, custom-menu, editor-style, featured-images, footer-widgets, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready + +== Description == +The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small. + +For more information about Twenty Thirteen please go to https://codex.wordpress.org/Twenty_Thirteen. + +== Installation == + +1. In your admin panel, go to Appearance -> Themes and click the 'Add New' button. +2. Type in Twenty Thirteen in the search form and press the 'Enter' key in your keyboard. +3. Click on the 'Activate' button to use your new theme right away. +4. Go to https://codex.wordpress.org/Twenty_Thirteen for a guide to customize this theme. +5. Navigate to Appearance > Customize in your admin panel. + +== Copyright == + +Twenty Thirteen WordPress Theme, Copyright 2013-2018 WordPress.org & Automattic.com +Twenty Thirteen is Distributed under the terms of the GNU GPL + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Twenty Thirteen Theme bundles the following third-party resources: + +HTML5 Shiv v3.7.0, Copyright 2014 Alexander Farkas +Licenses: MIT/GPL2 +Source: https://github.com/aFarkas/html5shiv + +Genericons icon font, Copyright 2013-2017 Automattic.com +License: GNU GPL, Version 2 (or later) +Source: http://www.genericons.com + +== Changelog == + += 2.9 = +* Released: May 7, 2019 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.9 + += 2.8 = +* Released: February 21, 2019 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.8 + += 2.7 = +* Released: January 9, 2019 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.7 + += 2.6 = +* Released: December 19, 2018 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.6 + += 2.5 = +* Released: December 6, 2018 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.5 + += 2.4 = +* Released: May 17, 2018 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.4 + += 2.3 = +* Released: November 14, 2017 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.3 + += 2.2 = +* Released: June 8, 2017 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.2 + += 2.1 = +* Released: December 6, 2016 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.1 + += 2.0 = +* Released: August 15, 2016 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.0 + += 1.9 = +* Released: April 12, 2016 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.9 + += 1.8 = +* Released: January 6, 2016 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.8 + += 1.7 = +* Released: December 8, 2015 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.7 + += 1.6 = +* Released: August 18, 2015 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.6 + += 1.5 = +* Released: April 23, 2015 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.5 + += 1.4 = +* Released: December 18, 2014 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.4 + += 1.3 = +* Released: September 4, 2014 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.3 + += 1.2 = +* Released: May 8, 2014 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.2 + += 1.1 = +* Released: October 24, 2013 + +https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_1.1 + += 1.0 = +* Released: August 1, 2013 + +Initial release. diff --git a/wp-content/themes/twentythirteen/rtl.css b/wp-content/themes/twentythirteen/rtl.css new file mode 100644 index 000000000..b815ea953 --- /dev/null +++ b/wp-content/themes/twentythirteen/rtl.css @@ -0,0 +1,779 @@ +/* +Theme Name: Twenty Thirteen +Description: Adds support for languages written in a Right To Left (RTL) direction. +It's easy, just a matter of overwriting all the horizontal positioning attributes +of your CSS stylesheet in a separate stylesheet file named rtl.css. + +See https://codex.wordpress.org/Right_to_Left_Language_Support +*/ + +/** + * Table of Contents: + * + * 1.0 - Reset + * 4.0 - Header + * 4.1 - Site Header + * 4.2 - Navigation + * 5.0 - Content + * 5.2 - Entry Meta + * 5.4 - Galleries + * 5.5 - Post Formats + * 5.6 - Attachments + * 5.7 - Post/Paging Navigation + * 5.8 - Author Bio + * 5.9 - Archives + * 5.10 - Search Results/No posts + * 5.12 - Comments + * 6.0 - Sidebar + * 6.1 - Widgets + * 7.0 - Footer + * 8.0 - Media Queries + * 9.0 - Print + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Reset + * ---------------------------------------------------------------------------- + */ + +body { + direction: rtl; + unicode-bidi: embed; +} + +a { + display: inline-block; +} + +blockquote blockquote { + margin-left: 0; + margin-right: 24px; +} + +menu, +ol, +ul { + padding: 0 40px 0 0; +} + +caption, +th, +td { + text-align: right; +} + +td { + padding-left: 10px; + padding-right: 0; +} + +.assistive-text:focus { + left: auto; + right: 5px; +} + + +/** + * 4.0 Header + * ---------------------------------------------------------------------------- + */ + +/** + * 4.1 Site Header + * ---------------------------------------------------------------------------- + */ + +.site-header > a:first-child { + display: inherit; +} + +.site-description { + font-style: normal; +} + + +/** + * 4.2 Navigation + * ---------------------------------------------------------------------------- + */ + +/* Navbar */ +ul.nav-menu, +div.nav-menu > ul { + margin: 0 -20px 0 0; + padding: 0 0 0 40px; +} + +.nav-menu .sub-menu, +.nav-menu .children { + float: right; + left: auto; + right: -2px; +} + +.nav-menu .sub-menu ul, +.nav-menu .children ul { + border-left: 2px solid #f7f5e7; + border-right: 0; + left: auto; + right: 100%; +} + +.main-navigation .search-form { + left: 0; + right: auto; +} + +.site-header .search-field { + background-position: 98% center; + padding: 0 34px 0 0; +} + +.nav-menu .current_page_item > a, +.nav-menu .current_page_ancestor > a, +.nav-menu .current-menu-item > a, +.nav-menu .current-menu-ancestor > a { + font-style: normal; +} + +.menu-toggle { + padding-left: 0; + padding-right: 20px; +} + + +/** + * 5.0 Content + * ---------------------------------------------------------------------------- + */ + +.sidebar .entry-header, +.sidebar .entry-content, +.sidebar .entry-summary, +.sidebar .entry-meta { + padding-left: 376px; + padding-right: 60px; +} + + +/** + * 5.2 Entry Meta + * ---------------------------------------------------------------------------- + */ + +.entry-meta > span { + margin-left: 20px; + margin-right: auto; +} + +.entry-meta > span:last-child { + margin-left: 0; + margin-right: auto; +} + +.featured-post:before { + margin-left: 2px; + margin-right: auto; +} + +.entry-meta .date a:before { + margin-left: 2px; +} + +.comments-link a:before { + margin-left: 2px; + margin-right: auto; +} + +.tags-links a:first-child:before { + margin-left: 2px; +} + +.edit-link a:before { + margin-left: 2px; +} + +.page-links .page-links-title { + margin-left: 20px; + margin-right: auto; +} + +/** + * 5.4 Galleries + * ---------------------------------------------------------------------------- + */ + +.gallery { + margin-left: auto; + margin-right: -4px; +} + +.gallery-item { + float: right; + margin: 0 0 4px 4px; +} + +.gallery-item a { + display: inline; +} + + +/** + * 5.5 Post Formats + * ---------------------------------------------------------------------------- + */ + +.entry-content a { + display: inline; +} + +.format-aside cite:before { + content: normal; + margin-right: auto; +} + +.format-aside cite:after { + content: "\2014"; + margin-left: 5px; +} + +.format-audio .entry-content:before { + float: right; + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); +} + +.format-audio .audio-content { + background-position: right top; + float: left; + padding-left: 0; + padding-right: 35px; +} + +.format-chat .entry-meta .date a:before { + margin-left: 4px; + margin-right: auto; +} + +.format-image .wp-caption-text { + text-align: right; +} + +.format-link .entry-title { + margin-left: 20px; + margin-right: auto; +} + +.format-status .entry-content, +.format-status .entry-meta { + padding-left: 0; + padding-right: 35px; +} + +.sidebar .format-status .entry-content, +.sidebar .format-status .entry-meta { + padding-left: 376px; + padding-right: 95px; +} + +.format-status .entry-content:before, +.format-status .entry-meta:before { + left: auto; + right: 10px; +} + +.sidebar .format-status .entry-content:before, +.sidebar .format-status .entry-meta:before { + left: auto; + right: 70px; +} + +.format-status .entry-content p:first-child:before { + left: auto; + right: 4px; +} + +.sidebar .format-status .entry-content p:first-child:before { + left: auto; + right: 64px; +} + +.format-quote blockquote { + padding-left: 0; + padding-right: 75px; +} + +.format-quote blockquote:before { + content: '\201D'; + padding-left: 25px; + padding-right: 0; + left: auto; + right: -15px; +} + + +/** + * 5.6 Attachments + * ---------------------------------------------------------------------------- + */ + +.attachment .entry-title { + float: right; +} + +.attachment .entry-title:before { + margin-left: 10px; + margin-right: auto; +} + +.attachment .entry-meta { + float: left; +} + +.image-navigation .nav-previous { + left: auto; + right: 0; +} + +.image-navigation .nav-next { + left: 0; + right: auto; +} + +.attachment .entry-caption { + text-align: right; +} + + +/** + * 5.7 Post/Paging Navigation + * ---------------------------------------------------------------------------- + */ + +.navigation .nav-previous { + float: right; +} + +.navigation .nav-next { + float: left; +} + +.sidebar .paging-navigation .nav-links, +.sidebar .post-navigation .nav-links { + padding-left: 376px; + padding-right: 60px; +} + +.paging-navigation .nav-previous .meta-nav { + margin-left: 10px; + margin-right: auto; +} + +.paging-navigation .nav-next .meta-nav { + margin-left: auto; + margin-right: 10px; +} + +.post-navigation a[rel="next"] { + float: left; + text-align: left; +} + + +/** + * 5.8 Author Bio + * ---------------------------------------------------------------------------- + */ + +.author-info { + text-align: right; /* gallery & video post formats */ +} + +.author.sidebar .author-info { + padding-left: 376px; + padding-right: 60px; +} + +.author-avatar .avatar { + float: right; + margin: 0 0 30px 30px; +} + +.author-link { + margin-left: auto; + margin-right: 2px; +} + + +/** + * 5.9 Archives + * ---------------------------------------------------------------------------- + */ + +.sidebar .archive-meta { + padding-left: 316px; + padding-right: 0; +} + + +/** + * 5.10 Search Results/No posts + * ---------------------------------------------------------------------------- + */ + +.sidebar .page-content { + padding-left: 376px; + padding-right: 60px; +} + +/** + * 5.12 Comments + * ---------------------------------------------------------------------------- + */ + +.sidebar .comments-title, +.sidebar .comment-list, +.sidebar .comment-reply-title, +.sidebar .comment-navigation, +.sidebar .comment-respond .comment-form { + padding-left: 376px; + padding-right: 60px; +} + +.comment-list .children { + margin-left: auto; + margin-right: 20px; +} + +.comment-author { + float: right; + margin-left: 50px; + margin-right: auto; +} + +.comment-list .edit-link { + margin-left: auto; + margin-right: 20px; +} + +.comment-metadata, +.comment-content, +.comment-list .reply, +.comment-awaiting-moderation { + float: left; +} + +.comment-awaiting-moderation:before { + margin-left: 5px; + margin-right: auto; +} + +.comment-reply-link:before, +.comment-reply-login:before { + margin-left: 3px; + margin-right: auto; + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); +} + +.comment-reply-title small a { + float: left; +} + +.comment-form [for="author"], +.comment-form [for="email"], +.comment-form [for="url"], +.comment-form [for="comment"] { + float: right; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 0 0 10px; +} + +.form-allowed-tags code { + margin-left: auto; + margin-right: 3px; +} + +.sidebar .no-comments { + padding-left: 376px; + padding-right: 60px; +} + + +/** + * 6.0 Sidebar + * ---------------------------------------------------------------------------- + */ + +.site-main .widget-area { + float: left; +} + +.widget-area a { + max-width: 100%; +} + + +/** + * 6.1 Widgets + * ---------------------------------------------------------------------------- + */ + +.widget .widget-title { + font-style: normal; +} + +.widget li > ul, +.widget li > ol { + margin-left: auto; + margin-right: 20px; +} + +.widget_text ul, +.widget_text ol { + padding-left: auto; + padding-right: 20px; +} + +/** + * 7.0 Footer + * ---------------------------------------------------------------------------- + */ + +.site-footer .widget-area, +.sidebar .site-footer { + text-align: right; +} +.sidebar .site-footer .widget-area { + left: auto; + right: -158px; +} + +.site-footer .widget { + float: right; + margin-left: 20px; + margin-right: auto; +} + +.sidebar .site-footer .widget:nth-of-type(4), +.sidebar .site-footer .widget:nth-of-type(3) { + margin-left: 0; + margin-right: auto; +} + +.site-footer span[role=separator] { + padding: 0 0.5em; +} + +/** + * 8.0 Media Queries + * ---------------------------------------------------------------------------- + */ + +@media (max-width: 1069px) { + ul.nav-menu, + div.nav-menu > ul { + margin-left: auto; + margin-right: 0; + } + + .error404 .page-header, + .sidebar .format-image .entry-content img.size-full, + .sidebar .format-image .wp-caption:first-child .wp-caption-text { + margin-right: auto; + } + + .main-navigation .search-form { + left: 20px; + right: auto; + } + + .site-main .widget-area { + margin-left: 60px; + margin-right: auto; + } +} + +@media (max-width: 999px) { + .sidebar .entry-header, + .sidebar .entry-content, + .sidebar .entry-summary, + .sidebar .entry-meta, + .sidebar .comment-list, + .sidebar .comment-reply-title, + .sidebar .comment-navigation, + .sidebar .comment-respond .comment-form, + .sidebar .featured-gallery, + .sidebar .post-navigation .nav-links, + .author.sidebar .author-info, + .sidebar .format-image .entry-content { + max-width: 604px; + padding-left: 0; + padding-right: 0; + } + + .site-main .widget-area { + float: none; + margin-left: auto; + } + + .attachment .entry-meta { + float: right; + text-align: right; + } + + .sidebar .format-status .entry-content, + .sidebar .format-status .entry-meta { + padding-left: 0; + padding-right: 35px; + } + + .sidebar .format-status .entry-content:before, + .sidebar .format-status .entry-meta:before { + left: auto; + right: 10px; + } + + .sidebar .format-status .entry-content p:first-child:before { + left: auto; + right: 4px; + } + + .sidebar .site-footer .widget-area { + left: auto; + right: 0; + } + + .sidebar .paging-navigation .nav-links { + padding: 0 60px; + } +} + +@media (max-width: 767px) { + .format-image .entry-content img:first-of-type, + .format-image .wp-caption:first-child .wp-caption-text { + margin-right: auto; + } +} + +@media (max-width: 643px) { + .sidebar .entry-header, + .sidebar .entry-content, + .sidebar .entry-summary, + .sidebar .entry-meta, + .sidebar .comment-list, + .sidebar .comment-navigation, + .sidebar .featured-gallery, + .sidebar .post-navigation .nav-links, + .sidebar .format-image .entry-content { + padding-left: 20px; + padding-right: 20px; + } + + #content .format-status .entry-content, + #content .format-status .entry-met { + padding-left: 0; + padding-right: 35px; + } + + .menu-toggle:after { + padding-left: 0; + padding-right: 8px; + } + + .toggled-on .nav-menu, + .toggled-on .nav-menu > ul { + margin-left: auto; + margin-right: 0; + } + + .toggled-on .nav-menu li > ul { + margin-left: auto; + margin-right: 20px; + right: auto; + } + + #content .featured-gallery { + padding-left: 0; + padding-right: 24px; + } + + .gallery-columns-1 .gallery-item { + margin-left: 0; + margin-right: auto; + } + + .comment-author { + margin-left: 30px; + margin-right: auto; + } + + .format-audio .audio-content { + background: none; + float: none; + padding-left: 0; + padding-right: 0; + } + + .gallery-columns-3 .gallery-item:nth-of-type(3n) { + margin-left: 4px; + margin-right: auto; + } +} + +@media (max-width: 359px) { + .gallery { + margin-left: auto; + margin-right: 0; + } + + .gallery .gallery-item:nth-of-type(even) { + margin-left: 0; + margin-right: auto; + } + + .gallery .gallery-item, + .gallery.gallery-columns-3 .gallery-item:nth-of-type(even), + .gallery-columns-3 .gallery-item:nth-of-type(3n), + .gallery-columns-5 .gallery-item:nth-of-type(5n), + .gallery-columns-7 .gallery-item:nth-of-type(7n), + .gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-left: 4px; + margin-right: auto; + } + + .comment-author .avatar { + margin-left: 5px; + margin-right: auto; + } +} + + +/** + * 9.0 Print + * ---------------------------------------------------------------------------- + */ + +@media print { + .entry-content img.alignleft, + .entry-content .wp-caption.alignleft { + margin-left: auto; + margin-right: 0; + } + + .entry-content img.alignright, + .entry-content .wp-caption.alignright { + margin-left: 0; + margin-right: auto; + } +} diff --git a/wp-content/themes/twentythirteen/screenshot.png b/wp-content/themes/twentythirteen/screenshot.png new file mode 100644 index 000000000..33ccea20a Binary files /dev/null and b/wp-content/themes/twentythirteen/screenshot.png differ diff --git a/wp-content/themes/twentythirteen/search.php b/wp-content/themes/twentythirteen/search.php new file mode 100644 index 000000000..5b335f4cb --- /dev/null +++ b/wp-content/themes/twentythirteen/search.php @@ -0,0 +1,39 @@ + + +
        +
        + + + + + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/sidebar-main.php b/wp-content/themes/twentythirteen/sidebar-main.php new file mode 100644 index 000000000..c404b0650 --- /dev/null +++ b/wp-content/themes/twentythirteen/sidebar-main.php @@ -0,0 +1,18 @@ + + + diff --git a/wp-content/themes/twentythirteen/sidebar.php b/wp-content/themes/twentythirteen/sidebar.php new file mode 100644 index 000000000..874554d74 --- /dev/null +++ b/wp-content/themes/twentythirteen/sidebar.php @@ -0,0 +1,22 @@ + + + diff --git a/wp-content/themes/twentythirteen/single.php b/wp-content/themes/twentythirteen/single.php new file mode 100644 index 000000000..587ae8656 --- /dev/null +++ b/wp-content/themes/twentythirteen/single.php @@ -0,0 +1,31 @@ + + +
        +
        + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/style.css b/wp-content/themes/twentythirteen/style.css new file mode 100644 index 000000000..2da272991 --- /dev/null +++ b/wp-content/themes/twentythirteen/style.css @@ -0,0 +1,3315 @@ +/* +Theme Name: Twenty Thirteen +Theme URI: https://wordpress.org/themes/twentythirteen/ +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small. +Version: 2.9 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: blog, one-column, two-columns, right-sidebar, custom-header, custom-menu, editor-style, featured-images, footer-widgets, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready +Text Domain: twentythirteen + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Reset + * 2.0 - Repeatable Patterns + * 3.0 - Basic Structure + * 4.0 - Header + * 4.1 - Site Header + * 4.2 - Navigation + * 5.0 - Content + * 5.1 - Entry Header + * 5.2 - Entry Meta + * 5.3 - Entry Content + * 5.4 - Galleries + * 5.5 - Post Formats + * 5.6 - Attachments + * 5.7 - Post/Paging Navigation + * 5.8 - Author Bio + * 5.9 - Archives + * 5.10 - Search Results/No posts + * 5.11 - 404 + * 5.12 - Comments + * 5.13 - Multisite + * 6.0 - Sidebar + * 6.1 - Widgets + * 7.0 - Footer + * 8.0 - Media Queries + * 9.0 - Print + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Reset + * + * Modified from Normalize.css to provide cross-browser consistency and a smart + * default styling of HTML elements. + * + * @see http://git.io/normalize + * ---------------------------------------------------------------------------- + */ + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +html, +button, +input, +select, +textarea { + font-family: "Source Sans Pro", Helvetica, sans-serif; +} + +body { + color: #141412; + line-height: 1.5; + margin: 0; +} + +a { + color: #ca3c08; + text-decoration: none; +} + +a:visited { + color: #ac0404; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + color: #ea9629; + outline: 0; +} + +a:hover { + text-decoration: underline; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-family: Bitter, Georgia, serif; + line-height: 1.3; +} + +h1 { + font-size: 48px; + margin: 33px 0; +} + +h2 { + font-size: 30px; + margin: 25px 0; +} + +h3 { + font-size: 22px; + margin: 22px 0; +} + +h4 { + font-size: 20px; + margin: 25px 0; +} + +h5 { + font-size: 18px; + margin: 30px 0; +} + +h6 { + font-size: 16px; + margin: 36px 0; +} + +address { + font-style: italic; + margin: 0 0 24px; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +mark { + background: #ff0; + color: #000; +} + +p { + margin: 0 0 24px; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 14px; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre { + background: #f5f5f5; + color: #666; + font-family: monospace; + font-size: 14px; + margin: 20px 0; + overflow: auto; + padding: 20px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +blockquote, +q { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; +} + +blockquote { + font-size: 18px; + font-style: italic; + font-weight: 300; + margin: 24px 40px; +} + +blockquote blockquote { + margin-right: 0; +} + +blockquote cite, +blockquote small { + font-size: 14px; + font-weight: normal; + text-transform: uppercase; +} + +blockquote em, +blockquote i { + font-style: normal; + font-weight: 300; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +small { + font-size: smaller; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +dl { + margin: 0 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 20px; +} + +menu, +ol, +ul { + margin: 16px 0; + padding: 0 0 0 40px; +} + +ul { + list-style-type: square; +} + +nav ul, +nav ol { + list-style: none; + list-style-image: none; +} + +li > ul, +li > ol { + margin: 0; +} + +img { + -ms-interpolation-mode: bicubic; + border: 0; + vertical-align: middle; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +form { + margin: 0; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + min-width: inherit; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; + white-space: normal; +} + +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + max-width: 100%; + vertical-align: baseline; +} + +button, +input { + line-height: normal; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; +} + +input[type="search"] { + -webkit-appearance: textfield; + padding-right: 2px; /* Don't cut off the webkit search cancel button */ + width: 270px; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +caption { + font-size: 16px; + margin: 20px 0; +} + +th { + font-weight: bold; + text-transform: uppercase; +} + +td { + border-top: 1px solid #ededed; + padding: 6px 10px 6px 0; +} + +del { + color: #333; +} + +ins { + background: #fff9c0; + text-decoration: none; +} + +hr { + background: url(images/dotted-line.png) repeat center top; + background-size: 4px 4px; + border: 0; + height: 1px; + margin: 0 0 24px; +} + + +/** + * 2.0 Repeatable Patterns + * ---------------------------------------------------------------------------- + */ + +.genericon:before, +.menu-toggle:after, +.featured-post:before, +.date a:before, +.entry-meta .author a:before, +.format-audio .entry-content:before, +.comments-link a:before, +.tags-links a:first-child:before, +.categories-links a:first-child:before, +.edit-link a:before, +.attachment .entry-title:before, +.attachment-meta:before, +.attachment-meta a:before, +.comment-awaiting-moderation:before, +.comment-reply-link:before, +.comment-reply-login:before, +.comment-reply-title small a:before, +.bypostauthor > .comment-body .fn:before, +.error404 .page-title:before { + -webkit-font-smoothing: antialiased; + display: inline-block; + font: normal 16px/1 Genericons; + vertical-align: text-bottom; +} + +/* Clearing floats */ +.clear:after, +.attachment .entry-header:after, +.site-footer .widget-area:after, +.entry-content:after, +.page-content:after, +.navigation:after, +.nav-links:after, +.gallery:after, +.comment-form-author:after, +.comment-form-email:after, +.comment-form-url:after, +.comment-body:after { + clear: both; +} + +.clear:before, +.clear:after, +.attachment .entry-header:before, +.attachment .entry-header:after, +.site-footer .widget-area:before, +.site-footer .widget-area:after, +.entry-content:before, +.entry-content:after, +.page-content:before, +.page-content:after, +.navigation:before, +.navigation:after, +.nav-links:before, +.nav-links:after, +.gallery:before, +.gallery:after, +.comment-form-author:before, +.comment-form-author:after, +.comment-form-email:before, +.comment-form-email:after, +.comment-form-url:before, +.comment-form-url:after, +.comment-body:before, +.comment-body:after { + content: ""; + display: table; +} + +/* Assistive text */ +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + overflow: hidden; + position: absolute !important; + height: 1px; + width: 1px; +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + color: #21759b; + display: block; + font-size: 14px; + font-weight: bold; + height: auto; + line-height: normal; + padding: 15px 23px 14px; + position: absolute; + left: 5px; + top: 5px; + text-decoration: none; + width: auto; + z-index: 100000; /* Above WP toolbar */ +} + +/* Form fields, general styles first. */ +button, +input, +textarea { + border: 2px solid #d4d0ba; + font-family: inherit; + padding: 5px; +} + +input, +textarea { + color: #141412; +} + +input:focus, +textarea:focus { + border: 2px solid #c3c0ab; + outline: 0; +} + +/* Buttons */ +button, +input[type="submit"], +input[type="button"], +input[type="reset"] { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + border-radius: 2px; + color: #fff; + display: inline-block; + padding: 11px 24px 10px; + text-decoration: none; +} + +button:hover, +button:focus, +input[type="submit"]:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:focus, +input[type="button"]:focus, +input[type="reset"]:focus { + background: #ed6a31; /* Old browsers */ + background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */ + outline: none; +} + +button:active, +input[type="submit"]:active, +input[type="button"]:active, +input[type="reset"]:active { + background: #d94412; /* Old browsers */ + background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */ + border: none; + border-top: 3px solid #b93207; + padding: 10px 24px 11px; +} + +.post-password-required input[type="submit"] { + padding: 7px 24px 4px; + vertical-align: bottom; +} + +.post-password-required input[type="submit"]:active { + padding: 5px 24px 6px; +} + +/* Placeholder text color -- selectors need to be separate to work. */ +::-webkit-input-placeholder { + color: #7d7b6d; +} + +:-moz-placeholder { + color: #7d7b6d; +} + +::-moz-placeholder { + color: #7d7b6d; +} + +:-ms-input-placeholder { + color: #7d7b6d; +} + +/* + * Responsive images + * + * Fluid images for posts, comments, and widgets + */ +.entry-content img, +.entry-summary img, +.comment-content img, +.widget img, +.wp-caption { + max-width: 100%; +} + +/* Make sure images with WordPress-added height and width attributes are scaled correctly. */ +.entry-content img, +.entry-summary img, +.comment-content img[height], +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + height: auto; +} + +img.size-full, +img.size-large, +img.wp-post-image { + height: auto; + max-width: 100%; +} + +/* Make sure videos and embeds fit their containers. */ +embed, +iframe, +object, +video { + max-width: 100%; +} + +/* Override the Twitter embed fixed width. */ +.entry-content .twitter-tweet-rendered { + max-width: 100% !important; +} + +/* Images */ +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +figure.wp-caption.alignleft, +img.alignleft { + margin: 5px 20px 5px 0; +} + +.wp-caption.alignleft { + margin: 5px 10px 5px 0; +} + +figure.wp-caption.alignright, +img.alignright { + margin: 5px 0 5px 20px; +} + +.wp-caption.alignright { + margin: 5px 0 5px 10px; +} + +img.aligncenter { + margin: 5px auto; +} + +img.alignnone { + margin: 5px 0; +} + +.wp-caption .wp-caption-text, +.entry-caption, +.gallery-caption { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + margin: 0 0 24px; +} + +div.wp-caption.alignright img[class*="wp-image-"] { + float: right; +} + +div.wp-caption.alignright .wp-caption-text { + padding-left: 10px; +} + +img.wp-smiley, +.rsswidget img { + border: 0; + border-radius: 0; + box-shadow: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +.wp-caption.alignleft + ul, +.wp-caption.alignleft + ol { + list-style-position: inside; +} + + +/** + * 3.0 Basic Structure + * ---------------------------------------------------------------------------- + */ + +.site { + background-color: #fff; + border-left: 1px solid #f2f2f2; + border-right: 1px solid #f2f2f2; + margin: 0 auto; + max-width: 1600px; + width: 100%; +} + +.site-main { + position: relative; +} + +.site-main .sidebar-container { + height: 0; + position: absolute; + top: 40px; + width: 100%; + z-index: 1; +} + +.site-main .sidebar-inner { + margin: 0 auto; + max-width: 1040px; +} + + +/** + * 4.0 Header + * ---------------------------------------------------------------------------- + */ + +/** + * 4.1 Site Header + * ---------------------------------------------------------------------------- + */ + +.site-header { + position: relative; +} + +.site-header .home-link { + color: #141412; + display: block; + margin: 0 auto; + max-width: 1080px; + min-height: 230px; + padding: 0 20px; + text-decoration: none; + width: 100%; +} + +.site-header .site-title:hover { + text-decoration: underline; +} + +.site-title { + font-size: 60px; + font-weight: bold; + line-height: 1; + margin: 0; + padding: 58px 0 10px; +} + +.site-description { + font: 300 italic 24px "Source Sans Pro", Helvetica, sans-serif; + margin: 0; +} + + +/** + * 4.2 Navigation + * ---------------------------------------------------------------------------- + */ + +.main-navigation { + clear: both; + margin: 0 auto; + max-width: 1080px; + min-height: 45px; + position: relative; +} + +ul.nav-menu, +div.nav-menu > ul { + margin: 0; + padding: 0 40px 0 0; +} + +.nav-menu li { + display: inline-block; + position: relative; +} + +.nav-menu li a { + color: #141412; + display: block; + font-size: 15px; + line-height: 1; + padding: 15px 20px; + text-decoration: none; +} + +.nav-menu li:hover > a, +.nav-menu li a:hover, +.nav-menu li:focus > a, +.nav-menu li a:focus { + background-color: #220e10; + color: #fff; +} + +.nav-menu .sub-menu, +.nav-menu .children { + background-color: #220e10; + border: 2px solid #f7f5e7; + border-top: 0; + padding: 0; + position: absolute; + left: -2px; + z-index: 99999; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); +} + +.nav-menu .sub-menu ul, +.nav-menu .children ul { + border-left: 0; + left: 100%; + top: 0; +} + +ul.nav-menu ul a, +.nav-menu ul ul a { + color: #fff; + margin: 0; + width: 200px; +} + +ul.nav-menu ul a:hover, +.nav-menu ul ul a:hover, +ul.nav-menu ul a:focus, +.nav-menu ul ul a:focus { + background-color: #db572f; +} + +ul.nav-menu li:hover > ul, +.nav-menu ul li:hover > ul, +ul.nav-menu .focus > ul, +.nav-menu .focus > ul { + clip: inherit; + overflow: inherit; + height: inherit; + width: inherit; +} + +.nav-menu .current_page_item > a, +.nav-menu .current_page_ancestor > a, +.nav-menu .current-menu-item > a, +.nav-menu .current-menu-ancestor > a { + color: #bc360a; + font-style: italic; +} + +.menu-toggle { + display: none; +} + +/* Navbar */ +.navbar { + background-color: #f7f5e7; + margin: 0 auto; + max-width: 1600px; + width: 100%; +} + +.site-header .search-form { + position: absolute; + right: 20px; + top: 1px; +} + +.site-header .search-field { + background-color: transparent; + background-image: url(images/search-icon.png); + background-position: 5px center; + background-repeat: no-repeat; + background-size: 24px 24px; + border: none; + cursor: pointer; + height: 37px; + margin: 3px 0; + padding: 0 0 0 34px; + position: relative; + -webkit-transition: width 400ms ease, background 400ms ease; + transition: width 400ms ease, background 400ms ease; + width: 1px; +} + +.site-header .search-field:focus { + background-color: #fff; + border: 2px solid #c3c0ab; + cursor: text; + outline: 0; + width: 230px; +} + + +/** + * 5.0 Content + * ---------------------------------------------------------------------------- + */ + +.hentry { + padding: 40px 0; +} + +.entry-header, +.entry-content, +.entry-summary, +.entry-meta { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +.sidebar .entry-header, +.sidebar .entry-content, +.sidebar .entry-summary, +.sidebar .entry-meta { + max-width: 1040px; + padding: 0 376px 0 60px; +} + + +/** + * 5.1 Entry Header + * ---------------------------------------------------------------------------- + */ + +.sidebar .entry-header .entry-meta { + padding: 0; +} + +.entry-thumbnail img { + display: block; + margin: 0 auto 10px; +} + +.entry-header { + margin-bottom: 30px; +} + +.entry-title { + font-weight: normal; + margin: 0 0 5px; +} + +.entry-title a { + color: #141412; +} + +.entry-title a:hover { + color: #ea9629; +} + + +/** + * 5.2 Entry Meta + * ---------------------------------------------------------------------------- + */ + +.entry-meta { + clear: both; + font-size: 14px; +} + +.entry-meta a { + color: #bc360a; +} + +.entry-meta a:hover { + color: #bc360a; +} + +.entry-meta > span { + margin-right: 20px; +} + +.entry-meta > span:last-child { + margin-right: 0; +} + +.featured-post:before { + content: "\f308"; + margin-right: 2px; +} + +.entry-meta .date a:before { + content: "\f303"; +} + +.comments-link a:before { + content: "\f300"; + margin-right: 2px; + position: relative; + top: -1px; +} + +.entry-meta .author a:before { + content: "\f304"; + position: relative; + top: -1px; +} + +.categories-links a:first-child:before { + content: "\f301"; +} + +.tags-links a:first-child:before { + content: "\f302"; + position: relative; + top: -1px; +} + +.edit-link a:before { + content: "\f411"; + position: relative; + top: -1px; +} + +.single-author .entry-meta .author, +.sticky.format-standard .entry-meta .date, +.sticky.format-audio .entry-meta .date, +.sticky.format-chat .entry-meta .date, +.sticky.format-image .entry-meta .date, +.sticky.format-gallery .entry-meta .date { + display: none; +} + + +/** + * 5.3 Entry Content + * ---------------------------------------------------------------------------- + */ + +.entry-content { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.entry-content a, +.comment-content a { + color: #bc360a; +} + +.entry-content a:hover, +.comment-content a:hover { + color: #ea9629; +} + +.entry-content .more-link { + white-space: nowrap; +} + +.entry-content blockquote { + font-size: 24px; +} + +.entry-content blockquote cite, +.entry-content blockquote small { + font-size: 16px; +} + +.entry-content img.alignleft, +.entry-content .wp-caption.alignleft { + margin-left: -60px; +} + +.entry-content img.alignright, +.entry-content .wp-caption.alignright { + margin-right: -60px; +} + +footer.entry-meta { + margin-top: 24px; +} + +.format-standard footer.entry-meta { + margin-top: 0; +} + +/* Page links */ +.page-links { + clear: both; + font-size: 16px; + font-style: italic; + font-weight: normal; + line-height: 2.2; + margin: 20px 0; + text-transform: uppercase; +} + +.page-links a, +.page-links > span { + background: #fff; + border: 1px solid #fff; + padding: 5px 10px; + text-decoration: none; +} + +.format-status .entry-content .page-links a, +.format-gallery .entry-content .page-links a, +.format-chat .entry-content .page-links a, +.format-quote .entry-content .page-links a, +.page-links a { + background: #e63f2a; + border: 1px solid #e63f2a; + color: #fff; +} + +.format-gallery .entry-content .page-links a:hover, +.format-audio .entry-content .page-links a:hover, +.format-status .entry-content .page-links a:hover, +.format-video .entry-content .page-links a:hover, +.format-chat .entry-content .page-links a:hover, +.format-quote .entry-content .page-links a:hover, +.page-links a:hover { + background: #fff; + color: #e63f2a; +} + +.format-status .entry-content .page-links > span, +.format-quote .entry-content .page-links > span { + background: none; +} + +.page-links .page-links-title { + background: transparent; + border: none; + margin-right: 20px; + padding: 0; +} + +/* Mediaelements */ +.hentry .mejs-mediaelement, +.widget .mejs-mediaelement, +.hentry .mejs-container .mejs-controls, +.widget .mejs-container .mejs-controls { + background: #220e10; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-loaded, +.widget .mejs-controls .mejs-time-rail .mejs-time-loaded, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current, +.widget .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + background: #fff; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-current, +.widget .mejs-controls .mejs-time-rail .mejs-time-current { + background: #ea9629; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-total, +.widget .mejs-controls .mejs-time-rail .mejs-time-total, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.widget .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + background: #595959; +} + +.hentry .mejs-controls .mejs-time-rail span, +.widget .mejs-controls .mejs-time-rail span, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.widget .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current, +.widget .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + border-radius: 0; +} + + +/** + * 5.4 Galleries + * ---------------------------------------------------------------------------- + */ + +.gallery { + margin-bottom: 20px; + margin-left: -4px; +} + +.gallery-item { + float: left; + margin: 0 4px 4px 0; + overflow: hidden; + position: relative; +} + +.gallery-columns-1.gallery-size-medium, +.gallery-columns-1.gallery-size-thumbnail, +.gallery-columns-2.gallery-size-thumbnail, +.gallery-columns-3.gallery-size-thumbnail { + display: table; + margin: 0 auto 20px; +} + +.gallery-columns-1 .gallery-item, +.gallery-columns-2 .gallery-item, +.gallery-columns-3 .gallery-item { + text-align: center; +} + +.gallery-columns-4 .gallery-item { + max-width: 23%; + max-width: -webkit-calc(25% - 4px); + max-width: calc(25% - 4px); +} + +.gallery-columns-5 .gallery-item { + max-width: 19%; + max-width: -webkit-calc(20% - 4px); + max-width: calc(20% - 4px); +} + +.gallery-columns-6 .gallery-item { + max-width: 15%; + max-width: -webkit-calc(16.7% - 4px); + max-width: calc(16.7% - 4px); +} + +.gallery-columns-7 .gallery-item { + max-width: 13%; + max-width: -webkit-calc(14.28% - 4px); + max-width: calc(14.28% - 4px); +} + +.gallery-columns-8 .gallery-item { + max-width: 11%; + max-width: -webkit-calc(12.5% - 4px); + max-width: calc(12.5% - 4px); +} + +.gallery-columns-9 .gallery-item { + max-width: 9%; + max-width: -webkit-calc(11.1% - 4px); + max-width: calc(11.1% - 4px); +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 0; +} + +.gallery-columns-1.gallery-size-medium figure.gallery-item:nth-of-type(1n+1), +.gallery-columns-1.gallery-size-thumbnail figure.gallery-item:nth-of-type(1n+1), +.gallery-columns-2.gallery-size-thumbnail figure.gallery-item:nth-of-type(2n+1), +.gallery-columns-3.gallery-size-thumbnail figure.gallery-item:nth-of-type(3n+1), +.widget-area .gallery-columns-2 figure.gallery-item:nth-of-type(2n+1), +.widget-area .gallery-columns-3 figure.gallery-item:nth-of-type(3n+1), +.widget-area .gallery-columns-4 figure.gallery-item:nth-of-type(4n+1), +.widget-area .gallery-columns-5 figure.gallery-item:nth-of-type(5n+1), +.widget-area .gallery-columns-6 figure.gallery-item:nth-of-type(6n+1), +.widget-area .gallery-columns-7 figure.gallery-item:nth-of-type(7n+1), +.widget-area .gallery-columns-8 figure.gallery-item:nth-of-type(8n+1), +.widget-area .gallery-columns-9 figure.gallery-item:nth-of-type(9n+1) { + clear: left; +} + +.gallery-caption { + background-color: rgba(0, 0, 0, 0.7); + box-sizing: border-box; + color: #fff; + font-size: 14px; + line-height: 1.3; + margin: 0; + max-height: 50%; + opacity: 0; + padding: 2px 8px; + position: absolute; + bottom: 0; + left: 0; + text-align: left; + -webkit-transition: opacity 400ms ease; + transition: opacity 400ms ease; + width: 100%; +} + +.gallery-caption:before { + box-shadow: 0 -10px 15px #000 inset; + content: ""; + height: 100%; + min-height: 49px; + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.gallery-item:hover .gallery-caption { + opacity: 1; +} + +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption, +.widget-area .gallery-columns-2 .gallery-caption, +.widget-area .gallery-columns-3 .gallery-caption, +.widget-area .gallery-columns-4 .gallery-caption, +.widget-area .gallery-columns-5 .gallery-caption, +.widget-area .gallery-columns-6 .gallery-caption, +.widget-area .gallery-columns-7 .gallery-caption, +.widget-area .gallery-columns-8 .gallery-caption, +.widget-area .gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 5.5 Post Formats + * ---------------------------------------------------------------------------- + */ + +/* Aside */ +.format-aside { + background-color: #f7f5e7; +} + +.blog .format-aside:first-of-type, +.single .format-aside:first-of-type, +.format-aside + .format-aside, +.format-aside + .format-link, +.format-link + .format-aside { + box-shadow: inset 0 2px 2px rgba(173, 165, 105, 0.2); +} + +.format-aside .entry-meta { + margin-top: 0; +} + +.format-aside blockquote { + font-size: 100%; + font-weight: normal; +} + +.format-aside cite { + font-size: 100%; + text-transform: none; +} + +.format-aside cite:before { + content: "\2014"; + margin-right: 5px; +} + +/* Audio */ +.format-audio { + background-color: #db572f; +} + +.format-audio .entry-title { + font-size: 28px; + font-weight: bold; +} + +.format-audio .entry-content:before { + content: "\f109"; + float: left; + font-size: 64px; + position: relative; + top: 4px; +} + +.format-audio .entry-content a, +.format-audio .entry-meta a, +.format-audio .entry-content a:hover, +.format-audio .entry-meta a:hover { + color: #fbfaf3; +} + +.format-audio .audio-content { + background: url(images/dotted-line.png) repeat-y left top; + background-size: 4px 4px; + float: right; + padding-left: 35px; + width: 80%; + width: -webkit-calc(100% - 85px); + width: calc(100% - 85px); +} + +.format-audio .wp-audio-shortcode { + height: 30px !important; /* Override mediaelement.js style */ + margin: 20px 0; + max-width: 400px !important; /* Override mediaelement.js style */ +} + +.format-audio audio { + max-width: 100% !important; /* Avoid player width overflow. */ +} + +/* Chat */ +.format-chat { + background-color: #eadaa6; +} + +.format-chat .entry-title { + font-size: 28px; + font-weight: bold; +} + +.format-chat .entry-meta a, +.format-chat .entry-content a { + color: #722d19; +} + +.format-chat .entry-meta .date a:before { + content: "\f108"; + margin-right: 2px; +} + +.format-chat .entry-meta .author { + display: none; +} + +.format-chat .chat { + margin: 0; +} + +.format-chat .chat .chat-timestamp { + color: #722d19; + float: right; + font-size: 12px; + font-weight: normal; + margin: 5px 10px 0; +} + +.format-chat .chat .fn { + font-style: normal; +} + +/* Gallery */ +.format-gallery { + background-color: #fbca3c; +} + +.format-gallery .entry-header { + margin-bottom: 15px; +} + +.format-gallery .entry-title { + font-size: 50px; + font-weight: 400; + margin: 0; +} + +.format-gallery .entry-meta a, +.format-gallery .entry-content a { + color: #722d19; +} + +/* Image */ +.format-image .entry-title { + font-size: 28px; + font-weight: bold; +} + +.format-image .categories-links, +.format-image .tags-links { + display: none; +} + +/* Link */ +.format-link { + background-color: #f7f5e7; +} + +.blog .format-link:first-of-type, +.single .format-link:first-of-type { + box-shadow: inset 0 2px 2px rgba(173, 165, 105, 0.2); +} + +.format-link .entry-header, +.format-link .entry-content p:last-child { + margin-bottom: 0; +} + +.format-link .entry-title { + color: #ca3c08; + display: inline; + font: 300 italic 20px "Source Sans Pro", Helvetica, sans-serif; + margin-right: 20px; +} + +.format-link .entry-title a { + color: #bc360a; +} + +.format-link div.entry-meta { + display: inline; +} + +/* Standard */ +.format-standard .wp-video, +.format-standard .wp-audio-shortcode, +.format-audio .wp-audio-shortcode, +.format-standard .video-player { + margin-bottom: 24px; +} + +/* Quote */ +.format-quote { + background-color: #210d10; +} + +.format-quote .entry-content, +.format-quote .entry-meta { + color: #f7f5e7; +} + +.format-quote .entry-content blockquote { + font-size: 28px; + margin: 0; +} + +.format-quote .entry-content a, +.format-quote .entry-meta a, +.format-quote .linked { + color: #e63f2a; +} + +.format-quote .entry-content cite a { + border-bottom: 1px dotted #fff; + color: #fff; +} + +.format-quote .entry-content cite a:hover { + text-decoration: none; +} + +.format-quote blockquote small, +.format-quote blockquote cite { + display: block; + font-size: 16px; +} + +.format-quote blockquote { + font-style: italic; + font-weight: 300; + padding-left: 75px; + position: relative; +} + +.format-quote blockquote:before { + content: '\201C'; + font-size: 140px; + font-weight: 400; + line-height: .8; + padding-right: 25px; + position: absolute; + left: -15px; + top: -3px; +} + +.format-quote .entry-meta .author { + display: none; +} + +/* Status */ +.format-status { + background-color: #722d19; + padding: 0; +} + +.format-status .entry-content, +.format-status .entry-meta { + padding-left: 35px; + position: relative; +} + +.format-status .entry-content a { + color: #eadaa6; +} + +.format-status .entry-meta a { + color: #f7f5e7; +} + +.sidebar .format-status .entry-content, +.sidebar .format-status .entry-meta { + padding-left: 95px; +} + +.format-status .entry-content:before, +.format-status .entry-meta:before { + background: url(images/dotted-line.png) repeat-y left bottom; + background-size: 4px 4px; + content: ""; + display: block; + height: 100%; + position: absolute; + left: 10px; + top: 0; + width: 1px; +} + +.sidebar .format-status .entry-content:before, +.sidebar .format-status .entry-meta:before { + left: 70px; +} + +.format-status .categories-links, +.format-status .tags-links { + display: none; +} + +/* Ensures the dots in the dot background are in lockstep. */ +.format-status .entry-meta:before { + background-position: left top; +} + +.format-status .entry-content { + color: #f7f5e7; + font-size: 24px; + font-style: italic; + font-weight: 300; + padding-bottom: 30px; + padding-top: 40px; + position: relative; +} + +.format-status .entry-content p:first-child:before { + background-color: rgba(0, 0, 0, 0.65); + content: ""; + height: 3px; + margin-top: 13px; + position: absolute; + left: 4px; + width: 13px; +} + +.sidebar .format-status .entry-content > p:first-child:before { + left: 64px; +} + +.format-status .entry-content p:last-child { + margin-bottom: 0; +} + +.format-status .entry-meta { + margin-top: 0; + padding-bottom: 40px; +} + +.format-status .entry-meta .date a:before { + content: "\f105"; +} + +/* Video */ +.format-video { + background-color: #db572f; +} + +.format-video .entry-content a, +.format-video .entry-meta a, +.format-video .entry-content a:hover, +.format-video .entry-meta a:hover { + color: #fbfaf3; +} + +.format-video .entry-title { + font-size: 50px; + font-weight: 400; +} + +.format-video .entry-meta { + color: #220e10; +} + + +/** + * 5.6 Attachments + * ---------------------------------------------------------------------------- + */ + +.attachment .hentry { + background-color: #e8e5ce; + margin: 0; + padding: 0; +} + +.attachment .entry-header { + margin-bottom: 0; + max-width: 1040px; + padding: 30px 0; +} + +.attachment .entry-title { + display: inline-block; + float: left; + font: 300 italic 30px "Source Sans Pro", Helvetica, sans-serif; + margin: 0; +} + +.attachment .entry-title:before { + content: "\f416"; + font-size: 32px; + margin-right: 10px; +} + +.attachment .entry-meta { + clear: none; + color: inherit; + float: right; + max-width: 604px; + padding: 9px 0 0; + text-align: right; +} + +.hentry.attachment:not(.image-attachment) .entry-meta { + max-width: 104px; +} + +.attachment footer.entry-meta { + display: none; +} + +.attachment-meta:before { + content: "\f307"; +} + +.full-size-link a:before { + content: "\f402"; +} + +.full-size-link:before { + content: none; +} + +.attachment .entry-meta a, +.attachment .entry-meta .edit-link:before, +.attachment .full-size-link:before { + color: #ca3c08; +} + +.attachment .entry-content { + background-color: #fff; + max-width: 100%; + padding: 40px 0; +} + +.image-navigation { + margin: 0 auto; + max-width: 1040px; + position: relative; +} + +.image-navigation a:hover { + text-decoration: none; +} + +.image-navigation .nav-previous, +.image-navigation .nav-next { + position: absolute; + top: 50px; +} + +.image-navigation .nav-previous { + left: 0; +} + +.image-navigation .nav-next { + right: 0; +} + +.image-navigation .meta-nav { + font-size: 32px; + font-weight: 300; + vertical-align: -4px; +} + +.attachment .entry-attachment, +.attachment .type-attachment p { + margin: 0 auto; + max-width: 724px; + text-align: center; +} + +.attachment .entry-attachment .attachment { + display: inline-block; +} + +.attachment .entry-caption { + text-align: left; +} + +.attachment .entry-description { + margin: 20px auto 0; + max-width: 604px; +} + +.attachment .entry-caption p:last-child, +.attachment .entry-description p:last-child { + margin: 0; +} + +.attachment .site-main .sidebar-container { + display: none; +} + +.attachment .entry-content .mejs-audio { + max-width: 400px; + margin: 0 auto; +} + +.attachment .entry-content .wp-video { + margin: 0 auto; +} + +.attachment .entry-content .mejs-container { + margin-bottom: 24px; +} + +/** + * 5.7 Post/Paging Navigation + * ---------------------------------------------------------------------------- + */ + +.navigation .nav-previous { + float: left; +} + +.navigation .nav-next { + float: right; +} + +.navigation a { + color: #bc360a; +} + +.navigation a:hover { + color: #ea9629; + text-decoration: none; +} + +.paging-navigation { + background-color: #e8e5ce; + padding: 40px 0; +} + +.paging-navigation .nav-links { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +.sidebar .paging-navigation .nav-links { + max-width: 1040px; + padding: 0 376px 0 60px; +} + +.paging-navigation .nav-next { + padding: 13px 0; +} + +.paging-navigation a { + font-size: 22px; + font-style: italic; + font-weight: 300; +} + +.paging-navigation .meta-nav { + background-color: #e63f2a; + border-radius: 50%; + color: #fff; + display: inline-block; + font-size: 26px; + padding: 3px 0 8px; + text-align: center; + width: 50px; +} + +.paging-navigation .nav-previous .meta-nav { + margin-right: 10px; + padding: 17px 0 23px; + width: 80px; +} + +.paging-navigation .nav-next .meta-nav { + margin-left: 10px; +} + +.paging-navigation a:hover .meta-nav { + background-color: #ea9629; + text-decoration: none; +} + +.post-navigation { + background-color: #fff; + color: #ca3c08; + font-size: 20px; + font-style: italic; + font-weight: 300; + padding: 20px 0; +} + +.post-navigation .nav-links { + margin: 0 auto; + max-width: 1040px; +} + +.sidebar .post-navigation .nav-links { + padding: 0 376px 0 60px; +} + +.post-navigation a[rel="next"] { + float: right; + text-align: right; +} + + +/** + * 5.8 Author Bio + * ---------------------------------------------------------------------------- + */ + +.author-info { + margin: 0 auto; + max-width: 604px; + padding: 30px 0 10px; + text-align: left; /* gallery & video post formats */ + width: 100%; +} + +.author.sidebar .author-info { + max-width: 1040px; + padding: 30px 376px 10px 60px; +} + +.single .author-info { + padding: 50px 0 0; +} + +.author-avatar .avatar { + float: left; + margin: 0 30px 30px 0; +} + +.single-format-status .author-description { + color: #f7f5e7; +} + +.author-description .author-title { + clear: none; + font: 300 italic 20px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 0 8px; +} + +.author-link { + color: #ca3c08; + margin-left: 2px; +} + +.author.archive .author-link { + display: none; +} + + +/** + * 5.9 Archives + * ---------------------------------------------------------------------------- + */ + +.archive-header { + background-color: #e8e5ce; +} + +.archive-title, +.archive-meta { + font: 300 italic 30px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 auto; + max-width: 1040px; + padding: 30px 0; + width: 100%; +} + +.archive-meta { + font-size: 16px; + font-style: normal; + font-weight: normal; + margin-top: -15px; + padding: 0 0 11px; +} + +.sidebar .archive-meta { + padding-right: 316px; +} + + +/** + * 5.10 Search Results/No posts + * ---------------------------------------------------------------------------- + */ + +.page-header { + background-color: #e8e5ce; +} + +.page-title { + font: 300 italic 30px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 auto; + max-width: 1040px; + padding: 30px 0; + width: 100%; +} + +.page-content { + margin: 0 auto; + max-width: 604px; + padding: 40px 0; + width: 100%; +} + +.sidebar .page-content { + margin: 0 auto; + max-width: 1040px; + padding: 40px 376px 40px 60px; +} + + +/** + * 5.11 404 + * ---------------------------------------------------------------------------- + */ + +.error404 .page-header { + background-color: #fff; +} + +.error404 .page-title { + line-height: 0.6; + margin: 0; + padding: 300px; + position: relative; + text-align: center; + width: auto; +} + +.error404 .page-title:before { + color: #e8e5ce; + content: "\f423"; + font-size: 964px; + line-height: 0.6; + overflow: hidden; + position: absolute; + left: 7px; + top: 28px; +} + +.error404 .page-wrapper { + background-color: #e8e5ce; +} + +.error404 .page-header, +.error404 .page-content { + margin: 0 auto; + max-width: 1040px; + padding-bottom: 40px; + width: 100%; +} + + +/** + * 5.12 Comments + * ---------------------------------------------------------------------------- + */ + +.comments-title, +.comment-list, +.comment-reply-title, +.must-log-in, +.comment-respond .comment-form, +.comment-respond iframe { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 604px; + width: 100%; +} + +.sidebar .comments-title, +.sidebar .comment-list, +.sidebar .must-log-in, +.sidebar .comment-reply-title, +.sidebar .comment-navigation, +.sidebar .comment-respond .comment-form { + max-width: 1040px; + padding-left: 60px; + padding-right: 376px; +} + +.comments-title { + font: 300 italic 28px "Source Sans Pro", Helvetica, sans-serif; +} + +.comment-list, +.comment-list .children { + list-style-type: none; + padding: 0; +} + +.comment-list .children { + margin-left: 20px; +} + +.comment-list > li:after, +.comment-list .children > li:before { + background: url(images/dotted-line.png) repeat left top; + background-size: 4px 4px; + content: ""; + display: block; + height: 1px; + width: 100%; +} + +.comment-list > li:last-child:after { + display: none; +} + +.comment-body { + padding: 24px 0; + position: relative; +} + +.comment-author { + float: left; + max-width: 74px; +} + +.comment-author .avatar { + display: block; + margin-bottom: 10px; +} + +.comment-author .fn { + word-wrap: break-word; +} + +.comment-author .fn, +.comment-author .url, +.comment-reply-link, +.comment-reply-login { + color: #bc360a; + font-size: 14px; + font-style: normal; + font-weight: normal; +} + +.says { + display: none; +} + +.no-avatars .comment-author { + margin: 0 0 5px; + max-width: 100%; + position: relative; +} + +.no-avatars .comment-metadata, +.no-avatars .comment-content, +.no-avatars .comment-list .reply { + width: 100%; +} + +.bypostauthor > .comment-body .fn:before { + content: "\f408"; + vertical-align: text-top; +} + +.comment-list .edit-link { + margin-left: 20px; +} + +.comment-metadata, +.comment-awaiting-moderation, +.comment-content, +.comment-list .reply { + float: right; + width: 79%; + width: -webkit-calc(100% - 124px); + width: calc(100% - 124px); + word-wrap: break-word; +} + +.comment-meta, +.comment-meta a { + color: #a2a2a2; + font-size: 13px; +} + +.comment-meta a:hover { + color: #ea9629; +} + +.comment-metadata { + margin-bottom: 20px; +} + +.ping-meta { + color: #a2a2a2; + font-size: 13px; + line-height: 2; +} + +.comment-awaiting-moderation { + color: #a2a2a2; +} + +.comment-awaiting-moderation:before { + content: "\f414"; + margin-right: 5px; + position: relative; + top: -2px; +} + +.comment-reply-link:before, +.comment-reply-login:before { + content: "\f412"; + margin-right: 3px; +} + +/* Comment form */ +.comment-respond { + background-color: #f7f5e7; + padding: 30px 0; +} + +.comment .comment-respond { + margin-bottom: 20px; + padding: 20px; +} + +.comment-reply-title { + font: 300 italic 28px "Source Sans Pro", Helvetica, sans-serif; +} + +.comment-reply-title small a { + color: #131310; + display: inline-block; + float: right; + height: 16px; + overflow: hidden; + width: 16px; +} + +.comment-reply-title small a:hover { + color: #ed331c; + text-decoration: none; +} + +.comment-reply-title small a:before { + content: "\f406"; + vertical-align: top; +} + +.sidebar .comment-list .comment-reply-title, +.sidebar .comment-list .comment-respond .comment-form { + padding: 0; +} + +.comment-form .comment-notes { + margin-bottom: 15px; +} + +.comment-form .comment-form-author, +.comment-form .comment-form-email, +.comment-form .comment-form-url { + margin-bottom: 8px; +} + +.comment-form [for="author"], +.comment-form [for="email"], +.comment-form [for="url"], +.comment-form [for="comment"] { + float: left; + padding: 5px 0; + width: 120px; +} + +.comment-form .required { + color: #ed331c; +} + +.comment-form input[type="text"], +.comment-form input[type="email"], +.comment-form input[type="url"] { + max-width: 270px; + width: 60%; +} + +.comment-form textarea { + width: 100%; +} + +.comment-form #wp-comment-cookies-consent { + margin: 0 10px 0 0; +} + +.form-allowed-tags, +.form-allowed-tags code { + color: #686758; + font-size: 12px; +} + +.form-allowed-tags code { + font-size: 10px; + margin-left: 3px; +} + +.comment-list .pingback, +.comment-list .trackback { + padding-top: 24px; +} + +.comment-navigation { + font-size: 20px; + font-style: italic; + font-weight: 300; + margin: 0 auto; + max-width: 604px; + padding: 20px 0 30px; + width: 100%; +} + +.no-comments { + background-color: #f7f5e7; + font-size: 20px; + font-style: italic; + font-weight: 300; + margin: 0; + padding: 40px 0; + text-align: center; +} + +.sidebar .no-comments { + padding-left: 60px; + padding-right: 376px; +} + + +/** + * 5.13 Multisite + * ---------------------------------------------------------------------------- + */ + +.site-main .mu_register { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +.mu_alert { + margin-top: 25px; +} + +.site-main .mu_register input[type="submit"], +.site-main .mu_register #blog_title, +.site-main .mu_register #user_email, +.site-main .mu_register #blogname, +.site-main .mu_register #user_name { + font-size: inherit; + width: 270px; +} + +.site-main .mu_register input[type="submit"] { + width: auto; +} + + +/** + * 6.0 Sidebar + * ---------------------------------------------------------------------------- + */ + +.site-main .widget-area { + float: right; + width: 300px; +} + + +/** + * 6.1 Widgets + * ---------------------------------------------------------------------------- + */ + +.widget { + background-color: rgba(247, 245, 231, 0.7); + font-size: 14px; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + margin: 0 0 24px; + padding: 20px; + word-wrap: break-word; +} + +.widget .widget-title { + font: 300 italic 20px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 0 10px; +} + +.widget ul, +.widget ol { + list-style-type: none; + margin: 0; + padding: 0; +} + +.widget li { + padding: 5px 0; +} + +.widget .children li:last-child { + padding-bottom: 0; +} + +.widget li > ul, +.widget li > ol { + margin-left: 20px; +} + +.widget a { + color: #bc360a; +} + +.widget a:hover { + color: #ea9629; +} + +/* Search widget */ +.search-form .search-submit { + display: none; +} + +/* RSS Widget */ +.widget_rss .rss-date { + display: block; +} + +.widget_rss .rss-date, +.widget_rss li > cite { + color: #a2a2a2; +} + +/* Calendar Widget */ +.widget_calendar table, +.widget_calendar td { + border: 0; + border-collapse: separate; + border-spacing: 1px; +} + +.widget_calendar caption { + font-size: 14px; + margin: 0; +} + +.widget_calendar th, +.widget_calendar td { + padding: 0; + text-align: center; +} + +.widget_calendar a { + display: block; +} + +.widget_calendar a:hover { + background-color: rgba(0, 0, 0, 0.15); +} + +.widget_calendar tbody td { + background-color: rgba(255, 255, 255, 0.5); +} + +.site-footer .widget_calendar tbody td { + background-color: rgba(255, 255, 255, 0.05); +} + +.widget_calendar tbody .pad, .site-footer .widget_calendar tbody .pad { + background-color: transparent; +} + +/* Text widget */ +.widget_text ul, +.widget_text ol { + padding-left: 20px; + margin-bottom: 16px; +} + +.widget_text li:last-child { + padding-bottom: 0; +} + +.widget_text li > ul, +.widget_text li > ol { + margin-bottom: 0; +} + +.widget_text ul { + list-style: square; +} + +.widget_text ol { + list-style: decimal; +} + +/* Tag Cloud widget */ +.tagcloud ul { + list-style-type: none; +} + +.tagcloud ul li { + display: inline-block; + padding: 0; +} + +/* Gallery Widget */ +.widget .gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.widget .gallery-columns-2 .gallery-item { + max-width: 49%; + max-width: -webkit-calc(50% - 4px); + max-width: calc(50% - 4px); +} + +.widget .gallery-columns-3 .gallery-item { + max-width: 22%; + max-width: -webkit-calc(33% - 4px); + max-width: calc(33% - 4px); +} + +/** + * 7.0 Footer + * ---------------------------------------------------------------------------- + */ + +.site-footer { + background-color: #e8e5ce; + color: #686758; + font-size: 14px; + text-align: center; +} + +.site-footer .widget-area, +.sidebar .site-footer { + text-align: left; +} + +.site-footer a { + color: #686758; +} + +.site-footer .sidebar-container { + background-color: #220e10; + padding: 20px 0; +} + +.site-footer .widget-area { + margin: 0 auto; + max-width: 1040px; + width: 100%; +} + +.sidebar .site-footer .widget-area { + max-width: 724px; + position: relative; + left: -158px; +} + +.site-footer .widget { + background: transparent; + color: #fff; + float: left; + margin-right: 20px; + width: 245px; +} + +.sidebar .site-footer .widget { + width: 228px; +} + +.sidebar .site-footer .widget:nth-of-type(4), +.sidebar .site-footer .widget:nth-of-type(3) { + margin-right: 0; +} + +.site-footer .widget a { + color: #e6402a; +} + +.site-footer .widget-title, +.site-footer .widget-title a, +.site-footer .wp-caption-text { + color: #fff; +} + +.site-info { + margin: 0 auto; + max-width: 1040px; + padding: 30px 0; + width: 100%; +} + +#wpstats { + display: block; + margin: -10px auto 0; +} + +.site-footer span[role=separator] { + padding: 0 0.25em 0 0.5em; +} + +.site-footer span[role=separator]::before { + content: '\002f'; +} + +/** + * 8.0 Media Queries + * ---------------------------------------------------------------------------- + */ + +/* Does the same thing as , + * but in the future W3C standard way. -ms- prefix is required for IE10+ to + * render responsive styling in Windows 8 "snapped" views; IE10+ does not honor + * the meta tag. See https://core.trac.wordpress.org/ticket/25888. + */ +@-ms-viewport { + width: device-width; +} +@viewport { + width: device-width; +} + +@media (max-width: 1599px) { + .site { + border: 0; + } +} + +@media (max-width: 1069px) { + .sidebar img.alignleft, + .sidebar .wp-caption.alignleft { + margin-left: 0; + } + + .sidebar img.alignright, + .sidebar .wp-caption.alignright { + margin-right: 0; + } + + .error404 .page-header { + margin-left: auto; + max-width: 604px; + width: 100%; + } + + .archive-header, + .search .page-header, + .archive .page-header, + .blog .page-header, + .error404 .page-content, + .search .page-content, + .archive .page-content, + .attachment .entry-header, + .attachment .entry-content, + .post-navigation .nav-links, + .sidebar .site-info, + .site-footer .widget-area { + padding-left: 20px; + padding-right: 20px; + } + + .error404 .page-title { + font-size: 24px; + padding: 180px; + } + + .error404 .page-title:before { + font-size: 554px; + } + + .attachment .image-navigation { + max-width: 724px; + } + + .image-navigation .nav-previous, + .image-navigation .nav-next { + position: static; + } + + .site-main .widget-area { + margin-right: 60px; + } +} + +@media (max-width: 999px) { + .sidebar .entry-header, + .sidebar .entry-content, + .sidebar .entry-summary, + .sidebar .entry-meta, + .sidebar .comment-list, + .sidebar .comment-reply-title, + .sidebar .comment-navigation, + .sidebar .comment-respond .comment-form, + .sidebar .featured-gallery, + .sidebar .post-navigation .nav-links, + .author.sidebar .author-info { + max-width: 604px; + padding-left: 0; + padding-right: 0; + } + + .sidebar .site-info, + .search.sidebar .page-content, + .blog.sidebar .page-content, + .attachment .entry-header, + .sidebar .comments-title { + max-width: 604px; + } + + .sidebar .archive-meta, + .attachment .entry-header, + .search.sidebar .page-content, + .blog.sidebar .page-content, + .sidebar .site-info, + .sidebar .comments-title, + .sidebar .no-comments { + padding-left: 0; + padding-right: 0; + } + + .attachment .entry-meta { + float: left; + text-align: left; + width: 100%; + } + + .attachment .entry-content { + max-width: 100%; + padding: 40px 0; + } + + .format-status .entry-content { + padding-top: 40px; + } + + .format-status .entry-meta { + padding-bottom: 40px; + } + + .sidebar .format-status .entry-content, + .sidebar .format-status .entry-meta { + padding-left: 35px; + } + + .sidebar .format-status .entry-content:before, + .sidebar .format-status .entry-meta:before { + left: 10px; + } + + .sidebar .format-status .entry-content p:first-child:before { + left: 4px; + } + + .sidebar .paging-navigation .nav-links { + padding: 0 60px; + } + + .site-main .sidebar-container { + height: auto; + margin: 0 auto; + max-width: 604px; + position: relative; + top: 20px; + } + + .site-main .widget-area { + float: none; + margin: 0; + width: 100%; + } + + .sidebar .site-footer .widget-area { + max-width: 100%; + left: 0; + } +} + +/* Collapse oversized image and pulled images after iPad breakpoint. */ +@media (max-width: 767px) { + .site-header .home-link { + min-height: 0; + } + .site-title { + font-size: 36px; + padding: 8px 0 10px; + } + .entry-content img.alignleft, + .entry-content .wp-caption.alignleft { + margin-left: 0; + } + + .entry-content img.alignright, + .entry-content .wp-caption.alignright { + margin-right: 0; + } + + .attachment .image-navigation, + .attachment .entry-attachment .attachment { + max-width: 604px; + padding: 0; + width: 100%; + } + + .gallery-caption { + display: none; + } +} + +@media (max-width: 643px) { + .site-title { + font-size: 30px; + } + + #content .entry-header, + #content .entry-content, + #content .entry-summary, + #content footer.entry-meta, + #content .featured-gallery, + .search.sidebar .page-content, + .blog.sidebar .page-content, + .sidebar .post-navigation .nav-links, + .paging-navigation .nav-links, + #content .author-info, + .comments-area .comments-title, + .comments-area .comment-list, + .comments-area .comment-navigation, + .comment-respond, + .sidebar .site-info, + .sidebar .paging-navigation .nav-links { + padding-left: 20px; + padding-right: 20px; + } + + #content .format-status .entry-content, + #content .format-status .entry-met { + padding-left: 35px; + } + + /* Small menu */ + .menu-toggle { + cursor: pointer; + display: inline-block; + font: bold 16px/1.3 "Source Sans Pro", Helvetica, sans-serif; + margin: 0; + } + + .menu-toggle, + .menu-toggle:hover, + .menu-toggle:focus, + .menu-toggle:active { + background: none; + border: none; + color: #141412; + padding: 12px 0 12px 20px; + } + + .menu-toggle:focus { + outline: thin dotted; + } + + .menu-toggle:after { + content: "\f502"; + font-size: 12px; + padding-left: 8px; + vertical-align: -4px; + } + + .toggled-on .menu-toggle:after { + content: "\f500"; + vertical-align: 2px; + } + + .toggled-on .nav-menu, + .toggled-on .nav-menu > ul { + display: block; + margin-left: 0; + padding: 0; + width: 100%; + } + + .toggled-on li, + .toggled-on .children { + display: block; + } + + .toggled-on .nav-menu li > ul { + background-color: transparent; + display: block; + float: none; + margin-left: 20px; + position: relative; + left: auto; + top: auto; + } + + .toggled-on .nav-menu li > ul a { + color: #141412; + width: auto; + } + + .toggled-on .nav-menu li:hover > a, + .toggled-on .nav-menu .children a { + background-color: transparent; + color: #141412; + } + + .toggled-on .nav-menu > li a:hover, + .toggled-on .nav-menu > ul a:hover { + background-color: #db572f; + color: #fff; + } + + .toggled-on .nav-menu > li a:focus, + .toggled-on .nav-menu > ul a:focus { + background-color: #220e10; + color: #fff; + } + + ul.nav-menu, + div.nav-menu > ul { + display: none; + } + + #content .featured-gallery { + padding-left: 24px; + } + + .gallery-columns-1 .gallery-item { + margin-right: 0; + width: 100%; + } + + .entry-title, + .format-chat .entry-title, + .format-image .entry-title, + .format-gallery .entry-title, + .format-video .entry-title { + font-size: 22px; + font-weight: bold; + } + + .format-quote blockquote, + .format-status .entry-content { + font-size: 18px; + } + + .format-quote blockquote small, + .format-quote blockquote cite { + font-size: 13px; + } + + .error404 .page-title { + padding: 40px 0 0; + } + + .error404 .page-title:before { + content: normal; + } + + .comment-author { + margin-right: 30px; + } + + .comment-author .avatar { + height: auto; + max-width: 100%; + } + + .comment-metadata, + .comment-content, + .comment-list .reply { + width: 70%; + width: -webkit-calc(100% - 104px); + width: calc(100% - 104px); + } + + .comment-form input[type="text"], + .comment-form input[type="email"], + .comment-form input[type="url"] { + width: -webkit-calc(100% - 120px); + width: calc(100% - 120px); + } + + .comment-form textarea { + height: 80px; /* Smaller field for mobile. */ + } + + /* Audio */ + .format-audio .entry-content:before { + display: none; + } + + .format-audio .audio-content { + background-image: none; + float: none; + padding-left: 0; + width: auto; + } +} + +/* Mobile devices */ +@media (max-width: 359px) { + .site-title { + font-weight: normal; + } + .site-description { + clip: rect(1px, 1px, 1px, 1px); + position: absolute; + } + .gallery { + margin-left: 0; + } + + .gallery .gallery-item, + .gallery-columns-2.gallery-size-thumbnail .gallery-item { + max-width: none; + width: 49%; + width: -webkit-calc(50% - 4px); + width: calc(50% - 4px); + } + + .gallery-columns-1.gallery-size-medium, + .gallery-columns-1.gallery-size-thumbnail, + .gallery-columns-2.gallery-size-thumbnail, + .gallery-columns-3.gallery-size-thumbnail { + display: block; + } + + .gallery-columns-1 .gallery-item, + .gallery-columns-1.gallery-size-medium .gallery-item, + .gallery-columns-1.gallery-size-thumbnail .gallery-item { + text-align: center; + width: 98%; + width: -webkit-calc(100% - 4px); + width: calc(100% - 4px); + } + + .gallery-columns-3 .gallery-item:nth-of-type(3n), + .gallery-columns-5 .gallery-item:nth-of-type(5n), + .gallery-columns-7 .gallery-item:nth-of-type(7n), + .gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 4px; + } + + .gallery br { + display: none; + } + + .gallery .gallery-item:nth-of-type(even) { + margin-right: 0; + } + + /* Comments */ + .comment-author { + margin: 0 0 5px; + max-width: 100%; + } + + .comment-author .avatar { + display: inline; + margin: 0 5px 0 0; + max-width: 20px; + } + + .comment-metadata, + .comment-content, + .comment-list .reply { + width: 100%; + } +} + + +/** + * 9.0 Print + * ---------------------------------------------------------------------------- + */ + +/* Retina-specific styles. */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .site-header .search-field { + background-image: url(images/search-icon-2x.png); + } + + .format-audio .audio-content, + .format-status .entry-content:before, + .format-status .entry-meta:before, + .comment-list > li:after, + .comment-list .children > li:before { + background-image: url(images/dotted-line-2x.png); + } +} + +@media print { + body { + background: none !important; + color: #000; + font-size: 10pt; + } + + footer a[rel="bookmark"]:link:after, + footer a[rel="bookmark"]:visited:after { + content: " [" attr(href) "] "; /* Show URLs */ + } + + .site { + max-width: 98%; + } + + .site-header { + background-image: none !important; + } + + .site-header .home-link { + max-width: none; + min-height: 0; + } + + .site-title { + color: #000; + font-size: 21pt; + } + + .site-description { + font-size: 10pt; + } + + .author-avatar, + .site-footer, + .comment-respond, + .comments-area .comment-edit-link, + .comments-area .reply, + .comments-link, + .entry-meta .edit-link, + .page-links, + .site-content nav, + .widget-area, + .main-navigation, + .navbar, + .more-link { + display: none; + } + + .entry-header, + .entry-content, + .entry-summary, + .entry-meta { + margin: 0; + width: 100%; + } + + .page-title, + .entry-title { + font-size: 21pt; + } + + .entry-meta, + .entry-meta a { + color: #444; + font-size: 10pt; + } + + .entry-content img.alignleft, + .entry-content .wp-caption.alignleft { + margin-left: 0; + } + + .entry-content img.alignright, + .entry-content .wp-caption.alignright { + margin-right: 0; + } + + .format-image .entry-content .size-full { + margin: 0; + } + + /* Remove colors from post formats */ + .hentry { + background-color: #fff; + } + + /* Comments */ + .comments-area > li.comment { + background: none; + position: relative; + width: auto; + } + + .comment-metadata { + float: none; + } + + .comment-author .fn, + .comment-reply-link, + .comment-reply-login { + color: #333; + } +} diff --git a/wp-content/themes/twentythirteen/tag.php b/wp-content/themes/twentythirteen/tag.php new file mode 100644 index 000000000..e5749fa6c --- /dev/null +++ b/wp-content/themes/twentythirteen/tag.php @@ -0,0 +1,46 @@ + + +
        +
        + + +
        +

        + + +
        + +
        + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentythirteen/taxonomy-post_format.php b/wp-content/themes/twentythirteen/taxonomy-post_format.php new file mode 100644 index 000000000..67a58f0f0 --- /dev/null +++ b/wp-content/themes/twentythirteen/taxonomy-post_format.php @@ -0,0 +1,44 @@ + + +
        +
        + + +
        +

        ' . esc_html( get_post_format_string( get_post_format() ) ) . '' ); ?>

        +
        + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentytwelve/404.php b/wp-content/themes/twentytwelve/404.php new file mode 100644 index 000000000..8b039ecee --- /dev/null +++ b/wp-content/themes/twentytwelve/404.php @@ -0,0 +1,29 @@ + + +
        +
        + +
        +
        +

        +
        + +
        +

        + +
        +
        + +
        +
        + + diff --git a/wp-content/themes/twentytwelve/archive.php b/wp-content/themes/twentytwelve/archive.php new file mode 100644 index 000000000..44a0d6294 --- /dev/null +++ b/wp-content/themes/twentytwelve/archive.php @@ -0,0 +1,66 @@ + + +
        +
        + + +
        +

        + ' . get_the_date() . '' ); + elseif ( is_month() ) : + printf( __( 'Monthly Archives: %s', 'twentytwelve' ), '' . get_the_date( _x( 'F Y', 'monthly archives date format', 'twentytwelve' ) ) . '' ); + elseif ( is_year() ) : + printf( __( 'Yearly Archives: %s', 'twentytwelve' ), '' . get_the_date( _x( 'Y', 'yearly archives date format', 'twentytwelve' ) ) . '' ); + else : + _e( 'Archives', 'twentytwelve' ); + endif; + ?> +

        +
        + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentytwelve/author.php b/wp-content/themes/twentytwelve/author.php new file mode 100644 index 000000000..0607a781f --- /dev/null +++ b/wp-content/themes/twentytwelve/author.php @@ -0,0 +1,88 @@ + + +
        +
        + + + + + +
        +

        ' . get_the_author() . '' ); ?>

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

        +

        +
        +
        + + + + + + + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentytwelve/category.php b/wp-content/themes/twentytwelve/category.php new file mode 100644 index 000000000..558946dcd --- /dev/null +++ b/wp-content/themes/twentytwelve/category.php @@ -0,0 +1,52 @@ + + +
        +
        + + +
        +

        ' . single_cat_title( '', false ) . '' ); ?>

        + + +
        + +
        + + + + + + + +
        +
        + + + diff --git a/wp-content/themes/twentytwelve/comments.php b/wp-content/themes/twentytwelve/comments.php new file mode 100644 index 000000000..5537fc460 --- /dev/null +++ b/wp-content/themes/twentytwelve/comments.php @@ -0,0 +1,81 @@ + + +
        + + + + +

        + ' . get_the_title() . '' + ); + } else { + printf( + /* translators: %1$s: The number of comments. %2$s: The post title. */ + _n( '%1$s thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'twentytwelve' ), + number_format_i18n( get_comments_number() ), + '' . get_the_title() . '' + ); + } + ?> +

        + +
          + 'twentytwelve_comment', + 'style' => 'ol', + ) + ); + ?> +
        + + 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> + + + + +

        + + + + + + +
        diff --git a/wp-content/themes/twentytwelve/content-aside.php b/wp-content/themes/twentytwelve/content-aside.php new file mode 100644 index 000000000..4a84ae76d --- /dev/null +++ b/wp-content/themes/twentytwelve/content-aside.php @@ -0,0 +1,28 @@ + + +
        > +
        +

        +
        + →', 'twentytwelve' ) ); ?> +
        +
        + +
        + + + + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentytwelve/content-image.php b/wp-content/themes/twentytwelve/content-image.php new file mode 100644 index 000000000..a683b83cf --- /dev/null +++ b/wp-content/themes/twentytwelve/content-image.php @@ -0,0 +1,28 @@ + + +
        > +
        + →', 'twentytwelve' ) ); ?> +
        + +
        + +

        +

        +
        + + + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentytwelve/content-link.php b/wp-content/themes/twentytwelve/content-link.php new file mode 100644 index 000000000..31e4ec958 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-link.php @@ -0,0 +1,26 @@ + + +
        > +
        +
        + →', 'twentytwelve' ) ); ?> +
        + +
        + + + + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentytwelve/content-none.php b/wp-content/themes/twentytwelve/content-none.php new file mode 100644 index 000000000..b7757821c --- /dev/null +++ b/wp-content/themes/twentytwelve/content-none.php @@ -0,0 +1,20 @@ + + +
        +
        +

        +
        + +
        +

        + +
        +
        diff --git a/wp-content/themes/twentytwelve/content-page.php b/wp-content/themes/twentytwelve/content-page.php new file mode 100644 index 000000000..3511b75f3 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-page.php @@ -0,0 +1,33 @@ + + +
        > +
        + + + +

        +
        + +
        + + '', + ) + ); + ?> +
        +
        + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentytwelve/content-quote.php b/wp-content/themes/twentytwelve/content-quote.php new file mode 100644 index 000000000..0a98a96de --- /dev/null +++ b/wp-content/themes/twentytwelve/content-quote.php @@ -0,0 +1,25 @@ + + +
        > +
        + →', 'twentytwelve' ) ); ?> +
        + +
        + + + + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentytwelve/content-status.php b/wp-content/themes/twentytwelve/content-status.php new file mode 100644 index 000000000..55b72db67 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-status.php @@ -0,0 +1,42 @@ + + +
        > +
        +
        +

        +

        +
        + +
        + +
        + →', 'twentytwelve' ) ); ?> +
        + +
        + + + + ', '' ); ?> +
        +
        diff --git a/wp-content/themes/twentytwelve/content.php b/wp-content/themes/twentytwelve/content.php new file mode 100644 index 000000000..2eab91d0f --- /dev/null +++ b/wp-content/themes/twentytwelve/content.php @@ -0,0 +1,82 @@ + + +
        > + +
        + +
        + +
        + + + +

        + +

        + +

        + + + + +
        + + +
        + +
        + +
        + →', 'twentytwelve' ) ); ?> + '', + ) + ); + ?> +
        + + + +
        diff --git a/wp-content/themes/twentytwelve/css/blocks.css b/wp-content/themes/twentytwelve/css/blocks.css new file mode 100644 index 000000000..a88ffcbfe --- /dev/null +++ b/wp-content/themes/twentytwelve/css/blocks.css @@ -0,0 +1,443 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #757575; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; + font-style: italic; + text-align: left; +} + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 24px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 24px; +} + +.rtl [class^="wp-block-"] figcaption { + text-align: right; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image figure:not(.aligncenter) { + line-height: 0; + margin: 0 1.714285714rem; +} + +.wp-block-image figure.alignleft { + margin: 0.857142857rem 1.714285714rem 0.857142857rem 0; +} + +.wp-block-image figure.alignright { + margin: 0.857142857rem 0 0.857142857rem 1.714285714rem; +} + +.wp-block-image figcaption { + padding-top: 0.75em; +} + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft, +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 24px; + margin-bottom: 1.714285714rem; +} + +.wp-block-gallery .blocks-gallery-image figcaption, +.wp-block-gallery .blocks-gallery-item figcaption { + left: 0; + right: 0; + text-align: center; + width: auto; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 24px; + padding: 1.714285714rem; +} + +.wp-block-quote { + padding: 24px; + padding: 1.714285714rem; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; + font-style: italic; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 20px; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + margin-bottom: 1.714285714rem; + width: 100%; +} + +/* Cover */ + +.wp-block-cover-image.aligncenter, +.wp-block-cover.aligncenter { + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background-color: #e6e6e6; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(to bottom, #f4f4f4, #e6e6e6); + border: 1px solid #d2d2d2; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); + color: #7c7c7c; + font-family: inherit; + font-size: 11px; + font-size: 0.785714286rem; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; + padding: 0.428571429rem 0.714285714rem; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background-color: #ebebeb; + background-image: -moz-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -ms-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -webkit-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -o-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: linear-gradient(to bottom, #f9f9f9, #ebebeb); + background-repeat: repeat-x; + color: #5e5e5e; +} + +.wp-block-file .wp-block-file__button:focus { + background-color: #e1e1e1; + background-image: -moz-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -ms-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -webkit-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -o-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: linear-gradient(to bottom, #ebebeb, #e1e1e1); + background-repeat: repeat-x; + border-color: transparent; + box-shadow: inset 0 0 8px 2px #c6c6c6, 0 1px 0 0 #f4f4f4; + color: #757575; +} + +.rtl .wp-block-file * + .wp-block-file__button { + margin-left: 0.75em; + margin-right: 0; +} + +/* Video */ + +.wp-block-video video:not(:last-child) { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +pre.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote__citation, +.wp-block-pullquote cite, +.wp-block-pullquote footer { + font-size: 14px; + text-transform: none; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + padding: 6px 10px 6px 0; + text-transform: uppercase; +} + +.wp-block-table td { + border: 0; + border-top: 1px solid #ededed; + padding: 6px 10px 6px 0; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + border: 1px solid #d2d2d2; + font-family: inherit; + font-size: 11px; + font-size: 0.785714286rem; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; + padding: 0.428571429rem 0.714285714rem; +} + +.entry-content .wp-block-button__link, +.entry-content .wp-block-button__link:visited { + background-color: #e6e6e6; + color: #7c7c7c; +} + +.wp-block-button.is-style-outline .wp-block-button__link, +.wp-block-button.is-style-outline .wp-block-button__link:visited { + background-color: inherit; + border-color: inherit; +} + +.entry-content .wp-block-button__link:hover, +.entry-content .wp-block-button__link:visited:hover, +.entry-content .wp-block-button__link:focus { + background-color: #ebebeb; + color: #5e5e5e; +} + +.entry-content .wp-block-button__link:active { + background-color: #e1e1e1; + color: #757575; +} + +.wp-block-button:not(.is-style-outline) .wp-block-button__link:not(.has-background) { + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(to bottom, #f4f4f4, #e6e6e6); +} + +.wp-block-button__link:not(.has-text-color) { + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); +} + +.wp-block-button__link:not(.has-background):hover, +.wp-block-button__link:not(.has-background):focus { + background-image: -moz-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -ms-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -webkit-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -o-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: linear-gradient(to bottom, #f9f9f9, #ebebeb); + background-repeat: repeat-x; +} + +.wp-block-button__link:not(.has-background):active { + background-image: -moz-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -ms-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -webkit-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -o-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: linear-gradient(to bottom, #ebebeb, #e1e1e1); + background-repeat: repeat-x; + border-color: transparent; +} + +.wp-block-button__link:not(.has-text-color):active { + box-shadow: inset 0 0 8px 2px #c6c6c6, 0 1px 0 0 #f4f4f4; +} + +/* Separator */ + +.wp-block-separator { + border: 0; +} + +/* Media & Text */ + +.wp-block-media-text { + margin-bottom: 24px; + margin-bottom: 1.714285714rem; +} + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + list-style-position: inside; + text-align: center; +} + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; + box-shadow: none; +} + +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt, +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta { + margin-left: 60px; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 14px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + color: #5e5e5e; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + margin: 0; + padding: 24px 0; + padding: 1.714285714rem 0 0; +} + +.wp-block-latest-comments article { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.entry-content .has-blue-color, +.entry-content .has-blue-color:visited { + color: #21759b; +} + +.entry-content .has-blue-background-color, +.entry-content .has-blue-background-color:visited { + background-color: #21759b; +} + +.entry-content .has-dark-gray-color, +.entry-content .has-dark-gray-color:visited { + color: #373737; +} + +.entry-content .has-dark-gray-background-color, +.entry-content .has-dark-gray-background-color:visited { + background-color: #373737; +} + +.entry-content .has-medium-gray-color, +.entry-content .has-medium-gray-color:visited { + color: #9f9f9f; +} + +.entry-content .has-medium-gray-background-color, +.entry-content .has-medium-gray-background-color:visited { + background-color: #9f9f9f; +} + +.entry-content .has-light-gray-color, +.entry-content .has-light-gray-color:visited { + color: #e6e6e6; +} + +.entry-content .has-light-gray-background-color, +.entry-content .has-light-gray-background-color:visited { + background-color: #e6e6e6; +} + +.entry-content .has-white-color, +.entry-content .has-white-color:visited { + color: #fff; +} + +.entry-content .has-white-background-color, +.entry-content .has-white-background-color:visited { + background-color: #fff; +} diff --git a/wp-content/themes/twentytwelve/css/editor-blocks.css b/wp-content/themes/twentytwelve/css/editor-blocks.css new file mode 100644 index 000000000..8c3d66cdb --- /dev/null +++ b/wp-content/themes/twentytwelve/css/editor-blocks.css @@ -0,0 +1,457 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-size: 14px; +} + +.editor-default-block-appender textarea.editor-default-block-appender__content { + font-family: "Open Sans", Helvetica, Arial, sans-serif; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #444; +} + +.editor-post-title__block .editor-post-title__input { + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-size: 20px; + font-weight: 400; +} + +@media screen and (min-width: 600px) { + .editor-post-title__block .editor-post-title__input { + font-size: 22px; + } +} + +.wp-block-freeform.block-library-rich-text__tinymce h1 { + font-size: 21px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h2 { + font-size: 18px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h3 { + font-size: 16px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h4 { + font-size: 14px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h5 { + font-size: 13px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h6 { + font-size: 12px; +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +.wp-block { + max-width: 655px; /* 625px + 30px for padding */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #21759b; +} + +/* List styles */ + +.wp-block-freeform.block-library-rich-text__tinymce ol, +.wp-block-freeform.block-library-rich-text__tinymce ul:not(.wp-block-gallery), +.block-library-list ol.editor-rich-text__tinymce, +.block-library-list ul.editor-rich-text__tinymce:not(.wp-block-gallery) { + padding-left: 0; + padding-right: 0; +} + +/* Quote styles */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + font-style: italic; + padding: 24px; +} + +/* Table styles */ + +.wp-block-freeform.block-library-rich-text__tinymce th { + font-size: 11px; +} + +.wp-block-freeform.block-library-rich-text__tinymce td { + font-size: 12px; +} + +.wp-block-freeform.block-library-rich-text__tinymce th, +.wp-block-freeform.block-library-rich-text__tinymce td { + padding-left: 0; + padding-right: 0; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce th, +.rtl .wp-block-freeform.block-library-rich-text__tinymce td { + text-align: right; +} + +/* Code styles */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background-color: transparent; + font-size: 12px; +} + +/* Pre styles */ + +.wp-block-freeform.block-library-rich-text__tinymce pre { + font-size: 12px; +} + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + color: #757575; + font-size: 12px; + line-height: 2; + font-style: italic; + text-align: left; +} + +.rtl [class^="wp-block-"] figcaption, +.rtl [class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + text-align: right; +} + +/* Definition Lists */ + +.wp-block-freeform.block-library-rich-text__tinymce dt { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image { + margin-left: 0; + margin-right: 0; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 24px; +} + +.wp-block-gallery figcaption, +.wp-block-gallery figcaption.editor-rich-text__tinymce.mce-content-body { + color: #fff; + text-align: center; +} + +/* Quote */ + +.wp-block-quote, +.wp-block-quote:not(.is-large):not(.is-style-large) { + padding: 24px; +} + +.wp-block-quote p { + font-style: italic; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 20px; +} + +.wp-block-quote .wp-block-quote__citation { + color: inherit; + font-style: italic; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + font-size: 18px; +} + +/* Cover */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-cover-image p, +.edit-post-visual-editor .editor-block-list__block .wp-block-cover p { + font-size: 28px; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + color: #21759b; + text-decoration: underline; +} + +.wp-block-file .wp-block-file__button { + background-color: #e6e6e6; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(to bottom, #f4f4f4, #e6e6e6); + border: 1px solid #d2d2d2; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); + color: #7c7c7c; + font-family: inherit; + font-size: 11px; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Verse */ + +.editor-block-list__block .wp-block-verse pre { + font-size: 12px; +} + +/* Code */ + +.wp-block-code { + border: 0; + font-size: 12px; + line-height: 2; + padding: 0; +} + +.wp-block-html .CodeMirror-sizer { + line-height: 1.7; +} + +/* Preformatted */ + +.editor-block-list__block .wp-block-preformatted pre { + font-size: 12px; +} + +/* Pullquote */ + +.wp-block-pullquote { + font-style: italic; +} + +.edit-post-visual-editor .wp-block-pullquote { + margin: 0; +} + +.wp-block-pullquote .wp-block-pullquote__citation, +.wp-block-pullquote cite { + font-size: 14px; + text-transform: none; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.editor-block-list__block .wp-block-table th { + border: 0; + font-size: 11px; + font-weight: bold; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-table td { + border: 0; + border-top: 1px solid #ededed; + font-size: 12px; + padding: 0; +} + +.wp-block-table__cell-content { + padding: 6px 10px 6px 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button__link { + background-color: #e6e6e6; + color: #7c7c7c; +} + +.wp-block-button .wp-block-button__link { + border: 1px solid #d2d2d2; + font-family: inherit; + font-size: 11px; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; +} + +.wp-block-button .editor-rich-text__tinymce.mce-content-body { + line-height: 1.428571429; +} + +.wp-block-button__link:not(.has-text-color) { + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); +} + +.wp-block-button.is-style-outline .wp-block-button__link { + background-color: inherit; + border-color: inherit; +} + +.wp-block-button:not(.is-style-outline) .wp-block-button__link:not(.has-background) { + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(to bottom, #f4f4f4, #e6e6e6); + background-repeat: repeat-x; +} + +/* Separator */ + +.editor-block-list__block hr.wp-block-separator { + margin-left: auto; + margin-right: auto; +} + +/* Media & Text */ + +.wp-block-media-text *:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +[data-align="center"] .wp-block-archives ul, +[data-align="center"] .wp-block-categories ul, +[data-align="center"] .wp-block-latest-posts ul { + list-style-position: inside; +} + +/* Archives */ + +.editor-block-list__block ul.wp-block-archives { + padding-left: 0; +} + +/* Categories */ + +.editor-block-list__block .wp-block-categories ul { + padding-left: 0; +} + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; + box-shadow: none; +} + +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt, +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta { + margin-left: 60px; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 14px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + color: #5e5e5e; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + margin: 0; + padding: 24px 0; +} + +.wp-block-latest-comments article { + border-bottom: 4px double #ededed; + padding-bottom: 2em; +} + +/* Latest Posts */ + +.editor-block-list__block .wp-block-latest-posts { + padding-left: 0; + padding-right: 0; +} diff --git a/wp-content/themes/twentytwelve/css/ie.css b/wp-content/themes/twentytwelve/css/ie.css new file mode 100644 index 000000000..706f5103e --- /dev/null +++ b/wp-content/themes/twentytwelve/css/ie.css @@ -0,0 +1,273 @@ +/* +Styles for older IE versions (previous to IE9). +*/ + +body { + background-color: #e6e6e6; +} +body.custom-background-empty { + background-color: #fff; +} +body.custom-background-empty .site, +body.custom-background-white .site { + box-shadow: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} +.assistive-text, +.site .screen-reader-text { + clip: rect(1px 1px 1px 1px); +} +.full-width .site-content { + float: none; + width: 100%; +} +img.size-full, +img.size-large, +img.header-image, +img.wp-post-image, +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */ +} +.author-avatar { + float: left; + margin-top: 8px; + margin-top: 0.571428571rem; +} +.author-description { + float: right; + width: 80%; +} +.site { + box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); + margin: 48px auto; + max-width: 960px; + overflow: hidden; + padding: 0 40px; +} +.site-content { + float: left; + width: 65.104166667%; +} +body.template-front-page .site-content, +body.attachment .site-content, +body.full-width .site-content { + width: 100%; +} +.widget-area { + float: right; + width: 26.041666667%; +} +.site-header h1, +.site-header h2 { + text-align: left; +} +.site-header h1 { + font-size: 26px; + line-height: 1.846153846; +} +.main-navigation ul.nav-menu, +.main-navigation div.nav-menu > ul { + border-bottom: 1px solid #ededed; + border-top: 1px solid #ededed; + display: inline-block !important; + text-align: left; + width: 100%; +} +.main-navigation ul { + margin: 0; + text-indent: 0; +} +.main-navigation li a, +.main-navigation li { + display: inline-block; + text-decoration: none; +} +.ie7 .main-navigation li a, +.ie7 .main-navigation li { + display: inline; +} +.main-navigation li a { + border-bottom: 0; + color: #6a6a6a; + line-height: 3.692307692; + text-transform: uppercase; +} +.main-navigation li a:hover { + color: #000; +} +.main-navigation li { + margin: 0 40px 0 0; + position: relative; +} +.main-navigation li ul { + margin: 0; + padding: 0; + position: absolute; + top: 100%; + z-index: 1; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); +} +.ie7 .main-navigation li ul { + clip: inherit; + display: none; + left: 0; + overflow: visible; +} +.main-navigation li ul ul, +.ie7 .main-navigation li ul ul { + top: 0; + left: 100%; +} +.main-navigation ul li:hover > ul, +.main-navigation ul li:focus > ul, +.main-navigation .focus > ul { + border-left: 0; + clip: inherit; + overflow: inherit; + height: inherit; + width: inherit; +} +.ie7 .main-navigation ul li:hover > ul, +.ie7 .main-navigation ul li:focus > ul { + display: block; +} +.main-navigation li ul li a { + background: #efefef; + border-bottom: 1px solid #ededed; + display: block; + font-size: 11px; + line-height: 2.181818182; + padding: 8px 10px; + width: 180px; +} +.main-navigation li ul li a:hover { + background: #e3e3e3; + color: #444; +} +.main-navigation .current-menu-item > a, +.main-navigation .current-menu-ancestor > a, +.main-navigation .current_page_item > a, +.main-navigation .current_page_ancestor > a { + color: #636363; + font-weight: bold; +} +.main-navigation .menu-toggle { + display: none; +} +.entry-header .entry-title { + font-size: 22px; +} +#respond form input[type="text"] { + width: 46.333333333%; +} +#respond form textarea.blog-textarea { + width: 79.666666667%; +} +.template-front-page .site-content, +.template-front-page article { + overflow: hidden; +} +.template-front-page.has-post-thumbnail article { + float: left; + width: 47.916666667%; +} +.entry-page-image { + float: right; + margin-bottom: 0; + width: 47.916666667%; +} +/* IE Front Page Template Widget fix */ +.template-front-page .widget-area { + clear: both; +} +.template-front-page .widget { + width: 100% !important; + border: none; +} +.template-front-page .widget-area .widget, +.template-front-page .first.front-widgets, +.template-front-page.two-sidebars .widget-area .front-widgets { + float: left; + margin-bottom: 24px; + width: 51.875%; +} +.template-front-page .second.front-widgets, +.template-front-page .widget-area .widget:nth-child(odd) { + clear: right; +} +.template-front-page .first.front-widgets, +.template-front-page .second.front-widgets, +.template-front-page.two-sidebars .widget-area .front-widgets + .front-widgets { + float: right; + margin: 0 0 24px; + width: 39.0625%; +} +.template-front-page.two-sidebars .widget, +.template-front-page.two-sidebars .widget:nth-child(even) { + float: none; + width: auto; +} +/* add input font for ul { + text-align: right; +} +.rtl .main-navigation ul li ul li, +.rtl .main-navigation ul li ul li ul li { + margin-left: 40px; + margin-right: auto; +} +.rtl .main-navigation li ul ul { + position: absolute; + bottom: 0; + right: 100%; + z-index: 1; +} +.ie7 .rtl .main-navigation li ul ul { + position: absolute; + bottom: 0; + right: 100%; + z-index: 1; +} +.ie7 .rtl .main-navigation ul li { + z-index: 99; +} +.ie7 .rtl .main-navigation li ul { + position: absolute; + bottom: 100%; + right: 0; + z-index: 1; +} +.ie7 .rtl .main-navigation li { + margin-right: auto; + margin-left: 40px; +} +.ie7 .rtl .main-navigation li ul ul ul { + position: relative; + z-index: 1; +} \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/editor-style-rtl.css b/wp-content/themes/twentytwelve/editor-style-rtl.css new file mode 100644 index 000000000..5fd832c6f --- /dev/null +++ b/wp-content/themes/twentytwelve/editor-style-rtl.css @@ -0,0 +1,28 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style the TinyMCE editor for RTL languages. +See also rtl.css file. +*/ + +html .mceContentBody { + direction: rtl; + unicode-bidi: embed; +} +li { + margin: 0 24px 0 0; + margin: 0 1.714285714rem 0 0; +} +dl { + margin: 0 24px; + margin: 0 1.714285714rem; +} +tr th { + text-align: right; +} +td { + padding: 6px 0 6px 10px; + text-align: right; +} +.wp-caption { + text-align: right; +} \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/editor-style.css b/wp-content/themes/twentytwelve/editor-style.css new file mode 100644 index 000000000..24e9b24f6 --- /dev/null +++ b/wp-content/themes/twentytwelve/editor-style.css @@ -0,0 +1,342 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style the TinyMCE editor. +*/ + +html { + font-size: 87.5%; +} +html .mceContentBody { + max-width: 625px; +} +body { + color: #444; + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-size: 14px; + font-size: 1rem; + line-height: 1; + text-rendering: optimizeLegibility; + vertical-align: baseline; +} + + +/* =Headings +-------------------------------------------------------------- */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + line-height: 1.846153846; + margin: 24px 0; + margin: 1.714285714rem 0; +} +h1 { + font-size: 21px; + font-size: 1.5rem; + line-height: 1.5; +} +h2 { + font-size: 18px; + font-size: 1.285714286rem; + line-height: 1.6; +} +h3 { + font-size: 16px; + font-size: 1.142857143rem; +} +h4 { + font-size: 14px; + font-size: 1rem; +} +h5 { + font-size: 13px; + font-size: 0.928571429rem; +} +h6 { + font-size: 12px; + font-size: 0.857142857rem; +} +hr { + background-color: #ccc; + border: 0; + height: 1px; + margin: 24px; + margin-bottom: 1.714285714rem; +} + + +/* =Text elements +-------------------------------------------------------------- */ + +p { + line-height: 1.714285714; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; +} +ul, +ol { + margin: 0 0 24px; + margin: 0 0 1.714285714rem; + line-height: 1.714285714; + padding: 0; +} +ul { + list-style: disc outside; +} +ol { + list-style: decimal outside; +} +ul ul, +ol ol, +ul ol, +ol ul { + margin-bottom: 0; +} +li { + margin: 0 0 0 24px; + margin: 0 0 0 1.714285714rem; +} +dl { + margin: 0 24px; + margin: 0 1.714285714rem; +} +dt { + font-weight: bold; + margin-bottom: 24px; + margin-bottom: 1.714285714rem; +} +dd { + line-height: 1.714285714; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; +} +strong { + font-weight: bold; +} +cite, +em, +i { + font-style: italic; +} +cite { + border: none; +} +big { + font-size: 128.571429%; +} +.mceContentBody blockquote { + font-style: italic !important; + font-weight: normal; + margin: 0; + padding: 24px; + padding: 1.714285714rem; +} +pre { + border: 1px solid #ededed; + color: #666; + font-family: Consolas, Monaco, Lucida Console, monospace; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 1.714285714; + margin: 24px 0; + margin: 1.714285714rem 0; + overflow: auto; + padding: 24px; + padding: 1.714285714rem; +} +code, +kbd, +samp, +var { + font-family: Consolas, Monaco, Lucida Console, monospace; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; +} +abbr, +acronym, +dfn { + border-bottom: 1px dotted #666; + cursor: help; +} +address { + display: block; + line-height: 1.714285714; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; +} +del { + color: #333; +} +ins { + background: #fff9c0; + border: none; + color: #333; + text-decoration: none; +} +sup, +sub { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +input[type="text"] { + border: 1px solid #ccc; + border-radius: 3px; + font-family: inherit; + padding: 6px; + padding: 0.428571429rem; +} +textarea { + border: 1px solid #d5d2ca; + border-radius: 3px; + font-family: inherit; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 1.714285714; + padding: 10px; + padding: 0.714285714rem; + width: 96%; +} + + +/* =Links +-------------------------------------------------------------- */ + +a, +a em, +a strong { + color: #21759b; + outline: none; +} +a:focus, +a:active, +a:hover { + color: #0f3647; +} + + +/* =Alignment +-------------------------------------------------------------- */ + +.alignleft { + display: inline; + float: left; + margin: 12px 24px 12px 0; + margin: 0.857142857rem 1.714285714rem 0.857142857rem 0; +} +.alignright { + display: inline; + float: right; + margin: 12px 0 12px 24px; + margin: 0.857142857rem 0 0.857142857rem 1.714285714rem; +} +.aligncenter { + clear: both; + display: block; + margin-top: 12px; + margin-top: 0.857142857rem; + margin-bottom: 12px; + margin-bottom: 0.857142857rem; +} + + +/* =Tables +-------------------------------------------------------------- */ + +table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + color: #757575; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; + width: 100%; +} +tr th { + color: #636363; + font-size: 11px; + font-size: 0.785714286rem; + font-weight: bold; + line-height: 2.181818182; + text-align: left; + text-transform: uppercase; +} +td { + border-top: 1px solid #ededed !important; + color: #757575; + font-size: inherit; + font-weight: normal; + padding: 6px 10px 6px 0; + text-align: left; +} + + +/* =Images +-------------------------------------------------------------- */ + +img, +.editor-attachment { + border: 0; + border-radius: 3px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + max-width: 100%; +} +img.size-full { + width: auto/9; /* Prevent stretching of full-size images in IE8 */ +} +img[class*="wp-image-"] { + height: auto; + max-width: 100%; +} +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */ +} +img.mce-wp-nextpage { + border-radius: 0; + box-shadow: none; +} +img.wp-smiley { + border: 0; + border-radius: 0; + box-shadow: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} +.wp-caption { + background: transparent; + border: none; + margin: 0; + padding: 4px; + text-align: left; +} +.wp-caption-dt { + margin: 0; +} +.wp-caption .wp-caption-text, +.wp-caption-dd { + color: #757575; + font-style: italic; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; + margin: 0 0 24px; + margin: 0 0 1.71429rem; +} diff --git a/wp-content/themes/twentytwelve/footer.php b/wp-content/themes/twentytwelve/footer.php new file mode 100644 index 000000000..05e52e2bd --- /dev/null +++ b/wp-content/themes/twentytwelve/footer.php @@ -0,0 +1,30 @@ + +
        +
        +
        + + ' ); + } + ?> + + + +
        +
        +
        + + + + diff --git a/wp-content/themes/twentytwelve/functions.php b/wp-content/themes/twentytwelve/functions.php new file mode 100644 index 000000000..ad89b2ac7 --- /dev/null +++ b/wp-content/themes/twentytwelve/functions.php @@ -0,0 +1,705 @@ + __( 'Blue', 'twentytwelve' ), + 'slug' => 'blue', + 'color' => '#21759b', + ), + array( + 'name' => __( 'Dark Gray', 'twentytwelve' ), + 'slug' => 'dark-gray', + 'color' => '#444', + ), + array( + 'name' => __( 'Medium Gray', 'twentytwelve' ), + 'slug' => 'medium-gray', + 'color' => '#9f9f9f', + ), + array( + 'name' => __( 'Light Gray', 'twentytwelve' ), + 'slug' => 'light-gray', + 'color' => '#e6e6e6', + ), + array( + 'name' => __( 'White', 'twentytwelve' ), + 'slug' => 'white', + 'color' => '#fff', + ), + ) + ); + + // Adds RSS feed links to for posts and comments. + add_theme_support( 'automatic-feed-links' ); + + // This theme supports a variety of post formats. + add_theme_support( 'post-formats', array( 'aside', 'image', 'link', 'quote', 'status' ) ); + + // This theme uses wp_nav_menu() in one location. + register_nav_menu( 'primary', __( 'Primary Menu', 'twentytwelve' ) ); + + /* + * This theme supports custom background color and image, + * and here we also set up the default background color. + */ + add_theme_support( + 'custom-background', + array( + 'default-color' => 'e6e6e6', + ) + ); + + // This theme uses a custom image size for featured images, displayed on "standard" posts. + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 624, 9999 ); // Unlimited height, soft crop + + // Indicate widget sidebars can use selective refresh in the Customizer. + add_theme_support( 'customize-selective-refresh-widgets' ); +} +add_action( 'after_setup_theme', 'twentytwelve_setup' ); + +/** + * Add support for a custom header image. + */ +require( get_template_directory() . '/inc/custom-header.php' ); + +/** + * Return the Google font stylesheet URL if available. + * + * The use of Open Sans by default is localized. For languages that use + * characters not supported by the font, the font can be disabled. + * + * @since Twenty Twelve 1.2 + * + * @return string Font stylesheet or empty string if disabled. + */ +function twentytwelve_get_font_url() { + $font_url = ''; + + /* translators: If there are characters in your language that are not supported + * by Open Sans, translate this to 'off'. Do not translate into your own language. + */ + if ( 'off' !== _x( 'on', 'Open Sans font: on or off', 'twentytwelve' ) ) { + $subsets = 'latin,latin-ext'; + + /* translators: To add an additional Open Sans character subset specific to your language, + * translate this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language. + */ + $subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)', 'twentytwelve' ); + + if ( 'cyrillic' == $subset ) { + $subsets .= ',cyrillic,cyrillic-ext'; + } elseif ( 'greek' == $subset ) { + $subsets .= ',greek,greek-ext'; + } elseif ( 'vietnamese' == $subset ) { + $subsets .= ',vietnamese'; + } + + $query_args = array( + 'family' => 'Open+Sans:400italic,700italic,400,700', + 'subset' => $subsets, + ); + $font_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ); + } + + return $font_url; +} + +/** + * Enqueue scripts and styles for front end. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_scripts_styles() { + global $wp_styles; + + /* + * Adds JavaScript to pages with the comment form to support + * sites with threaded comments (when in use). + */ + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + // Adds JavaScript for handling the navigation menu hide-and-show behavior. + wp_enqueue_script( 'twentytwelve-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'jquery' ), '20140711', true ); + + $font_url = twentytwelve_get_font_url(); + if ( ! empty( $font_url ) ) { + wp_enqueue_style( 'twentytwelve-fonts', esc_url_raw( $font_url ), array(), null ); + } + + // Loads our main stylesheet. + wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() ); + + // Theme block stylesheet. + wp_enqueue_style( 'twentytwelve-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentytwelve-style' ), '20181230' ); + + // Loads the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentytwelve-style' ), '20121010' ); + $wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' ); +} +add_action( 'wp_enqueue_scripts', 'twentytwelve_scripts_styles' ); + +/** + * Enqueue styles for the block-based editor. + * + * @since Twenty Twelve 2.6 + */ +function twentytwelve_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentytwelve-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css', array(), '20181230' ); + // Add custom fonts. + wp_enqueue_style( 'twentytwelve-fonts', twentytwelve_get_font_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentytwelve_block_editor_styles' ); + +/** + * Add preconnect for Google Fonts. + * + * @since Twenty Twelve 2.2 + * + * @param array $urls URLs to print for resource hints. + * @param string $relation_type The relation type the URLs are printed. + * @return array URLs to print for resource hints. + */ +function twentytwelve_resource_hints( $urls, $relation_type ) { + if ( wp_style_is( 'twentytwelve-fonts', 'queue' ) && 'preconnect' === $relation_type ) { + if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '>=' ) ) { + $urls[] = array( + 'href' => 'https://fonts.gstatic.com', + 'crossorigin', + ); + } else { + $urls[] = 'https://fonts.gstatic.com'; + } + } + + return $urls; +} +add_filter( 'wp_resource_hints', 'twentytwelve_resource_hints', 10, 2 ); + +/** + * Filter TinyMCE CSS path to include Google Fonts. + * + * Adds additional stylesheets to the TinyMCE editor if needed. + * + * @uses twentytwelve_get_font_url() To get the Google Font stylesheet URL. + * + * @since Twenty Twelve 1.2 + * + * @param string $mce_css CSS path to load in TinyMCE. + * @return string Filtered CSS path. + */ +function twentytwelve_mce_css( $mce_css ) { + $font_url = twentytwelve_get_font_url(); + + if ( empty( $font_url ) ) { + return $mce_css; + } + + if ( ! empty( $mce_css ) ) { + $mce_css .= ','; + } + + $mce_css .= esc_url_raw( str_replace( ',', '%2C', $font_url ) ); + + return $mce_css; +} +add_filter( 'mce_css', 'twentytwelve_mce_css' ); + +/** + * Filter the page title. + * + * Creates a nicely formatted and more specific title element text + * for output in head of document, based on current view. + * + * @since Twenty Twelve 1.0 + * + * @param string $title Default title text for current view. + * @param string $sep Optional separator. + * @return string Filtered title. + */ +function twentytwelve_wp_title( $title, $sep ) { + global $paged, $page; + + if ( is_feed() ) { + return $title; + } + + // Add the site name. + $title .= get_bloginfo( 'name', 'display' ); + + // Add the site description for the home/front page. + $site_description = get_bloginfo( 'description', 'display' ); + if ( $site_description && ( is_home() || is_front_page() ) ) { + $title = "$title $sep $site_description"; + } + + // Add a page number if necessary. + if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) { + $title = "$title $sep " . sprintf( __( 'Page %s', 'twentytwelve' ), max( $paged, $page ) ); + } + + return $title; +} +add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 ); + +/** + * Filter the page menu arguments. + * + * Makes our wp_nav_menu() fallback -- wp_page_menu() -- show a home link. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_page_menu_args( $args ) { + if ( ! isset( $args['show_home'] ) ) { + $args['show_home'] = true; + } + return $args; +} +add_filter( 'wp_page_menu_args', 'twentytwelve_page_menu_args' ); + +/** + * Register sidebars. + * + * Registers our main widget area and the front page widget areas. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_widgets_init() { + register_sidebar( + array( + 'name' => __( 'Main Sidebar', 'twentytwelve' ), + 'id' => 'sidebar-1', + 'description' => __( 'Appears on posts and pages except the optional Front Page template, which has its own widgets', 'twentytwelve' ), + 'before_widget' => '', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'First Front Page Widget Area', 'twentytwelve' ), + 'id' => 'sidebar-2', + 'description' => __( 'Appears when using the optional Front Page template with a page set as Static Front Page', 'twentytwelve' ), + 'before_widget' => '', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); + + register_sidebar( + array( + 'name' => __( 'Second Front Page Widget Area', 'twentytwelve' ), + 'id' => 'sidebar-3', + 'description' => __( 'Appears when using the optional Front Page template with a page set as Static Front Page', 'twentytwelve' ), + 'before_widget' => '', + 'before_title' => '

        ', + 'after_title' => '

        ', + ) + ); +} +add_action( 'widgets_init', 'twentytwelve_widgets_init' ); + +if ( ! function_exists( 'twentytwelve_content_nav' ) ) : + /** + * Displays navigation to next/previous pages when applicable. + * + * @since Twenty Twelve 1.0 + */ + function twentytwelve_content_nav( $html_id ) { + global $wp_query; + + if ( $wp_query->max_num_pages > 1 ) : ?> + + comment_type ) : + case 'pingback': + case 'trackback': + // Display trackbacks differently than normal comments. + ?> +
      • id="comment-"> +

        ', '' ); ?>

        + +
      • id="li-comment-"> +
        +
        + %1$s %2$s', + get_comment_author_link(), + // If current post author is also comment author, make it known visually. + ( $comment->user_id === $post->post_author ) ? '' . __( 'Post author', 'twentytwelve' ) . '' : '' + ); + printf( + '', + esc_url( get_comment_link( $comment->comment_ID ) ), + get_comment_time( 'c' ), + /* translators: 1: date, 2: time */ + sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() ) + ); + ?> +
        + + comment_approved ) : ?> +

        + + +
        + + ', '

        ' ); ?> +
        + +
        + __( 'Reply', 'twentytwelve' ), + 'after' => ' ', + 'depth' => $depth, + 'max_depth' => $args['max_depth'], + ) + ) + ); + ?> +
        +
        + ', + esc_url( get_permalink() ), + esc_attr( get_the_time() ), + esc_attr( get_the_date( 'c' ) ), + esc_html( get_the_date() ) + ); + + $author = sprintf( + '', + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + esc_attr( sprintf( __( 'View all posts by %s', 'twentytwelve' ), get_the_author() ) ), + get_the_author() + ); + + // Translators: 1 is category, 2 is tag, 3 is the date and 4 is the author's name. + if ( $tag_list ) { + $utility_text = __( 'This entry was posted in %1$s and tagged %2$s on %3$s by %4$s.', 'twentytwelve' ); + } elseif ( $categories_list ) { + $utility_text = __( 'This entry was posted in %1$s on %3$s by %4$s.', 'twentytwelve' ); + } else { + $utility_text = __( 'This entry was posted on %3$s by %4$s.', 'twentytwelve' ); + } + + printf( + $utility_text, + $categories_list, + $tag_list, + $date, + $author + ); + } +endif; + +/** + * Extend the default WordPress body classes. + * + * Extends the default WordPress body class to denote: + * 1. Using a full-width layout, when no active widgets in the sidebar + * or full-width template. + * 2. Front Page template: thumbnail in use and number of sidebars for + * widget areas. + * 3. White or empty background color to change the layout and spacing. + * 4. Custom fonts enabled. + * 5. Single or multiple authors. + * + * @since Twenty Twelve 1.0 + * + * @param array $classes Existing class values. + * @return array Filtered class values. + */ +function twentytwelve_body_class( $classes ) { + $background_color = get_background_color(); + $background_image = get_background_image(); + + if ( ! is_active_sidebar( 'sidebar-1' ) || is_page_template( 'page-templates/full-width.php' ) ) { + $classes[] = 'full-width'; + } + + if ( is_page_template( 'page-templates/front-page.php' ) ) { + $classes[] = 'template-front-page'; + if ( has_post_thumbnail() ) { + $classes[] = 'has-post-thumbnail'; + } + if ( is_active_sidebar( 'sidebar-2' ) && is_active_sidebar( 'sidebar-3' ) ) { + $classes[] = 'two-sidebars'; + } + } + + if ( empty( $background_image ) ) { + if ( empty( $background_color ) ) { + $classes[] = 'custom-background-empty'; + } elseif ( in_array( $background_color, array( 'fff', 'ffffff' ) ) ) { + $classes[] = 'custom-background-white'; + } + } + + // Enable custom font class only if the font CSS is queued to load. + if ( wp_style_is( 'twentytwelve-fonts', 'queue' ) ) { + $classes[] = 'custom-font-enabled'; + } + + if ( ! is_multi_author() ) { + $classes[] = 'single-author'; + } + + return $classes; +} +add_filter( 'body_class', 'twentytwelve_body_class' ); + +/** + * Adjust content width in certain contexts. + * + * Adjusts content_width value for full-width and single image attachment + * templates, and when there are no active widgets in the sidebar. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_content_width() { + if ( is_page_template( 'page-templates/full-width.php' ) || is_attachment() || ! is_active_sidebar( 'sidebar-1' ) ) { + global $content_width; + $content_width = 960; + } +} +add_action( 'template_redirect', 'twentytwelve_content_width' ); + +/** + * Register postMessage support. + * + * Add postMessage support for site title and description for the Customizer. + * + * @since Twenty Twelve 1.0 + * + * @param WP_Customize_Manager $wp_customize Customizer object. + */ +function twentytwelve_customize_register( $wp_customize ) { + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title > a', + 'container_inclusive' => false, + 'render_callback' => 'twentytwelve_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'container_inclusive' => false, + 'render_callback' => 'twentytwelve_customize_partial_blogdescription', + ) + ); + } +} +add_action( 'customize_register', 'twentytwelve_customize_register' ); + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Twelve 2.0 + * @see twentytwelve_customize_register() + * + * @return void + */ +function twentytwelve_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Twelve 2.0 + * @see twentytwelve_customize_register() + * + * @return void + */ +function twentytwelve_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Enqueue Javascript postMessage handlers for the Customizer. + * + * Binds JS handlers to make the Customizer preview reload changes asynchronously. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_customize_preview_js() { + wp_enqueue_script( 'twentytwelve-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20141120', true ); +} +add_action( 'customize_preview_init', 'twentytwelve_customize_preview_js' ); + +/** + * Modifies tag cloud widget arguments to display all tags in the same font size + * and use list format for better accessibility. + * + * @since Twenty Twelve 2.4 + * + * @param array $args Arguments for tag cloud widget. + * @return array The filtered arguments for tag cloud widget. + */ +function twentytwelve_widget_tag_cloud_args( $args ) { + $args['largest'] = 22; + $args['smallest'] = 8; + $args['unit'] = 'pt'; + $args['format'] = 'list'; + + return $args; +} +add_filter( 'widget_tag_cloud_args', 'twentytwelve_widget_tag_cloud_args' ); + +if ( ! function_exists( 'wp_body_open' ) ) : + /** + * Fire the wp_body_open action. + * + * Added for backwards compatibility to support pre 5.2.0 WordPress versions. + * + * @since Twenty Twelve 3.0 + */ + function wp_body_open() { + /** + * Triggered after the opening tag. + * + * @since Twenty Twelve 3.0 + */ + do_action( 'wp_body_open' ); + } +endif; diff --git a/wp-content/themes/twentytwelve/header.php b/wp-content/themes/twentytwelve/header.php new file mode 100644 index 000000000..f8ff59907 --- /dev/null +++ b/wp-content/themes/twentytwelve/header.php @@ -0,0 +1,61 @@ + section and everything up till
        + * + * @package WordPress + * @subpackage Twenty_Twelve + * @since Twenty Twelve 1.0 + */ +?> + + + +> + + + + +<?php wp_title( '|', true, 'right' ); ?> + + + + + + + +> + +
        + + +
        diff --git a/wp-content/themes/twentytwelve/image.php b/wp-content/themes/twentytwelve/image.php new file mode 100644 index 000000000..b6b1dc864 --- /dev/null +++ b/wp-content/themes/twentytwelve/image.php @@ -0,0 +1,141 @@ + + +
        +
        + + + +
        > +
        +

        + +
        + Published at %4$s × %5$s in %8$s.', 'twentytwelve' ), + esc_attr( get_the_date( 'c' ) ), + esc_html( get_the_date() ), + esc_url( wp_get_attachment_url() ), + $metadata['width'], + $metadata['height'], + esc_url( get_permalink( $post->post_parent ) ), + esc_attr( strip_tags( get_the_title( $post->post_parent ) ) ), + get_the_title( $post->post_parent ) + ); + ?> + ', '' ); ?> +
        + + +
        + +
        + +
        +
        + $post->post_parent, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'order' => 'ASC', + 'orderby' => 'menu_order ID', + ) + ) + ); + foreach ( $attachments as $k => $attachment ) : + if ( $attachment->ID == $post->ID ) { + break; + } +endforeach; + + // If there is more than 1 attachment in a gallery + if ( count( $attachments ) > 1 ) : + $k++; + if ( isset( $attachments[ $k ] ) ) : + // get the URL of the next image attachment + $next_attachment_url = get_attachment_link( $attachments[ $k ]->ID ); + else : + // or get the URL of the first image attachment + $next_attachment_url = get_attachment_link( $attachments[0]->ID ); + endif; +else : + // or, if there's only 1 image, get the URL of the image + $next_attachment_url = wp_get_attachment_url(); +endif; +?> + + ID, $attachment_size ); + ?> + + + post_excerpt ) ) : ?> +
        + +
        + +
        + +
        + +
        + + '', + ) + ); + ?> +
        + +
        + +
        + + + + + +
        +
        + + diff --git a/wp-content/themes/twentytwelve/inc/custom-header.php b/wp-content/themes/twentytwelve/inc/custom-header.php new file mode 100644 index 000000000..636309b7c --- /dev/null +++ b/wp-content/themes/twentytwelve/inc/custom-header.php @@ -0,0 +1,168 @@ + '515151', + 'default-image' => '', + + // Set height and width, with a maximum value for the width. + 'height' => 250, + 'width' => 960, + 'max-width' => 2000, + + // Support flexible height and width. + 'flex-height' => true, + 'flex-width' => true, + + // Random image rotation off by default. + 'random-default' => false, + + // Callbacks for styling the header and the admin preview. + 'wp-head-callback' => 'twentytwelve_header_style', + 'admin-head-callback' => 'twentytwelve_admin_header_style', + 'admin-preview-callback' => 'twentytwelve_admin_header_image', + ); + + add_theme_support( 'custom-header', $args ); +} +add_action( 'after_setup_theme', 'twentytwelve_custom_header_setup' ); + +/** + * Load our special font CSS file. + * + * @since Twenty Twelve 1.2 + */ +function twentytwelve_custom_header_fonts() { + $font_url = twentytwelve_get_font_url(); + if ( ! empty( $font_url ) ) { + wp_enqueue_style( 'twentytwelve-fonts', esc_url_raw( $font_url ), array(), null ); + } +} +add_action( 'admin_print_styles-appearance_page_custom-header', 'twentytwelve_custom_header_fonts' ); + +/** + * Style the header text displayed on the blog. + * + * get_header_textcolor() options: 515151 is default, hide text (returns 'blank'), or any hex value. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_header_style() { + $text_color = get_header_textcolor(); + + // If no custom options for text are set, let's bail + if ( $text_color == get_theme_support( 'custom-header', 'default-text-color' ) ) { + return; + } + + // If we get this far, we have custom styles. + ?> + + Header admin panel. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_admin_header_style() { + ?> + + Header admin panel. + * + * This callback overrides the default markup displayed there. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_admin_header_image() { + $style = 'color: #' . get_header_textcolor() . ';'; + if ( ! display_header_text() ) { + $style = 'display: none;'; + } + ?> +
        +

        +

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

        +
        + +
        +

        Get started here.', 'twentytwelve' ), admin_url( 'post-new.php' ) ); ?>

        +
        + + +
        +

        +
        + +
        +

        + +
        + + +
        + + + +
        +
        + + + diff --git a/wp-content/themes/twentytwelve/js/html5.js b/wp-content/themes/twentytwelve/js/html5.js new file mode 100644 index 000000000..6168aacd5 --- /dev/null +++ b/wp-content/themes/twentytwelve/js/html5.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d