From 94bd9b0cb742c620772bb36faa800ea2b9aa80b5 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 12 Jul 2017 14:29:33 +0200
Subject: [PATCH 01/38] Hotfix: bump version to 1.6.8.
---
imagify.php | 4 ++--
package.json | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/imagify.php b/imagify.php
index 9acaffb0b..44ed9f00a 100644
--- a/imagify.php
+++ b/imagify.php
@@ -3,7 +3,7 @@
* Plugin Name: Imagify
* Plugin URI: https://wordpress.org/plugins/imagify/
* Description: Dramaticaly reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
- * Version: 1.6.7
+ * Version: 1.6.8
* Author: WP Media
* Author URI: http://wp-media.me
* Licence: GPLv2
@@ -17,7 +17,7 @@
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
// Imagify defines.
-define( 'IMAGIFY_VERSION' , '1.6.7' );
+define( 'IMAGIFY_VERSION' , '1.6.8' );
define( 'IMAGIFY_SLUG' , 'imagify' );
define( 'IMAGIFY_SETTINGS_SLUG' , IMAGIFY_SLUG . '_settings' );
define( 'IMAGIFY_WEB_MAIN' , 'https://imagify.io' );
diff --git a/package.json b/package.json
index 8b4150eff..c72b1d03d 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "imagify",
"description": "Imagify Image Optimizer. Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.",
- "version": "1.6.7",
+ "version": "1.6.8",
"homepage": "https://wordpress.org/plugins/imagify/",
"license": "GPL-2.0",
"private": true,
From aae9956dcb8b76bfe8a039a08a45cf9ef2c41e48 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 12 Jul 2017 14:30:17 +0200
Subject: [PATCH 02/38] Hotfix: we make typo.
---
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.txt b/readme.txt
index 5e969ccbe..cde7792de 100755
--- a/readme.txt
+++ b/readme.txt
@@ -143,7 +143,7 @@ When the plugin is disabled, your existing images remain optimized. Backups of t
* Improvement: Use cURL directly only to optimize an image. It helps when cURL is not available: less things will break in that case.
* Bug Fix: Fixed a bug with the plugin Screets Live Chat, prior to version 2.2.8.
* Regression fix: Fixed the buffer size on the bulk optimization page.
-* Dev stuff: Added a hook allowing to filter arguments when doing a request to our API. It can be used to increate the timeout value for example.
+* Dev stuff: Added a hook allowing to filter arguments when doing a request to our API. It can be used to increase the timeout value for example.
= 1.6.6 =
* New: Compatibility with the plugin WP Offload S3 Lite. Your images now will be sent to Amazon S3 after being optimized. Also works when you store your images only on S3, not locally.
From 92ae99ae99cc860157f8dd4b01012591fbe543b2 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 12 Jul 2017 14:57:31 +0200
Subject: [PATCH 03/38] Made the "Save & Go to Bulk Optimizer" button work
(redirect) even if settings haven't changed.
---
inc/admin/options.php | 51 ++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 18 deletions(-)
diff --git a/inc/admin/options.php b/inc/admin/options.php
index d85120ff8..daf9200b4 100755
--- a/inc/admin/options.php
+++ b/inc/admin/options.php
@@ -93,37 +93,52 @@ function _imagify_after_save_network_options( $option, $value, $old_value ) {
_imagify_after_save_options( $old_value, $value );
}
+add_filter( 'pre_update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
+/**
+ * If the user clicked the "Save & Go to Bulk Optimizer" button, set a redirection to the bulk optimizer.
+ * We use this hook because it can be triggered even if the option value hasn't changed.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @param mixed $value The new, unserialized option value.
+ * @param mixed $old_value The old option value.
+ * @return mixed The option value.
+ */
+function _imagify_maybe_set_redirection_before_save_options( $value, $old_value ) {
+
+ if ( ! is_admin() || ! isset( $_POST['submit-goto-bulk'] ) ) { // WPCS: CSRF ok.
+ return $value;
+ }
+
+ $_REQUEST['_wp_http_referer'] = esc_url_raw( get_admin_url( get_current_blog_id(), 'upload.php?page=imagify-bulk-optimization' ) );
+
+ return $value;
+}
+
add_action( 'update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_options', 10, 2 );
/**
* Used to launch some actions after saving the options.
*
* @author Jonathan
- * @since 1.0
- * @since 1.5 Used to redirect user to Bulk Optimizer (if requested).
+ * @since 1.0
+ * @since 1.5 Used to redirect user to Bulk Optimizer (if requested).
+ * @since 1.6.8 Not used to redirect user to Bulk Optimizer anymore: see _imagify_maybe_set_redirection_before_save_options().
*
* @param mixed $old_value The old option value.
* @param mixed $value The new option value.
*/
function _imagify_after_save_options( $old_value, $value ) {
- if ( $old_value && $value && ( ! isset( $old_value['api_key'] ) || $old_value['api_key'] !== $value['api_key'] ) ) {
- if ( is_wp_error( get_imagify_user() ) ) {
- imagify_renew_notice( 'wrong-api-key' );
- delete_site_transient( 'imagify_check_licence_1' );
- } else {
- imagify_dismiss_notice( 'wrong-api-key' );
- }
+ if ( ! $old_value || ! $value || isset( $old_value['api_key'], $value['api_key'] ) && $old_value['api_key'] === $value['api_key'] ) {
+ return;
}
- /**
- * Redirect the user to the bulk optimization.
- *
- * @author Geoffrey
- * @since 1.5
- */
- if ( isset( $_POST['submit-goto-bulk'] ) ) { // WPCS: CSRF ok.
- wp_safe_redirect( get_admin_url( get_current_blog_id(), 'upload.php?page=imagify-bulk-optimization' ) );
- exit;
+ if ( is_wp_error( get_imagify_user() ) ) {
+ imagify_renew_notice( 'wrong-api-key' );
+ delete_site_transient( 'imagify_check_licence_1' );
+ } else {
+ imagify_dismiss_notice( 'wrong-api-key' );
}
}
From 2348dd13f20fe21ab7c6f0f6517e275edcbdfaef Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 12 Jul 2017 15:51:32 +0200
Subject: [PATCH 04/38] Added support for multisite: the user will be
redirected to the main site's bulk optimization page.
---
inc/admin/options.php | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/inc/admin/options.php b/inc/admin/options.php
index daf9200b4..d43fddbc9 100755
--- a/inc/admin/options.php
+++ b/inc/admin/options.php
@@ -93,7 +93,11 @@ function _imagify_after_save_network_options( $option, $value, $old_value ) {
_imagify_after_save_options( $old_value, $value );
}
-add_filter( 'pre_update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
+if ( imagify_is_active_for_network() ) {
+ add_filter( 'pre_update_site_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
+} else {
+ add_filter( 'pre_update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
+}
/**
* If the user clicked the "Save & Go to Bulk Optimizer" button, set a redirection to the bulk optimizer.
* We use this hook because it can be triggered even if the option value hasn't changed.
From 1a1f85750965e75d492bbcf84302356ea4a4f5d4 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 12 Jul 2017 16:03:38 +0200
Subject: [PATCH 05/38] Reordered things a bit and added
`imagify_is_active_for_network()` tests for
`_imagify_after_save_network_options()` and `_imagify_after_save_options()`
hooks.
---
inc/admin/options.php | 36 ++++++++++++++++++++----------------
1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/inc/admin/options.php b/inc/admin/options.php
index d43fddbc9..ca0451685 100755
--- a/inc/admin/options.php
+++ b/inc/admin/options.php
@@ -78,21 +78,6 @@ function _imagify_pre_update_option( $value, $old_value ) {
return $value;
}
-add_action( 'update_site_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_network_options', 10, 3 );
-/**
- * Used to launch some actions after saving the network options.
- *
- * @author Grégory Viguier
- * @since 1.6.5
- *
- * @param string $option Name of the network option.
- * @param mixed $value Current value of the network option.
- * @param mixed $old_value Old value of the network option.
- */
-function _imagify_after_save_network_options( $option, $value, $old_value ) {
- _imagify_after_save_options( $old_value, $value );
-}
-
if ( imagify_is_active_for_network() ) {
add_filter( 'pre_update_site_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
} else {
@@ -120,7 +105,26 @@ function _imagify_maybe_set_redirection_before_save_options( $value, $old_value
return $value;
}
-add_action( 'update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_options', 10, 2 );
+if ( imagify_is_active_for_network() ) {
+ add_action( 'update_site_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_network_options', 10, 3 );
+}
+/**
+ * Used to launch some actions after saving the network options.
+ *
+ * @author Grégory Viguier
+ * @since 1.6.5
+ *
+ * @param string $option Name of the network option.
+ * @param mixed $value Current value of the network option.
+ * @param mixed $old_value Old value of the network option.
+ */
+function _imagify_after_save_network_options( $option, $value, $old_value ) {
+ _imagify_after_save_options( $old_value, $value );
+}
+
+if ( ! imagify_is_active_for_network() ) {
+ add_action( 'update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_options', 10, 2 );
+}
/**
* Used to launch some actions after saving the options.
*
From 2618fe62cd2ec3a491c3f468e68a9c2ef35cc552 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Thu, 13 Jul 2017 00:52:13 +0200
Subject: [PATCH 06/38] In the medias library, display the "Restore Original"
bulk action only if there are restorable items, or if the backup option is
enabled.
---
assets/js/upload.js | 8 ++++++--
assets/js/upload.min.js | 2 +-
inc/admin/enqueue.php | 9 ++++++++-
inc/functions/admin-ui.php | 13 +++++++++++--
4 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/assets/js/upload.js b/assets/js/upload.js
index a93b04dca..11dca3c11 100755
--- a/assets/js/upload.js
+++ b/assets/js/upload.js
@@ -20,8 +20,12 @@ window.imagify = window.imagify || {
*/
var bulk_opt, get_var, check_modal;
- bulk_opt = '' + imagifyUpload.bulkActionsLabels.optimize + ' ';
- bulk_opt += '' + imagifyUpload.bulkActionsLabels.restore + ' ';
+ bulk_opt = '' + imagifyUpload.bulkActionsLabels.optimize + ' ';
+
+ if ( imagifyUpload.backup_option || $( '.attachment-has-backup' ).length ) {
+ // If the backup option is enabled, or if we have items that can be restored.
+ bulk_opt += '' + imagifyUpload.bulkActionsLabels.restore + ' ';
+ }
$( '.bulkactions select[name="action"]' ).find( 'option:last-child' ).before( bulk_opt );
$( '.bulkactions select[name="action2"]' ).find( 'option:last-child' ).before( bulk_opt );
diff --git a/assets/js/upload.min.js b/assets/js/upload.min.js
index 9d784d33a..2844e21da 100755
--- a/assets/js/upload.min.js
+++ b/assets/js/upload.min.js
@@ -1 +1 @@
-window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=parseInt(a(this).closest(".imagify-chart").next(".imagify-chart-value").text()),c=[{value:b,color:"#00B3D3"},{value:100-b,color:"#D8D8D8"}];new Chart(a(this)[0].getContext("2d")).Doughnut(c,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}var f,g,h;f=''+imagifyUpload.bulkActionsLabels.optimize+" ",f+=''+imagifyUpload.bulkActionsLabels.restore+" ",a('.bulkactions select[name="action"]').find("option:last-child").before(f),a('.bulkactions select[name="action2"]').find("option:last-child").before(f),a("#doaction").add("#doaction2").on("click",function(b){var c,d,e=a(this).prev("select").val().split("-");"imagify"===e[0]&&(b.preventDefault(),c=e[2],d=a('input[name^="media"]:checked').map(function(){return this.value}).get(),d.forEach(function(b,d){setTimeout(function(){a("#imagify-"+c+"-"+b).trigger("click")},300*d)}))}),a(b).on("click",".button-imagify-restore, .button-imagify-manual-upload, .button-imagify-manual-override-upload",function(b){var c=a(this),d=c.parents(".column-imagify_optimized_file, .compat-field-imagify .field"),f=c.attr("href");b.preventDefault(),d.length||(d=c.closest(".column")),d.html(' '+c.data("waiting-label")+"
"),a.get(f.replace("admin-post.php","admin-ajax.php")).done(function(a){d.html(a.data),d.find(".imagify-datas-more-action a").addClass("is-open").find(".the-text").text(d.find(".imagify-datas-more-action a").data("close")),d.find(".imagify-datas-details").addClass("is-open"),e(d.find(".imagify-chart-container").find("canvas"))})}),a(".imagify-datas-details").hide(),a(b).on("click",".imagify-datas-more-action a",function(b){var c=a(this);b.preventDefault(),c.hasClass("is-open")?(a(c.attr("href")).slideUp(300).removeClass("is-open"),c.removeClass("is-open").find(".the-text").text(c.data("open"))):(a(c.attr("href")).slideDown(300).addClass("is-open"),c.addClass("is-open").find(".the-text").text(c.data("close")))}),g=function(a){var b={};return c.location.href.replace(/[?&]+([^=&]+)=?([^&]*)?/gi,function(a,c,d){b[c]=void 0!==d?d:""}),a?b[a]?b[a]:null:b},h=function(){var b=setInterval(function(){var c=a(".media-modal .imagify-datas-details");c.length&&(c.hide(),e(a("#imagify-consumption-chart")),clearInterval(b),b=null)},20)},a(".upload-php").find(".media-frame.mode-grid").on("click",".attachment",function(){h()}),a(".upload-php").length&&g("item")&&h(),a("#insert-media-button").on("click.imagify",function(){var b=setInterval(function(){var c=a(".media-frame-content .attachments");c.length&&(c.on("click.imagify",".attachment",function(){h()}),clearInterval(b),b=null)},100)}),e(a(".imagify-chart-container").find("canvas"))}(jQuery,document,window);
\ No newline at end of file
+window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=parseInt(a(this).closest(".imagify-chart").next(".imagify-chart-value").text()),c=[{value:b,color:"#00B3D3"},{value:100-b,color:"#D8D8D8"}];new Chart(a(this)[0].getContext("2d")).Doughnut(c,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}var f,g,h;f=''+imagifyUpload.bulkActionsLabels.optimize+" ",(imagifyUpload.backup_option||a(".attachment-has-backup").length)&&(f+=''+imagifyUpload.bulkActionsLabels.restore+" "),a('.bulkactions select[name="action"]').find("option:last-child").before(f),a('.bulkactions select[name="action2"]').find("option:last-child").before(f),a("#doaction").add("#doaction2").on("click",function(b){var c,d,e=a(this).prev("select").val().split("-");"imagify"===e[0]&&(b.preventDefault(),c=e[2],d=a('input[name^="media"]:checked').map(function(){return this.value}).get(),d.forEach(function(b,d){setTimeout(function(){a("#imagify-"+c+"-"+b).trigger("click")},300*d)}))}),a(b).on("click",".button-imagify-restore, .button-imagify-manual-upload, .button-imagify-manual-override-upload",function(b){var c=a(this),d=c.parents(".column-imagify_optimized_file, .compat-field-imagify .field"),f=c.attr("href");b.preventDefault(),d.length||(d=c.closest(".column")),d.html(' '+c.data("waiting-label")+"
"),a.get(f.replace("admin-post.php","admin-ajax.php")).done(function(a){d.html(a.data),d.find(".imagify-datas-more-action a").addClass("is-open").find(".the-text").text(d.find(".imagify-datas-more-action a").data("close")),d.find(".imagify-datas-details").addClass("is-open"),e(d.find(".imagify-chart-container").find("canvas"))})}),a(".imagify-datas-details").hide(),a(b).on("click",".imagify-datas-more-action a",function(b){var c=a(this);b.preventDefault(),c.hasClass("is-open")?(a(c.attr("href")).slideUp(300).removeClass("is-open"),c.removeClass("is-open").find(".the-text").text(c.data("open"))):(a(c.attr("href")).slideDown(300).addClass("is-open"),c.addClass("is-open").find(".the-text").text(c.data("close")))}),g=function(a){var b={};return c.location.href.replace(/[?&]+([^=&]+)=?([^&]*)?/gi,function(a,c,d){b[c]=void 0!==d?d:""}),a?b[a]?b[a]:null:b},h=function(){var b=setInterval(function(){var c=a(".media-modal .imagify-datas-details");c.length&&(c.hide(),e(a("#imagify-consumption-chart")),clearInterval(b),b=null)},20)},a(".upload-php").find(".media-frame.mode-grid").on("click",".attachment",function(){h()}),a(".upload-php").length&&g("item")&&h(),a("#insert-media-button").on("click.imagify",function(){var b=setInterval(function(){var c=a(".media-frame-content .attachments");c.length&&(c.on("click.imagify",".attachment",function(){h()}),clearInterval(b),b=null)},100)}),e(a(".imagify-chart-container").find("canvas"))}(jQuery,document,window);
\ No newline at end of file
diff --git a/inc/admin/enqueue.php b/inc/admin/enqueue.php
index 6c4c1e055..75cfd8afb 100755
--- a/inc/admin/enqueue.php
+++ b/inc/admin/enqueue.php
@@ -151,7 +151,14 @@ function _imagify_admin_print_styles() {
*/
if ( isset( $current_screen ) && ( 'upload' === $current_screen->base || 'post' === $current_screen->base ) ) {
wp_enqueue_script( 'imagify-js-upload' );
- wp_localize_script( 'imagify-js-upload', 'imagifyUpload', get_imagify_localize_script_translations( 'upload' ) );
+
+ $upload_data = get_imagify_localize_script_translations( 'upload' );
+
+ if ( 'upload' === $current_screen->base && get_imagify_option( 'backup' ) ) {
+ $upload_data['backup_option'] = 1;
+ }
+
+ wp_localize_script( 'imagify-js-upload', 'imagifyUpload', $upload_data );
}
/**
diff --git a/inc/functions/admin-ui.php b/inc/functions/admin-ui.php
index 2bc0e6dae..9d7b9944b 100644
--- a/inc/functions/admin-ui.php
+++ b/inc/functions/admin-ui.php
@@ -21,9 +21,13 @@ function get_imagify_attachment_optimization_text( $attachment, $context = 'wp'
$reoptimize_output = $reoptimize_link ? $reoptimize_link : '';
$reoptimize_output_before = '';
$reoptimize_output_after = '
';
- $error = get_imagify_attachment_error_text( $attachment, $context );
+ $error = get_imagify_attachment_error_text( $attachment, $context );
if ( $error ) {
+ if ( $attachment->has_backup() ) {
+ $reoptimize_output .= ' ';
+ }
+
$reoptimize_output = $reoptimize_output_before . $reoptimize_output . $reoptimize_output_after;
return 'post.php' === $pagenow ? $output_before . $error . $reoptimize_output . $output_after : $error . $reoptimize_output;
@@ -86,7 +90,7 @@ function get_imagify_attachment_optimization_text( $attachment, $context = 'wp'
'attachment_id' => $attachment_id,
'context' => $context,
);
- $class = ( 'post.php' !== $pagenow ) ? 'button-imagify-restore' : '';
+ $class = ( 'post.php' !== $pagenow ) ? 'button-imagify-restore attachment-has-backup' : '';
$output .= '';
$output .= ' ' . __( 'Restore Original', 'imagify' );
$output .= ' ';
@@ -245,6 +249,11 @@ function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
'context' => $context,
);
$output .= '' . __( 'Optimize', 'imagify' ) . ' ';
+
+ if ( $attachment->has_backup() ) {
+ $output .= ' ';
+ }
+
return $output;
}
From 10911c5b440fd9ad561836b56e65473dc803f308 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Thu, 13 Jul 2017 11:46:42 +0200
Subject: [PATCH 07/38] Hotfix: bring 1.6.7.1 in.
---
inc/functions/admin.php | 2 ++
readme.txt | 5 ++++-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/inc/functions/admin.php b/inc/functions/admin.php
index 98578e064..722b35c45 100755
--- a/inc/functions/admin.php
+++ b/inc/functions/admin.php
@@ -258,6 +258,8 @@ function get_imagify_bulk_buffer_size() {
* )
*/
function imagify_get_wpdb_metas( $metas, $ids ) {
+ global $wpdb;
+
if ( ! $ids ) {
return array_fill_keys( array_keys( $metas ), array() );
}
diff --git a/readme.txt b/readme.txt
index cde7792de..7c1132186 100755
--- a/readme.txt
+++ b/readme.txt
@@ -3,7 +3,7 @@ Contributors: wp_media, GregLone
Tags: compress image, images, performance, optimization, photos, upload, resize, gif, png, jpg, reduce image size, retina
Requires at least: 3.7.0
Tested up to: 4.8.0
-Stable tag: 1.6.7
+Stable tag: 1.6.7.1
Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.
@@ -136,6 +136,9 @@ When the plugin is disabled, your existing images remain optimized. Backups of t
3. Media Page
== Changelog ==
+= 1.6.7.1 =
+* Bug Fix: Fixed the "Unknown error" during a bulk optimization.
+
= 1.6.7 =
* Improvement: Compatibility with the plugin WP Offload S3 Pro, and fixed a few things for both Lite and Pro versions.
* Improvement: Improved performance on the bulk optimization page for huge image libraries.
From 11bf908ac23abb8176c9803f8ff6674deebbdf38 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Thu, 13 Jul 2017 15:47:11 +0200
Subject: [PATCH 08/38] Introduced
`imagify_is_attachment_mime_type_supported()` as a replacement for
`wp_attachment_is_image()`. The main difference is that this new function
will return true only for the mime types supported by Imagify, instead of all
image formats. Deprecated `Imagify_AS3CF::is_mime_type_supported()`.
---
.../class-imagify-as3cf-attachment.php | 2 +-
.../inc/classes/class-imagify-as3cf.php | 25 +++++---------
inc/admin/media.php | 2 +-
inc/classes/class-imagify-attachment.php | 33 +++++++++++--------
inc/functions/admin-ui.php | 2 +-
inc/functions/attachments.php | 28 ++++++++++++++++
6 files changed, 58 insertions(+), 34 deletions(-)
diff --git a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
index 6137c3ba3..f4a4c845c 100644
--- a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
+++ b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
@@ -820,6 +820,6 @@ protected function file_should_be_deleted( $file_path ) {
* @return bool
*/
public function is_mime_type_supported() {
- return $this->id && imagify_as3cf()->is_mime_type_supported( $this->id );
+ return imagify_is_attachment_mime_type_supported( $this->id );
}
}
diff --git a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf.php b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf.php
index 397e1dc4d..0074a68f2 100644
--- a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf.php
+++ b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf.php
@@ -127,7 +127,7 @@ public function init() {
* @return string The new context.
*/
public function optimize_attachment_context( $context, $attachment_id ) {
- if ( self::CONTEXT === $context || $this->is_mime_type_supported( $attachment_id ) ) {
+ if ( self::CONTEXT === $context || imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
return self::CONTEXT;
}
return $context;
@@ -287,7 +287,7 @@ function add_stats_for_s3_files( $size_and_count, $image_id, $files, $image_ids
*/
public function store_upload_ids( $metadata, $attachment_id ) {
- if ( $this->is_mime_type_supported( $attachment_id ) ) {
+ if ( imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
$this->uploads[ $attachment_id ] = 1;
}
@@ -311,7 +311,7 @@ public function do_async_job( $metadata, $attachment_id ) {
$is_new_upload = ! empty( $this->uploads[ $attachment_id ] );
unset( $this->uploads[ $attachment_id ] );
- if ( ! $metadata || ! $this->is_mime_type_supported( $attachment_id ) ) {
+ if ( ! $metadata || ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
return $metadata;
}
@@ -369,7 +369,7 @@ public function optimize() {
die();
}
- if ( ! $this->is_mime_type_supported( $attachment_id ) ) {
+ if ( ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
die();
}
@@ -403,26 +403,17 @@ public function optimize() {
* Tell if the attachment has a supported mime type.
*
* @since 1.6.6
+ * @since 1.6.8 Deprecated.
+ * @see imagify_is_attachment_mime_type_supported()
* @author Grégory Viguier
*
* @param int $post_id The attachment ID.
* @return bool
*/
public function is_mime_type_supported( $post_id ) {
- static $is = array( false );
+ _deprecated_function( 'Imagify_AS3CF::is_mime_type_supported()', '1.6.8', 'imagify_is_attachment_mime_type_supported()' );
- $post_id = absint( $post_id );
-
- if ( isset( $is[ $post_id ] ) ) {
- return $is[ $post_id ];
- }
-
- $mime_types = get_imagify_mime_type();
- $mime_types = array_flip( $mime_types );
- $mime_type = get_post_mime_type( $post_id );
- $is[ $post_id ] = isset( $mime_types[ $mime_type ] );
-
- return $is[ $post_id ];
+ return imagify_is_attachment_mime_type_supported( $post_id );
}
}
diff --git a/inc/admin/media.php b/inc/admin/media.php
index 082bc06a3..003a155de 100755
--- a/inc/admin/media.php
+++ b/inc/admin/media.php
@@ -46,7 +46,7 @@ function _imagify_attachment_fields_to_edit( $form_fields, $post ) {
*/
function _imagify_add_actions_to_media_list_row( $actions, $post ) {
// If this attachment is not an image, do nothing.
- if ( ! wp_attachment_is_image( $post->ID ) ) {
+ if ( ! imagify_is_attachment_mime_type_supported( $post->ID ) ) {
return $actions;
}
diff --git a/inc/classes/class-imagify-attachment.php b/inc/classes/class-imagify-attachment.php
index f0f45cf2e..7856ba223 100644
--- a/inc/classes/class-imagify-attachment.php
+++ b/inc/classes/class-imagify-attachment.php
@@ -105,7 +105,8 @@ public function get_original_url() {
* @return bool
*/
public function update_metadata_size() {
- if ( ! wp_attachment_is_image( $this->id ) ) {
+ // Check if the attachment extension is allowed.
+ if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
return false;
}
@@ -203,31 +204,30 @@ public function fill_data( $data, $response, $url, $size = 'full' ) {
* @return array $optimized_data The optimization data.
*/
public function optimize( $optimization_level = null, $metadata = array() ) {
- $optimization_level = is_null( $optimization_level ) ? (int) get_imagify_option( 'optimization_level', 1 ) : (int) $optimization_level;
+ // Check if the attachment extension is allowed.
+ if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
+ return;
+ }
- $metadata = $metadata ? $metadata : wp_get_attachment_metadata( $this->id );
- $sizes = isset( $metadata['sizes'] ) ? (array) $metadata['sizes'] : array();
+ $optimization_level = is_null( $optimization_level ) ? (int) get_imagify_option( 'optimization_level', 1 ) : (int) $optimization_level;
+ $metadata = $metadata ? $metadata : wp_get_attachment_metadata( $this->id );
+ $sizes = isset( $metadata['sizes'] ) ? (array) $metadata['sizes'] : array();
// To avoid issue with "original_size" at 0 in "_imagify_data".
if ( 0 === (int) $this->get_stats_data( 'original_size' ) ) {
$this->delete_imagify_data();
}
- // Get file path & URL for original image.
- $attachment_path = $this->get_original_path();
- $attachment_url = $this->get_original_url();
- $attachment_original_size = $this->get_original_size( false );
-
- // Check if the attachment extension is allowed.
- if ( ! $this->id || ! wp_attachment_is_image( $this->id ) ) {
- return;
- }
-
// Check if the full size is already optimized.
if ( $this->is_optimized() && ( $this->get_optimization_level() === $optimization_level ) ) {
return;
}
+ // Get file path & URL for original image.
+ $attachment_path = $this->get_original_path();
+ $attachment_url = $this->get_original_url();
+ $attachment_original_size = $this->get_original_size( false );
+
/**
* Fires before optimizing an attachment.
*
@@ -371,6 +371,11 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
* @return void
*/
public function restore() {
+ // Check if the attachment extension is allowed.
+ if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
+ return;
+ }
+
// Stop the process if there is no backup file to restore.
if ( ! $this->has_backup() ) {
return;
diff --git a/inc/functions/admin-ui.php b/inc/functions/admin-ui.php
index 2bc0e6dae..085100490 100644
--- a/inc/functions/admin-ui.php
+++ b/inc/functions/admin-ui.php
@@ -218,7 +218,7 @@ function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
$output = '';
// Check if the attachment extension is allowed.
- if ( 'wp' === $context && ! wp_attachment_is_image( $attachment_id ) ) {
+ if ( 'wp' === $context && ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
/* translators: %s is a file extension. */
return sprintf( __( '%s can\'t be optimized', 'imagify' ), strtoupper( $attachment_ext ) );
}
diff --git a/inc/functions/attachments.php b/inc/functions/attachments.php
index dc7e61928..7d4de29c5 100755
--- a/inc/functions/attachments.php
+++ b/inc/functions/attachments.php
@@ -16,6 +16,34 @@ function get_imagify_mime_type() {
);
}
+/**
+ * Tell if an attachment has a supported mime type.
+ * Was previously Imagify_AS3CF::is_mime_type_supported() since 1.6.6.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @param int $attachment_id The attachment ID.
+ * @return bool
+ */
+function imagify_is_attachment_mime_type_supported( $attachment_id ) {
+ static $is = array( false );
+
+ $attachment_id = absint( $attachment_id );
+
+ if ( isset( $is[ $attachment_id ] ) ) {
+ return $is[ $attachment_id ];
+ }
+
+ $mime_types = get_imagify_mime_type();
+ $mime_types = array_flip( $mime_types );
+ $mime_type = (string) get_post_mime_type( $attachment_id );
+
+ $is[ $attachment_id ] = isset( $mime_types[ $mime_type ] );
+
+ return $is[ $attachment_id ];
+}
+
/**
* Get the backup path of a specific attachement.
*
From e7a4779dba34c71edbf8fddfead073c8ccf3ecfb Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Thu, 13 Jul 2017 16:37:24 +0200
Subject: [PATCH 09/38] Don't display the Optimize button in the metabox if the
attachment can't be optimized.
---
inc/admin/meta-boxes.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/inc/admin/meta-boxes.php b/inc/admin/meta-boxes.php
index 9f7a8e259..aeb5c8765 100755
--- a/inc/admin/meta-boxes.php
+++ b/inc/admin/meta-boxes.php
@@ -14,6 +14,10 @@ function _imagify_attachment_submitbox_misc_actions() {
return;
}
+ if ( ! imagify_is_attachment_mime_type_supported( $post->ID ) ) {
+ return;
+ }
+
$class_name = get_imagify_attachment_class_name( 'wp', $post->ID, 'attachment_submitbox_misc_actions' );
$attachment = new $class_name( $post->ID );
From fc1e6c6700d2a55655298fe25ac504467e1eeacb Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 17 Jul 2017 11:20:54 +0200
Subject: [PATCH 10/38] Allow to (de)select ALL thumbnail sizes at once in the
settings page.
---
assets/js/options.js | 67 ++++++++++++++++++++++++++++++++++++++++
assets/js/options.min.js | 2 +-
inc/admin/ui/options.php | 51 ++++++++++++++++++++++--------
3 files changed, 106 insertions(+), 14 deletions(-)
diff --git a/assets/js/options.js b/assets/js/options.js
index fca56ecb8..b2f376cdd 100755
--- a/assets/js/options.js
+++ b/assets/js/options.js
@@ -121,3 +121,70 @@ window.imagify = window.imagify || {
} );
} )(jQuery, document, window);
+
+
+// "Select all" checkboxes =========================================================================
+(function( w, d, $, undefined ) {
+
+ var lastClicked = {},
+ jqPropHookChecked = $.propHooks.checked;
+
+ // Force `.prop()` to trigger a `change` event.
+ $.propHooks.checked = {
+ set: function( elem, value, name ) {
+ var ret;
+
+ if ( undefined === jqPropHookChecked ) {
+ ret = ( elem[ name ] = value );
+ } else {
+ ret = jqPropHookChecked( elem, value, name );
+ }
+
+ $( elem ).trigger( 'change.imagify' );
+
+ return ret;
+ }
+ };
+
+ // Check all checkboxes.
+ $( '.imagify-check-group .imagify-row-check' ).on( 'click', function( e ) {
+ var $group = $( this ).closest( '.imagify-check-group' ),
+ allChecked = 0 === $group.find( '.imagify-row-check' ).filter( ':visible:enabled' ).not( ':checked' ).length;
+
+ // Toggle "check all" checkboxes.
+ $group.find( '.imagify-toggle-check' ).prop( 'checked', allChecked );
+ } )
+ .first().trigger( 'change.imagify' );
+
+ $( '.imagify-check-group .imagify-toggle-check' ).on( 'click.wp-toggle-checkboxes', function( e ) {
+ var $this = $( this ),
+ $wrap = $this.closest( '.imagify-check-group' ),
+ controlChecked = $this.prop( 'checked' ),
+ toggle = e.shiftKey || $this.data( 'wp-toggle' );
+
+ $wrap.find( '.imagify-toggle-check' )
+ .prop( 'checked', function() {
+ var $this = $( this );
+
+ if ( $this.is( ':hidden,:disabled' ) ) {
+ return false;
+ }
+
+ if ( toggle ) {
+ return ! $this.prop( 'checked' );
+ }
+
+ return controlChecked ? true : false;
+ } );
+
+ $wrap.find( '.imagify-row-check' )
+ .prop( 'checked', function() {
+ if ( toggle ) {
+ return false;
+ }
+
+ return controlChecked ? true : false;
+ } );
+ } );
+
+} )(window, document, jQuery);
diff --git a/assets/js/options.min.js b/assets/js/options.min.js
index e4020cf67..8a3aff59a 100755
--- a/assets/js/options.min.js
+++ b/assets/js/options.min.js
@@ -1 +1 @@
-window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur",function(){var b=a(this),c=b.val();return""!==a.trim(c)&&(a("#check_api_key").val()===c?(a("#imagify-check-api-container").html(' '+imagifyAdmin.labels.ValidApiKeyText),!1):(!0===e?f.abort():(a("#imagify-check-api-container").remove(),b.after(' '+imagifyAdmin.labels.waitApiKeyCheckText+" ")),e=!0,void(f=a.get(ajaxurl+imagify.concat+"action=imagify_check_api_key_validity&api_key="+b.val()+"&imagifycheckapikeynonce="+a("#imagifycheckapikeynonce").val()).done(function(b){b.success?(a("#imagify-check-api-container").remove(),swal({title:imagifyAdmin.labels.ApiKeyCheckSuccessTitle,html:imagifyAdmin.labels.ApiKeyCheckSuccessText,type:"success",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html(' '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click",function(b){if("INPUT"!==b.target.nodeName)return a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click"),!1}),a(".imagify-settings th span").on("click",function(){var b=a(this).parent().next("td").find("input:checkbox");1===b.length&&b.trigger("click")}),a(".imagify-options-line").find("input").on("change focus",function(){var b=a(this).closest(".imagify-options-line").prev("label").prev("input");b[0].checked||b.prop("checked",!0)}),a(".imagify-settings-section").find("#backup").on("change",function(){var b=a(this);b.is(":checked")||swal({title:imagifyOptions.noBackupTitle,html:imagifyOptions.noBackupText,type:"warning",customClass:"imagify-sweet-alert",showCancelButton:!0,cancelButtonText:imagifyAdmin.labels.swalCancel,reverseButtons:!0}).then(function(){},function(){b.prop("checked",!0)})})}(jQuery,document,window);
\ No newline at end of file
+window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur",function(){var b=a(this),c=b.val();return""!==a.trim(c)&&(a("#check_api_key").val()===c?(a("#imagify-check-api-container").html(' '+imagifyAdmin.labels.ValidApiKeyText),!1):(!0===e?f.abort():(a("#imagify-check-api-container").remove(),b.after(' '+imagifyAdmin.labels.waitApiKeyCheckText+" ")),e=!0,void(f=a.get(ajaxurl+imagify.concat+"action=imagify_check_api_key_validity&api_key="+b.val()+"&imagifycheckapikeynonce="+a("#imagifycheckapikeynonce").val()).done(function(b){b.success?(a("#imagify-check-api-container").remove(),swal({title:imagifyAdmin.labels.ApiKeyCheckSuccessTitle,html:imagifyAdmin.labels.ApiKeyCheckSuccessText,type:"success",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html(' '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click",function(b){if("INPUT"!==b.target.nodeName)return a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click"),!1}),a(".imagify-settings th span").on("click",function(){var b=a(this).parent().next("td").find("input:checkbox");1===b.length&&b.trigger("click")}),a(".imagify-options-line").find("input").on("change focus",function(){var b=a(this).closest(".imagify-options-line").prev("label").prev("input");b[0].checked||b.prop("checked",!0)}),a(".imagify-settings-section").find("#backup").on("change",function(){var b=a(this);b.is(":checked")||swal({title:imagifyOptions.noBackupTitle,html:imagifyOptions.noBackupText,type:"warning",customClass:"imagify-sweet-alert",showCancelButton:!0,cancelButtonText:imagifyAdmin.labels.swalCancel,reverseButtons:!0}).then(function(){},function(){b.prop("checked",!0)})})}(jQuery,document,window),function(a,b,c,d){var e=c.propHooks.checked;c.propHooks.checked={set:function(a,b,d){var f;return f=void 0===e?a[d]=b:e(a,b,d),c(a).trigger("change.imagify"),f}},c(".imagify-check-group .imagify-row-check").on("click",function(a){var b=c(this).closest(".imagify-check-group"),d=0===b.find(".imagify-row-check").filter(":visible:enabled").not(":checked").length;b.find(".imagify-toggle-check").prop("checked",d)}).first().trigger("change.imagify"),c(".imagify-check-group .imagify-toggle-check").on("click.wp-toggle-checkboxes",function(a){var b=c(this),d=b.closest(".imagify-check-group"),e=b.prop("checked"),f=a.shiftKey||b.data("wp-toggle");d.find(".imagify-toggle-check").prop("checked",function(){var a=c(this);return!a.is(":hidden,:disabled")&&(f?!a.prop("checked"):!!e)}),d.find(".imagify-row-check").prop("checked",function(){return!f&&!!e})})}(window,document,jQuery);
\ No newline at end of file
diff --git a/inc/admin/ui/options.php b/inc/admin/ui/options.php
index d1dcc167c..f6f93b401 100755
--- a/inc/admin/ui/options.php
+++ b/inc/admin/ui/options.php
@@ -270,20 +270,45 @@ function _imagify_display_options_page() {
- $size_data ) {
- $label = esc_html( stripslashes( $size_data['name'] ) );
- $label = sprintf( '%s - %d × %d', $label, $size_data['width'], $size_data['height'] );
- ?>
-
- />
-
-
+
+
+ $sizes = get_imagify_thumbnail_sizes();
+ $select_all = count( $sizes ) > 3;
+ $disallowed = (array) get_imagify_option( 'disallowed-sizes', array() );
+
+ if ( $select_all ) {
+ $has_disallowed = ! empty( array_intersect_key( $disallowed, $sizes ) );
+ ?>
+
+ >
+
+
+
+ $size_data ) {
+ $label = esc_html( stripslashes( $size_data['name'] ) );
+ $label = sprintf( '%s - %d × %d', $label, $size_data['width'], $size_data['height'] );
+ $checked = ! isset( $disallowed[ $size_key ] );
+ ?>
+
+ />
+
+
+
+
+ >
+
+
+
+
From 8f5c3e35e8b238b375fb2aa32b9db100d8fed2a7 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 17 Jul 2017 12:10:02 +0200
Subject: [PATCH 11/38] =?UTF-8?q?Hotfix:=20httpsify=20all=20the=20things?=
=?UTF-8?q?=20(use=20https=20for=20our=20URLs).=20Also,=20introduced=20`im?=
=?UTF-8?q?agify=5Fget=5Fwp=5Frocket=5Furl()`=20to=20standardize=20the=20W?=
=?UTF-8?q?P=C2=A0Rocket's=20site=20URL=20among=20the=20plugin.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
imagify.php | 2 +-
inc/admin/ui/notices.php | 23 +++--------------------
inc/admin/ui/options.php | 2 +-
inc/functions/admin.php | 28 ++++++++++++++++++++++++++++
4 files changed, 33 insertions(+), 22 deletions(-)
diff --git a/imagify.php b/imagify.php
index 44ed9f00a..5b1ca5c06 100644
--- a/imagify.php
+++ b/imagify.php
@@ -5,7 +5,7 @@
* Description: Dramaticaly reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
* Version: 1.6.8
* Author: WP Media
- * Author URI: http://wp-media.me
+ * Author URI: https://wp-media.me/
* Licence: GPLv2
*
* Text Domain: imagify
diff --git a/inc/admin/ui/notices.php b/inc/admin/ui/notices.php
index 04520bb91..ee90c303a 100755
--- a/inc/admin/ui/notices.php
+++ b/inc/admin/ui/notices.php
@@ -334,28 +334,11 @@ function _imagify_rocket_notice() {
$dismiss_url = get_imagify_admin_url( 'dismiss-notice', 'wp-rocket' );
$coupon_code = 'IMAGIFY20';
- $wprocket_url = 'http://wp-rocket.me/';
-
- switch ( get_locale() ) {
- case 'fr_FR' :
- $wprocket_url = 'http://wp-rocket.me/fr/';
- break;
- case 'es_ES' :
- $wprocket_url = 'http://wp-rocket.me/es/';
- break;
- case 'it_IT' :
- $wprocket_url = 'http://wp-rocket.me/it/';
- break;
- case 'de_DE' :
- $wprocket_url = 'http://wp-rocket.me/de/';
- break;
- }
-
- $wprocket_url .= '?utm_source=imagify-coupon&utm_medium=plugin&utm_campaign=imagify';
+ $wprocket_url = imagify_get_wp_rocket_url();
?>
-
+
@@ -375,7 +358,7 @@ function _imagify_rocket_notice() {
-
+
diff --git a/inc/admin/ui/options.php b/inc/admin/ui/options.php
index d1dcc167c..e807c0020 100755
--- a/inc/admin/ui/options.php
+++ b/inc/admin/ui/options.php
@@ -48,7 +48,7 @@ function _imagify_display_options_page() {
-
+
diff --git a/inc/functions/admin.php b/inc/functions/admin.php
index 722b35c45..bb58718cc 100755
--- a/inc/functions/admin.php
+++ b/inc/functions/admin.php
@@ -286,3 +286,31 @@ function imagify_get_wpdb_metas( $metas, $ids ) {
return $metas;
}
+
+/**
+ * Simple helper to get the WP Rocket's site URL.
+ * The URL is localized and contains some utm_*** parameters.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @return string The URL.
+ */
+function imagify_get_wp_rocket_url() {
+ $wprocket_url = 'https://wp-rocket.me/';
+ $locale = get_locale();
+ $suffixes = array(
+ 'fr_FR' => 'fr',
+ 'es_ES' => 'es',
+ 'it_IT' => 'it',
+ 'de_DE' => 'de',
+ );
+
+ if ( isset( $suffixes[ $locale ] ) ) {
+ $wprocket_url .= $suffixes[ $locale ] . '/';
+ }
+
+ $wprocket_url .= '?utm_source=imagify-coupon&utm_medium=plugin&utm_campaign=imagify';
+
+ return $wprocket_url;
+}
From fed4553e5f6d3c59fc30ab5e52ee1eb01b26ccdd Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 17 Jul 2017 12:11:05 +0200
Subject: [PATCH 12/38] =?UTF-8?q?Hotfix:=20added=20a=20`target=3D"=5Fblank?=
=?UTF-8?q?"`=20attribute=20to=20links=20leading=20to=20WP=C2=A0Rocket's?=
=?UTF-8?q?=20site.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
inc/admin/ui/notices.php | 2 +-
inc/admin/ui/options.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/inc/admin/ui/notices.php b/inc/admin/ui/notices.php
index ee90c303a..72a2cd45f 100755
--- a/inc/admin/ui/notices.php
+++ b/inc/admin/ui/notices.php
@@ -338,7 +338,7 @@ function _imagify_rocket_notice() {
?>
-
+
diff --git a/inc/admin/ui/options.php b/inc/admin/ui/options.php
index e807c0020..0380186b8 100755
--- a/inc/admin/ui/options.php
+++ b/inc/admin/ui/options.php
@@ -48,7 +48,7 @@ function _imagify_display_options_page() {
-
+
From 40137fdbc54c41961b95751d78b342053d76c66b Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 17 Jul 2017 23:29:18 +0200
Subject: [PATCH 13/38] Display an error message under the "Backup original
images" checkbox if the backup folder is not writable.
---
assets/css/admin.css | 12 +++++++
assets/js/options.js | 25 +++++++++++--
inc/admin/ajax.php | 20 +++++++++++
inc/admin/ui/options.php | 18 +++++++++-
inc/functions/attachments.php | 68 ++++++++++++++++++++++++++---------
5 files changed, 124 insertions(+), 19 deletions(-)
diff --git a/assets/css/admin.css b/assets/css/admin.css
index 2acabe9e0..02f3b8f48 100755
--- a/assets/css/admin.css
+++ b/assets/css/admin.css
@@ -2398,6 +2398,18 @@ td.imagify-cell-filename {
background: #D0021B;
color: #FFF;
}
+.imagify-settings-section .imagify-error {
+ display: inline-block;
+ padding: 7px 10px;
+ margin: 10px 0 0 45px;
+ border-radius: 3px;
+}
+.imagify-settings-section .imagify-error code {
+ font-weight: normal;
+}
+.imagify-settings-section .imagify-error.hidden {
+ display: none;
+}
.imagify-warning,
#wpadminbar .imagify-warning * {
background: #f5a623;
diff --git a/assets/js/options.js b/assets/js/options.js
index fca56ecb8..6d22746a3 100755
--- a/assets/js/options.js
+++ b/assets/js/options.js
@@ -98,9 +98,26 @@ window.imagify = window.imagify || {
* Imagify Backup alert.
*/
$( '.imagify-settings-section' ).find( '#backup' ).on( 'change', function() {
- var $_this = $( this );
+ var $_this = $( this ),
+ $backupMessage = $_this.siblings( '#backup-dir-is-writable' ),
+ params = {
+ 'action': 'imagify_check_backup_dir_is_writable',
+ '_wpnonce': $backupMessage.data( 'nonce' )
+ };
if ( $_this.is( ':checked' ) ) {
+ $.getJSON( ajaxurl, params )
+ .done( function( r ) {
+ if ( $.isPlainObject( r ) && r.success ) {
+ if ( r.data.is_writable ) {
+ // Hide the error message.
+ $backupMessage.addClass( 'hidden' );
+ } else {
+ // Show the error message.
+ $backupMessage.removeClass( 'hidden' );
+ }
+ }
+ } );
return;
}
@@ -113,8 +130,12 @@ window.imagify = window.imagify || {
cancelButtonText: imagifyAdmin.labels.swalCancel,
reverseButtons: true
} ).then(
- function() {},
function() {
+ // Leave it unchecked, hide the error message.
+ $backupMessage.addClass( 'hidden' );
+ },
+ function() {
+ // Re-check.
$_this.prop( 'checked', true );
}
);
diff --git a/inc/admin/ajax.php b/inc/admin/ajax.php
index a0d0dfddb..2e0cc938d 100755
--- a/inc/admin/ajax.php
+++ b/inc/admin/ajax.php
@@ -442,6 +442,26 @@ function _do_wp_ajax_imagify_get_unoptimized_attachment_ids() {
wp_send_json_success( $data );
}
+add_action( 'wp_ajax_imagify_check_backup_dir_is_writable', '_do_wp_ajax_imagify_check_backup_dir_is_writable' );
+/**
+ * Check if the backup directory is writable.
+ * This is used to display an error message in the plugin's settings page.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ */
+function _do_wp_ajax_imagify_check_backup_dir_is_writable() {
+ check_ajax_referer( 'imagify_check_backup_dir_is_writable' );
+
+ if ( ! current_user_can( imagify_get_capacity() ) ) {
+ wp_send_json_error();
+ }
+
+ wp_send_json_success( array(
+ 'is_writable' => (int) imagify_backup_dir_is_writable(),
+ ) );
+}
+
/** --------------------------------------------------------------------------------------------- */
/** IMAGIFY ACCOUNT ============================================================================= */
/** --------------------------------------------------------------------------------------------- */
diff --git a/inc/admin/ui/options.php b/inc/admin/ui/options.php
index 0380186b8..9d9eb2946 100755
--- a/inc/admin/ui/options.php
+++ b/inc/admin/ui/options.php
@@ -194,13 +194,29 @@ function _imagify_display_options_page() {
- aria-describedby="describe-backup" />
+
+ aria-describedby="describe-backup" />
+
+
+ $backup_path" );
+ ?>
+
diff --git a/inc/functions/attachments.php b/inc/functions/attachments.php
index 7d4de29c5..9583ce24a 100755
--- a/inc/functions/attachments.php
+++ b/inc/functions/attachments.php
@@ -44,6 +44,57 @@ function imagify_is_attachment_mime_type_supported( $attachment_id ) {
return $is[ $attachment_id ];
}
+/**
+ * Get the path to the backups directory.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @return string|bool Path to the backups directory. False on failure.
+ */
+function get_imagify_backup_dir_path() {
+ static $backup_dir;
+
+ if ( isset( $backup_dir ) ) {
+ return $backup_dir;
+ }
+
+ $upload_basedir = get_imagify_upload_basedir();
+
+ if ( ! $upload_basedir ) {
+ return false;
+ }
+
+ $backup_dir = $upload_basedir . 'backup/';
+
+ /**
+ * Filter the backup directory path.
+ *
+ * @since 1.0
+ *
+ * @param string $backup_dir The backup directory path.
+ */
+ $backup_dir = apply_filters( 'imagify_backup_directory', $backup_dir );
+ $backup_dir = trailingslashit( wp_normalize_path( $backup_dir ) );
+
+ return $backup_dir;
+}
+
+/**
+ * Tell if the folder containing the backups is writable.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @return bool
+ */
+function imagify_backup_dir_is_writable() {
+ $filesystem = imagify_get_filesystem();
+ $has_backup_dir = wp_mkdir_p( get_imagify_backup_dir_path() );
+
+ return $has_backup_dir && $filesystem->is_writable( get_imagify_backup_dir_path() );
+}
+
/**
* Get the backup path of a specific attachement.
*
@@ -53,29 +104,14 @@ function imagify_is_attachment_mime_type_supported( $attachment_id ) {
* @return string|bool The backup path. False on failure.
*/
function get_imagify_attachment_backup_path( $file_path ) {
- static $backup_dir;
-
$file_path = wp_normalize_path( (string) $file_path );
$upload_basedir = get_imagify_upload_basedir();
+ $backup_dir = get_imagify_backup_dir_path();
if ( ! $file_path || ! $upload_basedir ) {
return false;
}
- if ( ! isset( $backup_dir ) ) {
- $backup_dir = $upload_basedir . 'backup/';
-
- /**
- * Filter the backup directory path.
- *
- * @since 1.0
- *
- * @param string $backup_dir The backup directory path.
- */
- $backup_dir = apply_filters( 'imagify_backup_directory', $backup_dir );
- $backup_dir = trailingslashit( wp_normalize_path( $backup_dir ) );
- }
-
return str_replace( $upload_basedir, $backup_dir, $file_path );
}
From 7a619b65dee778e5e816d618ea6d4bab3a8930a5 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 18 Jul 2017 00:21:07 +0200
Subject: [PATCH 14/38] In `imagify_backup_dir_is_writable()`, make sure
`get_imagify_backup_dir_path()` returns a valid value.
---
inc/functions/attachments.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/inc/functions/attachments.php b/inc/functions/attachments.php
index 9583ce24a..e97a5a58e 100755
--- a/inc/functions/attachments.php
+++ b/inc/functions/attachments.php
@@ -89,6 +89,10 @@ function get_imagify_backup_dir_path() {
* @return bool
*/
function imagify_backup_dir_is_writable() {
+ if ( ! get_imagify_backup_dir_path() ) {
+ return false;
+ }
+
$filesystem = imagify_get_filesystem();
$has_backup_dir = wp_mkdir_p( get_imagify_backup_dir_path() );
From 2fd90e0d150505a38fb261de08c55fb661a6e72b Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 18 Jul 2017 12:51:40 +0200
Subject: [PATCH 15/38] Copy/paste drama I guess.
---
inc/functions/attachments.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/inc/functions/attachments.php b/inc/functions/attachments.php
index e97a5a58e..4878f173f 100755
--- a/inc/functions/attachments.php
+++ b/inc/functions/attachments.php
@@ -104,8 +104,8 @@ function imagify_backup_dir_is_writable() {
*
* @since 1.0
*
- * @param int $file_path The file path.
- * @return string|bool The backup path. False on failure.
+ * @param string $file_path The file path.
+ * @return string|bool The backup path. False on failure.
*/
function get_imagify_attachment_backup_path( $file_path ) {
$file_path = wp_normalize_path( (string) $file_path );
From 415dfe140120e30ce1d965735e5a3297950d6a6b Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 18 Jul 2017 12:55:36 +0200
Subject: [PATCH 16/38] Introduced `imagify_backup_file()` to... backup a file.
Deprecated `Imagify_AS3CF_Attachment::maybe_backup()`.
---
.../class-imagify-as3cf-attachment.php | 24 ++++-----
.../classes/class-imagify-ngg-attachment.php | 14 ++---
inc/classes/class-imagify-attachment.php | 16 ++----
inc/functions/process.php | 54 ++++++++++++++++---
4 files changed, 63 insertions(+), 45 deletions(-)
diff --git a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
index f4a4c845c..5899ad5db 100644
--- a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
+++ b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
@@ -519,9 +519,9 @@ protected function maybe_resize( $attachment_path ) {
return false;
}
- $backed_up = $this->maybe_backup( $attachment_path );
+ $backuped = imagify_backup_file( $attachment_path );
- if ( false === $backed_up ) {
+ if ( is_wp_error( $backuped ) ) {
return false;
}
@@ -542,27 +542,23 @@ protected function maybe_resize( $attachment_path ) {
* Maybe backup a file.
*
* @since 1.6.6
+ * @since 1.6.8 Deprecated.
* @author Grégory Viguier
*
* @param string $attachment_path The file path.
* @return bool|null True on success. False on failure. Null if backup is not needed.
*/
protected function maybe_backup( $attachment_path ) {
- if ( ! get_imagify_option( 'backup' ) ) {
- return null;
- }
-
- $filesystem = imagify_get_filesystem();
- $backup_path = get_imagify_attachment_backup_path( $attachment_path );
- $backup_path_info = pathinfo( $backup_path );
+ $class_name = get_class( $this );
+ _deprecated_function( $class_name . '::' . __FUNCTION__ . '()', '1.6.8', 'imagify_backup_file()' );
- wp_mkdir_p( $backup_path_info['dirname'] );
+ $result = imagify_backup_file( $attachment_path );
- // TO DO - check and send a error message if the backup can't be created.
- $filesystem->copy( $attachment_path, $backup_path, true );
- imagify_chmod_file( $backup_path );
+ if ( false === $result ) {
+ return null;
+ }
- return $filesystem->exists( $backup_path );
+ return ! is_wp_error( $result );
}
/**
diff --git a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
index 94c5420bc..aa9d93fe7 100644
--- a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
+++ b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
@@ -310,18 +310,10 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
$resized_attachment_path = $this->resize( $attachment_path, $attachment_size, $resize_width );
if ( ! is_wp_error( $resized_attachment_path ) ) {
- $filesystem = imagify_get_filesystem();
-
- if ( get_imagify_option( 'backup', false ) ) {
- $backup_path = get_imagify_attachment_backup_path( $attachment_path );
- $backup_path_info = pathinfo( $backup_path );
-
- wp_mkdir_p( $backup_path_info['dirname'] );
+ // TODO (@Greg): Send an error message if the backup fails.
+ imagify_backup_file( $attachment_path );
- // TO DO - check and send a error message if the backup can't be created.
- $filesystem->copy( $attachment_path, $backup_path, true );
- imagify_chmod_file( $backup_path );
- }
+ $filesystem = imagify_get_filesystem();
$filesystem->move( $resized_attachment_path, $attachment_path, true );
imagify_chmod_file( $attachment_path );
diff --git a/inc/classes/class-imagify-attachment.php b/inc/classes/class-imagify-attachment.php
index 7856ba223..a76159ed4 100644
--- a/inc/classes/class-imagify-attachment.php
+++ b/inc/classes/class-imagify-attachment.php
@@ -241,7 +241,7 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
// Get the resize values for the original size.
$resized = false;
- $do_resize = get_imagify_option( 'resize_larger', false );
+ $do_resize = get_imagify_option( 'resize_larger' );
$resize_width = get_imagify_option( 'resize_larger_w' );
$attachment_size = @getimagesize( $attachment_path );
@@ -249,18 +249,10 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
$resized_attachment_path = $this->resize( $attachment_path, $attachment_size, $resize_width );
if ( ! is_wp_error( $resized_attachment_path ) ) {
- $filesystem = imagify_get_filesystem();
-
- if ( get_imagify_option( 'backup', false ) ) {
- $backup_path = get_imagify_attachment_backup_path( $attachment_path );
- $backup_path_info = pathinfo( $backup_path );
-
- wp_mkdir_p( $backup_path_info['dirname'] );
+ // TODO (@Greg): Send an error message if the backup fails.
+ imagify_backup_file( $attachment_path );
- // TO DO - check and send a error message if the backup can't be created.
- $filesystem->copy( $attachment_path, $backup_path, true );
- imagify_chmod_file( $backup_path );
- }
+ $filesystem = imagify_get_filesystem();
$filesystem->move( $resized_attachment_path, $attachment_path, true );
imagify_chmod_file( $attachment_path );
diff --git a/inc/functions/process.php b/inc/functions/process.php
index 96c958f86..9d475302c 100755
--- a/inc/functions/process.php
+++ b/inc/functions/process.php
@@ -107,14 +107,8 @@ function do_imagify( $file_path, $args = array() ) {
// Create a backup file.
if ( 'wp' === $args['context'] && $args['backup'] && ! $args['resized'] ) {
- $backup_path = get_imagify_attachment_backup_path( $file_path );
- $backup_path_info = pathinfo( $backup_path );
-
- wp_mkdir_p( $backup_path_info['dirname'] );
-
- // TO DO - check and send a error message if the backup can't be created.
- $filesystem->copy( $file_path, $backup_path, true );
- imagify_chmod_file( $backup_path );
+ // TODO (@Greg): Send an error message if the backup fails.
+ imagify_backup_file( $file_path );
}
if ( ! function_exists( 'download_url' ) ) {
@@ -177,3 +171,47 @@ function imagify_do_async_job( $body ) {
wp_remote_post( admin_url( 'admin-ajax.php' ), $args );
}
+
+/**
+ * Backup a file.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @param string $file_path The file path.
+ * @return bool|object True on success. False if the backup option is not enabled. A WP_Error object on failure.
+ */
+function imagify_backup_file( $file_path ) {
+ if ( ! get_imagify_option( 'backup' ) ) {
+ return false;
+ }
+
+ if ( ! $file_path ) {
+ return new WP_Error( 'empty_path', __( 'The file path is empty.', 'imagify' ) );
+ }
+
+ if ( ! imagify_backup_dir_is_writable() ) {
+ return new WP_Error( 'backup_dir_not_writable', __( 'The backup directory is not writable.', 'imagify' ) );
+ }
+
+ $backup_path = get_imagify_attachment_backup_path( $file_path );
+
+ if ( ! $backup_path ) {
+ return new WP_Error( 'wp_upload_error', __( 'Error while retrieving the uploads directory path.', 'imagify' ) );
+ }
+
+ $filesystem = imagify_get_filesystem();
+
+ if ( ! empty( $filesystem->errors->errors ) ) {
+ return new WP_Error( 'filesystem_error', __( 'Filesystem error.', 'imagify' ), $filesystem->errors );
+ }
+
+ $filesystem->copy( $file_path, $backup_path, true );
+ imagify_chmod_file( $backup_path );
+
+ if ( ! $filesystem->exists( $backup_path ) ) {
+ return new WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ) );
+ }
+
+ return true;
+}
From 951cbba1bec07e58d5e0bcad4bccb5467e36639d Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 18 Jul 2017 15:48:13 +0200
Subject: [PATCH 17/38] Display an admin notice if the backup folder is not
writable.
---
inc/admin/ui/notices.php | 69 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 66 insertions(+), 3 deletions(-)
diff --git a/inc/admin/ui/notices.php b/inc/admin/ui/notices.php
index 72a2cd45f..c847a6067 100755
--- a/inc/admin/ui/notices.php
+++ b/inc/admin/ui/notices.php
@@ -9,13 +9,13 @@
* @author Jonathan Buttigieg
*/
function _imagify_warning_empty_api_key_notice() {
- $current_screen = get_current_screen();
+ $current_screen = get_current_screen();
if ( ! empty( $current_screen ) && ( 'settings_page_imagify' === $current_screen->base || 'settings_page_imagify-network' === $current_screen->base ) ) {
return;
}
- if ( imagify_notice_is_dismissed( 'welcome-steps' ) || get_imagify_option( 'api_key', false ) || ! current_user_can( imagify_get_capacity() ) ) {
+ if ( imagify_notice_is_dismissed( 'welcome-steps' ) || get_imagify_option( 'api_key' ) || ! current_user_can( imagify_get_capacity() ) ) {
return;
}
?>
@@ -121,7 +121,7 @@ function _imagify_warning_wrong_api_key_notice() {
add_action( 'all_admin_notices', '_imagify_warning_plugins_to_deactivate_notice' );
/**
- * This warning is displayed when some plugins may conflict with Imagify
+ * This warning is displayed when some plugins may conflict with Imagify.
*
* @since 1.0
* @author Jonathan Buttigieg
@@ -314,6 +314,69 @@ function _imagify_warning_over_quota_notice() {
1,
+ 'settings_page_' . IMAGIFY_SLUG . '-network' => 1,
+ 'media_page_' . IMAGIFY_SLUG . '-bulk-optimization' => 1,
+ 'media_page_' . IMAGIFY_SLUG . '-ngg-bulk-optimization' => 1,
+ 'upload' => 1,
+ 'media' => 1,
+ 'attachment' => 1,
+ );
+
+ if ( ! $auto && empty( $bases[ $current_screen->id ] ) ) {
+ return;
+ }
+
+ if ( ! $auto && 'attachment' === $current_screen->id && $post_id && ! imagify_is_attachment_mime_type_supported( $post_id ) ) {
+ return;
+ }
+
+ if ( ! get_imagify_option( 'backup' ) || ! current_user_can( imagify_get_capacity( true ) ) ) {
+ return;
+ }
+
+ $filesystem = imagify_get_filesystem();
+ $has_backup_dir = wp_mkdir_p( get_imagify_backup_dir_path() );
+
+ if ( $has_backup_dir && $filesystem->is_writable( get_imagify_backup_dir_path() ) ) {
+ return;
+ }
+
+ $backup_path = str_replace( wp_normalize_path( ABSPATH ), '', get_imagify_backup_dir_path() );
+ ?>
+
+
+
+
+
+
+
$backup_path" );
+ ?>
+
+
+
Date: Wed, 19 Jul 2017 00:16:37 +0200
Subject: [PATCH 18/38] Improved translations in the bulk optimization page,
mainly related to JavaScript. To note: - Used the keyword "Optimizing"
instead of "Compressing". - Edited `imagify.js` to use a correct formatting:
we use Bytes (not bits, because 1024), "Mega" is represented with a capital
"M", a non-breaking space is used between the value and the unit.
---
assets/js/bulk.js | 16 ++++++++--------
assets/js/imagify.js | 8 ++++----
assets/js/imagify.min.js | 2 +-
inc/admin/ui/bulk.php | 14 ++++++++++----
inc/functions/i18n.php | 8 ++++++++
5 files changed, 31 insertions(+), 17 deletions(-)
diff --git a/assets/js/bulk.js b/assets/js/bulk.js
index e83be714c..4cfe2edd9 100755
--- a/assets/js/bulk.js
+++ b/assets/js/bulk.js
@@ -181,7 +181,7 @@ window.imagify = window.imagify || {
e.preventDefault();
- if ( optimizationLevel === undefined ) {
+ if ( undefined === optimizationLevel ) {
optimizationLevel = -1;
}
@@ -262,20 +262,20 @@ window.imagify = window.imagify || {
// Before the attachment optimization.
Optimizer.before( function( data ) {
- table.find( '.imagify-row-progress' ).after( ' "' + data.filename + ' Compressing ' );
+ table.find( '.imagify-row-progress' ).after( '' + data.filename + ' ' + imagifyBulk.labels.optimizing + ' ' );
} )
// After the attachment optimization.
.each( function( data ) {
var $progress = $( '#imagify-progress-bar' ),
errorClass = 'error',
errorDashicon = 'dismiss',
- errorMessage = 'Error';
+ errorMessage = imagifyBulk.labels.error;
$progress.css( { 'width': data.progress + '%' } );
$progress.find( '.percent' ).html( data.progress + '%' );
if ( data.success ) {
- $( '#attachment-' + data.image + ' .imagify-cell-status' ).html( ' Complete ' );
+ $( '#attachment-' + data.image + ' .imagify-cell-status' ).html( ' ' + imagifyBulk.labels.complete + ' ' );
$( '#attachment-' + data.image + ' .imagify-cell-original' ).html( data.original_size_human );
$( '#attachment-' + data.image + ' .imagify-cell-optimized' ).html( data.new_size_human );
$( '#attachment-' + data.image + ' .imagify-cell-percentage' ).html( '' + data.percent + ' %' );
@@ -285,7 +285,7 @@ window.imagify = window.imagify || {
// The table footer total optimized files.
files = files + data.thumbnails + 1;
- $( '.imagify-cell-nb-files' ).html( files + ' file(s)' );
+ $( '.imagify-cell-nb-files' ).html( imagifyBulk.labels.nbrFiles.replace( '%s', files ) );
// The table footer original size.
original_overall_size = original_overall_size + data.original_overall_size;
@@ -312,10 +312,10 @@ window.imagify = window.imagify || {
if ( data.error.indexOf( 'This image is already compressed' ) >= 0 ) {
errorClass = 'warning';
errorDashicon = 'warning';
- errorMessage = 'Notice';
+ errorMessage = imagifyBulk.labels.notice;
} else {
errors++;
- $( '.imagify-cell-errors' ).html( errors + ' error(s)' );
+ $( '.imagify-cell-errors' ).html( imagifyBulk.labels.nbrErrors.replace( '%s', errors ) );
}
$( '#attachment-' + data.image ).after( '' + data.error + ' ' );
@@ -356,7 +356,7 @@ window.imagify = window.imagify || {
}
} )
.error( function( id ) {
- imagify.log( 'Can\'t optimize image with id ' + id );
+ imagify.log( "Can't optimize image with id " + id + "." );
} )
.run();
} )
diff --git a/assets/js/imagify.js b/assets/js/imagify.js
index 4e5848d48..dd084a149 100644
--- a/assets/js/imagify.js
+++ b/assets/js/imagify.js
@@ -2,7 +2,7 @@
* imagify-gulpjs - version 0.0.1 - 2016-04-07
* WP Media
*
- * Note: when updating this file, don't forget to replace `this.buffer_size = 1;` by `this.buffer_size = imagifyBulk.buffer_size;`.
+ * Note: when updating this file, don't forget to replace `this.buffer_size = 1;` by `this.buffer_size = imagifyBulk.buffer_size;`. Also, humanSize() has been edited to use a correct format.
*/
(function () {
'use strict';
@@ -94,13 +94,13 @@ window.ImagifyGulp = function () {
key: 'humanSize',
value: function humanSize( bytes ) {
if ( 0 === bytes ) {
- return '0kb';
+ return '0 kB';
}
- var sizes = [ 'b', 'kb', 'mb' ],
+ var sizes = [ 'B', 'kB', 'MB' ],
i = parseInt( Math.floor( Math.log( bytes ) / Math.log( 1024 ) ) );
- return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + sizes[ i ];
+ return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + ' ' + sizes[ i ];
}
}, {
key: 'run',
diff --git a/assets/js/imagify.min.js b/assets/js/imagify.min.js
index 29c3a5761..5f61aad72 100644
--- a/assets/js/imagify.min.js
+++ b/assets/js/imagify.min.js
@@ -1 +1 @@
-!function(){"use strict";function a(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var b=function(){function a(a,b){for(var c=0;cthis.buffer_size?this.buffer_size:this.images_ids.length,b=0;bthis.buffer_size?this.buffer_size:this.images_ids.length,b=0;b
- 0
- 0
- 0Mb
- 0Mb
+ 0' );
+ ?>
+ 0' );
+ ?>
+ 0 kB
+ 0 kB
diff --git a/inc/functions/i18n.php b/inc/functions/i18n.php
index 9cf49a209..96ed0f635 100755
--- a/inc/functions/i18n.php
+++ b/inc/functions/i18n.php
@@ -99,6 +99,14 @@ function get_imagify_localize_script_translations( $context ) {
'totalUnoptimizedAttachments' => imagify_count_unoptimized_attachments(),
'totalErrorsAttachments' => imagify_count_error_attachments(),
'processing' => __( 'Imagify is still processing. Are you sure you want to leave this page?', 'imagify' ),
+ 'optimizing' => __( 'Optimizing', 'imagify' ),
+ 'complete' => _x( 'Complete', 'adjective', 'imagify' ),
+ 'error' => __( 'Error', 'imagify' ),
+ 'notice' => _x( 'Notice', 'noun', 'imagify' ),
+ /* translators: %s is a number. Don't use %d. */
+ 'nbrFiles' => __( '%s file(s)', 'imagify' ),
+ /* translators: %s is a number. Don't use %d. */
+ 'nbrErrors' => __( '%s error(s)', 'imagify' ),
),
);
From 87a89f1ed9c51e91d76880b72177f0226c332398 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 19 Jul 2017 00:20:20 +0200
Subject: [PATCH 19/38] Hotfix: added a HTML class "hide-if-no-js" to the
payment modal.
---
inc/functions/admin-ui.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/inc/functions/admin-ui.php b/inc/functions/admin-ui.php
index b43232946..570698427 100644
--- a/inc/functions/admin-ui.php
+++ b/inc/functions/admin-ui.php
@@ -329,7 +329,7 @@ function get_imagify_price_table_format( $value ) {
*/
function imagify_payment_modal() {
?>
-
+
From 72bd4252330b6d998e8a717b2faea805b40dc89c Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Fri, 21 Jul 2017 14:48:34 +0200
Subject: [PATCH 20/38] Hotfix: added missing i18n text domain in admin bar.
---
inc/common/admin-bar.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/inc/common/admin-bar.php b/inc/common/admin-bar.php
index ef25859cf..e90c0399a 100755
--- a/inc/common/admin-bar.php
+++ b/inc/common/admin-bar.php
@@ -57,7 +57,7 @@ function _imagify_admin_bar( $wp_admin_bar ) {
$wp_admin_bar->add_menu( array(
'parent' => 'imagify',
'id' => 'imagify-profile',
- 'title' => wp_nonce_field( 'imagify-get-admin-bar-profile', 'imagifygetadminbarprofilenonce', false, false ) . '' . __( 'Loading...' ) . '
',
+ 'title' => wp_nonce_field( 'imagify-get-admin-bar-profile', 'imagifygetadminbarprofilenonce', false, false ) . '' . __( 'Loading...', 'imagify' ) . '
',
) );
}
}
From 7fe38a07df9cb108ae207fca21f6e90580a0b630 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Fri, 21 Jul 2017 14:52:23 +0200
Subject: [PATCH 21/38] Hotfix: a bit simpler in
`get_imagify_media_column_content()`.
---
inc/functions/admin-ui.php | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/inc/functions/admin-ui.php b/inc/functions/admin-ui.php
index 570698427..f498b41da 100644
--- a/inc/functions/admin-ui.php
+++ b/inc/functions/admin-ui.php
@@ -219,7 +219,6 @@ function get_imagify_attachment_reoptimize_link( $attachment, $context = 'wp' )
function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
$attachment_id = $attachment->id;
$attachment_ext = $attachment->get_extension();
- $output = '';
// Check if the attachment extension is allowed.
if ( 'wp' === $context && ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
@@ -229,7 +228,7 @@ function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
// Check if the API key is valid.
if ( ! imagify_valid_key() && ! $attachment->is_optimized() ) {
- $output .= __( 'Invalid API key', 'imagify' );
+ $output = __( 'Invalid API key', 'imagify' );
$output .= ' ';
$output .= '' . __( 'Check your Settings', 'imagify' ) . ' ';
return $output;
@@ -248,7 +247,7 @@ function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
'attachment_id' => $attachment_id,
'context' => $context,
);
- $output .= '' . __( 'Optimize', 'imagify' ) . ' ';
+ $output = '' . __( 'Optimize', 'imagify' ) . ' ';
if ( $attachment->has_backup() ) {
$output .= ' ';
@@ -257,8 +256,7 @@ function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
return $output;
}
- $output .= get_imagify_attachment_optimization_text( $attachment, $context );
- return $output;
+ return get_imagify_attachment_optimization_text( $attachment, $context );
}
/**
From e6f23c70766d9d2b9caec71672e0619b43d71435 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Fri, 21 Jul 2017 16:43:21 +0200
Subject: [PATCH 22/38] Hotfix: in `imagify_backup_file()`: - Added few
comments. - Added a test to make sure the source file exists. - Fixed a bug
that prevented files to be saved: added back `wp_mkdir_p()` to create
sub-directories. - When source file or backup file doesn't exist: improved
the error returned by providing the path(s).
---
inc/functions/process.php | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
diff --git a/inc/functions/process.php b/inc/functions/process.php
index 9d475302c..1891860e6 100755
--- a/inc/functions/process.php
+++ b/inc/functions/process.php
@@ -186,31 +186,56 @@ function imagify_backup_file( $file_path ) {
return false;
}
+ // Make sure the source path is not empty.
if ( ! $file_path ) {
return new WP_Error( 'empty_path', __( 'The file path is empty.', 'imagify' ) );
}
+ $filesystem = imagify_get_filesystem();
+
+ // Make sure the source file exists.
+ if ( ! $filesystem->exists( $file_path ) ) {
+ $abspath = wp_normalize_path( ABSPATH );
+ $file_path = str_replace( $abspath, '', wp_normalize_path( $file_path ) );
+
+ return new WP_Error( 'source_doesnt_exist', __( 'The file to backup does not exist.', 'imagify' ), array(
+ 'file_path' => $file_path,
+ ) );
+ }
+
+ // Make sure the backup directory is writable.
if ( ! imagify_backup_dir_is_writable() ) {
return new WP_Error( 'backup_dir_not_writable', __( 'The backup directory is not writable.', 'imagify' ) );
}
$backup_path = get_imagify_attachment_backup_path( $file_path );
+ // Make sure the uploads directory has no errors.
if ( ! $backup_path ) {
return new WP_Error( 'wp_upload_error', __( 'Error while retrieving the uploads directory path.', 'imagify' ) );
}
- $filesystem = imagify_get_filesystem();
-
+ // Make sure the filesystem has no errors.
if ( ! empty( $filesystem->errors->errors ) ) {
return new WP_Error( 'filesystem_error', __( 'Filesystem error.', 'imagify' ), $filesystem->errors );
}
- $filesystem->copy( $file_path, $backup_path, true );
- imagify_chmod_file( $backup_path );
+ // Create sub-directories.
+ wp_mkdir_p( dirname( $backup_path ) );
+
+ // Copy the file.
+ $filesystem->copy( $file_path, $backup_path, false, FS_CHMOD_FILE );
+ // Make sure the backup copy exists.
if ( ! $filesystem->exists( $backup_path ) ) {
- return new WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ) );
+ $abspath = wp_normalize_path( ABSPATH );
+ $file_path = str_replace( $abspath, '', wp_normalize_path( $file_path ) );
+ $backup_path = str_replace( $abspath, '', wp_normalize_path( $backup_path ) );
+
+ return new WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ), array(
+ 'file_path' => $file_path,
+ 'backup_path' => $backup_path,
+ ) );
}
return true;
From 7e306853b3abcd2868c2649c8d54e83f047a60dd Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Sat, 22 Jul 2017 04:18:31 +0200
Subject: [PATCH 23/38] Hotfix: introduced `imagify_get_abspath()` to get a
clean value of `ABSPATH` that can be used in string replacements, and
`imagify_make_file_path_replative()` to make an absolute path relative to
WordPress' root folder.
---
inc/functions/files.php | 89 +++++++++++++++++++++++++++++++++++++++
inc/functions/process.php | 13 ++----
2 files changed, 92 insertions(+), 10 deletions(-)
diff --git a/inc/functions/files.php b/inc/functions/files.php
index 86ea672fd..1409222c7 100755
--- a/inc/functions/files.php
+++ b/inc/functions/files.php
@@ -45,3 +45,92 @@ function imagify_get_filesystem() {
function imagify_chmod_file( $file ) {
return imagify_get_filesystem()->chmod( $file, FS_CHMOD_FILE );
}
+
+
+/**
+ * Get a clean value of ABSPATH that can be used in string replacements.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @return string The path to WordPress' root folder.
+ */
+function imagify_get_abspath() {
+ static $abspath;
+
+ if ( isset( $abspath ) ) {
+ return $abspath;
+ }
+
+ $abspath = wp_normalize_path( ABSPATH );
+
+ // Make sure ABSPATH is not messed up: it could be defined as a relative path for example (yeah, I know, but we've seen it).
+ $test_file = wp_normalize_path( IMAGIFY_FILE );
+ $pos = strpos( $test_file, $abspath );
+
+ if ( 0 < $pos ) {
+ // ABSPATH has a wrong value.
+ $abspath = substr( $test_file, 0, $pos ) . $abspath;
+
+ } elseif ( false === $pos && class_exists( 'ReflectionClass' ) ) {
+ // Imagify is symlinked (dude, you look for trouble).
+ $reflector = new ReflectionClass( 'Requests' );
+ $test_file = $reflector->getFileName();
+ $pos = strpos( $test_file, $abspath );
+
+ if ( 0 < $pos ) {
+ // ABSPATH has a wrong value.
+ $abspath = substr( $test_file, 0, $pos ) . $abspath;
+ }
+ }
+
+ $abspath = '/' . trim( $abspath, '/' ) . '/';
+
+ return $abspath;
+}
+
+
+/**
+ * Make an absolute path relative to WordPress' root folder.
+ * Also works on registered symlinked plugins.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @param string $file_path An absolute path.
+ * @return string A relative path. Can return the absolute path in case of a failure.
+ */
+function imagify_make_file_path_replative( $file_path ) {
+ static $abspath;
+ global $wp_plugin_paths;
+
+ if ( ! isset( $abspath ) ) {
+ $abspath = wp_normalize_path( ABSPATH );
+ }
+
+ $file_path = wp_normalize_path( $file_path );
+
+ if ( strpos( $file_path, $abspath ) === false && $wp_plugin_paths && is_array( $wp_plugin_paths ) ) {
+ // The file is probably part of a symlinked plugin.
+ arsort( $wp_plugin_paths );
+
+ foreach ( $wp_plugin_paths as $dir => $realdir ) {
+ if ( strpos( $file_path, $realdir ) === 0 ) {
+ $file_path = wp_normalize_path( $dir . substr( $file_path, strlen( $realdir ) ) );
+ }
+ }
+ }
+
+ $pos = strpos( $file_path, $abspath );
+
+ if ( false === $pos ) {
+ // We're in trouble.
+ return $file_path;
+ }
+
+ if ( 0 === $pos ) {
+ return str_replace( $abspath, '', $file_path );
+ }
+
+ return substr_replace( $file_path, '', 0, $pos + strlen( $abspath ) );
+}
diff --git a/inc/functions/process.php b/inc/functions/process.php
index 1891860e6..afbeb1e3b 100755
--- a/inc/functions/process.php
+++ b/inc/functions/process.php
@@ -195,11 +195,8 @@ function imagify_backup_file( $file_path ) {
// Make sure the source file exists.
if ( ! $filesystem->exists( $file_path ) ) {
- $abspath = wp_normalize_path( ABSPATH );
- $file_path = str_replace( $abspath, '', wp_normalize_path( $file_path ) );
-
return new WP_Error( 'source_doesnt_exist', __( 'The file to backup does not exist.', 'imagify' ), array(
- 'file_path' => $file_path,
+ 'file_path' => imagify_make_file_path_replative( $file_path ),
) );
}
@@ -228,13 +225,9 @@ function imagify_backup_file( $file_path ) {
// Make sure the backup copy exists.
if ( ! $filesystem->exists( $backup_path ) ) {
- $abspath = wp_normalize_path( ABSPATH );
- $file_path = str_replace( $abspath, '', wp_normalize_path( $file_path ) );
- $backup_path = str_replace( $abspath, '', wp_normalize_path( $backup_path ) );
-
return new WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ), array(
- 'file_path' => $file_path,
- 'backup_path' => $backup_path,
+ 'file_path' => imagify_make_file_path_replative( $file_path ),
+ 'backup_path' => imagify_make_file_path_replative( $backup_path ),
) );
}
From 4694d1354e26e84e9254d032feb93841d2bca6ad Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Sat, 22 Jul 2017 16:31:44 +0200
Subject: [PATCH 24/38] Hotfix: in `imagify_make_file_path_replative()`, no
need of the `if ( 0 === $pos ) {` block.
---
inc/functions/files.php | 4 ----
1 file changed, 4 deletions(-)
diff --git a/inc/functions/files.php b/inc/functions/files.php
index 1409222c7..4aec42ee6 100755
--- a/inc/functions/files.php
+++ b/inc/functions/files.php
@@ -128,9 +128,5 @@ function imagify_make_file_path_replative( $file_path ) {
return $file_path;
}
- if ( 0 === $pos ) {
- return str_replace( $abspath, '', $file_path );
- }
-
return substr_replace( $file_path, '', 0, $pos + strlen( $abspath ) );
}
From 684785893acfffc68dcc9176a02f9ded5b1a3e3f Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Sat, 22 Jul 2017 16:43:18 +0200
Subject: [PATCH 25/38] Hotfix: made `imagify_make_file_path_replative()`
better and shorter.
---
inc/functions/files.php | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/inc/functions/files.php b/inc/functions/files.php
index 4aec42ee6..8b4e7ba52 100755
--- a/inc/functions/files.php
+++ b/inc/functions/files.php
@@ -92,7 +92,7 @@ function imagify_get_abspath() {
/**
* Make an absolute path relative to WordPress' root folder.
- * Also works on registered symlinked plugins.
+ * Also works for files from registered symlinked plugins.
*
* @since 1.6.8
* @author Grégory Viguier
@@ -109,8 +109,9 @@ function imagify_make_file_path_replative( $file_path ) {
}
$file_path = wp_normalize_path( $file_path );
+ $pos = strpos( $file_path, $abspath );
- if ( strpos( $file_path, $abspath ) === false && $wp_plugin_paths && is_array( $wp_plugin_paths ) ) {
+ if ( false === $pos && $wp_plugin_paths && is_array( $wp_plugin_paths ) ) {
// The file is probably part of a symlinked plugin.
arsort( $wp_plugin_paths );
@@ -119,9 +120,9 @@ function imagify_make_file_path_replative( $file_path ) {
$file_path = wp_normalize_path( $dir . substr( $file_path, strlen( $realdir ) ) );
}
}
- }
- $pos = strpos( $file_path, $abspath );
+ $pos = strpos( $file_path, $abspath );
+ }
if ( false === $pos ) {
// We're in trouble.
From 8cb959a1a2e38eda5b9c81b95dad262ad0fb3f46 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Sun, 23 Jul 2017 13:38:59 +0200
Subject: [PATCH 26/38] Hotfix: fixed a fatal error `Can't use function return
value in write context in inc/admin/ui/options.php on line 297`.
---
inc/admin/ui/options.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/inc/admin/ui/options.php b/inc/admin/ui/options.php
index 12600eed3..fd5019e08 100755
--- a/inc/admin/ui/options.php
+++ b/inc/admin/ui/options.php
@@ -294,7 +294,8 @@ function _imagify_display_options_page() {
$disallowed = (array) get_imagify_option( 'disallowed-sizes', array() );
if ( $select_all ) {
- $has_disallowed = ! empty( array_intersect_key( $disallowed, $sizes ) );
+ $has_disallowed = array_intersect_key( $disallowed, $sizes );
+ $has_disallowed = ! empty( $has_disallowed );
?>
>
From b8283d3e7ab534e6f87bd9cd7773b137df4b7a84 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 24 Jul 2017 11:57:02 +0200
Subject: [PATCH 27/38] Hotfix: use `imagify_make_file_path_replative()` the
backup directory path as relative.
---
inc/admin/ui/notices.php | 2 +-
inc/admin/ui/options.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/inc/admin/ui/notices.php b/inc/admin/ui/notices.php
index c847a6067..6eb02f6db 100755
--- a/inc/admin/ui/notices.php
+++ b/inc/admin/ui/notices.php
@@ -360,7 +360,7 @@ function _imagify_warning_backup_folder_not_writable_notice() {
return;
}
- $backup_path = str_replace( wp_normalize_path( ABSPATH ), '', get_imagify_backup_dir_path() );
+ $backup_path = imagify_make_file_path_replative( get_imagify_backup_dir_path() );
?>
diff --git a/inc/admin/ui/options.php b/inc/admin/ui/options.php
index fd5019e08..5f0607a36 100755
--- a/inc/admin/ui/options.php
+++ b/inc/admin/ui/options.php
@@ -212,7 +212,7 @@ function _imagify_display_options_page() {
$backup_path" );
?>
From 08b68650d27cb3cb0eb038f399c1c20213852655 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 24 Jul 2017 12:02:33 +0200
Subject: [PATCH 28/38] Hotfix: in
`Imagify_Abstract_Attachment::get_backup_url()`, use
`get_imagify_attachment_url()`. Also, created
`Imagify_NGG_Attachment::get_backup_url()` because NGG galleries are not
stored inside the uploads folder.
---
.../inc/classes/class-imagify-ngg-attachment.php | 12 ++++++++++++
.../abstracts/class-imagify-abstract-attachment.php | 5 +----
inc/functions/attachments.php | 2 +-
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
index aa9d93fe7..50bc6593a 100644
--- a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
+++ b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
@@ -84,6 +84,18 @@ public function get_backup_path() {
return false;
}
+ /**
+ * Get the attachment backup URL.
+ *
+ * @since 1.6.8
+ * @author Grégory Viguier
+ *
+ * @return string|false
+ */
+ public function get_backup_url() {
+ return site_url( '/' ) . imagify_make_file_path_replative( $this->get_backup_path() );
+ }
+
/**
* Get the attachment optimization data.
*
diff --git a/inc/classes/abstracts/class-imagify-abstract-attachment.php b/inc/classes/abstracts/class-imagify-abstract-attachment.php
index b10cc1e84..ff061b842 100755
--- a/inc/classes/abstracts/class-imagify-abstract-attachment.php
+++ b/inc/classes/abstracts/class-imagify-abstract-attachment.php
@@ -70,10 +70,7 @@ public function get_backup_path() {
* @return string|false
*/
public function get_backup_url() {
- $backup_path = $this->get_backup_path();
- $backup_url = str_replace( ABSPATH, site_url( '/' ), $backup_path );
-
- return $backup_url;
+ return get_imagify_attachment_url( $this->get_backup_path() );
}
/**
diff --git a/inc/functions/attachments.php b/inc/functions/attachments.php
index 4878f173f..3c6ac900f 100755
--- a/inc/functions/attachments.php
+++ b/inc/functions/attachments.php
@@ -149,7 +149,7 @@ function get_imagify_attached_file( $file_path ) {
*
* @since 1.4.5
*
- * @param string $file_path A relative of absolute file path.
+ * @param string $file_path A relative or absolute file path.
* @return string|bool File URL, otherwise false.
*/
function get_imagify_attachment_url( $file_path ) {
From af69fd637bedbd609e919f3ea6ecb9f650048546 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 24 Jul 2017 12:17:51 +0200
Subject: [PATCH 29/38] Hotfix: small code improvements in
`get_imagify_admin_url()`: - removed useless var `$url`, - regrouped vars, -
fixed DocBlock: `$arg` can also be a string.
---
inc/functions/admin.php | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/inc/functions/admin.php b/inc/functions/admin.php
index bb58718cc..691a1aefa 100755
--- a/inc/functions/admin.php
+++ b/inc/functions/admin.php
@@ -34,18 +34,19 @@ function imagify_is_active_for_network() {
*
* @since 1.0
*
- * @param string $action An action.
- * @param array $arg An array of arguments. It can contain an attachment ID and/or a context.
- * @return string The URL of the specific admin page or action.
+ * @param string $action An action.
+ * @param array|string $arg An array of arguments. It can contain an attachment ID and/or a context.
+ * @return string The URL of the specific admin page or action.
*/
function get_imagify_admin_url( $action = 'options-general', $arg = array() ) {
- $url = '';
- $id = isset( $arg['attachment_id'] ) ? $arg['attachment_id'] : 0;
- $context = isset( $arg['context'] ) ? $arg['context'] : 'wp';
+ if ( is_array( $arg ) ) {
+ $id = isset( $arg['attachment_id'] ) ? $arg['attachment_id'] : 0;
+ $context = isset( $arg['context'] ) ? $arg['context'] : 'wp';
+ $level = isset( $arg['optimization_level'] ) ? $arg['optimization_level'] : 0;
+ }
switch ( $action ) {
case 'manual-override-upload':
- $level = ( isset( $arg['optimization_level'] ) ) ? $arg['optimization_level'] : 0;
return wp_nonce_url( admin_url( 'admin-post.php?action=imagify_manual_override_upload&attachment_id=' . $id . '&optimization_level=' . $level . '&context=' . $context ), 'imagify-manual-override-upload' );
case 'manual-upload':
From 86510df82846365166c93f877705e04a56befd6a Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 24 Jul 2017 12:26:17 +0200
Subject: [PATCH 30/38] Hotfix: moved notice-related functions to a separated
file.
---
imagify.php | 1 +
inc/functions/admin.php | 66 -------------------------------------
inc/functions/notices.php | 68 +++++++++++++++++++++++++++++++++++++++
3 files changed, 69 insertions(+), 66 deletions(-)
create mode 100755 inc/functions/notices.php
diff --git a/imagify.php b/imagify.php
index 5b1ca5c06..8dd98b9ff 100644
--- a/imagify.php
+++ b/imagify.php
@@ -66,6 +66,7 @@ function _imagify_init() {
require( IMAGIFY_FUNCTIONS_PATH . 'formatting.php' );
require( IMAGIFY_FUNCTIONS_PATH . 'files.php' );
require( IMAGIFY_FUNCTIONS_PATH . 'admin.php' );
+ require( IMAGIFY_FUNCTIONS_PATH . 'notices.php' );
require( IMAGIFY_FUNCTIONS_PATH . 'api.php' );
require( IMAGIFY_FUNCTIONS_PATH . 'attachments.php' );
require( IMAGIFY_FUNCTIONS_PATH . 'process.php' );
diff --git a/inc/functions/admin.php b/inc/functions/admin.php
index 691a1aefa..c311e4c7c 100755
--- a/inc/functions/admin.php
+++ b/inc/functions/admin.php
@@ -110,72 +110,6 @@ function get_imagify_max_intermediate_image_size() {
);
}
-/**
- * Renew a dismissed Imagify notice.
- *
- * @since 1.0
- *
- * @param string $notice A notice ID.
- * @param int $user_id A user ID.
- * @return void
- */
-function imagify_renew_notice( $notice, $user_id = 0 ) {
- $user_id = $user_id ? (int) $user_id : get_current_user_id();
- $notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
- $notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
-
- if ( ! isset( $notices[ $notice ] ) ) {
- return;
- }
-
- unset( $notices[ $notice ] );
- $notices = array_flip( $notices );
- $notices = array_values( $notices );
- update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
-}
-
-/**
- * Dismiss an Imagify notice.
- *
- * @since 1.0
- *
- * @param string $notice A notice ID.
- * @param int $user_id A user ID.
- * @return void
- */
-function imagify_dismiss_notice( $notice, $user_id = 0 ) {
- $user_id = $user_id ? (int) $user_id : get_current_user_id();
- $notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
- $notices = is_array( $notices ) ? $notices : array();
- $notices[] = $notice;
- $notices = array_filter( $notices );
- $notices = array_unique( $notices );
-
- update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
-}
-
-/**
- * Tell if an Imagify notice is dismissed.
- *
- * @since 1.6.5
- * @author Grégory Viguier
- *
- * @param string $notice A notice ID.
- * @param int $user_id A user ID.
- * @return bool
- */
-function imagify_notice_is_dismissed( $notice, $user_id = 0 ) {
- $user_id = $user_id ? (int) $user_id : get_current_user_id();
- $notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
-
- if ( ! $notices || ! is_array( $notices ) ) {
- return false;
- }
-
- $notices = array_flip( $notices );
- return isset( $notices[ $notice ] );
-}
-
/**
* Combine two arrays with some specific keys.
* We use this function to combine the result of 2 SQL queries.
diff --git a/inc/functions/notices.php b/inc/functions/notices.php
new file mode 100755
index 000000000..a6195bddf
--- /dev/null
+++ b/inc/functions/notices.php
@@ -0,0 +1,68 @@
+
Date: Mon, 24 Jul 2017 12:39:34 +0200
Subject: [PATCH 31/38] Hotfix: slightly improved notice-related functions.
---
inc/functions/notices.php | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/inc/functions/notices.php b/inc/functions/notices.php
index a6195bddf..033c57f12 100755
--- a/inc/functions/notices.php
+++ b/inc/functions/notices.php
@@ -21,7 +21,9 @@ function imagify_renew_notice( $notice, $user_id = 0 ) {
unset( $notices[ $notice ] );
$notices = array_flip( $notices );
+ $notices = array_filter( $notices );
$notices = array_values( $notices );
+
update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
}
@@ -35,12 +37,18 @@ function imagify_renew_notice( $notice, $user_id = 0 ) {
* @return void
*/
function imagify_dismiss_notice( $notice, $user_id = 0 ) {
- $user_id = $user_id ? (int) $user_id : get_current_user_id();
- $notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
- $notices = is_array( $notices ) ? $notices : array();
- $notices[] = $notice;
- $notices = array_filter( $notices );
- $notices = array_unique( $notices );
+ $user_id = $user_id ? (int) $user_id : get_current_user_id();
+ $notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
+ $notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
+
+ if ( isset( $notices[ $notice ] ) ) {
+ return;
+ }
+
+ $notices[ $notice ] = 1;
+ $notices = array_flip( $notices );
+ $notices = array_filter( $notices );
+ $notices = array_values( $notices );
update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
}
@@ -58,11 +66,7 @@ function imagify_dismiss_notice( $notice, $user_id = 0 ) {
function imagify_notice_is_dismissed( $notice, $user_id = 0 ) {
$user_id = $user_id ? (int) $user_id : get_current_user_id();
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
+ $notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
- if ( ! $notices || ! is_array( $notices ) ) {
- return false;
- }
-
- $notices = array_flip( $notices );
return isset( $notices[ $notice ] );
}
From 3b7a5654bded4e8329cfa5c9e361a12c3733aeed Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 24 Jul 2017 16:01:27 +0200
Subject: [PATCH 32/38] Hotfix: since the backup files for NGG are not located
in the Imagify backup directory: - Introduced
`get_imagify_ngg_attachment_backup_path()` and used it wherever the path to
the backup file is needed. - Added a `$backup_path` parameter to
`imagify_backup_file()`.
---
.../nextgen-gallery/inc/admin/ajax.php | 2 +-
.../classes/class-imagify-ngg-attachment.php | 8 +++---
.../inc/functions/attachments.php | 21 ++++++++++++++++
.../nextgen-gallery/nextgen-gallery.php | 1 +
inc/functions/process.php | 25 +++++++++++--------
5 files changed, 40 insertions(+), 17 deletions(-)
create mode 100644 inc/3rd-party/nextgen-gallery/inc/functions/attachments.php
diff --git a/inc/3rd-party/nextgen-gallery/inc/admin/ajax.php b/inc/3rd-party/nextgen-gallery/inc/admin/ajax.php
index c3b830ed5..08f7a9e82 100644
--- a/inc/3rd-party/nextgen-gallery/inc/admin/ajax.php
+++ b/inc/3rd-party/nextgen-gallery/inc/admin/ajax.php
@@ -78,7 +78,7 @@ function _do_wp_ajax_imagify_ngg_get_unoptimized_attachment_ids() {
$attachment_error = trim( $attachment_error );
$attachment_status = $image['status'];
$attachment_optimization_level = $image['optimization_level'];
- $attachment_backup_path = get_imagify_attachment_backup_path( $file_path );
+ $attachment_backup_path = get_imagify_ngg_attachment_backup_path( $file_path );
// Don't try to re-optimize if the optimization level is still the same.
if ( $optimization_level === $attachment_optimization_level && is_string( $attachment_error ) ) {
diff --git a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
index 50bc6593a..d934bcac1 100644
--- a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
+++ b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
@@ -75,7 +75,8 @@ public function __construct( $id ) {
* @return string|bool The path. False on failure.
*/
public function get_backup_path() {
- $backup_path = $this->get_original_path() . '_backup';
+ $file_path = $this->get_original_path();
+ $backup_path = get_imagify_ngg_attachment_backup_path( $file_path );
if ( file_exists( $backup_path ) ) {
return $backup_path;
@@ -323,7 +324,7 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
if ( ! is_wp_error( $resized_attachment_path ) ) {
// TODO (@Greg): Send an error message if the backup fails.
- imagify_backup_file( $attachment_path );
+ imagify_backup_file( $attachment_path, $this->get_backup_path() );
$filesystem = imagify_get_filesystem();
@@ -491,9 +492,6 @@ public function restore() {
return;
}
- $backup_path = $this->get_backup_path();
- $attachment_path = $this->get_original_path();
-
/**
* Fires before restoring an attachment.
*
diff --git a/inc/3rd-party/nextgen-gallery/inc/functions/attachments.php b/inc/3rd-party/nextgen-gallery/inc/functions/attachments.php
new file mode 100644
index 000000000..9f57e254a
--- /dev/null
+++ b/inc/3rd-party/nextgen-gallery/inc/functions/attachments.php
@@ -0,0 +1,21 @@
+init();
diff --git a/inc/functions/process.php b/inc/functions/process.php
index afbeb1e3b..993a323dc 100755
--- a/inc/functions/process.php
+++ b/inc/functions/process.php
@@ -178,10 +178,11 @@ function imagify_do_async_job( $body ) {
* @since 1.6.8
* @author Grégory Viguier
*
- * @param string $file_path The file path.
- * @return bool|object True on success. False if the backup option is not enabled. A WP_Error object on failure.
+ * @param string $file_path The file path.
+ * @param string $backup_path The backup path. This is useful for NGG for example, who doesn't store the backups in our backup folder.
+ * @return bool|object True on success. False if the backup option is not enabled. A WP_Error object on failure.
*/
-function imagify_backup_file( $file_path ) {
+function imagify_backup_file( $file_path, $backup_path = null ) {
if ( ! get_imagify_option( 'backup' ) ) {
return false;
}
@@ -200,16 +201,18 @@ function imagify_backup_file( $file_path ) {
) );
}
- // Make sure the backup directory is writable.
- if ( ! imagify_backup_dir_is_writable() ) {
- return new WP_Error( 'backup_dir_not_writable', __( 'The backup directory is not writable.', 'imagify' ) );
- }
+ if ( ! isset( $backup_path ) ) {
+ // Make sure the backup directory is writable.
+ if ( ! imagify_backup_dir_is_writable() ) {
+ return new WP_Error( 'backup_dir_not_writable', __( 'The backup directory is not writable.', 'imagify' ) );
+ }
- $backup_path = get_imagify_attachment_backup_path( $file_path );
+ $backup_path = get_imagify_attachment_backup_path( $file_path );
- // Make sure the uploads directory has no errors.
- if ( ! $backup_path ) {
- return new WP_Error( 'wp_upload_error', __( 'Error while retrieving the uploads directory path.', 'imagify' ) );
+ // Make sure the uploads directory has no errors.
+ if ( ! $backup_path ) {
+ return new WP_Error( 'wp_upload_error', __( 'Error while retrieving the uploads directory path.', 'imagify' ) );
+ }
}
// Make sure the filesystem has no errors.
From 17deca8470dc398161390d238782da4a4600aeaa Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Mon, 24 Jul 2017 17:33:48 +0200
Subject: [PATCH 33/38] Hotfix: when optimizing, save the optimization level
even if the image is already optimized: the level can still be used to
display the re-optimize links for example. Also, added missing
`imagify_is_attachment_mime_type_supported()` tests to NGG optimization and
restore processes.
---
.../class-imagify-as3cf-attachment.php | 4 ++-
.../classes/class-imagify-ngg-attachment.php | 30 ++++++++++++-------
inc/classes/class-imagify-attachment.php | 6 ++--
3 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
index 5899ad5db..5a4f1595c 100644
--- a/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
+++ b/inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
@@ -235,6 +235,9 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
}
}
+ // Save the optimization level.
+ update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
+
if ( ! $data ) {
// The optimization failed.
$metadata = $metadata_changed ? $metadata : false;
@@ -309,7 +312,6 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
update_post_meta( $this->id, '_imagify_data', $data );
update_post_meta( $this->id, '_imagify_status', 'success' );
- update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
if ( $this->delete_files && $filesize_total ) {
// Add the total file size for all image sizes. This is a meta used by AS3CF.
diff --git a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
index d934bcac1..3f706bef8 100644
--- a/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
+++ b/inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
@@ -285,6 +285,11 @@ public function fill_data( $data, $response, $url, $size = 'full' ) {
* @return array $data The optimization data.
*/
public function optimize( $optimization_level = null, $metadata = array() ) {
+ // Check if the attachment extension is allowed.
+ if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
+ return;
+ }
+
$optimization_level = is_null( $optimization_level ) ? (int) get_imagify_option( 'optimization_level', 1 ) : (int) $optimization_level;
// To avoid issue with "original_size" at 0 in "_imagify_data".
@@ -292,16 +297,16 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
$this->delete_imagify_data();
}
+ // Check if the full size is already optimized.
+ if ( $this->is_optimized() && $this->get_optimization_level() === $optimization_level ) {
+ return;
+ }
+
// Get file path & URL for original image.
$attachment_path = $this->get_original_path();
$attachment_url = $this->get_original_url();
$attachment_original_size = $this->get_original_size( false );
- // Check if the full size is already optimized.
- if ( $this->is_optimized() && ( $this->get_optimization_level() === $optimization_level ) ) {
- return;
- }
-
/**
* Fires before optimizing an attachment.
*
@@ -350,17 +355,17 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
$data = $this->fill_data( null, $response, $attachment_url );
- if ( ! $data ) {
- delete_transient( 'imagify-ngg-async-in-progress-' . $this->id );
- return;
- }
-
// Save the optimization level.
imagify_ngg_db()->update( $this->id, array(
'pid' => $this->id,
'optimization_level' => $optimization_level,
) );
+ if ( ! $data ) {
+ delete_transient( 'imagify-ngg-async-in-progress-' . $this->id );
+ return;
+ }
+
// If we resized the original with success, we have to update the attachment metadata.
// If not, WordPress keeps the old attachment size.
if ( $do_resize && $resized ) {
@@ -487,6 +492,11 @@ public function optimize_thumbnails( $optimization_level = null, $data = array()
* @return void
*/
public function restore() {
+ // Check if the attachment extension is allowed.
+ if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
+ return;
+ }
+
// Stop the process if there is no backup file to restore.
if ( ! $this->has_backup() ) {
return;
diff --git a/inc/classes/class-imagify-attachment.php b/inc/classes/class-imagify-attachment.php
index a76159ed4..e7bb2f77d 100644
--- a/inc/classes/class-imagify-attachment.php
+++ b/inc/classes/class-imagify-attachment.php
@@ -276,14 +276,14 @@ public function optimize( $optimization_level = null, $metadata = array() ) {
$data = $this->fill_data( null, $response, $attachment_url );
+ // Save the optimization level.
+ update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
+
if ( ! $data ) {
delete_transient( 'imagify-async-in-progress-' . $this->id );
return;
}
- // Save the optimization level.
- update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
-
// If we resized the original with success, we have to update the attachment metadata.
// If not, WordPress keeps the old attachment size.
if ( $do_resize && $resized ) {
From 89723c3795e3a3f8a79027434b8c7ac206e07657 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 25 Jul 2017 00:44:25 +0200
Subject: [PATCH 34/38] Hotfix: no need to enable bulk-restore action on error
attachments that can't be re-optimized.
---
inc/functions/admin-ui.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/inc/functions/admin-ui.php b/inc/functions/admin-ui.php
index f498b41da..a5b2a8711 100644
--- a/inc/functions/admin-ui.php
+++ b/inc/functions/admin-ui.php
@@ -24,7 +24,7 @@ function get_imagify_attachment_optimization_text( $attachment, $context = 'wp'
$error = get_imagify_attachment_error_text( $attachment, $context );
if ( $error ) {
- if ( $attachment->has_backup() ) {
+ if ( 'post.php' !== $pagenow && $reoptimize_link && $attachment->has_backup() ) {
$reoptimize_output .= ' ';
}
From 8dd609e8568322952453854c4c47ff5ee5b11fa7 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 25 Jul 2017 01:07:55 +0200
Subject: [PATCH 35/38] Hotfix: removed an unused JS variable + used `\u00A0`
instead of non-breaking spaces directly.
---
assets/js/imagify.js | 4 ++--
assets/js/options.js | 5 ++---
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/assets/js/imagify.js b/assets/js/imagify.js
index dd084a149..c184058c7 100644
--- a/assets/js/imagify.js
+++ b/assets/js/imagify.js
@@ -94,13 +94,13 @@ window.ImagifyGulp = function () {
key: 'humanSize',
value: function humanSize( bytes ) {
if ( 0 === bytes ) {
- return '0 kB';
+ return '0\u00A0kB';
}
var sizes = [ 'B', 'kB', 'MB' ],
i = parseInt( Math.floor( Math.log( bytes ) / Math.log( 1024 ) ) );
- return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + ' ' + sizes[ i ];
+ return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + '\u00A0' + sizes[ i ];
}
}, {
key: 'run',
diff --git a/assets/js/options.js b/assets/js/options.js
index ce2821a49..b2d7f1df3 100755
--- a/assets/js/options.js
+++ b/assets/js/options.js
@@ -147,8 +147,7 @@ window.imagify = window.imagify || {
// "Select all" checkboxes =========================================================================
(function( w, d, $, undefined ) {
- var lastClicked = {},
- jqPropHookChecked = $.propHooks.checked;
+ var jqPropHookChecked = $.propHooks.checked;
// Force `.prop()` to trigger a `change` event.
$.propHooks.checked = {
@@ -168,7 +167,7 @@ window.imagify = window.imagify || {
};
// Check all checkboxes.
- $( '.imagify-check-group .imagify-row-check' ).on( 'click', function( e ) {
+ $( '.imagify-check-group .imagify-row-check' ).on( 'click', function() {
var $group = $( this ).closest( '.imagify-check-group' ),
allChecked = 0 === $group.find( '.imagify-row-check' ).filter( ':visible:enabled' ).not( ':checked' ).length;
From 695b27ae5d408ea55af9380deedf6d9964f498f1 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 25 Jul 2017 01:08:50 +0200
Subject: [PATCH 36/38] Hotfix: minify assets.
---
assets/css/admin.min.css | 2 +-
assets/js/bulk.min.js | 2 +-
assets/js/imagify.min.js | 2 +-
assets/js/options.min.js | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/assets/css/admin.min.css b/assets/css/admin.min.css
index 433c49148..18e3efa98 100755
--- a/assets/css/admin.min.css
+++ b/assets/css/admin.min.css
@@ -1 +1 @@
-.imagify-cell,.imagify-cell.va-top,.va-top .imagify-cell{vertical-align:top}#imagify-overview-chart-legend,.imagify-oh,body.imagify-modal-is-open{overflow:hidden}.imagify-start{float:left}.imagify-end{float:right}.imagify-txt-start.imagify-txt-start.imagify-txt-start{text-align:left}.imagify-txt-center.imagify-txt-center.imagify-txt-center{text-align:center}.imagify-txt-end.imagify-txt-end.imagify-txt-end{text-align:right}.imagify-mt1.imagify-mt1{margin-top:1em}.imagify-mb1.imagify-mb1{margin-bottom:1em}.imagify-mr1.imagify-mr1{margin-right:1em}.imagify-ml2.imagify-ml2{margin-left:2em}.imagify-mr2.imagify-mr2{margin-right:2em}.imagify-pl0.imagify-pl0.imagify-pl0{padding-left:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after{content:"";display:table;clear:both}.imagify-count.imagify-count{counter-reset:num}.imagify-count .imagify-count-title{font-weight:700}.imagify-default-settings{color:#73818c;font-weight:400}.imagify-count .imagify-count-title:before{counter-increment:num 1;content:counter(num) ". "}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px}.imagify-bulk-submit .imagify-cell{padding-top:0}.imagify-plugins-error{overflow:hidden;padding-left:20px;list-style-type:disc}.imagify-plugins-error li{width:300px;line-height:30px}@media (max-width:570px){.imagify-plugins-error li{width:auto}}.imagify-notice-dismiss.notice-dismiss{text-decoration:none}.imagify-spinner{display:inline-block;width:20px;height:20px;margin-right:5px;vertical-align:middle;background:url(../images/spinner.gif) 0 0/20px 20px no-repeat rgba(0,0,0,0);opacity:.7}.spinner.imagify-hidden{width:0;margin:4px 0 0}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-sweet-alert button{margin-top:17px!important;height:45px!important;letter-spacing:3px;text-transform:uppercase!important;border-radius:3px!important;background-color:#40b1d0!important;-webkit-box-shadow:0 3px 0 #338ea6!important;box-shadow:0 3px 0 #338ea6!important}.imagify-sweet-alert button.loading{border-radius:100%!important;height:40px!important;padding:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-sweet-alert button.swal2-cancel{background:#777!important;-webkit-box-shadow:0 3px 0 #444!important;box-shadow:0 3px 0 #444!important}.imagify-sweet-alert-signup .sa-confirm-button-container{width:40%}.imagify-sweet-alert-signup button{width:100%;padding:0!important}.imagify-sweet-alert .la-ball-fall,.imagify-sweet-alert .sa-input-error:after,.imagify-sweet-alert .sa-input-error:before{top:25%!important}#wpwrap{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.stop-scrolling #wpwrap{-webkit-filter:blur(2px);filter:blur(2px)}.stop-scrolling #wpwrap #wpadminbar{top:-32px}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary{color:#8cc152}#imagify-check-api-container{font-weight:700}#imagify-check-api-container .dashicons{font-size:25px}#imagify-check-api-container .dashicons-no:before{color:#f06e57;vertical-align:-1px}#imagify-check-api-container .dashicons-yes:before{color:#8BC34A;vertical-align:-1px}.imagify-valid{color:#8BC34A}.imagify-chart{width:33.33%;position:relative}.imagify-doughnut-legend{margin-top:38px;list-style:none}.imagify-doughnut-legend li{display:block;padding-left:30px;position:relative;margin-bottom:15px;border-radius:5px;padding:3px 8px 2px 31px;font-size:14px;font-weight:600;cursor:default;-webkit-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.imagify-doughnut-legend li span{display:block;position:absolute;left:0;top:0;width:25px;height:25px;border-radius:50%}.button-text,.imagify-bulk-info p{display:inline-block}.imagify-chart{float:left;margin-bottom:20px}td .imagify-chart{float:none;margin-bottom:0;top:4px}.imagify-chart-container{position:relative;width:180px;float:left;margin-right:20px}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;font-weight:700;text-align:center}.imagify-total-percent{color:#46b1ce}td .imagify-chart-container{width:18px;height:18px;float:none;margin-right:10px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-14px;text-align:center;font-size:55px;font-weight:700;color:#46B1CE}.imagify-chart-percent span{font-size:20px;vertical-align:super}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.media_page_imagify-bulk-optimization .media-item,body[class*="_imagify-ngg-bulk-optimization"] .media-item{margin:0}.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{float:none;width:100%;margin:0;background:#1F2331;-webkit-box-shadow:0;box-shadow:0;border-radius:0}.media_page_imagify-bulk-optimization .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent{width:auto;padding:0 5px;line-height:1.85;font-size:12px}.media_page_imagify-bulk-optimization .media-item .percent,.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{text-align:right}.media_page_imagify-bulk-optimization .media-item .progress .bar,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar{width:1px;height:22px;margin-top:0;background:#46B1CE;border-radius:0;overflow:visible;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .button,.imagify-settings a,.imagify-settings input,.imagify-welcome .button,.imagify-welcome a,.imagify-weolcome input{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-settings a{color:#40b1d0}.imagify-options-title{padding-bottom:.5em;border-bottom:3px solid #F2F2F2;font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:#40b1d0}.imagify-settings,.imagify-settings p,.imagify-settings th{color:#5F758E}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.button .dashicons,.button-text,.imagify-button-primary.imagify-button-primary .dashicons,.imagify-button-secondary.imagify-button-secondary .dashicons,.imagify-button.imagify-button .dashicons,.imagify-notice .button .dashicons,.imagify-settings .button .dashicons,.imagify-welcome .button .dashicons{vertical-align:middle}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-button-primary.imagify-button-primary,.imagify-button-secondary.imagify-button-secondary,.imagify-button.imagify-button,.imagify-notice .button,.imagify-settings .button,.imagify-welcome .button{height:auto;padding:8px 20px;border:0;font-size:14px;font-weight:600;-webkit-box-shadow:0 3px 0 rgba(0,0,0,.15);box-shadow:0 3px 0 rgba(0,0,0,.15);border-radius:3px;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.button-primary.button-mini{padding:2px 10px}.imagify-settings .button.button-mini-flat{padding:3px 6px 5px;font-size:12px;-webkit-box-shadow:none!important;box-shadow:none!important;line-height:1.2}.imagify-settings .button.button-mini-flat:focus,.imagify-settings .button.button-mini-flat:hover{-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-button-ghost.imagify-button-ghost,.imagify-title .button-ghost.button-ghost{padding:2px 9px;border:1px solid #40B1D0;font-size:12px;font-weight:400;color:#40B1D0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover,.imagify-title .button-ghost.button-ghost:focus,.imagify-title .button-ghost.button-ghost:hover{border-color:transparent;color:#000;background:#40B1D0}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover{color:#FFF}.imagify-button-medium.imagify-button-medium{text-transform:uppercase;letter-spacing:.1em;padding:3px 10px;font-weight:700}.imagify-button-medium.imagify-button-ghost{border-width:2px}.button .dashicons{margin-right:5px}.imagify-button-primary.imagify-button-primary,.imagify-settings .button-primary.button-primary,.imagify-welcome .button-primary.button-primary{background:#40B1D0;color:#FFF;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1);text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799!important}.imagify-button-secondary.imagify-button-secondary{background:#8BC34A;color:#FFF;-webkit-box-shadow:0 3px 0 #6F9C3B;box-shadow:0 3px 0 #6F9C3B;text-shadow:0 -1px 1px #6F9C3B,1px 0 1px #6F9C3B,0 1px 1px #6F9C3B!important}.imagify-button-primary.imagify-button-primary:focus,.imagify-button-primary.imagify-button-primary:hover,.imagify-settings .button-primary:focus,.imagify-settings .button-primary:hover,.imagify-welcome .button-primary:focus,.imagify-welcome .button-primary:hover{background:#338ea6;-webkit-box-shadow:0 3px 0 #1f7a92;box-shadow:0 3px 0 #1f7a92}.imagify-button-secondary.imagify-button-secondary:focus,.imagify-button-secondary.imagify-button-secondary:hover{background:#6F9C3B;color:#FFF}.imagify-button-light.imagify-button-light{background:#FFF;color:#4a4a4a;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.2);box-shadow:0 2px 0 rgba(0,0,0,.2)}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#FFF;background:rgba(0,0,0,.2)}.imagify-section-positive .imagify-button-light{color:#709A41}.imagify-button.imagify-button-big{font-size:15px;padding:11px 30px}.imagify-button-big .dashicons{font-size:1.45em;margin-right:6px;margin-left:-4px}.imagify-info,.imagify-logo{vertical-align:top}#imagify-bulk-action{padding:11px 20px}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{float:left;padding:0 10px 1px;margin:0 5px 2px 0;font-size:13px;line-height:26px;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1)}.imagify-settings input[type=text]{color:#4A4A4A;font-weight:600;-webkit-box-shadow:none;box-shadow:none}.imagify-settings div.submit.submit{padding-left:235px;padding-top:40px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}@media (max-width:850px){.imagify-settings div.submit{padding-left:0}.imagify-settings p.submit{text-align:center}}.imagify-title.imagify-title{position:relative;padding:30px 50px;font-size:23px;background:#2E3243;color:#FFF}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #D9D9D9;padding-top:15px;padding-bottom:15px}.imagify-section,.imagify-settings div.submit,.imagify-sub-header,.imagify-sub-title.imagify-sub-title{margin:0;padding:20px;background:#F2F5F7}.imagify-section-positive,.imagify-sub-title.imagify-sub-title{padding-left:40px}.imagify-section-positive{background:#8cc152;color:#FFF}.imagify-section-positive p{color:#FFF}.imagify-section-gray{background:#D9E4EB}.imagify-section-gray .imagify-count-title{color:#4a4a4a}.imagify-section p:first-child{margin-top:0}.imagify-section p:last-child{margin-bottom:0}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-bulk-info{margin:1em 1em 1em 5px;-webkit-transition:margin .3s;-o-transition:margin .3s;transition:margin .3s}@media (max-width:850px){.imagify-bulk-info{margin:1em}}.imagify-bulk-info p{text-align:left;width:400px;max-width:100%;font-weight:700}@media (min-width:1500px){.imagify-settings div.submit{display:table;width:100%}.imagify-settings div.submit>*{display:table-cell;vertical-align:middle}.imagify-bulk-info{padding:0 25px;text-align:right}}.imagify-settings div.submit{margin-top:2em;padding:20px 0}.imagify-notice .imagify-rate-us .stars,.imagify-sub-header .form-table{margin:0}.imagify-sub-header th{text-align:right}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}[for=api_key]{padding-top:5px}.imagify-notice .imagify-rate-us.imagify-rate-us{position:relative;bottom:0;right:0;text-align:left}.imagify-rate-us.imagify-rate-us{position:absolute;bottom:50%;right:20px;text-align:right;margin-bottom:-2.4em;color:#FFF}.imagify-rate-us a{color:#40B1D0}.imagify-rate-us .stars{display:inline-block;margin:2px 0 0 10px;text-decoration:none;letter-spacing:.2em;vertical-align:-1px}.imagify-rate-us .stars .dashicons:before{font-size:18px}.imagify-rate-us a:focus,.imagify-rate-us a:hover{color:#FEE102}@media (max-width:1220px){.imagify-rate-us.imagify-rate-us{position:static;margin-bottom:0;text-align:left}.imagify-rate-us.imagify-rate-us br{display:none}.imagify-rate-us .stars{display:block;margin-left:0}}.imagify-rkt-notice.imagify-rkt-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:10px 45px 10px 0;border:0;-webkit-box-shadow:none;box-shadow:none;color:#FFF;background:#412355}.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:2px;margin-right:20px}@media (max-width:782px){.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:0;margin-right:12px}}.imagify-rkt-notice .imagify-cross{position:absolute;right:8px;top:50%;width:22px;height:22px;padding:0;margin-top:-11px;background:0 0;color:#FD7300;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross .dashicons{position:relative;top:2px;left:1px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross:hover{background:#FFF}.imagify-rkt-notice .imagify-cross:hover .dashicons{color:#412355}.imagify-rkt-notice .imagify-rkt-coupon,.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo{-ms-flex-negative:0;flex-shrink:0}.imagify-rkt-notice .imagify-rkt-logo{width:150px!important;text-align:center;padding:0 25px 0 30px;line-height:.8}.imagify-rkt-notice .imagify-rkt-msg{width:100%!important;padding:0 15px;font-size:14px;line-height:1.6}.imagify-rkt-notice .imagify-rkt-coupon{width:150px!important;padding:0 15px}.imagify-rkt-notice .imagify-rkt-coupon-code{padding:5px 10px;font-size:23px;font-weight:700;border:1px dashed #F7A933;color:#F7A933}.imagify-rkt-notice .imagify-rkt-cta{width:250px!important;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:200px;flex-basis:200px}.imagify-rkt-notice .button.button{position:relative;top:-1px;height:auto;font-weight:600;font-size:14px;-webkit-box-shadow:0 4px 0 #B27A27;box-shadow:0 4px 0 #B27A27;border:0;padding:9px 18px;background:#F7A933;text-shadow:1px 1px 1px rgba(0,0,0,.2)}@media (max-width:880px){.imagify-rkt-notice{-ms-flex-wrap:wrap;flex-wrap:wrap}.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo,.imagify-rkt-notice .imagify-rkt-msg{text-align:left;padding:5px 15px}.imagify-cross.imagify-cross{top:8px;margin-top:0}.imagify-rkt-notice .imagify-cross .dashicons{top:1px}}.imagify-settings-section{padding:10px 20px}.imagify-welcome .imagify-settings-section,[id=imagify-settings]{border:1px solid #D9D9D9;border-top:0 none;background:#FFF}.imagify-br{line-height:2}.imagify-important{color:#F5A623}.imagify-info,.imagify-info a{color:#40B1D0;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:-1px}.imagify-visual-label,label+.imagify-info,label+.imagify-options-line{display:inline-block;max-width:70%;margin-left:15px;margin-top:2px!important;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.imagify-visual-label{vertical-align:-5px}label[for=imagify_sizes_full]+.imagify-info{vertical-align:middle}.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label+.imagify-options-line{opacity:.5}.imagify-settings.imagify-settings [type=checkbox]:checked+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:checked+label+.imagify-options-line{opacity:1}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-checkbox.imagify-checkbox:checked,.imagify-checkbox.imagify-checkbox:not(:checked),.imagify-settings.imagify-settings [type=checkbox]:checked,.imagify-settings.imagify-settings [type=checkbox]:not(:checked){opacity:.01}.imagify-checkbox.imagify-checkbox:checked:focus,.imagify-checkbox.imagify-checkbox:not(:checked):focus,.imagify-settings.imagify-settings [type=checkbox]:checked:focus,.imagify-settings.imagify-settings [type=checkbox]:not(:checked):focus{-webkit-box-shadow:none!important;box-shadow:none!important;outline:0!important;border:0!important}.imagify-checkbox.imagify-checkbox:checked+label,.imagify-checkbox.imagify-checkbox:not(:checked)+label,.imagify-settings [type=checkbox]:checked+label,.imagify-settings [type=checkbox]:not(:checked)+label{position:relative;padding-left:6px;cursor:pointer;vertical-align:top}.imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-checkbox.imagify-checkbox:not(:checked)+label:before,.imagify-settings [type=checkbox]:checked+label:before,.imagify-settings [type=checkbox]:not(:checked)+label:before{content:'';position:absolute;left:0;top:0;width:28px;height:28px;margin:0 0 0 -24px;border:2px solid #8BA6B4;background:#FFF;border-radius:4px}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:checked+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{content:"✓";position:absolute;font-size:1.4em;top:3px;left:-16px;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.imagify-checkbox.imagify-checkbox[disabled]:checked+label:before,.imagify-checkbox.imagify-checkbox[disabled]:not(:checked)+label:before,.imagify-settings [type=checkbox][disabled]:checked+label:before,.imagify-settings [type=checkbox][disabled]:not(:checked)+label:before{border-color:#ccc;background:#ddd}.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-settings [type=checkbox]:checked+label:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}input[id^=imagify_sizes_]:checked+label{font-weight:700}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:22px;height:22px;border-width:1.5px;border-radius:2px;margin-top:0}.medium.imagify-checkbox:checked+label:after,.medium.imagify-checkbox:not(:checked)+label:after{font-size:1.1em;left:-17px;top:3px}.imagify-settings .mini[type=checkbox]:checked+label:before,.imagify-settings .mini[type=checkbox]:not(:checked)+label:before,.mini.imagify-checkbox:checked+label:before,.mini.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px;border-width:1px;border-radius:2px;margin-top:0}.imagify-settings .mini[type=checkbox]:checked+label:after,.imagify-settings .mini[type=checkbox]:not(:checked)+label:after,.mini.imagify-checkbox:checked+label:after,.mini.imagify-checkbox:not(:checked)+label:after{font-size:.9em;left:-21px;top:1px}.imagify-checkbox.imagify-checkbox:checked:focus+label:before,.imagify-checkbox.imagify-checkbox:not(:checked):focus+label:before,.imagify-settings [type=checkbox]:checked:focus+label:before,.imagify-settings [type=checkbox]:not(:checked):focus+label:before{border-style:dotted;border-color:#40b1d0}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338EA6;border-radius:4px}.imagify-inline-options input[type=radio]:checked,.imagify-inline-options input[type=radio]:not(:checked){position:absolute;left:5px;top:5px;display:none}.imagify-inline-options input[type=radio]:checked+label,.imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;display:table-cell;padding:13px 10px;text-align:center;font-weight:600;font-size:16px;text-transform:uppercase;letter-spacing:.1em;color:#FFF;background:#2E3243;border-left:1px solid rgba(255,255,255,.2);-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-small-options input[type=radio]:checked+label,.imagify-small-options input[type=radio]:not(:checked)+label{padding:8px 10px;font-size:13px;color:#FFF;-webkit-box-shadow:none;box-shadow:none;border-left:0}.imagify-bulk-submit .imagify-inline-options input[type=radio]:checked+label,.imagify-bulk-submit .imagify-inline-options input[type=radio]:not(:checked)+label{margin-bottom:1.75em}.imagify-inline-options input[type=radio]:checked+label:first-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:first-of-type{border-radius:3px 0 0 3px}.imagify-inline-options input[type=radio]:checked+label:last-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:last-of-type{border-radius:0 3px 3px 0}.imagify-inline-options input[type=radio]:checked+label{background:#8BC34A}.imagify-small-options input[type=radio]:not(:checked)+label{background:#338EA6;color:rgba(255,255,255,.4)}.imagify-small-options input[type=radio]:checked+label{background:#40B1D0}.imagify-inline-options .imagify-info{margin-top:15px}.imagify-btn-info{display:block;font-size:.7em;letter-spacing:0;line-height:1;text-transform:none}.imagify-datas-more-action a,a.btn-rocket{text-transform:uppercase;text-decoration:none}#describe-resize-larger input{width:5em}.imagify-cols:after{content:"";display:table;clear:both}.imagify-col{float:left;width:50%}.imagify-main{float:left;width:70%}.imagify-sidebar{float:right;width:28%;max-width:300px}.imagify-sidebar-section{border:1px solid #BBB;background:#FFF}.imagify-sidebar-section+.imagify-sidebar-section{margin-top:2em}@media (max-width:820px){.imagify-main,.imagify-sidebar{float:none;width:auto}.imagify-settings{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-sidebar{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;max-width:none;margin-left:0;margin-top:25px}.wp-media-products{text-align:center}.wp-media-products li{display:inline-block;width:100%;max-width:276px}}@media (min-width:1400px){.imagify-main{width:74%}}.imagify-sidebar-title{display:block;padding:20px 15px;border-bottom:1px solid #BBB;font-size:14px;font-weight:700;color:#23282d;background:#F2F5F7}.imagify-sidebar-title img{vertical-align:top;margin-right:5px}.imagify-sidebar .wp-media-products{margin-top:0;margin-bottom:-.5em}.imagify-sidebar .wp-media-products .links{display:block;padding:85px 25px 24px;text-align:center;background-color:#2E3243;background-size:contain;background-repeat:no-repeat;background-position:50% 0;text-decoration:none}.imagify-sidebar .wp-media-products .links p{margin:1.5em auto;color:#FFF}.imagify-sidebar .wp-media-products .wprocket-link{background-image:-o-linear-gradient(top,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-image:linear-gradient(to bottom,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-color:#3B1E4E;background-repeat:repeat-x,no-repeat}.imagify-sidebar-content{padding:10px 20px}.imagify-mark-styled{display:inline-block;padding:1px 2px 1px 4px;line-height:1.3;font-weight:700;background:#F7A933;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);text-shadow:1px 1px 0 rgba(0,0,0,.2)}.imagify-mark-styled span{display:inline-block;-webkit-transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg);transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg)}.imagify-discount-code,a.btn-rocket{display:block;text-shadow:1px 1px 0 rgba(0,0,0,.2);font-weight:700}.imagify-discount-code{margin:.35em 0 .5em;font-size:2em;letter-spacing:.05em;text-align:center}.imagify-big-text{font-size:15px;font-weight:700}.imagify-big-text strong{font-size:20px}a.btn-rocket{font-size:1.15em;padding:12px;background:#F7A933;-webkit-box-shadow:0 3px 0 #D69626;box-shadow:0 3px 0 #D69626;border-radius:3px;color:#FFF}a.btn-rocket:focus,a.btn-rocket:hover{background:#ff8c00;-webkit-box-shadow:0 3px 0 #ff8c00;box-shadow:0 3px 0 #ff8c00}.imagify-welcome{margin:30px 20px 0 0}.imagify-welcome .baseline{display:inline-block;margin:.2em 0 0 2em;font-size:17px}.imagify-welcome .imagify-logo{vertical-align:middle}.imagify-welcome-remove{position:absolute;top:50%;right:15px;margin-top:-8px;color:#FFF;text-decoration:none}.imagify-columns{overflow:hidden;padding:15px 0;counter-reset:cols}.imagify-columns [class^=col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-columns .col-1-3{width:33.333%;padding-left:28px}.imagify-columns .col-2-3{width:66.666%;padding-left:28px}.imagify-columns .col-1-2{width:50%;padding:0 20px}.imagify-columns .col-overview{padding-left:20px}.imagify-columns .col-informations{width:36.6%;padding-right:30px}.imagify-columns .col-statistics{width:30%}@media (max-width:830px){.imagify-columns [class^=col-]{float:none;margin-bottom:1.5em}.imagify-columns .col-1-2,.imagify-columns .col-1-3{width:auto;padding:0 28px;clear:both;padding-top:1em}}.imagify-columns [class^=col-] img{float:left;margin-right:18px}.imagify-col-content{overflow:hidden}.imagify-col-title{margin:0 0 15px;font-size:23px}.counter .imagify-col-title:before{counter-increment:cols;content:counter(cols) ". ";color:#40B1D0}.imagify-col-desc{color:#5F758E;margin-bottom:2em}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0;background:#2E3243;-webkit-box-shadow:none;box-shadow:none;color:#FFF}@media (max-width:782px){.imagify-notice.imagify-notice,.imagify-welcome{margin-right:12px}}@media (max-width:450px){.imagify-notice.imagify-notice{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wrap .imagify-notice{margin:5px 15px 2px;position:relative}.imagify-notice-logo{padding:18px 23px;background:#40B1D0}.updated .imagify-notice-logo{background:#8BC34A}.error .imagify-notice-logo{background:#D0021B}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#FFF}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-notice a{color:#40B1D0}.imagify-notice a:focus,.imagify-notice a:hover{color:#FEE102}.imagify-notice code{background:rgba(0,0,0,.4)}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:235px;margin:0 auto}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555;font-size:10px}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list .big{font-size:12px;color:#40B1D0}.imagify-data-item{overflow:hidden}.imagify-data-item .imagify-chart{display:inline-block;top:1px;width:20px;vertical-align:middle;margin-bottom:0}li.imagify-data-item{clear:both;margin-bottom:2px}ul.imagify-datas-list .imagify-data-item span.data,ul.imagify-datas-list .imagify-data-item strong{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{text-align:left;padding-right:5px}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}.media-sidebar .imagify-datas-list .imagify-data-item .data,.media-sidebar .imagify-datas-list .imagify-data-item strong{width:auto;float:none}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.imagify-datas-more-action.imagify-datas-more-action{margin:.4em auto;background:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(49%,transparent),color-stop(50%,rgba(0,0,0,.075)),color-stop(58%,rgba(0,0,0,.075)),color-stop(58%,transparent),to(transparent));background:-o-linear-gradient(top,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent);background:linear-gradient(to bottom,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent)}.imagify-datas-more-action a{display:inline-block;padding:0 5px;background:#40B1D0;color:#FFF;font-size:9px;font-weight:700;line-height:1.9}.imagify-datas-more-action a.is-open{background:#555}.imagify-datas-more-action a.is-open .dashicons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.imagify-datas-more-action a .dashicons{font-size:14px;vertical-align:middle;line-height:.8}.imagify-datas-more-action .the-text,.imagify-datas-more-action a .dashicons:before{line-height:20px;vertical-align:middle}.imagify-datas-more-action .the-text{display:inline-block;height:20px}ul.imagify-datas-details.imagify-datas-details{margin:.7em auto}.imagify-datas-details strong{color:#40B1D0}.imagify-datas-details .original{color:#555}.imagify-datas-actions-links{overflow:hidden;border-top:2px solid transparent;padding-top:5px;font-size:8px}.imagify-datas-actions-links a{position:relative;display:inline-block;padding-left:17px;text-decoration:none;font-weight:600}.compat-field-imagify .imagify-datas-actions-links{max-width:300px}.misc-pub-imagify .imagify-datas-actions-links{border-top:2px solid #f2f2f2;padding-bottom:5px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{font-size:10px;float:left;width:50%}.media-sidebar .compat-field-imagify .imagify-datas-actions-links a,.submitbox .misc-pub-imagify .imagify-datas-actions-links a{display:block;width:auto;float:none}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.imagify-datas-actions-links a:only-child{float:none;width:auto}.imagify-datas-details.is-open+.imagify-datas-actions-links{border-top-color:rgba(0,0,0,.075)}.imagify-datas-actions-links .dashicons{position:absolute;left:0;top:4px;width:12px;margin-right:2px;font-size:11px}.imagify-title>h1{padding:0}.imagify-title-right{display:table;float:right;margin-top:-10px}.imagify-title-right p{margin:0}.imagify-title-right a{font-weight:700;text-decoration:none}.imagify-title-right>div{display:table-cell;vertical-align:middle}.imagify-title-right .dashicons-arrow-down-alt2{vertical-align:-4px;margin-left:2px}@media (max-width:1200px){.imagify-bulk .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-title-right{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;margin-top:20px}}.imagify-account,.imagify-account-link{padding-right:15px}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.imagify-credit-left{position:relative;min-width:280px;padding-left:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}@media (max-width:630px){.imagify-title-right,.imagify-title-right>div{display:block;width:auto}.imagify-title-right>div{margin-top:10px;max-width:100%}.imagify-credit-left{padding-left:0}}.imagify-meteo-title.imagify-meteo-title{color:#FFF;font-size:17px}.imagify-space-left{display:inline-block;min-height:38px;min-width:245px;vertical-align:middle}.imagify-space-left>p{color:#FFF}#wp-admin-bar-imagify-profile [class^=imagify-bar-],[class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758D;color:#FFF;font-size:10px}.base-transparent{background:0 0}[class^=imagify-bar-].right-outside-number{-webkit-box-sizing:border-box;box-sizing:border-box;padding-right:4.5em}.right-outside-number .imagify-barnb{display:block;margin-right:-4.5em;text-align:right;font-weight:700;line-height:1.5}#wp-admin-bar-imagify-profile .imagify-progress-value,.imagify-progress-value{position:absolute;top:0;right:0;left:0;bottom:0;text-align:center;line-height:13px;font-weight:700}#wp-admin-bar-imagify-profile .imagify-progress,.imagify-progress{height:1.5em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8CC152}.imagify-bar-positive .imagify-barnb{color:#8CC152}.imagify-bar-negative .imagify-progress{background:#73818C}.imagify-bar-negative .imagify-barnb{color:#73818C}.imagify-bar-neutral .imagify-progress{background:#F5A623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#D0021B}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0 13px}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;padding:15px 0 10px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889F}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40B1D0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p,.imagify-list-infos li+li{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost,.btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #FFF;text-align:center;background:0 0;color:#FFF;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:hover,.btn-ghost:focus,.btn-ghost:hover{background:#FFF;color:#888}.imagify-list-infos{max-width:100%;width:415px}.imagify-info-block,.imagify-list-infos li{position:relative;padding:10px;padding-left:42px;background:#D9E4EB;border-radius:4px;line-height:1.6}.imagify-list-infos .imagify-alt.imagify-alt{background:#8BA7B5;color:#FFF;font-weight:700}.imagify-info-block:before,.imagify-list-infos li:before{content:"";position:absolute;left:13px;top:14px;height:16px;width:16px;border:1px solid #46b1ce;border-radius:10px}.imagify-info-block:after,.imagify-list-infos li:after{content:"i";position:absolute;left:20px;top:13px;font-style:italic;color:#46b1ce}.imagify-cell .imagify-info-block{padding-top:0}.imagify-cell .imagify-info-block:after{top:6px}.imagify-cell .imagify-info-block:before{top:7px}.imagify-list-infos .imagify-alt:after,.imagify-list-infos .imagify-alt:before{color:#fff;border-color:#fff}.imagify-sub-title.imagify-sub-title{font-size:23px;background:#FFF;color:#2E3243;border-left:1px solid #D9D9D9;border-right:1px solid #D9D9D9;font-weight:lighter}.imagify-sub-title .icon-bulk{margin-right:10px;vertical-align:middle}.imagify-sub-title .title-text{display:inline-block;line-height:1;vertical-align:middle}.imagify-bulk .imagify-settings-section{border:1px solid #D9D9D9;border-top:0;background:#F2F5F7;color:#4A4A4A}.imagify-bulk .imagify-settings-section h3,.imagify-bulk .imagify-settings-section li,.imagify-bulk .imagify-settings-section p{color:#4A4A4A}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-title .imagify-tooltips{position:absolute;top:100%;left:0}.imagify-tooltips .icon-round{float:left;display:inline-block;width:28px;height:28px;border:1px solid #FFF;margin-right:8px;margin-bottom:8px;font-size:17px;font-style:italic;line-height:29px;font-weight:700;text-align:center;border-radius:50%}.imagify-tooltips .tooltip-content{display:block;position:relative;max-width:250px;padding:7px 15px 8px;background:#2e3242;color:#FFF;font-size:10px;border-radius:3px}.imagify-tooltips.right .tooltip-content{margin-left:12px}.imagify-tooltips.bottom .tooltip-content{margin-top:4px}.imagify-inline-options label .tooltip-content{position:absolute;left:0;right:0;top:100%;text-transform:none;font-size:10px;letter-spacing:0;text-align:center}.imagify-ac-rt-big,.imagistatus{text-transform:uppercase;font-weight:700}.imagify-tooltips .tooltip-content:after{content:"";position:absolute}.imagify-tooltips.right .tooltip-content:after{top:16px;left:-6px;border-right:8px solid #2e3242;border-top:6px solid transparent;border-bottom:6px solid transparent}.imagify-tooltips.bottom .tooltip-content:after{top:-5px;left:50%;margin-left:-3px;border-bottom:6px solid #2e3242;border-left:6px solid transparent;border-right:6px solid transparent}.imagify-space-tooltips .tooltip-content{max-width:280px;margin-top:20px;margin-left:0;padding:5px 15px;font-size:13px;background:#40B1D0;-webkit-box-shadow:0 3px 0 #338EA6;box-shadow:0 3px 0 #338EA6}.imagify-space-tooltips .tooltip-content:after{top:-14px;left:50%;margin-left:-7px;border:0;border-bottom:15px solid #40B1D0;border-left:15px solid transparent;border-right:15px solid transparent}.tooltip-content.tooltip-table{display:table;width:100%}.tooltip-content.tooltip-table>*{display:table-cell;vertical-align:middle}.tooltip-content .cell-icon{width:28px}.tooltip-content .cell-icon .icon{margin-bottom:0}.tooltip-content .cell-text{padding:5px 10px 5px 0;line-height:1.3}.tooltip-content .cell-sep{width:1px;background:rgba(255,255,255,.4)}.tooltip-content .cell-cta{padding-left:10px}.tooltip-content .cell-cta a{display:block;color:#FFF;width:100%;height:100%;white-space:nowrap}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:36px;font-weight:700;line-height:1.1;vertical-align:middle;white-space:nowrap}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px}.imagify-number-you-optimized .text br{display:none}.imagify-number-you-optimized>p{display:table}.imagify-number-you-optimized{padding-bottom:.85em;margin-bottom:1.35em;overflow:hidden;border-bottom:1px solid rgba(0,0,0,.05)}.imagify-bars p{font-weight:700;font-size:12px;margin-bottom:0}.imagify-bars+.imagify-number-you-optimized{border-bottom:0;padding-top:.85em}.imagify-bars+.imagify-number-you-optimized p{color:#46b1ce}.imagify-bulk-table{margin-top:2em;max-height:600px;max-height:60vh;overflow:auto}.imagify-ac-report-text,.imagiuploaded{overflow:hidden}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse;border:1px solid #D3D3D3}.imagify-bulk-table td{padding:8px 15px}.imagify-bulk-table thead th,.imagify-bulk-table thead tr{background:#2E3242}.imagify-bulk-table tfoot th,.imagify-bulk-table tfoot tr{background:#73818C}.imagify-bulk-table thead th{padding:14px 15px;text-align:left;color:#F2F5F7;font-weight:700;font-size:14px}.imagify-bulk-table tfoot td{padding:14px 15px;color:#F9FAFA}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#FFF}.imagify-bulk-table tbody tr:nth-child(odd),.imagify-bulk-table tbody tr:nth-child(odd) td{background:#F2F5F7}.imagify-bulk-table .imagify-row-progress{display:none}.imagify-bulk-table .imagify-row-progress,.imagify-bulk-table .imagify-row-progress td{height:15px;padding:0}.imagify-bulk-table .imagify-no-uploaded-yet td{height:200px;font-size:17px;letter-spacing:.1em;word-spacing:.12em;vertical-align:middle;text-transform:uppercase;font-weight:700;text-align:center;color:#999;background-color:#FFF}.imagify-row-complete{padding:35px 20px;margin-top:2em;background:#8BC34A;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.1)}.imagify-row-complete .imagify-ac-chart{margin-top:3px}.imagify-row-complete p{color:#FFF;margin:0}@-webkit-keyframes congrate{0%{opacity:0;-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);opacity:1}}@keyframes congrate{0%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.imagify-row-complete.done{-webkit-animation:congrate .5s ease-in-out;animation:congrate .5s ease-in-out}.imagify-all-complete{margin:1.5em 0}.imagify-all-complete>div{display:inline-block;vertical-align:middle}.imagify-ac-report{min-width:310px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-size:24px;letter-spacing:.15em;word-spacing:.15em}.imagify-ac-share{text-align:right}.imagify-ac-share-content{display:inline-block;padding:10px 15px;background:rgba(255,255,255,.2)}.imagify-ac-share-content>*{display:inline-block;vertical-align:middle}.imagify-bulk-table .imagify-ac-share-content p{margin-right:5px}.imagify-share-networks,.imagify-share-networks li{margin:0}.imagify-share-networks li{display:inline-block}.imagify-share-networks a{display:inline-block;vertical-align:-7px;margin:0 5px;text-decoration:none;color:#FFF}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagify-cell-thumbnails{max-width:120px}td.imagify-cell-filename{-o-text-overflow:clip;text-overflow:clip;white-space:nowrap;overflow:hidden}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-right:5px;margin-left:-8px;background:url(../images/upload-image.png) no-repeat;background-size:cover}.imagiuploaded img{max-widht:100%;height:auto}.imagistatus{color:#8CA6B3}.status-compressing{color:#46B1CE}.status-error{color:#CE0B24}.status-warning{color:#f5a623}.status-complete{color:#8CC152}.imagify-error{background:#D0021B;color:#FFF}#wpadminbar .imagify-warning *,.imagify-warning{background:#f5a623;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.2)}.imagify-bulk-table .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46B1CE;font-weight:700}.imagify-cell-optimized{font-weight:700}.imagify-cell-totaloriginal{text-align:right}.imagify-modal .h2,.imagify-modal .h3{font-weight:400;letter-spacing:.075em;text-align:center}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}.imagify-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.js .imagify-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#1F2332;background-color:rgba(31,35,50,.95);z-index:99999}.imagify-modal-content{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:800px;max-width:95%;max-height:90vw;overflow:auto;padding:20px 25px;margin:1em auto;background:#FFF;-webkit-box-shadow:1px 1px 4px rgba(0,0,0,.7);box-shadow:1px 1px 4px rgba(0,0,0,.7);border-radius:3px}#imagify-visual-comparison .imagify-modal-content,.imagify-visual-comparison .imagify-modal-content{max-width:1400px;background:0 0;padding:5px;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.imagify-modal .h2{margin:.5em 0;color:#8ba6b4;font-size:24px}.imagify-modal .h3{color:#40b1d0;font-size:18px}.text-justify{text-align:justify}.imagify-modal .close-btn{display:none;visibility:hidden;position:absolute;right:20px;top:20px;font-size:1.2em;border:0;background:0 0;border-radius:0;cursor:pointer}.imagify-modal .close-btn i{margin-left:-2px}.imagify-modal .close-btn:focus,.imagify-modal .close-btn:hover{color:#40b1d0}.js .imagify-modal .close-btn{display:block;visibility:visible}.js .imagify-iframe-viewing .close-btn{display:none}#imagify-visual-comparison .close-btn,.imagify-visual-comparison .close-btn{top:50px;right:5px;width:33px;height:33px;padding:1px 0 0 2px;border:1px solid #F2F2F2;color:#F2F2F2;line-height:19px;text-align:center;border-radius:50%}.imagify-visual-comparison .close-btn,.wp_attachment_image #imagify-visual-comparison .close-btn{top:0}.imagify-visual-comparison .imagify-modal-content,.wp_attachment_image #imagify-visual-comparison .imagify-modal-content{padding-top:40px}.imagify-modal .imagify-comparison-title{font-size:28px;margin-bottom:1em;color:#F2F2F2;text-align:left}.imagify-modal .imagify-comparison-title .twentytwenty-duo-buttons{position:static;margin:0 10px 0 15px}.imagify-comparison-title .twentytwenty-duo-buttons button{float:none;padding:6px 12px;font-size:16px;text-transform:none;border:1px solid #40B1D0;color:#889;letter-spacing:0}.imagify-comparison-title .twentytwenty-duo-buttons button:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.imagify-comparison-title .twentytwenty-duo-buttons .selected{border:1px solid #40B1D0;color:#FFF;background:#40B1D0}.imagify-comparison-levels{margin:15px 0;overflow:hidden}.imagify-comparison-levels div{display:none;min-width:175px;font-size:11px}.imagify-comparison-levels .imagify-chart,.imagify-comparison-levels .imagify-chart-container{width:25px;float:none;margin:0}.imagify-visual-comparison .imagify-chart-container canvas{width:15px!important;height:15px!important;margin-right:5px}.imagify-c-level.go-left{float:left}.imagify-c-level.go-right{float:right}.imagify-c-level.go-left,.imagify-c-level.go-right{display:table}.imagify-c-level .imagify-c-level-row{display:table-row;margin:0;color:#FFF}.imagify-c-level-row>span{display:table-cell;padding:2px 0}.imagify-c-level-row .value{text-align:right;padding-left:5px}.imagify-c-level-row .value.level{color:#40b1d0}.imagify-c-level-row .value.size{color:#8bc34a;font-weight:700}.imagify-c-level-row .value .imagify-chart{top:1px}@-webkit-keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-menu-bar-img{margin-top:1em}.imagify-modal .loader{position:absolute;top:50%;left:50%;margin:-32px 0 0 -32px;opacity:0;visibility:hidden;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.imagify-modal .loading .loader{visibility:visible;opacity:1}.imagify-settings .imagify-visual-comparison-text{margin-top:1em;color:#40b1d0;font-weight:700}.imagify-border-styled,.imagify-flex-table,.imagify-modal-cols,.imagify-offer-header,.imagify-payment-modal .imagify-modal-content,.imagify-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.imagify-border-styled,.imagify-modal-cols{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal{text-align:center;color:#7A8996}.imagify-payment-modal *{-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-modal-loader{position:absolute;top:0;left:0;right:0;bottom:0;background:url(../images/loader-balls.svg) center no-repeat #fff;z-index:10}.imagify-payment-modal .imagify-modal-content{width:980px;max-width:100%;min-width:925px;padding:0}.imagify-modal-content.imagify-iframe-viewing{width:980px;height:672px;overflow:hidden}.imagify-iframe-viewing #imagify-payment-process-view{width:980px;height:668px}.imagify-payment-modal .imagify-modal-main{width:70%}.imagify-iframe-viewing .imagify-modal-main{width:auto}.imagify-payment-modal .imagify-modal-content.imagify-success-viewing{min-width:auto;width:450px;min-height:300px}.imagify-success-viewing .imagify-modal-main{width:100%}.imagify-payment-modal .imagify-modal-sidebar{width:30%;padding:15px 20px;background:#1F2332;color:#FFF}.imagify-modal-section{padding:0 25px}.imagify-modal-section.section-gray{margin:0 0 1em;padding:10px 25px 15px;background:#F6F7FB}.imagify-tabs-contents .section-gray{padding:8px 25px 10px}.imagify-modal-section .imagify-modal-title:first-child{margin-top:1em;margin-bottom:1.5em}.imagify-modal-section.section-gray .imagify-modal-title{margin-top:.5em;margin-bottom:.5em}.imagify-modal-title{font-size:1.8em}.imagify-analyzing .imagify-numbers-notcalc,.imagify-modal-section.imagify-analyzing .imagify-loader{display:block}.imagify-modal-section .imagify-loader{margin:2em auto}.imagify-border-styled{width:200px;margin:0 auto;color:#8BC34A;font-weight:700;font-size:.925em}.imagify-big-number,.imagify-payment-modal strong{font-weight:700;color:#4A4A4A}.imagify-big-number{font-size:3.7em;margin:-3px 0;line-height:1}.imagify-border-styled:after,.imagify-border-styled:before{content:"";height:1px;background:rgba(0,0,0,.1);-ms-flex-preferred-size:40px;flex-basis:40px}.imagify-border-styled:before{margin-right:5px}.imagify-border-styled:after{margin-left:5px}.imagify-col{-ms-flex-preferred-size:50%;flex-basis:50%}.imagify-modal .imagify-cols{padding:0 20px}.imagify-payment-modal .imagify-iconed{margin:1.5em 5em 1.5em 0}.imagify-iconed{position:relative;text-align:left;padding-left:42px;margin-right:15px;font-weight:500}.imagify-iconed .dashicons,.imagify-iconed .icon{position:absolute;font-size:2em;left:0;top:2px;color:#40B1D0}.imagify-payment-modal .close-btn{top:10px;right:10px;width:24px;height:24px;padding:2px 0 0 4.5px;color:#FFF;background:#40B1D0;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-payment-modal .close-btn i{margin-left:-3.5px;margin-top:-.5px}.imagify-payment-modal .close-btn:hover{background:#F6F7FB}.imagify-offer-line{margin-top:1.5em}.imagify-offer-line+.imagify-offer-line{margin-top:.75em}.imagify-offer-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 0 0 15px;border-radius:4px 4px 0 0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-header.imagify-offer-header.imagify-offer-header .imagify-inline-options label:last-child{border-radius:0 4px 0 0}.imagify-offer-header .imagify-inline-options{width:auto}.imagify-offer-title{font-weight:700;margin:0}.imagify-offer-header,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#E5EBEF}.imagify-offer-onetime .imagify-offer-header{padding-top:8px;padding-bottom:8px}.imagify-offer-onetimes>div{padding-top:15px;padding-bottom:15px}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;padding:7px 30px;font-size:1em;letter-spacing:.05em;color:inherit;-webkit-box-shadow:0 0 0;box-shadow:0 0 0;border-radius:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#F6F7FB}.imagify-2-free{position:absolute;bottom:100%;left:0;right:0;padding:2px 10px;margin-bottom:8px;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#FFF;background:#10121A;border-radius:2px}.imagify-2-free:after{content:"";position:absolute;left:50%;bottom:-3px;margin-left:-3px;border-top:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent}.imagify-2-free.imagify-b-right{bottom:auto;left:100%;right:-100%;margin-bottom:0;margin-left:8px}.imagify-2-free.imagify-b-right:after{left:-3px;bottom:auto;top:50%;margin-top:-3px;margin-left:0;border-right:3px solid #10121A;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:0}.imagify-2-free.imagify-b-bottom{bottom:-100%;left:0;right:0;margin-top:8px}.imagify-2-free.imagify-b-bottom:after{top:-3px;bottom:auto;border-bottom:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent;border-top:0}.imagify-offer-content{text-align:left;background:#F6F7FB;border-radius:0 0 4px 4px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-onetime .imagify-offer-content{padding:10px 0}div.imagify-col-checkbox{position:relative;width:25.5%;padding-top:10px;padding-bottom:7px}.imagify-col-checkbox label{display:block;padding-left:55px!important}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked){position:absolute;top:50%;left:6px;margin:-8px 0 0}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{margin:0;top:-2px;left:6px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-by,.imagify-offer-size{-webkit-transition:all .275s;-o-transition:all .275s}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:1px;left:13px}.imagify-offer-size{font-size:30px;color:#2E3243;font-weight:700;transition:all .275s}.imagify-offer-by{font-size:10px;transition:all .275s}.imagify-approx{display:none;font-size:11px;line-height:1.2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}div.imagify-col-price{width:35%}.imagify-flex-table .imagify-price-block{padding-left:0;padding-right:0}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block{padding-top:0}.imagify-flex-table .imagify-price-complement{padding-right:0;font-size:10px;font-weight:700}.imagify-price-block,.imagify-price-discount{white-space:nowrap}.imagify-price-block span,.imagify-price-discount span{display:inline-block;vertical-align:middle}.imagify-price-discount.imagify-price-discount{position:relative;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding-top:15px;font-weight:700;width:70px}.imagify-price-discount:before{content:"";position:absolute;top:25px;width:62%;height:2px;background:#2E3243;-webkit-transform:rotate(-15deg);-ms-transform:rotate(-15deg);transform:rotate(-15deg)}.imagify-offer-onetimes .imagify-price-discount:before{width:100%}.imagify-price-discount-dollar{color:#2E3243}.imagify-price-discount-number{color:#8BA6B4}.imagify-offer-selected .imagify-price-discount-number{color:#FFF}span.imagify-dollars{color:#1F2332;font-size:18px;font-weight:700;vertical-align:-2px}.imagify-offer-onetime .imagify-col-price{padding-top:0}.imagify-offer-onetime .imagify-dollars{vertical-align:-1px}.imagify-price-big,.imagify-price-mini{color:#40B1D0;font-weight:700}.imagify-price-big{font-size:36px}span.imagify-price-mini{font-size:18px;vertical-align:2px}span.imagify-price-by{font-size:10px;color:#1F2332;vertical-align:-13px;text-indent:-27px}.imagify-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.imagify-offer-selected,.imagify-offer-selected .imagify-col-other-actions a,.imagify-offer-selected .imagify-offer-size,.imagify-offer-selected .imagify-offer-title,.imagify-offer-selected .imagify-price-big,.imagify-offer-selected .imagify-price-complement,.imagify-offer-selected .imagify-price-mini{color:#FFF}.imagify-offer-selected .imagify-offer-header,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#338EA6}.imagify-offer-selected .imagify-offer-content,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#40B1D0}.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{border-color:#FFF;background:#40B1D0}.imagify-offer-selected .imagify-offer-by{color:#2E3243}.imagify-enough-free .imagify-not-enough-title,.imagify-enough-title{display:none}.imagify-enough-free .imagify-enough-title{display:block}.imagify-submit-line{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:2em 0;text-align:left}.imagify-coupon-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section p{margin:0;line-height:1.3}.imagify-coupon-text{width:200px;max-width:100%;padding-right:15px}.imagify-coupon-loader{display:none}.imagify-coupon-text.checking{text-align:right}.imagify-coupon-text.checking .imagify-coupon-loader{display:inline}.imagify-coupon-text.checking label{display:none}.imagify-coupon-input{position:relative}.imagify-coupon-input input{position:relative;z-index:1}[id=imagify-coupon-validate].button-secondary{position:absolute;top:1px;right:3px;bottom:2px;-webkit-box-shadow:none;box-shadow:none;padding:4px 10px;z-index:0;-webkit-transition:-webkit-transform .275s;-o-transition:transform .275s;transition:transform .275s;transition:transform .275s,-webkit-transform .275s}.imagify-canbe-validate [id=imagify-coupon-validate]{-webkit-transform:translateX(45px);-ms-transform:translateX(45px);transform:translateX(45px)}.imagify-modal-section+.imagify-modal-promotion{margin-top:-1em}.imagify-modal-promotion{position:relative;overflow:hidden;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 25px;background:#604D90;text-shadow:0 0 3px rgba(0,0,0,.3)}.imagify-modal-promotion.active{display:-webkit-box;display:-ms-flexbox;display:flex}[id=imagify-pricing-tab-onetime] .imagify-modal-promotion{margin-bottom:4em}.imagify-modal-promotion:before{content:"\f488";position:absolute;top:28px;left:8%;font-family:dashicons;font-size:90px;color:#8476A9;text-shadow:none}.imagify-modal-promotion p{position:relative;margin:.2em 0;color:#FFF}.imagify-promo-title{-ms-flex-preferred-size:100%;flex-basis:100%;text-transform:uppercase;font-size:20px;font-weight:700;letter-spacing:.125em}.imagify-until-date{-ms-flex-preferred-size:200px;flex-basis:200px;text-align:right}.imagify-until-date strong{color:#FFF}.imagify-submit-line button{font-size:16px}input.imagify-coupon-code{padding:10px;border:2px solid #7A8996;font-size:.875em;font-weight:700;border-radius:3px}.validated.imagify-coupon-section .imagify-coupon-text,.validated.imagify-coupon-section strong{color:#8BC34A}.validated.imagify-coupon-section .imagify-coupon-code{color:#8BC34A;border-color:#8BC34A}.invalid.imagify-coupon-section .imagify-coupon-text,.invalid.imagify-coupon-section strong{color:#d0021b}.invalid.imagify-coupon-section .imagify-coupon-code{color:#d0021b;border-color:#d0021b}.imagify-footer-lines{width:500px;max-width:100%;margin:2em auto 2.5em;font-size:.85em;line-height:1.5}.imagify-year-selected .imagify-switch-my .imagify-yearly{display:block}.imagify-month-selected .imagify-switch-my .imagify-yearly,.imagify-year-selected .imagify-switch-my .imagify-monthly{display:none}.imagify-month-selected .imagify-switch-my .imagify-monthly{display:block}.imagify-flex-table{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:7px 15px}div.imagify-col-details{width:22%;padding-left:25px}.imagify-col-details p{margin:0}.imagify-pricing-table{margin:0 20px}.imagify-pricing-table .imagify-offer-line{padding:.6em 0;border:2px solid #E8EEF0;text-align:left;border-radius:3px}.imagify-pricing-table .imagify-offer-line:first-child{margin-top:.75em}.imagify-pricing-table .imagify-offer-line.imagify-offer-selected:first-child{margin-top:1.75em}.imagify-pricing-table .imagify-offer-line+.imagify-offer-line{margin-top:-2px}.imagify-pricing-table .imagify-col-other-actions{width:20.5%}.imagify-pricing-table .imagify-approx{margin-left:0;line-height:.5;margin-bottom:1em}.imagify-pricing-table .imagify-offer-selected{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03);background:#40B1D0;border-width:0}.imagify-pricing-table .imagify-offer-selected .imagify-approx{color:#FFF}.imagify-pricing-table .imagify-button-secondary{padding:3px 20px;-webkit-box-shadow:none;box-shadow:none;text-transform:uppercase;font-size:12px;letter-spacing:.025em}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary{border:2px solid #FFF;background:#40B1D0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:focus,.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:hover{background:#FFF;color:#40B1D0}.imagify-col .imagify-special-needs{margin-left:25px}.imagify-special-needs strong{font-size:25px;font-weight:700;color:#40B1D0}.imagify-special-needs span{display:block;font-size:12px;margin-top:-.5em}div.imagify-col-price{position:relative}.imagify-recommend{display:none;position:absolute;left:-20px;bottom:100%;padding:0;margin-bottom:8px;color:#1F2332;font-weight:700;font-style:italic}.imagify-offer-selected .imagify-recommend,.imagify-tab-content.imagify-current{display:block}[class*=imagify-onetime-] .imagify-recommend{left:65px;margin-bottom:20px}.imagify-recommend:before{content:"";position:absolute;top:7px;left:-35px;width:29px;height:30px;background:url(../images/icon-arrow-choice.png) 0 no-repeat;background-size:contain}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.imagify-recommend:before{background-image:url(../images/icon-arrow-choice.svg)}}.imagify-offer-line[class*=imagify-onetime-]{padding:0;margin:.3em 0 0}.imagify-offer-line.imagify-offer-line[class*=imagify-onetime-]:first-child{margin-top:2em}.imagify-offer-line[class*=imagify-onetime-]+.imagify-offer-line{margin-top:.5em}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-]{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);border-width:2px}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{position:relative;overflow:hidden;width:21%;background:#1F2332;color:#FFF}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{background:#338EA6}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details:before{content:"";position:absolute;bottom:0;right:25px;width:75px;height:54px;background:url(../images/icon-pack.png)}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-other-actions{width:30%}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx,.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{color:#FFF}.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{font-size:24px}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx{font-size:12px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-block{padding-left:10px}.imagify-offer-line[class*=imagify-onetime-] .imagify-dollars{vertical-align:middle}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-big{vertical-align:-5px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-mini{vertical-align:7px}.imagify-tabs{margin-bottom:0;list-style:none;background:#E5EBEF}.imagify-modal-content .imagify-tabs{margin:1em 0 0}.imagify-tab{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:50%;margin:0;font-size:23px}.imagify-tab a{display:block;padding:15px 10px;color:inherit;text-decoration:none}.imagify-tab a:focus{-webkit-box-shadow:none;box-shadow:none;outline:0;color:#40B1D8}.imagify-tab.imagify-current a{background:#F6F7FB}.imagify-tab-content{display:none}.imagify-tab-content .imagify-modal-section:first-child{margin-top:0}.imagify-modal-sidebar-content,.imagify-payment-modal .imagify-modal-sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-modal-sidebar-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}p.imagify-modal-sidebar-title{margin-top:5px;padding-right:40px;font-size:18px;color:#FFF}.imagify-modal-testimony{margin-top:1em}.imagify-modal-testimony+.imagify-modal-testimony{margin-top:2em}@media (max-height:620px){.imagify-modal-testimony+.imagify-modal-testimony{display:none}}.imagify-modal-testimony-person{display:table;width:100%}.imagify-modal-testimony-person>*{display:table-cell;vertical-align:middle}.imagify-modal-avatar{width:114px;line-height:0}.imagify-modal-avatar img{border:2px solid #FFF;border-radius:50%;width:96px;height:96px}.imagify-modal-identity a{text-decoration:none;font-weight:700}.imagify-modal-identity a:first-child{font-size:13px}.imagify-modal-identity a:first-child+a{display:block;font-size:10px;color:#7A8996}.imagify-modal-testimony-content p{font-size:13px;font-style:italic;line-height:1.7;color:#7A8996}.imagify-modal-sidebar-trust{margin-top:auto;padding-top:1.5em}.imagify-modal-sidebar-trust p{margin:0;font-weight:700;font-size:12px;line-height:1.7}.imagify-modal-sidebar-trust p img{margin-right:3px;vertical-align:-2px}.imagify-modal-sidebar-trust p+p{font-size:11px}.imagify-cart{text-align:left}.imagify-cart .imagify-cart-list{border-top:1px solid rgba(122,137,150,.2);border-bottom:1px solid rgba(122,137,150,.2)}.imagify-cart .imagify-cart-label{margin-bottom:.5em;font-size:10px;color:#2E3243}.imagify-cart-list p{margin:0;font-weight:700}.imagify-cart-item{margin:.4em 0}.imagify-cart .imagify-cart-suggestion{margin-top:-.3em}.imagify-cart-suggestion a,.imagify-cl-description p{font-size:10px}.imagify-remove-from-cart{border:0;padding:0;width:14px;height:14px;line-height:13px;border-radius:50%;background:#40B1D0;cursor:pointer;-webkit-transition:background .3s;-o-transition:background .3s;transition:background .3s}.imagify-remove-from-cart i:before{position:relative;top:-6px;left:-3px;font-size:13px;color:#FFF}.imagify-remove-from-cart:focus,.imagify-remove-from-cart:hover{background:#D0021B}.imagify-cart .imagify-cl-remove{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:45px}.imagify-cart .imagify-cl-name{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:200px}.imagify-cart .imagify-cl-description{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding-top:10px}.imagify-cart .imagify-cl-price{text-align:right}#imagify-payment-iframe{width:980px;height:672px;background:url(../images/loader-balls.svg) 50% 50% no-repeat #f6f7fb}.imagify-success-view{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.imagify-success-view p{font-weight:700;font-size:16px}.imagify-cart-emptied-item{margin:.3em auto;padding:6px 20px;background:#E6EBEF;border-radius:20px}.imagify-cart-emptied-item.imagify-cart-emptied-item p{font-weight:700}.imagify-cart-emptied-item a{color:#40b1d0;float:right;font-weight:700}
\ No newline at end of file
+.imagify-cell,.imagify-cell.va-top,.va-top .imagify-cell{vertical-align:top}#imagify-overview-chart-legend,.imagify-oh,body.imagify-modal-is-open{overflow:hidden}.imagify-start{float:left}.imagify-end{float:right}.imagify-txt-start.imagify-txt-start.imagify-txt-start{text-align:left}.imagify-txt-center.imagify-txt-center.imagify-txt-center{text-align:center}.imagify-txt-end.imagify-txt-end.imagify-txt-end{text-align:right}.imagify-mt1.imagify-mt1{margin-top:1em}.imagify-mb1.imagify-mb1{margin-bottom:1em}.imagify-mr1.imagify-mr1{margin-right:1em}.imagify-ml2.imagify-ml2{margin-left:2em}.imagify-mr2.imagify-mr2{margin-right:2em}.imagify-pl0.imagify-pl0.imagify-pl0{padding-left:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after{content:"";display:table;clear:both}.imagify-count.imagify-count{counter-reset:num}.imagify-count .imagify-count-title{font-weight:700}.imagify-default-settings{color:#73818c;font-weight:400}.imagify-count .imagify-count-title:before{counter-increment:num 1;content:counter(num) ". "}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px}.imagify-bulk-submit .imagify-cell{padding-top:0}.imagify-plugins-error{overflow:hidden;padding-left:20px;list-style-type:disc}.imagify-plugins-error li{width:300px;line-height:30px}@media (max-width:570px){.imagify-plugins-error li{width:auto}}.imagify-notice-dismiss.notice-dismiss{text-decoration:none}.imagify-spinner{display:inline-block;width:20px;height:20px;margin-right:5px;vertical-align:middle;background:url(../images/spinner.gif) 0 0/20px 20px no-repeat rgba(0,0,0,0);opacity:.7}.spinner.imagify-hidden{width:0;margin:4px 0 0}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-sweet-alert button{margin-top:17px!important;height:45px!important;letter-spacing:3px;text-transform:uppercase!important;border-radius:3px!important;background-color:#40b1d0!important;-webkit-box-shadow:0 3px 0 #338ea6!important;box-shadow:0 3px 0 #338ea6!important}.imagify-sweet-alert button.loading{border-radius:100%!important;height:40px!important;padding:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-sweet-alert button.swal2-cancel{background:#777!important;-webkit-box-shadow:0 3px 0 #444!important;box-shadow:0 3px 0 #444!important}.imagify-sweet-alert-signup .sa-confirm-button-container{width:40%}.imagify-sweet-alert-signup button{width:100%;padding:0!important}.imagify-sweet-alert .la-ball-fall,.imagify-sweet-alert .sa-input-error:after,.imagify-sweet-alert .sa-input-error:before{top:25%!important}#wpwrap{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.stop-scrolling #wpwrap{-webkit-filter:blur(2px);filter:blur(2px)}.stop-scrolling #wpwrap #wpadminbar{top:-32px}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary{color:#8cc152}#imagify-check-api-container{font-weight:700}#imagify-check-api-container .dashicons{font-size:25px}#imagify-check-api-container .dashicons-no:before{color:#f06e57;vertical-align:-1px}#imagify-check-api-container .dashicons-yes:before{color:#8BC34A;vertical-align:-1px}.imagify-valid{color:#8BC34A}.imagify-chart{width:33.33%;position:relative}.imagify-doughnut-legend{margin-top:38px;list-style:none}.imagify-doughnut-legend li{display:block;padding-left:30px;position:relative;margin-bottom:15px;border-radius:5px;padding:3px 8px 2px 31px;font-size:14px;font-weight:600;cursor:default;-webkit-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.imagify-doughnut-legend li span{display:block;position:absolute;left:0;top:0;width:25px;height:25px;border-radius:50%}.button-text,.imagify-bulk-info p{display:inline-block}.imagify-chart{float:left;margin-bottom:20px}td .imagify-chart{float:none;margin-bottom:0;top:4px}.imagify-chart-container{position:relative;width:180px;float:left;margin-right:20px}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;font-weight:700;text-align:center}.imagify-total-percent{color:#46b1ce}td .imagify-chart-container{width:18px;height:18px;float:none;margin-right:10px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-14px;text-align:center;font-size:55px;font-weight:700;color:#46B1CE}.imagify-chart-percent span{font-size:20px;vertical-align:super}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.media_page_imagify-bulk-optimization .media-item,body[class*="_imagify-ngg-bulk-optimization"] .media-item{margin:0}.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{float:none;width:100%;margin:0;background:#1F2331;-webkit-box-shadow:0;box-shadow:0;border-radius:0}.media_page_imagify-bulk-optimization .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent{width:auto;padding:0 5px;line-height:1.85;font-size:12px}.media_page_imagify-bulk-optimization .media-item .percent,.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{text-align:right}.media_page_imagify-bulk-optimization .media-item .progress .bar,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar{width:1px;height:22px;margin-top:0;background:#46B1CE;border-radius:0;overflow:visible;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .button,.imagify-settings a,.imagify-settings input,.imagify-welcome .button,.imagify-welcome a,.imagify-weolcome input{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-settings a{color:#40b1d0}.imagify-options-title{padding-bottom:.5em;border-bottom:3px solid #F2F2F2;font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:#40b1d0}.imagify-settings,.imagify-settings p,.imagify-settings th{color:#5F758E}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.button .dashicons,.button-text,.imagify-button-primary.imagify-button-primary .dashicons,.imagify-button-secondary.imagify-button-secondary .dashicons,.imagify-button.imagify-button .dashicons,.imagify-notice .button .dashicons,.imagify-settings .button .dashicons,.imagify-welcome .button .dashicons{vertical-align:middle}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-button-primary.imagify-button-primary,.imagify-button-secondary.imagify-button-secondary,.imagify-button.imagify-button,.imagify-notice .button,.imagify-settings .button,.imagify-welcome .button{height:auto;padding:8px 20px;border:0;font-size:14px;font-weight:600;-webkit-box-shadow:0 3px 0 rgba(0,0,0,.15);box-shadow:0 3px 0 rgba(0,0,0,.15);border-radius:3px;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.button-primary.button-mini{padding:2px 10px}.imagify-settings .button.button-mini-flat{padding:3px 6px 5px;font-size:12px;-webkit-box-shadow:none!important;box-shadow:none!important;line-height:1.2}.imagify-settings .button.button-mini-flat:focus,.imagify-settings .button.button-mini-flat:hover{-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-button-ghost.imagify-button-ghost,.imagify-title .button-ghost.button-ghost{padding:2px 9px;border:1px solid #40B1D0;font-size:12px;font-weight:400;color:#40B1D0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover,.imagify-title .button-ghost.button-ghost:focus,.imagify-title .button-ghost.button-ghost:hover{border-color:transparent;color:#000;background:#40B1D0}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover{color:#FFF}.imagify-button-medium.imagify-button-medium{text-transform:uppercase;letter-spacing:.1em;padding:3px 10px;font-weight:700}.imagify-button-medium.imagify-button-ghost{border-width:2px}.button .dashicons{margin-right:5px}.imagify-button-primary.imagify-button-primary,.imagify-settings .button-primary.button-primary,.imagify-welcome .button-primary.button-primary{background:#40B1D0;color:#FFF;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1);text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799!important}.imagify-button-secondary.imagify-button-secondary{background:#8BC34A;color:#FFF;-webkit-box-shadow:0 3px 0 #6F9C3B;box-shadow:0 3px 0 #6F9C3B;text-shadow:0 -1px 1px #6F9C3B,1px 0 1px #6F9C3B,0 1px 1px #6F9C3B!important}.imagify-button-primary.imagify-button-primary:focus,.imagify-button-primary.imagify-button-primary:hover,.imagify-settings .button-primary:focus,.imagify-settings .button-primary:hover,.imagify-welcome .button-primary:focus,.imagify-welcome .button-primary:hover{background:#338ea6;-webkit-box-shadow:0 3px 0 #1f7a92;box-shadow:0 3px 0 #1f7a92}.imagify-button-secondary.imagify-button-secondary:focus,.imagify-button-secondary.imagify-button-secondary:hover{background:#6F9C3B;color:#FFF}.imagify-button-light.imagify-button-light{background:#FFF;color:#4a4a4a;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.2);box-shadow:0 2px 0 rgba(0,0,0,.2)}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#FFF;background:rgba(0,0,0,.2)}.imagify-section-positive .imagify-button-light{color:#709A41}.imagify-button.imagify-button-big{font-size:15px;padding:11px 30px}.imagify-button-big .dashicons{font-size:1.45em;margin-right:6px;margin-left:-4px}.imagify-info,.imagify-logo{vertical-align:top}#imagify-bulk-action{padding:11px 20px}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{float:left;padding:0 10px 1px;margin:0 5px 2px 0;font-size:13px;line-height:26px;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1)}.imagify-settings input[type=text]{color:#4A4A4A;font-weight:600;-webkit-box-shadow:none;box-shadow:none}.imagify-settings div.submit.submit{padding-left:235px;padding-top:40px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}@media (max-width:850px){.imagify-settings div.submit{padding-left:0}.imagify-settings p.submit{text-align:center}}.imagify-title.imagify-title{position:relative;padding:30px 50px;font-size:23px;background:#2E3243;color:#FFF}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #D9D9D9;padding-top:15px;padding-bottom:15px}.imagify-section,.imagify-settings div.submit,.imagify-sub-header,.imagify-sub-title.imagify-sub-title{margin:0;padding:20px;background:#F2F5F7}.imagify-section-positive,.imagify-sub-title.imagify-sub-title{padding-left:40px}.imagify-section-positive{background:#8cc152;color:#FFF}.imagify-section-positive p{color:#FFF}.imagify-section-gray{background:#D9E4EB}.imagify-section-gray .imagify-count-title{color:#4a4a4a}.imagify-section p:first-child{margin-top:0}.imagify-section p:last-child{margin-bottom:0}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-bulk-info{margin:1em 1em 1em 5px;-webkit-transition:margin .3s;-o-transition:margin .3s;transition:margin .3s}@media (max-width:850px){.imagify-bulk-info{margin:1em}}.imagify-bulk-info p{text-align:left;width:400px;max-width:100%;font-weight:700}@media (min-width:1500px){.imagify-settings div.submit{display:table;width:100%}.imagify-settings div.submit>*{display:table-cell;vertical-align:middle}.imagify-bulk-info{padding:0 25px;text-align:right}}.imagify-settings div.submit{margin-top:2em;padding:20px 0}.imagify-notice .imagify-rate-us .stars,.imagify-sub-header .form-table{margin:0}.imagify-sub-header th{text-align:right}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}[for=api_key]{padding-top:5px}.imagify-notice .imagify-rate-us.imagify-rate-us{position:relative;bottom:0;right:0;text-align:left}.imagify-rate-us.imagify-rate-us{position:absolute;bottom:50%;right:20px;text-align:right;margin-bottom:-2.4em;color:#FFF}.imagify-rate-us a{color:#40B1D0}.imagify-rate-us .stars{display:inline-block;margin:2px 0 0 10px;text-decoration:none;letter-spacing:.2em;vertical-align:-1px}.imagify-rate-us .stars .dashicons:before{font-size:18px}.imagify-rate-us a:focus,.imagify-rate-us a:hover{color:#FEE102}@media (max-width:1220px){.imagify-rate-us.imagify-rate-us{position:static;margin-bottom:0;text-align:left}.imagify-rate-us.imagify-rate-us br{display:none}.imagify-rate-us .stars{display:block;margin-left:0}}.imagify-rkt-notice.imagify-rkt-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:10px 45px 10px 0;border:0;-webkit-box-shadow:none;box-shadow:none;color:#FFF;background:#412355}.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:2px;margin-right:20px}@media (max-width:782px){.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:0;margin-right:12px}}.imagify-rkt-notice .imagify-cross{position:absolute;right:8px;top:50%;width:22px;height:22px;padding:0;margin-top:-11px;background:0 0;color:#FD7300;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross .dashicons{position:relative;top:2px;left:1px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross:hover{background:#FFF}.imagify-rkt-notice .imagify-cross:hover .dashicons{color:#412355}.imagify-rkt-notice .imagify-rkt-coupon,.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo{-ms-flex-negative:0;flex-shrink:0}.imagify-rkt-notice .imagify-rkt-logo{width:150px!important;text-align:center;padding:0 25px 0 30px;line-height:.8}.imagify-rkt-notice .imagify-rkt-msg{width:100%!important;padding:0 15px;font-size:14px;line-height:1.6}.imagify-rkt-notice .imagify-rkt-coupon{width:150px!important;padding:0 15px}.imagify-rkt-notice .imagify-rkt-coupon-code{padding:5px 10px;font-size:23px;font-weight:700;border:1px dashed #F7A933;color:#F7A933}.imagify-rkt-notice .imagify-rkt-cta{width:250px!important;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:200px;flex-basis:200px}.imagify-rkt-notice .button.button{position:relative;top:-1px;height:auto;font-weight:600;font-size:14px;-webkit-box-shadow:0 4px 0 #B27A27;box-shadow:0 4px 0 #B27A27;border:0;padding:9px 18px;background:#F7A933;text-shadow:1px 1px 1px rgba(0,0,0,.2)}@media (max-width:880px){.imagify-rkt-notice{-ms-flex-wrap:wrap;flex-wrap:wrap}.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo,.imagify-rkt-notice .imagify-rkt-msg{text-align:left;padding:5px 15px}.imagify-cross.imagify-cross{top:8px;margin-top:0}.imagify-rkt-notice .imagify-cross .dashicons{top:1px}}.imagify-settings-section{padding:10px 20px}.imagify-welcome .imagify-settings-section,[id=imagify-settings]{border:1px solid #D9D9D9;border-top:0 none;background:#FFF}.imagify-br{line-height:2}.imagify-important{color:#F5A623}.imagify-info,.imagify-info a{color:#40B1D0;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:-1px}.imagify-visual-label,label+.imagify-info,label+.imagify-options-line{display:inline-block;max-width:70%;margin-left:15px;margin-top:2px!important;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.imagify-visual-label{vertical-align:-5px}label[for=imagify_sizes_full]+.imagify-info{vertical-align:middle}.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label+.imagify-options-line{opacity:.5}.imagify-settings.imagify-settings [type=checkbox]:checked+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:checked+label+.imagify-options-line{opacity:1}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-checkbox.imagify-checkbox:checked,.imagify-checkbox.imagify-checkbox:not(:checked),.imagify-settings.imagify-settings [type=checkbox]:checked,.imagify-settings.imagify-settings [type=checkbox]:not(:checked){opacity:.01}.imagify-checkbox.imagify-checkbox:checked:focus,.imagify-checkbox.imagify-checkbox:not(:checked):focus,.imagify-settings.imagify-settings [type=checkbox]:checked:focus,.imagify-settings.imagify-settings [type=checkbox]:not(:checked):focus{-webkit-box-shadow:none!important;box-shadow:none!important;outline:0!important;border:0!important}.imagify-checkbox.imagify-checkbox:checked+label,.imagify-checkbox.imagify-checkbox:not(:checked)+label,.imagify-settings [type=checkbox]:checked+label,.imagify-settings [type=checkbox]:not(:checked)+label{position:relative;padding-left:6px;cursor:pointer;vertical-align:top}.imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-checkbox.imagify-checkbox:not(:checked)+label:before,.imagify-settings [type=checkbox]:checked+label:before,.imagify-settings [type=checkbox]:not(:checked)+label:before{content:'';position:absolute;left:0;top:0;width:28px;height:28px;margin:0 0 0 -24px;border:2px solid #8BA6B4;background:#FFF;border-radius:4px}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:checked+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{content:"✓";position:absolute;font-size:1.4em;top:3px;left:-16px;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.imagify-checkbox.imagify-checkbox[disabled]:checked+label:before,.imagify-checkbox.imagify-checkbox[disabled]:not(:checked)+label:before,.imagify-settings [type=checkbox][disabled]:checked+label:before,.imagify-settings [type=checkbox][disabled]:not(:checked)+label:before{border-color:#ccc;background:#ddd}.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-settings [type=checkbox]:checked+label:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}input[id^=imagify_sizes_]:checked+label{font-weight:700}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:22px;height:22px;border-width:1.5px;border-radius:2px;margin-top:0}.medium.imagify-checkbox:checked+label:after,.medium.imagify-checkbox:not(:checked)+label:after{font-size:1.1em;left:-17px;top:3px}.imagify-settings .mini[type=checkbox]:checked+label:before,.imagify-settings .mini[type=checkbox]:not(:checked)+label:before,.mini.imagify-checkbox:checked+label:before,.mini.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px;border-width:1px;border-radius:2px;margin-top:0}.imagify-settings .mini[type=checkbox]:checked+label:after,.imagify-settings .mini[type=checkbox]:not(:checked)+label:after,.mini.imagify-checkbox:checked+label:after,.mini.imagify-checkbox:not(:checked)+label:after{font-size:.9em;left:-21px;top:1px}.imagify-checkbox.imagify-checkbox:checked:focus+label:before,.imagify-checkbox.imagify-checkbox:not(:checked):focus+label:before,.imagify-settings [type=checkbox]:checked:focus+label:before,.imagify-settings [type=checkbox]:not(:checked):focus+label:before{border-style:dotted;border-color:#40b1d0}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338EA6;border-radius:4px}.imagify-inline-options input[type=radio]:checked,.imagify-inline-options input[type=radio]:not(:checked){position:absolute;left:5px;top:5px;display:none}.imagify-inline-options input[type=radio]:checked+label,.imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;display:table-cell;padding:13px 10px;text-align:center;font-weight:600;font-size:16px;text-transform:uppercase;letter-spacing:.1em;color:#FFF;background:#2E3243;border-left:1px solid rgba(255,255,255,.2);-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-small-options input[type=radio]:checked+label,.imagify-small-options input[type=radio]:not(:checked)+label{padding:8px 10px;font-size:13px;color:#FFF;-webkit-box-shadow:none;box-shadow:none;border-left:0}.imagify-bulk-submit .imagify-inline-options input[type=radio]:checked+label,.imagify-bulk-submit .imagify-inline-options input[type=radio]:not(:checked)+label{margin-bottom:1.75em}.imagify-inline-options input[type=radio]:checked+label:first-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:first-of-type{border-radius:3px 0 0 3px}.imagify-inline-options input[type=radio]:checked+label:last-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:last-of-type{border-radius:0 3px 3px 0}.imagify-inline-options input[type=radio]:checked+label{background:#8BC34A}.imagify-small-options input[type=radio]:not(:checked)+label{background:#338EA6;color:rgba(255,255,255,.4)}.imagify-small-options input[type=radio]:checked+label{background:#40B1D0}.imagify-inline-options .imagify-info{margin-top:15px}.imagify-btn-info{display:block;font-size:.7em;letter-spacing:0;line-height:1;text-transform:none}.imagify-datas-more-action a,a.btn-rocket{text-transform:uppercase;text-decoration:none}#describe-resize-larger input{width:5em}.imagify-cols:after{content:"";display:table;clear:both}.imagify-col{float:left;width:50%}.imagify-main{float:left;width:70%}.imagify-sidebar{float:right;width:28%;max-width:300px}.imagify-sidebar-section{border:1px solid #BBB;background:#FFF}.imagify-sidebar-section+.imagify-sidebar-section{margin-top:2em}@media (max-width:820px){.imagify-main,.imagify-sidebar{float:none;width:auto}.imagify-settings{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-sidebar{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;max-width:none;margin-left:0;margin-top:25px}.wp-media-products{text-align:center}.wp-media-products li{display:inline-block;width:100%;max-width:276px}}@media (min-width:1400px){.imagify-main{width:74%}}.imagify-sidebar-title{display:block;padding:20px 15px;border-bottom:1px solid #BBB;font-size:14px;font-weight:700;color:#23282d;background:#F2F5F7}.imagify-sidebar-title img{vertical-align:top;margin-right:5px}.imagify-sidebar .wp-media-products{margin-top:0;margin-bottom:-.5em}.imagify-sidebar .wp-media-products .links{display:block;padding:85px 25px 24px;text-align:center;background-color:#2E3243;background-size:contain;background-repeat:no-repeat;background-position:50% 0;text-decoration:none}.imagify-sidebar .wp-media-products .links p{margin:1.5em auto;color:#FFF}.imagify-sidebar .wp-media-products .wprocket-link{background-image:-o-linear-gradient(top,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-image:linear-gradient(to bottom,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-color:#3B1E4E;background-repeat:repeat-x,no-repeat}.imagify-sidebar-content{padding:10px 20px}.imagify-mark-styled{display:inline-block;padding:1px 2px 1px 4px;line-height:1.3;font-weight:700;background:#F7A933;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);text-shadow:1px 1px 0 rgba(0,0,0,.2)}.imagify-mark-styled span{display:inline-block;-webkit-transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg);transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg)}.imagify-discount-code,a.btn-rocket{display:block;text-shadow:1px 1px 0 rgba(0,0,0,.2);font-weight:700}.imagify-discount-code{margin:.35em 0 .5em;font-size:2em;letter-spacing:.05em;text-align:center}.imagify-big-text{font-size:15px;font-weight:700}.imagify-big-text strong{font-size:20px}a.btn-rocket{font-size:1.15em;padding:12px;background:#F7A933;-webkit-box-shadow:0 3px 0 #D69626;box-shadow:0 3px 0 #D69626;border-radius:3px;color:#FFF}a.btn-rocket:focus,a.btn-rocket:hover{background:#ff8c00;-webkit-box-shadow:0 3px 0 #ff8c00;box-shadow:0 3px 0 #ff8c00}.imagify-welcome{margin:30px 20px 0 0}.imagify-welcome .baseline{display:inline-block;margin:.2em 0 0 2em;font-size:17px}.imagify-welcome .imagify-logo{vertical-align:middle}.imagify-welcome-remove{position:absolute;top:50%;right:15px;margin-top:-8px;color:#FFF;text-decoration:none}.imagify-columns{overflow:hidden;padding:15px 0;counter-reset:cols}.imagify-columns [class^=col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-columns .col-1-3{width:33.333%;padding-left:28px}.imagify-columns .col-2-3{width:66.666%;padding-left:28px}.imagify-columns .col-1-2{width:50%;padding:0 20px}.imagify-columns .col-overview{padding-left:20px}.imagify-columns .col-informations{width:36.6%;padding-right:30px}.imagify-columns .col-statistics{width:30%}@media (max-width:830px){.imagify-columns [class^=col-]{float:none;margin-bottom:1.5em}.imagify-columns .col-1-2,.imagify-columns .col-1-3{width:auto;padding:0 28px;clear:both;padding-top:1em}}.imagify-columns [class^=col-] img{float:left;margin-right:18px}.imagify-col-content{overflow:hidden}.imagify-col-title{margin:0 0 15px;font-size:23px}.counter .imagify-col-title:before{counter-increment:cols;content:counter(cols) ". ";color:#40B1D0}.imagify-col-desc{color:#5F758E;margin-bottom:2em}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0;background:#2E3243;-webkit-box-shadow:none;box-shadow:none;color:#FFF}@media (max-width:782px){.imagify-notice.imagify-notice,.imagify-welcome{margin-right:12px}}@media (max-width:450px){.imagify-notice.imagify-notice{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wrap .imagify-notice{margin:5px 15px 2px;position:relative}.imagify-notice-logo{padding:18px 23px;background:#40B1D0}.updated .imagify-notice-logo{background:#8BC34A}.error .imagify-notice-logo{background:#D0021B}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#FFF}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-notice a{color:#40B1D0}.imagify-notice a:focus,.imagify-notice a:hover{color:#FEE102}.imagify-notice code{background:rgba(0,0,0,.4)}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:235px;margin:0 auto}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555;font-size:10px}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list .big{font-size:12px;color:#40B1D0}.imagify-data-item{overflow:hidden}.imagify-data-item .imagify-chart{display:inline-block;top:1px;width:20px;vertical-align:middle;margin-bottom:0}li.imagify-data-item{clear:both;margin-bottom:2px}ul.imagify-datas-list .imagify-data-item span.data,ul.imagify-datas-list .imagify-data-item strong{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{text-align:left;padding-right:5px}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}.media-sidebar .imagify-datas-list .imagify-data-item .data,.media-sidebar .imagify-datas-list .imagify-data-item strong{width:auto;float:none}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.imagify-datas-more-action.imagify-datas-more-action{margin:.4em auto;background:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(49%,transparent),color-stop(50%,rgba(0,0,0,.075)),color-stop(58%,rgba(0,0,0,.075)),color-stop(58%,transparent),to(transparent));background:-o-linear-gradient(top,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent);background:linear-gradient(to bottom,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent)}.imagify-datas-more-action a{display:inline-block;padding:0 5px;background:#40B1D0;color:#FFF;font-size:9px;font-weight:700;line-height:1.9}.imagify-datas-more-action a.is-open{background:#555}.imagify-datas-more-action a.is-open .dashicons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.imagify-datas-more-action a .dashicons{font-size:14px;vertical-align:middle;line-height:.8}.imagify-datas-more-action .the-text,.imagify-datas-more-action a .dashicons:before{line-height:20px;vertical-align:middle}.imagify-datas-more-action .the-text{display:inline-block;height:20px}ul.imagify-datas-details.imagify-datas-details{margin:.7em auto}.imagify-datas-details strong{color:#40B1D0}.imagify-datas-details .original{color:#555}.imagify-datas-actions-links{overflow:hidden;border-top:2px solid transparent;padding-top:5px;font-size:8px}.imagify-datas-actions-links a{position:relative;display:inline-block;padding-left:17px;text-decoration:none;font-weight:600}.compat-field-imagify .imagify-datas-actions-links{max-width:300px}.misc-pub-imagify .imagify-datas-actions-links{border-top:2px solid #f2f2f2;padding-bottom:5px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{font-size:10px;float:left;width:50%}.media-sidebar .compat-field-imagify .imagify-datas-actions-links a,.submitbox .misc-pub-imagify .imagify-datas-actions-links a{display:block;width:auto;float:none}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.imagify-datas-actions-links a:only-child{float:none;width:auto}.imagify-datas-details.is-open+.imagify-datas-actions-links{border-top-color:rgba(0,0,0,.075)}.imagify-datas-actions-links .dashicons{position:absolute;left:0;top:4px;width:12px;margin-right:2px;font-size:11px}.imagify-title>h1{padding:0}.imagify-title-right{display:table;float:right;margin-top:-10px}.imagify-title-right p{margin:0}.imagify-title-right a{font-weight:700;text-decoration:none}.imagify-title-right>div{display:table-cell;vertical-align:middle}.imagify-title-right .dashicons-arrow-down-alt2{vertical-align:-4px;margin-left:2px}@media (max-width:1200px){.imagify-bulk .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-title-right{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;margin-top:20px}}.imagify-account,.imagify-account-link{padding-right:15px}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.imagify-credit-left{position:relative;min-width:280px;padding-left:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}@media (max-width:630px){.imagify-title-right,.imagify-title-right>div{display:block;width:auto}.imagify-title-right>div{margin-top:10px;max-width:100%}.imagify-credit-left{padding-left:0}}.imagify-meteo-title.imagify-meteo-title{color:#FFF;font-size:17px}.imagify-space-left{display:inline-block;min-height:38px;min-width:245px;vertical-align:middle}.imagify-space-left>p{color:#FFF}#wp-admin-bar-imagify-profile [class^=imagify-bar-],[class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758D;color:#FFF;font-size:10px}.base-transparent{background:0 0}[class^=imagify-bar-].right-outside-number{-webkit-box-sizing:border-box;box-sizing:border-box;padding-right:4.5em}.right-outside-number .imagify-barnb{display:block;margin-right:-4.5em;text-align:right;font-weight:700;line-height:1.5}#wp-admin-bar-imagify-profile .imagify-progress-value,.imagify-progress-value{position:absolute;top:0;right:0;left:0;bottom:0;text-align:center;line-height:13px;font-weight:700}#wp-admin-bar-imagify-profile .imagify-progress,.imagify-progress{height:1.5em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8CC152}.imagify-bar-positive .imagify-barnb{color:#8CC152}.imagify-bar-negative .imagify-progress{background:#73818C}.imagify-bar-negative .imagify-barnb{color:#73818C}.imagify-bar-neutral .imagify-progress{background:#F5A623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#D0021B}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0 13px}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;padding:15px 0 10px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889F}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40B1D0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p,.imagify-list-infos li+li{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost,.btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #FFF;text-align:center;background:0 0;color:#FFF;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:hover,.btn-ghost:focus,.btn-ghost:hover{background:#FFF;color:#888}.imagify-list-infos{max-width:100%;width:415px}.imagify-info-block,.imagify-list-infos li{position:relative;padding:10px;padding-left:42px;background:#D9E4EB;border-radius:4px;line-height:1.6}.imagify-list-infos .imagify-alt.imagify-alt{background:#8BA7B5;color:#FFF;font-weight:700}.imagify-info-block:before,.imagify-list-infos li:before{content:"";position:absolute;left:13px;top:14px;height:16px;width:16px;border:1px solid #46b1ce;border-radius:10px}.imagify-info-block:after,.imagify-list-infos li:after{content:"i";position:absolute;left:20px;top:13px;font-style:italic;color:#46b1ce}.imagify-cell .imagify-info-block{padding-top:0}.imagify-cell .imagify-info-block:after{top:6px}.imagify-cell .imagify-info-block:before{top:7px}.imagify-list-infos .imagify-alt:after,.imagify-list-infos .imagify-alt:before{color:#fff;border-color:#fff}.imagify-sub-title.imagify-sub-title{font-size:23px;background:#FFF;color:#2E3243;border-left:1px solid #D9D9D9;border-right:1px solid #D9D9D9;font-weight:lighter}.imagify-sub-title .icon-bulk{margin-right:10px;vertical-align:middle}.imagify-sub-title .title-text{display:inline-block;line-height:1;vertical-align:middle}.imagify-bulk .imagify-settings-section{border:1px solid #D9D9D9;border-top:0;background:#F2F5F7;color:#4A4A4A}.imagify-bulk .imagify-settings-section h3,.imagify-bulk .imagify-settings-section li,.imagify-bulk .imagify-settings-section p{color:#4A4A4A}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-title .imagify-tooltips{position:absolute;top:100%;left:0}.imagify-tooltips .icon-round{float:left;display:inline-block;width:28px;height:28px;border:1px solid #FFF;margin-right:8px;margin-bottom:8px;font-size:17px;font-style:italic;line-height:29px;font-weight:700;text-align:center;border-radius:50%}.imagify-tooltips .tooltip-content{display:block;position:relative;max-width:250px;padding:7px 15px 8px;background:#2e3242;color:#FFF;font-size:10px;border-radius:3px}.imagify-tooltips.right .tooltip-content{margin-left:12px}.imagify-tooltips.bottom .tooltip-content{margin-top:4px}.imagify-inline-options label .tooltip-content{position:absolute;left:0;right:0;top:100%;text-transform:none;font-size:10px;letter-spacing:0;text-align:center}.imagify-ac-rt-big,.imagistatus{text-transform:uppercase;font-weight:700}.imagify-tooltips .tooltip-content:after{content:"";position:absolute}.imagify-tooltips.right .tooltip-content:after{top:16px;left:-6px;border-right:8px solid #2e3242;border-top:6px solid transparent;border-bottom:6px solid transparent}.imagify-tooltips.bottom .tooltip-content:after{top:-5px;left:50%;margin-left:-3px;border-bottom:6px solid #2e3242;border-left:6px solid transparent;border-right:6px solid transparent}.imagify-space-tooltips .tooltip-content{max-width:280px;margin-top:20px;margin-left:0;padding:5px 15px;font-size:13px;background:#40B1D0;-webkit-box-shadow:0 3px 0 #338EA6;box-shadow:0 3px 0 #338EA6}.imagify-space-tooltips .tooltip-content:after{top:-14px;left:50%;margin-left:-7px;border:0;border-bottom:15px solid #40B1D0;border-left:15px solid transparent;border-right:15px solid transparent}.tooltip-content.tooltip-table{display:table;width:100%}.tooltip-content.tooltip-table>*{display:table-cell;vertical-align:middle}.tooltip-content .cell-icon{width:28px}.tooltip-content .cell-icon .icon{margin-bottom:0}.tooltip-content .cell-text{padding:5px 10px 5px 0;line-height:1.3}.tooltip-content .cell-sep{width:1px;background:rgba(255,255,255,.4)}.tooltip-content .cell-cta{padding-left:10px}.tooltip-content .cell-cta a{display:block;color:#FFF;width:100%;height:100%;white-space:nowrap}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:36px;font-weight:700;line-height:1.1;vertical-align:middle;white-space:nowrap}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px}.imagify-number-you-optimized .text br{display:none}.imagify-number-you-optimized>p{display:table}.imagify-number-you-optimized{padding-bottom:.85em;margin-bottom:1.35em;overflow:hidden;border-bottom:1px solid rgba(0,0,0,.05)}.imagify-bars p{font-weight:700;font-size:12px;margin-bottom:0}.imagify-bars+.imagify-number-you-optimized{border-bottom:0;padding-top:.85em}.imagify-bars+.imagify-number-you-optimized p{color:#46b1ce}.imagify-bulk-table{margin-top:2em;max-height:600px;max-height:60vh;overflow:auto}.imagify-ac-report-text,.imagiuploaded{overflow:hidden}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse;border:1px solid #D3D3D3}.imagify-bulk-table td{padding:8px 15px}.imagify-bulk-table thead th,.imagify-bulk-table thead tr{background:#2E3242}.imagify-bulk-table tfoot th,.imagify-bulk-table tfoot tr{background:#73818C}.imagify-bulk-table thead th{padding:14px 15px;text-align:left;color:#F2F5F7;font-weight:700;font-size:14px}.imagify-bulk-table tfoot td{padding:14px 15px;color:#F9FAFA}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#FFF}.imagify-bulk-table tbody tr:nth-child(odd),.imagify-bulk-table tbody tr:nth-child(odd) td{background:#F2F5F7}.imagify-bulk-table .imagify-row-progress{display:none}.imagify-bulk-table .imagify-row-progress,.imagify-bulk-table .imagify-row-progress td{height:15px;padding:0}.imagify-bulk-table .imagify-no-uploaded-yet td{height:200px;font-size:17px;letter-spacing:.1em;word-spacing:.12em;vertical-align:middle;text-transform:uppercase;font-weight:700;text-align:center;color:#999;background-color:#FFF}.imagify-row-complete{padding:35px 20px;margin-top:2em;background:#8BC34A;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.1)}.imagify-row-complete .imagify-ac-chart{margin-top:3px}.imagify-row-complete p{color:#FFF;margin:0}@-webkit-keyframes congrate{0%{opacity:0;-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);opacity:1}}@keyframes congrate{0%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.imagify-row-complete.done{-webkit-animation:congrate .5s ease-in-out;animation:congrate .5s ease-in-out}.imagify-all-complete{margin:1.5em 0}.imagify-all-complete>div{display:inline-block;vertical-align:middle}.imagify-ac-report{min-width:310px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-size:24px;letter-spacing:.15em;word-spacing:.15em}.imagify-ac-share{text-align:right}.imagify-ac-share-content{display:inline-block;padding:10px 15px;background:rgba(255,255,255,.2)}.imagify-ac-share-content>*{display:inline-block;vertical-align:middle}.imagify-bulk-table .imagify-ac-share-content p{margin-right:5px}.imagify-share-networks,.imagify-share-networks li{margin:0}.imagify-share-networks li{display:inline-block}.imagify-share-networks a{display:inline-block;vertical-align:-7px;margin:0 5px;text-decoration:none;color:#FFF}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagify-cell-thumbnails{max-width:120px}td.imagify-cell-filename{-o-text-overflow:clip;text-overflow:clip;white-space:nowrap;overflow:hidden}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-right:5px;margin-left:-8px;background:url(../images/upload-image.png) no-repeat;background-size:cover}.imagiuploaded img{max-widht:100%;height:auto}.imagistatus{color:#8CA6B3}.status-compressing{color:#46B1CE}.status-error{color:#CE0B24}.status-warning{color:#f5a623}.status-complete{color:#8CC152}.imagify-error{background:#D0021B;color:#FFF}.imagify-settings-section .imagify-error{display:inline-block;padding:7px 10px;margin:10px 0 0 45px;border-radius:3px}.imagify-settings-section .imagify-error code{font-weight:400}.imagify-settings-section .imagify-error.hidden{display:none}#wpadminbar .imagify-warning *,.imagify-warning{background:#f5a623;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.2)}.imagify-bulk-table .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46B1CE;font-weight:700}.imagify-cell-optimized{font-weight:700}.imagify-cell-totaloriginal{text-align:right}.imagify-modal .h2,.imagify-modal .h3{font-weight:400;letter-spacing:.075em;text-align:center}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}.imagify-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.js .imagify-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#1F2332;background-color:rgba(31,35,50,.95);z-index:99999}.imagify-modal-content{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:800px;max-width:95%;max-height:90vw;overflow:auto;padding:20px 25px;margin:1em auto;background:#FFF;-webkit-box-shadow:1px 1px 4px rgba(0,0,0,.7);box-shadow:1px 1px 4px rgba(0,0,0,.7);border-radius:3px}#imagify-visual-comparison .imagify-modal-content,.imagify-visual-comparison .imagify-modal-content{max-width:1400px;background:0 0;padding:5px;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.imagify-modal .h2{margin:.5em 0;color:#8ba6b4;font-size:24px}.imagify-modal .h3{color:#40b1d0;font-size:18px}.text-justify{text-align:justify}.imagify-modal .close-btn{display:none;visibility:hidden;position:absolute;right:20px;top:20px;font-size:1.2em;border:0;background:0 0;border-radius:0;cursor:pointer}.imagify-modal .close-btn i{margin-left:-2px}.imagify-modal .close-btn:focus,.imagify-modal .close-btn:hover{color:#40b1d0}.js .imagify-modal .close-btn{display:block;visibility:visible}.js .imagify-iframe-viewing .close-btn{display:none}#imagify-visual-comparison .close-btn,.imagify-visual-comparison .close-btn{top:50px;right:5px;width:33px;height:33px;padding:1px 0 0 2px;border:1px solid #F2F2F2;color:#F2F2F2;line-height:19px;text-align:center;border-radius:50%}.imagify-visual-comparison .close-btn,.wp_attachment_image #imagify-visual-comparison .close-btn{top:0}.imagify-visual-comparison .imagify-modal-content,.wp_attachment_image #imagify-visual-comparison .imagify-modal-content{padding-top:40px}.imagify-modal .imagify-comparison-title{font-size:28px;margin-bottom:1em;color:#F2F2F2;text-align:left}.imagify-modal .imagify-comparison-title .twentytwenty-duo-buttons{position:static;margin:0 10px 0 15px}.imagify-comparison-title .twentytwenty-duo-buttons button{float:none;padding:6px 12px;font-size:16px;text-transform:none;border:1px solid #40B1D0;color:#889;letter-spacing:0}.imagify-comparison-title .twentytwenty-duo-buttons button:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.imagify-comparison-title .twentytwenty-duo-buttons .selected{border:1px solid #40B1D0;color:#FFF;background:#40B1D0}.imagify-comparison-levels{margin:15px 0;overflow:hidden}.imagify-comparison-levels div{display:none;min-width:175px;font-size:11px}.imagify-comparison-levels .imagify-chart,.imagify-comparison-levels .imagify-chart-container{width:25px;float:none;margin:0}.imagify-visual-comparison .imagify-chart-container canvas{width:15px!important;height:15px!important;margin-right:5px}.imagify-c-level.go-left{float:left}.imagify-c-level.go-right{float:right}.imagify-c-level.go-left,.imagify-c-level.go-right{display:table}.imagify-c-level .imagify-c-level-row{display:table-row;margin:0;color:#FFF}.imagify-c-level-row>span{display:table-cell;padding:2px 0}.imagify-c-level-row .value{text-align:right;padding-left:5px}.imagify-c-level-row .value.level{color:#40b1d0}.imagify-c-level-row .value.size{color:#8bc34a;font-weight:700}.imagify-c-level-row .value .imagify-chart{top:1px}@-webkit-keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-menu-bar-img{margin-top:1em}.imagify-modal .loader{position:absolute;top:50%;left:50%;margin:-32px 0 0 -32px;opacity:0;visibility:hidden;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.imagify-modal .loading .loader{visibility:visible;opacity:1}.imagify-settings .imagify-visual-comparison-text{margin-top:1em;color:#40b1d0;font-weight:700}.imagify-border-styled,.imagify-flex-table,.imagify-modal-cols,.imagify-offer-header,.imagify-payment-modal .imagify-modal-content,.imagify-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.imagify-border-styled,.imagify-modal-cols{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal{text-align:center;color:#7A8996}.imagify-payment-modal *{-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-modal-loader{position:absolute;top:0;left:0;right:0;bottom:0;background:url(../images/loader-balls.svg) center no-repeat #fff;z-index:10}.imagify-payment-modal .imagify-modal-content{width:980px;max-width:100%;min-width:925px;padding:0}.imagify-modal-content.imagify-iframe-viewing{width:980px;height:672px;overflow:hidden}.imagify-iframe-viewing #imagify-payment-process-view{width:980px;height:668px}.imagify-payment-modal .imagify-modal-main{width:70%}.imagify-iframe-viewing .imagify-modal-main{width:auto}.imagify-payment-modal .imagify-modal-content.imagify-success-viewing{min-width:auto;width:450px;min-height:300px}.imagify-success-viewing .imagify-modal-main{width:100%}.imagify-payment-modal .imagify-modal-sidebar{width:30%;padding:15px 20px;background:#1F2332;color:#FFF}.imagify-modal-section{padding:0 25px}.imagify-modal-section.section-gray{margin:0 0 1em;padding:10px 25px 15px;background:#F6F7FB}.imagify-tabs-contents .section-gray{padding:8px 25px 10px}.imagify-modal-section .imagify-modal-title:first-child{margin-top:1em;margin-bottom:1.5em}.imagify-modal-section.section-gray .imagify-modal-title{margin-top:.5em;margin-bottom:.5em}.imagify-modal-title{font-size:1.8em}.imagify-analyzing .imagify-numbers-notcalc,.imagify-modal-section.imagify-analyzing .imagify-loader{display:block}.imagify-modal-section .imagify-loader{margin:2em auto}.imagify-border-styled{width:200px;margin:0 auto;color:#8BC34A;font-weight:700;font-size:.925em}.imagify-big-number,.imagify-payment-modal strong{font-weight:700;color:#4A4A4A}.imagify-big-number{font-size:3.7em;margin:-3px 0;line-height:1}.imagify-border-styled:after,.imagify-border-styled:before{content:"";height:1px;background:rgba(0,0,0,.1);-ms-flex-preferred-size:40px;flex-basis:40px}.imagify-border-styled:before{margin-right:5px}.imagify-border-styled:after{margin-left:5px}.imagify-col{-ms-flex-preferred-size:50%;flex-basis:50%}.imagify-modal .imagify-cols{padding:0 20px}.imagify-payment-modal .imagify-iconed{margin:1.5em 5em 1.5em 0}.imagify-iconed{position:relative;text-align:left;padding-left:42px;margin-right:15px;font-weight:500}.imagify-iconed .dashicons,.imagify-iconed .icon{position:absolute;font-size:2em;left:0;top:2px;color:#40B1D0}.imagify-payment-modal .close-btn{top:10px;right:10px;width:24px;height:24px;padding:2px 0 0 4.5px;color:#FFF;background:#40B1D0;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-payment-modal .close-btn i{margin-left:-3.5px;margin-top:-.5px}.imagify-payment-modal .close-btn:hover{background:#F6F7FB}.imagify-offer-line{margin-top:1.5em}.imagify-offer-line+.imagify-offer-line{margin-top:.75em}.imagify-offer-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 0 0 15px;border-radius:4px 4px 0 0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-header.imagify-offer-header.imagify-offer-header .imagify-inline-options label:last-child{border-radius:0 4px 0 0}.imagify-offer-header .imagify-inline-options{width:auto}.imagify-offer-title{font-weight:700;margin:0}.imagify-offer-header,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#E5EBEF}.imagify-offer-onetime .imagify-offer-header{padding-top:8px;padding-bottom:8px}.imagify-offer-onetimes>div{padding-top:15px;padding-bottom:15px}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;padding:7px 30px;font-size:1em;letter-spacing:.05em;color:inherit;-webkit-box-shadow:0 0 0;box-shadow:0 0 0;border-radius:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#F6F7FB}.imagify-2-free{position:absolute;bottom:100%;left:0;right:0;padding:2px 10px;margin-bottom:8px;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#FFF;background:#10121A;border-radius:2px}.imagify-2-free:after{content:"";position:absolute;left:50%;bottom:-3px;margin-left:-3px;border-top:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent}.imagify-2-free.imagify-b-right{bottom:auto;left:100%;right:-100%;margin-bottom:0;margin-left:8px}.imagify-2-free.imagify-b-right:after{left:-3px;bottom:auto;top:50%;margin-top:-3px;margin-left:0;border-right:3px solid #10121A;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:0}.imagify-2-free.imagify-b-bottom{bottom:-100%;left:0;right:0;margin-top:8px}.imagify-2-free.imagify-b-bottom:after{top:-3px;bottom:auto;border-bottom:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent;border-top:0}.imagify-offer-content{text-align:left;background:#F6F7FB;border-radius:0 0 4px 4px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-onetime .imagify-offer-content{padding:10px 0}div.imagify-col-checkbox{position:relative;width:25.5%;padding-top:10px;padding-bottom:7px}.imagify-col-checkbox label{display:block;padding-left:55px!important}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked){position:absolute;top:50%;left:6px;margin:-8px 0 0}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{margin:0;top:-2px;left:6px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-by,.imagify-offer-size{-webkit-transition:all .275s;-o-transition:all .275s}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:1px;left:13px}.imagify-offer-size{font-size:30px;color:#2E3243;font-weight:700;transition:all .275s}.imagify-offer-by{font-size:10px;transition:all .275s}.imagify-approx{display:none;font-size:11px;line-height:1.2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}div.imagify-col-price{width:35%}.imagify-flex-table .imagify-price-block{padding-left:0;padding-right:0}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block{padding-top:0}.imagify-flex-table .imagify-price-complement{padding-right:0;font-size:10px;font-weight:700}.imagify-price-block,.imagify-price-discount{white-space:nowrap}.imagify-price-block span,.imagify-price-discount span{display:inline-block;vertical-align:middle}.imagify-price-discount.imagify-price-discount{position:relative;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding-top:15px;font-weight:700;width:70px}.imagify-price-discount:before{content:"";position:absolute;top:25px;width:62%;height:2px;background:#2E3243;-webkit-transform:rotate(-15deg);-ms-transform:rotate(-15deg);transform:rotate(-15deg)}.imagify-offer-onetimes .imagify-price-discount:before{width:100%}.imagify-price-discount-dollar{color:#2E3243}.imagify-price-discount-number{color:#8BA6B4}.imagify-offer-selected .imagify-price-discount-number{color:#FFF}span.imagify-dollars{color:#1F2332;font-size:18px;font-weight:700;vertical-align:-2px}.imagify-offer-onetime .imagify-col-price{padding-top:0}.imagify-offer-onetime .imagify-dollars{vertical-align:-1px}.imagify-price-big,.imagify-price-mini{color:#40B1D0;font-weight:700}.imagify-price-big{font-size:36px}span.imagify-price-mini{font-size:18px;vertical-align:2px}span.imagify-price-by{font-size:10px;color:#1F2332;vertical-align:-13px;text-indent:-27px}.imagify-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.imagify-offer-selected,.imagify-offer-selected .imagify-col-other-actions a,.imagify-offer-selected .imagify-offer-size,.imagify-offer-selected .imagify-offer-title,.imagify-offer-selected .imagify-price-big,.imagify-offer-selected .imagify-price-complement,.imagify-offer-selected .imagify-price-mini{color:#FFF}.imagify-offer-selected .imagify-offer-header,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#338EA6}.imagify-offer-selected .imagify-offer-content,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#40B1D0}.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{border-color:#FFF;background:#40B1D0}.imagify-offer-selected .imagify-offer-by{color:#2E3243}.imagify-enough-free .imagify-not-enough-title,.imagify-enough-title{display:none}.imagify-enough-free .imagify-enough-title{display:block}.imagify-submit-line{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:2em 0;text-align:left}.imagify-coupon-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section p{margin:0;line-height:1.3}.imagify-coupon-text{width:200px;max-width:100%;padding-right:15px}.imagify-coupon-loader{display:none}.imagify-coupon-text.checking{text-align:right}.imagify-coupon-text.checking .imagify-coupon-loader{display:inline}.imagify-coupon-text.checking label{display:none}.imagify-coupon-input{position:relative}.imagify-coupon-input input{position:relative;z-index:1}[id=imagify-coupon-validate].button-secondary{position:absolute;top:1px;right:3px;bottom:2px;-webkit-box-shadow:none;box-shadow:none;padding:4px 10px;z-index:0;-webkit-transition:-webkit-transform .275s;-o-transition:transform .275s;transition:transform .275s;transition:transform .275s,-webkit-transform .275s}.imagify-canbe-validate [id=imagify-coupon-validate]{-webkit-transform:translateX(45px);-ms-transform:translateX(45px);transform:translateX(45px)}.imagify-modal-section+.imagify-modal-promotion{margin-top:-1em}.imagify-modal-promotion{position:relative;overflow:hidden;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 25px;background:#604D90;text-shadow:0 0 3px rgba(0,0,0,.3)}.imagify-modal-promotion.active{display:-webkit-box;display:-ms-flexbox;display:flex}[id=imagify-pricing-tab-onetime] .imagify-modal-promotion{margin-bottom:4em}.imagify-modal-promotion:before{content:"\f488";position:absolute;top:28px;left:8%;font-family:dashicons;font-size:90px;color:#8476A9;text-shadow:none}.imagify-modal-promotion p{position:relative;margin:.2em 0;color:#FFF}.imagify-promo-title{-ms-flex-preferred-size:100%;flex-basis:100%;text-transform:uppercase;font-size:20px;font-weight:700;letter-spacing:.125em}.imagify-until-date{-ms-flex-preferred-size:200px;flex-basis:200px;text-align:right}.imagify-until-date strong{color:#FFF}.imagify-submit-line button{font-size:16px}input.imagify-coupon-code{padding:10px;border:2px solid #7A8996;font-size:.875em;font-weight:700;border-radius:3px}.validated.imagify-coupon-section .imagify-coupon-text,.validated.imagify-coupon-section strong{color:#8BC34A}.validated.imagify-coupon-section .imagify-coupon-code{color:#8BC34A;border-color:#8BC34A}.invalid.imagify-coupon-section .imagify-coupon-text,.invalid.imagify-coupon-section strong{color:#d0021b}.invalid.imagify-coupon-section .imagify-coupon-code{color:#d0021b;border-color:#d0021b}.imagify-footer-lines{width:500px;max-width:100%;margin:2em auto 2.5em;font-size:.85em;line-height:1.5}.imagify-year-selected .imagify-switch-my .imagify-yearly{display:block}.imagify-month-selected .imagify-switch-my .imagify-yearly,.imagify-year-selected .imagify-switch-my .imagify-monthly{display:none}.imagify-month-selected .imagify-switch-my .imagify-monthly{display:block}.imagify-flex-table{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:7px 15px}div.imagify-col-details{width:22%;padding-left:25px}.imagify-col-details p{margin:0}.imagify-pricing-table{margin:0 20px}.imagify-pricing-table .imagify-offer-line{padding:.6em 0;border:2px solid #E8EEF0;text-align:left;border-radius:3px}.imagify-pricing-table .imagify-offer-line:first-child{margin-top:.75em}.imagify-pricing-table .imagify-offer-line.imagify-offer-selected:first-child{margin-top:1.75em}.imagify-pricing-table .imagify-offer-line+.imagify-offer-line{margin-top:-2px}.imagify-pricing-table .imagify-col-other-actions{width:20.5%}.imagify-pricing-table .imagify-approx{margin-left:0;line-height:.5;margin-bottom:1em}.imagify-pricing-table .imagify-offer-selected{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03);background:#40B1D0;border-width:0}.imagify-pricing-table .imagify-offer-selected .imagify-approx{color:#FFF}.imagify-pricing-table .imagify-button-secondary{padding:3px 20px;-webkit-box-shadow:none;box-shadow:none;text-transform:uppercase;font-size:12px;letter-spacing:.025em}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary{border:2px solid #FFF;background:#40B1D0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:focus,.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:hover{background:#FFF;color:#40B1D0}.imagify-col .imagify-special-needs{margin-left:25px}.imagify-special-needs strong{font-size:25px;font-weight:700;color:#40B1D0}.imagify-special-needs span{display:block;font-size:12px;margin-top:-.5em}div.imagify-col-price{position:relative}.imagify-recommend{display:none;position:absolute;left:-20px;bottom:100%;padding:0;margin-bottom:8px;color:#1F2332;font-weight:700;font-style:italic}.imagify-offer-selected .imagify-recommend,.imagify-tab-content.imagify-current{display:block}[class*=imagify-onetime-] .imagify-recommend{left:65px;margin-bottom:20px}.imagify-recommend:before{content:"";position:absolute;top:7px;left:-35px;width:29px;height:30px;background:url(../images/icon-arrow-choice.png) 0 no-repeat;background-size:contain}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.imagify-recommend:before{background-image:url(../images/icon-arrow-choice.svg)}}.imagify-offer-line[class*=imagify-onetime-]{padding:0;margin:.3em 0 0}.imagify-offer-line.imagify-offer-line[class*=imagify-onetime-]:first-child{margin-top:2em}.imagify-offer-line[class*=imagify-onetime-]+.imagify-offer-line{margin-top:.5em}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-]{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);border-width:2px}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{position:relative;overflow:hidden;width:21%;background:#1F2332;color:#FFF}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{background:#338EA6}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details:before{content:"";position:absolute;bottom:0;right:25px;width:75px;height:54px;background:url(../images/icon-pack.png)}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-other-actions{width:30%}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx,.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{color:#FFF}.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{font-size:24px}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx{font-size:12px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-block{padding-left:10px}.imagify-offer-line[class*=imagify-onetime-] .imagify-dollars{vertical-align:middle}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-big{vertical-align:-5px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-mini{vertical-align:7px}.imagify-tabs{margin-bottom:0;list-style:none;background:#E5EBEF}.imagify-modal-content .imagify-tabs{margin:1em 0 0}.imagify-tab{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:50%;margin:0;font-size:23px}.imagify-tab a{display:block;padding:15px 10px;color:inherit;text-decoration:none}.imagify-tab a:focus{-webkit-box-shadow:none;box-shadow:none;outline:0;color:#40B1D8}.imagify-tab.imagify-current a{background:#F6F7FB}.imagify-tab-content{display:none}.imagify-tab-content .imagify-modal-section:first-child{margin-top:0}.imagify-modal-sidebar-content,.imagify-payment-modal .imagify-modal-sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-modal-sidebar-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}p.imagify-modal-sidebar-title{margin-top:5px;padding-right:40px;font-size:18px;color:#FFF}.imagify-modal-testimony{margin-top:1em}.imagify-modal-testimony+.imagify-modal-testimony{margin-top:2em}@media (max-height:620px){.imagify-modal-testimony+.imagify-modal-testimony{display:none}}.imagify-modal-testimony-person{display:table;width:100%}.imagify-modal-testimony-person>*{display:table-cell;vertical-align:middle}.imagify-modal-avatar{width:114px;line-height:0}.imagify-modal-avatar img{border:2px solid #FFF;border-radius:50%;width:96px;height:96px}.imagify-modal-identity a{text-decoration:none;font-weight:700}.imagify-modal-identity a:first-child{font-size:13px}.imagify-modal-identity a:first-child+a{display:block;font-size:10px;color:#7A8996}.imagify-modal-testimony-content p{font-size:13px;font-style:italic;line-height:1.7;color:#7A8996}.imagify-modal-sidebar-trust{margin-top:auto;padding-top:1.5em}.imagify-modal-sidebar-trust p{margin:0;font-weight:700;font-size:12px;line-height:1.7}.imagify-modal-sidebar-trust p img{margin-right:3px;vertical-align:-2px}.imagify-modal-sidebar-trust p+p{font-size:11px}.imagify-cart{text-align:left}.imagify-cart .imagify-cart-list{border-top:1px solid rgba(122,137,150,.2);border-bottom:1px solid rgba(122,137,150,.2)}.imagify-cart .imagify-cart-label{margin-bottom:.5em;font-size:10px;color:#2E3243}.imagify-cart-list p{margin:0;font-weight:700}.imagify-cart-item{margin:.4em 0}.imagify-cart .imagify-cart-suggestion{margin-top:-.3em}.imagify-cart-suggestion a,.imagify-cl-description p{font-size:10px}.imagify-remove-from-cart{border:0;padding:0;width:14px;height:14px;line-height:13px;border-radius:50%;background:#40B1D0;cursor:pointer;-webkit-transition:background .3s;-o-transition:background .3s;transition:background .3s}.imagify-remove-from-cart i:before{position:relative;top:-6px;left:-3px;font-size:13px;color:#FFF}.imagify-remove-from-cart:focus,.imagify-remove-from-cart:hover{background:#D0021B}.imagify-cart .imagify-cl-remove{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:45px}.imagify-cart .imagify-cl-name{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:200px}.imagify-cart .imagify-cl-description{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding-top:10px}.imagify-cart .imagify-cl-price{text-align:right}#imagify-payment-iframe{width:980px;height:672px;background:url(../images/loader-balls.svg) 50% 50% no-repeat #f6f7fb}.imagify-success-view{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.imagify-success-view p{font-weight:700;font-size:16px}.imagify-cart-emptied-item{margin:.3em auto;padding:6px 20px;background:#E6EBEF;border-radius:20px}.imagify-cart-emptied-item.imagify-cart-emptied-item p{font-weight:700}.imagify-cart-emptied-item a{color:#40b1d0;float:right;font-weight:700}
\ No newline at end of file
diff --git a/assets/js/bulk.min.js b/assets/js/bulk.min.js
index e67d97580..d48b98eb0 100755
--- a/assets/js/bulk.min.js
+++ b/assets/js/bulk.min.js
@@ -1 +1 @@
-window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-chart").next(".imagipercent").text(),10),d=[{value:c,color:"#00B3D3"},{value:100-c,color:"#D8D8D8"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}function f(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-ac-chart").attr("data-percent"),10),d=[{value:c,color:"#40B1D0"},{value:100-c,color:"#FFFFFF"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:70,tooltipEvents:[]})})}var g,h,i=b.getElementById("imagify-overview-chart"),j=[{value:imagifyBulk.labels.totalUnoptimizedAttachments,color:"#D9E4EB",highlight:"#D9E4EB",label:imagifyBulk.labels.overviewChartLabels.unoptimized},{value:imagifyBulk.labels.totalOptimizedAttachments,color:"#46B1CE",highlight:"#46B1CE",label:imagifyBulk.labels.overviewChartLabels.optimized},{value:imagifyBulk.labels.totalErrorsAttachments,color:"#2E3242",highlight:"#2E3242",label:imagifyBulk.labels.overviewChartLabels.error}];i&&(g=new Chart(i.getContext("2d")).Doughnut(j,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:85,legendTemplate:'<% for (var i=0; i <%if(segments[i].label){%><%=segments[i].label%><%}%> <%}%> ',tooltipTemplate:"<%= value %>"}),h='',a(j).each(function(a){h+=' '+j[a].label+" "}),h+=" ",b.getElementById("imagify-overview-chart-legend").innerHTML=h),a(b).on("heartbeat-send",function(a,b){b.imagify_heartbeat=imagifyBulk.heartbeat_id}),a(b).on("heartbeat-tick",function(b,c){c.imagify_bulk_data&&(c=c.imagify_bulk_data,a("#imagify-overview-chart-percent").html(c.optimized_attachments_percent+"% "),a(".imagify-total-percent").html(c.optimized_attachments_percent+"%"),a(".imagify-unconsumed-percent").html(c.unconsumed_quota+"%"),a(".imagify-unconsumed-bar").css("width",c.unconsumed_quota+"%"),a("#imagify-total-optimized-attachments").html(c.already_optimized_attachments),a("#imagify-original-bar").find(".imagify-barnb").html(c.original_human),a("#imagify-optimized-bar").css("width",c.optimized_percent+"%").find(".imagify-barnb").html(c.optimized_human),a("#imagify-total-optimized-attachments-pct").html(c.optimized_percent+"%"),g.segments[0].value=c.unoptimized_attachments,g.segments[1].value=c.optimized_attachments,g.segments[2].value=c.errors_attachments,g.update())}),a("#imagify-simulate-bulk-action").on("click",function(b){b.preventDefault(),a("#imagify-bulk-action").trigger("click")}),a("#imagify-bulk-action").on("click",function(b){var d,g=a(this),h=a('[name="optimization_level"]:checked').val();b.preventDefault(),void 0===h&&(h=-1),g.attr("disabled")||(g.attr("disabled","disabled"),g.find(".dashicons").addClass("rotate"),d=function(){return imagifyBulk.labels.processing},a(c).on("beforeunload",d),swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,imageUrl:imagifyBulk.labels.waitImageUrl}),a.get(ajaxurl+imagify.concat+"action="+imagifyBulk.ajax_action+"&optimization_level="+h+"&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val()).done(function(b){var h,i,j="",k="",l=0,m=0,n=0,o=0;if(!b.success)return g.removeAttr("disabled"),g.find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),"invalid-api-key"===b.data.message&&(j=imagifyBulk.labels.invalidAPIKeyTitle),"over-quota"===b.data.message&&(j=imagifyBulk.labels.overQuotaTitle,imagifyBulk.labels.overQuotaText),"no-images"===b.data.message&&(j=imagifyBulk.labels.noAttachmentToOptimizeTitle,k=imagifyBulk.labels.noAttachmentToOptimizeText),void swal({title:j,html:k,type:"info",customClass:"imagify-sweet-alert"});swal.close(),a(".imagify-row-progress").slideDown(),a(".imagify-no-uploaded-yet, .imagify-row-complete").hide(200),i=a(".imagify-bulk-table table tbody"),h=new ImagifyGulp({lib:ajaxurl+imagify.concat+"action=imagify_bulk_upload&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val(),images:b.data,context:imagifyBulk.ajax_context}),h.before(function(a){i.find(".imagify-row-progress").after(' "'+a.filename+' Compressing ')}).each(function(b){var c=a("#imagify-progress-bar"),d="error",f="dismiss",g="Error";if(c.css({width:b.progress+"%"}),c.find(".percent").html(b.progress+"%"),b.success)return a("#attachment-"+b.image+" .imagify-cell-status").html(' Complete '),a("#attachment-"+b.image+" .imagify-cell-original").html(b.original_size_human),a("#attachment-"+b.image+" .imagify-cell-optimized").html(b.new_size_human),a("#attachment-"+b.image+" .imagify-cell-percentage").html(''+b.percent+" %"),e(a("#attachment-"+b.image+" .imagify-cell-percentage").find("canvas")),a("#attachment-"+b.image+" .imagify-cell-thumbnails").html(b.thumbnails),a("#attachment-"+b.image+" .imagify-cell-savings").html(h.humanSize(b.overall_saving,1)),l=l+b.thumbnails+1,a(".imagify-cell-nb-files").html(l+" file(s)"),n+=b.original_overall_size,a(".imagify-total-original").html(h.humanSize(n,1)),o+=b.overall_saving,void a(".imagify-total-gain").html(h.humanSize(o,1));b.error.indexOf("You've consumed all your data")>=0&&swal({title:imagifyBulk.labels.overQuotaTitle,html:imagifyBulk.labels.overQuotaText,type:"error",customClass:"imagify-sweet-alert"}).then(function(){location.reload()}),b.error.indexOf("This image is already compressed")>=0?(d="warning",f="warning",g="Notice"):(m++,a(".imagify-cell-errors").html(m+" error(s)")),a("#attachment-"+b.image).after(''+b.error+" "),a("#attachment-"+b.image+" .imagify-cell-status").html(' '+g+" ")}).done(function(b){var e;g.removeAttr("disabled").find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),a(".imagify-row-progress").slideUp(),"NaN"!==b.global_percent&&(a(".imagify-row-complete").removeClass("hidden").addClass("done").attr("aria-hidden","false"),a("html, body").animate({scrollTop:a(".imagify-row-complete").offset().top},200),a(".imagify-ac-rt-total-gain").html(b.global_gain_human),a(".imagify-ac-rt-total-original").html(b.global_original_size_human),e=imagifyBulk.labels.textToShare,e=e.replace("%1$s",b.global_gain_human),e=e.replace("%2$s",b.global_original_size_human),e=encodeURIComponent(e),a(".imagify-sn-twitter").attr("href","https://twitter.com/intent/tweet?source=webclient&original_referer="+imagifyBulk.labels.pluginURL+"&text="+e+"&url="+imagifyBulk.labels.pluginURL+"&related=imagify&hastags=performance,web,wordpress"),a(".imagify-ac-chart").attr("data-percent",b.global_percent),f(a(".imagify-ac-chart").find("canvas")))}).error(function(a){imagify.log("Can't optimize image with id "+a)}).run()}).fail(function(){swal({title:imagifyBulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyBulk.labels.getUnoptimizedImagesErrorText,type:"error",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})}))})}(jQuery,document,window),function(a,b,c,d){var e,f;c.innerWidth?(e=(c.innerWidth-700)/2,f=(c.innerHeight-290)/2):(e=(b.body.clientWidth-700)/2,f=(b.body.clientHeight-290)/2),[].forEach.call(b.querySelectorAll(".imagify-share-networks a"),function(a){a.addEventListener("click",function(a){c.open(this.href,"","status=no, scrollbars=no, menubar=no, top="+f+", left="+e+", width=700, height=290"),a.preventDefault()},!1)})}(jQuery,document,window);
\ No newline at end of file
+window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-chart").next(".imagipercent").text(),10),d=[{value:c,color:"#00B3D3"},{value:100-c,color:"#D8D8D8"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}function f(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-ac-chart").attr("data-percent"),10),d=[{value:c,color:"#40B1D0"},{value:100-c,color:"#FFFFFF"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:70,tooltipEvents:[]})})}var g,h,i=b.getElementById("imagify-overview-chart"),j=[{value:imagifyBulk.labels.totalUnoptimizedAttachments,color:"#D9E4EB",highlight:"#D9E4EB",label:imagifyBulk.labels.overviewChartLabels.unoptimized},{value:imagifyBulk.labels.totalOptimizedAttachments,color:"#46B1CE",highlight:"#46B1CE",label:imagifyBulk.labels.overviewChartLabels.optimized},{value:imagifyBulk.labels.totalErrorsAttachments,color:"#2E3242",highlight:"#2E3242",label:imagifyBulk.labels.overviewChartLabels.error}];i&&(g=new Chart(i.getContext("2d")).Doughnut(j,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:85,legendTemplate:'<% for (var i=0; i <%if(segments[i].label){%><%=segments[i].label%><%}%> <%}%> ',tooltipTemplate:"<%= value %>"}),h='',a(j).each(function(a){h+=' '+j[a].label+" "}),h+=" ",b.getElementById("imagify-overview-chart-legend").innerHTML=h),a(b).on("heartbeat-send",function(a,b){b.imagify_heartbeat=imagifyBulk.heartbeat_id}),a(b).on("heartbeat-tick",function(b,c){c.imagify_bulk_data&&(c=c.imagify_bulk_data,a("#imagify-overview-chart-percent").html(c.optimized_attachments_percent+"% "),a(".imagify-total-percent").html(c.optimized_attachments_percent+"%"),a(".imagify-unconsumed-percent").html(c.unconsumed_quota+"%"),a(".imagify-unconsumed-bar").css("width",c.unconsumed_quota+"%"),a("#imagify-total-optimized-attachments").html(c.already_optimized_attachments),a("#imagify-original-bar").find(".imagify-barnb").html(c.original_human),a("#imagify-optimized-bar").css("width",c.optimized_percent+"%").find(".imagify-barnb").html(c.optimized_human),a("#imagify-total-optimized-attachments-pct").html(c.optimized_percent+"%"),g.segments[0].value=c.unoptimized_attachments,g.segments[1].value=c.optimized_attachments,g.segments[2].value=c.errors_attachments,g.update())}),a("#imagify-simulate-bulk-action").on("click",function(b){b.preventDefault(),a("#imagify-bulk-action").trigger("click")}),a("#imagify-bulk-action").on("click",function(b){var d,g=a(this),h=a('[name="optimization_level"]:checked').val();b.preventDefault(),void 0===h&&(h=-1),g.attr("disabled")||(g.attr("disabled","disabled"),g.find(".dashicons").addClass("rotate"),d=function(){return imagifyBulk.labels.processing},a(c).on("beforeunload",d),swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,imageUrl:imagifyBulk.labels.waitImageUrl}),a.get(ajaxurl+imagify.concat+"action="+imagifyBulk.ajax_action+"&optimization_level="+h+"&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val()).done(function(b){var h,i,j="",k="",l=0,m=0,n=0,o=0;if(!b.success)return g.removeAttr("disabled"),g.find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),"invalid-api-key"===b.data.message&&(j=imagifyBulk.labels.invalidAPIKeyTitle),"over-quota"===b.data.message&&(j=imagifyBulk.labels.overQuotaTitle,imagifyBulk.labels.overQuotaText),"no-images"===b.data.message&&(j=imagifyBulk.labels.noAttachmentToOptimizeTitle,k=imagifyBulk.labels.noAttachmentToOptimizeText),void swal({title:j,html:k,type:"info",customClass:"imagify-sweet-alert"});swal.close(),a(".imagify-row-progress").slideDown(),a(".imagify-no-uploaded-yet, .imagify-row-complete").hide(200),i=a(".imagify-bulk-table table tbody"),h=new ImagifyGulp({lib:ajaxurl+imagify.concat+"action=imagify_bulk_upload&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val(),images:b.data,context:imagifyBulk.ajax_context}),h.before(function(a){i.find(".imagify-row-progress").after(''+a.filename+' '+imagifyBulk.labels.optimizing+' ')}).each(function(b){var c=a("#imagify-progress-bar"),d="error",f="dismiss",g=imagifyBulk.labels.error;if(c.css({width:b.progress+"%"}),c.find(".percent").html(b.progress+"%"),b.success)return a("#attachment-"+b.image+" .imagify-cell-status").html(' '+imagifyBulk.labels.complete+" "),a("#attachment-"+b.image+" .imagify-cell-original").html(b.original_size_human),a("#attachment-"+b.image+" .imagify-cell-optimized").html(b.new_size_human),a("#attachment-"+b.image+" .imagify-cell-percentage").html(''+b.percent+" %"),e(a("#attachment-"+b.image+" .imagify-cell-percentage").find("canvas")),a("#attachment-"+b.image+" .imagify-cell-thumbnails").html(b.thumbnails),a("#attachment-"+b.image+" .imagify-cell-savings").html(h.humanSize(b.overall_saving,1)),l=l+b.thumbnails+1,a(".imagify-cell-nb-files").html(imagifyBulk.labels.nbrFiles.replace("%s",l)),n+=b.original_overall_size,a(".imagify-total-original").html(h.humanSize(n,1)),o+=b.overall_saving,void a(".imagify-total-gain").html(h.humanSize(o,1));b.error.indexOf("You've consumed all your data")>=0&&swal({title:imagifyBulk.labels.overQuotaTitle,html:imagifyBulk.labels.overQuotaText,type:"error",customClass:"imagify-sweet-alert"}).then(function(){location.reload()}),b.error.indexOf("This image is already compressed")>=0?(d="warning",f="warning",g=imagifyBulk.labels.notice):(m++,a(".imagify-cell-errors").html(imagifyBulk.labels.nbrErrors.replace("%s",m))),a("#attachment-"+b.image).after(''+b.error+" "),a("#attachment-"+b.image+" .imagify-cell-status").html(' '+g+" ")}).done(function(b){var e;g.removeAttr("disabled").find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),a(".imagify-row-progress").slideUp(),"NaN"!==b.global_percent&&(a(".imagify-row-complete").removeClass("hidden").addClass("done").attr("aria-hidden","false"),a("html, body").animate({scrollTop:a(".imagify-row-complete").offset().top},200),a(".imagify-ac-rt-total-gain").html(b.global_gain_human),a(".imagify-ac-rt-total-original").html(b.global_original_size_human),e=imagifyBulk.labels.textToShare,e=e.replace("%1$s",b.global_gain_human),e=e.replace("%2$s",b.global_original_size_human),e=encodeURIComponent(e),a(".imagify-sn-twitter").attr("href","https://twitter.com/intent/tweet?source=webclient&original_referer="+imagifyBulk.labels.pluginURL+"&text="+e+"&url="+imagifyBulk.labels.pluginURL+"&related=imagify&hastags=performance,web,wordpress"),a(".imagify-ac-chart").attr("data-percent",b.global_percent),f(a(".imagify-ac-chart").find("canvas")))}).error(function(a){imagify.log("Can't optimize image with id "+a+".")}).run()}).fail(function(){swal({title:imagifyBulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyBulk.labels.getUnoptimizedImagesErrorText,type:"error",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})}))})}(jQuery,document,window),function(a,b,c,d){var e,f;c.innerWidth?(e=(c.innerWidth-700)/2,f=(c.innerHeight-290)/2):(e=(b.body.clientWidth-700)/2,f=(b.body.clientHeight-290)/2),[].forEach.call(b.querySelectorAll(".imagify-share-networks a"),function(a){a.addEventListener("click",function(a){c.open(this.href,"","status=no, scrollbars=no, menubar=no, top="+f+", left="+e+", width=700, height=290"),a.preventDefault()},!1)})}(jQuery,document,window);
\ No newline at end of file
diff --git a/assets/js/imagify.min.js b/assets/js/imagify.min.js
index 5f61aad72..e13fa31b4 100644
--- a/assets/js/imagify.min.js
+++ b/assets/js/imagify.min.js
@@ -1 +1 @@
-!function(){"use strict";function a(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var b=function(){function a(a,b){for(var c=0;cthis.buffer_size?this.buffer_size:this.images_ids.length,b=0;bthis.buffer_size?this.buffer_size:this.images_ids.length,b=0;b 0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur",function(){var b=a(this),c=b.val();return""!==a.trim(c)&&(a("#check_api_key").val()===c?(a("#imagify-check-api-container").html(' '+imagifyAdmin.labels.ValidApiKeyText),!1):(!0===e?f.abort():(a("#imagify-check-api-container").remove(),b.after(' '+imagifyAdmin.labels.waitApiKeyCheckText+" ")),e=!0,void(f=a.get(ajaxurl+imagify.concat+"action=imagify_check_api_key_validity&api_key="+b.val()+"&imagifycheckapikeynonce="+a("#imagifycheckapikeynonce").val()).done(function(b){b.success?(a("#imagify-check-api-container").remove(),swal({title:imagifyAdmin.labels.ApiKeyCheckSuccessTitle,html:imagifyAdmin.labels.ApiKeyCheckSuccessText,type:"success",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html(' '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click",function(b){if("INPUT"!==b.target.nodeName)return a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click"),!1}),a(".imagify-settings th span").on("click",function(){var b=a(this).parent().next("td").find("input:checkbox");1===b.length&&b.trigger("click")}),a(".imagify-options-line").find("input").on("change focus",function(){var b=a(this).closest(".imagify-options-line").prev("label").prev("input");b[0].checked||b.prop("checked",!0)}),a(".imagify-settings-section").find("#backup").on("change",function(){var b=a(this);b.is(":checked")||swal({title:imagifyOptions.noBackupTitle,html:imagifyOptions.noBackupText,type:"warning",customClass:"imagify-sweet-alert",showCancelButton:!0,cancelButtonText:imagifyAdmin.labels.swalCancel,reverseButtons:!0}).then(function(){},function(){b.prop("checked",!0)})})}(jQuery,document,window),function(a,b,c,d){var e=c.propHooks.checked;c.propHooks.checked={set:function(a,b,d){var f;return f=void 0===e?a[d]=b:e(a,b,d),c(a).trigger("change.imagify"),f}},c(".imagify-check-group .imagify-row-check").on("click",function(a){var b=c(this).closest(".imagify-check-group"),d=0===b.find(".imagify-row-check").filter(":visible:enabled").not(":checked").length;b.find(".imagify-toggle-check").prop("checked",d)}).first().trigger("change.imagify"),c(".imagify-check-group .imagify-toggle-check").on("click.wp-toggle-checkboxes",function(a){var b=c(this),d=b.closest(".imagify-check-group"),e=b.prop("checked"),f=a.shiftKey||b.data("wp-toggle");d.find(".imagify-toggle-check").prop("checked",function(){var a=c(this);return!a.is(":hidden,:disabled")&&(f?!a.prop("checked"):!!e)}),d.find(".imagify-row-check").prop("checked",function(){return!f&&!!e})})}(window,document,jQuery);
\ No newline at end of file
+window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur",function(){var b=a(this),c=b.val();return""!==a.trim(c)&&(a("#check_api_key").val()===c?(a("#imagify-check-api-container").html(' '+imagifyAdmin.labels.ValidApiKeyText),!1):(!0===e?f.abort():(a("#imagify-check-api-container").remove(),b.after(' '+imagifyAdmin.labels.waitApiKeyCheckText+" ")),e=!0,void(f=a.get(ajaxurl+imagify.concat+"action=imagify_check_api_key_validity&api_key="+b.val()+"&imagifycheckapikeynonce="+a("#imagifycheckapikeynonce").val()).done(function(b){b.success?(a("#imagify-check-api-container").remove(),swal({title:imagifyAdmin.labels.ApiKeyCheckSuccessTitle,html:imagifyAdmin.labels.ApiKeyCheckSuccessText,type:"success",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html(' '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click",function(b){if("INPUT"!==b.target.nodeName)return a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click"),!1}),a(".imagify-settings th span").on("click",function(){var b=a(this).parent().next("td").find("input:checkbox");1===b.length&&b.trigger("click")}),a(".imagify-options-line").find("input").on("change focus",function(){var b=a(this).closest(".imagify-options-line").prev("label").prev("input");b[0].checked||b.prop("checked",!0)}),a(".imagify-settings-section").find("#backup").on("change",function(){var b=a(this),c=b.siblings("#backup-dir-is-writable"),d={action:"imagify_check_backup_dir_is_writable",_wpnonce:c.data("nonce")};if(b.is(":checked"))return void a.getJSON(ajaxurl,d).done(function(b){a.isPlainObject(b)&&b.success&&(b.data.is_writable?c.addClass("hidden"):c.removeClass("hidden"))});swal({title:imagifyOptions.noBackupTitle,html:imagifyOptions.noBackupText,type:"warning",customClass:"imagify-sweet-alert",showCancelButton:!0,cancelButtonText:imagifyAdmin.labels.swalCancel,reverseButtons:!0}).then(function(){c.addClass("hidden")},function(){b.prop("checked",!0)})})}(jQuery,document,window),function(a,b,c,d){var e=c.propHooks.checked;c.propHooks.checked={set:function(a,b,d){var f;return f=void 0===e?a[d]=b:e(a,b,d),c(a).trigger("change.imagify"),f}},c(".imagify-check-group .imagify-row-check").on("click",function(){var a=c(this).closest(".imagify-check-group"),b=0===a.find(".imagify-row-check").filter(":visible:enabled").not(":checked").length;a.find(".imagify-toggle-check").prop("checked",b)}).first().trigger("change.imagify"),c(".imagify-check-group .imagify-toggle-check").on("click.wp-toggle-checkboxes",function(a){var b=c(this),d=b.closest(".imagify-check-group"),e=b.prop("checked"),f=a.shiftKey||b.data("wp-toggle");d.find(".imagify-toggle-check").prop("checked",function(){var a=c(this);return!a.is(":hidden,:disabled")&&(f?!a.prop("checked"):!!e)}),d.find(".imagify-row-check").prop("checked",function(){return!f&&!!e})})}(window,document,jQuery);
\ No newline at end of file
From 10a762c9fb49e165713b6ac1f7806c33194b62c2 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Tue, 25 Jul 2017 02:03:22 +0200
Subject: [PATCH 37/38] Hotfix: get readme.txt ready for 1.6.8.
---
readme.txt | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/readme.txt b/readme.txt
index 7c1132186..28ac353ea 100755
--- a/readme.txt
+++ b/readme.txt
@@ -3,7 +3,7 @@ Contributors: wp_media, GregLone
Tags: compress image, images, performance, optimization, photos, upload, resize, gif, png, jpg, reduce image size, retina
Requires at least: 3.7.0
Tested up to: 4.8.0
-Stable tag: 1.6.7.1
+Stable tag: 1.6.8
Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.
@@ -136,6 +136,14 @@ When the plugin is disabled, your existing images remain optimized. Backups of t
3. Media Page
== Changelog ==
+= 1.6.8 =
+* Improvement: don't display the restore bulk action in the medias list if there is nothing to restore.
+* Improvement: you can know select and unselect all image sizes at once in the settings page.
+* Improvement: detect when the backup directory is not writable. A warning is displayed dynamically under the backup setting, a notice is also displayed on some pages.
+* Improvement: some strings were still not translated in the bulk optimization page.
+* Bug Fix: the "Save & Go to Bulk Optimizer" button now redirects you even if no settings have been changed.
+* Lots of various small fixes and code improvements.
+
= 1.6.7.1 =
* Bug Fix: Fixed the "Unknown error" during a bulk optimization.
From acd99a48daf7b5db3ef1bdca93d7c512dab03312 Mon Sep 17 00:00:00 2001
From: Git I Hate You
Date: Wed, 26 Jul 2017 15:53:19 +0200
Subject: [PATCH 38/38] Hotfix: improved the error messages displayed when the
backup directory doesn't exist or is not writable. Also: - actually use
`imagify_backup_dir_is_writable()` in
`_imagify_warning_backup_folder_not_writable_notice()`, it was created for
this use :| - added a `$bypass_error` parameter to
`get_imagify_upload_basedir()` and `get_imagify_backup_dir_path()`, so we can
get the path even if there is an error. This prevents displaying an empty
path when the uploads folder is not writable.
---
inc/admin/ui/notices.php | 22 +++++++++++++---------
inc/admin/ui/options.php | 4 ++--
inc/functions/attachments.php | 28 ++++++++++++++++------------
3 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/inc/admin/ui/notices.php b/inc/admin/ui/notices.php
index 6eb02f6db..3700e37e6 100755
--- a/inc/admin/ui/notices.php
+++ b/inc/admin/ui/notices.php
@@ -353,14 +353,21 @@ function _imagify_warning_backup_folder_not_writable_notice() {
return;
}
- $filesystem = imagify_get_filesystem();
- $has_backup_dir = wp_mkdir_p( get_imagify_backup_dir_path() );
-
- if ( $has_backup_dir && $filesystem->is_writable( get_imagify_backup_dir_path() ) ) {
+ if ( imagify_backup_dir_is_writable() ) {
return;
}
- $backup_path = imagify_make_file_path_replative( get_imagify_backup_dir_path() );
+ $filesystem = imagify_get_filesystem();
+
+ if ( $filesystem->exists( get_imagify_backup_dir_path() ) ) {
+ /* translators: %s is a file path. */
+ $message = __( 'The backup folder %s is not writable by the server, original images cannot be saved!', 'imagify' );
+ } else {
+ /* translators: %s is a file path. */
+ $message = __( 'The backup folder %s cannot be created. Is its parent directory writable by the server? Original images cannot be saved!', 'imagify' );
+ }
+
+ $backup_path = imagify_make_file_path_replative( get_imagify_backup_dir_path( true ) );
?>
@@ -368,10 +375,7 @@ function _imagify_warning_backup_folder_not_writable_notice() {
-
$backup_path" );
- ?>
+
$backup_path" ); ?>
$backup_path" );
+ printf( __( 'The backup folder %s cannot be created or is not writable by the server, original images cannot be saved!', 'imagify' ), "$backup_path
" );
?>
diff --git a/inc/functions/attachments.php b/inc/functions/attachments.php
index 3c6ac900f..247e547a2 100755
--- a/inc/functions/attachments.php
+++ b/inc/functions/attachments.php
@@ -50,16 +50,17 @@ function imagify_is_attachment_mime_type_supported( $attachment_id ) {
* @since 1.6.8
* @author Grégory Viguier
*
- * @return string|bool Path to the backups directory. False on failure.
+ * @param bool $bypass_error True to return the path even if there is an error. This is used when we want to display this path in a message for example.
+ * @return string|bool Path to the backups directory. False on failure.
*/
-function get_imagify_backup_dir_path() {
+function get_imagify_backup_dir_path( $bypass_error = false ) {
static $backup_dir;
if ( isset( $backup_dir ) ) {
return $backup_dir;
}
- $upload_basedir = get_imagify_upload_basedir();
+ $upload_basedir = get_imagify_upload_basedir( $bypass_error );
if ( ! $upload_basedir ) {
return false;
@@ -223,27 +224,30 @@ function get_imagify_thumbnail_sizes() {
* A simple helper to get the upload basedir.
*
* @since 1.6.7
+ * @since 1.6.8 Added the $bypass_error parameter.
* @author Grégory Viguier
*
- * @return string|bool The path. False on failure.
+ * @param bool $bypass_error True to return the path even if there is an error. This is used when we want to display this path in a message for example.
+ * @return string|bool The path. False on failure.
*/
-function get_imagify_upload_basedir() {
+function get_imagify_upload_basedir( $bypass_error = false ) {
static $upload_basedir;
+ static $upload_basedir_or_error;
if ( isset( $upload_basedir ) ) {
- return $upload_basedir;
+ return $bypass_error ? $upload_basedir : $upload_basedir_or_error;
}
- $uploads = wp_upload_dir();
+ $uploads = wp_upload_dir();
+ $upload_basedir = trailingslashit( wp_normalize_path( $uploads['basedir'] ) );
if ( false !== $uploads['error'] ) {
- $upload_basedir = false;
- return $upload_basedir;
+ $upload_basedir_or_error = false;
+ } else {
+ $upload_basedir_or_error = $upload_basedir;
}
- $upload_basedir = trailingslashit( wp_normalize_path( $uploads['basedir'] ) );
-
- return $upload_basedir;
+ return $bypass_error ? $upload_basedir : $upload_basedir_or_error;
}
/**