diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/class-base.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/class-base.php index 8b9c81da27..ab61e8491b 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/class-base.php +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/class-base.php @@ -40,6 +40,7 @@ public static function load_routes() { new Routes\Plugin_Upload(); new Routes\Plugin_Blueprint(); new Routes\Plugin_Review(); + new Routes\Plugin_Publish(); } /** diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin-publish.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin-publish.php new file mode 100644 index 0000000000..7b9f0e1199 --- /dev/null +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin-publish.php @@ -0,0 +1,68 @@ +[^/]+)/publish', + array( + 'methods' => \WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'publish_release' ), + 'args' => array( + 'plugin_slug' => array( + 'validate_callback' => array( $this, 'validate_plugin_slug_callback' ), + ), + ), + 'permission_callback' => array( $this, 'permission_can_access_plugin' ), + ) + ); + } + + /** + * Validate that the user can manage a given plugin. + * + * @param WP_REST_Request $request The request object. + * + * @return bool + */ + public function permission_can_access_plugin( $request ) { + $plugin = Plugin_Directory::get_plugin_post( $request['plugin_slug'] ); + return current_user_can( 'plugin_manage_releases', $plugin ); + } + + /** + * A simple endpoint to publish a release. + * + * @param WP_REST_Request $request The request object. + * @return WP_REST_Response + */ + public function publish_release( $request ) { + $plugin = Plugin_Directory::get_plugin_post( $request['plugin_slug'] ); + // Will return either a WP_Error, or the post ID of the published release CPT. + $result = Plugin_Release::instance()->publish_release( $plugin ); + + return $result; + } +} diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/bin/get-release-info.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/bin/get-release-info.php new file mode 100644 index 0000000000..791cc790d0 --- /dev/null +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/bin/get-release-info.php @@ -0,0 +1,103 @@ +ID)...\n"; + +$releases = Plugin_Release::instance()->get_releases( $plugin ); +if ( is_wp_error( $releases ) ) { + fwrite( STDERR, "Failed to update releases for $plugin_slug: " . $updated->get_error_message() . "\n" ); + die(); +} + +foreach( $releases as $release ) { + echo "ID: " . $release->ID . "\n"; + echo "Status: " . $release->post_status . "\n"; + echo "Release version: " . $release->post_title . "\n"; + echo "Tag: " . $release->release_tag . "\n"; + echo "Post date GMT: " . $release->post_date_gmt . "\n"; + if ( $release->release_date ) { + echo "Date: " . ( new \DateTime( '@' . $release->release_date ) )->format( 'Y-m-d H:i:s' ) . "\n"; + } + echo "Committers: " . implode( ', ', $release->release_committer ) . "\n"; + echo "Zips built: " . ( $release->release_zips_built ? 'Yes' : 'No' ) . "\n"; + echo "Confirmations required: " . ( $release->release_confirmations_required ? 'Yes' : 'No' ) . "\n"; + echo "Release revision: " . $release->release_revision_final . "\n"; + echo "Previous version rev: " . $release->release_revision_prior . "\n"; + if ( $release->release_commit_log ) { + echo "Commit log:\n"; + foreach( $release->release_commit_log as $commit ) { + echo " " . ( new \DateTime( '@' . $commit['date'] ) )->format( 'Y-m-d' ) . " - "; + echo " " . $commit['author'] . ' r' . $commit['revision'] . " - " . \wp_trim_words( $commit['message'] ) . "\n"; + } + } + echo "-----------------------------------\n"; +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/bin/update-release-cpt.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/bin/update-release-cpt.php new file mode 100644 index 0000000000..d30e74b2d0 --- /dev/null +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/bin/update-release-cpt.php @@ -0,0 +1,95 @@ +releases ) ) { + fwrite( STDERR, "No releases found for $plugin_slug\n" ); + die(); +} + +echo "Updating releases for $plugin_slug...\n"; + +$updated = Plugin_Release::instance()->maybe_backfill_releases( $plugin, true ); // true = force update +if ( is_wp_error( $updated ) ) { + fwrite( STDERR, "Failed to update releases for $plugin_slug: " . $updated->get_error_message() . "\n" ); + die(); +} +echo "Updated " . number_format( $updated ) . " releases for $plugin_slug\n"; + +if ( $opts['publish'] ) { + $published = Plugin_Release::instance()->publish_release( $plugin ); + if ( is_wp_error( $published ) ) { + fwrite( STDERR, "Failed to publish releases for $plugin_slug: " . $published->get_error_message() . "\n" ); + die(); + } + echo "Published release post ID = " . $published . "\n"; +} + diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-check.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-check.php new file mode 100644 index 0000000000..554c45cac5 --- /dev/null +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-check.php @@ -0,0 +1,201 @@ + true, + 'results' => [], + 'html' => '', + ]; + } + + $result = self::run_checks( $plugin_slug, $plugin_root ); + + self::log_to_slack( $result ); // FIXME: need to pass required info. + + return $result; + } + + /** + * Sends a plugin through Plugin Check. + * @param string $plugin_slug The plugin slug. + * @param string $plugin_root The path to the plugin source. + * + * @return array The results of the plugin check. + */ + public static function run_checks( $plugin_slug, $plugin_root ) { + + // Run plugin check via CLI + $start_time = microtime(1); + exec( + 'export WP_CLI_CONFIG_PATH=' . escapeshellarg( WP_CLI_CONFIG_PATH ) . '; ' . + 'timeout 45 ' . // Timeout after 45s if plugin-check is not done. + WPCLI . ' --url=https://wordpress.org/plugins ' . + 'plugin check ' . + '--error-severity=7 --warning-severity=6 --categories=plugin_repo --format=json ' . + '--slug=' . escapeshellarg( $plugin_slug ) . ' ' . + escapeshellarg( $plugin_root ), + $output, + $return_code + ); + $total_time = round( microtime(1) - $start_time, 1 ); + + /** + * Anything that plugin-check outputs that we want to discard completely. + */ + $is_ignored_code = static function( $code ) { + $ignored_codes = [ + ]; + + return ( + in_array( $code, $ignored_codes, true ) || + // All the Readme parser warnings are duplicated, we'll exclude those. + str_starts_with( $code, 'readme_parser_warnings_' ) + ); + }; + + /* + * Convert the output into an array. + * Format: + * FILE: example.extension + * [{.....}] + * + * FILE: example2.extension + * [{.....}] + */ + $verdict = true; + $results = []; + foreach ( array_chunk( $output, 3 ) as $file_result ) { + if ( ! str_starts_with( $file_result[0], 'FILE:' ) ) { + continue; + } + + $filename = trim( explode( ':' , $file_result[0], 2 )[1] ); + $json = json_decode( $file_result[1], true ); + + foreach ( $json as $record ) { + $record['file'] = $filename; + + if ( $is_ignored_code( $record['code'] ) ) { + continue; + } + + $results[] = $record; + + // Record submission stats. + if ( function_exists( 'bump_stats_extra' ) && 'production' === wp_get_environment_type() ) { + bump_stats_extra( 'plugin-check-' . $record['type'], $record['code'] ); + } + + // Determine if it failed the checks. + if ( $verdict && 'ERROR' === $record['type'] ) { + $verdict = false; + } + } + } + + // Generage the HTML for the Plugin Check output. + $html = sprintf( + '' . __( 'Results of Automated Plugin Scanning: %s', 'wporg-plugins' ) . '', + $verdict ? __( 'Pass', 'wporg-plugins' ) : __( 'Fail', 'wporg-plugins' ) + ); + if ( $results ) { + $html .= ''; + } + $html .= __( 'Note: While the automated plugin scan is based on the Plugin Review Guidelines, it is not a complete review. A successful result from the scan does not guarantee that the plugin will be approved, only that it is sufficient to be reviewed. All submitted plugins are checked manually to ensure they meet security and guideline standards before approval.', 'wporg-plugins' ); + + // Return the results. + return [ + 'verdict' => $verdict, + 'results' => $results, + 'html' => $html, + 'runtime' => $total_time, + ]; + } + + public function log_to_slack( $fixme ) { + + // Copypasta, fix refs + + // If the upload is blocked; log it to slack. + if ( ! $verdict ) { + // Slack dm the logs. + $zip_name = reset( $_FILES )['name']; + $failpass = $verdict ? ':white_check_mark: passed' : ':x: failed'; + if ( $return_code > 1 ) { // TODO: Temporary, as we're always hitting this branch. + $failpass = ' :rotating_light: errored: ' . $return_code; + } + + $plugin_name_slug = $this->plugin['Name'] . ' (' . $this->plugin_slug . ')'; + // If we have a post object, link to it. + if ( $this->plugin_post ) { + $edit_post_link = admin_url( 'post.php?post=' . $this->plugin_post->ID . '&action=edit' ); // Can't use get_edit_post_link() as the user can't edit the post. + $plugin_name_slug = "<{$edit_post_link}|{$plugin_name_slug}>"; + } + + $text = "{$failpass} for {$zip_name}: {$plugin_name_slug} took {$total_time}s\n"; + + // Include a simplified / merged version of the results for review. + $group_by_code = [ 'ERROR' => [], 'WARNING' => [] ]; + foreach ( $results as $result ) { + $group_by_code[ $result['type'] ][ $result['code'] ] ??= []; + $group_by_code[ $result['type'] ][ $result['code'] ][] = $result; + } + foreach ( $group_by_code as $type => $codes ) { + foreach ( $codes as $code_results ) { + $text .= "• *{$type}: {$code_results[0]['code']}*"; + if ( 1 === count( $code_results ) ) { + $text .= ": {$code_results[0]['message']}\n"; + } else { + $text .= "\n"; + foreach ( array_unique( wp_list_pluck( $code_results, 'message' ) ) as $i => $message ) { + $multiplier = count( wp_list_filter( $code_results, [ 'message' => $message ] ) ); + $multiplier = $multiplier > 1 ? " {$multiplier}x" : ''; + + $text .= " {$i}. {$multiplier} {$message}\n"; + } + } + } + } + + notify_slack( PLUGIN_CHECK_LOGS_SLACK_CHANNEL, $text, wp_get_current_user(), true ); + } elseif ( $return_code ) { + // Log plugin-check timing out. + $zip_name = reset( $_FILES )['name']; + $text = ":rotating_light: Error: {$return_code} for {$zip_name}: {$this->plugin['Name']} ({$this->plugin_slug}) took {$total_time}s\n"; + notify_slack( PLUGIN_CHECK_LOGS_SLACK_CHANNEL, $text, wp_get_current_user(), true ); + } + + } +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php index ef7f4c6ca9..62ccc5fa3e 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php @@ -67,6 +67,8 @@ private function __construct() { // Search Plugin_Search::instance(); + Plugin_Release::instance(); + // Add upload size limit to limit plugin ZIP file uploads to 10M add_filter( 'upload_size_limit', function( $size ) { return 10 * MB_IN_BYTES; @@ -557,7 +559,7 @@ public function init() { // Add duplicate search rule which will be hit before the following old-plugin tab rules add_rewrite_rule( '^search/([^/]+)/?$', 'index.php?s=$matches[1]', 'top' ); - + // Add additional tags endpoint, to avoid being caught in old-plugins tab rules. See: https://meta.trac.wordpress.org/ticket/6819. add_rewrite_rule( '^tags/([^/]+)/?$', 'index.php?plugin_tags=$matches[1]', 'top' ); @@ -1735,9 +1737,9 @@ public static function get_releases( $plugin ) { $plugin = self::get_plugin_post( $plugin ); $releases = get_post_meta( $plugin->ID, 'releases', true ); - // Meta doesn't exist yet? Lets fill it out. + // Data doesn't exist yet? Lets fill it out. if ( false === $releases || ! is_array( $releases ) ) { - $releases = self::prefill_releses_meta( $plugin ); + $releases = self::prefill_releases_meta( $plugin ); } /** @@ -1756,15 +1758,12 @@ public static function get_releases( $plugin ) { } /** - * Prefill the releases meta for a plugin. + * Prefill the releases meta items for a plugin. * * @param \WP_Post $plugin Plugin post object. * @return array */ - public static function prefill_releses_meta( $plugin ) { - if ( ! $plugin->releases ) { - update_post_meta( $plugin->ID, 'releases', [] ); - } + public static function prefill_releases_meta( $plugin ) { $tags = get_post_meta( $plugin->ID, 'tags', true ); if ( $tags ) { diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-release.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-release.php new file mode 100644 index 0000000000..9c3db2382f --- /dev/null +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-release.php @@ -0,0 +1,488 @@ + array( + 'name' => __( 'Releases', 'wporg-plugins' ), + 'singular_name' => __( 'Release', 'wporg-plugins' ), + ), + 'public' => false, + 'show_ui' => false, + 'exclude_from_search' => true, + 'publicly_queryable' => true, + 'show_in_rest' => true, // FIXME: maybe? + 'supports' => array( 'title', 'editor' ), // TBD + 'rewrite' => false, + 'query_var' => false, + 'hierarchical' => false, // Disappointingly, this doesn't help us make a Post -> Release hierarchy. + ) ); + } + + // Starting point for an internal API, mostly copilot-generated. + + /** + * Get all releases for a plugin. + */ + public function get_releases( $plugin ) { + $plugin_id = ( get_post( $plugin ) )->ID; + + $releases = get_posts( array( + 'post_type' => 'plugin_release', + 'posts_per_page' => -1, + 'post_parent' => $plugin_id, + 'orderby' => 'date', + 'order' => 'DESC', + ) ); + + return $releases; + } + + /** + * Check if a plugin has any release CPTs stored. + * Note that this intentionally does not count draft releases. If needed, we can add a parameter to support that. + */ + public function has_releases( $plugin ) { + $release = $this->get_release( $plugin, null ); + return ! empty( $release ); + } + + /** + * Backfill releases for a plugin, if none exist. This uses the releases postmeta to populate the CPTs. + */ + public function maybe_backfill_releases( $plugin, $force = false ) { + $plugin = get_post( $plugin ); + + if ( !$plugin || 'plugin' !== $plugin->post_type ) { + return new \WP_Error( 'invalid_plugin', 'Invalid plugin' ); + } + + if ( $this->has_releases( $plugin ) && ! $force ) { + return false; + } + + $releases_from_tags = $this->get_releases_from_svn_tags( $plugin ); + + // Add or update the release CPTs using the svn data. + if ( $releases_from_tags ) { + return $this->update_releases( $plugin, $releases_from_tags ); + } + + return false; + } + + // This roughly mimics Plugin_Directory::prefill_releases_meta(), but includes a bit more detail. + public function get_releases_from_svn_tags( $plugin ) { + $plugin = get_post( $plugin ); + + if ( !$plugin || 'plugin' !== $plugin->post_type ) { + return new \WP_Error( 'invalid_plugin', 'Invalid plugin' ); + } + + $svn_tags = Tools\SVN::ls( "https://plugins.svn.wordpress.org/{$plugin->post_name}/tags/", true ) ?: []; + + $releases = []; + foreach ( $svn_tags as $tag ) { + if ( 'dir' !== $tag['kind'] ) { + continue; + } + + $releases[] = [ + 'date' => strtotime( $tag['date'] ), + 'tag' => $tag['filename'], + 'version' => $tag['filename'], + 'committer' => [ $tag['author'] ], + 'revision' => [ $tag['revision'] ], + ]; + } + + return $releases; + } + + /** + * Add release info for a plugin. + */ + public function add_release( $plugin, $release ) { + $plugin = get_post( $plugin ); + $plugin_id = $plugin->ID; + + if ( !$plugin || 'plugin' !== $plugin->post_type ) { + return new \WP_Error( 'invalid_plugin', 'Invalid plugin' ); + } + + $release_date = date( 'Y-m-d H:i:s', $release['date'] ); + $committer_user_id = get_user_by( 'login', reset( $release['committer'] ) )->ID; + if ( ! $committer_user_id ) { + return new \WP_Error( 'invalid_committer', 'Invalid committer' ); + } + + $post_status = ( 'trunk' === $release['tag'] ) ? 'draft' : 'publish'; + $post_title = ( 'trunk' === $release['tag'] ) ? 'trunk' : $release['version']; + + $release_id = wp_insert_post( array( + 'post_type' => 'plugin_release', + 'post_title' => $post_title, + 'post_name' => $plugin->post_name . '-' . $release['version'], + 'post_parent' => $plugin_id, + 'post_status' => $post_status, + 'post_date' => $release_date, // And/or post_date_gmt? + // Mirrors the metadata. + 'meta_input' => array( + 'release_date' => $release['date'], + 'release_tag' => $release['tag'], + 'release_version' => $release['version'], + 'release_committer' => $release['committer'], + 'release_zips_built' => $release['zips_built'], + 'release_confirmations_required' => $release['confirmations_required'], + 'release_revision' => $release['revision'], + 'release_commit_log' => $release['commit_log'] ?? null, + 'release_tested' => $release['tested'] ?? null, + ), + // TODO: what else? Could store the changelog or other content at the point of release for comparison purposes. + ) ); + + return $release_id; + } + + /** + * Update existing release info. + */ + public function update_release( $release_id, $release ) { + + $release_date = date( 'Y-m-d H:i:s', $release['date'] ); + $committer_user_id = get_user_by( 'login', reset( $release['committer'] ) )->ID; + if ( ! $committer_user_id ) { + return new \WP_Error( 'invalid_committer', 'Invalid committer' ); + } + + $release_post = get_post( $release_id ); + if ( ! $release_post || 'plugin_release' !== $release_post->post_type ) { + return new \WP_Error( 'invalid_release', 'Invalid release' ); + } + + $parent_plugin = get_post( $release_post->post_parent ); + if ( ! $parent_plugin || 'plugin' !== $parent_plugin->post_type ) { + return new \WP_Error( 'invalid_plugin', 'Invalid plugin' ); + } + + $post_status = ( 'trunk' === $release['tag'] ) ? 'draft' : 'publish'; + $post_title = ( 'trunk' === $release['tag'] ) ? 'trunk' : $release['version']; + + $release_id = wp_update_post( array( + 'ID' => $release_post->ID, + 'post_type' => 'plugin_release', + 'post_title' => $post_title, + 'post_name' => $parent_plugin->post_name . '-' . $release['version'], + 'post_parent' => $parent_plugin->ID, + 'post_status' => $post_status, + 'post_date' => $release_date, // And/or post_date_gmt? + // Mirrors the metadata. + 'meta_input' => array( + 'release_date' => $release['date'], + 'release_tag' => $release['tag'], + 'release_version' => $release['version'], + 'release_committer' => $release['committer'], + 'release_zips_built' => $release['zips_built'], + 'release_confirmations_required' => $release['confirmations_required'], + 'release_revision' => $release['revision'], + 'release_revision_final' => $release['revision_final'] ?? null, + 'release_revision_prior' => $release['revision_prior'] ?? null, + 'release_commit_log' => $release['commit_log'] ?? null, + 'release_tested' => $release['tested'] ?? null, + 'release_requires_php' => $release['requires_php'] ?? null, + 'release_requires_wp' => $release['requires_wp'] ?? null, + 'release_requires_plugins' => $release['requires_plugins'] ?? null, + ), + // TODO: what else? Could store the changelog or other content at the point of release for comparison purposes. + ) ); + + return $release_id; + } + + /** + * Save draft (trunk) release for a plugin. + */ + public function add_or_update_draft_release( $plugin, $release ) { + $plugin = get_post( $plugin ); + + // Tag must be 'trunk' for this to be a draft release. + if ( 'trunk' !== $release['tag'] ) { + return new \WP_Error( 'invalid_tag', 'Invalid tag' ); + } + + if ( !$plugin || 'plugin' !== $plugin->post_type ) { + return new \WP_Error( 'invalid_plugin', 'Invalid plugin' ); + } + + // If there's already a published release for this plugin, we only create a draft if there are unreleased trunk commits. + $last_release = $this->get_release( $plugin, null ); + + $trunk_url = Import::PLUGIN_SVN_BASE . '/' . $plugin->post_name . '/trunk'; + $svn_options = array( 'limit' => 100 ); // Safety limit. + $commit_log = null; + + if ( $last_release ) { + if ( ! empty( $release['revision'] ) ) { + // Don't create a draft unless the revision number is higher than the last release. + if ( max( $release['revision'] ) <= max( $last_release->release_revision ) ) { + return false; // Not an error, just skip. + } + + // Get commits from last release revision to current revision. + $last_release_revision = max( $last_release->release_revision ); + if ( $last_release_revision ) { + $commit_log = SVN::log( $trunk_url, array( max( $release['revision'] ), $last_release_revision ), $svn_options ); + } + } elseif ( strtotime( $release['date'] ) <= strtotime( $last_release->release_date ) ) { + // If we don't have revision numbers, use dates. Maybe this should be removed. + return false; // Not an error, just skip. + } + } else { + // No previous release - get commits from revision '1' to 'head'. + $commit_log = SVN::log( $trunk_url, array( '1', 'HEAD' ), $svn_options ); + } + + // Store the commit log in postmeta. We'll only do this for drafts. + $release['commit_log'] = $commit_log['log'] ?? null; + + $draft_id = $this->get_release( $plugin, 'trunk' ); + if ( $draft_id ) { + $release_id = $this->update_release( $draft_id, $release ); + } else { + $release_id = $this->add_release( $plugin, $release ); + } + + return $release_id; + } + + function delete_release( $release_id ) { + $release_post = get_post( $release_id ); + if ( ! $release_post || 'plugin_release' !== $release_post->post_type ) { + return new \WP_Error( 'invalid_release', 'Invalid release' ); + } + + return wp_delete_post( $release_id, false ); // FIXME: change to true for force delete when this is ready and WELL TESTED. + } + + /** + * Update all release info for a plugin. This will insert or update each release, and remove any unknown releases. + * + * @param int|WP_Post $plugin The plugin post. + * @param array $releases An array of release data. Should be a complete array of all releases. + * @return int|WP_Error The number of changes made. + */ + public function update_releases( $plugin, $releases ) { + $plugin_id = ( get_post( $plugin ) )->ID; + + if ( 'plugin' !== get_post_type( $plugin ) ) { + return new \WP_Error( 'invalid_plugin', 'Invalid plugin' ); + } + + $changed = false; + + // The current releases, if any, that need to be updated. + $current_releases = $this->get_releases( $plugin ); + $current_versions = wp_list_pluck( $current_releases, 'post_title', 'ID' ); + + // Sort the releases by revision number ascending. + usort( $releases, function( $a, $b ) { + return max($a['revision']) <=> max($b['revision']); + } ); + + // Add or update each release. + foreach ( $releases as $release ) { + $release_revision = max( $release['revision'] ); + // revision_final is the svn rev number that corresponds to the release tag. + // revision_prior is the svn rev number of the previous release. + // revision_prior:revision_final is the range of svn rev numbers that are included in this release (noting that you'll need to be specific about paths) + $release['revision_final'] = $release_revision ?? 'HEAD'; + $release['revision_prior'] = $last_release_revision ?? '1'; // TODO: is there a reasonable way to get the initial import revision number? + + // FIXME: Is it safe to run this here? Should this be conditional on the context in which we're running? Only on add? Something else? + if ( $release['revision_final'] && $release['revision_prior'] ) { + $trunk_url = Import::PLUGIN_SVN_BASE . '/' . $plugin->post_name . '/trunk'; + $svn_options = [ 'limit' => 100 ]; // Safety limit + $commit_log = SVN::log( $trunk_url, [ $release['revision_final'], $release['revision_prior'] ], $svn_options ); + $release['commit_log'] = $commit_log['log'] ?? null; + } + + if ( ! in_array( $release['version'], $current_versions ) ) { + // Add a CPT for the release if one does not yet exist. + $r = $this->add_release( $plugin, $release ); + #fputs( STDERR, 'add: ' . var_export( $r, true ) . "\n" ); + if ( is_wp_error( $r ) ) { + return $r; + } + ++ $changed; + } else { + // Update an existing CPT for the release. + // Note that this will update the CPT even if no data has changed. + $release_id = array_search( $release['version'], $current_versions ); + $r = $this->update_release( $release_id, $release ); + #fputs( STDERR, 'update: ' . var_export( $r, true ) . "\n" ); + if ( is_wp_error( $r ) ) { + return $r; + } + ++ $changed; + } + $last_release_revision = $release_revision; + } + + // Remove any releases that are no longer present. + foreach ( $current_versions as $release_id => $release_version ) { + // A CPT that doesn't exist in the $releases array should be removed. + if ( ! in_array( $release_version, wp_list_pluck( $releases, 'version' ) ) ) { + $r = $this->delete_release( $release_id ); + #fputs( STDERR, 'delete: ' . var_export( $r, true ) . "\n" ); + if ( is_wp_error( $r ) ) { + return $r; + } + ++ $changed; + } + // If there are multiple releases with the same version (title), remove all but the first. + // TODO: Not sure this code should stay. + if ( $release_id !== array_search( $release_version, $current_versions ) ) { + $r = $this->delete_release( $release_id ); + #fputs( STDERR, 'delete dupe: ' . var_export( $r, true ) . "\n" ); + if ( is_wp_error( $r ) ) { + return $r; + } + ++ $changed; + } + } + + return $changed; + } + + /** + * Get a specific plugin release. + */ + public function get_release( $plugin, $version ) { + $plugin_id = ( get_post( $plugin ) )->ID; + + // Note that the post_status is 'draft' for trunk releases. + $post_status = ( 'trunk' === $version ) ? 'draft' : 'publish'; + + $release = get_posts( array( + 'post_type' => 'plugin_release', + 'posts_per_page' => 1, + 'post_parent' => $plugin_id, + 'title' => $version, + 'post_status' => $post_status, + 'orderby' => 'date', + 'order' => 'DESC', + ) ); + + return $release ? $release[0] : null; + } + + /** + * Publish a draft release (ie trunk). + * This will use svn to tag the release, and then publish the release post. + * + * @param int|WP_Post $plugin The plugin post. + * + * @return int|WP_Error The ID of the published release post, or a WP_Error object. + */ + public function publish_release( $plugin ) { + $plugin = get_post( $plugin ); + + // TODO: current_user_can()? Or other checks? + + $draft = $this->get_release( $plugin, 'trunk' ); + if ( ! $draft ) { + return new \WP_Error( 'no_draft', __( 'We could not find a draft to release.', 'wporg-plugins' ) ); + } + + $new_tag = $draft->release_version; + if ( $this->get_release( $plugin, $new_tag ) ) { + return new \WP_Error( 'tag_exists', __( 'This version has already been released.', 'wporg-plugins' ), $new_tag ); + } + + /* + * We won't be block on plugin check or import warnings yet + */ + // if ( !$draft->plugin_check_result || ! $draft->plugin_check_result['verdict'] ) { + // return new \WP_Error( 'plugin_check_failed', __( 'Please review and address the issues identified by the static code analysis tool before releasing.', 'wporg-plugins' ) ); + // } + + // TODO: Should import warnings exist on the release CPT? + // if ( $plugin->_import_warnings ) { + // // These warnings are likely (always?) present because the tag hasn't been created yet. + // $ignored_warnings = [ + // 'stable_tag_invalid_trunk_fallback' => 1, + // 'stable_tag_invalid' => 1, + // ]; + // // Stop here if other warnings are present. + // if ( array_diff_key( $plugin->_import_warnings, $ignored_warnings ) ) { + // return new \WP_Error( 'import_warnings', 'Import warnings', $plugin->_import_warnings ); + // } + // } + + // TODO: What sanitizing or cross-checking do we need here? + $trunk_url = 'https://plugins.svn.wordpress.org/' . $plugin->post_name . '/trunk'; + $tag_url = 'https://plugins.svn.wordpress.org/' . $plugin->post_name . '/tags/' . $new_tag; + + // TODO: Decide if we're committing this as a specific user. Also any other options needed. + // Note that since this is a url-to-url copy, the commit happens immediately. + $svn_options = [ + 'message' => 'Tagging ' . $new_tag . ' from trunk@' . reset( $draft->release_revision ), // Commit message. i18n? + ]; + $tag_result = SVN::copy( $trunk_url, $tag_url, $svn_options ); + + if ( !$tag_result || ! $tag_result['result'] ) { + return new \WP_Error( 'svn_error', __( 'The release failed. Please wait a few minutes and try again.', 'wporg-plugins' ), $tag_result['errors'] ); + } + + // Include the tag revision in the release post list of revisions. + // This is so that we can easily tell if there are trunk commits after the release. + $release_revisions = array_merge( $draft->release_revision, [ $tag_result['revision'] ] ); + + $release_id = wp_update_post( array( + 'ID' => $draft->ID, + 'post_status' => 'publish', + 'post_title' => $new_tag, + 'meta_input' => array( + 'release_revision' => $release_revisions, + #'release_tag_revision' => $tag_result['revision'], // Do we need this? Probably not. + 'release_tag' => $new_tag, // Was 'trunk' + ), + ) ); + + return $release_id; + } + +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php index 4894e4298b..e57ab78844 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php @@ -5,8 +5,10 @@ use WordPressdotorg\Plugin_Directory\Jobs\API_Update_Updater; use WordPressdotorg\Plugin_Directory\Jobs\Tide_Sync; use WordPressdotorg\Plugin_Directory\Block_JSON; +use WordPressdotorg\Plugin_Directory\Plugin_Check; use WordPressdotorg\Plugin_Directory\Plugin_Directory; use WordPressdotorg\Plugin_Directory\Email\Release_Confirmation as Release_Confirmation_Email; +use WordPressdotorg\Plugin_Directory\Plugin_Release; use WordPressdotorg\Plugin_Directory\Readme\{ Parser as Readme_Parser, Validator as Readme_Validator }; use WordPressdotorg\Plugin_Directory\Standalone\Plugins_Info_API; use WordPressdotorg\Plugin_Directory\Template; @@ -167,6 +169,43 @@ public function import_from_svn( $plugin_slug, $svn_changed_tags = array( 'trunk } } + // TODO: Test and confirm that this is the correct behavior. + if ( in_array( 'trunk', $svn_changed_tags ) ) { + // Backfill Release CPTs if needed. This should only happen once per plugin. + // Doing this here as a relatively safe way to distribute the load of backfilling. + Plugin_Release::instance()->maybe_backfill_releases( $plugin ); + + // Create or update a 'draft' release CPT for trunk changes. + // Note that this will only create a new draft if the version doesn't already exist as a release. + // TODO: refine this behaviour. (Maybe compare revision numbers?) + $release = Plugin_Release::instance()->add_or_update_draft_release( + $plugin, + [ + 'tag' => 'trunk', + 'version' => $version, // TODO: Is this correct? + 'committer' => [$last_committer], + 'revision' => [$last_revision], + 'tested' => $readme->tested, + 'requires' => $headers->RequiresWP, + 'requires_php' => $headers->RequiresPHP, + 'requires_plugins' => $requires_plugins, + ] + ); + + // While we're at it, run plugin check and store the results. + // FIXME: Maybe this belongs in export_and_parse_plugin()? The readme checker is run there. + $plugin_export_dir = $data['tmp_dir'] . '/export'; + if ( $release && ! is_wp_error( $release ) ) { + $plugin_check_result = Plugin_Check::run_checks( $plugin->post_name, $plugin_export_dir ); + #var_dump( $plugin_check_result ); + if ( $plugin_check_result ) { + update_post_meta( $release, 'plugin_check_result', $plugin_check_result ); + } else { + delete_post_meta( $release, 'plugin_check_result' ); + } + } + } + // Release confirmation if ( $plugin->release_confirmation ) { // If the stable tag is trunk, we shouldn't continue, as we don't support that for RC. diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/tools/class-svn.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/tools/class-svn.php index 0178ed857b..2a5dde9d85 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/tools/class-svn.php +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/tools/class-svn.php @@ -428,6 +428,61 @@ public static function log( $url, $revision = 'HEAD', $options = array() ) { return compact( 'log', 'errors' ); } + /** + * Copy a SVN path (or url). + * + * @static + * + * @param string $from The path of the SVN folder to rename. May be a URL. + * @param string $to The new path of the SVN folder. May be a URL. + * @param array $options Optional. A list of options to pass to SVN. Default: empty array. + * @return array { + * @type bool $result The result of the operation. + * @type int $revision The revision. + * @type false|array $errors Whether any errors or warnings were encountered. + * } + */ + public static function copy( $from, $to, $options = array() ) { + // TODO: consider refactoring this with rename, since the code is almost identical. + $options[] = 'non-interactive'; + $is_url = ( preg_match( '#https?://#i', $from ) && preg_match( '#https?://#i', $to ) ); + + if ( $is_url ) { + // Set the message if not provided. + if ( ! isset( $options['message'] ) && ! isset( $options['m'] ) ) { + $options['message'] = sprintf( "Copy %s to %s.", basename( $from ), basename( $to ) ); + } + + if ( empty( $options['username'] ) ) { + $options['username'] = PLUGIN_SVN_MANAGEMENT_USER; + $options['password'] = PLUGIN_SVN_MANAGEMENT_PASS; + } + } + + $esc_options = self::parse_esc_parameters( $options ); + + $esc_from = escapeshellarg( $from ); + $esc_to = escapeshellarg( $to ); + + $output = self::shell_exec( "svn cp $esc_from $esc_to $esc_options 2>&1" ); + if ( $is_url && preg_match( '/Committed revision (?P\d+)[.]/i', $output, $m ) ) { + $revision = (int) $m['revision']; + $result = true; + $errors = false; + } else { + $errors = self::parse_svn_errors( $output ); + $revision = false; + + if ( $is_url || $errors ) { + $result = false; + } else { + $result = true; + } + } + + return compact( 'result', 'revision', 'errors' ); + } + /** * Rename a SVN path (or url). * diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.asset.php index d7b228686a..9202f58eda 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '8627e1da9b24373a1f90'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '7f26875761f01d13f9dd'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.js index 1b86a728bd..772b3d2c7e 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/archive-page/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,o=window.wp.blocks,n=window.wp.serverSideRender;var a=e.n(n);const c=window.wp.blockEditor,i=JSON.parse('{"u2":"wporg/archive-page"}');(0,o.registerBlockType)(i.u2,{edit:function({attributes:e,name:o}){return(0,t.createElement)("div",{...(0,c.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(a(),{block:o,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/archive-page/block.json": +/*!********************************************!*\ + !*** ./src/blocks/archive-page/block.json ***! + \********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/archive-page","version":"0.1.0","title":"Archive Page Content","category":"design","icon":"","description":"A block that displays the archive page content","textdomain":"wporg","attributes":{},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!******************************************!*\ + !*** ./src/blocks/archive-page/index.js ***! + \******************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/archive-page/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/block.json new file mode 100644 index 0000000000..3ce8c4872d --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/block.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/card", + "version": "0.1.0", + "title": "Release Card", + "category": "design", + "icon": "", + "description": "A block to display a card.", + "textdomain": "wporg", + "attributes": { + "title": { + "type": "string", + "default": "" + } + }, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ + "postId" + ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/index.asset.php new file mode 100644 index 0000000000..459c076b07 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '47e3efb31a2fd6ac5818'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/index.js new file mode 100644 index 0000000000..bd122c23df --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/card/index.js": +/*!**********************************!*\ + !*** ./src/blocks/card/index.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/card/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/card/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/card/style.scss": +/*!************************************!*\ + !*** ./src/blocks/card/style.scss ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/card/block.json": +/*!************************************!*\ + !*** ./src/blocks/card/block.json ***! + \************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/card","version":"0.1.0","title":"Release Card","category":"design","icon":"","description":"A block to display a card.","textdomain":"wporg","attributes":{"title":{"type":"string","default":""}},"supports":{"html":false,"interactivity":true},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/card/index": 0, +/******/ "blocks/card/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/card/style-index"], () => (__webpack_require__("./src/blocks/card/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/render.php new file mode 100644 index 0000000000..d0e1cdb712 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/render.php @@ -0,0 +1,27 @@ + +
+ +

+ {$block->attributes['title']} +

+ + $content +
+ +HTML; + +$output = sprintf( + '
%2$s
', + wp_kses_data( get_block_wrapper_attributes() ), + $html, +); + +echo do_blocks( $output ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/style-index.css new file mode 100644 index 0000000000..9de758353f --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/card/style-index.css @@ -0,0 +1,8 @@ +/*!***************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/card/style.scss ***! + \***************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-draft { + font-size: var(--wp--preset--font-size--small); +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.asset.php index ab2fb9f31a..94878f12bf 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '6bce91817a063cdf476d'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '9b7cfda9379a258a4745'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.js index e8e14d7ec6..a639fdc3e3 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/category-navigation/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,o=window.wp.blocks,n=window.wp.serverSideRender;var a=e.n(n);const i=window.wp.blockEditor,c=JSON.parse('{"u2":"wporg/category-navigation"}');(0,o.registerBlockType)(c.u2,{edit:function({attributes:e,name:o}){return(0,t.createElement)("div",{...(0,i.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(a(),{block:o,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/category-navigation/block.json": +/*!***************************************************!*\ + !*** ./src/blocks/category-navigation/block.json ***! + \***************************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/category-navigation","version":"0.2.0","title":"Category Navigation","category":"design","icon":"","description":"Adds the category navigation menu","textdomain":"wporg","attributes":{},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*************************************************!*\ + !*** ./src/blocks/category-navigation/index.js ***! + \*************************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/category-navigation/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.asset.php index 32cfe90ff5..922b695350 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '4e25fbe50d772f6a1559'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => 'fe9a74e9340bde2c89fa'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.js index 3662ea6f71..1d81e7ca65 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/filter-bar/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,o=window.wp.blocks,n=window.wp.serverSideRender;var a=e.n(n);const l=window.wp.blockEditor,i=JSON.parse('{"u2":"wporg/filter-bar"}');(0,o.registerBlockType)(i.u2,{edit:function({attributes:e,name:o}){return(0,t.createElement)("div",{...(0,l.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(a(),{block:o,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/filter-bar/block.json": +/*!******************************************!*\ + !*** ./src/blocks/filter-bar/block.json ***! + \******************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/filter-bar","version":"0.2.0","title":"Filter Bar","category":"design","icon":"","description":"Adds a filter bar","textdomain":"wporg","attributes":{},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!****************************************!*\ + !*** ./src/blocks/filter-bar/index.js ***! + \****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/filter-bar/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.asset.php index 09684019c7..264faed9d3 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '3f3755bbf3697bb808f8'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => 'b4c88578d4fb8d783dd4'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.js index 7a3c8b2166..7136a3f573 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/front-page/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,o=window.wp.blocks,n=window.wp.serverSideRender;var a=e.n(n);const l=window.wp.blockEditor,c=JSON.parse('{"u2":"wporg/front-page"}');(0,o.registerBlockType)(c.u2,{edit:function({attributes:e,name:o}){return(0,t.createElement)("div",{...(0,l.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(a(),{block:o,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/front-page/block.json": +/*!******************************************!*\ + !*** ./src/blocks/front-page/block.json ***! + \******************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/front-page","version":"0.1.0","title":"Front Page Content","category":"design","icon":"","description":"A block that displays the front page content","textdomain":"wporg","attributes":{},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!****************************************!*\ + !*** ./src/blocks/front-page/index.js ***! + \****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/front-page/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.asset.php index f1dd1a21c9..b579c818ac 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '58f6f779c22873c960e8'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '26ed8b457f67063bbcbe'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.js index 3f9a8e7de5..77b892a7b3 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,n=window.wp.blocks,o=window.wp.serverSideRender;var a=e.n(o);const l=window.wp.blockEditor,c=JSON.parse('{"u2":"wporg/plugin-card"}');(0,n.registerBlockType)(c.u2,{edit:function({attributes:e,name:n}){return(0,t.createElement)("div",{...(0,l.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(a(),{block:n,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/plugin-card/block.json": +/*!*******************************************!*\ + !*** ./src/blocks/plugin-card/block.json ***! + \*******************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/plugin-card","version":"0.1.0","title":"Plugin Card for Archive Pages","category":"design","icon":"","description":"A block that displays a plugin card.","textdomain":"wporg","attributes":{},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php","viewScript":"file:./view.js"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*****************************************!*\ + !*** ./src/blocks/plugin-card/index.js ***! + \*****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/plugin-card/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.asset.php index a451d28c8a..1b7e807077 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.asset.php @@ -1 +1 @@ - array(), 'version' => 'f221373b7e38d2ff3d7c'); + array(), 'version' => 'e27494ba8e1b7f07e282'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.js index f3234f94de..1d9604facb 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/plugin-card/view.js @@ -1 +1,36 @@ -document.addEventListener("DOMContentLoaded",(function(){var e=document.querySelectorAll(".plugin-cards li");e&&e.forEach((function(e){e.addEventListener("click",(function(t){var n=window.getSelection().toString();if("a"!==t.target.tagName.toLowerCase()&&""===n){var o=e.querySelector("a");if(o){var r=o.getAttribute("href");window.location.href=r}}}))}))})); \ No newline at end of file +/******/ (() => { // webpackBootstrap +var __webpack_exports__ = {}; +/*!****************************************!*\ + !*** ./src/blocks/plugin-card/view.js ***! + \****************************************/ +/** + * Binds click events to navigate on plugin card click. + */ +document.addEventListener('DOMContentLoaded', function () { + var cards = document.querySelectorAll('.plugin-cards li'); + if (cards) { + cards.forEach(function (card) { + card.addEventListener('click', function (event) { + var selectedText = window.getSelection().toString(); + + // Keep regular anchor tag function + if ('a' === event.target.tagName.toLowerCase()) { + return; + } + + // If they are selecting text, let's not navigate. + if ('' !== selectedText) { + return; + } + var anchorTag = card.querySelector('a'); + if (anchorTag) { + var link = anchorTag.getAttribute('href'); + window.location.href = link; + } + }); + }); + } +}); +/******/ })() +; +//# sourceMappingURL=view.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/block.json new file mode 100644 index 0000000000..6bafea2d48 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/block.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-checks", + "version": "0.1.0", + "title": "Release checks.", + "category": "design", + "icon": "", + "description": "A block to display release checks.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false + }, + "usesContext": [ + "postId" + ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/index.asset.php new file mode 100644 index 0000000000..a727359a89 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => 'e264093d240f158ddead'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/index.js new file mode 100644 index 0000000000..406f7ccc3c --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-checks/index.js": +/*!********************************************!*\ + !*** ./src/blocks/release-checks/index.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-checks/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-checks/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-checks/style.scss": +/*!**********************************************!*\ + !*** ./src/blocks/release-checks/style.scss ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-checks/block.json": +/*!**********************************************!*\ + !*** ./src/blocks/release-checks/block.json ***! + \**********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/release-checks","version":"0.1.0","title":"Release checks.","category":"design","icon":"","description":"A block to display release checks.","textdomain":"wporg","attributes":{},"supports":{"html":false},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-checks/index": 0, +/******/ "blocks/release-checks/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-checks/style-index"], () => (__webpack_require__("./src/blocks/release-checks/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/render.php new file mode 100644 index 0000000000..6e857fea12 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/render.php @@ -0,0 +1,77 @@ +context['postId'] ) ) { + return; +} + +$plugin_check_errors = get_post_meta( get_post( $block->context['postId'] )->ID, 'plugin_check_result', true ); + +$heading = sprintf( + ' +

