Файловый менеджер - Редактировать - /home/bean7936/perfect-community.com/442aa3/akismet.zip
Назад
PK ��\�/��� � class.akismet-widget.phpnu �[��� <?php /** * @package Akismet */ // We plan to gradually remove all of the disabled lint rules below. // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped /** * Akismet Widget Class */ class Akismet_Widget extends WP_Widget { /** * Constructor */ function __construct() { parent::__construct( 'akismet_widget', __( 'Akismet Widget', 'akismet' ), array( 'description' => __( 'Display the number of spam comments Akismet has caught', 'akismet' ) ) ); } /** * Outputs the widget settings form * * @param array $instance The widget options */ public function form( $instance ) { if ( $instance && isset( $instance['title'] ) ) { $title = $instance['title']; } else { $title = __( 'Spam Blocked', 'akismet' ); } ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'akismet' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php } /** * Updates the widget settings * * @param array $new_instance New widget instance * @param array $old_instance Old widget instance * @return array Updated widget instance */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = sanitize_text_field( $new_instance['title'] ); return $instance; } /** * Outputs the widget content * * @param array $args Widget arguments * @param array $instance Widget instance */ public function widget( $args, $instance ) { $count = get_option( 'akismet_spam_count' ); if ( ! isset( $instance['title'] ) ) { $instance['title'] = __( 'Spam Blocked', 'akismet' ); } echo $args['before_widget']; if ( ! empty( $instance['title'] ) ) { echo $args['before_title']; echo esc_html( $instance['title'] ); echo $args['after_title']; } ?> <style> .a-stats { --akismet-color-mid-green: #357b49; --akismet-color-white: #fff; --akismet-color-light-grey: #f6f7f7; max-width: 350px; width: auto; } .a-stats * { all: unset; box-sizing: border-box; } .a-stats strong { font-weight: 600; } .a-stats a.a-stats__link, .a-stats a.a-stats__link:visited, .a-stats a.a-stats__link:active { background: var(--akismet-color-mid-green); border: none; box-shadow: none; border-radius: 8px; color: var(--akismet-color-white); cursor: pointer; display: block; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen-Sans', 'Ubuntu', 'Cantarell', 'Helvetica Neue', sans-serif; font-weight: 500; padding: 12px; text-align: center; text-decoration: none; transition: all 0.2s ease; } /* Extra specificity to deal with TwentyTwentyOne focus style */ .widget .a-stats a.a-stats__link:focus { background: var(--akismet-color-mid-green); color: var(--akismet-color-white); text-decoration: none; } .a-stats a.a-stats__link:hover { filter: brightness(110%); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06), 0 0 2px rgba(0, 0, 0, 0.16); } .a-stats .count { color: var(--akismet-color-white); display: block; font-size: 1.5em; line-height: 1.4; padding: 0 13px; white-space: nowrap; } </style> <div class="a-stats"> <a href="https://akismet.com?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=widget_stats" class="a-stats__link" target="_blank" rel="noopener" style="background-color: var(--akismet-color-mid-green); color: var(--akismet-color-white);"> <?php echo wp_kses( sprintf( /* translators: The placeholder is the number of pieces of spam blocked by Akismet. */ _n( '<strong class="count">%1$s spam</strong> blocked by <strong>Akismet</strong>', '<strong class="count">%1$s spam</strong> blocked by <strong>Akismet</strong>', $count, 'akismet' ), number_format_i18n( $count ) ), array( 'strong' => array( 'class' => true, ), ) ); ?> </a> </div> <?php echo $args['after_widget']; } } /** * Register the Akismet widget */ function akismet_register_widgets() { register_widget( 'Akismet_Widget' ); } add_action( 'widgets_init', 'akismet_register_widgets' ); PK ��\�+!�= �= views/config.phpnu �[��� <?php //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. $kses_allow_link_href = array( 'a' => array( 'href' => true, ), ); ?> <div id="akismet-plugin-container"> <div class="akismet-masthead"> <div class="akismet-masthead__inside-container"> <?php Akismet::view( 'logo' ); ?> </div> </div> <div class="akismet-lower"> <?php if ( Akismet::get_api_key() ) { ?> <?php Akismet_Admin::display_status(); ?> <?php } ?> <?php if ( ! empty( $notices ) ) { ?> <?php foreach ( $notices as $notice ) { ?> <?php Akismet::view( 'notice', array_merge( $notice, array( 'parent_view' => $name ) ) ); ?> <?php } ?> <?php } ?> <?php if ( isset( $stat_totals['all'] ) && isset( $stat_totals['6-months'] ) ) : ?> <div class="akismet-card"> <div class="akismet-section-header"> <h2 class="akismet-section-header__label"> <span><?php esc_html_e( 'Statistics', 'akismet' ); ?></span> </h2> <div class="akismet-section-header__actions"> <a href="<?php echo esc_url( Akismet_Admin::get_page_url( 'stats' ) ); ?>"> <?php esc_html_e( 'Detailed stats', 'akismet' ); ?> </a> </div> </div> <!-- close akismet-section-header --> <div class="akismet-new-snapshot"> <?php /* name attribute on iframe is used as a cache-buster here to force Firefox to load the new style charts: https://bugzilla.mozilla.org/show_bug.cgi?id=356558 */ ?> <div class="akismet-new-snapshot__chart"> <iframe id="stats-iframe" allowtransparency="true" scrolling="no" frameborder="0" style="width: 100%; height: 220px; overflow: hidden;" src="<?php echo esc_url( sprintf( 'https://tools.akismet.com/1.0/snapshot.php?blog=%s&token=%s&height=200&locale=%s&is_redecorated=1', rawurlencode( get_option( 'home' ) ), rawurlencode( Akismet::get_access_token() ), get_user_locale() ) ); ?>" name="<?php echo esc_attr( 'snapshot-' . filemtime( __FILE__ ) ); ?>" title="<?php echo esc_attr__( 'Akismet stats', 'akismet' ); ?>"></iframe> </div> <ul class="akismet-new-snapshot__list"> <li class="akismet-new-snapshot__item"> <h3 class="akismet-new-snapshot__header"><?php esc_html_e( 'Past six months', 'akismet' ); ?></h3> <span class="akismet-new-snapshot__number"><?php echo number_format( $stat_totals['6-months']->spam ); ?></span> <span class="akismet-new-snapshot__text"><?php echo esc_html( _n( 'Spam blocked', 'Spam blocked', $stat_totals['6-months']->spam, 'akismet' ) ); ?></span> </li> <li class="akismet-new-snapshot__item"> <h3 class="akismet-new-snapshot__header"><?php esc_html_e( 'All time', 'akismet' ); ?></h3> <span class="akismet-new-snapshot__number"><?php echo number_format( $stat_totals['all']->spam ); ?></span> <span class="akismet-new-snapshot__text"><?php echo esc_html( _n( 'Spam blocked', 'Spam blocked', $stat_totals['all']->spam, 'akismet' ) ); ?></span> </li> <li class="akismet-new-snapshot__item"> <h3 class="akismet-new-snapshot__header"><?php esc_html_e( 'Accuracy', 'akismet' ); ?></h3> <span class="akismet-new-snapshot__number"><?php echo floatval( $stat_totals['all']->accuracy ); ?>%</span> <span class="akismet-new-snapshot__text"> <?php /* translators: %s: number of spam missed by Akismet */ echo esc_html( sprintf( _n( '%s missed spam', '%s missed spam', $stat_totals['all']->missed_spam, 'akismet' ), number_format( $stat_totals['all']->missed_spam ) ) ) . ', '; /* translators: %s: number of false positive spam flagged by Akismet */ echo esc_html( sprintf( _n( '%s false positive', '%s false positives', $stat_totals['all']->false_positives, 'akismet' ), number_format( $stat_totals['all']->false_positives ) ) ); ?> </span> </li> </ul> </div> <!-- close akismet-new-snapshot --> </div> <!-- close akismet-card --> <?php endif; ?> <?php if ( apply_filters( 'akismet_show_compatible_plugins', true ) ) : ?> <?php Akismet::view( 'compatible-plugins' ); ?> <?php endif; ?> <?php if ( $akismet_user ) : ?> <div class="akismet-card"> <div class="akismet-section-header"> <h2 class="akismet-section-header__label"> <span><?php esc_html_e( 'Settings', 'akismet' ); ?></span> </h2> </div> <div class="inside"> <form action="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>" autocomplete="off" method="POST" id="akismet-settings-form"> <div class="akismet-settings"> <?php if ( ! Akismet::predefined_api_key() ) : ?> <div class="akismet-settings__row"> <h3 class="akismet-settings__row-title"> <label class="akismet-settings__row-label" for="key"><?php esc_html_e( 'API key', 'akismet' ); ?></label> </h3> <div class="akismet-settings__row-input"> <span class="api-key"><input id="key" name="key" type="text" size="15" value="<?php echo esc_attr( get_option( 'wordpress_api_key' ) ); ?>" class="<?php echo esc_attr( 'regular-text code ' . $akismet_user->status ); ?>"></span> </div> </div> <?php endif; ?> <?php //phpcs:ignore WordPress.Security.NonceVerification.Recommended if ( isset( $_GET['ssl_status'] ) ) : ?> <div class="akismet-settings__row"> <div class="akismet-settings__row-text"> <h3 class="akismet-settings__row-title"><?php esc_html_e( 'SSL status', 'akismet' ); ?></h3> <div class="akismet-settings__row-description"> <?php if ( ! wp_http_supports( array( 'ssl' ) ) ) : ?> <strong><?php esc_html_e( 'Disabled.', 'akismet' ); ?></strong> <?php esc_html_e( 'Your Web server cannot make SSL requests; contact your Web host and ask them to add support for SSL requests.', 'akismet' ); ?> <?php else : ?> <?php $ssl_disabled = get_option( 'akismet_ssl_disabled' ); ?> <?php if ( $ssl_disabled ) : ?> <strong><?php esc_html_e( 'Temporarily disabled.', 'akismet' ); ?></strong> <?php esc_html_e( 'Akismet encountered a problem with a previous SSL request and disabled it temporarily. It will begin using SSL for requests again shortly.', 'akismet' ); ?> <?php else : ?> <strong><?php esc_html_e( 'Enabled.', 'akismet' ); ?></strong> <?php esc_html_e( 'All systems functional.', 'akismet' ); ?> <?php endif; ?> <?php endif; ?> </div> </div> </div> <?php endif; ?> <div class="akismet-settings__row"> <div class="akismet-settings__row-text"> <h3 class="akismet-settings__row-title"><?php esc_html_e( 'Comments', 'akismet' ); ?></h3> </div> <div class="akismet-settings__row-input"> <label class="akismet-settings__row-input-label" for="akismet_show_user_comments_approved"> <input name="akismet_show_user_comments_approved" id="akismet_show_user_comments_approved" value="1" type="checkbox" <?php // If the option isn't set, or if it's enabled ('1'), or if it was enabled a long time ago ('true'), check the checkbox. checked( true, ( in_array( get_option( 'akismet_show_user_comments_approved' ), array( false, '1', 'true' ), true ) ) ); ?> /> <span class="akismet-settings__row-label-text"> <?php esc_html_e( 'Show the number of approved comments beside each comment author.', 'akismet' ); ?> </span> </label> </div> </div> <div class="akismet-settings__row is-radio"> <div class="akismet-settings__row-text"> <h3 class="akismet-settings__row-title"><?php esc_html_e( 'Spam filtering', 'akismet' ); ?></h3> </div> <div class="akismet-settings__row-input"> <fieldset> <legend class="screen-reader-text"> <span><?php esc_html_e( 'Akismet Anti-spam strictness', 'akismet' ); ?></span> </legend> <div> <label class="akismet-settings__row-input-label" for="akismet_strictness_1"> <input type="radio" name="akismet_strictness" id="akismet_strictness_1" value="1" <?php checked( '1', get_option( 'akismet_strictness' ) ); ?> /> <span class="akismet-settings__row-label-text"> <?php esc_html_e( 'Silently discard the worst and most pervasive spam so I never see it.', 'akismet' ); ?> </span> </label> </div> <div> <label class="akismet-settings__row-input-label" for="akismet_strictness_0"> <input type="radio" name="akismet_strictness" id="akismet_strictness_0" value="0" <?php checked( true, get_option( 'akismet_strictness' ) !== '1' ); ?> /> <span class="akismet-settings__row-label-text"> <?php esc_html_e( 'Always put spam in the Spam folder for review.', 'akismet' ); ?> </span> </label> </div> </fieldset> <div class="akismet-settings__row-note"> <strong><?php esc_html_e( 'Note:', 'akismet' ); ?></strong> <?php $delete_interval = max( 1, intval( apply_filters( 'akismet_delete_comment_interval', 15 ) ) ); $spam_folder_link = sprintf( '<a href="%s">%s</a>', esc_url( admin_url( 'edit-comments.php?comment_status=spam' ) ), esc_html__( 'spam folder', 'akismet' ) ); // The _n() needs to be on one line so the i18n tooling can extract the translator comment. /* translators: %1$s: spam folder link, %2$d: delete interval in days */ $delete_message = _n( 'Spam in the %1$s older than %2$d day is deleted automatically.', 'Spam in the %1$s older than %2$d days is deleted automatically.', $delete_interval, 'akismet' ); printf( wp_kses( $delete_message, $kses_allow_link_href ), wp_kses( $spam_folder_link, $kses_allow_link_href ), esc_html( $delete_interval ) ); ?> </div> </div> </div> <div class="akismet-settings__row is-radio"> <div class="akismet-settings__row-text"> <h3 class="akismet-settings__row-title"><?php esc_html_e( 'Privacy', 'akismet' ); ?></h3> </div> <div class="akismet-settings__row-input"> <fieldset> <legend class="screen-reader-text"> <span><?php esc_html_e( 'Akismet privacy notice', 'akismet' ); ?></span> </legend> <div> <label class="akismet-settings__row-input-label" for="akismet_comment_form_privacy_notice_display"> <input type="radio" name="akismet_comment_form_privacy_notice" id="akismet_comment_form_privacy_notice_display" value="display" <?php checked( 'display', get_option( 'akismet_comment_form_privacy_notice' ) ); ?> /> <span class="akismet-settings__row-label-text"> <?php esc_html_e( 'Display a privacy notice under your comment forms.', 'akismet' ); ?> </span> </label> </div> <div> <label class="akismet-settings__row-input-label" for="akismet_comment_form_privacy_notice_hide"> <input type="radio" name="akismet_comment_form_privacy_notice" id="akismet_comment_form_privacy_notice_hide" value="hide" <?php echo in_array( get_option( 'akismet_comment_form_privacy_notice' ), array( 'display', 'hide' ), true ) ? checked( 'hide', get_option( 'akismet_comment_form_privacy_notice' ), false ) : 'checked="checked"'; ?> /> <span class="akismet-settings__row-label-text"> <?php esc_html_e( 'Do not display privacy notice.', 'akismet' ); ?> </span> </label> </div> </fieldset> <div class="akismet-settings__row-note"> <?php esc_html_e( 'To help your site with transparency under privacy laws like the GDPR, Akismet can display a notice to your users under your comment forms.', 'akismet' ); ?> </div> </div> </div> </div> <div class="akismet-card-actions"> <?php if ( ! Akismet::predefined_api_key() ) : ?> <div id="delete-action" class="akismet-card-actions__secondary-action"> <a class="submitdelete deletion" href="<?php echo esc_url( Akismet_Admin::get_page_url( 'delete_key' ) ); ?>"><?php esc_html_e( 'Disconnect this account', 'akismet' ); ?></a> </div> <?php endif; ?> <?php wp_nonce_field( Akismet_Admin::NONCE ); ?> <div id="publishing-action"> <input type="hidden" name="action" value="enter-key"> <input type="submit" name="submit" id="submit" class="akismet-button akismet-could-be-primary" value="<?php esc_attr_e( 'Save changes', 'akismet' ); ?>"> </div> </div> </form> </div> </div> <?php if ( ! Akismet::predefined_api_key() ) : ?> <div class="akismet-card"> <div class="akismet-section-header"> <h2 class="akismet-section-header__label"> <span><?php esc_html_e( 'Account', 'akismet' ); ?></span> </h2> </div> <div class="inside"> <table class="akismet-account"> <tbody> <tr> <th scope="row"><?php esc_html_e( 'Subscription type', 'akismet' ); ?></th> <td> <?php echo esc_html( $akismet_user->account_name ); ?> </td> </tr> <tr> <th scope="row"><?php esc_html_e( 'Status', 'akismet' ); ?></th> <td> <?php if ( Akismet::USER_STATUS_CANCELLED === $akismet_user->status ) : esc_html_e( 'Cancelled', 'akismet' ); elseif ( Akismet::USER_STATUS_SUSPENDED === $akismet_user->status ) : esc_html_e( 'Suspended', 'akismet' ); elseif ( Akismet::USER_STATUS_MISSING === $akismet_user->status ) : esc_html_e( 'Missing', 'akismet' ); elseif ( Akismet::USER_STATUS_NO_SUB === $akismet_user->status ) : esc_html_e( 'No subscription found', 'akismet' ); else : esc_html_e( 'Active', 'akismet' ); endif; ?> </td> </tr> <?php if ( $akismet_user->next_billing_date ) : ?> <tr> <th scope="row"><?php esc_html_e( 'Next billing date', 'akismet' ); ?></th> <td> <?php echo esc_html( gmdate( 'F j, Y', $akismet_user->next_billing_date ) ); ?> </td> </tr> <?php endif; ?> </tbody> </table> <div class="akismet-card-actions"> <?php if ( $akismet_user->status === Akismet::USER_STATUS_ACTIVE ) : ?> <div class="akismet-card-actions__secondary-action"> <a href="https://akismet.com/account?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=account_overview" class="akismet-external-link" aria-label="Account overview on akismet.com"><?php esc_html_e( 'Account overview', 'akismet' ); ?></a> </div> <?php endif; ?> <div id="publishing-action"> <?php Akismet::view( 'get', array( 'text' => ( $akismet_user->account_type === 'free-api-key' && $akismet_user->status === Akismet::USER_STATUS_ACTIVE ? __( 'Upgrade', 'akismet' ) : __( 'Change', 'akismet' ) ), 'redirect' => 'upgrade', 'utm_content' => ( $akismet_user->account_type === 'free-api-key' && $akismet_user->status === Akismet::USER_STATUS_ACTIVE ? 'config_upgrade' : 'config_change' ), ) ); ?> </div> </div> </div> </div> <?php endif; ?> <?php endif; ?> </div> </div> PK ��\��U� � views/activate.phpnu �[��� <div class="akismet-box"> <?php Akismet::view( 'setup' ); ?> </div> <div class="akismet-box"> <?php Akismet::view( 'enter' ); ?> </div>PK ��\�H�n views/logo.phpnu �[��� <?php //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. ?> <div class="akismet-masthead__logo-container"> <?php if ( isset( $include_logo_link ) && $include_logo_link === true ) : ?> <a href="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>" class="akismet-masthead__logo-link"> <?php endif; ?> <img class="akismet-masthead__logo" src="<?php echo esc_url( plugins_url( '../_inc/img/akismet-refresh-logo@2x.png', __FILE__ ) ); ?>" srcset="<?php echo esc_url( plugins_url( '../_inc/img/akismet-refresh-logo.svg', __FILE__ ) ); ?>" alt="Akismet logo" /> <?php if ( isset( $include_logo_link ) && $include_logo_link === true ) : ?> </a> <?php endif; ?> </div> PK ��\��"+� � views/start.phpnu �[��� <?php //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. ?> <div id="akismet-plugin-container"> <div class="akismet-masthead"> <div class="akismet-masthead__inside-container"> <?php Akismet::view( 'logo' ); ?> </div> </div> <div class="akismet-lower"> <?php Akismet_Admin::display_status(); ?> <div class="akismet-boxes"> <?php if ( Akismet::predefined_api_key() ) { Akismet::view( 'predefined' ); } elseif ( $akismet_user && in_array( $akismet_user->status, array( Akismet::USER_STATUS_ACTIVE, 'active-dunning', Akismet::USER_STATUS_NO_SUB, Akismet::USER_STATUS_MISSING, Akismet::USER_STATUS_CANCELLED, Akismet::USER_STATUS_SUSPENDED ) ) ) { Akismet::view( 'connect-jp', compact( 'akismet_user' ) ); } else { Akismet::view( 'activate' ); } ?> </div> </div> </div>PK ��\ g�s views/enter.phpnu �[��� <div class="akismet-enter-api-key-box centered"> <button class="akismet-enter-api-key-box__reveal"><?php esc_html_e( 'Manually enter an API key', 'akismet' ); ?></button> <div class="akismet-enter-api-key-box__form-wrapper"> <form action="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>" method="post"> <?php wp_nonce_field( Akismet_Admin::NONCE ); ?> <input type="hidden" name="action" value="enter-key"> <h3 class="akismet-enter-api-key-box__header" id="akismet-enter-api-key-box__header"><?php esc_html_e( 'Enter your API key', 'akismet' ); ?></h3> <div class="akismet-enter-api-key-box__input-wrapper"> <input id="key" name="key" type="text" size="15" value="" placeholder="<?php esc_attr_e( 'API key', 'akismet' ); ?>" class="akismet-enter-api-key-box__key-input regular-text code" aria-labelledby="akismet-enter-api-key-box__header"> <input type="submit" name="submit" id="submit" class="akismet-button" value="<?php esc_attr_e( 'Connect with API key', 'akismet' ); ?>"> </div> </form> </div> </div> PK ��\c\��� � views/connect-jp.phpnu �[��� <?php declare( strict_types = 1 ); //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. ?> <div class="akismet-box"> <?php Akismet::view( 'setup', array( 'use_jetpack_connection' => true ) ); ?> <?php Akismet::view( 'setup-jetpack', array( 'akismet_user' => $akismet_user ) ); ?> </div> <div class="akismet-box"> <?php Akismet::view( 'enter' ); ?> </div> PK ��\�x8�� � views/get.phpnu �[��� <?php //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. $submit_classes_attr = 'akismet-button'; if ( isset( $classes ) && ( is_countable( $classes ) ? count( $classes ) : 0 ) > 0 ) { $submit_classes_attr = implode( ' ', $classes ); } $query_args = array( 'passback_url' => Akismet_Admin::get_page_url(), 'redirect' => isset( $redirect ) ? $redirect : 'plugin-signup', ); // Set default UTM parameters, overriding with any provided values. $utm_args = array( 'utm_source' => isset( $utm_source ) ? $utm_source : 'akismet_plugin', 'utm_medium' => isset( $utm_medium ) ? $utm_medium : 'in_plugin', 'utm_campaign' => isset( $utm_campaign ) ? $utm_campaign : 'plugin_static_link', 'utm_content' => isset( $utm_content ) ? $utm_content : 'get_view_link', ); $query_args = array_merge( $query_args, $utm_args ); $url = add_query_arg( $query_args, 'https://akismet.com/get/' ); ?> <a href="<?php echo esc_url( $url ); ?>" class="<?php echo esc_attr( $submit_classes_attr ); ?>" target="_blank"> <?php echo esc_html( is_string( $text ) ? $text : '' ); ?> <span class="screen-reader-text"><?php esc_html_e( '(opens in a new tab)', 'akismet' ); ?></span> </a> PK ��\%-<g8 8 views/predefined.phpnu �[��� <div class="akismet-box"> <h2><?php esc_html_e( 'Manual Configuration', 'akismet' ); ?></h2> <p> <?php /* translators: %s is the wp-config.php file */ printf( esc_html__( 'An Akismet API key has been defined in the %s file for this site.', 'akismet' ), '<code>wp-config.php</code>' ); ?> </p> </div>PK ��\��6[� � views/setup-jetpack.phpnu �[��� <?php declare( strict_types = 1 ); //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. $user_status = $akismet_user->status ?? null; ?> <div class="akismet-setup__connection"> <?php if ( ! empty( $akismet_user->user_email ) && ! empty( $akismet_user->user_login ) ) : ?> <div class="akismet-setup__connection-user"> <div class="akismet-setup__connection-avatar"> <?php // Decorative avatar; empty alt for screen readers. echo get_avatar( $akismet_user->user_email, 48, '', '', array( 'class' => 'akismet-setup__connection-avatar-image', 'alt' => '', ) ); ?> <div class="akismet-setup__connection-account"> <div class="akismet-setup__connection-account-name"> <?php printf( /* translators: %s is the WordPress.com username */ esc_html__( 'Signed in as %s', 'akismet' ), '<strong>' . esc_html( $akismet_user->user_login ) . '</strong>' ); ?> </div> <div class="akismet-setup__connection-account-email"><?php echo esc_html( $akismet_user->user_email ); ?></div> </div> </div> </div> <?php endif; ?> <div class="akismet-setup__connection-action"> <?php if ( in_array( $user_status, array( Akismet::USER_STATUS_CANCELLED, Akismet::USER_STATUS_MISSING, Akismet::USER_STATUS_NO_SUB ) ) ) : ?> <p class="akismet-setup__connection-action-intro"> <?php esc_html_e( "Your Jetpack account is connected, but it doesn't have an active Akismet subscription yet. To continue, please choose a plan on Akismet.com.", 'akismet' ); ?> </p> <a href="https://akismet.com/get?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=jetpack_flow_<?php echo esc_attr( str_replace( '-', '_', $user_status ) ); ?>" class="akismet-setup__connection-button akismet-button"> <?php esc_html_e( 'Choose a plan on Akismet.com', 'akismet' ); ?> </a> <p class="akismet-setup__connection-action-description"> <?php esc_html_e( "Once you've chosen a plan, return here to complete your setup.", 'akismet' ); ?> </p> <?php elseif ( $user_status === Akismet::USER_STATUS_SUSPENDED ) : ?> <p class="akismet-setup__connection-action-intro"> <?php esc_html_e( "Your Akismet account appears to be suspended. This sometimes happens if there's a billing or verification issue. Please contact our support team so we can help you get it sorted.", 'akismet' ); ?> </p> <a href="https://akismet.com/contact?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=jetpack_flow_suspended" class="akismet-setup__connection-button akismet-button"> <?php esc_html_e( 'Contact support', 'akismet' ); ?> </a> <?php else : ?> <form name="akismet_use_wpcom_key" action="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>" method="post" id="akismet-activate"> <input type="hidden" name="key" value="<?php echo esc_attr( $akismet_user->api_key ); ?>"/> <input type="hidden" name="action" value="enter-key"> <?php wp_nonce_field( Akismet_Admin::NONCE ); ?> <input type="submit" class="akismet-setup__connection-button akismet-button" value="<?php esc_attr_e( 'Connect with Jetpack', 'akismet' ); ?>"/> </form> <p class="akismet-setup__connection-action-description"> <?php esc_html_e( "By connecting, we'll use your Jetpack account to activate Akismet on this site.", 'akismet' ); ?> </p> <?php endif; ?> <?php if ( ! in_array( $user_status, array( Akismet::USER_STATUS_CANCELLED, Akismet::USER_STATUS_MISSING, Akismet::USER_STATUS_NO_SUB ) ) ) : ?> <p class="akismet-setup__connection-action-description"> <?php echo wp_kses( sprintf( /* translators: The placeholder is a URL. */ __( 'Want to use a different account? <a href="%s" class="akismet-external-link">Visit akismet.com</a> to set it up and get your API key.', 'akismet' ), esc_url( 'https://akismet.com/get?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=jetpack_flow_different_account' ) ), array( 'a' => array( 'href' => array(), 'class' => array(), ), ) ); ?> </p> <?php endif; ?> </div> </div> PK ��\CҊ� views/compatible-plugins.phpnu �[��� <?php /** @var array|WP_Error $compatible_plugins */ $bypass_cache = ! empty( $_GET['akismet_refresh_compatible_plugins'] ); $compatible_plugins = Akismet_Compatible_Plugins::get_installed_compatible_plugins( $bypass_cache ); if ( is_array( $compatible_plugins ) ) : $compatible_plugin_count = count( $compatible_plugins ); ?> <div class="akismet-card akismet-compatible-plugins"> <div class="akismet-section-header"> <h2 class="akismet-section-header__label akismet-compatible-plugins__section-header-label" aria-label="<?php esc_attr_e( 'Compatible plugins (new feature)', 'akismet' ); ?>"> <span class="akismet-compatible-plugins__section-header-label-text"><?php esc_html_e( 'Compatible plugins', 'akismet' ); ?></span> <span class="akismet-new-feature"><?php esc_html_e( 'New', 'akismet' ); ?></span> </h2> </div> <div class="akismet-compatible-plugins__content"> <?php echo '<p>'; echo esc_html( __( 'Akismet works with other plugins to keep spam away.', 'akismet' ) ); echo '</p>'; echo '<p>'; if ( 0 === $compatible_plugin_count ) { echo '<a class="akismet-external-link" href="https://akismet.com/developers/plugins-and-libraries/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=compatible_plugins">'; echo esc_html( __( 'See supported integrations', 'akismet' ) ); echo '</a>'; } else { echo esc_html( _n( "This plugin you've installed is compatible. Follow the documentation link to get started.", "These plugins you've installed are compatible. Follow the documentation links to get started.", $compatible_plugin_count, 'akismet' ) ); } echo '</p>'; ?> <?php if ( ! empty( $compatible_plugins ) ) : ?> <ul class="akismet-compatible-plugins__list" id="akismet-compatible-plugins__list"> <?php foreach ( $compatible_plugins as $compatible_plugin ) : if ( empty( $compatible_plugin['help_url'] ) ) { continue; } ?> <li class="akismet-compatible-plugins__card"> <?php if ( strlen( $compatible_plugin['logo'] ) > 0 ) : ?> <?php $logo_alt = sprintf( /* translators: The placeholder is the name of a plugin, like "Jetpack" . */ __( '%s logo', 'akismet' ), $compatible_plugin['name'] ); ?> <img src="<?php echo esc_url( $compatible_plugin['logo'] ); ?>" alt="<?php echo esc_attr( $logo_alt ); ?>" class="akismet-compatible-plugins__card-logo" width="55" height="55" /> <?php endif ?> <div class="akismet-compatible-plugins__card-detail"> <h3 class="akismet-compatible-plugins__card-title"><?php echo esc_html( $compatible_plugin['name'] ); ?></h3> <div class="akismet-compatible-plugins__docs"> <a class="akismet-external-link" href="<?php echo esc_url( $compatible_plugin['help_url'] ); ?>" aria-label=" <?php echo esc_attr( sprintf( /* translators: The placeholder is the name of a plugin, like "Jetpack" . */ __( 'Documentation for %s', 'akismet' ), $compatible_plugin['name'] ) ); ?> "><?php esc_html_e( 'View documentation', 'akismet' ); ?></a> </div> </div> </li> <?php endforeach; ?> </ul> <?php if ( $compatible_plugin_count > Akismet_Compatible_Plugins::DEFAULT_VISIBLE_PLUGIN_COUNT ) : ?> <button class="akismet-compatible-plugins__show-more" aria-expanded="false" aria-controls="akismet-compatible-plugins__list" data-label-closed=" <?php /* translators: %d: number of compatible plugins, which is guaranteed to be more than 1. */ echo esc_attr( sprintf( __( 'Show all %d plugins', 'akismet' ), $compatible_plugin_count ) ); ?> " data-label-open="<?php echo esc_attr( __( 'Show less', 'akismet' ) ); ?>"> <?php /* translators: %d: number of compatible plugins, which is guaranteed to be more than 1. */ echo esc_html( sprintf( __( 'Show all %d plugins', 'akismet' ), $compatible_plugin_count ) ); ?> </button> <?php endif; ?> <?php endif; ?> </div> </div> <?php endif; PK ��\����H �H views/notice.phpnu �[��� <?php //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. $kses_allow_link = array( 'a' => array( 'href' => true, 'target' => true, 'class' => true, ), ); $kses_allow_strong = array( 'strong' => true ); if ( ! isset( $type ) ) { $type = false; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } /* * Some notices (plugin, spam-check, spam-check-cron-disabled, alert and usage-limit) are also shown elsewhere in wp-admin, so have different classes applied so that they match the standard WordPress notice format. */ ?> <?php if ( $type === 'plugin' ) : ?> <?php // Displayed on edit-comments.php to users who have not set up Akismet yet. ?> <div class="updated" id="akismet-setup-prompt"> <form name="akismet_activate" action="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>" method="post"> <div class="akismet-activate"> <input type="submit" class="akismet-activate__button akismet-button" value="<?php esc_attr_e( 'Set up your Akismet account', 'akismet' ); ?>" /> <div class="akismet-activate__description"> <?php esc_html_e( 'Almost done! Configure Akismet and say goodbye to spam', 'akismet' ); ?> </div> </div> </form> </div> <?php elseif ( $type === 'spam-check' ) : ?> <?php // This notice is only displayed on edit-comments.php. ?> <div class="notice notice-warning"> <p><strong><?php esc_html_e( 'Akismet has detected a problem.', 'akismet' ); ?></strong></p> <p><?php esc_html_e( 'Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation and will automatically be rechecked later.', 'akismet' ); ?></p> <?php if ( ! empty( $link_text ) ) : ?> <p><?php echo wp_kses( $link_text, $kses_allow_link ); ?></p> <?php endif; ?> </div> <?php elseif ( $type === 'spam-check-cron-disabled' ) : ?> <?php // This notice is only displayed on edit-comments.php. ?> <div class="notice notice-warning"> <p><strong><?php esc_html_e( 'Akismet has detected a problem.', 'akismet' ); ?></strong></p> <p><?php esc_html_e( 'WP-Cron has been disabled using the DISABLE_WP_CRON constant. Comment rechecks may not work properly.', 'akismet' ); ?></p> </div> <?php elseif ( $type === 'alert' && $code === Akismet::ALERT_CODE_COMMERCIAL && isset( $parent_view ) && $parent_view === 'config' ) : ?> <?php // Display a different commercial warning alert on the config page ?> <div class="akismet-card akismet-alert is-commercial"> <div> <h3 class="akismet-alert-header"><?php esc_html_e( 'We detected commercial activity on your site', 'akismet' ); ?></h3> <p class="akismet-alert-info"> <?php /* translators: The placeholder is a URL. */ echo wp_kses( sprintf( __( 'Your current subscription is for <a class="akismet-external-link" href="%s">personal, non-commercial use</a>. Please upgrade your plan to continue using Akismet.', 'akismet' ), esc_url( 'https://akismet.com/support/getting-started/free-or-paid/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=commercial_support' ) ), $kses_allow_link ); ?> </p> <p class="akismet-alert-info"> <?php /* translators: The placeholder is a URL to the contact form. */ echo wp_kses( sprintf( __( 'If you believe your site should not be classified as commercial, <a class="akismet-external-link" href="%s">please get in touch</a>', 'akismet' ), esc_url( 'https://akismet.com/contact/?purpose=commercial&utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=commercial_contact' ) ), $kses_allow_link ); ?> </p> </div> <div class="akismet-alert-button-wrapper"> <?php Akismet::view( 'get', array( 'text' => __( 'Upgrade plan', 'akismet' ), 'classes' => array( 'akismet-alert-button', 'akismet-button' ), 'redirect' => 'upgrade', 'utm_content' => 'commercial_upgrade', ) ); ?> </div> </div> <?php elseif ( $type === 'alert' ) : ?> <div class="<?php echo isset( $parent_view ) && $parent_view === 'config' ? 'akismet-alert is-bad' : 'error'; ?>"> <?php /* translators: The placeholder is an error code returned by Akismet. */ ?> <p><strong><?php printf( esc_html__( 'Akismet error code: %s', 'akismet' ), esc_html( $code ) ); ?></strong></p> <p><?php echo isset( $msg ) ? esc_html( $msg ) : ''; ?></p> <p> <?php echo wp_kses( sprintf( /* translators: the placeholder is a clickable URL that leads to more information regarding an error code. */ __( 'For more information, see the <a class="akismet-external-link" href="%s">error documentation on akismet.com</a>', 'akismet' ), esc_url( 'https://akismet.com/developers/detailed-docs/errors/akismet-error-' . absint( $code ) . '?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=error_info' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'notice' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php echo wp_kses( $notice_header, Akismet_Admin::get_notice_kses_allowed_elements() ); ?></h3> <p> <?php echo wp_kses( $notice_text, Akismet_Admin::get_notice_kses_allowed_elements() ); ?> </p> </div> <?php elseif ( $type === 'missing-functions' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'Network functions are disabled.', 'akismet' ); ?></h3> <p> <?php echo wp_kses( __( 'Your web host or server administrator has disabled PHP’s <code>gethostbynamel</code> function.', 'akismet' ), array_merge( $kses_allow_link, $kses_allow_strong, array( 'code' => true ) ) ); ?> </p> <p> <?php /* translators: The placeholder is a URL. */ echo wp_kses( sprintf( __( 'Please contact your web host or firewall administrator and give them <a class="akismet-external-link" href="%s" target="_blank">this information about Akismet’s system requirements</a>', 'akismet' ), esc_url( 'https://akismet.com/akismet-hosting-faq/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=hosting_faq_php' ) ), array_merge( $kses_allow_link, $kses_allow_strong, array( 'code' => true ) ) ); ?> </p> </div> <?php elseif ( $type === 'servers-be-down' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'Your site can’t connect to the Akismet servers.', 'akismet' ); ?></h3> <p> <?php /* translators: The placeholder is a URL. */ echo wp_kses( sprintf( __( 'Your firewall may be blocking Akismet from connecting to its API. Please contact your host and refer to <a class="akismet-external-link" href="%s" target="_blank">our guide about firewalls</a>', 'akismet' ), esc_url( 'https://akismet.com/akismet-hosting-faq/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=hosting_faq_firewall' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'active-dunning' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'Please update your payment information.', 'akismet' ); ?></h3> <p> <?php /* translators: The placeholder is a URL. */ echo wp_kses( sprintf( __( 'We cannot process your payment. Please <a class="akismet-external-link" href="%s" target="_blank">update your payment details</a>', 'akismet' ), esc_url( 'https://wordpress.com/me/purchases/payment-methods?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=payment_update' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'cancelled' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'Your Akismet plan has been cancelled.', 'akismet' ); ?></h3> <p> <?php /* translators: The placeholder is a URL. */ echo wp_kses( sprintf( __( 'Please visit <a class="akismet-external-link" href="%s" target="_blank">Akismet.com</a> to purchase a new subscription.', 'akismet' ), esc_url( 'https://akismet.com/pricing/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=pricing_cancelled' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'suspended' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'Your Akismet subscription is suspended.', 'akismet' ); ?></h3> <p> <?php /* translators: The placeholder is a URL. */ echo wp_kses( sprintf( __( 'Please contact <a class="akismet-external-link" href="%s" target="_blank">Akismet support</a> for assistance.', 'akismet' ), esc_url( 'https://akismet.com/contact/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=support_suspended' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'active-notice' && $time_saved ) : ?> <div class="akismet-alert is-neutral"> <h3 class="akismet-alert__heading"><?php echo esc_html( $time_saved ); ?></h3> <p> <?php /* translators: the placeholder is a clickable URL to the Akismet account upgrade page. */ echo wp_kses( sprintf( __( 'You can help us fight spam and upgrade your account by <a class="akismet-external-link" href="%s" target="_blank">contributing a token amount</a>', 'akismet' ), esc_url( 'https://akismet.com/pricing?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=upgrade_contribution' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'missing' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'There is a problem with your API key.', 'akismet' ); ?></h3> <p> <?php /* translators: The placeholder is a URL to the Akismet contact form. */ echo wp_kses( sprintf( __( 'Please contact <a class="akismet-external-link" href="%s" target="_blank">Akismet support</a> for assistance.', 'akismet' ), esc_url( 'https://akismet.com/contact/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=support_missing' ) ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'no-sub' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'You don’t have an Akismet plan.', 'akismet' ); ?></h3> <p> <?php /* translators: the placeholder is the URL to the Akismet pricing page. */ echo wp_kses( sprintf( __( 'Please <a class="akismet-external-link" href="%s" target="_blank">choose a free or paid plan</a> so Akismet can protect your site from spam.', 'akismet' ), esc_url( 'https://akismet.com/pricing?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=choose_plan' ) ), $kses_allow_link ); ?> </p> <p><?php echo esc_html__( 'Once you\'ve chosen a plan, return here to complete your setup.', 'akismet' ); ?></p> </div> <?php elseif ( $type === 'new-key-valid' ) : ?> <?php global $wpdb; $check_pending_link = false; $at_least_one_comment_in_moderation = ! ! $wpdb->get_var( "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = '0' LIMIT 1" ); if ( $at_least_one_comment_in_moderation ) { $check_pending_link = 'edit-comments.php?akismet_recheck=' . wp_create_nonce( 'akismet_recheck' ); } ?> <div class="akismet-alert is-good"> <p><?php esc_html_e( 'Akismet is now protecting your site from spam.', 'akismet' ); ?></p> <?php if ( $check_pending_link ) : ?> <p> <?php echo wp_kses( sprintf( /* translators: The placeholder is a URL for checking pending comments. */ __( 'Would you like to <a href="%s">check pending comments</a>?', 'akismet' ), esc_url( $check_pending_link ) ), $kses_allow_link ); ?> </p> <?php endif; ?> </div> <?php elseif ( $type === 'new-key-invalid' ) : ?> <div class="akismet-alert is-bad"> <p><?php esc_html_e( 'The key you entered is invalid. Please double-check it.', 'akismet' ); ?></p> </div> <?php elseif ( $type === Akismet_Admin::NOTICE_EXISTING_KEY_INVALID ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php echo esc_html( __( 'Your API key is no longer valid.', 'akismet' ) ); ?></h3> <p> <?php echo wp_kses( sprintf( /* translators: The placeholder is a URL to the Akismet contact form. */ __( 'Please enter a new key or <a class="akismet-external-link" href="%s" target="_blank">contact Akismet support</a>', 'akismet' ), 'https://akismet.com/contact/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=support_invalid_key' ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'new-key-failed' ) : ?> <div class="akismet-alert is-bad"> <h3 class="akismet-alert__heading"><?php esc_html_e( 'The API key you entered could not be verified.', 'akismet' ); ?></h3> <p> <?php echo wp_kses( sprintf( /* translators: The placeholder is a URL. */ __( 'The connection to akismet.com could not be established. Please refer to <a class="akismet-external-link" href="%s" target="_blank">our guide about firewalls</a> and check your server configuration.', 'akismet' ), 'https://akismet.com/akismet-hosting-faq/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=hosting_faq' ), $kses_allow_link ); ?> </p> </div> <?php elseif ( $type === 'usage-limit' && isset( Akismet::$limit_notices[ $code ] ) ) : ?> <div class="error akismet-usage-limit-alert"> <div class="akismet-usage-limit-logo"> <img src="<?php echo esc_url( plugins_url( '../_inc/img/logo-a-2x.png', __FILE__ ) ); ?>" alt="Akismet logo" /> </div> <div class="akismet-usage-limit-text"> <h3> <?php switch ( Akismet::$limit_notices[ $code ] ) { case 'FIRST_MONTH_OVER_LIMIT': case 'SECOND_MONTH_OVER_LIMIT': esc_html_e( 'Your Akismet account usage is over your plan’s limit', 'akismet' ); break; case 'THIRD_MONTH_APPROACHING_LIMIT': esc_html_e( 'Your Akismet account usage is approaching your plan’s limit', 'akismet' ); break; case 'THIRD_MONTH_OVER_LIMIT': case 'FOUR_PLUS_MONTHS_OVER_LIMIT': esc_html_e( 'Your account has been restricted', 'akismet' ); break; default: } ?> </h3> <p> <?php switch ( Akismet::$limit_notices[ $code ] ) { case 'FIRST_MONTH_OVER_LIMIT': echo esc_html( sprintf( /* translators: The first placeholder is a date, the second is a (formatted) number, the third is another formatted number. */ __( 'Since %1$s, your account made %2$s API calls, compared to your plan’s limit of %3$s.', 'akismet' ), esc_html( gmdate( 'F' ) . ' 1' ), number_format( $api_calls ), number_format( $usage_limit ) ) ); echo ' '; echo '<a class="akismet-external-link" href="https://akismet.com/support/general/akismet-api-usage-limits/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=usage_limit_docs" target="_blank">'; echo esc_html( __( 'Learn more about usage limits', 'akismet' ) ); echo '</a>'; break; case 'SECOND_MONTH_OVER_LIMIT': echo esc_html( __( 'Your Akismet usage has been over your plan’s limit for two consecutive months. Next month, we will restrict your account after you reach the limit. Increase your limit to make sure your site stays protected from spam.', 'akismet' ) ); echo ' '; echo '<a class="akismet-external-link" href="https://akismet.com/support/general/akismet-api-usage-limits/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=usage_limit_docs" target="_blank">'; echo esc_html( __( 'Learn more about usage limits', 'akismet' ) ); echo '</a>'; break; case 'THIRD_MONTH_APPROACHING_LIMIT': echo esc_html( __( 'Your Akismet usage is nearing your plan’s limit for the third consecutive month. We will restrict your account after you reach the limit. Increase your limit to make sure your site stays protected from spam.', 'akismet' ) ); echo ' '; echo '<a class="akismet-external-link" href="https://akismet.com/support/general/akismet-api-usage-limits/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=usage_limit_docs" target="_blank">'; echo esc_html( __( 'Learn more about usage limits', 'akismet' ) ); echo '</a>'; break; case 'THIRD_MONTH_OVER_LIMIT': case 'FOUR_PLUS_MONTHS_OVER_LIMIT': echo esc_html( __( 'Your Akismet usage has been over your plan’s limit for three consecutive months. We have restricted your account for the rest of the month. Increase your limit to make sure your site stays protected from spam.', 'akismet' ) ); echo ' '; echo '<a class="akismet-external-link" href="https://akismet.com/support/general/akismet-api-usage-limits/?utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=usage_limit_docs" target="_blank">'; echo esc_html( __( 'Learn more about usage limits', 'akismet' ) ); echo '</a>'; break; default: } ?> </p> </div> <div class="akismet-usage-limit-cta"> <a href="<?php echo esc_attr( $upgrade_url . ( strpos( $upgrade_url, '?' ) !== false ? '&' : '?' ) . 'utm_source=akismet_plugin&utm_campaign=plugin_static_link&utm_medium=in_plugin&utm_content=usage_limit_upgrade' ); ?>" class="button" target="_blank"> <?php if ( isset( $upgrade_via_support ) && $upgrade_via_support ) { // Direct user to contact support. esc_html_e( 'Contact Akismet support', 'akismet' ); } elseif ( ! empty( $upgrade_type ) && 'qty' === $upgrade_type ) { // If a qty upgrade is required, use recommended plan name if available. if ( ! empty( $recommended_plan_name ) && is_string( $recommended_plan_name ) ) { echo esc_html( sprintf( /* translators: The placeholder is the name of an Akismet subscription plan, like "Akismet Pro" or "Akismet Business" . */ __( 'Add an %s subscription', 'akismet' ), $recommended_plan_name ) ); } else { esc_html_e( 'Increase your limit', 'akismet' ); } } else { echo esc_html( sprintf( /* translators: The placeholder is the name of a subscription level, like "Akismet Business" or "Akismet Enterprise" . */ __( 'Upgrade to %s', 'akismet' ), $upgrade_plan ) ); } ?> </a> </div> </div> <?php endif; ?> PK ��\���(C C views/setup.phpnu �[��� <?php declare( strict_types = 1 ); //phpcs:disable VariableAnalysis // There are "undefined" variables here because they're defined in the code that includes this file as a template. $tick_icon = '<svg class="akismet-setup-instructions__icon" width="48" height="48" viewBox="0 0 48 48" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg"> <circle cx="24" cy="24" r="22" fill="#2E7D32"/> <path d="M16 24l6 6 12-14" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/> </svg>'; ?> <section class="akismet-setup-instructions"> <h2 class="akismet-setup-instructions__heading"><?php esc_html_e( 'Eliminate spam from your site', 'akismet' ); ?></h2> <h3 class="akismet-setup-instructions__subheading"> <?php echo esc_html__( 'Protect your site from comment spam and contact form spam — automatically.', 'akismet' ); ?> </h3> <ul class="akismet-setup-instructions__feature-list"> <li class="akismet-setup-instructions__feature"> <?php echo $tick_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> <div class="akismet-setup-instructions__body"> <h4 class="akismet-setup-instructions__title"> <?php echo esc_html__( 'Machine learning accuracy', 'akismet' ); ?> </h4> <p class="akismet-setup-instructions__text"> <?php echo esc_html__( 'Learns from billions of spam signals across the web to stop junk before it reaches you.', 'akismet' ); ?> </p> </div> </li> <li class="akismet-setup-instructions__feature"> <?php echo $tick_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> <div class="akismet-setup-instructions__body"> <h4 class="akismet-setup-instructions__title"> <?php echo esc_html__( 'Zero effort', 'akismet' ); ?> </h4> <p class="akismet-setup-instructions__text"> <?php echo esc_html__( 'Akismet runs quietly in the background, saving you hours of manual moderation.', 'akismet' ); ?> </p> </div> </li> <li class="akismet-setup-instructions__feature"> <?php echo $tick_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> <div class="akismet-setup-instructions__body"> <h4 class="akismet-setup-instructions__title"> <?php echo esc_html__( 'Works with popular contact forms', 'akismet' ); ?> </h4> <p class="akismet-setup-instructions__text"> <?php echo esc_html__( 'Seamlessly integrates with plugins like Elementor, Contact Form 7, Jetpack and WPForms.', 'akismet' ); ?> </p> </div> </li> <li class="akismet-setup-instructions__feature"> <?php echo $tick_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> <div class="akismet-setup-instructions__body"> <h4 class="akismet-setup-instructions__title"> <?php echo esc_html__( 'Flexible pricing', 'akismet' ); ?> </h4> <p class="akismet-setup-instructions__text"> <?php echo esc_html__( 'Name your own price for personal sites. Businesses start on a paid plan.', 'akismet' ); ?> </p> </div> </li> </ul> <?php if ( empty( $use_jetpack_connection ) ) : Akismet::view( 'get', array( 'text' => __( 'Get started', 'akismet' ), 'classes' => array( 'akismet-button', 'akismet-is-primary', 'akismet-setup-instructions__button' ), 'utm_content' => 'setup_instructions', ) ); endif; ?> </section> PK ��\��Vs@ @ views/stats.phpnu �[��� <div id="akismet-plugin-container"> <div class="akismet-masthead"> <div class="akismet-masthead__inside-container"> <?php Akismet::view( 'logo', array( 'include_logo_link' => true ) ); ?> <div class="akismet-masthead__back-link-container"> <a class="akismet-masthead__back-link" href="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>"><?php esc_html_e( 'Back to settings', 'akismet' ); ?></a> </div> </div> </div> <?php /* name attribute on iframe is used as a cache-buster here to force Firefox to load the new style charts: https://bugzilla.mozilla.org/show_bug.cgi?id=356558 */ ?> <iframe id="stats-iframe" src="<?php echo esc_url( sprintf( 'https://tools.akismet.com/1.0/user-stats.php?blog=%s&token=%s&locale=%s&is_redecorated=1', urlencode( get_option( 'home' ) ), urlencode( Akismet::get_access_token() ), esc_attr( get_user_locale() ) ) ); ?>" name="<?php echo esc_attr( 'user-stats- ' . filemtime( __FILE__ ) ); ?>" width="100%" height="2500px" frameborder="0" title="<?php echo esc_attr__( 'Akismet detailed stats', 'akismet' ); ?>"></iframe> </div> PK ��\e�%� � _inc/img/arrow-left.svgnu �[��� <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z"></path></svg>PK ��\�:�� � $ _inc/img/akismet-refresh-logo@2x.pngnu �[��� �PNG IHDR � X �!� �PLTEGpL?O4zH4{I5zI4zI5{I4{H5{I5zJ7G4|I4{I5zH6xH4zJ6zJ/O6zH5{H6{I5|I4{I4{I h�w N�`�������� ���� ��� B�T �ͻ��р��O�`��� �ů������ ���[�k�����Ɓ��[�lu��6zI5zH5zG7wG5{I3{G5{G4zI4|I�1�q PtRNS p���Ϗ` o��pp�����@���0`P ���������p���������������_o���������` ��� NIDATx�ч A@��~?�C���@ޕ��0���[��q��)�Ţ3M��ya�uC;1�2��n��ba�5`��& ���K\a�K�a�����/(l����-:��[tn1���������V�(ܫ< ��ŐX���ܞyx�G�kqp��D`�9��U,#Y�Oko@�\4��]�:}�Xno�]X�N|U9ޚ���뻾��a�{#�*��b��J,}�?� X���^��uXD��F,����� g(S�T����Ì�/�E;!��E,�E*�|QZvW���?>�,�I5�4e��+��ZJ>�����%�`��u�yK��ֳ5���[���ݛ#��/�Ŋ��v�Ha�`��ûs��v��Wg�u��&,���x�4c�pa,`�P0��z,��q�7}����m_?u�j�닾�,��H��rssN�̸W�T���+���X��r��X_�7>36�Y-{fq���~��#����^� 뎼��W�e�+v�Sɻ0L�/���]Y�}=6�6;_��9�C[8߫ӟ���v��u��+���Lt��X`*y}��b���J�ڢ�ɻ6b!'� ��_���V"*ý�����>Q���(.ȉqp�UQG�uf�r��oJ����E�b����}��'P�RzGέ�� �\�kD*+��K�0�M��|z ,��@����ֱ�Ʒ�b�vF�[��-C�!��_?�1��T��� 52v�(��,�ĩ��`9���� �N��D���<1�Q��` �G�o9����ky�殳?=*�"h���G9��8(�uUm���0u���XT4K���ј��j�G��x:��p%�R�t���N�ClI��2y�U����r��~�e�JFѩ������؝��Ky��ifoGC�(\�dY,�)?�`7�t���0�� !����-�"�87�@��Qt��&�Gm0��.�ja_���g�1�ő�N^�-X%��U�F;��³z7͙X����u�Y0u����f�/�<iԦ�D����Z4�X��X�)ai�=��m�5����/����8}l�=�d��~K#���/���KNz���� ����yk�e�o���C�~a��>$�����Ϗ��v,2�Ǣ"o��l�j��hC��|k�a��s%Cg�] ^����3t�C��h�Y�d��!��MҢ��Ig��l$�1��*��� 9�7�{V���SUM]6�k''i�bѡؓamGf���p G@��T�v��uf_Uy��������X:�i�E?��]&��Đ�w$itD�e�5E�����A>\k��m�2aƻ�IWq��wbAk�}��&>j�FS�e���I}0�I���g�#@fY��v,'0���D^ř>�b�Mr�*�Y�,�v}����p�O֫�a�_w���Ű�x�Ţ_��*sA,A�Q F���z��bgb�ES��e;��yX��a�d c`�}�-�F,�Lsa,t* o].�������KK�VND5��2Q,Bn�WU��rȻ�\��~W��t�ҡ���ݗ�ӕ��Ƃ� j���t���K����g�+&c�/G��R� �W�0�����'��tՙt_.�瘅� І��́K-�gcq,��X����._.���Ӣ_�" &�"�*��Kx�sוr�t��e%�}�.�f��U}��v�e-y������~�)-�Lq��J׳T`��J\�͂.}�R��ύ���X\ K���mr��e,���1�H������i�ˇ�5j�Y@?@%^5Ak���-C�R,fu��q �Q�&��nv{��y,�BO8�_��`��cX,�h�[;Z�-^F�5$��l���:�P4���y�Gr���r���V����;�h=� �4ڒ� �IX�F�h+����K<W�M�\5���t;9�M���P�����T��tSe�_���űj�O���O�M�\4-pFñ(�,����cʚ٘� i1� ��?X9��ן�?y�c�uҸ:j��k�:.V�g�IP�}�֘����S9��aaޚx�+�n�Ҏ솴&�&��2����kw<۰5(�/_� 0�V�_ˬ�uiӝ"���)� 0���\��Q �h��̣9�fҤ��o���2�F��@���Q�Ӭ-c��k�9���Z�Jݲ�]�C#��^v#o�0���AT�w�E��E��4��4chL�~h���� �P}8��)�g#`�m2���(�g�[��{��7o@��, KY�PY�#T��)6��|�]�x�!��,BM����w]L(�x����� -��m�!t�}[��K�X� u��� IEND�B`�PK ��\�ؑ � _inc/img/logo-a-2x.pngnu �[��� �PNG IHDR , iF�z pHYs % %IR$� sRGB ��� gAMA ���a IDATx͘MHQ���KC++����cc�ת�ZDA�צڵ� J��A�1�(h�rU��}��$Hed�m�,�̏�<�s�7�7�f|o|o���^��{���w��#�X̼�qR=���(+]���|5�Q0V&9U�G�X��0�b��`h��oz�r �I0Ԡ�A��n=��<0��nk�-ð\_Eq�\TS�NF@��2L_�|&�j��y�(g����נ��P{� ��z�eY�RA9����l�|I��;]�7�̸.�c�X�&ʗ0�aN�(j=������`)�Z�4��9A4��;ĩ:I�&��2p)M�r�m� J(W�dh��r���O��0���L�?�Zp �9f'_�r�zl�3Bl������fW��"O�� � � �_r�a�=�0N��Sט>i�0Ui@�%zc�;R�<k8��=`L�1f4��v�S�\A� ��8X��v�,�2�m�-�����Ս�T'K.�h?�i�/ �.B�ʵ���p�Z�5�0� ��s�Hin�o�1�V�-N�t��@���@�%�%\1*��a���C|�5IF�hW �<VzE)��� ./�*�Pl���NQ��øsȹv�Ē�7?�>����>quh`�ٛ)K!�U�U>JQ�6�}$u���c=۟Sn=�l���+�.�H����@f"WP�\����ٻ�/{l���qA�t�l�w����y����h�b;_q�]�+0�"b�boI�\�7�r��V g��ZO�_�G��b�;ij&磐��*�YJ>=S_A�����+N� ĩ] IEND�B`�PK ��\��[� � / _inc/img/akismet-activation-banner-elements.pngnu �[��� �PNG IHDR � � ȿ�� sRGB ��� PLTEGpL U�U?? H�HJUHmH$mH 3�L:�N:uNO�o�O_?O 6�O5xO6{M3�G:N:uN<{O4{F9�J O�oO�g�G_�GW7K4}L:|N5I7J<I6yH8|I�J[5J5zJ7}K O�kK�k�K[�G[ �I\ M�kM�j�J\�G\M�i�H\ N�jL�j�J\L�i�H[�I\L�j�H\ �I\M�j�H[ M�j�I\ L�k�H\ M�jL�jM�jL�j�I\ L�i�I[ M�j�I\�~~~~~||}{{{yyywwwttusstrrsqqqonpmmollnkkmiikhhjggiffgddfccdaac__a^]_\[^[Z\XWYVVXTTVRRSPPRNNQMLNKJMIHKHGJFEHDCFBAD@@B>>@=<?;:=:9<8769<;7658::6446994375325763314662003502450/30/.022.--/00-,,./0,*+-.*,-.*))+,-)')*++)(+'&'(*&'(*%$%&'(%$$%%'#"##$%"!#""&!!"#$!!!!" $ "! O��� �tRNS #'&)**+-000326;@@@@DKPRX__```fppuvvz����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A�� *IDATx���?OSQ���9�RM��G��@4j l4��n���B�]�p�A�tp1��w��PR1!j��T���������s�G� 6��.��</�<�A�v��bgN�Gh�D۹����ё����KKol�ٖ0��D��c�뺎�ض������*�@�w��Ha��5 ?z� I�{��ϩW4�Z�G�K�N�S I�$0� @�y���Њ'�a1�S���%�7b3@`@0M��ܸ��Z���b�=K�-�bsJb&�R$y���kB`:[�ӡ�b�L���� ��J0�54H���滓�Ӎy��>���p����gR o�14�����J(2!nL9����n�f�-:���b� Hb�B �IAq38!'������z�L�u\���� ��e�9ku�`,����O�wK�ש���lrn~~q)��@�zcU�����~D4W���승Q2g�Ls9���6�J�%g���'����7K��x~�F� �8��!z�y��R��Hk�*PJ��=�l��ʥ��[�Kv��o E�؍j��T5\zJe���*��<�A��t��yK��n��R�^w��W�E���_�z�(+_�������ή���U�Q?��Mbk�02DQ\(���0A%�,� �u�'p�ʭ>�o���P02v���sJ{������%Y�EQ�/u�UԵ# �"Y� !��kק���j�ŏs��W������j�ź�����0[��)�#�"��˴�L�}�_���^�\<��5Z����Y+��,��(�#��S���4_�[8`8]r��`m,-7�-��$�����r��lv���W���c��k��J���� � �@�Ȏ�(��������\oO8duk �σ�U%XUAF7����ReIE�I�K��胹*��aK�}�w@3+'5z�� X�����ɐh����n�]���~�Zs=�Qi�uˆ)n�]�"!�R�H���S�O��i�KK�]o"d��8�$���F0� [iRA��N��T������w�f;��٢��M��8vG� Է,��FP�jI��9*���X-���}�{��Q!V � h `�FG�WS�t��e�ھ<�8牟m����Bvk�h�q2 Pĕm��$[�-SR�R9�8���c�>�G���/..>����m��V�����@���x�}�Aw9�n�Ҏ�iƭ�߀�x����;�y1��/�� �ɱ��B����y���8�=�9�Փ���F;���J��L YB$���7�D] �Bq�R�7Dt#�Zc\j0Q��d���tOϤT�{Mw��� �Pu�?MAo�^N��p��)0�MÝ�qL3�M�֙|:���wb�ֹ��vן����wl�}��Mz���w��?ĘND��� ��L`ftf�Q~<�s��nhu1�+��:��8��[c>m|��YQ���)�\r8��:��v3���Ԯ���k����Ŀza+s7���רv��T�TU� �p$��d�����lM�+�nl�_��1�2>��:} �it�i=� Ǎ��'))Kf��#f�a�u���ɚV��W �� #�����Y�^ؤG��3$Q a� �),2$�|�\�d&�::�$B+[��. uox�q�l�g6�[G� �@ᡔR�r���AJ�yf��X�������|�c�g3���"1�B�5+y�<�%�=$�a��* ��s��Xdg=���˾r��t:UP":�TBJQ�L2��!��M���T,Q3�C�W�1'1�}��0�pH��L�L��9%O�Lf�$K&!�$K ;ZQ���|l{XWTOop2Oғ�p<` �!�p@���ʥqɏ��7����VS��c�ܵ:�ȸ��I=�I?�g��2E8�p�0/eI�t̥$��K�XQ���W��7��x��;O?.��e!#�Ĭ�$�Q�5wi��)�&�Gjy[,M��u�]Q=�yNn�qzq���H��8��� �%CdO9�Ȧ�$w�'��O��gW�Ҵ����:�J�QN�,�� ��K�9��� �rI��Mv�s�|�Ѷg�ZI�p��u��y�67`��x �E��P�d27'$O��R*Y�|��<\jR�w�Jʷ�|�����q�'�7^�d�MJ��4� ���&0%� ������c<��x��|��'�=qEu�������KnJ)M넚�d.�$W��6Rn"��e��Զ�f����ow\H%��1�3�i���Ȟ䤤�B"�r�:�@�'O I�p/��yp-� bI6p���y�������7m4�m��anf8�!��E�$�p�Җ3%��Ϡ<�çիÈ�,�/Vb�f�Q��SD�M(�l� @�I9�\(9$�Xk�g���A� �_a�-��}��:����_R�����E���q�4!��l�$*��MiJ��@��|[��7b��#z�WL�n泚s7�R�BLH�'�n�ך6��]���m�6C��sZ���~�r��M��\�`@)�-9�fm��?��)6-��:�E�Xd�3x���������+,)����:��S�JӴM;j�O~���j1� 2���p�x�5Rv%?Ί�p����T5��Դm�e�ޗs���@���f��GX0R�W���z���R�1�U��S��Q=�W���9�?p�Y���w���Ç�E7��c�S��z����̄��,Y�y�a�w�:43S�F�c��W&ӊʷE�j�ӺA�~�mI)r�H.d��N �T"��qj���x��[�i�=�{��� *�AO��/HH.�i>F�������G%��\]��ͧ{K��Փ/���j�G���@5988���}���}����ΥK����w�lo��{�!`y�؎.�N����ӿ8���j�7ϡ���Kf�'En�2�%GI��U��[wd�M[w�0�����\�w_yq����d����`�pp�捣��`{�������q �m�~�6�8�?8%�2�dF.&� \�k���ڭ�Z&U��Ntڪ1iP)�ҠՓ����mմ�� ��i�'dC��>s������羗�� T �/���P� ��xg�o�o ۻ/�o�m_����������[;;� L!���I����3����ݾw�|���%��������!�؊3p$- Qjuc�ɵ�~�����~1�#L�� Q� p3.�q���/o�������C��O>�a ��0�m��8 ]���'�7�zO|s�#��"�(2{��)�?�>�t���w���E�m�(���DM�m8%,\��H�|���i�Ec��F֓�)8%t¸��e(�Ժ*�ď�� (�����6��Q��?�XD�v=�u��h ��� ��i�=ׂF�m��HG?O��N�oL�m}Sb�������q�:�g���;�F���X�#��gj�v|m��|촟QZL���<?P�b�q]�B�O���t-�e���y�����^�z���l�1v����۹p��v�}���w_-E���*2��F�)G��=_� ��뽂����j�%9�b�3κ!<K�F�3�^�E�B� ������mU����9|���QK�R\�yei�ۥ������XW7 ^�o��:2����(��JHXiBqrP݊>>ܤ����KT�NH���L l���L�8:�e�bH�-BAjA��� WǨ�a�[�5�|�@�z���ڱ�=3♘;-�6ث�B�ң���c��nî 6�8p �>::ZA|E�b�ȄQ�2��C�"�Z�:��Y��� �4���_?y�Y�p�:ȥK��9���7�y�Ģ��3(���(��.M.4oř�z���(�i�܊�xR)��}*Jی��>,CZ�䑱Iq����)f<�}�z1�����aa������k �"����o3� ��J���يe�Đ:2�(֒�3�.d ����L��Az��82G��Ze�zҌcn/�`����G�I��O�^l �� "��&��V���/d�O���H Wc��6䍌]��ы���yx 1�p2�.� #���"?>��J��STK�%��:�S����NQ=�?A �\� z�NQ�!E2E�|��3�@+gE��8�H��{����?�[q��)*���@ .�#��o[ҷ"��qҚ�фh�X�WdT��"?�F����$oE��m�<i��'C�L8!��^]�)��Lgm,�- 1*'h�%������RQG�<C�7-I��<.������4��(��9RO�O>���L�x��_���q� �8\���l��1l�b� �.femF��BW���W9E^�q�b^m-wBJi���t���0�h�X��p>� ���g����.�"���*Avՠ�o�f�!|U�.�f�|�ܼ�ʐ���1��9�[Q�HO� ���>!��:rP�<r(�^��_��@��>Q�ku�q�๎���0�7<�[�t@��=��U-)yǯd\9�Sk�bo��+��yu^<IpC�d��S�8��M�vԛEc,��H2�M�)��#p�o�)���XF��3Ow IEND�B`�PK ��\��! �! ! _inc/img/akismet-refresh-logo.svgnu �[��� <svg xmlns="http://www.w3.org/2000/svg" width="203" height="44" fill="none"><rect width="44" height="44" fill="#357B49" rx="6"/><path fill="#fff" fill-rule="evenodd" d="m29.746 28.31-6.392-16.797c-.152-.397-.305-.672-.789-.675-.673 0-1.408.611-1.746 1.316l-7.378 16.154c-.072.16-.143.311-.214.454-.5.995-1.045 1.546-2.357 1.626a.399.399 0 0 0-.16.033l-.01.004a.399.399 0 0 0-.23.392v.01c0 .054.01.106.03.155l.004.01a.416.416 0 0 0 .394.252h6.212a.417.417 0 0 0 .307-.12.416.416 0 0 0 .124-.305.398.398 0 0 0-.105-.302.399.399 0 0 0-.294-.127c-.757 0-2.197-.062-2.197-1.164.02-.318.103-.63.245-.916l1.399-3.152c.52-1.163 1.654-1.163 2.572-1.163h5.843c.023 0 .044 0 .062.003.13.014.16.081.214.242l1.534 4.07a2.857 2.857 0 0 1 .216 1.04c0 .054-.003.104-.01.153-.09.726-.831.887-1.49.887a.4.4 0 0 0-.294.127l-.007.008-.007.008a.401.401 0 0 0-.092.286v.01c0 .054.01.106.03.155l.005.01a.42.42 0 0 0 .395.252h7.011a.413.413 0 0 0 .279-.13.412.412 0 0 0 .11-.297.387.387 0 0 0-.09-.294.388.388 0 0 0-.277-.135c-1.448-.122-2.295-.643-2.847-2.08Zm-11.985-5.844 2.847-6.304c.361-.728.659-1.486.889-2.265 0-.06.03-.092.06-.092s.061.032.061.091c.02.122.045.247.073.374.197.888.584 1.878.914 2.723l.176.453 1.684 4.529a.927.927 0 0 1 .092.4.473.473 0 0 1-.009.094c-.041.202-.228.272-.602.272h-6.063c-.122 0-.184-.03-.184-.092a.36.36 0 0 1 .062-.183Zm17.107-.721c0 .786-.446 1.231-1.25 1.231-.806 0-1.125-.409-1.125-1.034 0-.786.465-1.231 1.25-1.231.785 0 1.125.427 1.125 1.034ZM9.629 23.002c.803 0 1.25-.447 1.25-1.231 0-.607-.343-1.036-1.128-1.036-.785 0-1.25.447-1.25 1.231 0 .625.325 1.036 1.128 1.036Z" clip-rule="evenodd"/><path fill="#000" fill-rule="evenodd" d="M94.37 14.539c0-1.24-1.166-1.633-2.95-1.633a1.225 1.225 0 0 1-.103-.424.674.674 0 0 1 .186-.432.738.738 0 0 1 .432-.22 9.943 9.943 0 0 0 2.984-1.209c.085-.056.166-.114.244-.17.332-.237.63-.45 1.133-.45a.857.857 0 0 1 .436.095c.133.069.243.172.319.297l-.514 14.527c0 .065 0 .098.034.098.02 0 .028-.011.045-.033a.51.51 0 0 1 .058-.065l4.796-4.037.033-.028c.593-.502.824-.698.824-1.082 0-.457-.309-.882-1.509-.882a.456.456 0 0 1-.329-.134.416.416 0 0 1-.117-.323c0-.293.172-.424.48-.424h7.271a.465.465 0 0 1 .34.11.42.42 0 0 1 .141.314.41.41 0 0 1-.017.167.419.419 0 0 1-.225.249.45.45 0 0 1-.17.041c-1.715.229-3.43 1.176-4.664 2.155l-4.574 3.722 4.151 4.08c.162.162.326.329.493.498.641.653 1.317 1.341 2.079 1.885a4.931 4.931 0 0 0 2.915 1.045c.234 0 .423-.02.587-.04.125-.013.235-.025.339-.025.24 0 .24.196.24.294a.56.56 0 0 1-.171.424 3.94 3.94 0 0 1-.755.588c-.7.32-1.469.484-2.246.478a4.728 4.728 0 0 1-2.778-.848 12.042 12.042 0 0 1-2.093-2.024l-5.047-5.583a.515.515 0 0 1-.058-.065c-.017-.022-.025-.033-.045-.033-.034 0-.034.033-.034.098l-.172 4.8c0 1.436.995 2.176 2.504 2.415a.528.528 0 0 1 .319.166c.082.09.127.205.127.324a.406.406 0 0 1-.142.313.45.45 0 0 1-.338.11h-7.677a.477.477 0 0 1-.335-.115.438.438 0 0 1-.145-.308.454.454 0 0 1 .119-.33.5.5 0 0 1 .326-.16c1.715-.229 2.676-.751 2.71-2.22l.543-15.996Zm-19.929-1.894 7.168 17.923c.618 1.534 1.578 2.09 3.19 2.22a.452.452 0 0 1 .31.144.408.408 0 0 1 .102.313.421.421 0 0 1-.123.317.461.461 0 0 1-.323.14H76.91a.489.489 0 0 1-.343-.13.444.444 0 0 1-.138-.327.403.403 0 0 1 .113-.319.442.442 0 0 1 .322-.138c.789 0 1.68-.196 1.68-1.11a2.933 2.933 0 0 0-.24-1.11l-1.714-4.353c-.069-.196-.103-.272-.31-.272h-6.539c-1.029 0-2.286 0-2.88 1.24l-1.578 3.385a2.49 2.49 0 0 0-.286.98c0 1.174 1.612 1.24 2.47 1.24a.462.462 0 0 1 .328.134.417.417 0 0 1 .117.323.426.426 0 0 1-.137.326.47.47 0 0 1-.343.13h-6.951a.489.489 0 0 1-.343-.13.445.445 0 0 1-.137-.326.4.4 0 0 1 .116-.323.442.442 0 0 1 .33-.134c1.68-.098 2.23-.85 2.88-2.22l8.266-17.237c.378-.75 1.2-1.404 1.956-1.404.548 0 .72.294.891.718Zm-6.288 11.698c-.068.131-.068.164-.068.196 0 .033.068.098.206.098h6.802c.48 0 .686-.098.686-.392a.967.967 0 0 0-.103-.424L73.79 18.98l-.21-.514c-.42-1.024-.918-2.244-1.094-3.273 0-.066-.034-.098-.068-.098-.035 0-.069.033-.069.098a14.374 14.374 0 0 1-.995 2.426l-3.2 6.725Zm43.783-3.863c1.784 0 2.675.425 2.675 1.665l-.274 7.215c-.069 1.991-.377 3.101-2.778 3.395a.471.471 0 0 0-.312.164.428.428 0 0 0-.1.326.405.405 0 0 0 .273.396.45.45 0 0 0 .173.028h7.683a.463.463 0 0 0 .347-.112.42.42 0 0 0 .139-.323.453.453 0 0 0-.12-.33.5.5 0 0 0-.326-.16c-2.229-.326-2.435-1.632-2.435-3.428l.406-11.284a.697.697 0 0 0-.301-.335.745.745 0 0 0-.454-.09c-.47 0-.784.227-1.103.457a8.534 8.534 0 0 1-2.978 1.372.73.73 0 0 0-.434.22.667.667 0 0 0-.184.433.753.753 0 0 0 .103.391Zm3.842-6.692c1.269 0 2.023-.686 2.023-1.86 0-.98-.549-1.6-1.84-1.6-1.247 0-2.001.652-2.001 1.86 0 .98.549 1.6 1.818 1.6Zm17.939 6.431c0 .324-.04.887-.07 1.314-.018.262-.033.473-.033.547a.335.335 0 0 1-.105.197.366.366 0 0 1-.437.042.34.34 0 0 1-.144-.174c-.412-2.09-2.229-3.068-3.979-3.068-1.749 0-3.144.816-3.144 2.448 0 1.443 1.824 2.198 3.219 2.774.182.076.357.148.52.218.229.105.459.207.686.309 1.614.716 3.133 1.391 3.704 2.793.17.435.251.896.24 1.36a4.153 4.153 0 0 1-.309 1.6c-.926 2.252-3.715 3.395-6.379 3.395-3.944 0-4.63-1.175-4.63-3.787v-.827a.256.256 0 0 1 .093-.23.298.298 0 0 1 .25-.064c.286 0 .343.13.343.163.754 2.024 2.949 3.265 5.007 3.265 1.646 0 3.121-.816 3.121-2.35 0-1.744-1.337-2.306-2.797-2.918-.289-.121-.583-.245-.873-.38a50.215 50.215 0 0 0-.817-.369c-1.347-.598-2.654-1.178-3.367-2.21a3.501 3.501 0 0 1-.492-1.752 3.778 3.778 0 0 1 .378-1.6c.897-1.838 3.292-3.297 6.276-3.297s3.739.904 3.739 2.601Zm25.716 1.894c0-.947-.137-2.057-.823-2.971-.681-.882-1.778-1.524-3.527-1.524-2.916 0-5.111 1.85-6.174 4.527-.034.066-.069.098-.103.098-.034 0-.069-.032-.069-.13l.343-3.95a.78.78 0 0 0-.326-.328.84.84 0 0 0-.462-.097c-.488 0-.783.228-1.127.494l-.211.159c-.921.543-1.929.94-2.984 1.175a.77.77 0 0 0-.435.24.705.705 0 0 0-.182.446.93.93 0 0 0 .103.392c1.817 0 2.984.391 2.984 1.665l-.241 7.05c-.068 1.992-.377 3.102-2.743 3.396a.482.482 0 0 0-.36.139.432.432 0 0 0-.121.35.443.443 0 0 0 .162.318.473.473 0 0 0 .353.107h7.648a.447.447 0 0 0 .345-.105.4.4 0 0 0 .136-.32.448.448 0 0 0-.263-.445.5.5 0 0 0-.183-.044c-2.23-.326-2.47-1.6-2.47-3.395l.137-3.428c.115-2.775 1.441-6.007 4.974-6.007 2.812 0 3.258 2.318 3.258 4.538l-.172 4.897c-.068 1.959-.377 3.101-2.778 3.395a.461.461 0 0 0-.319.158.415.415 0 0 0-.092.332.396.396 0 0 0 .126.304.436.436 0 0 0 .32.12h7.682a.463.463 0 0 0 .335-.107.423.423 0 0 0 .145-.306.433.433 0 0 0-.113-.336.487.487 0 0 0-.332-.154c-2.184-.327-2.47-1.567-2.47-3.395l.137-3.559c.115-2.774 1.475-5.876 4.974-5.876 2.812 0 3.224 2.318 3.224 4.538l-.172 4.897c-.069 1.959-.343 3.101-2.744 3.395a.475.475 0 0 0-.34.148.414.414 0 0 0-.106.341.405.405 0 0 0 .141.315.446.446 0 0 0 .339.11h7.649a.473.473 0 0 0 .358-.102.44.44 0 0 0 .114-.145.407.407 0 0 0 .042-.177.466.466 0 0 0-.133-.34.498.498 0 0 0-.347-.15c-2.183-.327-2.469-1.567-2.469-3.395l.24-6.464c0-2.383-.72-5.289-4.527-5.289-2.984 0-5.248 1.948-6.18 4.527-.034.066-.068.098-.103.098-.034 0-.068-.032-.068-.13Zm29.023-.196c0 .587-.138 1.665-.789 2.024-2.092 1.11-6.763 1.567-10.049 1.567-.138 0-.172.065-.172.163.005.8.144 1.593.412 2.35.857 2.318 2.858 3.537 5.247 3.537a6.696 6.696 0 0 0 2.829-.63 6.369 6.369 0 0 0 2.247-1.753.491.491 0 0 1 .168-.188.53.53 0 0 1 .244-.084.453.453 0 0 1 .328.098.4.4 0 0 1 .152.294.449.449 0 0 1-.069.196c-1.406 3.036-4.253 4.505-6.956 4.505-4.573-.033-6.757-3.69-6.757-7.215 0-4.08 2.858-9.173 8.197-9.173 2.875.01 4.968 1.991 4.968 4.309Zm-10.701 1.088c-.07.226-.127.454-.172.686a5.136 5.136 0 0 0-.108.674.147.147 0 0 0 .057.099.164.164 0 0 0 .114.032c2.675 0 8.163-.914 8.163-1.763a3.297 3.297 0 0 0-1.061-2.3 3.638 3.638 0 0 0-2.437-.965c-2.361 0-3.939 1.665-4.551 3.526l-.005.011Zm16.011-2.981c.24 0 .309.065.309.228l-.315 9.5c0 1.143.143 2.35 1.029 3.2.374.352.822.628 1.314.808.492.18 1.018.26 1.544.236 2.47 0 4.39-1.306 5.214-3.102a.94.94 0 0 0 .137-.359.297.297 0 0 0-.093-.238.329.329 0 0 0-.25-.088.312.312 0 0 0-.24.098c-1.166 1.11-2.287 1.567-3.43 1.567a2.779 2.779 0 0 1-1.088-.19 2.664 2.664 0 0 1-.913-.594c-.651-.652-.651-1.6-.651-2.415l.314-8.662 5.316-.49a.682.682 0 0 0 .368-.227.63.63 0 0 0 .147-.393.645.645 0 0 0-.117-.35.687.687 0 0 0-.295-.238h-5.145c-.205 0-.24-.098-.24-.228l.137-3.809c0-.327-.274-.457-.651-.457a.688.688 0 0 0-.413.086.634.634 0 0 0-.273.306c-.686 2.71-1.818 4.113-4.047 4.864a.469.469 0 0 0-.225.166.434.434 0 0 0-.084.258.47.47 0 0 0 .062.31.51.51 0 0 0 .247.213h2.332ZM87.553 23.565c0 .838-.5 1.314-1.4 1.314-.9 0-1.26-.438-1.26-1.104 0-.838.52-1.314 1.4-1.314.88 0 1.26.457 1.26 1.104Zm51.386 1.314c.901 0 1.401-.476 1.401-1.314 0-.647-.38-1.104-1.261-1.104-.88 0-1.4.476-1.4 1.314 0 .666.36 1.104 1.26 1.104Z" clip-rule="evenodd"/></svg>PK ��\ʲ�y|, |, _inc/akismet-frontend.jsnu �[��� /** * Observe how the user enters content into the comment form in order to determine whether it's a bot or not. * * Note that no actual input is being saved here, only counts and timings between events. */ ( function() { // Passive event listeners are guaranteed to never call e.preventDefault(), // but they're not supported in all browsers. Use this feature detection // to determine whether they're available for use. var supportsPassive = false; try { var opts = Object.defineProperty( {}, 'passive', { get : function() { supportsPassive = true; } } ); window.addEventListener( 'testPassive', null, opts ); window.removeEventListener( 'testPassive', null, opts ); } catch ( e ) {} function init() { var input_begin = ''; var keydowns = {}; var lastKeyup = null; var lastKeydown = null; var keypresses = []; var modifierKeys = []; var correctionKeys = []; var lastMouseup = null; var lastMousedown = null; var mouseclicks = []; var mousemoveTimer = null; var lastMousemoveX = null; var lastMousemoveY = null; var mousemoveStart = null; var mousemoves = []; var touchmoveCountTimer = null; var touchmoveCount = 0; var lastTouchEnd = null; var lastTouchStart = null; var touchEvents = []; var scrollCountTimer = null; var scrollCount = 0; var correctionKeyCodes = [ 'Backspace', 'Delete', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End', 'PageUp', 'PageDown' ]; var modifierKeyCodes = [ 'Shift', 'CapsLock' ]; var forms = document.querySelectorAll( 'form[method=post]' ); for ( var i = 0; i < forms.length; i++ ) { var form = forms[i]; var formAction = form.getAttribute( 'action' ); // Ignore forms that POST directly to other domains; these could be things like payment forms. if ( formAction ) { // Check that the form is posting to an external URL, not a path. if ( formAction.indexOf( 'http://' ) == 0 || formAction.indexOf( 'https://' ) == 0 ) { if ( formAction.indexOf( 'http://' + window.location.hostname + '/' ) != 0 && formAction.indexOf( 'https://' + window.location.hostname + '/' ) != 0 ) { continue; } } } form.addEventListener( 'submit', function () { var ak_bkp = prepare_timestamp_array_for_request( keypresses ); var ak_bmc = prepare_timestamp_array_for_request( mouseclicks ); var ak_bte = prepare_timestamp_array_for_request( touchEvents ); var ak_bmm = prepare_timestamp_array_for_request( mousemoves ); var input_fields = { // When did the user begin entering any input? 'bib': input_begin, // When was the form submitted? 'bfs': Date.now(), // How many keypresses did they make? 'bkpc': keypresses.length, // How quickly did they press a sample of keys, and how long between them? 'bkp': ak_bkp, // How quickly did they click the mouse, and how long between clicks? 'bmc': ak_bmc, // How many mouseclicks did they make? 'bmcc': mouseclicks.length, // When did they press modifier keys (like Shift or Capslock)? 'bmk': modifierKeys.join( ';' ), // When did they correct themselves? e.g., press Backspace, or use the arrow keys to move the cursor back 'bck': correctionKeys.join( ';' ), // How many times did they move the mouse? 'bmmc': mousemoves.length, // How many times did they move around using a touchscreen? 'btmc': touchmoveCount, // How many times did they scroll? 'bsc': scrollCount, // How quickly did they perform touch events, and how long between them? 'bte': ak_bte, // How many touch events were there? 'btec' : touchEvents.length, // How quickly did they move the mouse, and how long between moves? 'bmm' : ak_bmm }; var akismet_field_prefix = 'ak_'; if ( this.getElementsByClassName ) { // Check to see if we've used an alternate field name prefix. We store this as an attribute of the container around some of the Akismet fields. var possible_akismet_containers = this.getElementsByClassName( 'akismet-fields-container' ); for ( var containerIndex = 0; containerIndex < possible_akismet_containers.length; containerIndex++ ) { var container = possible_akismet_containers.item( containerIndex ); if ( container.getAttribute( 'data-prefix' ) ) { akismet_field_prefix = container.getAttribute( 'data-prefix' ); break; } } } for ( var field_name in input_fields ) { var field = document.createElement( 'input' ); field.setAttribute( 'type', 'hidden' ); field.setAttribute( 'name', akismet_field_prefix + field_name ); field.setAttribute( 'value', input_fields[ field_name ] ); this.appendChild( field ); } }, supportsPassive ? { passive: true } : false ); form.addEventListener( 'keydown', function ( e ) { // If you hold a key down, some browsers send multiple keydown events in a row. // Ignore any keydown events for a key that hasn't come back up yet. if ( e.key in keydowns ) { return; } var keydownTime = ( new Date() ).getTime(); keydowns[ e.key ] = [ keydownTime ]; if ( ! input_begin ) { input_begin = keydownTime; } // In some situations, we don't want to record an interval since the last keypress -- for example, // on the first keypress, or on a keypress after focus has changed to another element. Normally, // we want to record the time between the last keyup and this keydown. But if they press a // key while already pressing a key, we want to record the time between the two keydowns. var lastKeyEvent = Math.max( lastKeydown, lastKeyup ); if ( lastKeyEvent ) { keydowns[ e.key ].push( keydownTime - lastKeyEvent ); } lastKeydown = keydownTime; }, supportsPassive ? { passive: true } : false ); form.addEventListener( 'keyup', function ( e ) { if ( ! ( e.key in keydowns ) ) { // This key was pressed before this script was loaded, or a mouseclick happened during the keypress, or... return; } var keyupTime = ( new Date() ).getTime(); if ( 'TEXTAREA' === e.target.nodeName || 'INPUT' === e.target.nodeName ) { if ( -1 !== modifierKeyCodes.indexOf( e.key ) ) { modifierKeys.push( keypresses.length - 1 ); } else if ( -1 !== correctionKeyCodes.indexOf( e.key ) ) { correctionKeys.push( keypresses.length - 1 ); } else { // ^ Don't record timings for keys like Shift or backspace, since they // typically get held down for longer than regular typing. var keydownTime = keydowns[ e.key ][0]; var keypress = []; // Keypress duration. keypress.push( keyupTime - keydownTime ); // Amount of time between this keypress and the previous keypress. if ( keydowns[ e.key ].length > 1 ) { keypress.push( keydowns[ e.key ][1] ); } keypresses.push( keypress ); } } delete keydowns[ e.key ]; lastKeyup = keyupTime; }, supportsPassive ? { passive: true } : false ); form.addEventListener( "focusin", function ( e ) { lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); form.addEventListener( "focusout", function ( e ) { lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); } document.addEventListener( 'mousedown', function ( e ) { lastMousedown = ( new Date() ).getTime(); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'mouseup', function ( e ) { if ( ! lastMousedown ) { // If the mousedown happened before this script was loaded, but the mouseup happened after... return; } var now = ( new Date() ).getTime(); var mouseclick = []; mouseclick.push( now - lastMousedown ); if ( lastMouseup ) { mouseclick.push( lastMousedown - lastMouseup ); } mouseclicks.push( mouseclick ); lastMouseup = now; // If the mouse has been clicked, don't record this time as an interval between keypresses. lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'mousemove', function ( e ) { if ( mousemoveTimer ) { clearTimeout( mousemoveTimer ); mousemoveTimer = null; } else { mousemoveStart = ( new Date() ).getTime(); lastMousemoveX = e.offsetX; lastMousemoveY = e.offsetY; } mousemoveTimer = setTimeout( function ( theEvent, originalMousemoveStart ) { var now = ( new Date() ).getTime() - 500; // To account for the timer delay. var mousemove = []; mousemove.push( now - originalMousemoveStart ); mousemove.push( Math.round( Math.sqrt( Math.pow( theEvent.offsetX - lastMousemoveX, 2 ) + Math.pow( theEvent.offsetY - lastMousemoveY, 2 ) ) ) ); if ( mousemove[1] > 0 ) { // If there was no measurable distance, then it wasn't really a move. mousemoves.push( mousemove ); } mousemoveStart = null; mousemoveTimer = null; }, 500, e, mousemoveStart ); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchmove', function ( e ) { if ( touchmoveCountTimer ) { clearTimeout( touchmoveCountTimer ); } touchmoveCountTimer = setTimeout( function () { touchmoveCount++; }, 500 ); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchstart', function ( e ) { lastTouchStart = ( new Date() ).getTime(); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchend', function ( e ) { if ( ! lastTouchStart ) { // If the touchstart happened before this script was loaded, but the touchend happened after... return; } var now = ( new Date() ).getTime(); var touchEvent = []; touchEvent.push( now - lastTouchStart ); if ( lastTouchEnd ) { touchEvent.push( lastTouchStart - lastTouchEnd ); } touchEvents.push( touchEvent ); lastTouchEnd = now; // Don't record this time as an interval between keypresses. lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'scroll', function ( e ) { if ( scrollCountTimer ) { clearTimeout( scrollCountTimer ); } scrollCountTimer = setTimeout( function () { scrollCount++; }, 500 ); }, supportsPassive ? { passive: true } : false ); } /** * For the timestamp data that is collected, don't send more than `limit` data points in the request. * Choose a random slice and send those. */ function prepare_timestamp_array_for_request( a, limit ) { if ( ! limit ) { limit = 100; } var rv = ''; if ( a.length > 0 ) { var random_starting_point = Math.max( 0, Math.floor( Math.random() * a.length - limit ) ); for ( var i = 0; i < limit && i < a.length; i++ ) { rv += a[ random_starting_point + i ][0]; if ( a[ random_starting_point + i ].length >= 2 ) { rv += "," + a[ random_starting_point + i ][1]; } rv += ";"; } } return rv; } if ( document.readyState !== 'loading' ) { init(); } else { document.addEventListener( 'DOMContentLoaded', init ); } })();PK ��\K�EBB1 B1 _inc/akismet.jsnu �[��� jQuery( function ( $ ) { var mshotRemovalTimer = null; var mshotRetryTimer = null; var mshotTries = 0; var mshotRetryInterval = 1000; var mshotEnabledLinkSelector = 'a[id^="author_comment_url"], tr.pingback td.column-author a:first-of-type, td.comment p a'; var preloadedMshotURLs = []; $('.akismet-status').each(function () { var thisId = $(this).attr('commentid'); $(this).prependTo('#comment-' + thisId + ' .column-comment'); }); $('.akismet-user-comment-count').each(function () { var thisId = $(this).attr('commentid'); $(this).insertAfter('#comment-' + thisId + ' .author strong:first').show(); }); akismet_enable_comment_author_url_removal(); $( '#the-comment-list' ).on( 'click', '.akismet_remove_url', function () { var thisId = $(this).attr('commentid'); var data = { action: 'comment_author_deurl', _wpnonce: WPAkismet.comment_author_url_nonce, id: thisId }; $.ajax({ url: ajaxurl, type: 'POST', data: data, beforeSend: function () { // Removes "x" link $("a[commentid='"+ thisId +"']").hide(); // Show temp status $("#author_comment_url_"+ thisId).html( $( '<span/>' ).text( WPAkismet.strings['Removing...'] ) ); }, success: function (response) { if (response) { // Show status/undo link $("#author_comment_url_"+ thisId) .attr('cid', thisId) .addClass('akismet_undo_link_removal') .html( $( '<span/>' ).text( WPAkismet.strings['URL removed'] ) ) .append( ' ' ) .append( $( '<span/>' ) .text( WPAkismet.strings['(undo)'] ) .addClass( 'akismet-span-link' ) ); } } }); return false; }).on( 'click', '.akismet_undo_link_removal', function () { var thisId = $(this).attr('cid'); var thisUrl = $(this).attr('href'); var data = { action: 'comment_author_reurl', _wpnonce: WPAkismet.comment_author_url_nonce, id: thisId, url: thisUrl }; $.ajax({ url: ajaxurl, type: 'POST', data: data, beforeSend: function () { // Show temp status $("#author_comment_url_"+ thisId).html( $( '<span/>' ).text( WPAkismet.strings['Re-adding...'] ) ); }, success: function (response) { if (response) { // Add "x" link $("a[commentid='"+ thisId +"']").show(); // Show link. Core strips leading http://, so let's do that too. $("#author_comment_url_"+ thisId).removeClass('akismet_undo_link_removal').text( thisUrl.replace( /^http:\/\/(www\.)?/ig, '' ) ); } } }); return false; }); // Show a preview image of the hovered URL. Applies to author URLs and URLs inside the comments. if ( "enable_mshots" in WPAkismet && WPAkismet.enable_mshots ) { $( '#the-comment-list' ).on( 'mouseover', mshotEnabledLinkSelector, function () { clearTimeout( mshotRemovalTimer ); if ( $( '.akismet-mshot' ).length > 0 ) { if ( $( '.akismet-mshot:first' ).data( 'link' ) == this ) { // The preview is already showing for this link. return; } else { // A new link is being hovered, so remove the old preview. $( '.akismet-mshot' ).remove(); } } clearTimeout( mshotRetryTimer ); var linkUrl = $( this ).attr( 'href' ); if ( preloadedMshotURLs.indexOf( linkUrl ) !== -1 ) { // This preview image was already preloaded, so begin with a retry URL so the user doesn't see the placeholder image for the first second. mshotTries = 2; } else { mshotTries = 1; } var mShot = $( '<div class="akismet-mshot mshot-container"><div class="mshot-arrow"></div><img src="' + akismet_mshot_url( linkUrl, mshotTries ) + '" width="450" height="338" class="mshot-image" /></div>' ); mShot.data( 'link', this ); mShot.data( 'url', linkUrl ); mShot.find( 'img' ).on( 'load', function () { $( '.akismet-mshot' ).data( 'pending-request', false ); } ); var offset = $( this ).offset(); mShot.offset( { left : Math.min( $( window ).width() - 475, offset.left + $( this ).width() + 10 ), // Keep it on the screen if the link is near the edge of the window. top: offset.top + ( $( this ).height() / 2 ) - 101 // 101 = top offset of the arrow plus the top border thickness } ); $( 'body' ).append( mShot ); mshotRetryTimer = setTimeout( retryMshotUntilLoaded, mshotRetryInterval ); } ).on( 'mouseout', 'a[id^="author_comment_url"], tr.pingback td.column-author a:first-of-type, td.comment p a', function () { mshotRemovalTimer = setTimeout( function () { clearTimeout( mshotRetryTimer ); $( '.akismet-mshot' ).remove(); }, 200 ); } ); var preloadDelayTimer = null; $( window ).on( 'scroll resize', function () { clearTimeout( preloadDelayTimer ); preloadDelayTimer = setTimeout( preloadMshotsInViewport, 500 ); } ); preloadMshotsInViewport(); } /** * The way mShots works is if there was no screenshot already recently generated for the URL, * it returns a "loading..." image for the first request. Then, some subsequent request will * receive the actual screenshot, but it's unknown how long it will take. So, what we do here * is continually re-request the mShot, waiting a second after every response until we get the * actual screenshot. */ function retryMshotUntilLoaded() { clearTimeout( mshotRetryTimer ); var imageWidth = $( '.akismet-mshot img' ).get(0).naturalWidth; if ( imageWidth == 0 ) { // It hasn't finished loading yet the first time. Check again shortly. setTimeout( retryMshotUntilLoaded, mshotRetryInterval ); } else if ( imageWidth == 400 ) { // It loaded the preview image. if ( mshotTries == 20 ) { // Give up if we've requested the mShot 20 times already. return; } if ( ! $( '.akismet-mshot' ).data( 'pending-request' ) ) { $( '.akismet-mshot' ).data( 'pending-request', true ); mshotTries++; $( '.akismet-mshot .mshot-image' ).attr( 'src', akismet_mshot_url( $( '.akismet-mshot' ).data( 'url' ), mshotTries ) ); } mshotRetryTimer = setTimeout( retryMshotUntilLoaded, mshotRetryInterval ); } else { // All done. } } function preloadMshotsInViewport() { var windowWidth = $( window ).width(); var windowHeight = $( window ).height(); $( '#the-comment-list' ).find( mshotEnabledLinkSelector ).each( function ( index, element ) { var linkUrl = $( this ).attr( 'href' ); // Don't attempt to preload an mshot for a single link twice. if ( preloadedMshotURLs.indexOf( linkUrl ) !== -1 ) { // The URL is already preloaded. return true; } if ( typeof element.getBoundingClientRect !== 'function' ) { // The browser is too old. Return false to stop this preloading entirely. return false; } var rect = element.getBoundingClientRect(); if ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= windowHeight && rect.right <= windowWidth ) { akismet_preload_mshot( linkUrl ); $( this ).data( 'akismet-mshot-preloaded', true ); } } ); } $( '.checkforspam.enable-on-load' ).on( 'click', function( e ) { if ( $( this ).hasClass( 'ajax-disabled' ) ) { // Akismet hasn't been configured yet. Allow the user to proceed to the button's link. return; } e.preventDefault(); if ( $( this ).hasClass( 'button-disabled' ) ) { window.location.href = $( this ).data( 'success-url' ).replace( '__recheck_count__', 0 ).replace( '__spam_count__', 0 ); return; } $('.checkforspam').addClass('button-disabled').addClass( 'checking' ); $('.checkforspam-spinner').addClass( 'spinner' ).addClass( 'is-active' ); akismet_check_for_spam(0, 100); }).removeClass( 'button-disabled' ); var spam_count = 0; var recheck_count = 0; function akismet_check_for_spam(offset, limit) { var check_for_spam_buttons = $( '.checkforspam' ); var nonce = check_for_spam_buttons.data( 'nonce' ); // We show the percentage complete down to one decimal point so even queues with 100k // pending comments will show some progress pretty quickly. var percentage_complete = Math.round( ( recheck_count / check_for_spam_buttons.data( 'pending-comment-count' ) ) * 1000 ) / 10; // Update the progress counter on the "Check for Spam" button. $( '.checkforspam' ).text( check_for_spam_buttons.data( 'progress-label' ).replace( '%1$s', percentage_complete ) ); $.post( ajaxurl, { 'action': 'akismet_recheck_queue', 'offset': offset, 'limit': limit, 'nonce': nonce }, function(result) { if ( 'error' in result ) { // An error is only returned in the case of a missing nonce, so we don't need the actual error message. window.location.href = check_for_spam_buttons.data( 'failure-url' ); return; } recheck_count += result.counts.processed; spam_count += result.counts.spam; if (result.counts.processed < limit) { window.location.href = check_for_spam_buttons.data( 'success-url' ).replace( '__recheck_count__', recheck_count ).replace( '__spam_count__', spam_count ); } else { // Account for comments that were caught as spam and moved out of the queue. akismet_check_for_spam(offset + limit - result.counts.spam, limit); } } ); } if ( "start_recheck" in WPAkismet && WPAkismet.start_recheck ) { $( '.checkforspam:first' ).click(); } if ( typeof MutationObserver !== 'undefined' ) { // Dynamically add the "X" next the the author URL links when a comment is quick-edited. var comment_list_container = document.getElementById( 'the-comment-list' ); if ( comment_list_container ) { var observer = new MutationObserver( function ( mutations ) { for ( var i = 0, _len = mutations.length; i < _len; i++ ) { if ( mutations[i].addedNodes.length > 0 ) { akismet_enable_comment_author_url_removal(); // Once we know that we'll have to check for new author links, skip the rest of the mutations. break; } } } ); observer.observe( comment_list_container, { attributes: true, childList: true, characterData: true } ); } } function akismet_enable_comment_author_url_removal() { $( '#the-comment-list' ) .find( 'tr.comment, tr[id ^= "comment-"]' ) .find( '.column-author a[href^="http"]:first' ) // Ignore mailto: links, which would be the comment author's email. .each(function () { if ( $( this ).parent().find( '.akismet_remove_url' ).length > 0 ) { return; } var linkHref = $(this).attr( 'href' ); // Ignore any links to the current domain, which are diagnostic tools, like the IP address link // or any other links another plugin might add. var currentHostParts = document.location.href.split( '/' ); var currentHost = currentHostParts[0] + '//' + currentHostParts[2] + '/'; if ( linkHref.indexOf( currentHost ) != 0 ) { var thisCommentId = $(this).parents('tr:first').attr('id').split("-"); $(this) .attr("id", "author_comment_url_"+ thisCommentId[1]) .after( $( '<a href="#" class="akismet_remove_url">x</a>' ) .attr( 'commentid', thisCommentId[1] ) .attr( 'title', WPAkismet.strings['Remove this URL'] ) ); } }); } /** * Generate an mShot URL if given a link URL. * * @param string linkUrl * @param int retry If retrying a request, the number of the retry. * @return string The mShot URL; */ function akismet_mshot_url( linkUrl, retry ) { var mshotUrl = '//s0.wp.com/mshots/v1/' + encodeURIComponent( linkUrl ) + '?w=900'; if ( retry > 1 ) { mshotUrl += '&r=' + encodeURIComponent( retry ); } mshotUrl += '&source=akismet'; return mshotUrl; } /** * Begin loading an mShot preview of a link. * * @param string linkUrl */ function akismet_preload_mshot( linkUrl ) { var img = new Image(); img.src = akismet_mshot_url( linkUrl ); preloadedMshotURLs.push( linkUrl ); } $( '.akismet-could-be-primary' ).each( function () { var form = $( this ).closest( 'form' ); form.data( 'initial-state', form.serialize() ); form.on( 'change keyup', function () { var self = $( this ); var submit_button = self.find( '.akismet-could-be-primary' ); if ( self.serialize() != self.data( 'initial-state' ) ) { submit_button.addClass( 'akismet-is-primary' ); } else { submit_button.removeClass( 'akismet-is-primary' ); } } ); } ); /** * Shows the Enter API key form */ $( '.akismet-enter-api-key-box__reveal' ).on( 'click', function ( e ) { e.preventDefault(); var div = $( '.akismet-enter-api-key-box__form-wrapper' ); div.show( 500 ); div.find( 'input[name=key]' ).focus(); $( this ).hide(); } ); }); PK ��\s����! �! _inc/akismet.cssnu �[��� .wp-admin.jetpack_page_akismet-key-config, .wp-admin.settings_page_akismet-key-config { background-color:#f3f6f8; } #submitted-on { position: relative; } #the-comment-list .author .akismet-user-comment-count { display: inline; } #the-comment-list .author a span { text-decoration: none; color: #999; } #the-comment-list .author a span.akismet-span-link { text-decoration: inherit; color: inherit; } #the-comment-list .akismet_remove_url { margin-left: 3px; color: #999; padding: 2px 3px 2px 0; } #the-comment-list .akismet_remove_url:hover { color: #A7301F; font-weight: bold; padding: 2px 2px 2px 0; } #dashboard_recent_comments .akismet-status { display: none; } .akismet-status { float: right; } .akismet-status a { color: #AAA; font-style: italic; } table.comments td.comment p a { text-decoration: underline; } table.comments td.comment p a:after { content: attr(href); color: #aaa; display: inline-block; /* Show the URL without the link's underline extending under it. */ padding: 0 1ex; /* Because it's inline block, we can't just use spaces in the content: attribute to separate it from the link text. */ } .mshot-arrow { width: 0; height: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; border-right: 10px solid #5C5C5C; position: absolute; left: -6px; top: 91px; } .mshot-container { background: #5C5C5C; position: absolute; top: -94px; padding: 7px; width: 450px; height: 338px; z-index: 20000; border-radius: 6px; } .akismet-mshot { position: absolute; z-index: 100; } .akismet-mshot .mshot-image { margin: 0; height: 338px; width: 450px; } .checkforspam { display: inline-block !important; } .checkforspam-spinner { display: inline-block; margin-top: 7px; } .akismet-right { float: right; } .akismet-card .akismet-right { margin: 1em 0; } .akismet-new-snapshot { margin-top: 1em; text-align: center; background: #fff; } .akismet-new-snapshot h3 { background: #f5f5f5; color: #888; font-size: 11px; margin: 0; } .akismet-new-snapshot ul li { color: #999; font-size: 11px; text-transform: uppercase; box-sizing: border-box; } .akismet-settings th:first-child { vertical-align: top; padding-top: 15px; } .akismet-settings th.akismet-api-key { vertical-align: middle; padding-top: 0; } .akismet-settings span.akismet-note { float: left; padding-left: 23px; font-size: 75%; margin-top: -10px; } .jetpack_page_akismet-key-config #wpcontent, .settings_page_akismet-key-config #wpcontent { padding-left: 0; } .akismet-masthead { background-color:#fff; text-align:center; box-shadow:0 1px 0 rgba(200,215,225,0.5),0 1px 2px #e9eff3 } @media (max-width: 45rem) { .akismet-masthead { padding:0 1.25rem } } .akismet-masthead__inside-container { padding:.375rem 0; margin:0 auto; width:100%; max-width:45rem; text-align: left; } .akismet-masthead__logo-container { padding:.3125rem 0 0 } .akismet-masthead__logo-link { display:inline-block; outline:none; vertical-align:middle } .akismet-masthead__logo-link:focus { line-height:0; box-shadow:0 0 0 2px #78dcfa } .akismet-masthead__logo-link+code { margin:0 10px; padding:5px 9px; border-radius:2px; background:#e6ecf1; color:#647a88 } .akismet-masthead__links { display:flex; flex-flow:row wrap; flex:2 50%; justify-content:flex-end; margin:0 } @media (max-width: 480px) { .akismet-masthead__links { padding-right:.625rem } } .akismet-masthead__link-li { margin:0; padding:0 } .akismet-masthead__link { font-style:normal; color:#0087be; padding:.625rem; display:inline-block } .akismet-masthead__link:visited { color:#0087be } .akismet-masthead__link:active,.akismet-masthead__link:hover { color:#00aadc } .akismet-masthead__link:hover { text-decoration:underline } .akismet-masthead__link .dashicons { display:none } @media (max-width: 480px) { .akismet-masthead__link:hover,.akismet-masthead__link:active { text-decoration:none } .akismet-masthead__link .dashicons { display:block; font-size:1.75rem } .akismet-masthead__link span+span { display:none } } .akismet-masthead__link-li:last-of-type .akismet-masthead__link { padding-right:0 } .akismet-lower { margin: 0 auto; text-align: left; max-width: 45rem; padding: 1.5rem; } .akismet-lower .notice { margin-bottom: 2rem; } .akismet-card { margin-top: 1rem; margin-bottom: 0; position: relative; box-sizing: border-box; background: white; } .akismet-card:after, .akismet-card .inside:after, .akismet-masthead__logo-container:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .akismet-card .inside { padding: 1.5rem; padding-top: 1rem; } .akismet-card .akismet-card-actions { margin-top: 1rem; } .jetpack_page_akismet-key-config .update-nag, .settings_page_akismet-key-config .update-nag { display: none; } .akismet-masthead .akismet-right { line-height: 2.125rem; font-size: 0.9rem; } .akismet-box { box-sizing: border-box; background: white; border: 1px solid rgba(200, 215, 225, 0.5); } .akismet-box h2, .akismet-box h3 { padding: 1.5rem 1.5rem .5rem 1.5rem; margin: 0; } .akismet-box p { padding: 0 1.5rem 1.5rem 1.5rem; margin: 0; } .akismet-box p:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .akismet-box .akismet-right { padding-right: 1.5rem; } .akismet-boxes .akismet-box { margin-bottom: 0; padding: 0; margin-top: -1px; } .akismet-boxes .akismet-box:last-child { margin-bottom: 1.5rem; } .akismet-boxes .akismet-box:first-child { margin-top: 1.5rem; } .akismet-box .centered { text-align: center; } .akismet-button, .akismet-button:hover, .akismet-button:visited { background: white; border-color: #c8d7e1; border-style: solid; border-width: 1px 1px 2px; color: #2e4453; cursor: pointer; display: inline-block; margin: 0; outline: 0; overflow: hidden; font-size: 14px; font-weight: 500; text-overflow: ellipsis; text-decoration: none; vertical-align: top; box-sizing: border-box; line-height: 21px; border-radius: 4px; padding: 7px 14px 9px; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .akismet-button:hover { border-color: #a8bece; } .akismet-button:active { border-width: 2px 1px 1px; } .akismet-is-primary, .akismet-is-primary:hover, .akismet-is-primary:visited { background: #00aadc; border-color: #0087be; color: white; } .akismet-is-primary:hover, .akismet-is-primary:focus { border-color: #005082; } .akismet-is-primary:hover { border-color: #005082; } .akismet-section-header { position: relative; margin: 0 auto 0.625rem auto; padding: 1rem; box-sizing: border-box; box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3; background: #ffffff; width: 100%; padding-top: 0.6875rem; padding-bottom: 0.6875rem; display: flex; } .akismet-section-header__label { display: flex; align-items: center; flex-grow: 1; line-height: 1.75rem; position: relative; font-size: 0.875rem; color: #4f748e; } .akismet-section-header__actions { line-height: 1.75rem; } .akismet-setup-instructions form { padding-bottom: 1.5rem; } .akismet-setup-instructions > a.akismet-button { display: inline-block; margin-bottom: 1.5rem; } div.error.akismet-usage-limit-alert { padding: 25px 45px 25px 15px; display: flex; align-items: center; } #akismet-plugin-container .akismet-usage-limit-alert { margin: 0 auto 0.625rem auto; box-sizing: border-box; box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3; border: none; border-left: 4px solid #d63638; } .akismet-usage-limit-alert .akismet-usage-limit-logo { width: 38px; min-width: 38px; height: 38px; border-radius: 20px; margin-right: 18px; background: black; position: relative; } .akismet-usage-limit-alert .akismet-usage-limit-logo img { position: absolute; width: 22px; left: 8px; top: 10px; } .akismet-usage-limit-alert .akismet-usage-limit-text { flex-grow: 1; margin-right: 18px; } .akismet-usage-limit-alert h3 { line-height: 1.3; margin: 0; } .akismet-usage-limit-alert .akismet-usage-limit-cta { border-color: none; text-align: right; } #akismet-plugin-container .akismet-usage-limit-cta a { color: #d63638; background: #fafafa; } @media (max-width: 550px) { div.error.akismet-usage-limit-alert { display: block; } .akismet-usage-limit-alert .akismet-usage-limit-logo, .akismet-usage-limit-alert .akismet-usage-limit-text { margin-bottom: 15px; } .akismet-usage-limit-alert .akismet-usage-limit-cta { text-align: left; } }PK ��\&L@� _inc/akismet-admin.jsnu �[��� document.addEventListener( 'DOMContentLoaded', function() { // Prevent aggressive iframe caching in Firefox var statsIframe = document.getElementById( 'stats-iframe' ); if ( statsIframe ) { statsIframe.contentWindow.location.href = statsIframe.src; } initCompatiblePluginsShowMoreToggle(); } ); function initCompatiblePluginsShowMoreToggle() { const section = document.querySelector( '.akismet-compatible-plugins' ); const list = document.querySelector( '.akismet-compatible-plugins__list' ); const button = document.querySelector( '.akismet-compatible-plugins__show-more' ); if ( ! section || ! list || ! button ) { return; } function isElementInViewport( element ) { const rect = element.getBoundingClientRect(); return rect.top >= 0 && rect.bottom <= window.innerHeight; } function toggleCards() { list.classList.toggle( 'is-expanded' ); const isExpanded = list.classList.contains( 'is-expanded' ); button.textContent = isExpanded ? button.dataset.labelOpen : button.dataset.labelClosed; button.setAttribute( 'aria-expanded', isExpanded.toString() ); if ( ! isExpanded && ! isElementInViewport( section ) ) { section.scrollIntoView( { block: 'start' } ); } } button.addEventListener( 'click', toggleCards ); } PK ��\gB'�4"