diff --git a/wp-content/plugins/akismet/akismet.php b/wp-content/plugins/akismet/akismet.php
index 6158872af..e6b45ba7b 100644
--- a/wp-content/plugins/akismet/akismet.php
+++ b/wp-content/plugins/akismet/akismet.php
@@ -6,7 +6,7 @@
Plugin Name: Akismet Anti-Spam
Plugin URI: https://akismet.com/
Description: Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
-Version: 4.2.2
+Version: 4.2.4
Author: Automattic
Author URI: https://automattic.com/wordpress-plugins/
License: GPLv2 or later
@@ -37,7 +37,7 @@ if ( !function_exists( 'add_action' ) ) {
exit;
}
-define( 'AKISMET_VERSION', '4.2.2' );
+define( 'AKISMET_VERSION', '4.2.4' );
define( 'AKISMET__MINIMUM_WP_VERSION', '5.0' );
define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'AKISMET_DELETE_LIMIT', 10000 );
diff --git a/wp-content/plugins/akismet/class.akismet-admin.php b/wp-content/plugins/akismet/class.akismet-admin.php
index c6cb13557..3b6badfce 100644
--- a/wp-content/plugins/akismet/class.akismet-admin.php
+++ b/wp-content/plugins/akismet/class.akismet-admin.php
@@ -434,7 +434,7 @@ class Akismet_Admin {
if ( ! wp_verify_nonce( $_POST['nonce'], 'akismet_check_for_spam' ) ) {
wp_send_json( array(
- 'error' => __( "You don't have permission to do that."),
+ 'error' => __( 'You don’t have permission to do that.', 'akismet' ),
));
return;
}
@@ -584,10 +584,8 @@ class Akismet_Admin {
if ( $history ) {
foreach ( $history as $row ) {
- $time = date( 'D d M Y @ h:i:s a', $row['time'] ) . ' GMT';
-
$message = '';
-
+
if ( ! empty( $row['message'] ) ) {
// Old versions of Akismet stored the message as a literal string in the commentmeta.
// New versions don't do that for two reasons:
@@ -595,96 +593,112 @@ class Akismet_Admin {
// 2) The message can be translated into the current language of the blog, not stuck
// in the language of the blog when the comment was made.
$message = esc_html( $row['message'] );
- }
-
- // If possible, use a current translation.
- switch ( $row['event'] ) {
- case 'recheck-spam';
- $message = esc_html( __( 'Akismet re-checked and caught this comment as spam.', 'akismet' ) );
- break;
- case 'check-spam':
- $message = esc_html( __( 'Akismet caught this comment as spam.', 'akismet' ) );
- break;
- case 'recheck-ham':
- $message = esc_html( __( 'Akismet re-checked and cleared this comment.', 'akismet' ) );
- break;
- case 'check-ham':
- $message = esc_html( __( 'Akismet cleared this comment.', 'akismet' ) );
- break;
- case 'wp-blacklisted':
- case 'wp-disallowed':
- $message = sprintf(
- /* translators: The placeholder is a WordPress PHP function name. */
- esc_html( __( 'Comment was caught by %s.', 'akismet' ) ),
- function_exists( 'wp_check_comment_disallowed_list' ) ? 'wp_check_comment_disallowed_list' : 'wp_blacklist_check'
- );
- break;
- case 'report-spam':
- if ( isset( $row['user'] ) ) {
- $message = esc_html( sprintf( __( '%s reported this comment as spam.', 'akismet' ), $row['user'] ) );
- }
- else if ( ! $message ) {
- $message = esc_html( __( 'This comment was reported as spam.', 'akismet' ) );
- }
- break;
- case 'report-ham':
- if ( isset( $row['user'] ) ) {
- $message = esc_html( sprintf( __( '%s reported this comment as not spam.', 'akismet' ), $row['user'] ) );
- }
- else if ( ! $message ) {
- $message = esc_html( __( 'This comment was reported as not spam.', 'akismet' ) );
- }
- break;
- case 'cron-retry-spam':
- $message = esc_html( __( 'Akismet caught this comment as spam during an automatic retry.' , 'akismet') );
- break;
- case 'cron-retry-ham':
- $message = esc_html( __( 'Akismet cleared this comment during an automatic retry.', 'akismet') );
- break;
- case 'check-error':
- if ( isset( $row['meta'], $row['meta']['response'] ) ) {
- $message = sprintf( esc_html( __( 'Akismet was unable to check this comment (response: %s) but will automatically retry later.', 'akismet') ), '' . esc_html( $row['meta']['response'] ) . '' );
- }
- else {
- $message = esc_html( __( 'Akismet was unable to check this comment but will automatically retry later.', 'akismet' ) );
- }
- break;
- case 'recheck-error':
- if ( isset( $row['meta'], $row['meta']['response'] ) ) {
- $message = sprintf( esc_html( __( 'Akismet was unable to recheck this comment (response: %s).', 'akismet') ), '' . esc_html( $row['meta']['response'] ) . '' );
- }
- else {
- $message = esc_html( __( 'Akismet was unable to recheck this comment.', 'akismet' ) );
- }
- break;
- default:
- if ( preg_match( '/^status-changed/', $row['event'] ) ) {
- // Half of these used to be saved without the dash after 'status-changed'.
- // See https://plugins.trac.wordpress.org/changeset/1150658/akismet/trunk
- $new_status = preg_replace( '/^status-changed-?/', '', $row['event'] );
- $message = sprintf( esc_html( __( 'Comment status was changed to %s', 'akismet' ) ), '' . esc_html( $new_status ) . '' );
- }
- else if ( preg_match( '/^status-/', $row['event'] ) ) {
- $new_status = preg_replace( '/^status-/', '', $row['event'] );
-
+ } else if ( ! empty( $row['event'] ) ) {
+ // If possible, use a current translation.
+ switch ( $row['event'] ) {
+ case 'recheck-spam':
+ $message = esc_html( __( 'Akismet re-checked and caught this comment as spam.', 'akismet' ) );
+ break;
+ case 'check-spam':
+ $message = esc_html( __( 'Akismet caught this comment as spam.', 'akismet' ) );
+ break;
+ case 'recheck-ham':
+ $message = esc_html( __( 'Akismet re-checked and cleared this comment.', 'akismet' ) );
+ break;
+ case 'check-ham':
+ $message = esc_html( __( 'Akismet cleared this comment.', 'akismet' ) );
+ break;
+ case 'wp-blacklisted':
+ case 'wp-disallowed':
+ $message = sprintf(
+ /* translators: The placeholder is a WordPress PHP function name. */
+ esc_html( __( 'Comment was caught by %s.', 'akismet' ) ),
+ function_exists( 'wp_check_comment_disallowed_list' ) ? 'wp_check_comment_disallowed_list' : 'wp_blacklist_check'
+ );
+ break;
+ case 'report-spam':
if ( isset( $row['user'] ) ) {
- $message = sprintf( esc_html( __( '%1$s changed the comment status to %2$s.', 'akismet' ) ), $row['user'], '' . esc_html( $new_status ) . '' );
+ /* translators: The placeholder is a username. */
+ $message = esc_html( sprintf( __( '%s reported this comment as spam.', 'akismet' ), $row['user'] ) );
+ } else if ( ! $message ) {
+ $message = esc_html( __( 'This comment was reported as spam.', 'akismet' ) );
}
- }
- break;
-
+ break;
+ case 'report-ham':
+ if ( isset( $row['user'] ) ) {
+ /* translators: The placeholder is a username. */
+ $message = esc_html( sprintf( __( '%s reported this comment as not spam.', 'akismet' ), $row['user'] ) );
+ } else if ( ! $message ) {
+ $message = esc_html( __( 'This comment was reported as not spam.', 'akismet' ) );
+ }
+ break;
+ case 'cron-retry-spam':
+ $message = esc_html( __( 'Akismet caught this comment as spam during an automatic retry.', 'akismet' ) );
+ break;
+ case 'cron-retry-ham':
+ $message = esc_html( __( 'Akismet cleared this comment during an automatic retry.', 'akismet' ) );
+ break;
+ case 'check-error':
+ if ( isset( $row['meta'], $row['meta']['response'] ) ) {
+ /* translators: The placeholder is an error response returned by the API server. */
+ $message = sprintf( esc_html( __( 'Akismet was unable to check this comment (response: %s) but will automatically retry later.', 'akismet' ) ), '' . esc_html( $row['meta']['response'] ) . '' );
+ } else {
+ $message = esc_html( __( 'Akismet was unable to check this comment but will automatically retry later.', 'akismet' ) );
+ }
+ break;
+ case 'recheck-error':
+ if ( isset( $row['meta'], $row['meta']['response'] ) ) {
+ /* translators: The placeholder is an error response returned by the API server. */
+ $message = sprintf( esc_html( __( 'Akismet was unable to recheck this comment (response: %s).', 'akismet' ) ), '' . esc_html( $row['meta']['response'] ) . '' );
+ } else {
+ $message = esc_html( __( 'Akismet was unable to recheck this comment.', 'akismet' ) );
+ }
+ break;
+ default:
+ if ( preg_match( '/^status-changed/', $row['event'] ) ) {
+ // Half of these used to be saved without the dash after 'status-changed'.
+ // See https://plugins.trac.wordpress.org/changeset/1150658/akismet/trunk
+ $new_status = preg_replace( '/^status-changed-?/', '', $row['event'] );
+ /* translators: The placeholder is a short string (like 'spam' or 'approved') denoting the new comment status. */
+ $message = sprintf( esc_html( __( 'Comment status was changed to %s', 'akismet' ) ), '' . esc_html( $new_status ) . '' );
+ } else if ( preg_match( '/^status-/', $row['event'] ) ) {
+ $new_status = preg_replace( '/^status-/', '', $row['event'] );
+
+ if ( isset( $row['user'] ) ) {
+ /* translators: %1$s is a username; %2$s is a short string (like 'spam' or 'approved') denoting the new comment status. */
+ $message = sprintf( esc_html( __( '%1$s changed the comment status to %2$s.', 'akismet' ) ), $row['user'], '' . esc_html( $new_status ) . '' );
+ }
+ }
+ break;
+ }
}
if ( ! empty( $message ) ) {
echo '
'; - echo '' . sprintf( esc_html__('%s ago', 'akismet'), human_time_diff( $row['time'] ) ) . ''; - echo ' - '; - echo $message; // esc_html() is done above so that we can use HTML in some messages. + + if ( isset( $row['time'] ) ) { + $time = gmdate( 'D d M Y @ h:i:s a', $row['time'] ) . ' GMT'; + + /* translators: The placeholder is an amount of time, like "7 seconds" or "3 days" returned by the function human_time_diff(). */ + $time_html = '' . sprintf( esc_html__( '%s ago', 'akismet' ), human_time_diff( $row['time'] ) ) . ''; + + echo sprintf( + /* translators: %1$s is a human-readable time difference, like "3 hours ago", and %2$s is an already-translated phrase describing how a comment's status changed, like "This comment was reported as spam." */ + esc_html( __( '%1$s - %2$s', 'akismet' ) ), + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + $time_html, + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + $message + ); // esc_html() is done above so that we can use HTML in $message. + } else { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo $message; // esc_html() is done above so that we can use HTML in $message. + } + echo '
'; } } - } - else { + } else { echo ''; echo esc_html( __( 'No comment history.', 'akismet' ) ); echo '
'; diff --git a/wp-content/plugins/akismet/class.akismet.php b/wp-content/plugins/akismet/class.akismet.php index 8e6ab2138..3ca533919 100644 --- a/wp-content/plugins/akismet/class.akismet.php +++ b/wp-content/plugins/akismet/class.akismet.php @@ -68,6 +68,10 @@ class Akismet { add_filter( 'frm_filter_final_form', array( 'Akismet', 'inject_custom_form_fields' ) ); add_filter( 'frm_akismet_values', array( 'Akismet', 'prepare_custom_form_values' ) ); + // Fluent Forms + add_filter( 'fluentform_form_element_start', array( 'Akismet', 'output_custom_form_fields' ) ); + add_filter( 'fluentform_akismet_fields', array( 'Akismet', 'prepare_custom_form_values' ), 10, 2 ); + add_action( 'update_option_wordpress_api_key', array( 'Akismet', 'updated_option' ), 10, 2 ); add_action( 'add_option_wordpress_api_key', array( 'Akismet', 'added_option' ), 10, 2 ); @@ -1399,9 +1403,16 @@ class Akismet { * Ensure that any Akismet-added form fields are included in the comment-check call. * * @param array $form + * @param array $data Some plugins will supply the POST data via the filter, since they don't + * read it directly from $_POST. * @return array $form */ - public static function prepare_custom_form_values( $form ) { + public static function prepare_custom_form_values( $form, $data = null ) { + if ( is_null( $data ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing + $data = $_POST; + } + $prefix = 'ak_'; // Contact Form 7 uses _wpcf7 as a prefix to know which fields to exclude from comment_content. @@ -1409,8 +1420,7 @@ class Akismet { $prefix = '_wpcf7_ak_'; } - // phpcs:ignore WordPress.Security.NonceVerification.Missing - foreach ( $_POST as $key => $val ) { + foreach ( $data as $key => $val ) { if ( 0 === strpos( $key, $prefix ) ) { $form[ 'POST_ak_' . substr( $key, strlen( $prefix ) ) ] = $val; } diff --git a/wp-content/plugins/akismet/readme.txt b/wp-content/plugins/akismet/readme.txt index 89cc764a7..198e7933a 100644 --- a/wp-content/plugins/akismet/readme.txt +++ b/wp-content/plugins/akismet/readme.txt @@ -2,8 +2,8 @@ Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, cfinke, automattic, jgs, procifer, stephdau Tags: comments, spam, antispam, anti-spam, contact form, anti spam, comment moderation, comment spam, contact form spam, spam comments Requires at least: 5.0 -Tested up to: 5.9 -Stable tag: 4.2.2 +Tested up to: 6.0 +Stable tag: 4.2.4 License: GPLv2 or later The best anti-spam protection to block spam comments and spam in a contact form. The most trusted antispam solution for WordPress and WooCommerce. @@ -30,13 +30,27 @@ Upload the Akismet plugin to your blog, activate it, and then enter your Akismet == Changelog == += 4.2.4 = +*Release Date - 20 May 2022* + +* Improved translator instructions for comment history. +* Bumped the "Tested up to" tag to WP 6.0. + += 4.2.3 = +*Release Date - 25 April 2022* + +* Improved compatibility with Fluent Forms +* Fixed missing translation domains +* Updated stats URL. +* Improved accessibility of elements on the config page. + = 4.2.2 = *Release Date - 24 January 2022* * Improved compatibility with Formidable Forms * Fixed a bug that could cause issues when multiple contact forms appear on one page. * Updated delete_comment and deleted_comment actions to pass two arguments to match WordPress core since 4.9.0. -* Add a filter that allows comment types to be excluded when counting users' approved comments. +* Added a filter that allows comment types to be excluded when counting users' approved comments. = 4.2.1 = *Release Date - 1 October 2021* @@ -93,6 +107,6 @@ Upload the Akismet plugin to your blog, activate it, and then enter your Akismet *Release Date - 4 June 2020* * Disable "Check for Spam" button until the page is loaded to avoid errors with clicking through to queue recheck endpoint directly. -* Add filter "akismet_enable_mshots" to allow disabling screenshot popups on the edit comments admin page. +* Added filter "akismet_enable_mshots" to allow disabling screenshot popups on the edit comments admin page. For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/akismet/trunk/changelog.txt) delivered with the plugin. diff --git a/wp-content/plugins/akismet/views/config.php b/wp-content/plugins/akismet/views/config.php index df24b91dc..0aa1ac93f 100644 --- a/wp-content/plugins/akismet/views/config.php +++ b/wp-content/plugins/akismet/views/config.php @@ -35,7 +35,7 @@r?"next":i '+e+"");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){var t=this;if("object"==typeof e&&"length"in e)for(var a=0;a r?"next":i '+e+"");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){var t=this;if("object"==typeof e&&"length"in e)for(var a=0;a=d.length&&(g=d.length-1),(c||o.initialSlide||0)===(u||0)&&a&&n.emit("beforeSlideChangeStart");var b,w=-d[g];if(n.updateProgress(w),o.normalizeSlideIndex)for(var y=0;y=i.length-s&&(t=-i.length+a+s,t+=s,e.slideTo(t,0,!1,!0)&&0!==d&&e.setTranslate((o?-e.translate:e.translate)-d)),e.allowSlidePrev=r,e.allowSlideNext=n,e.emit("loopFix")}function st(){var e=this,t=e.$wrapperEl,a=e.params,i=e.slides;t.children("."+a.slideClass+"."+a.slideDuplicateClass+",."+a.slideClass+"."+a.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}function rt(e){var t=this;if(!(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)){var a=t.el;a.style.cursor="move",a.style.cursor=e?"-webkit-grabbing":"-webkit-grab",a.style.cursor=e?"-moz-grabbin":"-moz-grab",a.style.cursor=e?"grabbing":"grab"}}function nt(){var e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.el.style.cursor="")}function lt(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){for(var u=n.loadPrevNextAmount,c=l,h=Math.min(s+c+Math.max(u,c),i.length),v=Math.max(s-Math.max(c,u),0),f=s+l;f=0&&(w=parseFloat(w.replace("%",""))/100*r),e.virtualSize=-w,n?p.css({marginLeft:"",marginTop:""}):p.css({marginRight:"",marginBottom:""}),i.slidesPerColumn>1&&(T=Math.floor(u/i.slidesPerColumn)===u/e.params.slidesPerColumn?u:Math.ceil(u/i.slidesPerColumn)*i.slidesPerColumn,"auto"!==i.slidesPerView&&"row"===i.slidesPerColumnFill&&(T=Math.max(T,i.slidesPerView*i.slidesPerColumn)));for(var S,M,z,k=i.slidesPerColumn,P=T/k,$=Math.floor(u/i.slidesPerColumn),L=0;L1){var O=void 0,A=void 0,D=void 0;if("row"===i.slidesPerColumnFill&&i.slidesPerGroup>1){var N=Math.floor(L/(i.slidesPerGroup*i.slidesPerColumn)),G=L-i.slidesPerColumn*i.slidesPerGroup*N,B=0===N?i.slidesPerGroup:Math.min(Math.ceil((u-N*k*i.slidesPerGroup)/k),i.slidesPerGroup);O=(A=G-(D=Math.floor(G/B))*B+N*i.slidesPerGroup)+D*T/k,I.css({"-webkit-box-ordinal-group":O,"-moz-box-ordinal-group":O,"-ms-flex-order":O,"-webkit-order":O,order:O})}else"column"===i.slidesPerColumnFill?(D=L-(A=Math.floor(L/k))*k,(A>$||A===$&&D===k-1)&&(D+=1)>=k&&(D=0,A+=1)):A=L-(D=Math.floor(L/P))*P;I.css(t("margin-top"),0!==D&&i.spaceBetween&&i.spaceBetween+"px")}if("none"!==I.css("display")){if("auto"===i.slidesPerView){var H=getComputedStyle(I[0]),X=I[0].style.transform,Y=I[0].style.webkitTransform;if(X&&(I[0].style.transform="none"),Y&&(I[0].style.webkitTransform="none"),i.roundLengths)C=e.isHorizontal()?I.outerWidth(!0):I.outerHeight(!0);else{var R=a(H,"width"),W=a(H,"padding-left"),V=a(H,"padding-right"),F=a(H,"margin-left"),_=a(H,"margin-right"),q=H.getPropertyValue("box-sizing");if(q&&"border-box"===q)C=R+F+_;else{var j=I[0],U=j.clientWidth;C=R+W+V+F+_+(j.offsetWidth-U)}}X&&(I[0].style.transform=X),Y&&(I[0].style.webkitTransform=Y),i.roundLengths&&(C=Math.floor(C))}else C=(r-(i.slidesPerView-1)*w)/i.slidesPerView,i.roundLengths&&(C=Math.floor(C)),p[L]&&(p[L].style[t("width")]=C+"px");p[L]&&(p[L].swiperSlideSize=C),v.push(C),i.centeredSlides?(y=y+C/2+E/2+w,0===E&&0!==L&&(y=y-r/2-w),0===L&&(y=y-r/2-w),Math.abs(y)<.001&&(y=0),i.roundLengths&&(y=Math.floor(y)),x%i.slidesPerGroup==0&&c.push(y),h.push(y)):(i.roundLengths&&(y=Math.floor(y)),(x-Math.min(e.params.slidesPerGroupSkip,x))%e.params.slidesPerGroup==0&&c.push(y),h.push(y),y=y+C+w),e.virtualSize+=C+w,E=C,x+=1}}if(e.virtualSize=Math.max(e.virtualSize,r)+m,n&&l&&("slide"===i.effect||"coverflow"===i.effect)&&s.css({width:e.virtualSize+i.spaceBetween+"px"}),i.setWrapperSize&&s.css(((M={})[t("width")]=e.virtualSize+i.spaceBetween+"px",M)),i.slidesPerColumn>1&&(e.virtualSize=(C+i.spaceBetween)*T,e.virtualSize=Math.ceil(e.virtualSize/i.slidesPerColumn)-i.spaceBetween,s.css(((z={})[t("width")]=e.virtualSize+i.spaceBetween+"px",z)),i.centeredSlides)){S=[];for(var K=0;K=s[u]&&i=s[u]&&(p=u);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if(r.indexOf(i)>=0)t=r.indexOf(i);else{var c=Math.min(n.slidesPerGroupSkip,p);t=c+Math.floor((p-c)/n.slidesPerGroup)}if(t>=r.length&&(t=r.length-1),p!==l){var h=parseInt(a.slides.eq(p).attr("data-swiper-slide-index")||p,10);me(a,{snapIndex:t,realIndex:h,previousIndex:l,activeIndex:p}),a.emit("activeIndexChange"),a.emit("snapIndexChange"),o!==h&&a.emit("realIndexChange"),(a.initialized||a.params.runCallbacksOnInit)&&a.emit("slideChange")}else t!==d&&(a.snapIndex=t,a.emit("snapIndexChange"))}function Xe(e){var t,a=this,i=a.params,s=T(e.target).closest("."+i.slideClass)[0],r=!1;if(s)for(var n=0;n=d.length&&(g=d.length-1),(c||o.initialSlide||0)===(u||0)&&a&&n.emit("beforeSlideChangeStart");var b,w=-d[g];if(n.updateProgress(w),o.normalizeSlideIndex)for(var y=0;y=i.length-s&&(t=-i.length+a+s,t+=s,e.slideTo(t,0,!1,!0)&&0!==d&&e.setTranslate((o?-e.translate:e.translate)-d)),e.allowSlidePrev=r,e.allowSlideNext=n,e.emit("loopFix")}function st(){var e=this,t=e.$wrapperEl,a=e.params,i=e.slides;t.children("."+a.slideClass+"."+a.slideDuplicateClass+",."+a.slideClass+"."+a.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}function rt(e){var t=this;if(!(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)){var a=t.el;a.style.cursor="move",a.style.cursor=e?"-webkit-grabbing":"-webkit-grab",a.style.cursor=e?"-moz-grabbin":"-moz-grab",a.style.cursor=e?"grabbing":"grab"}}function nt(){var e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.el.style.cursor="")}function lt(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){for(var u=n.loadPrevNextAmount,c=l,h=Math.min(s+c+Math.max(u,c),i.length),v=Math.max(s-Math.max(c,u),0),f=s+l;f>>0},t.sum64_4_lo=function(e,t,n,r,a,o,i,s){return t+r+o+s>>>0},t.sum64_5_hi=function(e,t,n,r,a,o,i,s,l,c){var u=0,p=t;return u+=(p=p+r>>>0)>>0)
\n"},i.fence=function(e,t,n,r,i){var s,l,c,u,p,d=e[t],m=d.info?a(d.info).trim():"",h="",f="";return m&&(h=(c=m.split(/(\s+)/g))[0],f=c.slice(2).join("")),0===(s=n.highlight&&n.highlight(d.content,h,f)||o(d.content)).indexOf(""+o(e[t].content)+"
\n"):""+s+"
\n"},i.image=function(e,t,n,r,a){var o=e[t];return o.attrs[o.attrIndex("alt")][1]=a.renderInlineAsText(o.children,n,r),a.renderToken(e,t,n)},i.hardbreak=function(e,t,n){return n.xhtmlOut?""+s+"
\n":"
\n"},i.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"
\n":"
\n":"\n"},i.text=function(e,t){return o(e[t].content)},i.html_block=function(e,t){return e[t].content},i.html_inline=function(e,t){return e[t].content},s.prototype.renderAttrs=function(e){var t,n,r;if(!e.attrs)return"";for(r="",t=0,n=e.attrs.length;t=4)return!1;if(62!==e.src.charCodeAt(S++))return!1;if(a)return!0;for(l=m=e.sCount[t]+1,32===e.src.charCodeAt(S)?(S++,l++,m++,o=!1,y=!0):9===e.src.charCodeAt(S)?(y=!0,(e.bsCount[t]+m)%4==3?(S++,l++,m++,o=!1):o=!0):y=!1,h=[e.bMarks[t]],e.bMarks[t]=S;S