%s

+ ', + esc_html__( 'Checks', 'wporg-plugins' ) +); + +echo do_blocks( $heading ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + +if ( empty( $plugin_check_errors ) ) { + printf( + '

%s

', + esc_html__( 'No checks were run.', 'wporg-plugins' ) + ); + return; +} + +// Warnings are currently associated to the plugin post, not the release post. +$import_warnings = get_post_meta( get_plugin()->ID, '_import_warnings', true ); + +// Merge in warnings into the plugin check errors. +if ( ! empty( $import_warnings ) && ! wp_is_numeric_array( $import_warnings ) ) { + + foreach ( $import_warnings as $error_code => $error_data ) { + + // These warnings exist because they haven't release it. + // TODO: Remove the logic that sets those warnings. + if ( in_array( $error_code, array( 'stable_tag_invalid_trunk_fallback', 'stable_tag_invalid' ), true ) ) { + continue; + } + + $plugin_check_errors['results'][] = array( + 'line' => 0, + 'column' => 0, + 'type' => 'WARNING', + 'code' => $error_code, + 'message' => Readme_Validator::instance()->translate_code_to_message( $error_code, $error_data ), + 'file' => 'readme.txt', + ); + + $plugin_check_errors['verdict'] = false; + } +} + +// Create a block with the overall status. +$blocks = sprintf( + '%2$s', + $plugin_check_errors['verdict'] ? 'success' : 'warning', + get_test_run_message( $plugin_check_errors ) +); + +printf( + '', + wp_kses_data( get_block_wrapper_attributes() ), + do_blocks( $blocks ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped +); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/style-index.css new file mode 100644 index 0000000000..a88dbe5a66 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-checks/style-index.css @@ -0,0 +1,23 @@ +/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-checks/style.scss ***! + \*************************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-checks { + padding: 0; +} +.wp-block-wporg-release-checks .wp-block-heading { + font-size: var(--wp--preset--font-size--small); +} + +.wp-block-wporg-release-checks-results { + list-style: none; + padding-left: 12px; + border-left: 4px solid var(--wp--preset--color--light-grey-1); +} +.wp-block-wporg-release-checks-results li ul { + list-style: disc; +} +.wp-block-wporg-release-checks-results li:not(:last-child) { + margin-bottom: 8px; +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/block.json new file mode 100644 index 0000000000..a4a2c00385 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/block.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-commits", + "version": "0.1.0", + "title": "Release Commits", + "category": "design", + "icon": "", + "description": "A block to display release commits.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false + }, + "usesContext": [ + "postId" + ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/index.asset.php new file mode 100644 index 0000000000..c7ee00d1f1 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '5b31c659da768cc49abf'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/index.js new file mode 100644 index 0000000000..5b053c073b --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-commits/index.js": +/*!*********************************************!*\ + !*** ./src/blocks/release-commits/index.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-commits/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-commits/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-commits/style.scss": +/*!***********************************************!*\ + !*** ./src/blocks/release-commits/style.scss ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-commits/block.json": +/*!***********************************************!*\ + !*** ./src/blocks/release-commits/block.json ***! + \***********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/release-commits","version":"0.1.0","title":"Release Commits","category":"design","icon":"","description":"A block to display release commits.","textdomain":"wporg","attributes":{},"supports":{"html":false},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-commits/index": 0, +/******/ "blocks/release-commits/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-commits/style-index"], () => (__webpack_require__("./src/blocks/release-commits/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/render.php new file mode 100644 index 0000000000..b2c21872af --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/render.php @@ -0,0 +1,99 @@ +context['postId'] ) { + return; +} + +$commits = get_post_meta( $block->context['postId'], 'release_commit_log', true ); + +if ( empty( $commits ) ) { + return '

' . __( 'No commits found.', 'wporg-plugins' ) . '

'; +} + +// Newest commits first. +usort( + $commits, + function ( $a, $b ) { + return $b['date'] <=> $a['date']; + } +); + +$maximum_commits = 5; +$sliced_commits = array_slice( $commits, 0, $maximum_commits ); + +?> + +
> + +

%s

+ ', + esc_attr__( 'Commits', 'wporg-plugins' ) + ); + + echo do_blocks( $heading ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + + ?> + + +
diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/style-index.css new file mode 100644 index 0000000000..8b6945b2b8 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-commits/style-index.css @@ -0,0 +1,44 @@ +/*!**************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-commits/style.scss ***! + \**************************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-commits { + margin-top: 0 !important; +} + +.wp-block-wporg-release-commit-list { + display: flex; + flex-direction: column; + gap: 8px; + list-style: none; + padding: 0; +} +.wp-block-wporg-release-commit-list li { + display: flex; + flex-direction: column; + gap: inherit; + margin-bottom: var(--wp--preset--spacing--10); +} +@media (min-width: 650px) { + .wp-block-wporg-release-commit-list li { + flex-direction: row; + align-items: center; + margin-bottom: 0; + } +} + +.wp-block-wporg-release-commit-author { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; +} + +.wp-block-wporg-release-commit-by-line { + color: var(--wp--preset--color--charcoal-4) !important; + font-size: 12px; +} +.wp-block-wporg-release-commit-by-line a { + color: var(--wp--preset--color--charcoal-4) !important; +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/block.json new file mode 100644 index 0000000000..c7b597f270 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/block.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-draft", + "version": "0.1.0", + "title": "Release Draft", + "category": "design", + "icon": "", + "description": "A block to display release draft.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ + "postId" + ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/index.asset.php new file mode 100644 index 0000000000..12b7e1303a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '4e12b6eb8d27834cbced'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/index.js new file mode 100644 index 0000000000..8eecd7890d --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-draft/index.js": +/*!*******************************************!*\ + !*** ./src/blocks/release-draft/index.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-draft/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-draft/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-draft/style.scss": +/*!*********************************************!*\ + !*** ./src/blocks/release-draft/style.scss ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-draft/block.json": +/*!*********************************************!*\ + !*** ./src/blocks/release-draft/block.json ***! + \*********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/release-draft","version":"0.1.0","title":"Release Draft","category":"design","icon":"","description":"A block to display release draft.","textdomain":"wporg","attributes":{},"supports":{"html":false,"interactivity":true},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-draft/index": 0, +/******/ "blocks/release-draft/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-draft/style-index"], () => (__webpack_require__("./src/blocks/release-draft/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/render.php new file mode 100644 index 0000000000..4ed83f3baa --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/render.php @@ -0,0 +1,99 @@ +context['postId'] ) { + return; +} + +$plugin_post = get_post( $block->context['postId'] ); + +if ( ! $plugin_post ) { + return; +} + +/** + * We are in the context of the plugin post, so we can query for the latest draft post. + */ +$query_args = array( + 'post_type' => 'plugin_release', + 'posts_per_page' => 1, + 'post_parent' => $plugin_post->ID, + 'orderby' => 'date', + 'post_status' => 'draft', + 'order' => 'DESC', +); + +$latest_draft_query = new WP_Query( $query_args ); + +if ( ! $latest_draft_query->have_posts() ) { + return; +} + + + +// Fetch the latest draft post. +$latest_draft_query->the_post(); + +$new_version = get_post_meta( get_the_ID(), 'release_version', true ); + +$publish_text = __( 'Create release', 'wporg-plugins' ); +$slug = get_plugin_slug(); +$intro_text = sprintf( + /* translators: %s: URL to the plugin's trunk folder */ + __( 'There are unpublished changes in your trunk folder.', 'wporg-plugins' ), + esc_url( "https://plugins.trac.wordpress.org/browser/{$slug}/" ) +); +$post_title = sprintf( + /* translators: %s: Plugin version number */ + __( 'Trunk (v.%s)', 'wporg-plugins' ), + esc_html( $new_version ) +); + +$markup = << + + +

$intro_text

+ + + + + + +
+
+ +
+
+ + + + +
+ + + +
+HTML; + +printf( + '
%3$s
', + 'data-wp-interactive="wporg/publish-draft"', + wp_kses_data( get_block_wrapper_attributes() ), + do_blocks( $markup ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped +); + +// Reset global post data. +wp_reset_postdata(); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/style-index.css new file mode 100644 index 0000000000..581067214d --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-draft/style-index.css @@ -0,0 +1,9 @@ +/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-draft/style.scss ***! + \************************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-draft { + margin-bottom: var(--wp--preset--spacing--20); + font-size: var(--wp--preset--font-size--small); +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/block.json new file mode 100644 index 0000000000..7d0cdd57cf --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/block.json @@ -0,0 +1,18 @@ +{ + "apiVersion": 2, + "name": "wporg/release-menu-options", + "title": "Release Menu Options", + "category": "widgets", + "icon": "menu", + "description": "Display the dropdown menu option for a release.", + "supports": { + "html": false + }, + "usesContext": [ + "postId" + ], + "textdomain": "wporg", + "editorScript": "file:./index.js", + "style": "file:./style-index.css", + "render": "file:./render.php" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/index.asset.php new file mode 100644 index 0000000000..77921bd0a1 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => 'a82fb3da1323cd72755b'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/index.js new file mode 100644 index 0000000000..ec4a594e7e --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-menu-options/index.js": +/*!**************************************************!*\ + !*** ./src/blocks/release-menu-options/index.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-menu-options/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-menu-options/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-menu-options/style.scss": +/*!****************************************************!*\ + !*** ./src/blocks/release-menu-options/style.scss ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-menu-options/block.json": +/*!****************************************************!*\ + !*** ./src/blocks/release-menu-options/block.json ***! + \****************************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"apiVersion":2,"name":"wporg/release-menu-options","title":"Release Menu Options","category":"widgets","icon":"menu","description":"Display the dropdown menu option for a release.","supports":{"html":false},"usesContext":["postId"],"textdomain":"wporg","editorScript":"file:./index.js","style":"file:./style-index.css","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-menu-options/index": 0, +/******/ "blocks/release-menu-options/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-menu-options/style-index"], () => (__webpack_require__("./src/blocks/release-menu-options/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/render.php new file mode 100644 index 0000000000..a3c19eaccb --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/render.php @@ -0,0 +1,56 @@ +context['postId'] ) { + return; +} + +$release_post = get_post( $block->context['postId'] ); +if ( ! $release_post ) { + return; +} + +$current_version = get_post_meta( $release_post->ID, 'release_version', true ); +$download_link = get_download_link( $current_version ); +$download_link_html = sprintf( + '', + __( 'Download', 'wporg-plugins' ), + esc_url( $download_link ) +); + +$blueprint_link_html = sprintf( + '', + __( 'Load in Playground', 'wporg-plugins' ), + esc_url( get_blueprint_url( get_download_link( $current_version ) ) ) +); + +$changes_link_html = ''; +$previous_version = get_previous_version( $release_post ); + +if ( null !== $previous_version ) { + $changes_link_html = sprintf( + '', + __( 'View changes', 'wporg-plugins' ), + esc_url( get_trac_changeset_link( $previous_version, $current_version ) ) + ); +} + +$navigation = sprintf( + '%2$s', + __( 'Release options', 'wporg-plugins' ), + sprintf( + '%2$s%3$s%4$s', + __( 'Release options', 'wporg-plugins' ), + $download_link_html, + $blueprint_link_html, + $changes_link_html + ) +); + +echo do_blocks( $navigation ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/style-index.css new file mode 100644 index 0000000000..3bd0eec271 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-menu-options/style-index.css @@ -0,0 +1,40 @@ +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-menu-options/style.scss ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +.wporg-release-menu-options { + /* Manually apply screen reader text styles */ +} +.wporg-release-menu-options .wp-block-navigation__submenu-container { + top: calc(100% + 4px) !important; + right: 0 !important; + left: auto !important; +} +.wporg-release-menu-options .wp-block-navigation-item { + background-color: initial; + /* Stops the hidden overflow on focus */ +} +.wporg-release-menu-options .wp-block-navigation__submenu-icon { + display: none; + /* Hide dropdown caret */ +} +.wporg-release-menu-options button > .wp-block-navigation-item__label { + word-wrap: normal !important; + border: 0; + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.wporg-release-menu-options button { + content: ""; + background-image: url("data:image/svg+xml,"); + background-repeat: no-repeat; + background-position: center; + width: 32px; + height: 32px; +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/block.json new file mode 100644 index 0000000000..17031f1e25 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-page", + "version": "0.1.0", + "title": "Release Page", + "category": "design", + "icon": "", + "description": "A block to display release page.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ + "postId" + ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css", + "viewScriptModule": "file:./view.js" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/index.asset.php new file mode 100644 index 0000000000..fac12a13c3 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '865d514ec640755ece87'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/index.js new file mode 100644 index 0000000000..0f6a4e1cac --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-page/index.js": +/*!******************************************!*\ + !*** ./src/blocks/release-page/index.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-page/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-page/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-page/style.scss": +/*!********************************************!*\ + !*** ./src/blocks/release-page/style.scss ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-page/block.json": +/*!********************************************!*\ + !*** ./src/blocks/release-page/block.json ***! + \********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/release-page","version":"0.1.0","title":"Release Page","category":"design","icon":"","description":"A block to display release page.","textdomain":"wporg","attributes":{},"supports":{"html":false,"interactivity":true},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css","viewScriptModule":"file:./view.js"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-page/index": 0, +/******/ "blocks/release-page/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-page/style-index"], () => (__webpack_require__("./src/blocks/release-page/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/render.php new file mode 100644 index 0000000000..d61171e0e9 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/render.php @@ -0,0 +1,52 @@ +context['postId'] ) { + return; +} + +$plugin_post = get_post( $block->context['postId'] ); + +if ( ! $plugin_post ) { + return; +} + +$heading_text = __( 'Releases', 'wporg-plugins' ); + +$markup = << +

$heading_text

+ + + + +
+ +
+HTML; + +/** + * Create initial state for the wporg/publish-draft. + */ +wp_interactivity_state( + 'wporg/publish-draft', + array( + 'isCreatingRelease' => false, + ) +); + +/** + * Create initial context for the wporg/publish-draft. + */ +printf( + '
%3$s
', + wp_kses_data( get_block_wrapper_attributes() ), + 'data-wp-interactive="wporg/publish-draft"', + do_blocks( $markup ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped +); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/style-index.css new file mode 100644 index 0000000000..e58004dae1 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/style-index.css @@ -0,0 +1,11 @@ +/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-page/style.scss ***! + \***********************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-draft { + font-size: var(--wp--preset--font-size--small); +} +.wp-block-wporg-release-draft ul { + margin-top: var(--wp--preset--spacing--10); +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/view.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/view.asset.php new file mode 100644 index 0000000000..900248015c --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/view.asset.php @@ -0,0 +1 @@ + array('@wordpress/interactivity'), 'version' => 'a2935a64e4dd8c48133e', 'type' => 'module'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/view.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/view.js new file mode 100644 index 0000000000..cb7cd72f5a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-page/view.js @@ -0,0 +1,87 @@ +import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity"; +/******/ var __webpack_modules__ = ({ + +/***/ "@wordpress/interactivity": +/*!*******************************************!*\ + !*** external "@wordpress/interactivity" ***! + \*******************************************/ +/***/ ((module) => { + +var x = y => { var x = {}; __webpack_require__.d(x, y); return x; } +var y = x => () => x +module.exports = __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*****************************************!*\ + !*** ./src/blocks/release-page/view.js ***! + \*****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _wordpress_interactivity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/interactivity */ "@wordpress/interactivity"); +/** + * WordPress dependencies + */ + +const { + state +} = (0,_wordpress_interactivity__WEBPACK_IMPORTED_MODULE_0__.store)('wporg/publish-draft', { + actions: { + handlePreSubmit(event) { + event.preventDefault(); + state.isCreatingRelease = true; + const element = document.querySelector('.wp-block-wporg-release-page'); + if (element) { + element.scrollIntoView({ + behavior: 'instant', + block: 'center' + }); + } + } + } +}); +})(); + + +//# sourceMappingURL=view.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/block.json new file mode 100644 index 0000000000..f78830fb12 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-publish", + "version": "0.1.0", + "title": "Release Publish", + "category": "design", + "icon": "", + "description": "A block to display release publish view.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ + "postId" + ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css", + "viewScriptModule": "file:./view.js" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/index.asset.php new file mode 100644 index 0000000000..45e09df3d6 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '243c74237a1c67203d04'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/index.js new file mode 100644 index 0000000000..3abdfe0a20 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-publish/index.js": +/*!*********************************************!*\ + !*** ./src/blocks/release-publish/index.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-publish/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-publish/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-publish/style.scss": +/*!***********************************************!*\ + !*** ./src/blocks/release-publish/style.scss ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-publish/block.json": +/*!***********************************************!*\ + !*** ./src/blocks/release-publish/block.json ***! + \***********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/release-publish","version":"0.1.0","title":"Release Publish","category":"design","icon":"","description":"A block to display release publish view.","textdomain":"wporg","attributes":{},"supports":{"html":false,"interactivity":true},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css","viewScriptModule":"file:./view.js"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-publish/index": 0, +/******/ "blocks/release-publish/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-publish/style-index"], () => (__webpack_require__("./src/blocks/release-publish/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/render.php new file mode 100644 index 0000000000..ba461f70da --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/render.php @@ -0,0 +1,212 @@ +context['postId'] ) ) { + return; +} + +$release_post = get_post( $block->context['postId'] ); + +// Bail if the release post does not exist. +if ( ! $release_post ) { + return; +} + +$current_version = get_post_meta( $block->context['postId'], 'release_version', true ); +$tested_up_to = get_post_meta( $block->context['postId'], 'release_tested', true ); + +$latest_release = get_latest_release( $release_post->post_parent ); +$last_version = get_post_meta( $latest_release->ID, 'release_version', true ); +$version_pass = version_compare( $current_version, $last_version, '>' ); +$tested_up_to_pass = has_recently_been_tested( $tested_up_to ); + +$plugin_slug = get_plugin_slug(); +$form_context = array( + 'pluginSlug' => $plugin_slug, + 'nonce' => wp_create_nonce( 'wp_rest' ), + 'apiURL' => esc_url( rest_url( 'plugins/v2/plugin/' . $plugin_slug . '/publish' ) ), + 'genericErrorMessage' => __( 'An error occurred while publishing the release.', 'wporg-plugins' ), + 'tooltipMessage' => __( 'Please fill out this field.', 'wporg-plugins' ), +); + +/** + * Create initial state for the wporg/publish-draft. + */ +wp_interactivity_state( + 'wporg/publish-draft', + array( + 'hasConfirmed' => false, + 'isPublishing' => false, + 'isPublished' => false, + 'hasError' => false, + 'errorMessage' => '', + ) +); + +?> + +
+ + > +
+ +

%s

+ ', + __( 'Before releasing your plugin, make sure everything is up-to-date and ready for your users:', 'wporg-plugins' ) + ), + ); + ?> + +

%s

+ ', + esc_html__( 'Checklist', 'wporg-plugins' ) + ) + ) + ?> +
    + + + + +
+ +
+ +
+ +
+ +
+
+

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

+ ' . esc_html( $current_version ) . '' + ); + ?> +

+

+ +

    +
  • + + + + + : + +
  • +
  • + + + : + +
  • +
  • + Engage with your audience: Monitor your support forum and plugin reviews for feedback.', 'wporg-plugins' ), + esc_url( Template::get_support_url( get_plugin() ) ), + esc_url( 'https://wordpress.org/support/plugin/' . $plugin_slug . '/reviews/' ) + ); + ?> +
  • +
+ Plugin Developer FAQ or join the #pluginreview channel on Slack.', 'wporg-plugins' ), + esc_url( 'https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/' ), + esc_url( 'https://wordpress.slack.com/archives/C1LBM36LC ' ) + ); + ?> + +

+ +
+
+ +
+
+
+
diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/style-index.css new file mode 100644 index 0000000000..1e0f8babd6 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/style-index.css @@ -0,0 +1,36 @@ +/*!**************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-publish/style.scss ***! + \**************************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-publish label { + display: block; +} +.wp-block-wporg-release-publish .wp-block-wporg-release-result-item > div:last-child > div { + color: var(--wp--preset--color--charcoal-3); + font-size: var(--wp--preset--font-size--extra-small); +} + +.wp-block-wporg-release-publish-checklist { + padding: 0; +} + +.wp-block-wporg-release-publish-user-confirm { + margin-top: var(--wp--preset--spacing--20); +} + +.wp-block-wporg-release-publish-actions { + display: flex; + margin-top: var(--wp--preset--spacing--20); + gap: 8px; +} + +.wp-block-wporg-release-publish-spinner { + align-items: center; + display: flex; + gap: 6px; +} + +.wp-block-wporg-release-publish-error { + margin-top: var(--wp--preset--spacing--10); +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/view.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/view.asset.php new file mode 100644 index 0000000000..8d8fc641fc --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/view.asset.php @@ -0,0 +1 @@ + array('@wordpress/interactivity'), 'version' => '26f254207adda1b21e3d', 'type' => 'module'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/view.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/view.js new file mode 100644 index 0000000000..55bbaac8c0 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-publish/view.js @@ -0,0 +1,158 @@ +import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity"; +/******/ var __webpack_modules__ = ({ + +/***/ "@wordpress/interactivity": +/*!*******************************************!*\ + !*** external "@wordpress/interactivity" ***! + \*******************************************/ +/***/ ((module) => { + +var x = y => { var x = {}; __webpack_require__.d(x, y); return x; } +var y = x => () => x +module.exports = __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!********************************************!*\ + !*** ./src/blocks/release-publish/view.js ***! + \********************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _wordpress_interactivity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/interactivity */ "@wordpress/interactivity"); +/** + * WordPress dependencies + */ + +const { + state +} = (0,_wordpress_interactivity__WEBPACK_IMPORTED_MODULE_0__.store)('wporg/publish-draft', { + state: { + get userHasConfirmed() { + return state.hasConfirmed; + }, + get isDefaultState() { + return !state.isPublishing && !state.isPublished; + }, + get isPublishingState() { + return state.isPublishing; + }, + get isPublishedState() { + return state.isPublished; + } + }, + actions: { + handleReleaseConfirm() { + state.hasConfirmed = !state.hasConfirmed; + }, + handleBackClick(event) { + event.preventDefault(); + state.isCreatingRelease = false; + + // Make user reconfirm. + state.hasConfirmed = false; + state.hasError = false; + state.errorMessage = ''; + }, + handlePageReload() { + window.location.reload(); + }, + *handleSubmit(event) { + event.preventDefault(); + const { + pluginSlug, + nonce, + apiURL, + genericErrorMessage, + tooltipMessage + } = (0,_wordpress_interactivity__WEBPACK_IMPORTED_MODULE_0__.getContext)(); + + // Replicate form validation. + if (!state.hasConfirmed) { + const input = document.getElementById('confirm-release'); + input.setCustomValidity(tooltipMessage); + input.reportValidity(); + return false; + } + state.isPublishing = true; + state.errorMessage = ''; + state.hasError = false; + try { + const response = yield fetch(apiURL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-WP-Nonce': nonce + }, + body: JSON.stringify({ + plugin_slug: pluginSlug + }) + }); + if (!response.ok) { + try { + const error = yield response.json(); + throw new Error(error.message); + } catch (error) { + if (error instanceof SyntaxError) { + // Handle cases where json is not returned, like a gateway timeout. + throw new Error(genericErrorMessage); + } + throw error; + } + } + state.isPublished = true; + } catch (error) { + state.errorMessage = error.message; + state.hasError = true; + state.isPublishing = false; + state.hasConfirmed = false; + } finally { + state.isPublishing = false; + } + } + } +}); +})(); + + +//# sourceMappingURL=view.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/block.json new file mode 100644 index 0000000000..a9626174ed --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/block.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-result-item", + "version": "0.1.0", + "title": "Release Result Item", + "category": "design", + "icon": "", + "description": "A block to display release draft result item.", + "textdomain": "wporg", + "attributes": { + "status": { + "type": "string", + "enum": [ + "error", + "warning", + "success" + ] + } + }, + "supports": { + "html": false + }, + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/index.asset.php new file mode 100644 index 0000000000..5d3dc0aed0 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '528aee9f7fbbffa602e3'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/index.js new file mode 100644 index 0000000000..e99ee21ff5 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/index.js @@ -0,0 +1,298 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/blocks/release-result-item/index.js": +/*!*************************************************!*\ + !*** ./src/blocks/release-result-item/index.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/release-result-item/block.json"); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.scss */ "./src/blocks/release-result-item/style.scss"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); + +/***/ }), + +/***/ "./src/blocks/release-result-item/style.scss": +/*!***************************************************!*\ + !*** ./src/blocks/release-result-item/style.scss ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/release-result-item/block.json": +/*!***************************************************!*\ + !*** ./src/blocks/release-result-item/block.json ***! + \***************************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/release-result-item","version":"0.1.0","title":"Release Result Item","category":"design","icon":"","description":"A block to display release draft result item.","textdomain":"wporg","attributes":{"status":{"type":"string","enum":["error","warning","success"]}},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php","style":"file:./style-index.css"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "blocks/release-result-item/index": 0, +/******/ "blocks/release-result-item/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkwporg_plugins_2024"] = self["webpackChunkwporg_plugins_2024"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["blocks/release-result-item/style-index"], () => (__webpack_require__("./src/blocks/release-result-item/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/render.php new file mode 100644 index 0000000000..6ef2bce419 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/render.php @@ -0,0 +1,34 @@ + + +
  • > +
    + attributes['status'] ) : ?> + + + + + + attributes['status'] ) : ?> + + + + attributes['status'] ) : ?> + + + + + + + +
    + + inner_html ); ?> +
  • diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/style-index.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/style-index.css new file mode 100644 index 0000000000..81b705ae23 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/release-result-item/style-index.css @@ -0,0 +1,21 @@ +/*!******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/blocks/release-result-item/style.scss ***! + \******************************************************************************************************************************************************************************************************************************************************************/ +.wp-block-wporg-release-result-item { + display: flex; + margin: 0 0 12px !important; + position: relative; + gap: 8px; + list-style: none; +} +.wp-block-wporg-release-result-item > div:first-child { + height: 25px; + display: flex; + align-items: center; +} + +ul .wp-block-wporg-release-result-item:last-child { + margin-bottom: 0; +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.asset.php index 3874c78df8..324a1e825f 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '6b2f02802534bd210435'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '2932d78d72daed3eaacc'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.js index 66e06627aa..7e3f159885 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/search-page/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,o=window.wp.blocks,n=window.wp.serverSideRender;var a=e.n(n);const c=window.wp.blockEditor,l=JSON.parse('{"u2":"wporg/search-page"}');(0,o.registerBlockType)(l.u2,{edit:function({attributes:e,name:o}){return(0,t.createElement)("div",{...(0,c.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(a(),{block:o,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/search-page/block.json": +/*!*******************************************!*\ + !*** ./src/blocks/search-page/block.json ***! + \*******************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/search-page","version":"0.1.0","title":"Search Page Content","category":"design","icon":"","description":"A block that displays the search page content","textdomain":"wporg","attributes":{},"supports":{"html":false},"editorScript":"file:./index.js","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*****************************************!*\ + !*** ./src/blocks/search-page/index.js ***! + \*****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/search-page/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.asset.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.asset.php index cb40720c88..d35f709556 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.asset.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '553d7b70458e5cb3fa39'); + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-server-side-render'), 'version' => '1bb248b43dcc36e48747'); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.js index 4d9a19fd2b..8c8d7df376 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/build/blocks/single-plugin/index.js @@ -1 +1,183 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.components,n=window.wp.blocks,o=window.wp.serverSideRender;var l=e.n(o);const a=window.wp.blockEditor,i=JSON.parse('{"u2":"wporg/single-plugin"}');(0,n.registerBlockType)(i.u2,{edit:function({attributes:e,name:n}){return(0,t.createElement)("div",{...(0,a.useBlockProps)()},(0,t.createElement)(r.Disabled,null,(0,t.createElement)(l(),{block:n,attributes:e})))},save:()=>null})})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/server-side-render": +/*!******************************************!*\ + !*** external ["wp","serverSideRender"] ***! + \******************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["serverSideRender"]; + +/***/ }), + +/***/ "./src/blocks/single-plugin/block.json": +/*!*********************************************!*\ + !*** ./src/blocks/single-plugin/block.json ***! + \*********************************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wporg/single-plugin","version":"0.1.0","title":"Single Plugin Content","category":"design","icon":"","description":"A block that displays the single plugin content","textdomain":"wporg","attributes":{},"supports":{"html":false},"usesContext":["postId"],"editorScript":"file:./index.js","render":"file:./render.php"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*******************************************!*\ + !*** ./src/blocks/single-plugin/index.js ***! + \*******************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); +/* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/blocks/single-plugin/block.json"); + +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + +function Edit({ + attributes, + name +}) { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.useBlockProps)() + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Disabled, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_3___default()), { + block: name, + attributes: attributes + }))); +} +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_2__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, { + edit: Edit, + save: () => null +}); +})(); + +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/_spinner.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/_spinner.scss new file mode 100644 index 0000000000..0ac9a79e9b --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/_spinner.scss @@ -0,0 +1,49 @@ +.wporg-spinner { + --local-size: 16px; + --spinner-color: var(--wp--custom--spinner--color, var(--wp--preset--color--blueberry-1, currentColor)); + --background-stroke-color: rgb(221, 221, 221); + + width: var(--local-size); + height: var(--local-size); + display: inline-block; + background-color: transparent; + position: relative; +} + +/* Static outer circle */ +.wporg-spinner::before { + content: ''; + width: 100%; + height: 100%; + border-radius: 50%; + border: 1.5px solid var(--background-stroke-color); + display: block; + box-sizing: border-box; +} + +/* Rotating semicircle (arc) */ +.wporg-spinner::after { + content: ''; + width: 100%; + height: 100%; + border-radius: 50%; + border: 1.5px solid transparent; + border-top-color: var(--spinner-color); + border-right-color: var(--spinner-color); + display: block; + box-sizing: border-box; + animation: wporg-spinner-rotate 1.4s linear infinite; + transform-origin: center; + position: absolute; + top: 0; + left: 0; +} + +@keyframes wporg-spinner-rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/style.scss index 85f975b96c..c0f8539017 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/style.scss +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/components/plugin/style.scss @@ -230,15 +230,17 @@ span#description, span#reviews, span#developers, - span#installation { + span#installation, + span#releases { position:fixed; } - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#advanced:not(.displayed) ~ #section-links .tabs li#tablink-description, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ span#advanced:not(.displayed) ~ #section-links .tabs li#tablink-description, span#reviews:target ~ #section-links .tabs li#tablink-reviews, span#installation:target ~ #section-links .tabs li#tablink-installation, span#developers:target ~ #section-links .tabs li#tablink-developers, - span#advanced.displayed ~ #section-links .tabs li#tablink-advanced { + span#advanced.displayed ~ #section-links .tabs li#tablink-advanced, + span#releases:target ~ #section-links .tabs li#tablink-releases { border-top: 1px solid var( --wp--preset--color--light-grey-1 ); border-left: 1px solid var( --wp--preset--color--light-grey-1 ); border-right: 1px solid var( --wp--preset--color--light-grey-1 ); @@ -299,18 +301,19 @@ } } - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #tab-description, - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #screenshots, - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #faq, - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #blocks, - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #tab-developers, - span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #tab-developers ~ button, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ .entry-content #tab-description, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ .entry-content #screenshots, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ .entry-content #faq, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ .entry-content #blocks, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ .entry-content #tab-developers, + span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ span#releases:not(:target) ~ .entry-content #tab-developers ~ button, span#reviews:target ~ .entry-content #tab-reviews, span#installation:target ~ .entry-content #tab-installation, span#developers:target ~ .entry-content #tab-changelog, span#developers:target ~ .entry-content #tab-developers, span#developers:target ~ .entry-content #tab-developers ~ button, - span#developers:target ~ .entry-content #tab-developers .plugin-development { + span#developers:target ~ .entry-content #tab-developers .plugin-development, + span#releases:target ~ .entry-content #tab-releases { display:block; } @@ -324,10 +327,15 @@ span#reviews:target ~ .entry-meta .plugin-support, span#reviews:target ~ .entry-meta .plugin-donate, span#reviews:target ~ .entry-meta .plugin-contributors, - span#installation:target ~ .entry-meta .plugin-contributors { + span#installation:target ~ .entry-meta .plugin-contributors, + span#releases:target ~ .entry-meta { display:none; } + span#releases:target ~ .entry-content { + width: 100%; + } + @media screen and ( min-width: $ms-breakpoint ) { .entry-content, .entry-meta { diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/styles/components/_components.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/styles/components/_components.scss index 4ff25a4a7e..4c4e16bf7f 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/styles/components/_components.scss +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/client/styles/components/_components.scss @@ -21,6 +21,7 @@ @import "../../components/plugin/sections-screenshots"; @import "../../components/plugin/sections-stats"; @import "../../components/plugin/sections"; +@import "../../components/plugin/spinner"; @import "../../components/plugin/style"; @import "../../components/widget-area/widgets-adopt-me"; @import "../../components/widget-area/widgets-categorization"; diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style-rtl.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style-rtl.css index 03aa038022..fba97030e9 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style-rtl.css +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style-rtl.css @@ -1 +1 @@ -@charset "UTF-8";.avatar{border-radius:50%;vertical-align:middle}.wp-block-wporg-language-suggest>p{margin:0}.block-validator>details summary{padding:var(--wp--style--block-gap) 0}.block-validator .block-validator__plugin-form label{display:block;margin-bottom:.8em}.block-validator .block-validator__plugin-input-container{display:flex;max-width:34rem}.block-validator .block-validator__plugin-input{flex:1}.block-validator .block-validator__plugin-submit{flex:0;margin-right:4px}@media (max-width:36rem){.block-validator .block-validator__plugin-submit{width:100%}.block-validator .block-validator__plugin-input-container{display:block}.block-validator .block-validator__plugin-input{width:100%}.block-validator .block-validator__plugin-submit{margin-right:0;margin-top:var(--wp--style--block-gap)}}.block-validator .notice details,.block-validator .notice p{font-size:var(--wp--preset--font-size--normal);margin:var(--wp--style--block-gap) 0}.block-validator .notice details p{font-size:var(--wp--preset--font-size--small);margin-right:1rem}.block-validator .notice summary{display:list-item}.block-validator figure{border:1px solid #aaa;display:inline-block;padding:1em}.block-validator .test-screenshot{text-align:center}.block-validator .plugin-upload-form-controls{align-items:center;display:flex;gap:4px}.block-validator .plugin-upload-form-controls>label{border:1px solid var(--wp--custom--form--border--color);border-radius:var(--wp--custom--form--border--radius);cursor:pointer;min-width:200px;padding:4px 8px}.notice{background:#fff;border-right:4px solid #fff;box-shadow:0 1px 1px 0 #0000001a;font-size:var(--wp--preset--font-size--small);margin:var(--wp--style--block-gap) 0;padding:1px 12px}.notice p,.notice ul{margin:.5em 0;padding:2px}.notice pre{white-space:pre-wrap}.notice ul{list-style:none;margin:.5em}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-right-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-right-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-right-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-right-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.notice.hidden{display:none}.plugin-upload-form.hidden{display:none}.plugin-upload-form fieldset{border:none;margin:0;padding:0}.plugin-upload-form legend{margin:1rem 0}.plugin-upload-form .category-checklist{list-style-type:none;margin:0 0 2rem}.plugin-upload-form .category-checklist li{float:right;padding:.5rem 0;width:50%}@media screen and (min-width:48em){.plugin-upload-form .category-checklist li{padding:0}.plugin-upload-form .category-checklist label{font-size:var(--wp--preset--font-size--small)}.plugin-upload-form label.button{line-height:1.8}}.plugin-upload-form .plugin-file{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px;z-index:-1}.plugin-queue-message code{font-size:1em}.plugin-queue-message dialog.slug-change input[type=text]{font-family:monospace;font-size:1.2em;width:20em}:where(main) a:where(:not(.wp-element-button,.wp-block-wporg-link-wrapper)):focus,:where(main) button:where(:not([class*=wp-block-button])):focus{border-radius:2px;box-shadow:0 0 0 1.5px currentColor;outline:none}.wporg-filter-bar{--wporg--filter-bar--gap:20px;--wporg--filter-bar--color:#40464d;--wporg--filter-bar--active--background-color:var(--wp--custom--button--color--background);--wporg--filter-bar--focus--border-color:var(--wp--custom--button--focus--border--color);margin:var(--wp--style--block-gap) 0}.wporg-filter-bar .wporg-query-filter__toggle.is-active,.wporg-filter-bar .wporg-query-filter__toggle:active,.wporg-filter-bar .wporg-query-filter__toggle:focus{background-color:var(--wporg--filter-bar--active--background-color);color:var(--wp--custom--button--color--text)}.wporg-filter-bar .wporg-filter-bar__navigation{flex-grow:1;margin-bottom:var(--wporg--filter-bar--gap)}.wporg-filter-bar .wporg-filter-bar__navigation ul{display:inline-block;font-size:13px;line-height:1.538;list-style:none;margin:0;padding-right:0}.wporg-filter-bar .wporg-filter-bar__navigation ul li{display:inline-block}.wporg-filter-bar .wporg-filter-bar__navigation ul li+li{margin-right:8px}.wporg-filter-bar .wporg-filter-bar__navigation ul a{border-radius:2px;color:var(--wporg--filter-bar--color);display:block;padding:8px 12px;text-decoration:none}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a:hover{text-decoration:underline}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus-visible{box-shadow:none;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active{background-color:var(--wporg--filter-bar--active--background-color);color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:hover{color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus-visible{box-shadow:inset 0 0 0 1.5px #fff;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}@media screen and (min-width:737px){.wporg-filter-bar{align-items:center;display:flex;flex-wrap:wrap;gap:var(--wporg--filter-bar--gap);justify-content:space-between;width:100%}.wporg-filter-bar .wporg-filter-bar__navigation{margin-bottom:0}}.wp-block-search__inside-wrapper{background:var(--wp--preset--color--light-grey-2);border:none}.button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button{background-color:var(--wp--custom--button--color--background);border:0;border-radius:var(--wp--custom--button--border--radius);color:var(--wp--custom--button--color--text);cursor:pointer;opacity:1;padding:calc(var(--wp--custom--button--small--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--left) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--right) + var(--wp--custom--button--border--width));vertical-align:middle}.button.button-large{padding:calc(var(--wp--custom--button--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--left) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--right) + var(--wp--custom--button--border--width))}input+button.button,select+button.button{margin-top:-3px}.button.disabled{cursor:not-allowed;opacity:.6}.wp-block-post-content a.button{text-decoration:none}.wp-block-button__link{width:auto}pre{background-color:#f7f7f7;border:1px solid var(--wp--preset--color--light-grey-1);overflow:scroll;padding:20px}code,pre{border-radius:2px}code{background:var(--wp--preset--color--light-grey-2);display:inline-block;line-height:var(--wp--custom--body--extra-small--typography--line-height);max-width:100%;padding-inline-end:3px;padding-inline-start:3px}dialog{border:0;box-shadow:-6px 6px 6px #0003;min-height:50%;min-width:30%}@media (min-width:1280px){dialog{max-width:55%}}dialog::backdrop{background:#000;opacity:.5}dialog .close{color:inherit;cursor:pointer;position:absolute;left:1em;text-decoration:none!important;top:1em}.plugin-card{display:flex;flex-direction:column;height:100%;justify-content:space-between}.plugin-card .entry{display:inline-block;vertical-align:top}.plugin-card .entry-title{display:block;display:-webkit-box;font-size:var(--wp--preset--font-size--heading-5);font-weight:500;line-height:1.3;margin-bottom:2px!important;max-height:2.6em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.plugin-card .entry-title a{display:block;text-decoration:none}.plugin-card .entry-title a:focus{box-shadow:none}.plugin-card .entry-excerpt{clear:both;font-size:var(--wp--preset--font-size--small)}.plugin-card .entry-excerpt p{margin:0}.plugin-card footer{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-card footer span{color:var(--wp--preset--color--charcoal-4);display:inline-block;line-height:var(--wp--preset--font-size--normal);overflow:hidden}.plugin-card footer span.plugin-author{width:100%}.plugin-card footer span.plugin-author span{color:var(--wp--preset--color--charcoal-1)}.plugin-card footer span.plugin-author path{fill:var(--wp--preset--color--charcoal-1)}.plugin-card footer span svg{height:24px;vertical-align:bottom;width:24px}.plugin-card footer span svg path{fill:var(--wp--preset--color--charcoal-4)}.plugin-card footer span.active-installs{min-width:48%}.plugin-cards{cursor:pointer}.plugin-cards .is-style-cards-grid li:hover{background-color:#fff!important;border:1px solid var(--wp--preset--color--charcoal-1)!important}.plugin-cards .is-style-cards-grid li:focus-within{border-color:#0000;border-radius:2px;box-shadow:0 0 0 1.5px var(--wp--custom--link--color--text)}@media screen and (max-width:737px){.plugin-cards .is-style-cards-grid{grid-template-columns:100%}}.entry-thumbnail{display:none;margin-bottom:var(--wp--style--block-gap);margin-left:var(--wp--style--block-gap);max-width:80px}.entry-thumbnail .plugin-icon{background-size:cover;border-radius:var(--wp--custom--button--border--radius);display:block;height:80px;width:80px}@media screen and (min-width:21em){.entry-thumbnail{display:inline-block;float:right;vertical-align:top}}.single .entry-thumbnail{display:none;float:right;height:96px;margin-bottom:0;max-width:96px}@media screen and (min-width:26em){.single .entry-thumbnail{display:block}}.single .entry-thumbnail .plugin-icon{background-size:contain!important;height:96px!important;width:96px!important}.plugin-rating{line-height:1;margin:0 0 8px 10px}.plugin-rating .wporg-ratings{display:inline-block;margin-left:5px}.plugin-rating .rating-count{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);vertical-align:text-bottom}.plugin-rating .rating-count a{color:inherit;cursor:hand;text-decoration:none}[class*=dashicons-star-]{color:var(--wp--preset--color--pomegrade-1)}.rtl .dashicons-star-half{transform:rotateY(-180deg)}#main .plugin-section{margin:0 auto var(--wp--preset--spacing--60)}#main .plugin-section:last-of-type{margin-bottom:0}#main .plugin-section .section-header{align-items:center;column-gap:10px;display:flex;justify-content:space-between;margin-bottom:var(--wp--style--block-gap)}#main .plugin-section .section-header>h2{margin-bottom:0}#main .plugin-section .section-link{align-self:center;flex:0 0 auto;text-decoration:underline}.pagination .nav-links{margin-top:var(--wp--style--block-gap);padding-top:var(--wp--style--block-gap);text-align:center}.pagination .nav-links a{text-decoration:none}.pagination .nav-links .page-numbers{cursor:pointer;display:inline-block;min-width:2em;padding:8px;text-align:center}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:auto;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{display:inline-block;font-size:medium;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{font-weight:700}.pagination .nav-links span.page-numbers.current{text-decoration:underline}@keyframes favme-anime{0%{font-size:var(--wp--preset--font-size--large);opacity:1;-webkit-text-stroke-color:#0000}25%{color:#fff;font-size:var(--wp--preset--font-size--small);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}75%{color:#fff;font-size:var(--wp--preset--font-size--large);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}to{font-size:var(--wp--preset--font-size--normal);opacity:1;-webkit-text-stroke-color:#0000}}.plugin-favorite{height:calc(var(--wp--custom--button--spacing--padding--top)*2 + var(--wp--preset--font-size--normal)*2);text-align:center;vertical-align:top;width:36px}.plugin-favorite .plugin-favorite-heart{align-items:center;background:none;border:0;border-radius:0;box-shadow:none;color:#cbcdce;cursor:pointer;display:flex;font-size:var(--wp--preset--font-size--large);height:100%;justify-content:center;line-height:1;margin:0;outline:none;padding:0;text-decoration:none}.plugin-favorite .plugin-favorite-heart.favorited{color:#dc3232}.plugin-favorite .plugin-favorite-heart:focus,.plugin-favorite .plugin-favorite-heart:hover{color:var(----wp--preset--color--charcoal-2);text-decoration:none}.plugin-favorite .plugin-favorite-heart:after{content:"\f487";font-family:dashicons;vertical-align:top}.plugin-banner img{aspect-ratio:3.089;border-radius:var(--wp--custom--button--border--radius);display:block;margin:0 auto var(--wp--preset--spacing--30);width:100%}@keyframes hideAnimation{to{visibility:hidden}}.categorization .help{color:var(--wp--preset--color--charcoal-4);display:inline-block;font-size:.8rem;margin-top:0}.categorization label{display:block;font-weight:700}.categorization input{width:100%}.categorization .success-msg{background:#eff7ed;border:solid #64b450;border-width:0 5px 0 0;font-size:.8rem;margin-right:1rem;opacity:0;overflow:auto;padding:.1rem .6rem .2rem;position:relative;transition:visibility 0s,opacity .5s linear;-webkit-user-select:none;user-select:none;visibility:hidden}.categorization .success-msg.saved{animation:hideAnimation 0s ease-in 5s;animation-fill-mode:forwards;opacity:1;visibility:visible}.plugin-changelog code{font-size:var(--wp--preset--font-size--small)}.plugin-developers .contributors-list li{align-items:center;display:flex;padding-bottom:var(--wp--style--block-gap)}@media screen and (min-width:500px){.plugin-developers .contributors-list{display:flex;flex-wrap:wrap}.plugin-developers .contributors-list li{padding-bottom:unset;width:50%}}.plugin-faq dl{border-bottom:1px solid var(--wp--preset--color--light-grey-1)}.plugin-faq dt{border-top:1px solid var(--wp--preset--color--light-grey-1);cursor:pointer;padding:1rem 0}.plugin-faq dt:before{content:"\f347";float:left;font-family:dashicons;margin:0 1rem}.plugin-faq dt.open:before{content:"\f343"}.plugin-faq dt .button-link{display:inherit;text-align:inherit}.plugin-faq dt .button-link.no-focus{box-shadow:none;outline:none}.plugin-faq dt h3{color:var(--wp--custom--link--color--text);display:inline;font-size:var(--wp--preset--font-size--normal);font-weight:400;margin-bottom:0;margin-top:0!important;text-decoration:underline}.plugin-faq dt h3 button{all:inherit;max-width:calc(100% - 60px)}.plugin-faq dt h3 button:focus,.plugin-faq dt h3 button:hover{text-decoration:underline}.plugin-faq dd{display:none;margin:0 0 1rem}.no-js .plugin-faq dd{display:block}.plugin-faq dd p{margin:0}.plugin-faq dd p+p{margin-top:1rem}.image-gallery{-webkit-user-select:none;user-select:none}.image-gallery-content{position:relative}.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{border-color:var(--wp--preset--color--light-grey-1);display:none;font-size:48px;height:100%;position:absolute;top:0;transition:background .1s ease,border .1s ease;z-index:4}@media (max-width:768px){.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{font-size:3.4em}}@media (min-width:768px){.image-gallery-content .image-gallery-left-nav:hover,.image-gallery-content .image-gallery-right-nav:hover{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);opacity:.8}}.image-gallery-content .image-gallery-left-nav:before,.image-gallery-content .image-gallery-right-nav:before{font-family:dashicons;position:relative}.image-gallery-content .image-gallery-left-nav{right:0}.image-gallery-content .image-gallery-left-nav:before{content:"\f345"}.image-gallery-content .image-gallery-left-nav:hover{margin-right:-1px}.image-gallery-content .image-gallery-right-nav{left:0}.image-gallery-content .image-gallery-right-nav:before{content:"\f341"}.image-gallery-content .image-gallery-right-nav:hover{margin-left:-1px}.image-gallery-content:hover .image-gallery-left-nav,.image-gallery-content:hover .image-gallery-right-nav{display:block}.image-gallery-slides{border:1px solid #eee;line-height:0;overflow:hidden;position:relative;white-space:nowrap}.image-gallery-slide{right:0;position:absolute;top:0;width:100%}.image-gallery-slide.center{position:relative}.image-gallery-slide .image-gallery-image{margin:0}.image-gallery-slide img{display:block;margin:0 auto}.image-gallery-slide .image-gallery-description{background:var(--wp--preset--color--light-grey-2);color:var(--wp--preset--color--charcoal-1);font-size:var(--wp--preset--font-size--small);line-height:1.5;padding:10px 20px;white-space:normal}@media (max-width:768px){.image-gallery-slide .image-gallery-description{padding:8px 15px}}.image-gallery-thumbnails{background:#fff;margin-top:5px}.image-gallery-thumbnails .image-gallery-thumbnails-container{cursor:pointer;text-align:center;white-space:nowrap}.image-gallery-thumbnail{border:1px solid #eee;display:table-cell;margin-left:5px;max-height:100px;overflow:hidden}.image-gallery-thumbnail .image-gallery-image{margin:0}.image-gallery-thumbnail img{vertical-align:middle;width:100px}@media (max-width:768px){.image-gallery-thumbnail img{width:75px}}.image-gallery-thumbnail:hover{box-shadow:0 1px 8px #0000004d}.image-gallery-thumbnail.active{border:1px solid #337ab7}.image-gallery-thumbnail-label{color:#222;font-size:1em}@media (max-width:768px){.image-gallery-thumbnail-label{font-size:.8em}}.image-gallery-index{background:#0006;bottom:0;color:#fff;line-height:1;padding:10px 20px;position:absolute;left:0;z-index:4}.plugin-reviews{list-style-type:none;margin:0;padding:0}.plugin-reviews .plugin-review{border-bottom:1px solid var(--wp--preset--color--light-grey-1);margin:2rem 0 1rem;padding-bottom:1rem}.plugin-reviews .plugin-review a{text-decoration:none}.plugin-reviews .plugin-review:first-child{margin-top:0}.plugin-reviews .plugin-review .header-top{display:flex}.plugin-reviews .plugin-review .header-top .wporg-ratings{flex-shrink:0}.plugin-reviews .plugin-review .header-bottom{display:flex;margin-top:4px}.plugin-reviews .review-avatar{display:none}.plugin-reviews .review,.plugin-reviews .review-author,.plugin-reviews .wporg-ratings{display:inline-block;vertical-align:top}.plugin-reviews .review-header{margin:0 0 .5rem}.plugin-reviews .review-title{font-size:var(--wp--preset--font-size--normal);font-weight:500;margin:2px 12px 0 0!important;text-transform:inherit}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{font-size:var(--wp--preset--font-size--extra-small);line-height:1.25}.plugin-reviews .review-date,.plugin-reviews .review-replies{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);margin-right:12px}.plugin-reviews .review-replies:before{content:"•";margin-left:12px}.plugin-reviews .review-content{margin:1em 0}@media screen and (min-width:737px){.plugin-reviews .review-avatar{display:inline-block;vertical-align:top}.plugin-reviews .review-avatar .avatar{margin-left:1rem}.plugin-reviews .review{width:calc(100% - 60px - 1rem)}.plugin-reviews .review-header{margin:0}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{line-height:1}}.plugin-reviews .reviews-link{display:inline-block;font-size:var(--wp--preset--font-size--small);text-decoration:none}.plugin-reviews .reviews-link:after{content:"\f341";float:left;font-family:dashicons;padding-right:5px;position:relative;top:1px;vertical-align:text-top}.plugin-screenshots{list-style-type:none;margin:0;padding:0}.plugin-screenshots .image-gallery-content{display:table;width:100%}.plugin-screenshots .image-gallery-slides{display:table-cell;max-height:600px}.plugin-screenshots .image-gallery-image img{max-height:550px;max-width:100%}.plugin-screenshots .image-gallery-thumbnail{vertical-align:top}.plugin-screenshots .image-gallery-thumbnail img{max-height:100px}.plugin-screenshots .image-gallery-thumbnails{overflow:hidden}.download-history-stats td{text-align:left}.previous-versions{max-width:60%}@media screen and (min-width:737px){.previous-versions{height:32px;vertical-align:middle}}hr{margin:2.5rem auto}.section h1:nth-child(2),.section h2:nth-child(2),.section h3:nth-child(2),.section h4:nth-child(2),.section h5:nth-child(2),.section h6:nth-child(2){margin-top:0}.section-heading{font-family:var(--wp--preset--font-family--inter)!important;font-size:var(--wp--preset--font-size--heading-5)!important;font-style:normal;font-weight:600;line-height:var(--wp--custom--heading--level-5--typography--line-height)}.section-intro{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--small);margin-bottom:var(--wp--preset--spacing--20);margin-top:var(--wp--preset--spacing--10)}.type-plugin .plugin-notice{margin-top:0}.type-plugin .plugin-header{border-bottom:0;padding-top:var(--wp--preset--spacing--40)}.type-plugin .plugin-header:after,.type-plugin .plugin-header:before{content:"";display:table;table-layout:fixed}.type-plugin .plugin-header:after{clear:both}.type-plugin .plugin-header .entry-heading-container{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width:599px){.type-plugin .plugin-header .entry-heading-container{--wp--custom--button--spacing--padding--top:12px;--wp--custom--button--spacing--padding--bottom:12px;--wp--custom--button--spacing--padding--left:16px;--wp--custom--button--spacing--padding--right:16px}}@media screen and (min-width:700px){.type-plugin .plugin-header .entry-heading-container{flex-direction:row}}.type-plugin .plugin-header .entry-heading-container>:first-child{align-items:center;display:flex;flex:1}.type-plugin .plugin-header .plugin-actions{align-items:center;display:flex;gap:16px;margin-top:var(--wp--style--block-gap)}@media screen and (min-width:700px){.type-plugin .plugin-header .plugin-actions{margin-top:0;margin-inline-start:1rem}}.type-plugin .plugin-header .plugin-actions>.button,.type-plugin .plugin-header .plugin-actions>div{display:inline-block;text-align:center}@media screen and (max-width:34em){.type-plugin .plugin-header .plugin-actions>.button.download-button{display:none}}.type-plugin .plugin-header .plugin-title{clear:none;font-size:var(--wp--preset--font-size--heading-3);font-weight:400;line-height:var(--wp--custom--heading--level-3--typography--line-height);margin:0}.type-plugin .plugin-header .plugin-title a{color:inherit;text-decoration:none}.type-plugin .plugin-header .plugin-title a:hover{text-decoration:underline}.type-plugin .plugin-header .byline{color:var(--wp--preset--color--charcoal-4);display:block;margin-top:4px}.type-plugin .plugin-banner+.plugin-header{padding-top:0}.type-plugin .plugin-banner+.plugin-header>.notice:first-of-type{margin-top:0}.type-plugin .tabs{border-bottom:1px solid var(--wp--preset--color--light-grey-1);list-style:none;margin:0}.type-plugin .tabs li{border:1px solid #0000;display:inline-block;font-size:.9rem;margin-bottom:-1px;transition:background .2s ease}.type-plugin .tabs li a{background:#fff;border:0;color:var(--wp--preset--color--charcoal-1);display:block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 1.25rem;text-decoration:none}.type-plugin .tabs li a.active,.type-plugin .tabs li a:hover{background:var(--wp--preset--color--light-grey-2)!important}.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:1px solid var(--wp--preset--color--light-grey-1)}@media screen and (max-width:38em){.type-plugin .tabs{border-top:1px solid var(--wp--preset--color--light-grey-1)}.type-plugin .tabs li{display:block;margin-bottom:1px}.type-plugin .tabs li,.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:none;border-bottom:1px solid var(--wp--preset--color--light-grey-1)}}@media screen and (min-width:737px){.type-plugin .entry-content{float:right;padding:0;width:65%}}.type-plugin .entry-content>div,.type-plugin .entry-content>div~button{border:0;display:none}.type-plugin .entry-content ol>li>p,.type-plugin .entry-content ul>li>p{margin:0}.type-plugin .entry-content #admin{display:block!important}.type-plugin .plugin-blocks-list{list-style:none;margin-right:0;padding-right:0}.type-plugin .plugin-blocks-list .plugin-blocks-list-item{display:grid;grid-template-columns:auto 1fr;margin-bottom:var(--wp--style--block-gap)}.type-plugin .plugin-blocks-list .block-icon{border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;display:inline-block;height:3.5rem;line-height:16px;margin-left:var(--wp--style--block-gap);padding:var(--wp--style--block-gap);width:3.5rem}.type-plugin .plugin-blocks-list .block-icon.dashicons{color:inherit}.type-plugin .plugin-blocks-list .block-icon.dashicons:before{margin-right:-3px}.type-plugin .plugin-blocks-list .block-icon svg{height:16px;width:16px;fill:currentColor;margin-right:-1px}.type-plugin .plugin-blocks-list .block-title{align-self:center;font-weight:700}.type-plugin .plugin-blocks-list .has-description .block-icon{grid-row:1/span 2}.type-plugin .plugin-blocks-list .has-description .block-title{margin-bottom:.4em}.type-plugin span#description,.type-plugin span#developers,.type-plugin span#installation,.type-plugin span#reviews{position:fixed}.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-bottom:0;padding-bottom:1px}@media screen and (max-width:38em){.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced.active,.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced:hover,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers.active,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers:hover,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation.active,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation:hover,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description.active,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description:hover,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews.active,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews:hover{padding-bottom:1px!important}}.type-plugin span#section-links{display:flex;flex-flow:row wrap;margin-top:var(--wp--preset--spacing--30)}.type-plugin span#section-links .tabs{flex:1 1 auto;padding-right:0}@media screen and (max-width:38em){.type-plugin span#section-links .tabs{border:1px solid var(--wp--preset--color--light-grey-1)!important}.type-plugin span#section-links .tabs li{border:none!important}.type-plugin span#section-links{display:block}}.type-plugin #link-support{align-self:flex-end;border-bottom:1px solid var(--wp--preset--color--light-grey-1);flex:0 0 auto;font-size:.9rem}.type-plugin #link-support a{display:inline-block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 1.25rem .64rem 0}@media screen and (max-width:38em){.type-plugin #link-support{border-bottom:0;display:block;width:100%}.type-plugin #link-support a{padding-left:1.25rem}}.type-plugin span#developers:target~.entry-content #tab-changelog,.type-plugin span#developers:target~.entry-content #tab-developers,.type-plugin span#developers:target~.entry-content #tab-developers .plugin-development,.type-plugin span#developers:target~.entry-content #tab-developers~button,.type-plugin span#installation:target~.entry-content #tab-installation,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #blocks,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #faq,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #screenshots,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-description,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers~button,.type-plugin span#reviews:target~.entry-content #tab-reviews{display:block}.type-plugin span#developers:target~.entry-content #tab-developers .plugin-contributors,.type-plugin span#installation:target~.entry-meta .plugin-contributors,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers .plugin-development,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-donate,.type-plugin span#reviews:target~.entry-meta .plugin-meta,.type-plugin span#reviews:target~.entry-meta .plugin-support{display:none}@media screen and (min-width:737px){.type-plugin .entry-content,.type-plugin .entry-meta{padding-right:0;padding-left:0}.type-plugin .entry-meta{float:left;width:30%}}.type-plugin .plugin-danger-zone h4{margin-top:var(--wp--preset--spacing--60)}.plugin-releases-listing{border-collapse:collapse;width:100%}.plugin-releases-listing tbody td:nth-child(4) div{font-size:14px}.plugin-releases-listing-actions{display:flex;flex-direction:column;gap:8px}@media screen and (min-width:34em){.plugin-releases-listing-actions{flex-direction:row}}.plugin-adopt-me{background:#e6f4fa;margin-top:36px;padding:12px}.plugin-adopt-me .widget-title{margin-top:0}.plugin-adopt-me p{margin-bottom:0}.widget.plugin-categorization{margin-top:var(--wp--style--block-gap)}.widget.plugin-categorization .widget-head h2{font-size:var(--wp--preset--font-size--heading-4);margin-bottom:.2rem;margin-top:0}.widget.plugin-categorization .widget-head a{font-size:var(--wp--preset--font-size--small)}.widget.plugin-categorization .widget-head a[href=""]{display:none}.widget.plugin-categorization p{font-size:var(--wp--preset--font-size--small);margin-top:.5rem}.widget.plugin-categorization~.plugin-meta li:first-child{border-top:1px solid var(--wp--preset--color--light-grey-1)}.committer-list,.support-rep-list{list-style:none;margin:0;padding:0}.committer-list li,.support-rep-list li{padding-bottom:.5rem}.committer-list li .remove,.support-rep-list li .remove{color:red;visibility:hidden}.committer-list li:hover .remove,.support-rep-list li:hover .remove{visibility:visible}.committer-list .avatar,.support-rep-list .avatar{float:right;margin-left:10px}.committer-list .spinner,.support-rep-list .spinner{position:relative}.committer-list .spinner:after,.support-rep-list .spinner:after{background:url(/wp-admin/images/spinner.gif) no-repeat 50%;background-size:20px 20px;content:"";display:block;height:20px;margin:-10px 0 0 -10px;position:absolute;left:-50%;top:50%;transform:translateZ(0);width:20px}@media (min-resolution:120dpi),print{.committer-list .spinner:after,.support-rep-list .spinner:after{background-image:url(/wp-admin/images/spinner-2x.gif)}}.committer-list .new,.support-rep-list .new{margin-top:var(--wp--style--block-gap)}.plugin-contributors.read-more{border-bottom:1px solid var(--wp--preset--color--light-grey-1);max-height:200px;overflow:hidden;padding-bottom:1px}.plugin-contributors.read-more.toggled{max-height:none}.no-js .plugin-contributors.read-more{max-height:none;overflow:auto}.contributors-list{list-style-type:none;margin:0;padding:0}.contributors-list li{align-items:center;display:flex;margin-bottom:1rem}.contributors-list .avatar{float:right;margin-left:10px}.plugin-meta{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-meta ul{list-style-type:none;margin:0;padding:0}.plugin-meta li{border-top:1px solid var(--wp--preset--color--light-grey-1);display:inline-block;padding:.5rem 0;position:relative;width:100%}.plugin-meta li strong{float:left;font-weight:500}.plugin-meta li .plugin-admin{font-size:var(--wp--preset--font-size--normal);font-weight:400}.plugin-meta li:first-child{border-top:0}.plugin-meta .languages,.plugin-meta .tags{float:left;text-align:left}.plugin-meta .tags{width:60%}.plugin-meta .languages button{font-size:var(--wp--preset--font-size--small);outline:revert}.plugin-meta .languages .popover{margin-top:8px}.plugin-meta .languages .popover-trigger{color:var(--wp--custom--link--color--text);text-decoration:underline}.plugin-meta .languages .popover-trigger:hover{text-decoration:underline}.plugin-meta [rel=tag]{background:var(--wp--preset--color--blueberry-4);border-radius:2px;color:var(--wp--preset--color--charcoal-1);display:inline-block;font-size:var(--wp--preset--font-size--extra-small);margin:2px;max-width:95%;overflow:hidden;padding:3px 6px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:auto}.plugin-meta [rel=tag]:hover{text-decoration:underline}.popover{background-color:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;box-shadow:0 2px 10px #0000001a;display:none;right:0;margin-top:10px;max-width:300px;padding:1em 1em 2em;position:absolute;width:100%;z-index:100}.popover.is-top-right{right:auto;left:0}.popover.is-visible{display:block}.popover .popover-close{bottom:.5em;color:var(--wp--custom--link--color--text);font-size:small;position:absolute;left:.6em}.popover .popover-close:active,.popover .popover-close:focus,.popover .popover-close:hover{text-decoration:underline}.popover .popover-arrow{border:10px solid #0000;border-bottom:10px solid #ccc;border-top:none;height:0;position:absolute;left:20px;top:-10px;width:0;z-index:-1}.popover .popover-arrow:after{border:10px solid #0000;border-bottom:10px solid #fff;border-top:none;content:"";right:-10px;position:absolute;top:2px}.popover .popover-inner{text-align:right}.popover .popover-inner p:first-child{margin-top:0}.popover .popover-inner p:last-child{margin-bottom:0}.plugin-support .counter-container{margin-bottom:1rem;position:relative}.plugin-support .counter-back,.plugin-support .counter-bar{display:inline-block;height:30px;vertical-align:middle}.plugin-support .counter-back{background-color:var(--wp--preset--color--light-grey-2);width:100%}.plugin-support .counter-bar{background-color:var(--wp--preset--color--acid-green-2);display:block}.plugin-support .counter-count{font-size:var(--wp--preset--font-size--extra-small);right:8px;position:absolute;top:8px;width:100%;width:calc(100% - 8px)}@media screen and (min-width:737px){.plugin-support .counter-count{top:5px}}.home .widget,.widget-area.home .widget{display:inline-block;font-size:var(--wp--preset--font-size--small);margin:0;margin:var(--wp--style--block-gap);vertical-align:top;width:auto}@media screen and (min-width:737px){.home .widget,.widget-area.home .widget{margin:0;width:30%}.home .widget:first-child,.widget-area.home .widget:first-child{margin-left:5%}.home .widget:last-child,.widget-area.home .widget:last-child{margin-right:5%}}.home .widget select,.widget-area.home .widget select{max-width:100%}.entry-meta .widget-title{font-size:var(--wp--preset--font-size--heading-4)}body.single.single-plugin .entry-meta{font-size:var(--wp--preset--font-size--normal)}.widget-area{margin:0 auto;padding:var(--wp--preset--spacing--40) 0}.widget-area .widget-title{font-size:var(--wp--preset--font-size--heading-1);font-weight:var(--wp--custom--heading--typography--font-weight);margin-top:var(--wp--preset--spacing--50)}.widget-area .textwidget{text-wrap:pretty} \ No newline at end of file +@charset "UTF-8";.avatar{border-radius:50%;vertical-align:middle}.wp-block-wporg-language-suggest>p{margin:0}.block-validator>details summary{padding:var(--wp--style--block-gap) 0}.block-validator .block-validator__plugin-form label{display:block;margin-bottom:.8em}.block-validator .block-validator__plugin-input-container{display:flex;max-width:34rem}.block-validator .block-validator__plugin-input{flex:1}.block-validator .block-validator__plugin-submit{flex:0;margin-right:4px}@media (max-width:36rem){.block-validator .block-validator__plugin-submit{width:100%}.block-validator .block-validator__plugin-input-container{display:block}.block-validator .block-validator__plugin-input{width:100%}.block-validator .block-validator__plugin-submit{margin-right:0;margin-top:var(--wp--style--block-gap)}}.block-validator .notice details,.block-validator .notice p{font-size:var(--wp--preset--font-size--normal);margin:var(--wp--style--block-gap) 0}.block-validator .notice details p{font-size:var(--wp--preset--font-size--small);margin-right:1rem}.block-validator .notice summary{display:list-item}.block-validator figure{border:1px solid #aaa;display:inline-block;padding:1em}.block-validator .test-screenshot{text-align:center}.block-validator .plugin-upload-form-controls{align-items:center;display:flex;gap:4px}.block-validator .plugin-upload-form-controls>label{border:1px solid var(--wp--custom--form--border--color);border-radius:var(--wp--custom--form--border--radius);cursor:pointer;min-width:200px;padding:4px 8px}.notice{background:#fff;border-right:4px solid #fff;box-shadow:0 1px 1px 0 #0000001a;font-size:var(--wp--preset--font-size--small);margin:var(--wp--style--block-gap) 0;padding:1px 12px}.notice p,.notice ul{margin:.5em 0;padding:2px}.notice pre{white-space:pre-wrap}.notice ul{list-style:none;margin:.5em}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-right-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-right-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-right-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-right-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.notice.hidden{display:none}.plugin-upload-form.hidden{display:none}.plugin-upload-form fieldset{border:none;margin:0;padding:0}.plugin-upload-form legend{margin:1rem 0}.plugin-upload-form .category-checklist{list-style-type:none;margin:0 0 2rem}.plugin-upload-form .category-checklist li{float:right;padding:.5rem 0;width:50%}@media screen and (min-width:48em){.plugin-upload-form .category-checklist li{padding:0}.plugin-upload-form .category-checklist label{font-size:var(--wp--preset--font-size--small)}.plugin-upload-form label.button{line-height:1.8}}.plugin-upload-form .plugin-file{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px;z-index:-1}.plugin-queue-message code{font-size:1em}.plugin-queue-message dialog.slug-change input[type=text]{font-family:monospace;font-size:1.2em;width:20em}:where(main) a:where(:not(.wp-element-button,.wp-block-wporg-link-wrapper)):focus,:where(main) button:where(:not([class*=wp-block-button])):focus{border-radius:2px;box-shadow:0 0 0 1.5px currentColor;outline:none}.wporg-filter-bar{--wporg--filter-bar--gap:20px;--wporg--filter-bar--color:#40464d;--wporg--filter-bar--active--background-color:var(--wp--custom--button--color--background);--wporg--filter-bar--focus--border-color:var(--wp--custom--button--focus--border--color);margin:var(--wp--style--block-gap) 0}.wporg-filter-bar .wporg-query-filter__toggle.is-active,.wporg-filter-bar .wporg-query-filter__toggle:active,.wporg-filter-bar .wporg-query-filter__toggle:focus{background-color:var(--wporg--filter-bar--active--background-color);color:var(--wp--custom--button--color--text)}.wporg-filter-bar .wporg-filter-bar__navigation{flex-grow:1;margin-bottom:var(--wporg--filter-bar--gap)}.wporg-filter-bar .wporg-filter-bar__navigation ul{display:inline-block;font-size:13px;line-height:1.538;list-style:none;margin:0;padding-right:0}.wporg-filter-bar .wporg-filter-bar__navigation ul li{display:inline-block}.wporg-filter-bar .wporg-filter-bar__navigation ul li+li{margin-right:8px}.wporg-filter-bar .wporg-filter-bar__navigation ul a{border-radius:2px;color:var(--wporg--filter-bar--color);display:block;padding:8px 12px;text-decoration:none}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a:hover{text-decoration:underline}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus-visible{box-shadow:none;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active{background-color:var(--wporg--filter-bar--active--background-color);color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:hover{color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus-visible{box-shadow:inset 0 0 0 1.5px #fff;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}@media screen and (min-width:737px){.wporg-filter-bar{align-items:center;display:flex;flex-wrap:wrap;gap:var(--wporg--filter-bar--gap);justify-content:space-between;width:100%}.wporg-filter-bar .wporg-filter-bar__navigation{margin-bottom:0}}.wp-block-search__inside-wrapper{background:var(--wp--preset--color--light-grey-2);border:none}.button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button{background-color:var(--wp--custom--button--color--background);border:0;border-radius:var(--wp--custom--button--border--radius);color:var(--wp--custom--button--color--text);cursor:pointer;opacity:1;padding:calc(var(--wp--custom--button--small--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--left) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--right) + var(--wp--custom--button--border--width));vertical-align:middle}.button.button-large{padding:calc(var(--wp--custom--button--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--left) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--right) + var(--wp--custom--button--border--width))}input+button.button,select+button.button{margin-top:-3px}.button.disabled{cursor:not-allowed;opacity:.6}.wp-block-post-content a.button{text-decoration:none}.wp-block-button__link{width:auto}pre{background-color:#f7f7f7;border:1px solid var(--wp--preset--color--light-grey-1);overflow:scroll;padding:20px}code,pre{border-radius:2px}code{background:var(--wp--preset--color--light-grey-2);display:inline-block;line-height:var(--wp--custom--body--extra-small--typography--line-height);max-width:100%;padding-inline-end:3px;padding-inline-start:3px}dialog{border:0;box-shadow:-6px 6px 6px #0003;min-height:50%;min-width:30%}@media (min-width:1280px){dialog{max-width:55%}}dialog::backdrop{background:#000;opacity:.5}dialog .close{color:inherit;cursor:pointer;position:absolute;left:1em;text-decoration:none!important;top:1em}.plugin-card{display:flex;flex-direction:column;height:100%;justify-content:space-between}.plugin-card .entry{display:inline-block;vertical-align:top}.plugin-card .entry-title{display:block;display:-webkit-box;font-size:var(--wp--preset--font-size--heading-5);font-weight:500;line-height:1.3;margin-bottom:2px!important;max-height:2.6em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.plugin-card .entry-title a{display:block;text-decoration:none}.plugin-card .entry-title a:focus{box-shadow:none}.plugin-card .entry-excerpt{clear:both;font-size:var(--wp--preset--font-size--small)}.plugin-card .entry-excerpt p{margin:0}.plugin-card footer{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-card footer span{color:var(--wp--preset--color--charcoal-4);display:inline-block;line-height:var(--wp--preset--font-size--normal);overflow:hidden}.plugin-card footer span.plugin-author{width:100%}.plugin-card footer span.plugin-author span{color:var(--wp--preset--color--charcoal-1)}.plugin-card footer span.plugin-author path{fill:var(--wp--preset--color--charcoal-1)}.plugin-card footer span svg{height:24px;vertical-align:bottom;width:24px}.plugin-card footer span svg path{fill:var(--wp--preset--color--charcoal-4)}.plugin-card footer span.active-installs{min-width:48%}.plugin-cards{cursor:pointer}.plugin-cards .is-style-cards-grid li:hover{background-color:#fff!important;border:1px solid var(--wp--preset--color--charcoal-1)!important}.plugin-cards .is-style-cards-grid li:focus-within{border-color:#0000;border-radius:2px;box-shadow:0 0 0 1.5px var(--wp--custom--link--color--text)}@media screen and (max-width:737px){.plugin-cards .is-style-cards-grid{grid-template-columns:100%}}.entry-thumbnail{display:none;margin-bottom:var(--wp--style--block-gap);margin-left:var(--wp--style--block-gap);max-width:80px}.entry-thumbnail .plugin-icon{background-size:cover;border-radius:var(--wp--custom--button--border--radius);display:block;height:80px;width:80px}@media screen and (min-width:21em){.entry-thumbnail{display:inline-block;float:right;vertical-align:top}}.single .entry-thumbnail{display:none;float:right;height:96px;margin-bottom:0;max-width:96px}@media screen and (min-width:26em){.single .entry-thumbnail{display:block}}.single .entry-thumbnail .plugin-icon{background-size:contain!important;height:96px!important;width:96px!important}.plugin-rating{line-height:1;margin:0 0 8px 10px}.plugin-rating .wporg-ratings{display:inline-block;margin-left:5px}.plugin-rating .rating-count{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);vertical-align:text-bottom}.plugin-rating .rating-count a{color:inherit;cursor:hand;text-decoration:none}[class*=dashicons-star-]{color:var(--wp--preset--color--pomegrade-1)}.rtl .dashicons-star-half{transform:rotateY(-180deg)}#main .plugin-section{margin:0 auto var(--wp--preset--spacing--60)}#main .plugin-section:last-of-type{margin-bottom:0}#main .plugin-section .section-header{align-items:center;column-gap:10px;display:flex;justify-content:space-between;margin-bottom:var(--wp--style--block-gap)}#main .plugin-section .section-header>h2{margin-bottom:0}#main .plugin-section .section-link{align-self:center;flex:0 0 auto;text-decoration:underline}.pagination .nav-links{margin-top:var(--wp--style--block-gap);padding-top:var(--wp--style--block-gap);text-align:center}.pagination .nav-links a{text-decoration:none}.pagination .nav-links .page-numbers{cursor:pointer;display:inline-block;min-width:2em;padding:8px;text-align:center}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:auto;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{display:inline-block;font-size:medium;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{font-weight:700}.pagination .nav-links span.page-numbers.current{text-decoration:underline}@keyframes favme-anime{0%{font-size:var(--wp--preset--font-size--large);opacity:1;-webkit-text-stroke-color:#0000}25%{color:#fff;font-size:var(--wp--preset--font-size--small);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}75%{color:#fff;font-size:var(--wp--preset--font-size--large);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}to{font-size:var(--wp--preset--font-size--normal);opacity:1;-webkit-text-stroke-color:#0000}}.plugin-favorite{height:calc(var(--wp--custom--button--spacing--padding--top)*2 + var(--wp--preset--font-size--normal)*2);text-align:center;vertical-align:top;width:36px}.plugin-favorite .plugin-favorite-heart{align-items:center;background:none;border:0;border-radius:0;box-shadow:none;color:#cbcdce;cursor:pointer;display:flex;font-size:var(--wp--preset--font-size--large);height:100%;justify-content:center;line-height:1;margin:0;outline:none;padding:0;text-decoration:none}.plugin-favorite .plugin-favorite-heart.favorited{color:#dc3232}.plugin-favorite .plugin-favorite-heart:focus,.plugin-favorite .plugin-favorite-heart:hover{color:var(----wp--preset--color--charcoal-2);text-decoration:none}.plugin-favorite .plugin-favorite-heart:after{content:"\f487";font-family:dashicons;vertical-align:top}.plugin-banner img{aspect-ratio:3.089;border-radius:var(--wp--custom--button--border--radius);display:block;margin:0 auto var(--wp--preset--spacing--30);width:100%}@keyframes hideAnimation{to{visibility:hidden}}.categorization .help{color:var(--wp--preset--color--charcoal-4);display:inline-block;font-size:.8rem;margin-top:0}.categorization label{display:block;font-weight:700}.categorization input{width:100%}.categorization .success-msg{background:#eff7ed;border:solid #64b450;border-width:0 5px 0 0;font-size:.8rem;margin-right:1rem;opacity:0;overflow:auto;padding:.1rem .6rem .2rem;position:relative;transition:visibility 0s,opacity .5s linear;-webkit-user-select:none;user-select:none;visibility:hidden}.categorization .success-msg.saved{animation:hideAnimation 0s ease-in 5s;animation-fill-mode:forwards;opacity:1;visibility:visible}.plugin-changelog code{font-size:var(--wp--preset--font-size--small)}.plugin-developers .contributors-list li{align-items:center;display:flex;padding-bottom:var(--wp--style--block-gap)}@media screen and (min-width:500px){.plugin-developers .contributors-list{display:flex;flex-wrap:wrap}.plugin-developers .contributors-list li{padding-bottom:unset;width:50%}}.plugin-faq dl{border-bottom:1px solid var(--wp--preset--color--light-grey-1)}.plugin-faq dt{border-top:1px solid var(--wp--preset--color--light-grey-1);cursor:pointer;padding:1rem 0}.plugin-faq dt:before{content:"\f347";float:left;font-family:dashicons;margin:0 1rem}.plugin-faq dt.open:before{content:"\f343"}.plugin-faq dt .button-link{display:inherit;text-align:inherit}.plugin-faq dt .button-link.no-focus{box-shadow:none;outline:none}.plugin-faq dt h3{color:var(--wp--custom--link--color--text);display:inline;font-size:var(--wp--preset--font-size--normal);font-weight:400;margin-bottom:0;margin-top:0!important;text-decoration:underline}.plugin-faq dt h3 button{all:inherit;max-width:calc(100% - 60px)}.plugin-faq dt h3 button:focus,.plugin-faq dt h3 button:hover{text-decoration:underline}.plugin-faq dd{display:none;margin:0 0 1rem}.no-js .plugin-faq dd{display:block}.plugin-faq dd p{margin:0}.plugin-faq dd p+p{margin-top:1rem}.image-gallery{-webkit-user-select:none;user-select:none}.image-gallery-content{position:relative}.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{border-color:var(--wp--preset--color--light-grey-1);display:none;font-size:48px;height:100%;position:absolute;top:0;transition:background .1s ease,border .1s ease;z-index:4}@media (max-width:768px){.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{font-size:3.4em}}@media (min-width:768px){.image-gallery-content .image-gallery-left-nav:hover,.image-gallery-content .image-gallery-right-nav:hover{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);opacity:.8}}.image-gallery-content .image-gallery-left-nav:before,.image-gallery-content .image-gallery-right-nav:before{font-family:dashicons;position:relative}.image-gallery-content .image-gallery-left-nav{right:0}.image-gallery-content .image-gallery-left-nav:before{content:"\f345"}.image-gallery-content .image-gallery-left-nav:hover{margin-right:-1px}.image-gallery-content .image-gallery-right-nav{left:0}.image-gallery-content .image-gallery-right-nav:before{content:"\f341"}.image-gallery-content .image-gallery-right-nav:hover{margin-left:-1px}.image-gallery-content:hover .image-gallery-left-nav,.image-gallery-content:hover .image-gallery-right-nav{display:block}.image-gallery-slides{border:1px solid #eee;line-height:0;overflow:hidden;position:relative;white-space:nowrap}.image-gallery-slide{right:0;position:absolute;top:0;width:100%}.image-gallery-slide.center{position:relative}.image-gallery-slide .image-gallery-image{margin:0}.image-gallery-slide img{display:block;margin:0 auto}.image-gallery-slide .image-gallery-description{background:var(--wp--preset--color--light-grey-2);color:var(--wp--preset--color--charcoal-1);font-size:var(--wp--preset--font-size--small);line-height:1.5;padding:10px 20px;white-space:normal}@media (max-width:768px){.image-gallery-slide .image-gallery-description{padding:8px 15px}}.image-gallery-thumbnails{background:#fff;margin-top:5px}.image-gallery-thumbnails .image-gallery-thumbnails-container{cursor:pointer;text-align:center;white-space:nowrap}.image-gallery-thumbnail{border:1px solid #eee;display:table-cell;margin-left:5px;max-height:100px;overflow:hidden}.image-gallery-thumbnail .image-gallery-image{margin:0}.image-gallery-thumbnail img{vertical-align:middle;width:100px}@media (max-width:768px){.image-gallery-thumbnail img{width:75px}}.image-gallery-thumbnail:hover{box-shadow:0 1px 8px #0000004d}.image-gallery-thumbnail.active{border:1px solid #337ab7}.image-gallery-thumbnail-label{color:#222;font-size:1em}@media (max-width:768px){.image-gallery-thumbnail-label{font-size:.8em}}.image-gallery-index{background:#0006;bottom:0;color:#fff;line-height:1;padding:10px 20px;position:absolute;left:0;z-index:4}.plugin-reviews{list-style-type:none;margin:0;padding:0}.plugin-reviews .plugin-review{border-bottom:1px solid var(--wp--preset--color--light-grey-1);margin:2rem 0 1rem;padding-bottom:1rem}.plugin-reviews .plugin-review a{text-decoration:none}.plugin-reviews .plugin-review:first-child{margin-top:0}.plugin-reviews .plugin-review .header-top{display:flex}.plugin-reviews .plugin-review .header-top .wporg-ratings{flex-shrink:0}.plugin-reviews .plugin-review .header-bottom{display:flex;margin-top:4px}.plugin-reviews .review-avatar{display:none}.plugin-reviews .review,.plugin-reviews .review-author,.plugin-reviews .wporg-ratings{display:inline-block;vertical-align:top}.plugin-reviews .review-header{margin:0 0 .5rem}.plugin-reviews .review-title{font-size:var(--wp--preset--font-size--normal);font-weight:500;margin:2px 12px 0 0!important;text-transform:inherit}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{font-size:var(--wp--preset--font-size--extra-small);line-height:1.25}.plugin-reviews .review-date,.plugin-reviews .review-replies{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);margin-right:12px}.plugin-reviews .review-replies:before{content:"•";margin-left:12px}.plugin-reviews .review-content{margin:1em 0}@media screen and (min-width:737px){.plugin-reviews .review-avatar{display:inline-block;vertical-align:top}.plugin-reviews .review-avatar .avatar{margin-left:1rem}.plugin-reviews .review{width:calc(100% - 60px - 1rem)}.plugin-reviews .review-header{margin:0}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{line-height:1}}.plugin-reviews .reviews-link{display:inline-block;font-size:var(--wp--preset--font-size--small);text-decoration:none}.plugin-reviews .reviews-link:after{content:"\f341";float:left;font-family:dashicons;padding-right:5px;position:relative;top:1px;vertical-align:text-top}.plugin-screenshots{list-style-type:none;margin:0;padding:0}.plugin-screenshots .image-gallery-content{display:table;width:100%}.plugin-screenshots .image-gallery-slides{display:table-cell;max-height:600px}.plugin-screenshots .image-gallery-image img{max-height:550px;max-width:100%}.plugin-screenshots .image-gallery-thumbnail{vertical-align:top}.plugin-screenshots .image-gallery-thumbnail img{max-height:100px}.plugin-screenshots .image-gallery-thumbnails{overflow:hidden}.download-history-stats td{text-align:left}.previous-versions{max-width:60%}@media screen and (min-width:737px){.previous-versions{height:32px;vertical-align:middle}}hr{margin:2.5rem auto}.section h1:nth-child(2),.section h2:nth-child(2),.section h3:nth-child(2),.section h4:nth-child(2),.section h5:nth-child(2),.section h6:nth-child(2){margin-top:0}.section-heading{font-family:var(--wp--preset--font-family--inter)!important;font-size:var(--wp--preset--font-size--heading-5)!important;font-style:normal;font-weight:600;line-height:var(--wp--custom--heading--level-5--typography--line-height)}.section-intro{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--small);margin-bottom:var(--wp--preset--spacing--20);margin-top:var(--wp--preset--spacing--10)}.wporg-spinner{--local-size:16px;--spinner-color:var(--wp--custom--spinner--color,var(--wp--preset--color--blueberry-1,currentColor));--background-stroke-color:#ddd;background-color:initial;display:inline-block;height:var(--local-size);position:relative;width:var(--local-size)}.wporg-spinner:before{border:1.5px solid var(--background-stroke-color);border-radius:50%}.wporg-spinner:after,.wporg-spinner:before{box-sizing:border-box;content:"";display:block;height:100%;width:100%}.wporg-spinner:after{animation:wporg-spinner-rotate 1.4s linear infinite;border-bottom:1.5px solid #0000;border-right:1.5px solid #0000;border-radius:50%;border-left:1.5px solid #0000;border-left-color:var(--spinner-color);border-top:1.5px solid #0000;border-top-color:var(--spinner-color);right:0;position:absolute;top:0;transform-origin:center}@keyframes wporg-spinner-rotate{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}.type-plugin .plugin-notice{margin-top:0}.type-plugin .plugin-header{border-bottom:0;padding-top:var(--wp--preset--spacing--40)}.type-plugin .plugin-header:after,.type-plugin .plugin-header:before{content:"";display:table;table-layout:fixed}.type-plugin .plugin-header:after{clear:both}.type-plugin .plugin-header .entry-heading-container{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width:599px){.type-plugin .plugin-header .entry-heading-container{--wp--custom--button--spacing--padding--top:12px;--wp--custom--button--spacing--padding--bottom:12px;--wp--custom--button--spacing--padding--left:16px;--wp--custom--button--spacing--padding--right:16px}}@media screen and (min-width:700px){.type-plugin .plugin-header .entry-heading-container{flex-direction:row}}.type-plugin .plugin-header .entry-heading-container>:first-child{align-items:center;display:flex;flex:1}.type-plugin .plugin-header .plugin-actions{align-items:center;display:flex;gap:16px;margin-top:var(--wp--style--block-gap)}@media screen and (min-width:700px){.type-plugin .plugin-header .plugin-actions{margin-top:0;margin-inline-start:1rem}}.type-plugin .plugin-header .plugin-actions>.button,.type-plugin .plugin-header .plugin-actions>div{display:inline-block;text-align:center}@media screen and (max-width:34em){.type-plugin .plugin-header .plugin-actions>.button.download-button{display:none}}.type-plugin .plugin-header .plugin-title{clear:none;font-size:var(--wp--preset--font-size--heading-3);font-weight:400;line-height:var(--wp--custom--heading--level-3--typography--line-height);margin:0}.type-plugin .plugin-header .plugin-title a{color:inherit;text-decoration:none}.type-plugin .plugin-header .plugin-title a:hover{text-decoration:underline}.type-plugin .plugin-header .byline{color:var(--wp--preset--color--charcoal-4);display:block;margin-top:4px}.type-plugin .plugin-banner+.plugin-header{padding-top:0}.type-plugin .plugin-banner+.plugin-header>.notice:first-of-type{margin-top:0}.type-plugin .tabs{border-bottom:1px solid var(--wp--preset--color--light-grey-1);list-style:none;margin:0}.type-plugin .tabs li{border:1px solid #0000;display:inline-block;font-size:.9rem;margin-bottom:-1px;transition:background .2s ease}.type-plugin .tabs li a{background:#fff;border:0;color:var(--wp--preset--color--charcoal-1);display:block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 1.25rem;text-decoration:none}.type-plugin .tabs li a.active,.type-plugin .tabs li a:hover{background:var(--wp--preset--color--light-grey-2)!important}.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:1px solid var(--wp--preset--color--light-grey-1)}@media screen and (max-width:38em){.type-plugin .tabs{border-top:1px solid var(--wp--preset--color--light-grey-1)}.type-plugin .tabs li{display:block;margin-bottom:1px}.type-plugin .tabs li,.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:none;border-bottom:1px solid var(--wp--preset--color--light-grey-1)}}@media screen and (min-width:737px){.type-plugin .entry-content{float:right;padding:0;width:65%}}.type-plugin .entry-content>div,.type-plugin .entry-content>div~button{border:0;display:none}.type-plugin .entry-content ol>li>p,.type-plugin .entry-content ul>li>p{margin:0}.type-plugin .entry-content #admin{display:block!important}.type-plugin .plugin-blocks-list{list-style:none;margin-right:0;padding-right:0}.type-plugin .plugin-blocks-list .plugin-blocks-list-item{display:grid;grid-template-columns:auto 1fr;margin-bottom:var(--wp--style--block-gap)}.type-plugin .plugin-blocks-list .block-icon{border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;display:inline-block;height:3.5rem;line-height:16px;margin-left:var(--wp--style--block-gap);padding:var(--wp--style--block-gap);width:3.5rem}.type-plugin .plugin-blocks-list .block-icon.dashicons{color:inherit}.type-plugin .plugin-blocks-list .block-icon.dashicons:before{margin-right:-3px}.type-plugin .plugin-blocks-list .block-icon svg{height:16px;width:16px;fill:currentColor;margin-right:-1px}.type-plugin .plugin-blocks-list .block-title{align-self:center;font-weight:700}.type-plugin .plugin-blocks-list .has-description .block-icon{grid-row:1/span 2}.type-plugin .plugin-blocks-list .has-description .block-title{margin-bottom:.4em}.type-plugin span#description,.type-plugin span#developers,.type-plugin span#installation,.type-plugin span#releases,.type-plugin span#reviews{position:fixed}.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation,.type-plugin span#releases:target~#section-links .tabs li#tablink-releases,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-bottom:0;padding-bottom:1px}@media screen and (max-width:38em){.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced.active,.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced:hover,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers.active,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers:hover,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation.active,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation:hover,.type-plugin span#releases:target~#section-links .tabs li#tablink-releases.active,.type-plugin span#releases:target~#section-links .tabs li#tablink-releases:hover,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description.active,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description:hover,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews.active,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews:hover{padding-bottom:1px!important}}.type-plugin span#section-links{display:flex;flex-flow:row wrap;margin-top:var(--wp--preset--spacing--30)}.type-plugin span#section-links .tabs{flex:1 1 auto;padding-right:0}@media screen and (max-width:38em){.type-plugin span#section-links .tabs{border:1px solid var(--wp--preset--color--light-grey-1)!important}.type-plugin span#section-links .tabs li{border:none!important}.type-plugin span#section-links{display:block}}.type-plugin #link-support{align-self:flex-end;border-bottom:1px solid var(--wp--preset--color--light-grey-1);flex:0 0 auto;font-size:.9rem}.type-plugin #link-support a{display:inline-block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 1.25rem .64rem 0}@media screen and (max-width:38em){.type-plugin #link-support{border-bottom:0;display:block;width:100%}.type-plugin #link-support a{padding-left:1.25rem}}.type-plugin span#developers:target~.entry-content #tab-changelog,.type-plugin span#developers:target~.entry-content #tab-developers,.type-plugin span#developers:target~.entry-content #tab-developers .plugin-development,.type-plugin span#developers:target~.entry-content #tab-developers~button,.type-plugin span#installation:target~.entry-content #tab-installation,.type-plugin span#releases:target~.entry-content #tab-releases,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #blocks,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #faq,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #screenshots,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #tab-description,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #tab-developers,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #tab-developers~button,.type-plugin span#reviews:target~.entry-content #tab-reviews{display:block}.type-plugin span#developers:target~.entry-content #tab-developers .plugin-contributors,.type-plugin span#installation:target~.entry-meta .plugin-contributors,.type-plugin span#releases:target~.entry-meta,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers .plugin-development,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-donate,.type-plugin span#reviews:target~.entry-meta .plugin-meta,.type-plugin span#reviews:target~.entry-meta .plugin-support{display:none}.type-plugin span#releases:target~.entry-content{width:100%}@media screen and (min-width:737px){.type-plugin .entry-content,.type-plugin .entry-meta{padding-right:0;padding-left:0}.type-plugin .entry-meta{float:left;width:30%}}.type-plugin .plugin-danger-zone h4{margin-top:var(--wp--preset--spacing--60)}.plugin-releases-listing{border-collapse:collapse;width:100%}.plugin-releases-listing tbody td:nth-child(4) div{font-size:14px}.plugin-releases-listing-actions{display:flex;flex-direction:column;gap:8px}@media screen and (min-width:34em){.plugin-releases-listing-actions{flex-direction:row}}.plugin-adopt-me{background:#e6f4fa;margin-top:36px;padding:12px}.plugin-adopt-me .widget-title{margin-top:0}.plugin-adopt-me p{margin-bottom:0}.widget.plugin-categorization{margin-top:var(--wp--style--block-gap)}.widget.plugin-categorization .widget-head h2{font-size:var(--wp--preset--font-size--heading-4);margin-bottom:.2rem;margin-top:0}.widget.plugin-categorization .widget-head a{font-size:var(--wp--preset--font-size--small)}.widget.plugin-categorization .widget-head a[href=""]{display:none}.widget.plugin-categorization p{font-size:var(--wp--preset--font-size--small);margin-top:.5rem}.widget.plugin-categorization~.plugin-meta li:first-child{border-top:1px solid var(--wp--preset--color--light-grey-1)}.committer-list,.support-rep-list{list-style:none;margin:0;padding:0}.committer-list li,.support-rep-list li{padding-bottom:.5rem}.committer-list li .remove,.support-rep-list li .remove{color:red;visibility:hidden}.committer-list li:hover .remove,.support-rep-list li:hover .remove{visibility:visible}.committer-list .avatar,.support-rep-list .avatar{float:right;margin-left:10px}.committer-list .spinner,.support-rep-list .spinner{position:relative}.committer-list .spinner:after,.support-rep-list .spinner:after{background:url(/wp-admin/images/spinner.gif) no-repeat 50%;background-size:20px 20px;content:"";display:block;height:20px;margin:-10px 0 0 -10px;position:absolute;left:-50%;top:50%;transform:translateZ(0);width:20px}@media (min-resolution:120dpi),print{.committer-list .spinner:after,.support-rep-list .spinner:after{background-image:url(/wp-admin/images/spinner-2x.gif)}}.committer-list .new,.support-rep-list .new{margin-top:var(--wp--style--block-gap)}.plugin-contributors.read-more{border-bottom:1px solid var(--wp--preset--color--light-grey-1);max-height:200px;overflow:hidden;padding-bottom:1px}.plugin-contributors.read-more.toggled{max-height:none}.no-js .plugin-contributors.read-more{max-height:none;overflow:auto}.contributors-list{list-style-type:none;margin:0;padding:0}.contributors-list li{align-items:center;display:flex;margin-bottom:1rem}.contributors-list .avatar{float:right;margin-left:10px}.plugin-meta{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-meta ul{list-style-type:none;margin:0;padding:0}.plugin-meta li{border-top:1px solid var(--wp--preset--color--light-grey-1);display:inline-block;padding:.5rem 0;position:relative;width:100%}.plugin-meta li strong{float:left;font-weight:500}.plugin-meta li .plugin-admin{font-size:var(--wp--preset--font-size--normal);font-weight:400}.plugin-meta li:first-child{border-top:0}.plugin-meta .languages,.plugin-meta .tags{float:left;text-align:left}.plugin-meta .tags{width:60%}.plugin-meta .languages button{font-size:var(--wp--preset--font-size--small);outline:revert}.plugin-meta .languages .popover{margin-top:8px}.plugin-meta .languages .popover-trigger{color:var(--wp--custom--link--color--text);text-decoration:underline}.plugin-meta .languages .popover-trigger:hover{text-decoration:underline}.plugin-meta [rel=tag]{background:var(--wp--preset--color--blueberry-4);border-radius:2px;color:var(--wp--preset--color--charcoal-1);display:inline-block;font-size:var(--wp--preset--font-size--extra-small);margin:2px;max-width:95%;overflow:hidden;padding:3px 6px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:auto}.plugin-meta [rel=tag]:hover{text-decoration:underline}.popover{background-color:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;box-shadow:0 2px 10px #0000001a;display:none;right:0;margin-top:10px;max-width:300px;padding:1em 1em 2em;position:absolute;width:100%;z-index:100}.popover.is-top-right{right:auto;left:0}.popover.is-visible{display:block}.popover .popover-close{bottom:.5em;color:var(--wp--custom--link--color--text);font-size:small;position:absolute;left:.6em}.popover .popover-close:active,.popover .popover-close:focus,.popover .popover-close:hover{text-decoration:underline}.popover .popover-arrow{border:10px solid #0000;border-bottom:10px solid #ccc;border-top:none;height:0;position:absolute;left:20px;top:-10px;width:0;z-index:-1}.popover .popover-arrow:after{border:10px solid #0000;border-bottom:10px solid #fff;border-top:none;content:"";right:-10px;position:absolute;top:2px}.popover .popover-inner{text-align:right}.popover .popover-inner p:first-child{margin-top:0}.popover .popover-inner p:last-child{margin-bottom:0}.plugin-support .counter-container{margin-bottom:1rem;position:relative}.plugin-support .counter-back,.plugin-support .counter-bar{display:inline-block;height:30px;vertical-align:middle}.plugin-support .counter-back{background-color:var(--wp--preset--color--light-grey-2);width:100%}.plugin-support .counter-bar{background-color:var(--wp--preset--color--acid-green-2);display:block}.plugin-support .counter-count{font-size:var(--wp--preset--font-size--extra-small);right:8px;position:absolute;top:8px;width:100%;width:calc(100% - 8px)}@media screen and (min-width:737px){.plugin-support .counter-count{top:5px}}.home .widget,.widget-area.home .widget{display:inline-block;font-size:var(--wp--preset--font-size--small);margin:0;margin:var(--wp--style--block-gap);vertical-align:top;width:auto}@media screen and (min-width:737px){.home .widget,.widget-area.home .widget{margin:0;width:30%}.home .widget:first-child,.widget-area.home .widget:first-child{margin-left:5%}.home .widget:last-child,.widget-area.home .widget:last-child{margin-right:5%}}.home .widget select,.widget-area.home .widget select{max-width:100%}.entry-meta .widget-title{font-size:var(--wp--preset--font-size--heading-4)}body.single.single-plugin .entry-meta{font-size:var(--wp--preset--font-size--normal)}.widget-area{margin:0 auto;padding:var(--wp--preset--spacing--40) 0}.widget-area .widget-title{font-size:var(--wp--preset--font-size--heading-1);font-weight:var(--wp--custom--heading--typography--font-weight);margin-top:var(--wp--preset--spacing--50)}.widget-area .textwidget{text-wrap:pretty} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style.css index b52e17b83c..de9d49ff64 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style.css +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/css/style.css @@ -1 +1 @@ -@charset "UTF-8";.avatar{border-radius:50%;vertical-align:middle}.wp-block-wporg-language-suggest>p{margin:0}.block-validator>details summary{padding:var(--wp--style--block-gap) 0}.block-validator .block-validator__plugin-form label{display:block;margin-bottom:.8em}.block-validator .block-validator__plugin-input-container{display:flex;max-width:34rem}.block-validator .block-validator__plugin-input{flex:1}.block-validator .block-validator__plugin-submit{flex:0;margin-left:4px}@media (max-width:36rem){.block-validator .block-validator__plugin-submit{width:100%}.block-validator .block-validator__plugin-input-container{display:block}.block-validator .block-validator__plugin-input{width:100%}.block-validator .block-validator__plugin-submit{margin-left:0;margin-top:var(--wp--style--block-gap)}}.block-validator .notice details,.block-validator .notice p{font-size:var(--wp--preset--font-size--normal);margin:var(--wp--style--block-gap) 0}.block-validator .notice details p{font-size:var(--wp--preset--font-size--small);margin-left:1rem}.block-validator .notice summary{display:list-item}.block-validator figure{border:1px solid #aaa;display:inline-block;padding:1em}.block-validator .test-screenshot{text-align:center}.block-validator .plugin-upload-form-controls{align-items:center;display:flex;gap:4px}.block-validator .plugin-upload-form-controls>label{border:1px solid var(--wp--custom--form--border--color);border-radius:var(--wp--custom--form--border--radius);cursor:pointer;min-width:200px;padding:4px 8px}.notice{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 #0000001a;font-size:var(--wp--preset--font-size--small);margin:var(--wp--style--block-gap) 0;padding:1px 12px}.notice p,.notice ul{margin:.5em 0;padding:2px}.notice pre{white-space:pre-wrap}.notice ul{list-style:none;margin:.5em}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-left-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-left-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-left-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-left-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.notice.hidden{display:none}.plugin-upload-form.hidden{display:none}.plugin-upload-form fieldset{border:none;margin:0;padding:0}.plugin-upload-form legend{margin:1rem 0}.plugin-upload-form .category-checklist{list-style-type:none;margin:0 0 2rem}.plugin-upload-form .category-checklist li{float:left;padding:.5rem 0;width:50%}@media screen and (min-width:48em){.plugin-upload-form .category-checklist li{padding:0}.plugin-upload-form .category-checklist label{font-size:var(--wp--preset--font-size--small)}.plugin-upload-form label.button{line-height:1.8}}.plugin-upload-form .plugin-file{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px;z-index:-1}.plugin-queue-message code{font-size:1em}.plugin-queue-message dialog.slug-change input[type=text]{font-family:monospace;font-size:1.2em;width:20em}:where(main) a:where(:not(.wp-element-button,.wp-block-wporg-link-wrapper)):focus,:where(main) button:where(:not([class*=wp-block-button])):focus{border-radius:2px;box-shadow:0 0 0 1.5px currentColor;outline:none}.wporg-filter-bar{--wporg--filter-bar--gap:20px;--wporg--filter-bar--color:#40464d;--wporg--filter-bar--active--background-color:var(--wp--custom--button--color--background);--wporg--filter-bar--focus--border-color:var(--wp--custom--button--focus--border--color);margin:var(--wp--style--block-gap) 0}.wporg-filter-bar .wporg-query-filter__toggle.is-active,.wporg-filter-bar .wporg-query-filter__toggle:active,.wporg-filter-bar .wporg-query-filter__toggle:focus{background-color:var(--wporg--filter-bar--active--background-color);color:var(--wp--custom--button--color--text)}.wporg-filter-bar .wporg-filter-bar__navigation{flex-grow:1;margin-bottom:var(--wporg--filter-bar--gap)}.wporg-filter-bar .wporg-filter-bar__navigation ul{display:inline-block;font-size:13px;line-height:1.538;list-style:none;margin:0;padding-left:0}.wporg-filter-bar .wporg-filter-bar__navigation ul li{display:inline-block}.wporg-filter-bar .wporg-filter-bar__navigation ul li+li{margin-left:8px}.wporg-filter-bar .wporg-filter-bar__navigation ul a{border-radius:2px;color:var(--wporg--filter-bar--color);display:block;padding:8px 12px;text-decoration:none}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a:hover{text-decoration:underline}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus-visible{box-shadow:none;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active{background-color:var(--wporg--filter-bar--active--background-color);color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:hover{color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus-visible{box-shadow:inset 0 0 0 1.5px #fff;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}@media screen and (min-width:737px){.wporg-filter-bar{align-items:center;display:flex;flex-wrap:wrap;gap:var(--wporg--filter-bar--gap);justify-content:space-between;width:100%}.wporg-filter-bar .wporg-filter-bar__navigation{margin-bottom:0}}.wp-block-search__inside-wrapper{background:var(--wp--preset--color--light-grey-2);border:none}.button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button{background-color:var(--wp--custom--button--color--background);border:0;border-radius:var(--wp--custom--button--border--radius);color:var(--wp--custom--button--color--text);cursor:pointer;opacity:1;padding:calc(var(--wp--custom--button--small--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--right) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--left) + var(--wp--custom--button--border--width));vertical-align:middle}.button.button-large{padding:calc(var(--wp--custom--button--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--right) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--left) + var(--wp--custom--button--border--width))}input+button.button,select+button.button{margin-top:-3px}.button.disabled{cursor:not-allowed;opacity:.6}.wp-block-post-content a.button{text-decoration:none}.wp-block-button__link{width:auto}pre{background-color:#f7f7f7;border:1px solid var(--wp--preset--color--light-grey-1);overflow:scroll;padding:20px}code,pre{border-radius:2px}code{background:var(--wp--preset--color--light-grey-2);display:inline-block;line-height:var(--wp--custom--body--extra-small--typography--line-height);max-width:100%;padding-inline-end:3px;padding-inline-start:3px}dialog{border:0;box-shadow:6px 6px 6px #0003;min-height:50%;min-width:30%}@media (min-width:1280px){dialog{max-width:55%}}dialog::backdrop{background:#000;opacity:.5}dialog .close{color:inherit;cursor:pointer;position:absolute;right:1em;text-decoration:none!important;top:1em}.plugin-card{display:flex;flex-direction:column;height:100%;justify-content:space-between}.plugin-card .entry{display:inline-block;vertical-align:top}.plugin-card .entry-title{display:block;display:-webkit-box;font-size:var(--wp--preset--font-size--heading-5);font-weight:500;line-height:1.3;margin-bottom:2px!important;max-height:2.6em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.plugin-card .entry-title a{display:block;text-decoration:none}.plugin-card .entry-title a:focus{box-shadow:none}.plugin-card .entry-excerpt{clear:both;font-size:var(--wp--preset--font-size--small)}.plugin-card .entry-excerpt p{margin:0}.plugin-card footer{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-card footer span{color:var(--wp--preset--color--charcoal-4);display:inline-block;line-height:var(--wp--preset--font-size--normal);overflow:hidden}.plugin-card footer span.plugin-author{width:100%}.plugin-card footer span.plugin-author span{color:var(--wp--preset--color--charcoal-1)}.plugin-card footer span.plugin-author path{fill:var(--wp--preset--color--charcoal-1)}.plugin-card footer span svg{height:24px;vertical-align:bottom;width:24px}.plugin-card footer span svg path{fill:var(--wp--preset--color--charcoal-4)}.plugin-card footer span.active-installs{min-width:48%}.plugin-cards{cursor:pointer}.plugin-cards .is-style-cards-grid li:hover{background-color:#fff!important;border:1px solid var(--wp--preset--color--charcoal-1)!important}.plugin-cards .is-style-cards-grid li:focus-within{border-color:#0000;border-radius:2px;box-shadow:0 0 0 1.5px var(--wp--custom--link--color--text)}@media screen and (max-width:737px){.plugin-cards .is-style-cards-grid{grid-template-columns:100%}}.entry-thumbnail{display:none;margin-bottom:var(--wp--style--block-gap);margin-right:var(--wp--style--block-gap);max-width:80px}.entry-thumbnail .plugin-icon{background-size:cover;border-radius:var(--wp--custom--button--border--radius);display:block;height:80px;width:80px}@media screen and (min-width:21em){.entry-thumbnail{display:inline-block;float:left;vertical-align:top}}.single .entry-thumbnail{display:none;float:left;height:96px;margin-bottom:0;max-width:96px}@media screen and (min-width:26em){.single .entry-thumbnail{display:block}}.single .entry-thumbnail .plugin-icon{background-size:contain!important;height:96px!important;width:96px!important}.plugin-rating{line-height:1;margin:0 10px 8px 0}.plugin-rating .wporg-ratings{display:inline-block;margin-right:5px}.plugin-rating .rating-count{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);vertical-align:text-bottom}.plugin-rating .rating-count a{color:inherit;cursor:hand;text-decoration:none}[class*=dashicons-star-]{color:var(--wp--preset--color--pomegrade-1)}.rtl .dashicons-star-half{transform:rotateY(180deg)}#main .plugin-section{margin:0 auto var(--wp--preset--spacing--60)}#main .plugin-section:last-of-type{margin-bottom:0}#main .plugin-section .section-header{align-items:center;column-gap:10px;display:flex;justify-content:space-between;margin-bottom:var(--wp--style--block-gap)}#main .plugin-section .section-header>h2{margin-bottom:0}#main .plugin-section .section-link{align-self:center;flex:0 0 auto;text-decoration:underline}.pagination .nav-links{margin-top:var(--wp--style--block-gap);padding-top:var(--wp--style--block-gap);text-align:center}.pagination .nav-links a{text-decoration:none}.pagination .nav-links .page-numbers{cursor:pointer;display:inline-block;min-width:2em;padding:8px;text-align:center}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:auto;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{display:inline-block;font-size:medium;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{font-weight:700}.pagination .nav-links span.page-numbers.current{text-decoration:underline}@keyframes favme-anime{0%{font-size:var(--wp--preset--font-size--large);opacity:1;-webkit-text-stroke-color:#0000}25%{color:#fff;font-size:var(--wp--preset--font-size--small);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}75%{color:#fff;font-size:var(--wp--preset--font-size--large);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}to{font-size:var(--wp--preset--font-size--normal);opacity:1;-webkit-text-stroke-color:#0000}}.plugin-favorite{height:calc(var(--wp--custom--button--spacing--padding--top)*2 + var(--wp--preset--font-size--normal)*2);text-align:center;vertical-align:top;width:36px}.plugin-favorite .plugin-favorite-heart{align-items:center;background:none;border:0;border-radius:0;box-shadow:none;color:#cbcdce;cursor:pointer;display:flex;font-size:var(--wp--preset--font-size--large);height:100%;justify-content:center;line-height:1;margin:0;outline:none;padding:0;text-decoration:none}.plugin-favorite .plugin-favorite-heart.favorited{color:#dc3232}.plugin-favorite .plugin-favorite-heart:focus,.plugin-favorite .plugin-favorite-heart:hover{color:var(----wp--preset--color--charcoal-2);text-decoration:none}.plugin-favorite .plugin-favorite-heart:after{content:"\f487";font-family:dashicons;vertical-align:top}.plugin-banner img{aspect-ratio:3.089;border-radius:var(--wp--custom--button--border--radius);display:block;margin:0 auto var(--wp--preset--spacing--30);width:100%}@keyframes hideAnimation{to{visibility:hidden}}.categorization .help{color:var(--wp--preset--color--charcoal-4);display:inline-block;font-size:.8rem;margin-top:0}.categorization label{display:block;font-weight:700}.categorization input{width:100%}.categorization .success-msg{background:#eff7ed;border:solid #64b450;border-width:0 0 0 5px;font-size:.8rem;margin-left:1rem;opacity:0;overflow:auto;padding:.1rem .6rem .2rem;position:relative;transition:visibility 0s,opacity .5s linear;-webkit-user-select:none;user-select:none;visibility:hidden}.categorization .success-msg.saved{animation:hideAnimation 0s ease-in 5s;animation-fill-mode:forwards;opacity:1;visibility:visible}.plugin-changelog code{font-size:var(--wp--preset--font-size--small)}.plugin-developers .contributors-list li{align-items:center;display:flex;padding-bottom:var(--wp--style--block-gap)}@media screen and (min-width:500px){.plugin-developers .contributors-list{display:flex;flex-wrap:wrap}.plugin-developers .contributors-list li{padding-bottom:unset;width:50%}}.plugin-faq dl{border-bottom:1px solid var(--wp--preset--color--light-grey-1)}.plugin-faq dt{border-top:1px solid var(--wp--preset--color--light-grey-1);cursor:pointer;padding:1rem 0}.plugin-faq dt:before{content:"\f347";float:right;font-family:dashicons;margin:0 1rem}.plugin-faq dt.open:before{content:"\f343"}.plugin-faq dt .button-link{display:inherit;text-align:inherit}.plugin-faq dt .button-link.no-focus{box-shadow:none;outline:none}.plugin-faq dt h3{color:var(--wp--custom--link--color--text);display:inline;font-size:var(--wp--preset--font-size--normal);font-weight:400;margin-bottom:0;margin-top:0!important;text-decoration:underline}.plugin-faq dt h3 button{all:inherit;max-width:calc(100% - 60px)}.plugin-faq dt h3 button:focus,.plugin-faq dt h3 button:hover{text-decoration:underline}.plugin-faq dd{display:none;margin:0 0 1rem}.no-js .plugin-faq dd{display:block}.plugin-faq dd p{margin:0}.plugin-faq dd p+p{margin-top:1rem}.image-gallery{-webkit-user-select:none;user-select:none}.image-gallery-content{position:relative}.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{border-color:var(--wp--preset--color--light-grey-1);display:none;font-size:48px;height:100%;position:absolute;top:0;transition:background .1s ease,border .1s ease;z-index:4}@media (max-width:768px){.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{font-size:3.4em}}@media (min-width:768px){.image-gallery-content .image-gallery-left-nav:hover,.image-gallery-content .image-gallery-right-nav:hover{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);opacity:.8}}.image-gallery-content .image-gallery-left-nav:before,.image-gallery-content .image-gallery-right-nav:before{font-family:dashicons;position:relative}.image-gallery-content .image-gallery-left-nav{left:0}.image-gallery-content .image-gallery-left-nav:before{content:"\f341"}.image-gallery-content .image-gallery-left-nav:hover{margin-left:-1px}.image-gallery-content .image-gallery-right-nav{right:0}.image-gallery-content .image-gallery-right-nav:before{content:"\f345"}.image-gallery-content .image-gallery-right-nav:hover{margin-right:-1px}.image-gallery-content:hover .image-gallery-left-nav,.image-gallery-content:hover .image-gallery-right-nav{display:block}.image-gallery-slides{border:1px solid #eee;line-height:0;overflow:hidden;position:relative;white-space:nowrap}.image-gallery-slide{left:0;position:absolute;top:0;width:100%}.image-gallery-slide.center{position:relative}.image-gallery-slide .image-gallery-image{margin:0}.image-gallery-slide img{display:block;margin:0 auto}.image-gallery-slide .image-gallery-description{background:var(--wp--preset--color--light-grey-2);color:var(--wp--preset--color--charcoal-1);font-size:var(--wp--preset--font-size--small);line-height:1.5;padding:10px 20px;white-space:normal}@media (max-width:768px){.image-gallery-slide .image-gallery-description{padding:8px 15px}}.image-gallery-thumbnails{background:#fff;margin-top:5px}.image-gallery-thumbnails .image-gallery-thumbnails-container{cursor:pointer;text-align:center;white-space:nowrap}.image-gallery-thumbnail{border:1px solid #eee;display:table-cell;margin-right:5px;max-height:100px;overflow:hidden}.image-gallery-thumbnail .image-gallery-image{margin:0}.image-gallery-thumbnail img{vertical-align:middle;width:100px}@media (max-width:768px){.image-gallery-thumbnail img{width:75px}}.image-gallery-thumbnail:hover{box-shadow:0 1px 8px #0000004d}.image-gallery-thumbnail.active{border:1px solid #337ab7}.image-gallery-thumbnail-label{color:#222;font-size:1em}@media (max-width:768px){.image-gallery-thumbnail-label{font-size:.8em}}.image-gallery-index{background:#0006;bottom:0;color:#fff;line-height:1;padding:10px 20px;position:absolute;right:0;z-index:4}.plugin-reviews{list-style-type:none;margin:0;padding:0}.plugin-reviews .plugin-review{border-bottom:1px solid var(--wp--preset--color--light-grey-1);margin:2rem 0 1rem;padding-bottom:1rem}.plugin-reviews .plugin-review a{text-decoration:none}.plugin-reviews .plugin-review:first-child{margin-top:0}.plugin-reviews .plugin-review .header-top{display:flex}.plugin-reviews .plugin-review .header-top .wporg-ratings{flex-shrink:0}.plugin-reviews .plugin-review .header-bottom{display:flex;margin-top:4px}.plugin-reviews .review-avatar{display:none}.plugin-reviews .review,.plugin-reviews .review-author,.plugin-reviews .wporg-ratings{display:inline-block;vertical-align:top}.plugin-reviews .review-header{margin:0 0 .5rem}.plugin-reviews .review-title{font-size:var(--wp--preset--font-size--normal);font-weight:500;margin:2px 0 0 12px!important;text-transform:inherit}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{font-size:var(--wp--preset--font-size--extra-small);line-height:1.25}.plugin-reviews .review-date,.plugin-reviews .review-replies{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);margin-left:12px}.plugin-reviews .review-replies:before{content:"•";margin-right:12px}.plugin-reviews .review-content{margin:1em 0}@media screen and (min-width:737px){.plugin-reviews .review-avatar{display:inline-block;vertical-align:top}.plugin-reviews .review-avatar .avatar{margin-right:1rem}.plugin-reviews .review{width:calc(100% - 60px - 1rem)}.plugin-reviews .review-header{margin:0}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{line-height:1}}.plugin-reviews .reviews-link{display:inline-block;font-size:var(--wp--preset--font-size--small);text-decoration:none}.plugin-reviews .reviews-link:after{content:"\f345";float:right;font-family:dashicons;padding-left:5px;position:relative;top:1px;vertical-align:text-top}.plugin-screenshots{list-style-type:none;margin:0;padding:0}.plugin-screenshots .image-gallery-content{display:table;width:100%}.plugin-screenshots .image-gallery-slides{display:table-cell;max-height:600px}.plugin-screenshots .image-gallery-image img{max-height:550px;max-width:100%}.plugin-screenshots .image-gallery-thumbnail{vertical-align:top}.plugin-screenshots .image-gallery-thumbnail img{max-height:100px}.plugin-screenshots .image-gallery-thumbnails{overflow:hidden}.download-history-stats td{text-align:right}.previous-versions{max-width:60%}@media screen and (min-width:737px){.previous-versions{height:32px;vertical-align:middle}}hr{margin:2.5rem auto}.section h1:nth-child(2),.section h2:nth-child(2),.section h3:nth-child(2),.section h4:nth-child(2),.section h5:nth-child(2),.section h6:nth-child(2){margin-top:0}.section-heading{font-family:var(--wp--preset--font-family--inter)!important;font-size:var(--wp--preset--font-size--heading-5)!important;font-style:normal;font-weight:600;line-height:var(--wp--custom--heading--level-5--typography--line-height)}.section-intro{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--small);margin-bottom:var(--wp--preset--spacing--20);margin-top:var(--wp--preset--spacing--10)}.type-plugin .plugin-notice{margin-top:0}.type-plugin .plugin-header{border-bottom:0;padding-top:var(--wp--preset--spacing--40)}.type-plugin .plugin-header:after,.type-plugin .plugin-header:before{content:"";display:table;table-layout:fixed}.type-plugin .plugin-header:after{clear:both}.type-plugin .plugin-header .entry-heading-container{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width:599px){.type-plugin .plugin-header .entry-heading-container{--wp--custom--button--spacing--padding--top:12px;--wp--custom--button--spacing--padding--bottom:12px;--wp--custom--button--spacing--padding--left:16px;--wp--custom--button--spacing--padding--right:16px}}@media screen and (min-width:700px){.type-plugin .plugin-header .entry-heading-container{flex-direction:row}}.type-plugin .plugin-header .entry-heading-container>:first-child{align-items:center;display:flex;flex:1}.type-plugin .plugin-header .plugin-actions{align-items:center;display:flex;gap:16px;margin-top:var(--wp--style--block-gap)}@media screen and (min-width:700px){.type-plugin .plugin-header .plugin-actions{margin-top:0;margin-inline-start:1rem}}.type-plugin .plugin-header .plugin-actions>.button,.type-plugin .plugin-header .plugin-actions>div{display:inline-block;text-align:center}@media screen and (max-width:34em){.type-plugin .plugin-header .plugin-actions>.button.download-button{display:none}}.type-plugin .plugin-header .plugin-title{clear:none;font-size:var(--wp--preset--font-size--heading-3);font-weight:400;line-height:var(--wp--custom--heading--level-3--typography--line-height);margin:0}.type-plugin .plugin-header .plugin-title a{color:inherit;text-decoration:none}.type-plugin .plugin-header .plugin-title a:hover{text-decoration:underline}.type-plugin .plugin-header .byline{color:var(--wp--preset--color--charcoal-4);display:block;margin-top:4px}.type-plugin .plugin-banner+.plugin-header{padding-top:0}.type-plugin .plugin-banner+.plugin-header>.notice:first-of-type{margin-top:0}.type-plugin .tabs{border-bottom:1px solid var(--wp--preset--color--light-grey-1);list-style:none;margin:0}.type-plugin .tabs li{border:1px solid #0000;display:inline-block;font-size:.9rem;margin-bottom:-1px;transition:background .2s ease}.type-plugin .tabs li a{background:#fff;border:0;color:var(--wp--preset--color--charcoal-1);display:block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 1.25rem;text-decoration:none}.type-plugin .tabs li a.active,.type-plugin .tabs li a:hover{background:var(--wp--preset--color--light-grey-2)!important}.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:1px solid var(--wp--preset--color--light-grey-1)}@media screen and (max-width:38em){.type-plugin .tabs{border-top:1px solid var(--wp--preset--color--light-grey-1)}.type-plugin .tabs li{display:block;margin-bottom:1px}.type-plugin .tabs li,.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:none;border-bottom:1px solid var(--wp--preset--color--light-grey-1)}}@media screen and (min-width:737px){.type-plugin .entry-content{float:left;padding:0;width:65%}}.type-plugin .entry-content>div,.type-plugin .entry-content>div~button{border:0;display:none}.type-plugin .entry-content ol>li>p,.type-plugin .entry-content ul>li>p{margin:0}.type-plugin .entry-content #admin{display:block!important}.type-plugin .plugin-blocks-list{list-style:none;margin-left:0;padding-left:0}.type-plugin .plugin-blocks-list .plugin-blocks-list-item{display:grid;grid-template-columns:auto 1fr;margin-bottom:var(--wp--style--block-gap)}.type-plugin .plugin-blocks-list .block-icon{border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;display:inline-block;height:3.5rem;line-height:16px;margin-right:var(--wp--style--block-gap);padding:var(--wp--style--block-gap);width:3.5rem}.type-plugin .plugin-blocks-list .block-icon.dashicons{color:inherit}.type-plugin .plugin-blocks-list .block-icon.dashicons:before{margin-left:-3px}.type-plugin .plugin-blocks-list .block-icon svg{height:16px;width:16px;fill:currentColor;margin-left:-1px}.type-plugin .plugin-blocks-list .block-title{align-self:center;font-weight:700}.type-plugin .plugin-blocks-list .has-description .block-icon{grid-row:1/span 2}.type-plugin .plugin-blocks-list .has-description .block-title{margin-bottom:.4em}.type-plugin span#description,.type-plugin span#developers,.type-plugin span#installation,.type-plugin span#reviews{position:fixed}.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-bottom:0;padding-bottom:1px}@media screen and (max-width:38em){.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced.active,.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced:hover,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers.active,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers:hover,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation.active,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation:hover,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description.active,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description:hover,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews.active,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews:hover{padding-bottom:1px!important}}.type-plugin span#section-links{display:flex;flex-flow:row wrap;margin-top:var(--wp--preset--spacing--30)}.type-plugin span#section-links .tabs{flex:1 1 auto;padding-left:0}@media screen and (max-width:38em){.type-plugin span#section-links .tabs{border:1px solid var(--wp--preset--color--light-grey-1)!important}.type-plugin span#section-links .tabs li{border:none!important}.type-plugin span#section-links{display:block}}.type-plugin #link-support{align-self:flex-end;border-bottom:1px solid var(--wp--preset--color--light-grey-1);flex:0 0 auto;font-size:.9rem}.type-plugin #link-support a{display:inline-block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 0 .64rem 1.25rem}@media screen and (max-width:38em){.type-plugin #link-support{border-bottom:0;display:block;width:100%}.type-plugin #link-support a{padding-right:1.25rem}}.type-plugin span#developers:target~.entry-content #tab-changelog,.type-plugin span#developers:target~.entry-content #tab-developers,.type-plugin span#developers:target~.entry-content #tab-developers .plugin-development,.type-plugin span#developers:target~.entry-content #tab-developers~button,.type-plugin span#installation:target~.entry-content #tab-installation,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #blocks,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #faq,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #screenshots,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-description,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers~button,.type-plugin span#reviews:target~.entry-content #tab-reviews{display:block}.type-plugin span#developers:target~.entry-content #tab-developers .plugin-contributors,.type-plugin span#installation:target~.entry-meta .plugin-contributors,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers .plugin-development,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-donate,.type-plugin span#reviews:target~.entry-meta .plugin-meta,.type-plugin span#reviews:target~.entry-meta .plugin-support{display:none}@media screen and (min-width:737px){.type-plugin .entry-content,.type-plugin .entry-meta{padding-left:0;padding-right:0}.type-plugin .entry-meta{float:right;width:30%}}.type-plugin .plugin-danger-zone h4{margin-top:var(--wp--preset--spacing--60)}.plugin-releases-listing{border-collapse:collapse;width:100%}.plugin-releases-listing tbody td:nth-child(4) div{font-size:14px}.plugin-releases-listing-actions{display:flex;flex-direction:column;gap:8px}@media screen and (min-width:34em){.plugin-releases-listing-actions{flex-direction:row}}.plugin-adopt-me{background:#e6f4fa;margin-top:36px;padding:12px}.plugin-adopt-me .widget-title{margin-top:0}.plugin-adopt-me p{margin-bottom:0}.widget.plugin-categorization{margin-top:var(--wp--style--block-gap)}.widget.plugin-categorization .widget-head h2{font-size:var(--wp--preset--font-size--heading-4);margin-bottom:.2rem;margin-top:0}.widget.plugin-categorization .widget-head a{font-size:var(--wp--preset--font-size--small)}.widget.plugin-categorization .widget-head a[href=""]{display:none}.widget.plugin-categorization p{font-size:var(--wp--preset--font-size--small);margin-top:.5rem}.widget.plugin-categorization~.plugin-meta li:first-child{border-top:1px solid var(--wp--preset--color--light-grey-1)}.committer-list,.support-rep-list{list-style:none;margin:0;padding:0}.committer-list li,.support-rep-list li{padding-bottom:.5rem}.committer-list li .remove,.support-rep-list li .remove{color:red;visibility:hidden}.committer-list li:hover .remove,.support-rep-list li:hover .remove{visibility:visible}.committer-list .avatar,.support-rep-list .avatar{float:left;margin-right:10px}.committer-list .spinner,.support-rep-list .spinner{position:relative}.committer-list .spinner:after,.support-rep-list .spinner:after{background:url(/wp-admin/images/spinner.gif) no-repeat 50%;background-size:20px 20px;content:"";display:block;height:20px;margin:-10px -10px 0 0;position:absolute;right:-50%;top:50%;transform:translateZ(0);width:20px}@media (min-resolution:120dpi),print{.committer-list .spinner:after,.support-rep-list .spinner:after{background-image:url(/wp-admin/images/spinner-2x.gif)}}.committer-list .new,.support-rep-list .new{margin-top:var(--wp--style--block-gap)}.plugin-contributors.read-more{border-bottom:1px solid var(--wp--preset--color--light-grey-1);max-height:200px;overflow:hidden;padding-bottom:1px}.plugin-contributors.read-more.toggled{max-height:none}.no-js .plugin-contributors.read-more{max-height:none;overflow:auto}.contributors-list{list-style-type:none;margin:0;padding:0}.contributors-list li{align-items:center;display:flex;margin-bottom:1rem}.contributors-list .avatar{float:left;margin-right:10px}.plugin-meta{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-meta ul{list-style-type:none;margin:0;padding:0}.plugin-meta li{border-top:1px solid var(--wp--preset--color--light-grey-1);display:inline-block;padding:.5rem 0;position:relative;width:100%}.plugin-meta li strong{float:right;font-weight:500}.plugin-meta li .plugin-admin{font-size:var(--wp--preset--font-size--normal);font-weight:400}.plugin-meta li:first-child{border-top:0}.plugin-meta .languages,.plugin-meta .tags{float:right;text-align:right}.plugin-meta .tags{width:60%}.plugin-meta .languages button{font-size:var(--wp--preset--font-size--small);outline:revert}.plugin-meta .languages .popover{margin-top:8px}.plugin-meta .languages .popover-trigger{color:var(--wp--custom--link--color--text);text-decoration:underline}.plugin-meta .languages .popover-trigger:hover{text-decoration:underline}.plugin-meta [rel=tag]{background:var(--wp--preset--color--blueberry-4);border-radius:2px;color:var(--wp--preset--color--charcoal-1);display:inline-block;font-size:var(--wp--preset--font-size--extra-small);margin:2px;max-width:95%;overflow:hidden;padding:3px 6px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:auto}.plugin-meta [rel=tag]:hover{text-decoration:underline}.popover{background-color:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;box-shadow:0 2px 10px #0000001a;display:none;left:0;margin-top:10px;max-width:300px;padding:1em 1em 2em;position:absolute;width:100%;z-index:100}.popover.is-top-right{left:auto;right:0}.popover.is-visible{display:block}.popover .popover-close{bottom:.5em;color:var(--wp--custom--link--color--text);font-size:small;position:absolute;right:.6em}.popover .popover-close:active,.popover .popover-close:focus,.popover .popover-close:hover{text-decoration:underline}.popover .popover-arrow{border:10px solid #0000;border-bottom:10px solid #ccc;border-top:none;height:0;position:absolute;right:20px;top:-10px;width:0;z-index:-1}.popover .popover-arrow:after{border:10px solid #0000;border-bottom:10px solid #fff;border-top:none;content:"";left:-10px;position:absolute;top:2px}.popover .popover-inner{text-align:left}.popover .popover-inner p:first-child{margin-top:0}.popover .popover-inner p:last-child{margin-bottom:0}.plugin-support .counter-container{margin-bottom:1rem;position:relative}.plugin-support .counter-back,.plugin-support .counter-bar{display:inline-block;height:30px;vertical-align:middle}.plugin-support .counter-back{background-color:var(--wp--preset--color--light-grey-2);width:100%}.plugin-support .counter-bar{background-color:var(--wp--preset--color--acid-green-2);display:block}.plugin-support .counter-count{font-size:var(--wp--preset--font-size--extra-small);left:8px;position:absolute;top:8px;width:100%;width:calc(100% - 8px)}@media screen and (min-width:737px){.plugin-support .counter-count{top:5px}}.home .widget,.widget-area.home .widget{display:inline-block;font-size:var(--wp--preset--font-size--small);margin:0;margin:var(--wp--style--block-gap);vertical-align:top;width:auto}@media screen and (min-width:737px){.home .widget,.widget-area.home .widget{margin:0;width:30%}.home .widget:first-child,.widget-area.home .widget:first-child{margin-right:5%}.home .widget:last-child,.widget-area.home .widget:last-child{margin-left:5%}}.home .widget select,.widget-area.home .widget select{max-width:100%}.entry-meta .widget-title{font-size:var(--wp--preset--font-size--heading-4)}body.single.single-plugin .entry-meta{font-size:var(--wp--preset--font-size--normal)}.widget-area{margin:0 auto;padding:var(--wp--preset--spacing--40) 0}.widget-area .widget-title{font-size:var(--wp--preset--font-size--heading-1);font-weight:var(--wp--custom--heading--typography--font-weight);margin-top:var(--wp--preset--spacing--50)}.widget-area .textwidget{text-wrap:pretty} \ No newline at end of file +@charset "UTF-8";.avatar{border-radius:50%;vertical-align:middle}.wp-block-wporg-language-suggest>p{margin:0}.block-validator>details summary{padding:var(--wp--style--block-gap) 0}.block-validator .block-validator__plugin-form label{display:block;margin-bottom:.8em}.block-validator .block-validator__plugin-input-container{display:flex;max-width:34rem}.block-validator .block-validator__plugin-input{flex:1}.block-validator .block-validator__plugin-submit{flex:0;margin-left:4px}@media (max-width:36rem){.block-validator .block-validator__plugin-submit{width:100%}.block-validator .block-validator__plugin-input-container{display:block}.block-validator .block-validator__plugin-input{width:100%}.block-validator .block-validator__plugin-submit{margin-left:0;margin-top:var(--wp--style--block-gap)}}.block-validator .notice details,.block-validator .notice p{font-size:var(--wp--preset--font-size--normal);margin:var(--wp--style--block-gap) 0}.block-validator .notice details p{font-size:var(--wp--preset--font-size--small);margin-left:1rem}.block-validator .notice summary{display:list-item}.block-validator figure{border:1px solid #aaa;display:inline-block;padding:1em}.block-validator .test-screenshot{text-align:center}.block-validator .plugin-upload-form-controls{align-items:center;display:flex;gap:4px}.block-validator .plugin-upload-form-controls>label{border:1px solid var(--wp--custom--form--border--color);border-radius:var(--wp--custom--form--border--radius);cursor:pointer;min-width:200px;padding:4px 8px}.notice{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 #0000001a;font-size:var(--wp--preset--font-size--small);margin:var(--wp--style--block-gap) 0;padding:1px 12px}.notice p,.notice ul{margin:.5em 0;padding:2px}.notice pre{white-space:pre-wrap}.notice ul{list-style:none;margin:.5em}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-left-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-left-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-left-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-left-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.notice.hidden{display:none}.plugin-upload-form.hidden{display:none}.plugin-upload-form fieldset{border:none;margin:0;padding:0}.plugin-upload-form legend{margin:1rem 0}.plugin-upload-form .category-checklist{list-style-type:none;margin:0 0 2rem}.plugin-upload-form .category-checklist li{float:left;padding:.5rem 0;width:50%}@media screen and (min-width:48em){.plugin-upload-form .category-checklist li{padding:0}.plugin-upload-form .category-checklist label{font-size:var(--wp--preset--font-size--small)}.plugin-upload-form label.button{line-height:1.8}}.plugin-upload-form .plugin-file{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px;z-index:-1}.plugin-queue-message code{font-size:1em}.plugin-queue-message dialog.slug-change input[type=text]{font-family:monospace;font-size:1.2em;width:20em}:where(main) a:where(:not(.wp-element-button,.wp-block-wporg-link-wrapper)):focus,:where(main) button:where(:not([class*=wp-block-button])):focus{border-radius:2px;box-shadow:0 0 0 1.5px currentColor;outline:none}.wporg-filter-bar{--wporg--filter-bar--gap:20px;--wporg--filter-bar--color:#40464d;--wporg--filter-bar--active--background-color:var(--wp--custom--button--color--background);--wporg--filter-bar--focus--border-color:var(--wp--custom--button--focus--border--color);margin:var(--wp--style--block-gap) 0}.wporg-filter-bar .wporg-query-filter__toggle.is-active,.wporg-filter-bar .wporg-query-filter__toggle:active,.wporg-filter-bar .wporg-query-filter__toggle:focus{background-color:var(--wporg--filter-bar--active--background-color);color:var(--wp--custom--button--color--text)}.wporg-filter-bar .wporg-filter-bar__navigation{flex-grow:1;margin-bottom:var(--wporg--filter-bar--gap)}.wporg-filter-bar .wporg-filter-bar__navigation ul{display:inline-block;font-size:13px;line-height:1.538;list-style:none;margin:0;padding-left:0}.wporg-filter-bar .wporg-filter-bar__navigation ul li{display:inline-block}.wporg-filter-bar .wporg-filter-bar__navigation ul li+li{margin-left:8px}.wporg-filter-bar .wporg-filter-bar__navigation ul a{border-radius:2px;color:var(--wporg--filter-bar--color);display:block;padding:8px 12px;text-decoration:none}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a:hover{text-decoration:underline}.wporg-filter-bar .wporg-filter-bar__navigation ul a:focus-visible{box-shadow:none;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active{background-color:var(--wporg--filter-bar--active--background-color);color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus,.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:hover{color:#fff}.wporg-filter-bar .wporg-filter-bar__navigation ul a.is-active:focus-visible{box-shadow:inset 0 0 0 1.5px #fff;outline:1.5px solid var(--wporg--filter-bar--focus--border-color);outline-offset:-.5px}@media screen and (min-width:737px){.wporg-filter-bar{align-items:center;display:flex;flex-wrap:wrap;gap:var(--wporg--filter-bar--gap);justify-content:space-between;width:100%}.wporg-filter-bar .wporg-filter-bar__navigation{margin-bottom:0}}.wp-block-search__inside-wrapper{background:var(--wp--preset--color--light-grey-2);border:none}.button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button{background-color:var(--wp--custom--button--color--background);border:0;border-radius:var(--wp--custom--button--border--radius);color:var(--wp--custom--button--color--text);cursor:pointer;opacity:1;padding:calc(var(--wp--custom--button--small--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--right) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--small--spacing--padding--left) + var(--wp--custom--button--border--width));vertical-align:middle}.button.button-large{padding:calc(var(--wp--custom--button--spacing--padding--top) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--right) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--bottom) + var(--wp--custom--button--border--width)) calc(var(--wp--custom--button--spacing--padding--left) + var(--wp--custom--button--border--width))}input+button.button,select+button.button{margin-top:-3px}.button.disabled{cursor:not-allowed;opacity:.6}.wp-block-post-content a.button{text-decoration:none}.wp-block-button__link{width:auto}pre{background-color:#f7f7f7;border:1px solid var(--wp--preset--color--light-grey-1);overflow:scroll;padding:20px}code,pre{border-radius:2px}code{background:var(--wp--preset--color--light-grey-2);display:inline-block;line-height:var(--wp--custom--body--extra-small--typography--line-height);max-width:100%;padding-inline-end:3px;padding-inline-start:3px}dialog{border:0;box-shadow:6px 6px 6px #0003;min-height:50%;min-width:30%}@media (min-width:1280px){dialog{max-width:55%}}dialog::backdrop{background:#000;opacity:.5}dialog .close{color:inherit;cursor:pointer;position:absolute;right:1em;text-decoration:none!important;top:1em}.plugin-card{display:flex;flex-direction:column;height:100%;justify-content:space-between}.plugin-card .entry{display:inline-block;vertical-align:top}.plugin-card .entry-title{display:block;display:-webkit-box;font-size:var(--wp--preset--font-size--heading-5);font-weight:500;line-height:1.3;margin-bottom:2px!important;max-height:2.6em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.plugin-card .entry-title a{display:block;text-decoration:none}.plugin-card .entry-title a:focus{box-shadow:none}.plugin-card .entry-excerpt{clear:both;font-size:var(--wp--preset--font-size--small)}.plugin-card .entry-excerpt p{margin:0}.plugin-card footer{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-card footer span{color:var(--wp--preset--color--charcoal-4);display:inline-block;line-height:var(--wp--preset--font-size--normal);overflow:hidden}.plugin-card footer span.plugin-author{width:100%}.plugin-card footer span.plugin-author span{color:var(--wp--preset--color--charcoal-1)}.plugin-card footer span.plugin-author path{fill:var(--wp--preset--color--charcoal-1)}.plugin-card footer span svg{height:24px;vertical-align:bottom;width:24px}.plugin-card footer span svg path{fill:var(--wp--preset--color--charcoal-4)}.plugin-card footer span.active-installs{min-width:48%}.plugin-cards{cursor:pointer}.plugin-cards .is-style-cards-grid li:hover{background-color:#fff!important;border:1px solid var(--wp--preset--color--charcoal-1)!important}.plugin-cards .is-style-cards-grid li:focus-within{border-color:#0000;border-radius:2px;box-shadow:0 0 0 1.5px var(--wp--custom--link--color--text)}@media screen and (max-width:737px){.plugin-cards .is-style-cards-grid{grid-template-columns:100%}}.entry-thumbnail{display:none;margin-bottom:var(--wp--style--block-gap);margin-right:var(--wp--style--block-gap);max-width:80px}.entry-thumbnail .plugin-icon{background-size:cover;border-radius:var(--wp--custom--button--border--radius);display:block;height:80px;width:80px}@media screen and (min-width:21em){.entry-thumbnail{display:inline-block;float:left;vertical-align:top}}.single .entry-thumbnail{display:none;float:left;height:96px;margin-bottom:0;max-width:96px}@media screen and (min-width:26em){.single .entry-thumbnail{display:block}}.single .entry-thumbnail .plugin-icon{background-size:contain!important;height:96px!important;width:96px!important}.plugin-rating{line-height:1;margin:0 10px 8px 0}.plugin-rating .wporg-ratings{display:inline-block;margin-right:5px}.plugin-rating .rating-count{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);vertical-align:text-bottom}.plugin-rating .rating-count a{color:inherit;cursor:hand;text-decoration:none}[class*=dashicons-star-]{color:var(--wp--preset--color--pomegrade-1)}.rtl .dashicons-star-half{transform:rotateY(180deg)}#main .plugin-section{margin:0 auto var(--wp--preset--spacing--60)}#main .plugin-section:last-of-type{margin-bottom:0}#main .plugin-section .section-header{align-items:center;column-gap:10px;display:flex;justify-content:space-between;margin-bottom:var(--wp--style--block-gap)}#main .plugin-section .section-header>h2{margin-bottom:0}#main .plugin-section .section-link{align-self:center;flex:0 0 auto;text-decoration:underline}.pagination .nav-links{margin-top:var(--wp--style--block-gap);padding-top:var(--wp--style--block-gap);text-align:center}.pagination .nav-links a{text-decoration:none}.pagination .nav-links .page-numbers{cursor:pointer;display:inline-block;min-width:2em;padding:8px;text-align:center}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:auto;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{display:inline-block;font-size:medium;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{font-weight:700}.pagination .nav-links span.page-numbers.current{text-decoration:underline}@keyframes favme-anime{0%{font-size:var(--wp--preset--font-size--large);opacity:1;-webkit-text-stroke-color:#0000}25%{color:#fff;font-size:var(--wp--preset--font-size--small);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}75%{color:#fff;font-size:var(--wp--preset--font-size--large);opacity:.6;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:#dc3232}to{font-size:var(--wp--preset--font-size--normal);opacity:1;-webkit-text-stroke-color:#0000}}.plugin-favorite{height:calc(var(--wp--custom--button--spacing--padding--top)*2 + var(--wp--preset--font-size--normal)*2);text-align:center;vertical-align:top;width:36px}.plugin-favorite .plugin-favorite-heart{align-items:center;background:none;border:0;border-radius:0;box-shadow:none;color:#cbcdce;cursor:pointer;display:flex;font-size:var(--wp--preset--font-size--large);height:100%;justify-content:center;line-height:1;margin:0;outline:none;padding:0;text-decoration:none}.plugin-favorite .plugin-favorite-heart.favorited{color:#dc3232}.plugin-favorite .plugin-favorite-heart:focus,.plugin-favorite .plugin-favorite-heart:hover{color:var(----wp--preset--color--charcoal-2);text-decoration:none}.plugin-favorite .plugin-favorite-heart:after{content:"\f487";font-family:dashicons;vertical-align:top}.plugin-banner img{aspect-ratio:3.089;border-radius:var(--wp--custom--button--border--radius);display:block;margin:0 auto var(--wp--preset--spacing--30);width:100%}@keyframes hideAnimation{to{visibility:hidden}}.categorization .help{color:var(--wp--preset--color--charcoal-4);display:inline-block;font-size:.8rem;margin-top:0}.categorization label{display:block;font-weight:700}.categorization input{width:100%}.categorization .success-msg{background:#eff7ed;border:solid #64b450;border-width:0 0 0 5px;font-size:.8rem;margin-left:1rem;opacity:0;overflow:auto;padding:.1rem .6rem .2rem;position:relative;transition:visibility 0s,opacity .5s linear;-webkit-user-select:none;user-select:none;visibility:hidden}.categorization .success-msg.saved{animation:hideAnimation 0s ease-in 5s;animation-fill-mode:forwards;opacity:1;visibility:visible}.plugin-changelog code{font-size:var(--wp--preset--font-size--small)}.plugin-developers .contributors-list li{align-items:center;display:flex;padding-bottom:var(--wp--style--block-gap)}@media screen and (min-width:500px){.plugin-developers .contributors-list{display:flex;flex-wrap:wrap}.plugin-developers .contributors-list li{padding-bottom:unset;width:50%}}.plugin-faq dl{border-bottom:1px solid var(--wp--preset--color--light-grey-1)}.plugin-faq dt{border-top:1px solid var(--wp--preset--color--light-grey-1);cursor:pointer;padding:1rem 0}.plugin-faq dt:before{content:"\f347";float:right;font-family:dashicons;margin:0 1rem}.plugin-faq dt.open:before{content:"\f343"}.plugin-faq dt .button-link{display:inherit;text-align:inherit}.plugin-faq dt .button-link.no-focus{box-shadow:none;outline:none}.plugin-faq dt h3{color:var(--wp--custom--link--color--text);display:inline;font-size:var(--wp--preset--font-size--normal);font-weight:400;margin-bottom:0;margin-top:0!important;text-decoration:underline}.plugin-faq dt h3 button{all:inherit;max-width:calc(100% - 60px)}.plugin-faq dt h3 button:focus,.plugin-faq dt h3 button:hover{text-decoration:underline}.plugin-faq dd{display:none;margin:0 0 1rem}.no-js .plugin-faq dd{display:block}.plugin-faq dd p{margin:0}.plugin-faq dd p+p{margin-top:1rem}.image-gallery{-webkit-user-select:none;user-select:none}.image-gallery-content{position:relative}.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{border-color:var(--wp--preset--color--light-grey-1);display:none;font-size:48px;height:100%;position:absolute;top:0;transition:background .1s ease,border .1s ease;z-index:4}@media (max-width:768px){.image-gallery-content .image-gallery-left-nav,.image-gallery-content .image-gallery-right-nav{font-size:3.4em}}@media (min-width:768px){.image-gallery-content .image-gallery-left-nav:hover,.image-gallery-content .image-gallery-right-nav:hover{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);opacity:.8}}.image-gallery-content .image-gallery-left-nav:before,.image-gallery-content .image-gallery-right-nav:before{font-family:dashicons;position:relative}.image-gallery-content .image-gallery-left-nav{left:0}.image-gallery-content .image-gallery-left-nav:before{content:"\f341"}.image-gallery-content .image-gallery-left-nav:hover{margin-left:-1px}.image-gallery-content .image-gallery-right-nav{right:0}.image-gallery-content .image-gallery-right-nav:before{content:"\f345"}.image-gallery-content .image-gallery-right-nav:hover{margin-right:-1px}.image-gallery-content:hover .image-gallery-left-nav,.image-gallery-content:hover .image-gallery-right-nav{display:block}.image-gallery-slides{border:1px solid #eee;line-height:0;overflow:hidden;position:relative;white-space:nowrap}.image-gallery-slide{left:0;position:absolute;top:0;width:100%}.image-gallery-slide.center{position:relative}.image-gallery-slide .image-gallery-image{margin:0}.image-gallery-slide img{display:block;margin:0 auto}.image-gallery-slide .image-gallery-description{background:var(--wp--preset--color--light-grey-2);color:var(--wp--preset--color--charcoal-1);font-size:var(--wp--preset--font-size--small);line-height:1.5;padding:10px 20px;white-space:normal}@media (max-width:768px){.image-gallery-slide .image-gallery-description{padding:8px 15px}}.image-gallery-thumbnails{background:#fff;margin-top:5px}.image-gallery-thumbnails .image-gallery-thumbnails-container{cursor:pointer;text-align:center;white-space:nowrap}.image-gallery-thumbnail{border:1px solid #eee;display:table-cell;margin-right:5px;max-height:100px;overflow:hidden}.image-gallery-thumbnail .image-gallery-image{margin:0}.image-gallery-thumbnail img{vertical-align:middle;width:100px}@media (max-width:768px){.image-gallery-thumbnail img{width:75px}}.image-gallery-thumbnail:hover{box-shadow:0 1px 8px #0000004d}.image-gallery-thumbnail.active{border:1px solid #337ab7}.image-gallery-thumbnail-label{color:#222;font-size:1em}@media (max-width:768px){.image-gallery-thumbnail-label{font-size:.8em}}.image-gallery-index{background:#0006;bottom:0;color:#fff;line-height:1;padding:10px 20px;position:absolute;right:0;z-index:4}.plugin-reviews{list-style-type:none;margin:0;padding:0}.plugin-reviews .plugin-review{border-bottom:1px solid var(--wp--preset--color--light-grey-1);margin:2rem 0 1rem;padding-bottom:1rem}.plugin-reviews .plugin-review a{text-decoration:none}.plugin-reviews .plugin-review:first-child{margin-top:0}.plugin-reviews .plugin-review .header-top{display:flex}.plugin-reviews .plugin-review .header-top .wporg-ratings{flex-shrink:0}.plugin-reviews .plugin-review .header-bottom{display:flex;margin-top:4px}.plugin-reviews .review-avatar{display:none}.plugin-reviews .review,.plugin-reviews .review-author,.plugin-reviews .wporg-ratings{display:inline-block;vertical-align:top}.plugin-reviews .review-header{margin:0 0 .5rem}.plugin-reviews .review-title{font-size:var(--wp--preset--font-size--normal);font-weight:500;margin:2px 0 0 12px!important;text-transform:inherit}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{font-size:var(--wp--preset--font-size--extra-small);line-height:1.25}.plugin-reviews .review-date,.plugin-reviews .review-replies{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--extra-small);margin-left:12px}.plugin-reviews .review-replies:before{content:"•";margin-right:12px}.plugin-reviews .review-content{margin:1em 0}@media screen and (min-width:737px){.plugin-reviews .review-avatar{display:inline-block;vertical-align:top}.plugin-reviews .review-avatar .avatar{margin-right:1rem}.plugin-reviews .review{width:calc(100% - 60px - 1rem)}.plugin-reviews .review-header{margin:0}.plugin-reviews .review-author,.plugin-reviews .review-date,.plugin-reviews .review-replies{line-height:1}}.plugin-reviews .reviews-link{display:inline-block;font-size:var(--wp--preset--font-size--small);text-decoration:none}.plugin-reviews .reviews-link:after{content:"\f345";float:right;font-family:dashicons;padding-left:5px;position:relative;top:1px;vertical-align:text-top}.plugin-screenshots{list-style-type:none;margin:0;padding:0}.plugin-screenshots .image-gallery-content{display:table;width:100%}.plugin-screenshots .image-gallery-slides{display:table-cell;max-height:600px}.plugin-screenshots .image-gallery-image img{max-height:550px;max-width:100%}.plugin-screenshots .image-gallery-thumbnail{vertical-align:top}.plugin-screenshots .image-gallery-thumbnail img{max-height:100px}.plugin-screenshots .image-gallery-thumbnails{overflow:hidden}.download-history-stats td{text-align:right}.previous-versions{max-width:60%}@media screen and (min-width:737px){.previous-versions{height:32px;vertical-align:middle}}hr{margin:2.5rem auto}.section h1:nth-child(2),.section h2:nth-child(2),.section h3:nth-child(2),.section h4:nth-child(2),.section h5:nth-child(2),.section h6:nth-child(2){margin-top:0}.section-heading{font-family:var(--wp--preset--font-family--inter)!important;font-size:var(--wp--preset--font-size--heading-5)!important;font-style:normal;font-weight:600;line-height:var(--wp--custom--heading--level-5--typography--line-height)}.section-intro{color:var(--wp--preset--color--charcoal-4);font-size:var(--wp--preset--font-size--small);margin-bottom:var(--wp--preset--spacing--20);margin-top:var(--wp--preset--spacing--10)}.wporg-spinner{--local-size:16px;--spinner-color:var(--wp--custom--spinner--color,var(--wp--preset--color--blueberry-1,currentColor));--background-stroke-color:#ddd;background-color:initial;display:inline-block;height:var(--local-size);position:relative;width:var(--local-size)}.wporg-spinner:before{border:1.5px solid var(--background-stroke-color);border-radius:50%}.wporg-spinner:after,.wporg-spinner:before{box-sizing:border-box;content:"";display:block;height:100%;width:100%}.wporg-spinner:after{animation:wporg-spinner-rotate 1.4s linear infinite;border-bottom:1.5px solid #0000;border-left:1.5px solid #0000;border-radius:50%;border-right:1.5px solid #0000;border-right-color:var(--spinner-color);border-top:1.5px solid #0000;border-top-color:var(--spinner-color);left:0;position:absolute;top:0;transform-origin:center}@keyframes wporg-spinner-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.type-plugin .plugin-notice{margin-top:0}.type-plugin .plugin-header{border-bottom:0;padding-top:var(--wp--preset--spacing--40)}.type-plugin .plugin-header:after,.type-plugin .plugin-header:before{content:"";display:table;table-layout:fixed}.type-plugin .plugin-header:after{clear:both}.type-plugin .plugin-header .entry-heading-container{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width:599px){.type-plugin .plugin-header .entry-heading-container{--wp--custom--button--spacing--padding--top:12px;--wp--custom--button--spacing--padding--bottom:12px;--wp--custom--button--spacing--padding--left:16px;--wp--custom--button--spacing--padding--right:16px}}@media screen and (min-width:700px){.type-plugin .plugin-header .entry-heading-container{flex-direction:row}}.type-plugin .plugin-header .entry-heading-container>:first-child{align-items:center;display:flex;flex:1}.type-plugin .plugin-header .plugin-actions{align-items:center;display:flex;gap:16px;margin-top:var(--wp--style--block-gap)}@media screen and (min-width:700px){.type-plugin .plugin-header .plugin-actions{margin-top:0;margin-inline-start:1rem}}.type-plugin .plugin-header .plugin-actions>.button,.type-plugin .plugin-header .plugin-actions>div{display:inline-block;text-align:center}@media screen and (max-width:34em){.type-plugin .plugin-header .plugin-actions>.button.download-button{display:none}}.type-plugin .plugin-header .plugin-title{clear:none;font-size:var(--wp--preset--font-size--heading-3);font-weight:400;line-height:var(--wp--custom--heading--level-3--typography--line-height);margin:0}.type-plugin .plugin-header .plugin-title a{color:inherit;text-decoration:none}.type-plugin .plugin-header .plugin-title a:hover{text-decoration:underline}.type-plugin .plugin-header .byline{color:var(--wp--preset--color--charcoal-4);display:block;margin-top:4px}.type-plugin .plugin-banner+.plugin-header{padding-top:0}.type-plugin .plugin-banner+.plugin-header>.notice:first-of-type{margin-top:0}.type-plugin .tabs{border-bottom:1px solid var(--wp--preset--color--light-grey-1);list-style:none;margin:0}.type-plugin .tabs li{border:1px solid #0000;display:inline-block;font-size:.9rem;margin-bottom:-1px;transition:background .2s ease}.type-plugin .tabs li a{background:#fff;border:0;color:var(--wp--preset--color--charcoal-1);display:block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 1.25rem;text-decoration:none}.type-plugin .tabs li a.active,.type-plugin .tabs li a:hover{background:var(--wp--preset--color--light-grey-2)!important}.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:1px solid var(--wp--preset--color--light-grey-1)}@media screen and (max-width:38em){.type-plugin .tabs{border-top:1px solid var(--wp--preset--color--light-grey-1)}.type-plugin .tabs li{display:block;margin-bottom:1px}.type-plugin .tabs li,.type-plugin .tabs li.active,.type-plugin .tabs li:hover{border:none;border-bottom:1px solid var(--wp--preset--color--light-grey-1)}}@media screen and (min-width:737px){.type-plugin .entry-content{float:left;padding:0;width:65%}}.type-plugin .entry-content>div,.type-plugin .entry-content>div~button{border:0;display:none}.type-plugin .entry-content ol>li>p,.type-plugin .entry-content ul>li>p{margin:0}.type-plugin .entry-content #admin{display:block!important}.type-plugin .plugin-blocks-list{list-style:none;margin-left:0;padding-left:0}.type-plugin .plugin-blocks-list .plugin-blocks-list-item{display:grid;grid-template-columns:auto 1fr;margin-bottom:var(--wp--style--block-gap)}.type-plugin .plugin-blocks-list .block-icon{border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;display:inline-block;height:3.5rem;line-height:16px;margin-right:var(--wp--style--block-gap);padding:var(--wp--style--block-gap);width:3.5rem}.type-plugin .plugin-blocks-list .block-icon.dashicons{color:inherit}.type-plugin .plugin-blocks-list .block-icon.dashicons:before{margin-left:-3px}.type-plugin .plugin-blocks-list .block-icon svg{height:16px;width:16px;fill:currentColor;margin-left:-1px}.type-plugin .plugin-blocks-list .block-title{align-self:center;font-weight:700}.type-plugin .plugin-blocks-list .has-description .block-icon{grid-row:1/span 2}.type-plugin .plugin-blocks-list .has-description .block-title{margin-bottom:.4em}.type-plugin span#description,.type-plugin span#developers,.type-plugin span#installation,.type-plugin span#releases,.type-plugin span#reviews{position:fixed}.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation,.type-plugin span#releases:target~#section-links .tabs li#tablink-releases,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews{background:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-bottom:0;padding-bottom:1px}@media screen and (max-width:38em){.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced.active,.type-plugin span#advanced.displayed~#section-links .tabs li#tablink-advanced:hover,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers.active,.type-plugin span#developers:target~#section-links .tabs li#tablink-developers:hover,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation.active,.type-plugin span#installation:target~#section-links .tabs li#tablink-installation:hover,.type-plugin span#releases:target~#section-links .tabs li#tablink-releases.active,.type-plugin span#releases:target~#section-links .tabs li#tablink-releases:hover,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description.active,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~span#advanced:not(.displayed)~#section-links .tabs li#tablink-description:hover,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews.active,.type-plugin span#reviews:target~#section-links .tabs li#tablink-reviews:hover{padding-bottom:1px!important}}.type-plugin span#section-links{display:flex;flex-flow:row wrap;margin-top:var(--wp--preset--spacing--30)}.type-plugin span#section-links .tabs{flex:1 1 auto;padding-left:0}@media screen and (max-width:38em){.type-plugin span#section-links .tabs{border:1px solid var(--wp--preset--color--light-grey-1)!important}.type-plugin span#section-links .tabs li{border:none!important}.type-plugin span#section-links{display:block}}.type-plugin #link-support{align-self:flex-end;border-bottom:1px solid var(--wp--preset--color--light-grey-1);flex:0 0 auto;font-size:.9rem}.type-plugin #link-support a{display:inline-block;font-size:var(--wp--preset--font-size--normal);padding:.64rem 0 .64rem 1.25rem}@media screen and (max-width:38em){.type-plugin #link-support{border-bottom:0;display:block;width:100%}.type-plugin #link-support a{padding-right:1.25rem}}.type-plugin span#developers:target~.entry-content #tab-changelog,.type-plugin span#developers:target~.entry-content #tab-developers,.type-plugin span#developers:target~.entry-content #tab-developers .plugin-development,.type-plugin span#developers:target~.entry-content #tab-developers~button,.type-plugin span#installation:target~.entry-content #tab-installation,.type-plugin span#releases:target~.entry-content #tab-releases,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #blocks,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #faq,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #screenshots,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #tab-description,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #tab-developers,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~span#releases:not(:target)~.entry-content #tab-developers~button,.type-plugin span#reviews:target~.entry-content #tab-reviews{display:block}.type-plugin span#developers:target~.entry-content #tab-developers .plugin-contributors,.type-plugin span#installation:target~.entry-meta .plugin-contributors,.type-plugin span#releases:target~.entry-meta,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-content #tab-developers .plugin-development,.type-plugin span#reviews:not(:target)~span#installation:not(:target)~span#developers:not(:target)~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-contributors,.type-plugin span#reviews:target~.entry-meta .plugin-donate,.type-plugin span#reviews:target~.entry-meta .plugin-meta,.type-plugin span#reviews:target~.entry-meta .plugin-support{display:none}.type-plugin span#releases:target~.entry-content{width:100%}@media screen and (min-width:737px){.type-plugin .entry-content,.type-plugin .entry-meta{padding-left:0;padding-right:0}.type-plugin .entry-meta{float:right;width:30%}}.type-plugin .plugin-danger-zone h4{margin-top:var(--wp--preset--spacing--60)}.plugin-releases-listing{border-collapse:collapse;width:100%}.plugin-releases-listing tbody td:nth-child(4) div{font-size:14px}.plugin-releases-listing-actions{display:flex;flex-direction:column;gap:8px}@media screen and (min-width:34em){.plugin-releases-listing-actions{flex-direction:row}}.plugin-adopt-me{background:#e6f4fa;margin-top:36px;padding:12px}.plugin-adopt-me .widget-title{margin-top:0}.plugin-adopt-me p{margin-bottom:0}.widget.plugin-categorization{margin-top:var(--wp--style--block-gap)}.widget.plugin-categorization .widget-head h2{font-size:var(--wp--preset--font-size--heading-4);margin-bottom:.2rem;margin-top:0}.widget.plugin-categorization .widget-head a{font-size:var(--wp--preset--font-size--small)}.widget.plugin-categorization .widget-head a[href=""]{display:none}.widget.plugin-categorization p{font-size:var(--wp--preset--font-size--small);margin-top:.5rem}.widget.plugin-categorization~.plugin-meta li:first-child{border-top:1px solid var(--wp--preset--color--light-grey-1)}.committer-list,.support-rep-list{list-style:none;margin:0;padding:0}.committer-list li,.support-rep-list li{padding-bottom:.5rem}.committer-list li .remove,.support-rep-list li .remove{color:red;visibility:hidden}.committer-list li:hover .remove,.support-rep-list li:hover .remove{visibility:visible}.committer-list .avatar,.support-rep-list .avatar{float:left;margin-right:10px}.committer-list .spinner,.support-rep-list .spinner{position:relative}.committer-list .spinner:after,.support-rep-list .spinner:after{background:url(/wp-admin/images/spinner.gif) no-repeat 50%;background-size:20px 20px;content:"";display:block;height:20px;margin:-10px -10px 0 0;position:absolute;right:-50%;top:50%;transform:translateZ(0);width:20px}@media (min-resolution:120dpi),print{.committer-list .spinner:after,.support-rep-list .spinner:after{background-image:url(/wp-admin/images/spinner-2x.gif)}}.committer-list .new,.support-rep-list .new{margin-top:var(--wp--style--block-gap)}.plugin-contributors.read-more{border-bottom:1px solid var(--wp--preset--color--light-grey-1);max-height:200px;overflow:hidden;padding-bottom:1px}.plugin-contributors.read-more.toggled{max-height:none}.no-js .plugin-contributors.read-more{max-height:none;overflow:auto}.contributors-list{list-style-type:none;margin:0;padding:0}.contributors-list li{align-items:center;display:flex;margin-bottom:1rem}.contributors-list .avatar{float:left;margin-right:10px}.plugin-meta{font-size:var(--wp--preset--font-size--small);margin-top:var(--wp--style--block-gap)}.plugin-meta ul{list-style-type:none;margin:0;padding:0}.plugin-meta li{border-top:1px solid var(--wp--preset--color--light-grey-1);display:inline-block;padding:.5rem 0;position:relative;width:100%}.plugin-meta li strong{float:right;font-weight:500}.plugin-meta li .plugin-admin{font-size:var(--wp--preset--font-size--normal);font-weight:400}.plugin-meta li:first-child{border-top:0}.plugin-meta .languages,.plugin-meta .tags{float:right;text-align:right}.plugin-meta .tags{width:60%}.plugin-meta .languages button{font-size:var(--wp--preset--font-size--small);outline:revert}.plugin-meta .languages .popover{margin-top:8px}.plugin-meta .languages .popover-trigger{color:var(--wp--custom--link--color--text);text-decoration:underline}.plugin-meta .languages .popover-trigger:hover{text-decoration:underline}.plugin-meta [rel=tag]{background:var(--wp--preset--color--blueberry-4);border-radius:2px;color:var(--wp--preset--color--charcoal-1);display:inline-block;font-size:var(--wp--preset--font-size--extra-small);margin:2px;max-width:95%;overflow:hidden;padding:3px 6px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:auto}.plugin-meta [rel=tag]:hover{text-decoration:underline}.popover{background-color:#fff;border:1px solid var(--wp--preset--color--light-grey-1);border-radius:2px;box-shadow:0 2px 10px #0000001a;display:none;left:0;margin-top:10px;max-width:300px;padding:1em 1em 2em;position:absolute;width:100%;z-index:100}.popover.is-top-right{left:auto;right:0}.popover.is-visible{display:block}.popover .popover-close{bottom:.5em;color:var(--wp--custom--link--color--text);font-size:small;position:absolute;right:.6em}.popover .popover-close:active,.popover .popover-close:focus,.popover .popover-close:hover{text-decoration:underline}.popover .popover-arrow{border:10px solid #0000;border-bottom:10px solid #ccc;border-top:none;height:0;position:absolute;right:20px;top:-10px;width:0;z-index:-1}.popover .popover-arrow:after{border:10px solid #0000;border-bottom:10px solid #fff;border-top:none;content:"";left:-10px;position:absolute;top:2px}.popover .popover-inner{text-align:left}.popover .popover-inner p:first-child{margin-top:0}.popover .popover-inner p:last-child{margin-bottom:0}.plugin-support .counter-container{margin-bottom:1rem;position:relative}.plugin-support .counter-back,.plugin-support .counter-bar{display:inline-block;height:30px;vertical-align:middle}.plugin-support .counter-back{background-color:var(--wp--preset--color--light-grey-2);width:100%}.plugin-support .counter-bar{background-color:var(--wp--preset--color--acid-green-2);display:block}.plugin-support .counter-count{font-size:var(--wp--preset--font-size--extra-small);left:8px;position:absolute;top:8px;width:100%;width:calc(100% - 8px)}@media screen and (min-width:737px){.plugin-support .counter-count{top:5px}}.home .widget,.widget-area.home .widget{display:inline-block;font-size:var(--wp--preset--font-size--small);margin:0;margin:var(--wp--style--block-gap);vertical-align:top;width:auto}@media screen and (min-width:737px){.home .widget,.widget-area.home .widget{margin:0;width:30%}.home .widget:first-child,.widget-area.home .widget:first-child{margin-right:5%}.home .widget:last-child,.widget-area.home .widget:last-child{margin-left:5%}}.home .widget select,.widget-area.home .widget select{max-width:100%}.entry-meta .widget-title{font-size:var(--wp--preset--font-size--heading-4)}body.single.single-plugin .entry-meta{font-size:var(--wp--preset--font-size--normal)}.widget-area{margin:0 auto;padding:var(--wp--preset--spacing--40) 0}.widget-area .widget-title{font-size:var(--wp--preset--font-size--heading-1);font-weight:var(--wp--custom--heading--typography--font-weight);margin-top:var(--wp--preset--spacing--50)}.widget-area .textwidget{text-wrap:pretty} \ No newline at end of file diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/functions.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/functions.php index 04720253b3..bd3e607673 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/functions.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/functions.php @@ -12,19 +12,32 @@ use WordPressdotorg\Plugin_Directory\Plugin_Directory; use WordPressdotorg\Plugin_Directory\Template; +/** + * Custom template tags for this theme. + */ +require get_stylesheet_directory() . '/inc/template-tags.php'; + // Block Files -require_once( __DIR__ . '/src/blocks/archive-page/index.php' ); -require_once( __DIR__ . '/src/blocks/category-navigation/index.php' ); -require_once( __DIR__ . '/src/blocks/filter-bar/index.php' ); -require_once( __DIR__ . '/src/blocks/front-page/index.php' ); -require_once( __DIR__ . '/src/blocks/search-page/index.php' ); -require_once( __DIR__ . '/src/blocks/single-plugin/index.php' ); -require_once( __DIR__ . '/src/blocks/plugin-card/index.php' ); +require_once __DIR__ . '/src/blocks/archive-page/index.php'; +require_once __DIR__ . '/src/blocks/category-navigation/index.php'; +require_once __DIR__ . '/src/blocks/filter-bar/index.php'; +require_once __DIR__ . '/src/blocks/front-page/index.php'; +require_once __DIR__ . '/src/blocks/search-page/index.php'; +require_once __DIR__ . '/src/blocks/single-plugin/index.php'; +require_once __DIR__ . '/src/blocks/plugin-card/index.php'; +require_once __DIR__ . '/src/blocks/release-checks/index.php'; +require_once __DIR__ . '/src/blocks/release-commits/index.php'; +require_once __DIR__ . '/src/blocks/release-draft/index.php'; +require_once __DIR__ . '/src/blocks/card/index.php'; +require_once __DIR__ . '/src/blocks/release-publish/index.php'; +require_once __DIR__ . '/src/blocks/release-result-item/index.php'; +require_once __DIR__ . '/src/blocks/release-menu-options/index.php'; +require_once __DIR__ . '/src/blocks/release-page/index.php'; // Block Configs -require_once( __DIR__ . '/inc/block-bindings.php' ); -require_once( __DIR__ . '/inc/block-config.php' ); +require_once __DIR__ . '/inc/block-bindings.php'; +require_once __DIR__ . '/inc/block-config.php'; /** * Sets up theme defaults and registers support for various WordPress features. @@ -48,13 +61,16 @@ function setup() { * Switch default core markup for search form, comment form, and comments * to output valid HTML5. */ - add_theme_support( 'html5', array( - 'search-form', - 'comment-form', - 'comment-list', - 'gallery', - 'caption', - ) ); + add_theme_support( + 'html5', + array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); add_theme_support( 'wp4-styles' ); } @@ -87,11 +103,11 @@ function content_width() { * Enqueue scripts and styles. */ function scripts() { - wp_enqueue_style( 'wporg-style', get_theme_file_uri( '/css/style.css' ), [ 'dashicons', 'open-sans' ], filemtime( __DIR__ . '/css/style.css' ) ); + wp_enqueue_style( 'wporg-style', get_theme_file_uri( '/css/style.css' ), array( 'dashicons', 'open-sans' ), filemtime( __DIR__ . '/css/style.css' ) ); wp_style_add_data( 'wporg-style', 'rtl', 'replace' ); - wp_enqueue_style( 'wporg-parent-2021-style', get_theme_root_uri() . '/wporg-parent-2021/build/style.css', [ 'wporg-global-fonts' ] ); - wp_enqueue_style( 'wporg-parent-2021-block-styles', get_theme_root_uri() . '/wporg-parent-2021/build/block-styles.css', [ 'wporg-global-fonts' ] ); + wp_enqueue_style( 'wporg-parent-2021-style', get_theme_root_uri() . '/wporg-parent-2021/build/style.css', array( 'wporg-global-fonts' ) ); + wp_enqueue_style( 'wporg-parent-2021-block-styles', get_theme_root_uri() . '/wporg-parent-2021/build/block-styles.css', array( 'wporg-global-fonts' ) ); // Make jQuery a footer script. wp_scripts()->add_data( 'jquery', 'group', 1 ); @@ -108,11 +124,15 @@ function scripts() { $post = get_post(); if ( $post && current_user_can( 'plugin_admin_edit', $post ) ) { wp_enqueue_script( 'wporg-plugins-categorization', get_stylesheet_directory_uri() . '/js/section-categorization.js', array( 'jquery' ), filemtime( __DIR__ . '/js/section-categorization.js' ), true ); - wp_localize_script( 'wporg-plugins-categorization', 'categorizationOptions', [ - 'restUrl' => get_rest_url(), - 'restNonce' => wp_create_nonce( 'wp_rest' ), - 'pluginSlug' => $post->post_name, - ] ); + wp_localize_script( + 'wporg-plugins-categorization', + 'categorizationOptions', + array( + 'restUrl' => get_rest_url(), + 'restNonce' => wp_create_nonce( 'wp_rest' ), + 'pluginSlug' => $post->post_name, + ) + ); } } @@ -120,18 +140,22 @@ function scripts() { wp_enqueue_script( 'google-charts-loader', 'https://www.gstatic.com/charts/loader.js', array(), false, true ); wp_enqueue_script( 'wporg-plugins-stats', get_stylesheet_directory_uri() . '/js/stats.js', array( 'jquery', 'google-charts-loader' ), '20220929', true ); - wp_localize_script( 'wporg-plugins-stats', 'pluginStats', array( - 'slug' => is_singular( 'plugin' ) ? get_queried_object()->post_name : '', - 'l10n' => array( - 'date' => __( 'Date', 'wporg-plugins' ), - 'downloads' => __( 'Downloads', 'wporg-plugins' ), - 'noData' => __( 'No data yet', 'wporg-plugins' ), - 'today' => __( 'Today', 'wporg-plugins' ), - 'yesterday' => __( 'Yesterday', 'wporg-plugins' ), - 'last_week' => __( 'Last 7 Days', 'wporg-plugins' ), - 'all_time' => __( 'All Time', 'wporg-plugins' ), - ), - ) ); + wp_localize_script( + 'wporg-plugins-stats', + 'pluginStats', + array( + 'slug' => is_singular( 'plugin' ) ? get_queried_object()->post_name : '', + 'l10n' => array( + 'date' => __( 'Date', 'wporg-plugins' ), + 'downloads' => __( 'Downloads', 'wporg-plugins' ), + 'noData' => __( 'No data yet', 'wporg-plugins' ), + 'today' => __( 'Today', 'wporg-plugins' ), + 'yesterday' => __( 'Yesterday', 'wporg-plugins' ), + 'last_week' => __( 'Last 7 Days', 'wporg-plugins' ), + 'all_time' => __( 'All Time', 'wporg-plugins' ), + ), + ) + ); } // The plugin submission page: /developers/add/ @@ -141,9 +165,9 @@ function scripts() { // React is currently only used on detail pages. if ( is_single() ) { - $assets_path = dirname( __FILE__ ) . '/js/build/theme.asset.php'; + $assets_path = __DIR__ . '/js/build/theme.asset.php'; if ( file_exists( $assets_path ) ) { - $script_info = require( $assets_path ); + $script_info = require $assets_path; wp_enqueue_script( 'wporg-plugins-client', get_stylesheet_directory_uri() . '/js/build/theme.js', @@ -155,7 +179,7 @@ function scripts() { 'wporg-plugins-client', 'localeData', array( - '' => array( + '' => array( 'Plural-Forms' => _x( 'nplurals=2; plural=n != 1;', 'plural forms', 'wporg-plugins' ), 'Language' => _x( 'en', 'language (fr, fr_CA)', 'wporg-plugins' ), 'localeSlug' => _x( 'en', 'locale slug', 'wporg-plugins' ), @@ -185,7 +209,7 @@ function scripts() { * @return string */ function loader_src( $src, $handle ) { - $cdn_urls = [ + $cdn_urls = array( 'dashicons', 'wp-embed', 'jquery-core', @@ -198,7 +222,7 @@ function loader_src( $src, $handle ) { 'wporg-plugins-stats', 'wporg-plugins-client', 'wporg-plugins-faq', - ]; + ); if ( defined( 'WPORG_SANDBOXED' ) && WPORG_SANDBOXED ) { return $src; @@ -210,7 +234,7 @@ function loader_src( $src, $handle ) { } // Remove version argument. - if ( in_array( $handle, [ 'open-sans' ], true ) ) { + if ( in_array( $handle, array( 'open-sans' ), true ) ) { $src = remove_query_arg( 'ver', $src ); } @@ -234,7 +258,7 @@ function content() { * @return array */ function custom_body_class( $classes ) { - $post = get_post(); + $post = get_post(); $classes[] = 'no-js'; @@ -324,13 +348,13 @@ function social_meta_data() { $site_title = function_exists( '\WordPressdotorg\site_brand' ) ? \WordPressdotorg\site_brand() : 'WordPress.org'; if ( is_front_page() ) { - $og_fields = [ + $og_fields = array( 'og:title' => __( 'WordPress Plugins', 'wporg-plugins' ), 'og:description' => __( 'Choose from thousands of free plugins to build, customize, and enhance your WordPress website.', 'wporg-plugins' ), 'og:site_name' => $site_title, 'og:type' => 'website', 'og:url' => home_url(), - ]; + ); foreach ( $og_fields as $property => $content ) { printf( '' . "\n", @@ -385,13 +409,16 @@ function social_meta_data() { function strong_archive_title( $term ) { return '' . $term . ''; } -add_action( 'wp_head', function() { - add_filter( 'post_type_archive_title', __NAMESPACE__ . '\strong_archive_title' ); - add_filter( 'single_term_title', __NAMESPACE__ . '\strong_archive_title' ); - add_filter( 'single_cat_title', __NAMESPACE__ . '\strong_archive_title' ); - add_filter( 'single_tag_title', __NAMESPACE__ . '\strong_archive_title' ); - add_filter( 'get_the_date', __NAMESPACE__ . '\strong_archive_title' ); -} ); +add_action( + 'wp_head', + function () { + add_filter( 'post_type_archive_title', __NAMESPACE__ . '\strong_archive_title' ); + add_filter( 'single_term_title', __NAMESPACE__ . '\strong_archive_title' ); + add_filter( 'single_cat_title', __NAMESPACE__ . '\strong_archive_title' ); + add_filter( 'single_tag_title', __NAMESPACE__ . '\strong_archive_title' ); + add_filter( 'get_the_date', __NAMESPACE__ . '\strong_archive_title' ); + } +); /** * Filter the archive title to use custom string for business model. @@ -402,7 +429,7 @@ function strong_archive_title( $term ) { function update_archive_title( $title ) { if ( is_tax( 'plugin_business_model', 'community' ) ) { return __( 'Community plugins', 'wporg-plugins' ); - } else if ( is_tax( 'plugin_business_model', 'commercial' ) ) { + } elseif ( is_tax( 'plugin_business_model', 'commercial' ) ) { return __( 'Commercial plugins', 'wporg-plugins' ); } @@ -422,7 +449,7 @@ function update_archive_description( $description ) { // The description in the DB has

    tags. Add them manually for consistency. if ( is_tax( 'plugin_business_model', 'community' ) ) { $contents = '

    ' . __( 'These plugins are developed and supported by a community.', 'wporg-plugins' ) . '

    '; - } else if ( is_tax( 'plugin_business_model', 'commercial' ) ) { + } elseif ( is_tax( 'plugin_business_model', 'commercial' ) ) { $contents = '

    ' . __( 'These plugins are free, but also have paid versions available.', 'wporg-plugins' ) . '

    '; } @@ -434,6 +461,274 @@ function update_archive_description( $description ) { add_filter( 'get_the_archive_description', __NAMESPACE__ . '\update_archive_description' ); /** - * Custom template tags for this theme. + * Get's the plugin post object. + * + * @return WP_Post The plugin post object. */ -require get_stylesheet_directory() . '/inc/template-tags.php'; +function get_plugin() { + global $post; + + if ( 'plugin_release' === $post->post_type ) { + return get_post( $post->post_parent ); + } + + return $post; +} + +/** + * Filter the archive title to use custom string for business model. + * + * @return string Plugin slug. + */ +function get_plugin_slug() { + $plugin = get_plugin(); + + if ( ! $plugin ) { + return ''; + } + + return $plugin->post_name; +} + +/** + * Get the releases for a plugin. + * + * @return WP_Post[] The releases for the plugin. + */ +function get_releases() { + $plugin = get_plugin(); + + $args = array( + 'post_type' => 'plugin_release', + 'posts_per_page' => -1, + 'post_parent' => $plugin->ID, + 'orderby' => 'date', + 'order' => 'DESC', + ); + + return get_posts( $args ); +} + +/** + * Get the previous release of a plugin. + * + * @param WP_Post $release_post The current release post. + * + * @return WP_Post|null The previous release of the plugin. + */ +function get_previous_release( $release_post ) { + $releases = get_releases(); + + if ( empty( $releases ) ) { + return null; + } + + // If we are draft. The first item is the latest release. + // If we only have one release and we are looking for we don't have a previous release. + if ( 'draft' === $release_post->post_status ) { + return $releases[0]; + } elseif ( count( $releases ) === 1 ) { + return null; + } + + foreach ( $releases as $key => $release ) { + if ( $release->ID === $release_post->ID ) { + if ( isset( $releases[ $key + 1 ] ) ) { + return $releases[ $key + 1 ]; + } + break; + } + } + + return null; +} + +/** + * Get the previous version of a plugin. + * + * @param WP_Post $release_post The current release post. + * + * @return string|null The previous version of the plugin. + */ +function get_previous_version( $release_post ) { + $previous_release = get_previous_release( $release_post ); + + if ( empty( $previous_release ) ) { + return null; + } + + return get_post_meta( $previous_release->ID, 'release_tag', true ); +} + +/** + * Get the latest release of a plugin. + * + * @param int $plugin_id The plugin ID. + * + * @return WP_Post|null The latest release of the plugin. + */ +function get_latest_release( $plugin_id ) { + $releases = get_releases( $plugin_id ); + + if ( empty( $releases ) ) { + return null; + } + + return $releases[0]; +} + + +/** + * Get the blueprint URL for playground testing. + * + * @param string $download_url The URL to download the plugin from. + * + * @return string The URL to load the plugin in the playground. + */ +function get_blueprint_url( $download_url ) { + /** + * Blueprint is base64 encoded to be passed as a URL parameter. + * + * @see https://wordpress.github.io/wordpress-playground/blueprints/tutorial/how-to-load-run-blueprints#base64-encoded-blueprints + */ + $blueprint = wp_json_encode( + array( + 'login' => true, + 'landingPage' => '/wp-admin/plugins.php', + 'steps' => array( + array( + 'step' => 'installPlugin', + 'pluginData' => array( + 'resource' => 'url', + 'url' => $download_url, + ), + ), + ), + ) + ); + + return 'https://playground.wordpress.net/#' . base64_encode( $blueprint ); +} + +/** + * Get the link to the revision log for a set of commits. + * + * @param array $commits The commits to get the log link for. + * + * @return string The link to the revision log. + */ +function get_revision_log_link( $commits ) { + $plugin_slug = get_plugin_slug(); + + $base_url = sprintf( + 'https://plugins.trac.wordpress.org/log/%s/trunk', + $plugin_slug + ); + + if ( count( $commits ) < 2 ) { + return $base_url; + } + + $latest_commit = reset( $commits ); + $earliest_commit = end( $commits ); + + return sprintf( + '%1$s?rev=%2$s&stop_rev=%3$s', + $base_url, + $latest_commit['revision'], + $earliest_commit['revision'], + ); +} + +/** + * Generates a Trac changeset link for a plugin. + * + * @param string $previous_version The previous version of the plugin. + * @param string $current_version The current version of the plugin. Default is 'trunk'. + * + * @return string The Trac changeset link. + */ +function get_trac_changeset_link( $previous_version, $current_version = 'trunk' ) { + $plugin_slug = get_plugin_slug(); + + $current_path = ( 'trunk' === $current_version ) + ? 'trunk' + : 'tags/' . $current_version; + + return sprintf( + 'https://plugins.trac.wordpress.org/changeset?new_path=/%1$s/%2$s&old_path=/%1$s/tags/%3$s', + $plugin_slug, + $current_path, + $previous_version + ); +} + +/** + * Get the link to the revision log for a set of commits. + * + * @param WP_Post $release_post The release post. + * + * @return string The link to the revision log. + */ +function get_revision_changeset_link( $release_post ) { + if ( empty( $release_post ) ) { + return ''; + } + + $plugin_slug = get_plugin_slug(); + $commits = get_post_meta( $release_post->ID, 'release_commit_log', true ); + + if ( empty( $commits ) ) { + return sprintf( + 'https://plugins.trac.wordpress.org/log/%s/trunk', + $plugin_slug + ); + } + + $previous_release = get_previous_release( $release_post ); + $latest_commit = reset( $commits ); + $previous_commit = end( $commits ); + + if ( ! empty( $previous_release ) ) { + $previous_commits = get_post_meta( $previous_release->ID, 'release_commit_log', true ); + + if ( ! empty( $previous_commits ) ) { + $previous_commit = max( $previous_commits ); + } + } + + return sprintf( + 'https://plugins.trac.wordpress.org/changeset?new=%2$s@%1$s/trunk&old=%3$s@%1$s/trunk', + $plugin_slug, + $earliest_commit['revision'], + $previous_commit['revision'], + ); +} + +/** + * Get the download link for a plugin. + * + * @param string $version The version of the plugin to download. + * + * @return string The download link for the plugin. + */ +function get_download_link( $version ) { + $plugin = get_plugin(); + + return Template::download_link( $plugin, $version ); +} + +/** + * Get the support URL for a plugin. + * + * @return bool Whether the can edit this plugin. + */ +function user_can_edit_plugin() { + $plugin = get_plugin(); + + if ( empty( $plugin ) ) { + return false; + } + + return current_user_can( 'plugin_admin_edit', $plugin ); +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/inc/block-config.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/inc/block-config.php index 6ad79a00d1..a28f5d2ddc 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/inc/block-config.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/inc/block-config.php @@ -13,6 +13,7 @@ add_filter( 'wporg_query_filter_options_plugin_category', __NAMESPACE__ . '\wporg_query_filter_options_plugin_category' ); add_filter( 'wporg_query_filter_in_form', __NAMESPACE__ . '\wporg_query_filter_in_form' ); add_filter( 'wporg_query_total_label', __NAMESPACE__ . '\wporg_query_total_label', 10, 2 ); +add_filter( 'query_loop_block_query_vars', __NAMESPACE__ . '\modify_block_query_var', 9, 3 ); add_filter( 'wporg_favorite_button_settings', __NAMESPACE__ . '\get_favorite_settings', 10, 2 ); add_filter( 'wporg_ratings_data', __NAMESPACE__ . '\set_rating_data', 10, 2 ); add_filter( 'render_block_core/search', __NAMESPACE__ . '\filter_search_block' ); @@ -435,3 +436,22 @@ function filter_language_suggest( $block_content ) { $html->add_class( 'is-style-prominent' ); return $html->get_updated_html(); } + +/* + * Filter the query to show only the children of the plugin. + * + * @param array $query The query arguments. + * @param string $block The block name. + * @param WP_Post $page The current page. + * + * @return array + */ +function modify_block_query_var( $query, $block, $page ) { + if ( 'plugin_release' !== $query['post_type'] ) { + return $query; + } + + $query['post_parent'] = get_the_ID(); + + return $query; +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/package.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/package.json index afdd98ec12..f51ba1653c 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/package.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/package.json @@ -7,14 +7,17 @@ "main": "index.php", "scripts": { "watch:css": "grunt watch", - "watch:js": "wp-scripts start", + "watch:js": "wp-scripts start --experimental-modules", "watch": "concurrently \"npm run watch:js\" \"npm run watch:css\"", "build:css": "grunt build", "build:old:js": "wp-scripts build client/theme.js --webpack-src-dir=client --output-path=js/build", - "build:js": "wp-scripts build", + "build:js": "wp-scripts build --experimental-modules", "build": "npm run build:css && npm run build:js", - "format:js": "wp-scripts format client", - "lint:js": "wp-scripts lint-js client", + "format:client": "wp-scripts format client", + "format:src": "wp-scripts format src", + "lint:client": "wp-scripts lint-js client", + "lint:src": "wp-scripts lint-js src", + "lint:css": "wp-scripts lint-style 'src/**/*.scss'", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/parts/release-page.html b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/parts/release-page.html new file mode 100644 index 0000000000..6e3e9eddda --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/parts/release-page.html @@ -0,0 +1,5 @@ + +
    + +
    + diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/patterns/releases-list.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/patterns/releases-list.php new file mode 100644 index 0000000000..4b1e55134d --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/patterns/releases-list.php @@ -0,0 +1,49 @@ + + + +
    + + +
    + +
    + +
    + + +
    + + + +
    + +
    + +
    + + +
    + + + + + + + + + + +

    + + + +
    + diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/block.json index bdd31bf359..458d519862 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/block.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/block.json @@ -14,4 +14,4 @@ }, "editorScript": "file:./index.js", "render": "file:./render.php" -} \ No newline at end of file +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/archive-page/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/block.json new file mode 100644 index 0000000000..7227401f8e --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/block.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/card", + "version": "0.1.0", + "title": "Release Card", + "category": "design", + "icon": "", + "description": "A block to display a card.", + "textdomain": "wporg", + "attributes": { + "title": { + "type": "string", + "default": "" + } + }, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ "postId" ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/index.php new file mode 100644 index 0000000000..2e69df2f57 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/index.php @@ -0,0 +1,22 @@ + +
    + +

    + {$block->attributes['title']} +

    + + $content +
    + +HTML; + +$output = sprintf( + '
    %2$s
    ', + wp_kses_data( get_block_wrapper_attributes() ), + $html, +); + +echo do_blocks( $output ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/style.scss new file mode 100644 index 0000000000..9036e449c1 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/card/style.scss @@ -0,0 +1,4 @@ +.wp-block-wporg-release-draft { + font-size: var(--wp--preset--font-size--small); + +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/block.json index 678ddafdd7..91ca6e8e55 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/block.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/block.json @@ -14,4 +14,4 @@ }, "editorScript": "file:./index.js", "render": "file:./render.php" -} \ No newline at end of file +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/category-navigation/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/block.json index 020c38909c..2728ee9c23 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/block.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/block.json @@ -14,4 +14,4 @@ }, "editorScript": "file:./index.js", "render": "file:./render.php" -} \ No newline at end of file +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/filter-bar/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/block.json index 930ac76239..a7c1b37f52 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/block.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/block.json @@ -14,4 +14,4 @@ }, "editorScript": "file:./index.js", "render": "file:./render.php" -} \ No newline at end of file +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/front-page/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/block.json index 772f05a5d6..8029d1c7de 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/block.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/block.json @@ -15,4 +15,4 @@ "editorScript": "file:./index.js", "render": "file:./render.php", "viewScript": "file:./view.js" -} \ No newline at end of file +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/view.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/view.js index e4f12819de..367515e0cd 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/view.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/plugin-card/view.js @@ -1,12 +1,12 @@ /** - * Binds click events to navigate on plugin card click. + * Binds click events to navigate on plugin card click. */ -document.addEventListener( 'DOMContentLoaded', function() { +document.addEventListener( 'DOMContentLoaded', function () { var cards = document.querySelectorAll( '.plugin-cards li' ); if ( cards ) { - cards.forEach( function( card ) { - card.addEventListener( 'click', function( event ) { + cards.forEach( function ( card ) { + card.addEventListener( 'click', function ( event ) { var selectedText = window.getSelection().toString(); // Keep regular anchor tag function @@ -25,6 +25,6 @@ document.addEventListener( 'DOMContentLoaded', function() { window.location.href = link; } } ); - } ) + } ); } } ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/block.json new file mode 100644 index 0000000000..ad4b2f98d5 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/block.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-checks", + "version": "0.1.0", + "title": "Release checks.", + "category": "design", + "icon": "", + "description": "A block to display release checks.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false + }, + "usesContext": [ "postId" ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/index.php new file mode 100644 index 0000000000..2d30c117b1 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/index.php @@ -0,0 +1,124 @@ +' . __( 'No issues found.', 'wporg-plugins' ) . '

    '; + } + + $output = ''; + + return $output; +} + +/** + * Get the test run message. + * + * @param object $plugin_check_errors The plugin check errors. + * + * @return string The test run message. + */ +function get_test_run_message( $plugin_check_errors ) { + $plugin_check_link = sprintf( + '%s', + esc_url( 'https://wordpress.org/plugins/plugin-check' ), + esc_html__( 'Static code analysis', 'wporg-plugins' ) + ); + + if ( $plugin_check_errors['verdict'] ) { + return sprintf( + /* translators: %1$s is a link to the code review ruleset. */ + __( '%1$s found no issues.', 'wporg-plugins' ), + $plugin_check_link + ); + } + + $result_count = count( $plugin_check_errors['results'] ); + $message = sprintf( + /* translators: %s number of issues reported from test. */ + _n( '%s issue', '%s issues', $result_count, 'wporg-plugins' ), + $result_count + ); + + return sprintf( + '
    %1$s%2$s
    ', + sprintf( + /* translators: %1$s is a link to the Plugin Check (PCP) tool. */ + __( '%1$s completed with %2$s.', 'wporg-plugins' ), + $plugin_check_link, + $message + ), + format_plugin_check_results( $plugin_check_errors['results'] ), + ); +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/render.php new file mode 100644 index 0000000000..6e857fea12 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/render.php @@ -0,0 +1,77 @@ +context['postId'] ) ) { + return; +} + +$plugin_check_errors = get_post_meta( get_post( $block->context['postId'] )->ID, 'plugin_check_result', true ); + +$heading = sprintf( + ' +

    %s

    + ', + esc_html__( 'Checks', 'wporg-plugins' ) +); + +echo do_blocks( $heading ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + +if ( empty( $plugin_check_errors ) ) { + printf( + '

    %s

    ', + esc_html__( 'No checks were run.', 'wporg-plugins' ) + ); + return; +} + +// Warnings are currently associated to the plugin post, not the release post. +$import_warnings = get_post_meta( get_plugin()->ID, '_import_warnings', true ); + +// Merge in warnings into the plugin check errors. +if ( ! empty( $import_warnings ) && ! wp_is_numeric_array( $import_warnings ) ) { + + foreach ( $import_warnings as $error_code => $error_data ) { + + // These warnings exist because they haven't release it. + // TODO: Remove the logic that sets those warnings. + if ( in_array( $error_code, array( 'stable_tag_invalid_trunk_fallback', 'stable_tag_invalid' ), true ) ) { + continue; + } + + $plugin_check_errors['results'][] = array( + 'line' => 0, + 'column' => 0, + 'type' => 'WARNING', + 'code' => $error_code, + 'message' => Readme_Validator::instance()->translate_code_to_message( $error_code, $error_data ), + 'file' => 'readme.txt', + ); + + $plugin_check_errors['verdict'] = false; + } +} + +// Create a block with the overall status. +$blocks = sprintf( + '%2$s', + $plugin_check_errors['verdict'] ? 'success' : 'warning', + get_test_run_message( $plugin_check_errors ) +); + +printf( + '', + wp_kses_data( get_block_wrapper_attributes() ), + do_blocks( $blocks ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped +); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/style.scss new file mode 100644 index 0000000000..e40c0740c8 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-checks/style.scss @@ -0,0 +1,22 @@ +.wp-block-wporg-release-checks { + padding: 0; + + + .wp-block-heading { + font-size: var(--wp--preset--font-size--small); + } +} + +.wp-block-wporg-release-checks-results { + list-style: none; + padding-left: 12px; + border-left: 4px solid var(--wp--preset--color--light-grey-1); + + li ul { + list-style: disc; + } + + li:not(:last-child) { + margin-bottom: 8px; + } +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/block.json new file mode 100644 index 0000000000..fe568645ad --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/block.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-commits", + "version": "0.1.0", + "title": "Release Commits", + "category": "design", + "icon": "", + "description": "A block to display release commits.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false + }, + "usesContext": [ "postId" ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/index.php new file mode 100644 index 0000000000..8dcd70f684 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/index.php @@ -0,0 +1,22 @@ +context['postId'] ) { + return; +} + +$commits = get_post_meta( $block->context['postId'], 'release_commit_log', true ); + +if ( empty( $commits ) ) { + return '

    ' . __( 'No commits found.', 'wporg-plugins' ) . '

    '; +} + +// Newest commits first. +usort( + $commits, + function ( $a, $b ) { + return $b['date'] <=> $a['date']; + } +); + +$maximum_commits = 5; +$sliced_commits = array_slice( $commits, 0, $maximum_commits ); + +?> + +
    > + +

    %s

    + ', + esc_attr__( 'Commits', 'wporg-plugins' ) + ); + + echo do_blocks( $heading ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + + ?> + + +
    diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/style.scss new file mode 100644 index 0000000000..028576526b --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-commits/style.scss @@ -0,0 +1,41 @@ +.wp-block-wporg-release-commits { + margin-top: 0 !important; +} + +.wp-block-wporg-release-commit-list { + display: flex; + flex-direction: column; + gap: 8px; + list-style: none; + padding: 0; + + li { + display: flex; + flex-direction: column; + gap: inherit; + margin-bottom: var(--wp--preset--spacing--10); + + // media query + @media (min-width: 650px) { + flex-direction: row; + align-items: center; + margin-bottom: 0; + } + } +} + +.wp-block-wporg-release-commit-author { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; +} + +.wp-block-wporg-release-commit-by-line { + color: var(--wp--preset--color--charcoal-4) !important; + font-size: 12px; + + a { + color: var(--wp--preset--color--charcoal-4) !important; + } +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/block.json new file mode 100644 index 0000000000..74229b7186 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/block.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-draft", + "version": "0.1.0", + "title": "Release Draft", + "category": "design", + "icon": "", + "description": "A block to display release draft.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ "postId" ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/index.php new file mode 100644 index 0000000000..21d5bc15ba --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/index.php @@ -0,0 +1,22 @@ +context['postId'] ) { + return; +} + +$plugin_post = get_post( $block->context['postId'] ); + +if ( ! $plugin_post ) { + return; +} + +/** + * We are in the context of the plugin post, so we can query for the latest draft post. + */ +$query_args = array( + 'post_type' => 'plugin_release', + 'posts_per_page' => 1, + 'post_parent' => $plugin_post->ID, + 'orderby' => 'date', + 'post_status' => 'draft', + 'order' => 'DESC', +); + +$latest_draft_query = new WP_Query( $query_args ); + +if ( ! $latest_draft_query->have_posts() ) { + return; +} + + + +// Fetch the latest draft post. +$latest_draft_query->the_post(); + +$new_version = get_post_meta( get_the_ID(), 'release_version', true ); + +$publish_text = __( 'Create release', 'wporg-plugins' ); +$slug = get_plugin_slug(); +$intro_text = sprintf( + /* translators: %s: URL to the plugin's trunk folder */ + __( 'There are unpublished changes in your trunk folder.', 'wporg-plugins' ), + esc_url( "https://plugins.trac.wordpress.org/browser/{$slug}/" ) +); +$post_title = sprintf( + /* translators: %s: Plugin version number */ + __( 'Trunk (v.%s)', 'wporg-plugins' ), + esc_html( $new_version ) +); + +$markup = << + + +

    $intro_text

    + + + + + + +
    +
    + +
    +
    + + + + +
    + + + +
    +HTML; + +printf( + '
    %3$s
    ', + 'data-wp-interactive="wporg/publish-draft"', + wp_kses_data( get_block_wrapper_attributes() ), + do_blocks( $markup ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped +); + +// Reset global post data. +wp_reset_postdata(); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/style.scss new file mode 100644 index 0000000000..20d05c0a2d --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-draft/style.scss @@ -0,0 +1,4 @@ +.wp-block-wporg-release-draft { + margin-bottom: var(--wp--preset--spacing--20); + font-size: var(--wp--preset--font-size--small); +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/block.json new file mode 100644 index 0000000000..d494f65b59 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/block.json @@ -0,0 +1,16 @@ +{ + "apiVersion": 2, + "name": "wporg/release-menu-options", + "title": "Release Menu Options", + "category": "widgets", + "icon": "menu", + "description": "Display the dropdown menu option for a release.", + "supports": { + "html": false + }, + "usesContext": [ "postId" ], + "textdomain": "wporg", + "editorScript": "file:./index.js", + "style": "file:./style-index.css", + "render": "file:./render.php" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/index.php new file mode 100644 index 0000000000..b520fbe267 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/index.php @@ -0,0 +1,22 @@ +context['postId'] ) { + return; +} + +$release_post = get_post( $block->context['postId'] ); +if ( ! $release_post ) { + return; +} + +$current_version = get_post_meta( $release_post->ID, 'release_version', true ); +$download_link = get_download_link( $current_version ); +$download_link_html = sprintf( + '', + __( 'Download', 'wporg-plugins' ), + esc_url( $download_link ) +); + +$blueprint_link_html = sprintf( + '', + __( 'Load in Playground', 'wporg-plugins' ), + esc_url( get_blueprint_url( get_download_link( $current_version ) ) ) +); + +$changes_link_html = ''; +$previous_version = get_previous_version( $release_post ); + +if ( null !== $previous_version ) { + $changes_link_html = sprintf( + '', + __( 'View changes', 'wporg-plugins' ), + esc_url( get_trac_changeset_link( $previous_version, $current_version ) ) + ); +} + +$navigation = sprintf( + '%2$s', + __( 'Release options', 'wporg-plugins' ), + sprintf( + '%2$s%3$s%4$s', + __( 'Release options', 'wporg-plugins' ), + $download_link_html, + $blueprint_link_html, + $changes_link_html + ) +); + +echo do_blocks( $navigation ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/style.scss new file mode 100644 index 0000000000..c1b5673cec --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-menu-options/style.scss @@ -0,0 +1,38 @@ +.wporg-release-menu-options { + + .wp-block-navigation__submenu-container { + top: calc(100% + 4px) !important; + right: 0 !important; + left: auto !important; + } + + .wp-block-navigation-item { + background-color: initial; /* Stops the hidden overflow on focus */ + } + + .wp-block-navigation__submenu-icon { + display: none; /* Hide dropdown caret */ + } + + /* Manually apply screen reader text styles */ + button > .wp-block-navigation-item__label { + word-wrap: normal !important; + border: 0; + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + } + + button { + content: ""; + background-image: url("data:image/svg+xml,
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/index.php new file mode 100644 index 0000000000..6f3ef2a3af --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/index.php @@ -0,0 +1,22 @@ +context['postId'] ) { + return; +} + +$plugin_post = get_post( $block->context['postId'] ); + +if ( ! $plugin_post ) { + return; +} + +$heading_text = __( 'Releases', 'wporg-plugins' ); + +$markup = << +

    $heading_text

    + + + + +
    + +
    +HTML; + +/** + * Create initial state for the wporg/publish-draft. + */ +wp_interactivity_state( + 'wporg/publish-draft', + array( + 'isCreatingRelease' => false, + ) +); + +/** + * Create initial context for the wporg/publish-draft. + */ +printf( + '
    %3$s
    ', + wp_kses_data( get_block_wrapper_attributes() ), + 'data-wp-interactive="wporg/publish-draft"', + do_blocks( $markup ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped +); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/style.scss new file mode 100644 index 0000000000..c52a4ee0df --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/style.scss @@ -0,0 +1,7 @@ +.wp-block-wporg-release-draft { + font-size: var(--wp--preset--font-size--small); + + ul { + margin-top: var(--wp--preset--spacing--10); + } +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/view.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/view.js new file mode 100644 index 0000000000..66f187290c --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-page/view.js @@ -0,0 +1,24 @@ +/** + * WordPress dependencies + */ +import { store } from '@wordpress/interactivity'; + +const { state } = store( 'wporg/publish-draft', { + actions: { + handlePreSubmit( event ) { + event.preventDefault(); + state.isCreatingRelease = true; + + const element = document.querySelector( + '.wp-block-wporg-release-page' + ); + + if ( element ) { + element.scrollIntoView( { + behavior: 'instant', + block: 'center', + } ); + } + }, + }, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/block.json new file mode 100644 index 0000000000..e886dcf047 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/block.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-publish", + "version": "0.1.0", + "title": "Release Publish", + "category": "design", + "icon": "", + "description": "A block to display release publish view.", + "textdomain": "wporg", + "attributes": {}, + "supports": { + "html": false, + "interactivity": true + }, + "usesContext": [ "postId" ], + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css", + "viewScriptModule": "file:./view.js" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/index.php new file mode 100644 index 0000000000..e7377d8bb0 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/index.php @@ -0,0 +1,199 @@ += $latest_major; +} + +/** + * Generate the HTML for a release item content block. + * + * @param string $label The label for the item. + * @param string $content The additional content or description. + * @return string The formatted HTML content for the release item. + */ +function get_release_item_content( $label, $content ) { + return sprintf( + '
    %1$s
    %2$s
    ', + esc_html( $label ), + wp_kses_post( $content ) + ); +} + +/** + * Generate a release check item block with a specific status. + * + * @param string $status The status of the check item ('success' or 'error'). + * @param string $content The content to display inside the block. + * @return string The formatted block content. + */ +function get_release_check_item( $status, $content ) { + return do_blocks( + sprintf( + '%2$s', + esc_attr( $status ), + $content + ) + ); +} + +/** + * Generate the block content for the version number check item. + * + * @return string The block content. + */ +function get_changelog_check_item() { + $label = __( 'Update your changelog with key changes.', 'wporg-plugins' ); + $info_text = sprintf( + 'Learn more about writing useful changelogs.', + esc_url( 'https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/#what-should-be-in-my-changelog' ), + ); + + $content = get_release_item_content( $label, $info_text ); + + return get_release_check_item( 'default', $content ); +} + +/** + * Generate the block content for the version number check item. + * + * @param bool $post Release post. + * + * @return string The block content. + */ +function get_view_diff_check_item( $post ) { + $label = __( 'Review your changes.', 'wporg-plugins' ); + $info_text = sprintf( + /* translators: %s: URL to the plugin in the Plugin Directory */ + __( 'Double-check your changeset before publishing.', 'wporg-plugins' ), + esc_url( get_revision_changeset_link( $post ) ) + ); + $content = get_release_item_content( $label, $info_text ); + + return get_release_check_item( 'default', $content ); +} + +/** + * Generate the block content for the version number check item. + * + * @param bool $verdict Whether the version number is valid. + * @param string $value The current version number. + * + * @return string The block content. + */ +function get_version_number_check_item( $verdict, $value ) { + $label = __( 'Increment your version number.', 'wporg-plugins' ); + + $info_text = sprintf( + /* translators: %s: The current version number */ + __( 'New version: %s', 'wporg-plugins' ), + '' . $value . '', + ); + + $status = ''; + + if ( ! $verdict ) { + $status = 'error'; + $info_text = sprintf( + /* translators: %s: The current version number */ + __( 'Your plugin\'s version number %s must be incremented before you can publish.', 'wporg-plugins' ), + '' . $value . '', + ); + } + + $content = get_release_item_content( $label, $info_text ); + + return get_release_check_item( $status, $content ); +} + +/** + * Generate the block content for the "Tested up to" check item. + * + * @param bool $verdict Whether the tested up to value is recent. + * @param string $value The tested up to value. + * + * @return string The block content. + */ +function get_tested_up_to_check_item( $verdict, $value ) { + $label = __( + 'Test your plugin with the latest version of WordPress.', + 'wporg-plugins' + ); + $status = ''; + + $info_text = sprintf( + /* translators: %s: The Tested Up to value */ + __( 'Tested up to: %s', 'wporg-plugins' ), + '' . $value . '', + ); + + if ( empty( $value ) ) { + $value = __( 'Unknown', 'wporg-plugins' ); + $status = 'error'; + $info_text = __( 'We weren\'t able to determine your "Tested up to" value.', 'wporg-plugins' ); + } elseif ( ! $verdict ) { + $status = 'warning'; + $info_text = sprintf( + /* translators: %s: URL to the plugin in the Plugin Directory */ + __( 'Tested up to is %1$s. Test it now in Playground and update your readme.txt. ', 'wporg-plugins' ), + '' . $value . '', + esc_url( + get_blueprint_url( + sprintf( + 'https://downloads.wordpress.org/plugin/%s.zip', + get_plugin_slug(), + ) + ) + ) + ); + } + + $content = get_release_item_content( $label, $info_text ); + + return get_release_check_item( $status, $content ); +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/render.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/render.php new file mode 100644 index 0000000000..ba461f70da --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/render.php @@ -0,0 +1,212 @@ +context['postId'] ) ) { + return; +} + +$release_post = get_post( $block->context['postId'] ); + +// Bail if the release post does not exist. +if ( ! $release_post ) { + return; +} + +$current_version = get_post_meta( $block->context['postId'], 'release_version', true ); +$tested_up_to = get_post_meta( $block->context['postId'], 'release_tested', true ); + +$latest_release = get_latest_release( $release_post->post_parent ); +$last_version = get_post_meta( $latest_release->ID, 'release_version', true ); +$version_pass = version_compare( $current_version, $last_version, '>' ); +$tested_up_to_pass = has_recently_been_tested( $tested_up_to ); + +$plugin_slug = get_plugin_slug(); +$form_context = array( + 'pluginSlug' => $plugin_slug, + 'nonce' => wp_create_nonce( 'wp_rest' ), + 'apiURL' => esc_url( rest_url( 'plugins/v2/plugin/' . $plugin_slug . '/publish' ) ), + 'genericErrorMessage' => __( 'An error occurred while publishing the release.', 'wporg-plugins' ), + 'tooltipMessage' => __( 'Please fill out this field.', 'wporg-plugins' ), +); + +/** + * Create initial state for the wporg/publish-draft. + */ +wp_interactivity_state( + 'wporg/publish-draft', + array( + 'hasConfirmed' => false, + 'isPublishing' => false, + 'isPublished' => false, + 'hasError' => false, + 'errorMessage' => '', + ) +); + +?> + +
    + + > +
    + +

    %s

    + ', + __( 'Before releasing your plugin, make sure everything is up-to-date and ready for your users:', 'wporg-plugins' ) + ), + ); + ?> + +

    %s

    + ', + esc_html__( 'Checklist', 'wporg-plugins' ) + ) + ) + ?> +
      + + + + +
    + +
    + +
    + +
    + +
    +
    +

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

    + ' . esc_html( $current_version ) . '' + ); + ?> +

    +

    + +

      +
    • + + + + + : + +
    • +
    • + + + : + +
    • +
    • + Engage with your audience: Monitor your support forum and plugin reviews for feedback.', 'wporg-plugins' ), + esc_url( Template::get_support_url( get_plugin() ) ), + esc_url( 'https://wordpress.org/support/plugin/' . $plugin_slug . '/reviews/' ) + ); + ?> +
    • +
    + Plugin Developer FAQ or join the #pluginreview channel on Slack.', 'wporg-plugins' ), + esc_url( 'https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/' ), + esc_url( 'https://wordpress.slack.com/archives/C1LBM36LC ' ) + ); + ?> + +

    + +
    +
    + +
    +
    +
    +
    diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/style.scss new file mode 100644 index 0000000000..fa45b1fc86 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/style.scss @@ -0,0 +1,35 @@ +.wp-block-wporg-release-publish { + + label { + display: block; + } + + .wp-block-wporg-release-result-item > div:last-child > div { + color: var(--wp--preset--color--charcoal-3); + font-size: var(--wp--preset--font-size--extra-small); + } +} + +.wp-block-wporg-release-publish-checklist { + padding: 0; +} + +.wp-block-wporg-release-publish-user-confirm { + margin-top: var(--wp--preset--spacing--20); +} + +.wp-block-wporg-release-publish-actions { + display: flex; + margin-top: var(--wp--preset--spacing--20); + gap: 8px; +} + +.wp-block-wporg-release-publish-spinner { + align-items: center; + display: flex; + gap: 6px; +} + +.wp-block-wporg-release-publish-error { + margin-top: var(--wp--preset--spacing--10); +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/view.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/view.js new file mode 100644 index 0000000000..d173d5ed91 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-publish/view.js @@ -0,0 +1,92 @@ +/** + * WordPress dependencies + */ +import { store, getContext, getElement } from '@wordpress/interactivity'; + +const { state } = store( 'wporg/publish-draft', { + state: { + get userHasConfirmed() { + return state.hasConfirmed; + }, + get isDefaultState() { + return ! state.isPublishing && ! state.isPublished; + }, + get isPublishingState() { + return state.isPublishing; + }, + get isPublishedState() { + return state.isPublished; + }, + }, + actions: { + handleReleaseConfirm() { + state.hasConfirmed = ! state.hasConfirmed; + }, + handleBackClick( event ) { + event.preventDefault(); + state.isCreatingRelease = false; + + // Make user reconfirm. + state.hasConfirmed = false; + state.hasError = false; + state.errorMessage = ''; + }, + handlePageReload() { + window.location.reload(); + }, + *handleSubmit( event ) { + event.preventDefault(); + + const { pluginSlug, nonce, apiURL, genericErrorMessage, tooltipMessage } = getContext(); + + // Replicate form validation. + if ( ! state.hasConfirmed ) { + const input = document.getElementById( 'confirm-release' ); + + input.setCustomValidity( tooltipMessage ); + input.reportValidity(); + + return false; + } + + state.isPublishing = true; + state.errorMessage = ''; + state.hasError = false; + + try { + const response = yield fetch( apiURL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-WP-Nonce': nonce, + }, + body: JSON.stringify( { + plugin_slug: pluginSlug, + } ), + } ); + + if ( ! response.ok ) { + try { + const error = yield response.json(); + throw new Error( error.message ); + } catch ( error ) { + if ( error instanceof SyntaxError ) { + // Handle cases where json is not returned, like a gateway timeout. + throw new Error( genericErrorMessage ); + } + throw error; + } + } + + state.isPublished = true; + } catch ( error ) { + state.errorMessage = error.message; + state.hasError = true; + state.isPublishing = false; + state.hasConfirmed = false; + } finally { + state.isPublishing = false; + } + }, + }, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/block.json new file mode 100644 index 0000000000..efcd137521 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/release-result-item", + "version": "0.1.0", + "title": "Release Result Item", + "category": "design", + "icon": "", + "description": "A block to display release draft result item.", + "textdomain": "wporg", + "attributes": { + "status": { + "type": "string", + "enum": [ "error", "warning", "success" ] + } + }, + "supports": { + "html": false + }, + "editorScript": "file:./index.js", + "render": "file:./render.php", + "style": "file:./style-index.css" +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/index.js new file mode 100644 index 0000000000..103ad6662a --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/index.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { Disabled } from '@wordpress/components'; +import { registerBlockType } from '@wordpress/blocks'; +import ServerSideRender from '@wordpress/server-side-render'; +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import './style.scss'; + +function Edit( { attributes, name } ) { + return ( +
    + + + +
    + ); +} + +registerBlockType( metadata.name, { + edit: Edit, + save: () => null, +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/index.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/index.php new file mode 100644 index 0000000000..d8c72264cd --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/index.php @@ -0,0 +1,22 @@ + + +
  • > +
    + attributes['status'] ) : ?> + + + + + + attributes['status'] ) : ?> + + + + attributes['status'] ) : ?> + + + + + + + +
    + + inner_html ); ?> +
  • diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/style.scss b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/style.scss new file mode 100644 index 0000000000..0e833b1c26 --- /dev/null +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/release-result-item/style.scss @@ -0,0 +1,17 @@ +.wp-block-wporg-release-result-item { + display: flex; + margin: 0 0 12px !important; + position: relative; + gap: 8px; + list-style: none; + + > div:first-child { + height: 25px; + display: flex; + align-items: center; + } +} + +ul .wp-block-wporg-release-result-item:last-child { + margin-bottom: 0; +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/block.json b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/block.json index 55a1b32766..feab8d3ef9 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/block.json +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/block.json @@ -14,4 +14,4 @@ }, "editorScript": "file:./index.js", "render": "file:./render.php" -} \ No newline at end of file +} diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/search-page/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/single-plugin/index.js b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/single-plugin/index.js index 9e4580b21f..caf55461d5 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/single-plugin/index.js +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/src/blocks/single-plugin/index.js @@ -24,4 +24,4 @@ function Edit( { attributes, name } ) { registerBlockType( metadata.name, { edit: Edit, save: () => null, -} ); \ No newline at end of file +} ); diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/style.css b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/style.css index 513af88bca..06af87d242 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/style.css +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/style.css @@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/plugins Author: wordpressdotorg Author URI: https://wordpress.org Description: Theme for the WordPress.org Plugin Directory. -Version: 2024.0.3 +Version: 2024.0.5 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Text Domain: wporg-plugins diff --git a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/template-parts/plugin-single.php b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/template-parts/plugin-single.php index b28bcffb99..ad02938549 100644 --- a/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/template-parts/plugin-single.php +++ b/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins-2024/template-parts/plugin-single.php @@ -18,6 +18,8 @@ $is_closed = in_array( get_post_status(), [ 'closed', 'disabled' ], true ); $plugin_title = $is_closed ? $post->post_name : get_the_title(); + +$show_release_beta = isset( $_GET['show_release_beta'] ) || ( defined( 'WPORG_SANDBOXED' ) && WPORG_SANDBOXED ); ?>
    > @@ -87,6 +89,7 @@ +
      @@ -98,6 +101,9 @@ + + + @@ -114,8 +120,13 @@ get_template_part( 'template-parts/section-advanced' ); } else { $plugin_sections_titles = Template::get_plugin_section_titles(); + $content_section_list = array( 'description', 'screenshots', 'blocks', 'installation', 'faq', 'reviews', 'developers', 'changelog' ); + + if ( $show_release_beta ) { + $content_section_list[] = 'releases'; + } - foreach ( array( 'description', 'screenshots', 'blocks', 'installation', 'faq', 'reviews', 'developers', 'changelog' ) as $section_slug ) { + foreach ( $content_section_list as $section_slug ) { $section_content = ''; $section_title = $plugin_sections_titles[ $section_slug ] ?? ''; @@ -134,6 +145,13 @@ $section_content = trim( apply_filters( 'the_content', $content[ $section_slug ], $section_slug ) ); } + if ( 'releases' === $section_slug ) { + echo '
      '; + block_template_part( 'release-page' ); + echo '
      '; + continue; + } + if ( empty( $section_content ) ) { continue; } @@ -155,4 +173,4 @@ } ?> -
    + \ No newline at end of file